Skip to content

refactor: name capability runners and evidence by what they prove#110

Merged
levifig merged 1 commit into
mainfrom
feat/parameterized-capability-smokes
Jul 25, 2026
Merged

refactor: name capability runners and evidence by what they prove#110
levifig merged 1 commit into
mainfrom
feat/parameterized-capability-smokes

Conversation

@levifig

@levifig levifig commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Summary

Artifact names describe what they prove, never the work unit that commissioned them. The enclosing Change directory already supplies that provenance, so the prefix was redundant and pointed the wrong way.

  • Capability smoke runners renamed by target and context mode. The Cursor runner becomes preflight-cursor-agent-context.mjs, because it is a preflight that refuses rather than a smoke.
  • Retained evidence renamed to <target>-<version>-<mode> form. Version stays in the filename: it is the identity of what was proven, not a work reference.
  • Runners take an explicit --client, --expected-version and --receipt, validate each input, and publish a receipt atomically only after both the proof and cleanup succeed.
  • Marker prefixes become target-scoped: LOAF_CLAUDE_STARTUP_SMOKE_, LOAF_CODEX_STARTUP_SMOKE_, LOAF_OPENCODE_REQUEST_SMOKE_.
  • The capability runner unit suite runs in build CI via npm run test:capability-runners.

Rebase note

Reduced from five commits to one, and the base is retargeted from feat/target-adapter-doctor to main.

The four lower commits belonged to #109's stack. The manifest and content-addressed install portions of that stack have since landed in main by another route, so only the unique capability-runner commit is carried here. #109 stays open: its target-adapter ownership doctor check has not landed β€” main's doctor registers six checks and none of them is checkTargetAdapterOwnership β€” so it needs its own reconciliation pass.

Evidence

Renaming the marker prefixes invalidated all three retained receipts. The strict validators failed closed on them before re-recording, with installed-smoke evidence does not prove a successful model-visible marker result. Receipts were re-recorded by genuinely re-running each runner against the current native binary, never by editing a marker into a file.

Receipt Version Observed marker
claude-code-2.1.218-plugin-startup-smoke.json 2.1.218, pinned in a disposable prefix because global is 2.1.219 LOAF_CLAUDE_STARTUP_SMOKE_82C9A319C829
codex-0.145.0-isolated-startup-smoke.json 0.145.0 LOAF_CODEX_STARTUP_SMOKE_A5533AEA314C
opencode-1.18.4-isolated-request-smoke.json 1.18.4 LOAF_OPENCODE_REQUEST_SMOKE_BB01462EC885

The OpenCode receipt additionally proves plugin_loaded, root_session_lookup_proven, no_auth_supplied and cleanup_succeeded.

Verification

  • LOAF_VALIDATE_TYPESCRIPT=1 npm run build
  • npm run typecheck
  • npm run test β€” all four packages pass
  • npm run test:capability-runners β€” 21 passed
  • Strict capability suite
  • loaf check --hook for check-secrets, security-audit, render-drift, ephemeral-provenance
  • git diff --check

Out of scope

Two historical records still name the superseded runner and receipt filenames: docs/changes/20260718-installed-distribution-authority/plan.md and docs/changes/20260724-version-agnostic-managed-block/evidence.md. Both are factual accounts of commands that ran under those names, so they are left intact rather than rewritten.

Drop the implementation-unit prefix from capability smoke runners and
retained evidence. Artifact names now describe the target, version, and
context mode they prove, never the work unit that commissioned them β€”
the enclosing Change directory already supplies that provenance.

Runners take an explicit client executable, exact expected version, and
receipt path, and publish a receipt atomically only after both the proof
and cleanup succeed. Marker prefixes become target-scoped, so the strict
validators reject every superseded marker and all three receipts were
re-recorded against the current native binary with genuinely observed
model-visible markers: Claude Code 2.1.218, Codex 0.145.0, and OpenCode
1.18.4.
@levifig
levifig force-pushed the feat/parameterized-capability-smokes branch from 8509ffa to 91f30e1 Compare July 24, 2026 22:41
@levifig levifig changed the title test: parameterize capability smoke runners refactor: name capability runners and evidence by what they prove Jul 24, 2026
@levifig
levifig changed the base branch from feat/target-adapter-doctor to main July 24, 2026 22:41
@levifig
levifig merged commit ed8c79e into main Jul 25, 2026
1 check passed
@levifig
levifig deleted the feat/parameterized-capability-smokes branch July 25, 2026 01:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant