Releases: thomaschristory/netbox-super-cli
v1.0.5
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, oroff— controls colored output.
Table cells are colored by meaning: status values (active/enabled/online
green,planned/stagedyellow,failed/disabled/offlinered), booleans,
and empty cells.nsc explaintraces and Rich error panels are colored too.
stdout and stderr are gated independently by each stream's own TTY, so
nsc … | jqandnsc … 2>err.logno 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
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
urllib32.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-existentnsc describe/nsc refreshcommands; documented the realreplace(PUT) verb; corrected the HTTP retry policy (writes are never retried on 5xx); corrected the schema-cache invalidation model to the TTL fast-path; documentednsc skill export,nsc login --fetch-schema, and the post-login --newschema-fetch prompt; and corrected exit-code semantics (a malformed single JSON/YAML input is aclient/exit-6 error — only a bad NDJSON line isinput_error/exit 4). Auto-generated reference pages were verified current.
v1.0.3
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 --newprompts to fetch the live schema (issue #32, PR #44). After a new profile is created,nsc loginasks 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 bundledSKILL.mdto an arbitrary directory so it can be dropped into any agent harness withoutnscon thePATH. 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
nscfetched/api/schema/and the live hash matched an existing cache file, it returned the cachedCommandModelwithout bumping the sidecar'sfetched_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_cachenow calls a newCacheStore.touch_fetched_atto 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--rolebefore applying--filter, avoiding a full-table scan on large NetBox instances.
v1.0.2
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).
nscnow skips the per-invocationGET /api/schema/round-trip when a sidecar-validated cache entry is fresh. Freshness is tracked in~/.nsc/cache/<profile>/<hash>.meta.json(an explicitfetched_attimestamp), not file mtime — sotouch, backup-restore, orcp -pcan'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 ondaily/weekly/manualpolicies. Use after a NetBox upgrade to pick up a new schema immediately without changing config.- Atomic cache writes —
CacheStore.savenow writes via temp-file +os.replace, so a concurrentnscreader can never observe a partial cache file. nsc initprompts for SSL verification (issue #22). The first-run wizard now asksVerify SSL certificates?(defaultsY) after URL entry. Accepting the default keeps the config minimal (noverify_sslkey written); answeringnwritesverify_ssl: falseinto the profile block.
Changed
- Default
defaults.schema_refreshis nowdaily(wason-hash-change). This is the user-visible behaviour change behind the fast-path: under the new default,nsctrusts a cached schema for 24h. If you need the v1.0.1 behaviour (re-fetch every invocation to detect a schema change immediately), setdefaults.schema_refresh: on-hash-changein~/.nsc/config.yaml. To force a one-shot refresh under any policy, prepend--refresh-schemato the command. Existing configs with an explicitschema_refreshvalue are unaffected. - Cache files written before this release have no sidecar and will be treated as stale on first invocation after upgrade —
nscrefetches 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 onmain(PR #28). - Bundled Skill (
skills/netbox-super-cli/SKILL.md) gained a NetBox device type library section (PR #27).
v1.0.1
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'sverify_ssl: false(issue #8). Thecommandsmeta-command bypasses the bootstrap pipeline that resolves the SSL flag, so it had been callinghttpx.getwithverify=Trueregardless of the user's configuration. The handler now reads the global state and a newresolve_transport_settingshelper computes(verify_ssl, timeout)without requiring URL/token (whichcommandsdoes not need).nsc commandsandnsc config <…>now run when~/.nsc/config.yamlfails to parse (issue #10). TheConfigParseErrorrecovery branch innsc/cli/app.py:_rootlisted only 5 of the 7 meta subcommands —commandsandconfigwere missing, so running them against a malformed config aborted with the unhelpful root-levelError: <ConfigParseError>instead of recovering to an emptyConfig(). The recovery set is now sourced from_META_COMMANDSdirectly (single source of truth).
v1.0.0
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.0works 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 frommain, verifies the tag's version suffix matchesnsc/_version.py, verifies the built wheel/sdist filenames match the tag, then publishes viapypa/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 ofCLAUDE.mdfor agent harnesses that look for that filename. Auto-generated byscripts/sync_agents_md.py; CI fails any PR that drifts the two via the newagents-md-syncworkflow and theagents-md-freshjob in thelintworkflow.
Changed
pyproject.toml— version bumped from0.0.1to1.0.0;[project].licensemodernized 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__innsc/cli/app.py:12); the build reads[project].versionfrompyproject.toml. Both sources are now in lockstep.