Skip to content

docs(verify): compare artifact identity, not reported description - #17

Open
unforced wants to merge 2 commits into
mainfrom
ag-verify-identity
Open

docs(verify): compare artifact identity, not reported description#17
unforced wants to merge 2 commits into
mainfrom
ag-verify-identity

Conversation

@unforced

Copy link
Copy Markdown
Contributor

Captures the most reusable lesson from the 2026-07-28 cross-repo audit into the verify skill, which is where verification discipline lives.

The pattern. A version string, a status column, and a git tag all describe intent. Three separate failures in one day had drifted from reality, and each read green on every signal we normally trust:

  1. Hub served the app out of bun's install cache — a months-old published version — for nine hours, while parachute status reported bun-linked → <repo> @ <sha>. That was true of resolution and false of what was served. It surfaced only because the served /assets/index-<hash>.js didn't exist in the checkout's dist/.
  2. Five packages were merged-but-unpublished. Nothing anywhere asserts merged == published, so a security hardening release was merged, tagged, changelogged — and in effect nowhere.
  3. That release's tag had failed at the registry PUT five days earlier. Red run, no alert.

The counter-discipline added: fetch the artifact and diff it rather than reading what something reports about itself — served hash vs dist/, npm pack tarball vs source, git ls-remote --tags vs npm view versions — and when a service reports a version, ask which path it read that from.

Also records a probe gotcha that cost real time during the trace: a minified bundle is one ~540 KB line, so $(curl …) + echo | grep mangles it and returns false negatives shaped exactly like "the fix isn't deployed." I reported "marker absent" twice from that broken instrument before checking the instrument.

Docs-only; no version bump.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XLZtmuSs1RirWGMGyCB1QB

unforced and others added 2 commits July 28, 2026 10:28
Three failures in one day all shared a root: the tooling described intent
while reality had drifted, and every surface signal stayed green.

- hub served the app from bun's install cache (a months-old published
  version) for nine hours while `parachute status` reported the bun-linked
  checkout — true of resolution, false of what was served
- five packages sat merged-but-unpublished; nothing asserts merged==published,
  so a security bump was merged, tagged, changelogged, and in effect nowhere
- that release had failed at the registry PUT five days earlier — red run,
  no alert, everyone assumed it shipped

Adds the counter-discipline: fetch the artifact and diff it (served hash vs
dist/, `npm pack` tarball vs source, git tags vs npm versions), and ask which
path a reported version was read from. Plus the probe gotcha that cost real
time — a minified bundle is one ~540 KB line, so shell command substitution
mangles it and yields false negatives shaped exactly like "not deployed."

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XLZtmuSs1RirWGMGyCB1QB
Two more from the same day, same family as the identity/description split.

A test that pins an absolute date then validates against the real clock is a
bomb with a fuse: hub's operator-token test minted at a pinned 2026-04-26 with
a 90-day TTL and validated at real now — green until 2026-07-25, red forever
after, and it failed on a commit that had nothing to do with it. Records the
fix (inject the clock on both sides) and the sweep method that actually bounds
the class: ask which paths enforce expiry against a clock you can't inject,
then intersect with pinned mints. Listing date literals doesn't bound anything.

And the condition that hid it: hub's suite runs at tag time only, so three days
of red looked green. parachute-agent went red on a docs-only commit, which means
its real breakage landed earlier and unobserved. Hence: never let a stable
release be a line's first gate run.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XLZtmuSs1RirWGMGyCB1QB
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