Skip to content

Releases: thomaschristory/netbox-super-cli

v1.0.5

21 May 21:45
cefa0da

Choose a tag to compare

v1.0.5 — 2026-05-21

Adds opt-in semantic terminal coloring (issue #24). No config migration is
needed — color_mode defaults to auto, which colors a stream only when it
is a TTY, so piped and redirected output is byte-for-byte unchanged.

Added

  • Semantic terminal coloring (issue #24, PR #72). A new defaults.color_mode
    config field — auto (default), on, or off — controls colored output.
    Table cells are colored by meaning: status values (active/enabled/online
    green, planned/staged yellow, failed/disabled/offline red), booleans,
    and empty cells. nsc explain traces and Rich error panels are colored too.
    stdout and stderr are gated independently by each stream's own TTY, so
    nsc … | jq and nsc … 2>err.log no longer mis-color one stream or leak
    ANSI into the other. Structured formats (json, jsonl, yaml, csv) are
    never colored. All server- and user-sourced text is escaped before Rich
    markup parsing, so stray [/] in API responses cannot garble output.

v1.0.4

16 May 10:55
2e372e7

Choose a tag to compare

v1.0.4 — 2026-05-16

Maintenance release: a codebase-wide internal simplification pass (no behavioural change), a full documentation parity audit, and a dependency bump. There are no CLI, config, or output-contract changes — upgrading from v1.0.3 is transparent.

Changed

  • Codebase-wide simplification pass (PRs #61#71). Every package was audited to remove dead code, tighten types, and drop unreachable branches: schema parsing (#61), cache store & schema source (#62), output (#63), command model / alias resolver / auth verify (#64), config (#65), http (#66), cli (#68), builder (#69), top-level package files (#70), and the cli writes pipeline (#71). These are internal-only changes — the public CLI surface, command tree, error envelope, and exit codes are unchanged and remain covered by the existing test suite.
  • Bumped urllib3 2.6.3 → 2.7.0 (PR #46).

Documentation

  • Full documentation parity audit (PR #73). Every hand-written user-facing and contributor page, plus the bundled SKILL.md, was audited file-by-file against the current code and corrected. Notable fixes: removed references to non-existent nsc describe / nsc refresh commands; documented the real replace (PUT) verb; corrected the HTTP retry policy (writes are never retried on 5xx); corrected the schema-cache invalidation model to the TTL fast-path; documented nsc skill export, nsc login --fetch-schema, and the post-login --new schema-fetch prompt; and corrected exit-code semantics (a malformed single JSON/YAML input is a client/exit-6 error — only a bad NDJSON line is input_error/exit 4). Auto-generated reference pages were verified current.

v1.0.3

07 May 12:40
aa8fccf

Choose a tag to compare

v1.0.3 — 2026-05-07

Third patch release. Headline changes: nsc login --new now prompts to fetch the live schema (issue #32), the schema TTL fast-path self-heals on hash-confirmed fetches (issue #39), and bundled schemas are updated to 4.5.10 and 4.6.0.

Added

  • nsc login --new prompts to fetch the live schema (issue #32, PR #44). After a new profile is created, nsc login asks whether to fetch the live OpenAPI spec immediately. Answering yes primes the schema cache so the next command skips the bootstrap fetch entirely.
  • nsc skill export <dir> (PR #37). Copies the bundled SKILL.md to an arbitrary directory so it can be dropped into any agent harness without nsc on the PATH. Useful in CI or shared-skill repos where the package is not installed globally.
  • Bundled schemas updated (PR #36). Ships 4.5.10 and 4.6.0; drops the 4.6.0-beta2 snapshot. Offline fallback is now available for both stable release lines.

Fixed

  • Schema TTL fast-path now self-heals after a hash-confirmed fetch (issue #39). When nsc fetched /api/schema/ and the live hash matched an existing cache file, it returned the cached CommandModel without bumping the sidecar's fetched_at. So an aged-out sidecar — or a legacy cache from before the sidecar feature — never gained proof of freshness and every subsequent invocation refetched the schema, defeating the v1.0.2 fast-path. _build_and_cache now calls a new CacheStore.touch_fetched_at to refresh (or seed) the sidecar after any successful live fetch, so the next invocation hits the fast path.

Documentation

  • Bundled Skill (skills/netbox-super-cli/SKILL.md) gained a scope-then-filter pattern for multi-device bulk reads (PR #41). The guidance shows how to narrow with --site, --rack, or --role before applying --filter, avoiding a full-table scan on large NetBox instances.

v1.0.2

07 May 07:08
52455c9

Choose a tag to compare

v1.0.2 — 2026-05-07

Second patch release. Headline change is the schema TTL fast-path (issue #34), which eliminates the per-invocation GET /api/schema/ round-trip on warm caches. Also includes a small nsc init UX addition (verify_ssl prompt) and the documentation pass that landed since v1.0.1.

Added

  • Schema TTL fast-path (issue #34). nsc now skips the per-invocation GET /api/schema/ round-trip when a sidecar-validated cache entry is fresh. Freshness is tracked in ~/.nsc/cache/<profile>/<hash>.meta.json (an explicit fetched_at timestamp), not file mtime — so touch, backup-restore, or cp -p can't fake freshness, and clocks that jumped forward then back are rejected (>60s skew distrusted).
  • nsc --refresh-schema <subcmd> — one-shot forced refresh that bypasses the TTL even on daily/weekly/manual policies. Use after a NetBox upgrade to pick up a new schema immediately without changing config.
  • Atomic cache writes — CacheStore.save now writes via temp-file + os.replace, so a concurrent nsc reader can never observe a partial cache file.
  • nsc init prompts for SSL verification (issue #22). The first-run wizard now asks Verify SSL certificates? (defaults Y) after URL entry. Accepting the default keeps the config minimal (no verify_ssl key written); answering n writes verify_ssl: false into the profile block.

Changed

  • Default defaults.schema_refresh is now daily (was on-hash-change). This is the user-visible behaviour change behind the fast-path: under the new default, nsc trusts a cached schema for 24h. If you need the v1.0.1 behaviour (re-fetch every invocation to detect a schema change immediately), set defaults.schema_refresh: on-hash-change in ~/.nsc/config.yaml. To force a one-shot refresh under any policy, prepend --refresh-schema to the command. Existing configs with an explicit schema_refresh value are unaffected.
  • Cache files written before this release have no sidecar and will be treated as stale on first invocation after upgrade — nsc refetches once, writes the sidecar, and the fast-path is active from there.

Documentation

  • LICENSE file normalized byte-for-byte to the apache.org canonical Apache 2.0 text (issue #18).
  • Trunk-based branching guide added at docs/contributing/branching.md; branch protection enabled on main (PR #28).
  • Bundled Skill (skills/netbox-super-cli/SKILL.md) gained a NetBox device type library section (PR #27).

v1.0.1

06 May 16:14

Choose a tag to compare

v1.0.1 — 2026-05-06

First patch release. Two bug fixes; no API or behavior changes elsewhere.

Fixed

  • nsc commands --schema <https-url> now honours --insecure, NSC_INSECURE, and the active profile's verify_ssl: false (issue #8). The commands meta-command bypasses the bootstrap pipeline that resolves the SSL flag, so it had been calling httpx.get with verify=True regardless of the user's configuration. The handler now reads the global state and a new resolve_transport_settings helper computes (verify_ssl, timeout) without requiring URL/token (which commands does not need).
  • nsc commands and nsc config <…> now run when ~/.nsc/config.yaml fails to parse (issue #10). The ConfigParseError recovery branch in nsc/cli/app.py:_root listed only 5 of the 7 meta subcommands — commands and config were missing, so running them against a malformed config aborted with the unhelpful root-level Error: <ConfigParseError> instead of recovering to an empty Config(). The recovery set is now sourced from _META_COMMANDS directly (single source of truth).

v1.0.0

06 May 09:32

Choose a tag to compare

v1.0.0 — 2026-05-06

The 1.0.0 release. nsc is now a published package on PyPI: pip install netbox-super-cli (or uv tool install netbox-super-cli). Phase 5 (the v1.0.0 release line) shipped over four sub-phases: 5a added cache management and a static-completion CI contract; 5b shipped the MkDocs Material site at https://thomaschristory.github.io/netbox-super-cli/ with auto-generated reference pages and a CI drift check; 5c bundled the portable Skill at skills/netbox-super-cli/SKILL.md with a one-command install helper for four agent harnesses; 5d wired the PyPI release pipeline (trusted publishing, no API tokens), the AGENTS.md drift-check, and modernized the package metadata to PEP 639 SPDX form. Test count: 569 (552 from 5b + 17 from 5c — 5d added no runtime tests). Bench median: 263ms (300ms target).

Added

  • PyPI distribution. pip install netbox-super-cli==1.0.0 works from a clean venv. The wheel ships the bundled OpenAPI snapshots (nsc/schemas/bundled/) and the bundled portable Skill (skills/netbox-super-cli/SKILL.md) via [tool.hatch.build.targets.wheel.force-include].
  • .github/workflows/release.yml — tag-triggered build + trusted-publish + GitHub Release create. The workflow narrows the tag trigger to release-shaped versions (v[0-9]*.[0-9]*.[0-9]*), verifies the tag's commit is reachable from main, verifies the tag's version suffix matches nsc/_version.py, verifies the built wheel/sdist filenames match the tag, then publishes via pypa/gh-action-pypi-publish@release/v1 (no API token; OIDC trusted publishing) and creates a GitHub Release with the matching CHANGELOG section as notes.
  • AGENTS.md — vendor-neutral mirror of CLAUDE.md for agent harnesses that look for that filename. Auto-generated by scripts/sync_agents_md.py; CI fails any PR that drifts the two via the new agents-md-sync workflow and the agents-md-fresh job in the lint workflow.

Changed

  • pyproject.toml — version bumped from 0.0.1 to 1.0.0; [project].license modernized from the deprecated table form { text = "Apache-2.0" } to the PEP 639 SPDX expression "Apache-2.0"; license-files = ["LICENSE"] added so the canonical Apache 2.0 text ships in the sdist + wheel metadata.
  • nsc/_version.py__version__ bumped to "1.0.0" to match. The CLI reads from this module (from nsc._version import __version__ in nsc/cli/app.py:12); the build reads [project].version from pyproject.toml. Both sources are now in lockstep.