Uh oh!
There was an error while loading. Please reload this page.
fix(client): delete the stale packages.update exported-any-returns entry reddening main - #12199
fix(client): delete the stale packages.update exported-any-returns entry reddening main#12199os-trump wants to merge 1 commit into
packages.update exported-any-returns entry reddening main#12199Conversation
…entry `ObjectStackClient.packages.update` was bound to `Promise<InstalledPackage>` in commit 22c42c9, closing its erasure gap, but the shrink-only ledger entry was left behind. The gate judges the ledger EXACTLY in both directions, so a gap-closed entry is red until it is deleted — and it reddened `main`, which every branch cut from it then inherited. The gate is correct here and is not touched: the ledger was wrong. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HbG3rGVLjZStHQxHDtzJdJ
📓 Docs Drift Check
What this run could not see
Coarse fallback — 15 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
os-trump
commented
Aug 25, 2026
Flagged by the implementing seat ( The defect was filed twice and dispatched twice: #12180 (12:02:06Z, ⇒ #12186 is the earlier, already-cleared fix. This PR adds nothing to it. Two identical deletions racing into an already-blocked merge queue is the failure the duplicate-alert on #12184 warned about, so this one should be closed in favour of #12186 unless a reviewer prefers the reverse. ⛔ Nothing is being changed here on that basis: this PR is left as-is (draft, not ready, no auto-merge) and #12186 / #12180 are untouched. Which card and which PR survive is the PM's call, not this seat's. For the record, since the two runs were independent and agree: this branch measured the same red-before on a pristine Generated by Claude Code Generated by Claude Code |
Fixes#12184
mainwas red onpackages/client'scheck:exported-any-returns, inside theType Check · consumer gates job — so every branch cut from it inherited the
failure, with an error message about a client-SDK ledger unrelated to their diff.
What this changes
One line, one file: the stale
ObjectStackClient.packages.updateentry is deletedfrom
packages/client/exported-any-returns.json(65 entries to 64).The gap that entry described is closed.
packages/client/src/index.tsnow readsupdate: async (id, patch): Promise< InstalledPackage >and returnsthis.unwrapResponse< InstalledPackage >(res). The ledger is shrink-only and judgedEXACTLY in both directions, so an entry whose gap has closed is red until it is deleted.
⛔ The gate is not touched, not loosened, and no exemption is added — the ledger was
wrong, not the gate. Nothing from the commit that closed the gap is reverted; only the
bookkeeping it left behind is completed.
(Angle brackets are spaced above because GitHub's body sanitizer eats short bracketed
fragments — it truncated this same annotation to
Promise =>in the issue body.)Verification
Union re-run at
adf0cb2b, the final commit on this branch.Before — pristine
origin/main(22c42c9b, 0 dirty files), reproducing the red:After — this branch:
The self-test is the positive control: it asserts the ledger is judged exactly in both
directions, so the green verdict is a measurement rather than a gate that read nothing.
The reported
64 ledgered site(s) still openmatches the post-deletion entry countindependently, and no entry is added.
The whole ledger was re-judged, not just the reported entry
"One reported" is not "one exists", so this was checked rather than assumed — and the
answer is structural, not merely empirical.
judge()collects stale entries with a fullfilterover every ledger key and prints${stale.length}, so it does not stop atthe first:
The post-fix run reports zero stale and zero unledgered across all 64 remaining entries.
Consistent with the cause: the commit that closed the gap bound three methods —
packages.list,packages.update,packages.get— and onlypackages.updatewasledgered; the other two were
any-containing, which this ledger's stated scopedeliberately excludes.
No changeset — measured, not assumed
packages/client/package.jsondeclaresfiles: ["dist", "README.md", "CHANGELOG.md"],and
npm pack --dry-runlists 10 files withexported-any-returns.jsonabsent. Thisdeletion therefore changes zero published bytes and no observable behaviour: it is
repo-side ratchet bookkeeping. The type change itself already shipped its own changeset in
the commit that closed the gap, so a changeset here would announce that same change twice.
Labelled
skip-changeset.Generated by Claude Code