Uh oh!
There was an error while loading. Please reload this page.
fix(client): delete the stale packages.update exported-any-returns entry - #12186
Conversation
…entry `#12062` bound `ObjectStackClient.packages.update` to `InstalledPackage`, but its ledger row did not come with it. The ledger is shrink-only and judged EXACTLY in both directions, so the closed gap left `Type Check · consumer gates` red on `main` — reproducing onto the merge ref of every open PR. Verified against the BUILT dist before deleting: the awaited return type of `ObjectStackClient.packages.update` is the concrete `InstalledPackage` shape, `TypeFlags.Any = false`. The seven neighbouring `packages.*` rows still read `any` and stay. Part of #12180
📓 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): |
yinlianghui
commented
Aug 25, 2026
Three repairs are converging on the same one-line deletion.
Both open PRs delete the same line of ⛔ I am not saying which should land. That is
Why a bystander is telling you this: six of this seat's PRs (#12146, #12154, #12164, #12171, #12182, #12187) are dequeued or red on this same base-branch failure, and I traced it independently before finding #12180 and #12184 already filed — so I filed nothing and dispatched nobody. I only have the cross-lane view because I arrived third. Neither of you could see the other from inside your own lane, which is exactly the gap this note is for. Corroborating datum, since it costs nothing: I independently confirmed the same reading on Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#12180
main@22c42c9b2is red onType Check · consumer gates, and that red reproduces onto the merge ref of every open PR in the repo. #12062 boundObjectStackClient.packages.updatetoInstalledPackage, but itsexported-any-returns.jsonrow did not come with it. The ledger is shrink-only and judged EXACTLY in both directions, so a closed gap stays red until the row is deleted.This deletes exactly that one row — one line, nothing else.
Verified before deleting: the debt is genuinely paid
Shrinking this ledger is the ratchet working only if the binding is real, so the row was not deleted on the strength of the failure message. The gate judges against the built dist, so
@objectstack/clientwas built with its dependency closure and the emitted declarations read directly with the TypeScript checker overpackages/client/dist/index.d.ts:TypeFlags.Anypackages.update{ manifest: { id: string; version: string; ... }; ... registeredNamespaces?: string[] }— theInstalledPackageshapepackages.publishanypackages.discardDraftsanypackages.revertCommitanypackages.rollbackanypackages.exportanypackages.adoptOrphansanypackages.duplicateanypackages.updatehas genuinely graduated. The seven neighbouringpackages.*rows have not, and they stay.The gate's own verdicts — red before, green after
Exit codes captured before any pipe.
Before, on this branch's tree at
22c42c9b2with a fresh build — exit1:After, at commit
0eefc64d3— exit0:The counts reconcile independently: the file now holds 64 entries and the gate reports 64 still open.
The population really is one, measured in both directions
Because the gate reds on an unledgered
anysite and on a stale row, green after deleting exactly one row is itself proof the population was exactly one — under-deletion would still be stale-red, over-deletion would be unledgered-red.That second direction was measured rather than inferred. Removing a neighbouring row (
packages.publish) reds the gate immediately — exit1:The probe confirmed its mutation on disk (occurrences 1 → 0) before reading any result, and restored the file from a saved copy through an
EXIT INT TERMtrap. The tree was verified back at the intended state afterwards: 64 entries,publishpresent,updateabsent.Why #12062 bound three methods and only one row is stale
#12062 bound
packages.list,packages.updateandScopedProjectClient.packages.get. Onlypackages.updatewas ever in this ledger: the other two wereany-containing rather thananybefore the binding too ({ packages: any[]; total: number }and{ package: any }), which this gate deliberately does not flag, so they were never ledgered and produce no stale row now. They belong to #11925's population, not this ledger's. The same line is visible in the reading above —packages.get,install,enableanddisablestill return{ package: any; ... }and are correctly absent from the ledger.No ablation leg, deliberately
There is no guard or assertion in this diff to ablate — a deleted ledger row is the change, and the gate is its own before/after. The red-before / green-after pair above is the real measurement; a manufactured mutation leg would add ritual, not evidence. The one mutation that does carry information is the over-deletion probe, reported above.
Changeset:
skip-changeset, with evidencepackages/client/package.jsondeclaresfiles: ["dist", "README.md", "CHANGELOG.md"], soexported-any-returns.jsonis not in the published tarball. It is a repo-internal debt ledger: no user-visible change, no API or behaviour change, no public surface movement, nothing to release.skip-changesetis the correct shape and the label is applied.Gate union
Derived on the final commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(self-derived change set: 1 path vs merge base22c42c9b2), and run at0eefc64d3. All exit0:check:published-files—✓ check:published-files — 69 publishable package(s) of 78 workspace member(s) declare a files whitelist that covers every entry point ...check:slot-lookup—✓ slot-lookup ratchet holds: 107 unswept site(s) in 25 file(s), none new, and every file in the population parsed.check:test-source-alias—check-test-source-alias OK — 72 packages with tests scanned; 61 registered as still resolving a workspace dep through dist/ ...check:type-source-resolution—check-type-source-resolution OK — 93 tsc program(s) across 77 packages scanned ...check-plugin-teardown-shape.mjs—✓ check:plugin-teardown-shape: 63 Plugin implementation(s) across 4686 source(s) under packages/** ...docs-audit/check-affected-docs.mjs—✓ affected-docs self-test: 451 cases pass.docs-audit/check-drift-comment.mjs—✓ check-drift-comment: 56 cases pass across 5 fixture diff(s).check:nul-bytes—check-nul-bytes: OK (scanned 6749 text file(s) ... no raw ASCII control bytes).Two beyond the derivation, run because they are owed rather than because a path matched:
check:exported-any-returns— this card's own gate, the red-before / green-after pair above.check-ratchet-remedy-authority.mjs— the only other script in the repo that reads this ledger's gate source; the path derivation never named it.OK check-ratchet-remedy-authority: 146 scripts swept ...Declared narrowing:
@objectstack/client's ownpnpm test/typecheckwere not run. The diff contains no TypeScript, no source and no test input — one JSON row in a file no test reads and no build consumes; the sole in-repo consumer of the file's data is the gate, measured above in both directions. CI runs the farm regardless.Generated by Claude Code