Skip to content

chore(ship): record the #402 merge — seq 148, backlog #166 shipped - #403

Merged
KbWen merged 1 commit into
mainfrom
chore/ship-records-402
Aug 12, 2026
Merged

chore(ship): record the #402 merge — seq 148, backlog #166 shipped#403
KbWen merged 1 commit into
mainfrom
chore/ship-records-402

Conversation

@KbWen

@KbWen KbWen commented Aug 12, 2026

Copy link
Copy Markdown
Owner

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 Sequence stood at 147 with the newest Ship History entry covering #399/#400. Neither #401 nor #402 was recorded, and grep -c '#402' current_state.md returned 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 History entry for Ship-fix-166-trufflehog-scanner-pin-2026-08-12, covering the digest pin, the AC-3/AC-5 corrections, the reclassification to hotfix, and the Lob false-positive incident that became [Bug] Validator mis-flags ship-history archive as a Work Log missing Phase Summary #171.
  • Update Sequence 147 → 148, Last Updated refreshed.
  • Cap rotation: Ship History was at 10/10, so the oldest entry (Ship-docs-repo-gotchas-14-worklog-archival-2026-07-27) moved verbatim into archive/ship-history-2026.md rather than being dropped.

Written with guard_context_write.py --mode replace under 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

Rollback: revert this PR. The sequence returns to 147 and the rotated entry returns to current_state.md.

🤖 Generated with Claude Code

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
KbWen merged commit 491f372 into main Aug 12, 2026
19 checks passed
@KbWen
KbWen deleted the chore/ship-records-402 branch August 12, 2026 15:30
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>
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