chore(ship): record the #402 merge — seq 148, backlog #166 shipped - #403
Merged
Conversation
The #402 ship omitted its SSoT record: Update Sequence stood at 147 with the newest Ship History entry covering #399/#400, so a P1 security fix, a shipped- spec amendment and a new L2 domain log were absent from the record the release cut reads from. Left as-is, the v1.8.20 CHANGELOG would have missed the most significant item in the version. #401 legitimately skipped SSoT — records-only, no feature shipped, per the 2026-07-09 reconcile-note precedent, and that call survived independent review. #402 does not qualify for the same exemption. Ship History entry prepended via guard_context_write.py with optimistic locking (never --mode append, which lands at file end). At cap 10/10, so the oldest entry rotated verbatim into archive/ship-history-2026.md. Classification was measured before being assigned this time — 21 lines across 2 modules against state_machine.md:51's 200-line / 2-module hard block. The immediately preceding unit classified first and violated that block; reversing the order is the fix. Evidence: check_ssot_caps.py 'ship history 10/10, spec index 26/30'; chain intact; validate.sh pass=118 warn=4 fail=0 skip=2 with the self-archival verified by delta (warn 5 -> 4, the shipped-log-in-work line gone). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
KbWen
added a commit
that referenced
this pull request
Aug 12, 2026
…404) Release cut for **v1.8.20**. Docs-only: version banners, CHANGELOG, and the release's own Ship History entry. **No engine, test, or logic change rides this PR** — everything substantive was already merged and individually CI-green. ## What it packages Ten commits sat unreleased on `main` while the banner still read 1.8.19. | | | |---|---| | **PR #402** | backlog **#166 (P1)** — the TruffleHog pin bound the *wrapper*, not the scanner. Now pinned by image digest; AC-3's false "full-history scan" claim and the Domain Decision that generated it corrected; new `docs/architecture/ci-security.log.md` | | **PR #395** | backlog #163+#164 — audit-wave leftovers | | **PRs #386/#377/#378** | three dependabot bumps, open 8–15 days | | **PRs #397/#399/#400/#401/#403** | records wave, including the archival of this repo's only different-vendor review artifact | ## What it changes here Banners 1.8.19 → 1.8.20 across the canonical 7 (`deploy.sh` `ACX_VERSION`, `CITATION.cff` version + `date-released`, Model Guide EN/zh-TW, Testing Protocol EN/zh-TW, `antigravity-v5-runtime.md`), CHANGELOG `[1.8.20]`, SSoT sequence 148 → 149 with the cap-10 rotation. ## Shipping a known state, not a quiet one The CHANGELOG names **five defects filed and deliberately unfixed** (#167–#171) rather than omitting them — including **the scanner false-positive class that blocked this release's own security PR**. Each fix touches tool, workflow, or `.gitattributes` code a docs-only cut must not carry, and #171's detector exclusion is a security-coverage decision that deserves its own review. It also records a governance failure rather than burying it: **PR #402 was classified `quick-win` at 276 lines across four modules**, against a hard block at 200 lines / 2 modules — which is what let its review gate be skipped. Independent review caught it; it was reclassified to `hotfix` through the documented rollback mechanism, with the retroactive sequencing stated plainly. The durable fix is procedural — *measure the diff, then classify* — and the two units after it did so. ## Evidence - **Banner sweep verified both directions**: each of the 7 replacements asserted to match exactly once before writing, then `grep -rn "1\.8\.19"` across the same 7 files → **no matches**. - **Guarded SSoT write** under optimistic locking → `{"status": "ok"}`; 10 Ship History entries before and after; `check_ssot_caps.py` → `ship history 10/10, spec index 26/30`. - `check_audit_chain.py` → `audit chain intact`. - `validate.sh` **`pass=118 warn=4 fail=0 skip=2`** — machine-local totals (a clean checkout runs 18 fewer active-work-log checks); CI is the replayable evidence. - **A wrong fact caught before it landed**: the Ship History entry first named the wrong rotated entry. Corrected in the staged content, so it never reached `current_state.md`. ## Not done at merge Per `repo-gotchas` #12 — and forgotten twice before — the release is **not complete when this merges**. The lightweight `v1.8.20` tag and `gh release create --latest` are separate manual steps, tracked to completion in this session. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Records-only. Adds the SSoT Ship History entry that PR #402 should have carried, ahead of the v1.8.20 release cut.
Why this is not optional
Update Sequencestood at 147 with the newest Ship History entry covering #399/#400. Neither #401 nor #402 was recorded, andgrep -c '#402' current_state.mdreturned 0 — so a P1 security fix, an amendment to a shipped spec's acceptance criteria, and a newly created L2 domain log were all absent from the record.That propagates: the release cut's CHANGELOG derives from Ship History, so v1.8.20 would have shipped release notes missing the most significant item in the version.
#401 legitimately skipped SSoT — records-only, no feature shipped, per the 2026-07-09 reconcile-note precedent reaffirmed by PR #397, and that call survived independent review. #402 does not qualify for the same exemption.
What changed
Ship-fix-166-trufflehog-scanner-pin-2026-08-12, covering the digest pin, the AC-3/AC-5 corrections, the reclassification tohotfix, and the Lob false-positive incident that became [Bug] Validator mis-flags ship-history archive as a Work Log missing Phase Summary #171.Update Sequence147 → 148,Last Updatedrefreshed.Ship-docs-repo-gotchas-14-worklog-archival-2026-07-27) moved verbatim intoarchive/ship-history-2026.mdrather than being dropped.Written with
guard_context_write.py --mode replaceunder optimistic locking (--expected-sha, receipt committed). Not--mode append— that path lands at file end, and the entry belongs at the top of the section.Process note
Classification was measured before being assigned: 21 changed lines across 2 substantive modules, against
state_machine.md:51's 200-line / 2-module hard block. The immediately preceding unit classified first and violated that block, which the independent review on #402 caught; reversing the order is the fix, and it is recorded in the Work Log as the reason the order matters.Evidence
check_ssot_caps.py→ssot caps OK — ship history 10/10, spec index 26/30(10 entries before and after).check_audit_chain.py→audit chain intact.validate.shpass=118 warn=4 fail=0 skip=2. Self-archival verified by delta, not asserted: before itwarn=5includingshipped work logs still in active work/ directory: 1; after, that line is gone. The 4th WARN is an external reviewer's stale lock from PR chore(archive): preserve the external Codex review log + file backlog #166-#170 #401 — gitignored, outside this diff. Totals are machine-local; CI is the replayable evidence.INDEX.jsonlfully CRLF and the pre-commit normalise reported 153 → 0. Third independent confirmation that [Feature] Canonical-doc-path gate + research-wiki sidecar #168's fix needs the*.jsonl text eol=lfhalf, not justO_BINARY.Rollback: revert this PR. The sequence returns to 147 and the rotated entry returns to
current_state.md.🤖 Generated with Claude Code