Skip to content

skills: tool-version provenance + the cross-repo seam (plugin 0.21.0) - #166

Open
avrabe wants to merge 1 commit into
mainfrom
skills/version-provenance-and-cross-repo
Open

skills: tool-version provenance + the cross-repo seam (plugin 0.21.0)#166
avrabe wants to merge 1 commit into
mainfrom
skills/version-provenance-and-cross-repo

Conversation

@avrabe

@avrabe avrabe commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Closes #164. Closes #165. Both tested by execution before any skill was edited.

#164 — measured worse than reported

The report claimed differing warning counts between rivet versions. On one unchanged tree (varve @ a640673, 158 artifacts) the verdict flips:

rivet result exit
0.19.0 FAIL — 60 errors, 62 warnings 1
0.28.0 FAIL — 60 errors, 72 warnings 1
0.32.0 PASS — 72 warnings 0

The output names the cause: unknown artifact type 'verification' — an old binary rejecting a type the newer schema ships. So the rule had to be stronger than "record the version":

  • an old binary's FAIL can be a schema-capability artifact, not a finding — chasing it burns a cycle on a tool gap;
  • an old binary's PASS can miss rules it never implemented — the silent direction, and the one that ships as evidence.

That is traceability-audit step 0's question one layer down, so the new step cross-links it rather than restating it.

Pin claim verified, not just repeated: relay's verification-gate.yml and release.yml both pin rivet v0.19.0; the current layer ships 0.32.0. The required gate really is the laxest check in the system.

#165 — the block already works; the declaration is what's missing

rivet verify refuses to promote without evidence — measured, exit 1. So the mechanism to hold a requirement is there. What rivet has no field for is who owns the unrun criterion.

external-anchor is not that field: it models the inbound supplier boundary (source-of-truth, received-as-reqif, received-as-polarion-export) — requirements handed to us. The outbound case, a criterion owed by a downstream consumer, has no typed home. So the skills prescribe the convention that works today (name the owner in the requirement, hold at implemented, tag it, block the release), and the capability request goes upstream.

Scope calls

  • Skills field report: requirements can be owned outside the repo — the cross-project seam is missing in both directions #165 proposal 3 folded into proposal 1. oracle-gate-a-change step 3 already mandates kill-criteria; what the report actually adds is the externally-owned case plus one prompt — name what would still be false if every check you can run passes. One line in step 3, not a new methodology section.
  • The varve coverage boundary is stated once, in the roster — it carries the tools that check our work, not the upstream ones that build it (wasm-tools, cargo-component, wkg; varve#52) — rather than repeated in each skill that mentions varve which.

Verification

  • 16/16 skills parse under strict YAML; names match directories
  • every changed version line is frontmatter; plugin.json diff is exactly one line
  • plugin 0.20.0 → 0.21.0

🤖 Generated with Claude Code

https://claude.ai/code/session_01G5qpB7zvxLvdrvn5YRyj4R

….21.0)

Closes #164 and #165. Both field reports tested before any skill was edited.

#164 — a version-less evidence claim is unfalsifiable
  The report claimed differing warning counts between rivet versions. Measured
  worse: on one unchanged tree (varve @ a640673, 158 artifacts) the VERDICT
  flips — 0.19.0 FAIL/exit 1, 0.28.0 FAIL/exit 1, 0.32.0 PASS/exit 0. Root
  cause visible in the output: `unknown artifact type 'verification'`, i.e. an
  old binary rejecting a type the newer schema ships. So both directions are
  wrong — an old FAIL can be a schema-capability artifact rather than a
  finding, and an old PASS can miss rules it never implemented. That is
  traceability-audit step 0's question one layer down, and it is cross-linked.
  Pin claim verified: relay's verification-gate.yml and release.yml pin rivet
  v0.19.0 while the current layer ships 0.32.0 — so the required gate is the
  laxest check in the system.
  - oracle-gate-a-change 0.5.0: step 4b, record which oracle
  - clean-room-verification 0.3.0: the verifier's own version is a claim too
  - release-execution 0.3.0: the traceability gate records the toolchain

#165 — a requirement can be owned outside this repo, both directions
  The blocking mechanism already exists: `rivet verify` refuses without
  evidence (measured, exit 1). What rivet has no field for is WHO owns an
  unrun criterion. external-anchor is not it — that models the inbound
  supplier boundary (received-as-reqif / polarion-export), not a criterion
  owed by a downstream consumer. Filed upstream; the skills prescribe the
  convention that works today.
  - traceability-audit 0.3.0: "verified is not always decidable inside this
    repo" — name the owner, hold at implemented, tag it, block the release
  - release-execution 0.3.0: step 4c, published-contract check BEFORE the tag
  - pulseengine-feature-loop 0.4.0: the same rule where requirements are written
  - oracle-gate-a-change: the prompt that generates good kill-criteria — name
    what would still be false if every check you can run passes

roster: varve's coverage boundary stated once — it carries the tools that
check our work, not the upstream ones that build it (varve#52).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G5qpB7zvxLvdrvn5YRyj4R
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant