Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.6.1] - 2026-09-08

Added

  • Expose the transport and candidate APIs signing needs (oci)
  • Grant a whole subtree in [shell.consent] paths with a trailing /* (shell) BREAKING
  • Describe every report type with JsonSchema (api)
  • Publish the --format json report contract (schema)
  • Emit an exec-time resolution record (record)
  • Add exit code 86 for a forge capability a transport needs (cli)
  • Add the git write transport and the forge identity ladder (forge)
  • Claim a namespace from the CLI with ocx package claim (package) BREAKING
  • Take the package as a positional, add --transport git (announce) BREAKING
  • Render a project toolchain home and put it on the session PATH (toolchain) BREAKING
  • Let ocx init consent to the project it creates (cli)
  • Let a machine caller run without consenting to the project it touches (cli)
  • Allow "bin" as a group and tool name again (project)
  • Render the tree under links/ and shells/, behind an active link (toolchain) BREAKING
  • Report the toolchain launcher directory in ocx shell state (cli)

Changed

  • Expose the ocx crate as a library target (cli)
  • Make C-044's per-prompt budget a hard 10 ms ceiling (shell)
  • Move the announce clock into oci::index for claim (index)

Documentation

  • Size the latency injection against the runner, not the dev box (shell)
  • Document HTTP proxy support and the SSRF guard's behaviour behind one (website)
  • Document claiming a namespace, its env vars and exit 86 (claim)
  • Document toolchain activation, session PATH and the toolchain-dir key (toolchain)
  • Fold claiming into the authoring announce guide (announce)
  • Document the closed depth-1 tree and read toolchain_bin for PATH (toolchain)
  • Name links/<group>/<entry> and active/bin in help text and schemas (toolchain)
  • Name active/bin where the sentence names its global sibling (toolchain)
  • Point the --pinned help at the links/<group>/<entry> tree (cli)
  • Describe the rendered toolchain the same way in lock, update and remove help (cli)

Fixed

  • Sweep signs once per subject digest, not once per tag (sign)
  • Report a malformed paths entry even when it matches the project (shell)
  • Stop an abstaining latency run from reading as PASSED (shell)
  • Honour HTTP proxy settings in the SSRF guard so proxied networks can pull (oci)
  • Stop at an authoritative index miss instead of falling through to the registry for manifest and blob fetches (oci)
  • Exit 69, not 78 or 64, when a guarded registry or Sigstore host does not resolve (oci) BREAKING
  • Rebuild a diverged announce branch on the index base instead of reading it as truth (announce)
  • Name the per-package patch opt-out no_patches in JSON output (status) BREAKING
  • Drop the reserved platform features property and describe AliasTag as a string (schema)
  • Widen the non-fast-forward retry to commit and open (announce)
  • Run an already-pulled tool offline instead of asking the index where it lives (oci)
  • Name the claimed unit the package, not the namespace (claim) BREAKING
  • Honour the activate mode at login, not only at the prompt (shell) BREAKING
  • Let the global toolchain's ocx pin win over the installed binary (shell) BREAKING
  • Resolve script reads against the bundle content, not the store dir (script) BREAKING
  • Reconcile a project created where the shell already is (shell)
  • Watch the project file OCX_PROJECT names, not a hardcoded ocx.toml (shell)
  • Keep write-tree off the network in a blobless checkout (announce)
  • Read GitLab through endpoints a CI job token may call (announce)
  • Admit a publisher its index allowlists by group (announce)
  • Let a CI job token past the scope lists GitLab closes to it (announce)
  • Never commit an index root onto a branch head the run did not read (announce)
  • Heal a link a copy replaced with a directory, or name the fix (toolchain)
  • Exclude both trampoline directory spellings from command lookup (exec)
  • Withhold the toolchain PATH entry when active is not the derived link (shell)
  • Retire the stale &lt;toolchain&gt;/bin entry from the session PATH (setup)
  • Tell the user how to clear a group directory a render cannot prune (toolchain)
  • A group dropped from the lock now leaves the rendered tree (toolchain)
  • Keep the session PATH store unchanged when ocx self setup re-runs (setup)
  • A render never deletes a file ocx did not write from a group (toolchain)
  • Keep a foreign file at a pruned toolchain name instead of deleting it silently (toolchain)
  • Re-judge the toolchain links/ directory at the moment a link is written (toolchain)
  • Read a signal-killed push's verdict from the remote, not from the corpse (forge)
  • Stop linting docs-quality's fixtures, which are checker inputs (tasks)

[0.6.0] - 2026-08-30

Added

  • Keyless Sigstore signing and identity-pinned verification over OCI referrers (sign) BREAKING
  • Distribute the Sigstore trusted root through config, the OCX home, and managed config packages (trust)
  • Publish and verify DSSE in-toto attestations over OCI referrers (oci)
  • Unsigned SBOM referrers with demand/permissive verification on package sbom (oci)
  • Accept an include/exclude scope set in a trust policy (trust)
  • Add wasm platforms (wasip1/wasm, wasip2/wasm) and enforce supported platform pairs (oci)
  • Add ocx package copy to promote a built artifact between registries (cli)
  • Support GitLab, self-hosted forges and nested group paths (announce)
  • Declare plain HTTP per registry; refuse unsafe destinations with exit 65 (oci) BREAKING
  • Reconcile the environment on every prompt, replacing direnv (shell) BREAKING
  • Rename run to exec, describe/info to description push/pull (cli) BREAKING
  • Sign, attest and verify packages compatibly with cosign (sign)
  • Read the signing key from an environment variable with --key env://VAR (sign)
  • Carry cosign .sig/.att/.sbom sidecar tags to the destination (copy)
  • Exit 65 when a destination sidecar tag is refused (copy) BREAKING

Changed

  • Cache and coalesce the registry authentication handshake (oci)
  • Make ocx index sync fast and survive a transient failure (index)
  • Make a configured index authoritative for its whole registry (oci) BREAKING
  • Read a local-file reference through one shared grammar (config)

Documentation

  • integrations is not devcontainer's customizations (package)
  • Add Katherine Draheim as Marketing & Community Lead (website)
  • Add a self-hosted Sigstore guide covering GitHub and GitLab as OIDC issuers (signing)
  • Document attesting, verifying and reading SBOMs with use-case casts (website)
  • Document unsigned SBOM attach and the sbom verification modes with casts (website)
  • Replace the jfrog placeholder mirror host and document the manifest gate (website)
  • Correct index update/sync partial-commit granularity to per-tag (index)
  • Say why the owners fixture is the wrong shape (oci/index)

Fixed

  • Publish every JSON Schema, not just metadata (website)
  • Record casts in the scenario dir, not the repo's test tree (test)
  • Fetch Git LFS assets when building the website (ci)
  • Refuse a non-manifest registry response with the response named (oci)
  • Classify a wire digest mismatch as a data error (oci)
  • Name the mirror a failed fetch was routed through (oci)
  • Decide mirror provenance from the fetch, not the host (oci)
  • Annotate auth and manifest-shape failures with mirror provenance (oci)
  • Bound ocx index catalog --tags to a fixed number of in-flight listings (cli)
  • Wait out a contended ocx.toml lock and refuse a symlink planted mid-retry (project)
  • Gate the wasm test helper to unix so the Windows build compiles (package)
  • Re-sync a fork behind upstream before replaying the commit (announce)
  • Cascade into a target repository that does not exist yet (publisher) BREAKING
  • Decide any-pin provenance on the canonical registry (publisher) BREAKING
  • Hard links resolve under the extraction root, not the host (archive) BREAKING
  • Exit 74 when writing the --out tree fails (announce)
  • Refuse index = "file:/srv/x" instead of resolving it as a host (index)
  • Bound the project walk with a relative OCX_CEILING_PATH (config)
  • Resolve the $OCX_HOME default in one place (config)
  • Bound every operator-typed trust-root, tags and token file read (verify)
  • An unreadable trusted-root path exits 74, not 78 (verify)
  • Bound the tags-file read --tags-file does before merging (push)
  • Resolve each Rekor log key once per run, and cache trust material after a sidecar verify (verify)
  • List every SBOM a cosign .sbom tag or referrer manifest carries, not just the first (verify)
  • Resolve each swept tag once instead of twice (sign)
  • Read a file:// trusted root at every door, not only verify and sbom (trust)

Release

  • V0.6.0

[0.5.8] - 2026-08-11

Added

  • Snapshot a whole registry into a servable local index (index)
  • --json is shorthand for --format json (cli)
  • Every ${…} in package metadata follows one grammar (package) BREAKING
  • Compose vendor-namespaced package integrations with per-package attribution (env)
  • -g and -r short forms for --global and --remote (cli)
  • Tools can join PATH without downloading their content (lazy) BREAKING

Changed

  • Release binary is 44% smaller (33 MB -> 19 MB) (dist)

Documentation

  • Address packages by their two-segment hosted-index name everywhere
  • Document the unified interpolation token grammar
  • Ocx env and which links land on the section they name

Fixed

  • Removing a tool no longer warns it was never installed (remove)
  • Every generated .exe hardlinks the one shared Windows shim blob (launcher)
  • A failed torn-blob repair no longer reports success (shim)
  • A nested bar no longer aborts the process when its parent is gone (progress)
  • Reconcile the blob-store test seam with main's tests (rebase)
  • Three suites still assumed pre-shim shapes and Linux-only errnos (test)
  • Package test refuses a layer archive it cannot name a media type for (package)

Release

  • V0.5.8

[0.5.7] - 2026-08-07

Added

  • Ocx config setup and self setup refresh the managed-config snapshot (config)
  • Pin companions in patch state instead of the shared local index (patch)

Documentation

  • Setup reconciles the managed tier on every run, not just at adoption (config)
  • --frozen is the package tier's freeze, and a companion pins outside the index

Fixed

  • Advance a same-tag companion on sync instead of answering from the stale local pin (patch)
  • Companions resolve live under --frozen — frozen scopes to the package tier (patch)
  • --frozen refuses index update — the package tier's discovery verb (index)
  • Snapshot keys companions by tag so two tags of one repository survive a freeze (patch) BREAKING

Release

  • V0.5.7

[0.5.6] - 2026-08-06

Added

  • Unknown env modifier types fail with an actionable upgrade remedy (package)
  • List env modifier — unique append with an explicit separator (package)
  • Ocx config test validates a managed-config payload locally (config)

Documentation

  • The list env modifier across reference, authoring and in-depth pages
  • Record a dedicated patch-test cast and a freeze that pins (patches)

Fixed

  • Apply a patch companion once per env compose, not once per matched base (package)
  • Patch test works against path-prefixed registries and local companion archives (patch)
  • Compose companion overlays for the requested platform, not the host (patch)

Release

  • V0.5.6

[0.5.5] - 2026-08-05

Added

  • Build receipt replaces the recorded-platform metadata field (package) BREAKING

Documentation

  • The push cast records the receipt-driven publish flow (authoring)

Fixed

  • Route release discovery through the configured index chain (self)

Release

  • V0.5.5

[0.5.4] - 2026-08-05

Added

  • Surface cross-repo blob mount through transport and publisher (oci)
  • From= layer-ref source and layer push counters (cli)
  • Explicit binding names via ocx add NAME=IDENTIFIER (cli)
  • Add cascade check and repair for the rolling-tag graph (package)
  • Replace the generated catalog with a link to index.ocx.sh (website)

Fixed

  • Resolve the physical reference from the local index before the sources (oci)
  • Gate the same_file test helper to unix like its callers (lib)
  • Allow the package-test scratch roots as shim package roots (shim)
  • Retry an unsupported extended spawn without handle/job scoping (shim)
  • Read the keyed package-info JSON in the catalog generator (website)
  • The local index is the package-tier lock — nothing moves a pin implicitly (index) BREAKING
  • Retry temp-directory renames that Windows blocks with access denied (install)

Release

  • V0.5.4

[0.5.3] - 2026-08-03

Added

  • Retry a blob upload that failed on a transient registry fault (oci)

Fixed

  • Exit 75, not 69, when a registry times out or rate-limits (oci) BREAKING
  • Exit 75 when a lock resolve gives up on a transient registry fault (project) BREAKING
  • Bound the registry connect phase at 30 seconds (oci)
  • Resolve commands against the package before the host PATH (cli) BREAKING

Release

  • V0.5.3

[0.5.2] - 2026-08-02

Fixed

  • Sync the fork before committing, replay transient forge faults (announce)

[0.5.1] - 2026-08-01

Fixed

  • Spurious digest mismatch on layer pulls; truncated pulls now exit 75 (oci)
  • Bound stalled registry connections with a 120s read timeout (oci)

[0.5.0] - 2026-07-31

Added

  • Unified platform model — one relation, one grammar, lock V3 (#212, #215) BREAKING
  • Declared binaries — metadata claims, create auto-scan, env report projection (#177)
  • One index format — local wire-grammar store + index.ocx.sh client (#215, #217) (index) BREAKING
  • Ocx package inspect --closure (cli,lib) BREAKING
  • Ocx package announce — curated tag observation into the index (announce)
  • Record OCI annotations on the published image index (push)
  • User-declarable environment variables in ocx.toml (project)
  • Optional type qualifier on ocx run --env (cli)
  • Drop --self from ocx run (cli) BREAKING
  • --env on every env-composing command (cli)
  • Make the reserved-tag verdict one source of truth (tag) BREAKING
  • Store OCI image indices verbatim, deleting the invented object (index) BREAKING
  • Carry registry bytes verbatim and filter reserved tags once (announce) BREAKING
  • Report the canonical tag actually written, and cap manifest bodies (push)
  • Ship the ocx.sh index as a compiled-in default tier (config)
  • Announce every tag the registry holds (announce)
  • Observe __ocx.desc into the index root (announce)
  • Check the declared libc against the packaged binaries (create)
  • Fail closed when the host cannot scan for the target's executables (package)
  • Open the pull request without a fork when the actor can push (announce)
  • Remove any recorded variants key from the index root (announce)
  • Add ocx status and ocx inspect for toolchain introspection (cli)
  • Ship third-party license notices with the binary (dist)

Changed

  • Extract the --env and --group seams into options/ (cli)
  • PatchScope becomes EnvScope (package-manager)
  • Observe curated tags concurrently (announce)
  • Move with_os_feature onto Platform, keyed by feature namespace (oci)
  • Drop the catalog ETag sidecar (index)
  • Reshape ocx package inspect --format json into one envelope (cli) BREAKING
  • Exit 65 from ocx package inspect --closure on an unrealizable surface (cli) BREAKING
  • Drop closure.deps[].digest from ocx package inspect --closure (cli) BREAKING

Documentation

  • --env on both tiers, --self gone from ocx run
  • Record the --ci precedence flip and repair the changelog links
  • Teach only the current design, and rebuild the binary when sources change
  • Bank the live acceptance gate — E1, E2a and E2b all pass (e2e)
  • Sync inspect/pull examples with narrowed plain output (cli)
  • Realign the index-only dispatch record with the shipped code (adr)
  • Correct the D4(b) exit code, four stale anchors and OQ2's closure (adr)
  • Retarget seven anchors off doc comments onto the code they name (adr)
  • Publish and announce a package (user-guide)
  • State the shipped default-index behaviour on the publish path (index)
  • Name the package-tier form in prose, not the removed root command
  • D5 drops the create-time host platform default (adr)
  • Name the declare-vs-assert platform asymmetry at the record site (create)
  • The candidate symlink targets the package root, not content/ (storage)
  • Record this branch's user-visible changes (changelog)
  • Record the ocx.toml preservation fix (changelog)
  • Record the catalog ETag sidecar removal
  • Retire the conditional GET from the index-indirection record (adr)
  • Mark the lock-records-physical-address ADR rejected (adr)

Fixed

  • Release binaries no longer self-report as dirty builds (build)
  • Let push infer the metadata sidecar instead of deriving it (ci)
  • Classify the ambiguous 422 on ref update by reading the ref (forge)
  • Align CI path export precedence with ocx run (ci)
  • Forward env overrides from every spawning command (cli)
  • Stop a singleflight waiter masking the leader's exit code (index)
  • Refuse an image index that deserialises but is not a valid one (oci)
  • Match CPython's DEL escape in the index wire writer (oci)
  • Narrow plain-mode output to human-scannable widths (cli)
  • Rebuild from the base when the announce branch is spent (announce)
  • Repoint embedded doc links at absolute site URLs (changelog)
  • Pin run and PR identity to a freshness floor (e2e)
  • Floor run and PR identity on GitHub's own counters (e2e)
  • Filter the announce PR window server-side (e2e)
  • Let the index declare which names it can serve (index)
  • Let the served root, not the declaration, settle jurisdiction (index)
  • Keep a failed catalog row retryable instead of silently stale (index)
  • Let an operator's [mirrors] entry suppress the built-in index (config)
  • Let only local config revoke the verified index path (config)
  • Chunk blob uploads under GHCR's 4 MiB per-request cap (oci)
  • Stop an oversized blob falling back into the bug it just hit (oci)
  • Read and write c/index.json as the versioned envelope (index)
  • Wrap the three jurisdiction-test catalogs in the envelope (index)
  • Select the index root by shape, not by directory order (test)
  • Require --platform with --metadata instead of guessing the host (create)
  • The install symlink targets the package root, not content/ (test)
  • Title a description from the package's last name segment (announce)
  • Reject a logo whose bytes are not the format its extension names (describe)
  • Answer the physical transport address from the local index (index)
  • Apply the SSRF floor to the local physical answer (index)
  • Edit ocx.toml in place instead of re-serializing it (project)
  • Decide binding equality by parsing, not by comparing text (project)
  • Let the index drift gate see ocx-authored fixtures (test)
  • Tolerate unknown keys fleet-wide, gate required on what applied (config)
  • Check the duplicate-binding gate against the narrowed tool set (cli)

Release

  • V0.5.0

[0.4.3] - 2026-07-10

Added

  • Ship unix archives as .tar.gz (release)
  • Strip symbols from dist binaries (release)
  • Publish official docker images to ghcr (ci)
  • Scope ocx upgrade by name and group (cli)
  • Rename upgrade to update, resolve against registry by default (cli) BREAKING
  • Env + direnv export install on miss by default, --no-pull opts out (cli)
  • Add ocx config setup for config-only managed-config adoption (cli)
  • Dependency manifest pinning — create resolves, push gates and fans out

Changed

  • Split snapshot into metadata + readable config.toml (managed-config)
  • Extract shared options::Pull flatten struct (cli)
  • Publish apply_managed_config with narrowed params (lib)

Documentation

  • Manual install uses .tar.gz assets (website)
  • Document reproducible container builds (website)
  • Document ocx update and the update family (website)

Fixed

  • Seed CA roots at the fork's ClientConfig::default (oci)
  • Resolve release archive with gz-then-xz fallback (setup-ocx)
  • Bump rust-oci-client to panic-free TLS Client::default (deps)
  • Resolve --dry-run previews concurrently (pull)
  • Auto-sync patches after a config update (managed-config)
  • Place Add and Supported Platforms side by side (website)

Release

  • V0.4.3

[0.4.2] - 2026-07-05

Added

  • Fluent upload progress via streamed chunked push (oci)
  • Differentiate platforms by libc via os.features (oci,cli) BREAKING
  • Add corporate managed configuration tier as config-as-package (config)

Fixed

  • Bundle CA roots so TLS works without a system trust store (oci)

Release

  • V0.4.2

[0.4.1] - 2026-07-03

Added

  • Add --registry override to patch publish and test (patches)
  • Add --[no-]verify flag to verify credentials before storing (login)

Fixed

  • Gate install-time discovery failure on required posture (patches)
  • Keep bare host in patch-registry identifier (patches)
  • Resolve any companions during patch sync (patches)
  • Static-link liblzma so the macOS binary is self-contained (build)
  • Upload acceptance binary before the test step clobbers the seam (ci)

Release

  • V0.4.1

[0.4.0] - 2026-07-03

Added

  • Infrastructure patches for toolchain environment overlays (patch)

Fixed

  • Canonicalize seeded paths in patch_roots GC tests (gc)
  • Converge concurrent junction back-ref race and drive-joined PATH literal (windows)

Release

  • V0.4.0

[0.3.12] - 2026-07-02

Added

  • Per-layer strip and output prefix via manifest annotations (layer)

Fixed

  • Extract layers verbatim, apply strip at assemble time (assemble)
  • Race-free host-only install symlinks (#179) (package-manager)
  • Serialize layer prefix as forward-slash wire form (layer)
  • Correct absolute-path classification and concurrent link race (windows)
  • Retry transient lock errors across concurrent junction ops (windows)
  • Tolerate concurrent junction teardown in remove_link (windows)

Release

  • V0.3.12

[0.3.11] - 2026-07-02

Added

  • Accept multiple identifiers across add/remove/inspect/info (cli) BREAKING
  • Expose --platform on toolchain-tier commands (cli)
  • Scope ocx env composition by group (#176) (cli)

Changed

  • Dedup group/platform validation across pull and env (cli)

Documentation

  • Adopt setup.ocx.sh as the canonical install path

Fixed

  • Self update probes registry by default (self)
  • Order batch errors by input index (package-manager)
  • Unique temp file per batch live-test invocation (shell)

Release

  • V0.3.11

[0.3.10] - 2026-06-30

Added

  • Bake entrypoint args with ${installPath} interpolation
  • Support tar+zstd layer format (#58)

Changed

  • Unify metadata interpolation behind capability-gated engine

Fixed

  • Scope host-leaf resolution to named bindings (run)
  • Make nushell shim PATH activation parse on nu without get --optional (setup)
  • Wire ~/.profile for non-bash POSIX login shells (setup)
  • Decouple elvish completion from PATH activation (setup)

Release

  • V0.3.10

[0.3.9] - 2026-06-21

Added

  • Idempotent move-to-front PATH manipulation (shell)
  • Idempotent batch PATH, remove OCX_ACTIVATED for all shells (shell)

Fixed

  • Resolve latest through configured index, honour OCX_INDEX (self-update)
  • Serialize tag locks with deterministic key order (index)
  • Deterministic key order for CLI output structs (cli)
  • Repair Windows activation harness to use ocx self setup (test)
  • Batch single-statement move-to-front + FOR/F delims= (shell)
  • Apply non-POSIX shell activation as data (nushell) + capture elvish eval (shell)
  • Break release-readiness concurrency self-deadlock (ci)

Release

  • V0.3.9

[0.3.8] - 2026-06-15

Added

  • Typed Starlark host API for package testing (script)
  • ocx package test --script embedded Starlark runner (cli)
  • Pipeline subcommand + per-platform applicability + Discord/JUnit reporting (mirror)
  • Drift guard ignores action-pin bumps; SHA-pin setup-ocx (mirror)
  • Add --frozen flag to freeze tag resolution to the local index (cli) BREAKING
  • Add version pinning to ocx self setup (#156) (cli)
  • Per-platform lock pinning with whole-file lock/upgrade model (project) BREAKING

Changed

  • Make ChainMode matching exhaustive (oci)
  • Move ocx-mirror to its own repository BREAKING
  • Quick wins on the install hot path (install)
  • Streaming single-pass pull pipeline (oci) BREAKING
  • Collapse redundant create_dir_all in tar extraction (archive)
  • Parallelize V2 index-retention scan (gc)

Documentation

  • Fix digest-verification callout for streaming pull (website)

Fixed

  • Stop baking metadata.json into bundle content (mirror)
  • Parallelize per-tag digest fetch in index update (oci)
  • Fail-safe target-registry reads in discover and sync (mirror)
  • Stop prepare legs re-crawling the source (N+1 crawls) (mirror)
  • Bound decompression budget and reject zero-size layers (oci)
  • Deterministic exit code on concurrent symlink failures (install)
  • Route eval-safe-output advisory through the log module (cli)
  • Use job-level defaults.run.shell for matrixed Windows shells (ci)

Release

  • V0.3.8

[0.3.7] - 2026-06-07

Fixed

  • Guard shell activation against an unset OCX_HOME (setup)

[0.3.6] - 2026-06-07

Added

  • Show platform icons in package catalog (website)
  • Show manifest layers in default package inspect (cli)
  • Add setup module for shell scaffold ownership (lib)
  • Add ocx self setup command + self-update shim refresh (cli)

Changed

  • Share canonical ocx_cli_identifier helper (oci)
  • Slim install scripts to delegate to ocx self setup (install)

Documentation

  • Document ocx self setup + bare-binary install path (self-setup)

Fixed

  • Read remote tag queries through to source (oci)
  • Address review-fix loop findings (self-setup)
  • Harden ZDOTDIR + document ocx-owned dedicated files (self-setup)
  • Report current path on install --select (cli)
  • Error on conflicting versions in one environment (package)

Release

  • V0.3.6

[0.3.5] - 2026-06-02

Added

  • Client-declared registry mirrors via [mirrors] config (oci)
  • CI env export via --ci on env / package env (cli,oci)
  • Ocx package push emits a structured push report (cli)

Fixed

  • Keep zsh completions alive across a late compinit (install)
  • Wire both bash and zsh profiles, not just $SHELL (install)
  • Authenticate before every registry operation (oci)
  • Add short description to package push subcommand (cli)
  • Git-style plugin dispatch + correct not-found hint (cli)
  • Advance floating prerelease tag on every cascade build (package)

Release

  • V0.3.5

[0.3.4] - 2026-05-31

Documentation

  • Strip internal design references from --help text (cli)

Fixed

  • Escape angle brackets in changelog (release)
  • Mark package test trailing command as a last positional (cli)
  • Emit shell completions inline, ASCII-safe (fixes zsh + PowerShell activation) (cli)
  • Cross-platform pwsh env.ps1 + local test-install mode (install)
  • Make Windows installers ASCII- and StrictMode-safe (install)
  • Keep shell-completion help text ASCII-safe for PowerShell (cli)

Release

  • V0.3.4

[0.3.3] - 2026-05-31

Fixed

  • Repair Windows PowerShell shell activation (cli)
  • Rewrite ocx.toml in place through the lock-owning handle (project)
  • Give touch_state_atomic collision-free temp names (update-check)
  • Reject a non-regular config path consistently across platforms (config)
  • Read ocx.toml through the lock-owning handle (project)

Release

  • V0.3.3

[0.3.2] - 2026-05-28

Added

  • Enrich ocx version + ocx about with build provenance (cli)
  • Dispatch unknown subcommands to ocx-<name> plugins on PATH (cli)

Changed

  • Unify on LockedFile primitive (file-lock)

Fixed

  • Accept binary-mode sha256.sum (install)
  • Support Windows PowerShell 5.1 in install.ps1 (install)
  • Write tag store through lock-owning handle on Windows (oci)
  • Tolerate populated build-info blocks in CI test (cli)
  • Make download tests fast and meaningful (ocx-mirror)
  • Emit package root from ocx pull, not content/ subdir (cli)
  • Align torn-JSON test with locked-reader contract (auth)

Release

  • 0.3.2

[0.3.1] - 2026-05-27

Added

  • Direct PATH activation with completions, write both login and rc profiles (install)
  • Add ocx self command group with throttled update checks (cli)

Changed

  • Nest ocx mirror as ocx/cli and adopt package install / add CLI

Fixed

  • Exclude ocx_shim from cargo-dist plan (release)
  • Resolve via current symlink + correct test wire shape (self-update)
  • Build smoke artifact with __testing feature; parallelize acceptance tests (ci)
  • Blob store locking + path normalization (windows)

Release

  • 0.3.1

[0.3.0] - 2026-05-26

Added

  • Redesign landing page with feature sections, scroll reveal, and licensed asset pipeline (website)
  • Redesign roadmap as standalone page with scroll-driven timeline (website)
  • Add package dependency resolution with deps CLI
  • Replace export bool with Visibility enum on dependencies
  • Per-platform asset_type override + lychee mirror (mirror)
  • Three-tier content-addressed storage BREAKING
  • Multi-registry support for index catalog command (cli)
  • Transparent tag fallback on local index miss (oci)
  • Serialise local tag log writes with per-repo lock (oci)
  • Chain refs resolution and --remote as CAS cache mode (oci) BREAKING
  • Multi-layer package push and pull (#20) (package) BREAKING
  • Surface ClientError::BlobNotFound as PackageErrorKind::BlobNotFound (error)
  • Support zero-layer config-only OCI artifacts (package)
  • List accepted extensions in bare-digest error (publisher)
  • Add async layered configuration system with registry resolution (config)
  • Typed exit codes and error normalization (cli)
  • Add JSON Schema generation and taplo auto-completion for config.toml (config)
  • Add /next skill for state-aware next-step suggestions (claude)
  • Package entry points (package) BREAKING
  • Add dev.ocx.sh staging deploy with banner (website)
  • Add ocx package test for local pre-push validation (cli) BREAKING
  • Shell-driven scenario harness for acceptance tests (test)
  • Project toolchain (ocx.toml + ocx.lock + run/add/remove/init) (project) BREAKING
  • --build-timestamp + dev.ocx.sh continuous deploy
  • Add ocx login and ocx logout commands (cli) BREAKING
  • Add ocx package inspect command (cli)
  • Add Entrypoint.command dispatch divergence (package)
  • Unify inspect digest rendering across views (cli)
  • Windows native .exe shim, .cmd cutover (resolves #66) (launcher) BREAKING
  • Publish first-party binaries under ocx/ namespace (release)
  • Symlink GC ledger + explicit --global toolchain tier (project) BREAKING
  • Toolchain CLI taxonomy + global activation via env exporter (cli) BREAKING
  • Doc-script render harness — doc_scripts tree, publish render layer, scenario migration (test,website)
  • Decorated table output with per-column/cell styles (cli)
  • Activate Nushell + Elvish shells in install.sh (install)
  • Readable inspect output — themed root, human sizes, descriptor chain (cli) BREAKING
  • Env output format is a context-only concern (cli) BREAKING
  • Global toolchain ocx.lock is an implicit GC root (clean)
  • Eager pull default for lock/upgrade + --pull/--no-pull pair; pull touches lock for direnv (cli) BREAKING

Changed

  • Route archive symlink extraction through symlink::create
  • Extract garbage collector with BFS reachability
  • Add PinnedIdentifier and decompose OCI pull pipeline
  • Drop redundant root identifier from ResolvedPackage (package)
  • Offload layer SHA-256 hashing to spawn_blocking (oci)
  • Algorithm-typed digest dispatch and enriched BlobNotFound (oci)
  • Add path_exists_lossy and adopt across call sites (utility)
  • Unify bounded-concurrency fan-out on stream::buffered
  • Drop --shell from ocx shell direnv (cli)
  • Drop Entrypoint.target, dispatch via composed PATH (package) BREAKING
  • Convert entrypoints from array to map shape (package) BREAKING
  • Extract config-blob metadata loader into common.rs (package)
  • Extract resolve_top_manifest shared helper (package-manager)
  • Rename update command to upgrade (cli) BREAKING
  • Rename find command to which (cli) BREAKING
  • Rename info command to about (cli) BREAKING
  • Consolidate direnv into a dedicated ocx direnv group (cli) BREAKING
  • Move ocx which under the ocx package group (cli) BREAKING
  • Collapse --global to single root-only flag (cli) BREAKING
  • Move ocx deps under the ocx package group (cli) BREAKING
  • Remove dead static-init/profile/path-strip shell scaffolding
  • Remove dead _OCX_APPLIED fingerprint helpers

Documentation

  • Correct push layer arguments and digest reference syntax (cli)
  • Redesign user guide as use-case-driven walkthrough (website)
  • Add package authoring guide (website)
  • Soften read-only wording, document command field (package-inspect)
  • Signed-off handshake + harden superseded tier ADR (toolchain)
  • Shell-profile activation prior-art for handshake §4 (research)
  • Retruth shell-activation model — supersede stale ADRs, fix release/arch rules + user docs
  • Shell-activation model, global toolchain, inspect chain

Fixed

  • Stub missing licensed assets so CI build succeeds (website)
  • Preserve original licensed asset URLs in build output (website)
  • Add --remote flag to first-run commands (website)
  • Enable clippy --all-targets to lint test code
  • Cap ProgressWriter write size for smoother download progress
  • Update workflow task references to rust: namespace (ci)
  • Guard shell RC source line so deleting $OCX_HOME does not error (install)
  • Verify pulled layer bytes match claimed digest (oci)
  • Make LayerRef media type total via ArchiveMediaType enum (publisher)
  • Verify file digest with manifest-declared algorithm (mirror)
  • Static commands survive malformed ambient config (cli)
  • Harden config loader, fix error chain rendering, and extend exit-code coverage (config,cli)
  • Route ChainedIndex catalog and tag list by ChainMode (oci)
  • Exclude worktrees from .claude markdown scans (tests)
  • Completion error casing, debug log level, install docs (shell)
  • Trigger roadmap item fade-in on initial load (website)
  • Emit synth-entrypoints PATH after declared bin/ (package-manager)
  • Rehydrate package offline from cached blobs and layers (package-manager)
  • Relax AC2 disjoint-refs assertion to per-side uniqueness (test)
  • Mark recording setup env entries public so consumer view emits PATH (test)
  • Zero uid/gid in tar headers for reproducibility (archive)
  • Make discord website-deploy notification env-aware (ci)
  • Make macOS portable (tests)
  • Surface malformed image-index child digest as structured error (cli)
  • Refresh drifted Windows shim blobs; align windows acceptance tests (shim)
  • Hermetic reproducible cross-build via cargo-zigbuild (shim)
  • Reconcile entrypoints schema tests with array contract (test)
  • Fail-closed GC ledger + global/project conflict seam (project)
  • Adopt install.ps1 to global toolchain model + pwsh shell alias (install)
  • Toolchain mutators no longer create candidate symlinks (cli) BREAKING
  • Restore entrypoints schema tests to object contract (test)
  • Replace nightly windows_by_handle with stable Win32 API (windows)
  • Drop deleted synthetic_pathext_entry call + unused-mut/import warnings (windows)

Release

  • V0.3.0

[0.2.1] - 2026-03-24

Added

  • Colorize JSON output and deduplicate table rendering (cli)
  • Enable parallel XZ compression by default (compression)
  • Auto-detect progress indicators based on stderr TTY (cli)
  • Add progress bar to package create (bundle)
  • Add transfer progress bars to push and pull operations (oci)
  • Replace upstream Platform with owned OperatingSystem and Architecture enums (oci)
  • Add package variant support

Changed

  • Rename Reportable to Printable and move JSON printing to Printer (cli)
  • Increase default push chunk size to 16 MiB (oci)
  • Migrate to thiserror with typed subsystem errors (error)

Fixed

  • Use glibc bun builds and update musl guidance (mirror)
  • Skip missing logo gracefully in package info (cli)
  • Stub of java -version (docs)
  • Ensure authentication before all transport operations (oci)
  • Split repository path segments for correct Windows paths (fs)
  • Clean up partial output file on failed package create (bundle)
  • Resolve context menu shadow and sidebar shift on catalog detail page
  • Prevent PowerShell Invoke-Expression error on empty shell output

Release

  • V0.2.1

[0.2.0] - 2026-03-16

Added

  • Separate strip_components for rebundling and support multiple --version flags (mirror)
  • Add package pull, ci export command, and setup-ocx GitHub Action (ci)
  • Add package describe and package info commands
  • Add package catalog with build-time data generation (website)
  • Add bun and git-cliff mirrors, restructure mirror layout (mirror)
  • Add shell profile management commands (shell)
  • Replace hello-world with realistic packages in recordings and docs (docs)
  • Add per-platform strip_components config (mirror)
  • Add shellcheck and uv mirrors (mirror)
  • Add generator-based url_index sources (mirror)
  • Support tag-scoped index update (index)
  • Add cache, github, and text utility modules (mirror-sdk)
  • Add spec extends, --latest flag, and backfill order (mirror)
  • Add corretto mirror configuration (mirror)
  • Add --color flag with NO_COLOR/CLICOLOR support (cli)
  • Add asset_type config with binary support and shfmt mirror (mirror)
  • Align recordings with real-world packages (recordings)

Changed

  • Rename OCX_DISABLE_CODESIGN to OCX_NO_CODESIGN
  • Rework table printer styling and clean up idioms (cli)

Fixed

  • Install scripts use --remote for bootstrap and improve UX
  • Add SBOM generation to website deploy pipeline (ci)
  • Add catalog generation to deploy website workflow (ci)
  • Pipe PowerShell Invoke-Expression through Out-String (install)
  • Filter internal tags at IndexImpl level (index)
  • Correct RUST_LOG empty-string check (log)
  • Resolve shellcheck warnings in shell scripts (lint)
  • Buffer env var writes in ci export to fix path accumulation (ci)
  • Handle ANSI escape sequences in table realignment (recordings)
  • Use musl target for Linux in setup-ocx (action)
  • Correct inaccuracies across docs and CLI help text (docs)

Release

  • V0.2.0

[0.1.0] - 2026-03-13

Added

  • Initial commit
  • Support catalog for local index
  • Add env command
  • Support symlink paths for env and shell env
  • Add select command
  • Add initial reference manager
  • Add deselect, uninstall, and clean commands
  • Add find command
  • Add Vue components for website
  • Add command line docs and fix xz bundling
  • Support bundling of single files
  • Add warning when using tags with --current
  • Add acceptance test suite and fix initial bugs
  • Add terminal recordings
  • Add macOS code signing
  • Add website searchbar
  • Add --index flag and OCX_INDEX env var
  • Make cascade push platform-aware
  • Use underscore as build separator
  • Add JSON Schema generation for metadata.json (schema)
  • Redesign info command with logo, color, and format support (cli)
  • Add zip format support and symlink security hardening (archive)
  • Add workspace version (0.1.0) and shared version utility
  • Add git-cliff config and initial CHANGELOG.md
  • Add Taskfile release commands (changelog, preview, prepare)
  • Add install.sh bootstrap script for Unix/macOS
  • Add install.ps1 bootstrap script for Windows
  • Initialize cargo-dist for release builds
  • Add update check notification on CLI startup
  • Add SBOM generation and dependency explorer page
  • Add ocx-mirror prototype for mirroring GitHub releases to OCI registries

Changed

  • Find_or_install
  • Adapt env command and extract modifier
  • Consistent naming of api data
  • Extract symlink handling into file_structure
  • Index structure
  • Migrate install and select to reference manager
  • Extract CLI tasks into library
  • OCI client
  • Pre-fetch terminal recordings
  • Standardize CLI API data types with single-table pattern
  • Replace oci_spec::Reference with custom Identifier
  • Move website help examples into documentation skill

Documentation

  • Add initial documentation
  • Symlink management
  • File structure
  • Versioning
  • Improve content path documentation
  • Add user-guide for indices
  • Add getting started guide
  • Add design records and pitch guide
  • Add release plan
  • Add changelog page to website with sidebar entry
  • Add installation page, README install section, and home quick start
  • Shorten website feature cards
  • Rewrite README for public launch

Fixed

  • Fetching of just pushed manifest
  • Flaky tests relying on env variables
  • Package manager task stability and error handling
  • Website
  • Windows symlinks with junctions
  • Tree component hover behavior
  • Path and exec resolution on Windows
  • Formatting and linter issues
  • Improve CLI output consistency across commands
  • Temp dir leftovers after install
  • MacOS codesigning, sign per-file, drop --deep and CS_RUNTIME flags
  • User-guide typo
  • Discord notification website link
  • Allow all tools in Claude Code Action workflow (ci)
  • Fix changelog template formatting
  • Bootstrap OCX via self-install instead of manual file copy
  • Correct auth env vars in publish workflow and remove double update check
  • Align cargo-dist config with workflow filename and pin action versions
  • Add rust-toolchain.toml to pin Rust 1.94.0 for CI builds
  • Exclude LFS assets from source tarball and reduce CI targets
  • Add required type and version fields to packaging metadata
  • Add required field to path env var in packaging metadata
  • Website deploy pipeline and install script improvements
  • Correct checksum filename and parsing in install scripts
  • Clippy warning, test build target, and mirror test assertions
  • Restore Python language skill to correct location
  • Restore crate-level allow(deprecated) for clippy -D warnings
  • Build and upload ocx-mirror binary in CI acceptance tests
  • Replace ring with aws-lc-rs to fix aarch64-pc-windows-msvc release build
  • Add contents:read permission to verify-deep workflow (ci)
  • Build ocx-mirror in verify-deep and fix discord webhook (ci)
  • Remove push-to-main Discord notifications (ci)

Release