Uh oh!
There was an error while loading. Please reload this page.
docs(pm): an entry-.d.ts byte-identity claim needs a positive control in the same block - #12901
Merged
Merged
Conversation
… in the same block The gauge is real for NAME-SET claims and vacuous for the SHAPE of a symbol the barrel already forwards. New review row states both halves and requires the control; net 0 lines, paid by three consolidations whose content survives in platform-readings and landing-operations. Co-Authored-By: Claude <noreply@anthropic.com>
os-zhuang
approved these changes
Aug 28, 2026
os-zhuang
marked this pull request as ready for review
August 28, 2026 07:53
github-merge-queueBot
removed this pull request from the merge queue due to failed status checks
Aug 28, 2026
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixesobjectstack-ai/objectui#5914
Three times in one day a PR justified "this re-export widened nothing" by reporting that a
package's entry
dist/index.d.tswas byte-identical across the change. Nothing in the reviewdiscipline told a reviewer that reading apart from a calibrated one. This lands the row that
does, in the review-evidence home —
.claude/skills/pm-dispatch/references/review-checklist.md.The rule as landed
Placed directly under the existing positive-control row (
测量类交付先看阳性对照), of which itis the specialization — the kinship is structural rather than spelled out, which is also how the
house's sibling idiom reads (
⛔ 零命中必须用确定存在的邻近词反查: a negative reading needs apositive control):
The name-set-vs-shape nuance a naive rule gets wrong
The gauge is not dead in general, and a rule that simply banned the phrase would red-flag sound
prose. Both halves are stated in the row, because only the pair is actionable:
bytes. Released CHANGELOG prose already leans on exactly this, correctly.
restates a shape —
export *andexport type { X } from '…'alike. Only the module thatdeclares the symbol can move.
So the required control is a positive one: name the declaring module's emitted file whose
hash DID move, or a named probe that would have moved it. Absent that, the reading is recorded
INCONCLUSIVE rather than counted as evidence — the same disposition the parent row already gives
a measurement whose control failed.
Measured demonstration carried into the row by date (2026-08-24), three rebuild legs each from a
cleared
dist/and a clearedtsconfig.tsbuildinfo: the declaring package'sdist/base.d.tshash moved with the probe and moved back, while the forwarding file and the entry barrel stayed
byte-identical through all three legs.
Cut ledger — net 0 lines, ceiling holds at zero headroom
The file is ratcheted at 84 lines with headroom 0, so the 6 added lines are paid by 6 cut. No
re-wrap line-buying: every cut is a consolidation whose content survives in a named home, and
each surviving home is more complete than the copy removed here.
闭合关键词两读row compressed 5 → 2references/platform-readings.md§闭合关键词解析(PR 正文写侧)— carries the three measured boundaries this copy never had. Action:references/landing-operations.md, whose inventory-reconciliation paragraph is what actually caught a silent mis-close. What survives here is the reviewer-of-record duty the other two do not own: the pre-ready body scan, still named as the only human gate before merge.被取代 head 上的 run 永不重跑row folded into the head-pinning row above itcancelled-on-superseded-head clause is now the tail of每个门禁读数先钉到 PR 的当前 head, with the "burns a heavyweight cycle" half dropped and the load-bearing half (a rerun faithfully reproduces a defect the current head already fixed ⇒ a false red on a green PR) kept verbatim in substance. Expected-signature fact atreferences/platform-readings.md.Part of收口 row compressed 3 → 2references/landing-operations.md, whose确认 MERGED 的同一动作paragraph owns the action and comment requirements the row now points to.Line-byte budget respected: widest line in the file is 120 bytes, no line added or edited exceeds
it, and the file carries no table row (its
MAX_TABLE_ROW_BYTESpin is 0), so the measured exampleis compressed to the file's bullet idiom rather than tabulated. No issue numbers in the protocol
prose — provenance is carried by date.
Gates — union derived mechanically, run after the final commit
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(repo assertion held againstthis checkout's
origin), derived from the change set vs merge base96732b03a. All readings areon
308a9af55, which is this branch's head and byte-identical to the worktree. Exit codes capturedbefore any pipe.
check:pm-skill-ratchet✓ …/review-checklist.md is 84 lines (ceiling 84; headroom 0).and✓ …/review-checklist.md: widest table row is 0 bytes (pin 0; headroom 0).check:pm-skill-id-lint✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).check:pm-governed-prose✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others.check:skill-frame-sync✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 filescheck:skill-frame-freshness✓ check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now).check:pm-governed-merges✓ check-governed-merges --self-test: 206 assertions …check:doc-authoring✓ doc authoring guard: 48 published skill files clean — no internal issue-id references.check:agent-test-spelling✓ check-agent-test-spelling: 0 violations — 391 file(s) …check:required-contexts✓ check-required-contexts: 6 required context name(s) pinned across 2 workflow(s) …node scripts/check-required-contexts.mjsrequired-set-patrol.ymlentry pointpnpm --filter @objectstack/lint run check:doc-formula-expressions✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 425 files / 1453 TS blocks judged clean by @objectstack/formula.The last one first exited 1 with
PREREQUISITE NOT MET — the workspace package @objectstack/formula is not built, which the gate itself declares is not a measurement ("Nothing was measured: thisgate exited before running a single check"). Built
@objectstack/formulathen@objectstack/lint(
pnpm exec turbo run build --filter=… --concurrency=2, both exit 0) and re-ran for the real greenabove. Recorded here rather than reported as a red, per the gate's own verdict text.
check:pm-governed-proseandcheck:skill-frame-freshnessare not in the mechanically derivednine; they were named in the dispatch and run anyway.
Positive control on the ratchet — this PR's own claim, calibrated
The ceiling verdict above is a green on a file whose ceiling has zero headroom, so on its own it
cannot distinguish "the gate read this file and it fits" from "the gate never read this file". The
control, run from the committed state so the restore leg has a real reference:
PROBE-CONTROL-LINE-ui5914), confirmed on disk —grep -c= 1, file at 85lines — not inferred from an editor's exit code.
check-skill-line-ratchetwent RED, exit 1, naming this exact file:✗ … /review-checklist.md is 85 lines; the ratchet ceiling is 84.git checkout HEAD -- ABS_PATH(absolute path,HEADnamed so the write does notcome back out of a polluted index), proven by state, not by exit code:
git hash-objectof theworktree file equals the HEAD blob
78a592331c7373e998cef03640e9673c6eb5b11f(non-empty, compared),probe hits back to 0,
git diff HEADempty.Scope
.claude/**only — releases nothing, soskip-changesetrather than a changeset (this repo'sroute; the derivation's "once a changeset exists, 8 more families apply" note is the docs-only
branch of that same instruction). No
content/docs/releases/change. No files outside the onehome.
Generated by Claude Code