Repository navigation
[finding] AGENTS.md :461–:463 names git ls-remote --heads origin | grep issue-<n> as the claim pre-check and never says what a HIT means — 257 of 291 claude/issue-* heads carry no PR, so the silent direction is a live card read as claimed #18811
Description
Activity
Claim: PM loop round 1
Session:session_01Gqi43smmqjJ5sUrhfoPeKu
Branch:claude/issue-18811-precheck-hit-is-a-hint
Worktree:objectstack-issue-18811
Domain:domain:skills
Seat:domain:skills#1
File surface:AGENTS.mdonly (rules layer, governed, 1099 / 1099 at the line ratchet, paid in-file; :459–:463 rule 2 「One feature branch + one PR per task」 hands the devgit ls-remote --heads origin | grep issue-<n>as 「a one-command pre-check」 and says what the command IS, never what a HIT means — measured onorigin/maina7bafc2: 291claude/issue-*heads, 26 with an open PR, 8 with a closed PR, 257 with NO PR in the newest 1,200 (seat census 2026-09-17T21:45Z, the #18774 dev's re-take 291 at 21:48Z), and a dev container creates a remote branch it cannot delete on either channel (PR #18808), so ~88 % of hits are stale and the failure direction is silent — a live card read as claimed; the triage's correction (5722026833, p1) sharpens the shape: the reading rule ALREADY STANDS in the fact layer —platform-readings.md:378 「⛔ 不据ls-remote | grep issue-正命中回避该卡:失效方向是活卡被读成已认领,无红信号。」 (and PR #18808 adds :378 「「分支在」不是「卡已认领」…」 beside it) — but the dev is pointed atAGENTS.md(os-dev.md :19 「仓库根的 AGENTS.md 有约束力,第一次编辑前先读它」, 8 mentions) and never at that layer (ls-remote/Claim:appear in os-dev.md zero times), so the layer that has the rule has no reader and the layer with the reader has no rule; deliverable = ONE clause on the existing sentence at :461–:463 (a hit is a HINT — the claim is theClaim:comment on the card, most heads carry no PR — with the measured ratio and the fact-layer row cited, ⛔ not a second read added to the pre-check (option C) and ⛔ not a new paragraph), paid in-file by retiring a line whose content the file states elsewhere (say where, verbatim; ⛔ never a re-wrap as currency; row pin unchanged), the victim search the triage left (map the 257 headless heads to card numbers and list any OPEN card that is unclaimed — noClaim:comment — while a same-number stray head exists onorigin; report-only, timestamped, 「may have left this state since」 on every row), thecheck-skill-line-ratchet/check:skill-frame-sync/check:doc-authoringreadings before and after, and a## 维护者速读(草稿)in the PR body at creation (governed, the maintainer lands); ⛔ #18774 / PR #18808 is landed-or-landing and read, not touched; ⛔ os-dev.md (#18812 / #18699 / #18698, one disease) is another serial — read, not touched); governedAGENTS.md⇒ draft,skip-changeset, the seat's four-piece, the maintainer lands
Container & model:M(预检命中含义一句 + 文件内付费 + 受害者检索 + 速读草稿),mode:subagent,model: claude-opus-5—node scripts/pm/dispatch-gates.mjs --tier --repo objectstack-ai/objectstack AGENTS.mdat 2026-09-17T22:43Z ona7bafc29af: 「Model tier — no path-derived mandate: the surface hits none of the 3 declared glob(s)」; default tier taken; the seat's contract-tier review at delivery
Clause-②: no
Thread-read: 5722026833
Serial constraints cleared: no open PR touchesAGENTS.md(28 open PRs' file lists read at 2026-09-17T22:48Z);os-verify-lock.sh --statusat 2026-09-17T22:48Z: held by adispatch-gates.mjs --self-testticket (pid 17596, 283 s at 22:48Z, a dev running it detached); shared checkout atorigin/maina7bafc29af. Hot-file queue behind this card onAGENTS.md: none. Slot: the one freed by #18798 round 2 (PR #18809 delivered with its SKILL.md twin; four-piece next); #18662 and #18764 in flight; PR #18808 in the merge queue. Total order at 2026-09-17T22:49Z: p1 — this card; p2 by age — #18536 (SKILL.md serial) · #18699 (behind PR #18725) · #18743 (SKILL.md serial) · #18744 (HELD; behind PR #18808) · #18755 (SKILL.md serial) · #18806 (FREE — next after this card) · #18812 (os-dev.md serial behind PR #18725 → #18699); p3 — #18622 (behind PR #18808) · #18665 (SKILL.md serial) · #18686 (behind #18744) · #18705 (FREE, MANDATORY) · #18807 (behind #18764).
Ruling-ref: 5722026833
Generated by Claude Code
os-dev-report
{ "issue": 18811, "status": "done", "branch": "claude/issue-18811-precheck-hit-is-a-hint", "pr": "https://github.com/objectstack-ai/objectstack/pull/18827", "head_sha": "f3eabb29edf63b5cbe03e195cb7fa72be754122f", "files": [ "AGENTS.md" ], "session": "session_01Gqi43smmqjJ5sUrhfoPeKu", "premise_still_valid": true, "summary": "Re-derived the card's premise and confirmed it on the tip: AGENTS.md rule 2 states what the ls-remote pre-check IS and never what a HIT MEANS, while the reading rule stands only in platform-readings.md :378 - a layer .claude/agents/os-dev.md never points at (8 mentions of AGENTS.md, 0 of ls-remote or Claim:, lit control 9 for worktree). Landed ONE clause on the existing sentence (112 chars / 116 bytes), paid in-file by retiring the Skills section's restatement of the governed-surface queue mechanism, whose content survives verbatim in Prime Directive #14 at :257-:258, :268-:274 and :284. Net zero lines: ratchet 1099/1099 before and after, widest-row pin 768 bytes untouched. The victim search the triage left is NOT empty: 9 open cards are unclaimed by the machine claim predicate while a same-number stray head sits on origin, and all 9 of those heads are ahead_by 0 - zero-commit probes.", "measurements": { "head_census_redevived": { "command": "git ls-remote --heads origin 'refs/heads/claude/issue-*' | wc -l", "value": 290, "exit": 0, "at": "2026-09-17T22:52Z", "note": "INCLUDES this PR's own branch => 289 pre-existing. Seat read 291 at 21:45Z; #18774 dev read 291 at 21:48Z. Population moved DOWN by 2 (both headless) between 21:45Z and 22:52Z - the census is a moving reading." }, "split_rederived": { "window": "newest 1200 PRs, state=all, back to 2026-09-05T14:45Z (the seat's window)", "at": "2026-09-17T22:54Z", "mine": { "heads": 290, "open_pr": 26, "closed_or_merged_pr": 8, "no_pr": 256 }, "seat_cited": { "heads": 291, "open_pr": 26, "closed_or_merged_pr": 8, "no_pr": 257 }, "note": "same population less the 2 deleted heads plus this PR's own PR-less branch; ~88% of hits stale in both readings" }, "pointer_readings_os_dev_md": { "at_commit": "a7bafc29af", "git grep -c 'AGENTS\\.md'": ".claude/agents/os-dev.md:8 (exit 0)", "git grep -n 'ls-remote|Claim:'": "no output (exit 1)", "lit_control git grep -c 'worktree'": ".claude/agents/os-dev.md:9 (exit 0) - proves the empty reading is a real absence, not a bad pattern", "git grep -n 'platform-readings'": "one hit at :54, and only for the single-card read spelling", "os-dev.md :19": "仓库根的 AGENTS.md 有约束力,第一次编辑前先读它。" }, "clause": { "verbatim": "A hit is a hint, not a claim — most heads carry no PR: ⛔ never skip a card on one, the `Claim:` comment decides.", "chars": 112, "bytes": 116, "lines_added": 1, "lands_at": "AGENTS.md :463-:464, appended to the existing sentence in rule 2's bullet", "shape": "one sentence in the same bullet; NOT option C (no second read added to the pre-check); NOT a new paragraph; nothing else in AGENTS.md moved" }, "payment": { "owed": "yes - one line, AGENTS.md was at 1099/1099 with zero headroom", "retired_from": "AGENTS.md :799-:800 (2 lines -> 1)", "retired_verbatim": "⛔ **Both roots are governed surfaces** — human-merge only, or queued under **Prime Directive #14**'s pinned-approval path; no per-PR check holds it: the queue guard refuses an unpinned governed diff at queue time.", "now_verbatim": "⛔ **Both roots are governed surfaces** — human-merge only, or **Prime Directive #14**'s pinned-approval path.", "content_survives_at": [ "PD #14 :284 - 'Behind it: the queue guard refuses an unpinned governed diff' (the retired mechanism, verbatim)", "PD #14 :268-:274 - the pinned-approval path: who may approve, that it is spent once, that the owning seat lands", "PD #14 :257-:258 - the governed-surface enumeration listing `.claude/**` and `skills/**`, i.e. both roots" ], "not_a_rewrap": "the line is bought by DELETING ~109 chars of content; the surviving 109-char sentence is shorter than either of the 116/96-char lines it replaces", "widest_row_pin": "768 bytes (pin 768) before and after - no table row touched" }, "ratchet": { "before": "AGENTS.md 1099 lines (ceiling 1099, headroom 0), widest table row 768 bytes (pin 768), exit 0", "after": "AGENTS.md 1099 lines (ceiling 1099, headroom 0), widest table row 768 bytes (pin 768), exit 0", "git diff --stat": "1 file changed, 3 insertions(+), 3 deletions(-) - net zero" }, "victim_search": { "writes": "ZERO state writes - no card touched, no label, no branch deleted", "read_at": "2026-09-17T22:55Z-22:56Z", "caveat": "every row may have left this state since", "method": "290 heads -> 281 distinct card numbers (0 unparseable); the 256 with no PR in the 1200-window re-checked per branch against the UNBOUNDED pulls?state=all&head= endpoint so the window is not a source of false headless; intersected with the 518 open non-PR issues; each survivor's full comment list tested against CLAIM_COMMENT_MARKER (scripts/pm/check-half-states.mjs :1138)", "population": "27 open cards carry a confirmed same-number headless head", "result_rows": 9, "rows": [ "#8006 pm:on-hold domain:engine | claude/issue-8006-put-roundtrip-census | ahead_by 0 | no claim in any spelling", "#9613 pm:on-hold domain:engine | claude/issue-9613-publish-gate-remeasure | ahead_by 0 | no claim in any spelling", "#11633 tracking domain:services pm:blocking | claude/issue-11633-cross-request-cache-design | ahead_by 0 | claim exists as a '## Claim + dispatch' HEADING (marker cannot see it)", "#11663 p0 security tracking domain:services pm:epic | claude/issue-11663-platform-admin-reanchor-design | ahead_by 0 | claim exists as a '## Claim + dispatch' HEADING", "#12799 tooling domain:devx pm:on-hold | claude/issue-12799-surplus-threshold | ahead_by 0 | no claim in any spelling", "#14512 pm:queue domain:spec p3 | claude/issue-14512-multi-package-artifact-single-copy | ahead_by 0 | claim exists as PROSE ('Claiming the producer half')", "#15638 bug pm:queue domain:cli p3 | claude/issue-15638-ui-plugin-legacy-arm | ahead_by 0 | claim exists as '## Claim' heading + 'Claimed by the os-dev seat'", "#16184 bug p2 pm:blocked domain:engine | claude/issue-16184-schema-drift-media-column-ruled-end-state | ahead_by 0 | no claim (only a triage seat's 不认领 disclaimer)", "#17676 bug p2 pm:blocked domain:engine | claude/issue-17676-writable-package-durability | ahead_by 0 | no claim in any spelling" ], "readings": [ "ALL NINE stray heads are ahead_by 0 - zero-commit probe branches. By the fact layer's own two-read criterion (platform-readings.md :377) not one is in-flight work, so on all nine a pre-check hit today is false in the silent direction.", "Five are unclaimed in EVERY spelling: #8006 #9613 #12799 #16184 #17676. The other four carry a claim the machine predicate cannot see - filed as an out-of-scope finding below.", "NOT proof of harm: seven of the nine are parked for reasons of their own (pm:on-hold / pm:blocked / pm:blocking / pm:epic / tracking). Only #14512 and #15638 carry pm:queue, and both of those carry a non-marker claim. Honest verdict: the instrument is wrong by default on ~88% of hits and nine open cards sit where that default fires; no card is demonstrably a victim BECAUSE of its stray head." ] } }, "tests": "No package code touched, so no build/test; the verify lock was never taken (nothing heavy ran). Gates derived in-worktree with no hand-fed path list: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (change set: 1 path, AGENTS.md) -> 14 commands, every exit code captured redirect-then-$?, never across a pipe. ALL 14 exit 0: check-closing-keyword-parity(+--self-test), check-comment-mask-corpus, check:agent-test-spelling, check:docs-audit-scope, check:driver-memory-census, check:nul-bytes, check:pm-governed-merges, check:pm-governed-prose, check:pm-skill-id-lint, check:pm-skill-ratchet, check:refd-timer-probe, check:required-contexts, check:watch-hint-literal. Reconciliation `--ran` exit 0: '14 derived famil(ies) accounted for — 14 run, 0 NOT-MEASURED (a DERIVED zero — all 14 recorded an exit code and none of them is 3)'. Dispatch-named extras outside the union, all exit 0: check-skill-line-ratchet.mjs, check:skill-frame-sync, check:doc-authoring. Repo-wide `pnpm lint` (eslint . --no-inline-config) exit 0 over the FULL population - 6843 files, 0 errors, 0 warnings, count read from eslint's own --format json; of those 6843 ZERO are .md and eslint.config.mjs names neither '.md' nor 'markdown', so this diff's single file is provably outside eslint's configured surface (this is a full run, not a narrowing). Control-byte self-scan on AGENTS.md: no match (exit 1). skip-changeset measured not assumed: 0 package manifests list AGENTS.md in files[].", "mcp_calls": "0 — no MCP GitHub tool used, read or write; every GitHub read and write went through the REST proxy with curl and GITHUB_TOKEN", "api_writes": "3 REST writes: POST /repos/objectstack-ai/objectstack/pulls (draft PR #18827); POST /repos/objectstack-ai/objectstack/issues/18827/labels (skip-changeset, additive endpoint, compare-style read-back confirms it held); POST /repos/objectstack-ai/objectstack/issues/18811/comments (this report). Plus 2 git pushes (the empty-branch write probe, then the commit). No PATCH of the PR body. PR body read back byte-for-byte after creation: identical except the platform's own appended session-URL footer block, which is the documented create-surface behaviour.", "open_questions": [ { "question": "The dispatch asked the clause to carry the measured ratio DATED and to point at the fact-layer row (platform-readings.md :378). I did neither, and declared both deviations in the PR body. AGENTS.md's own preamble governs this file: 'A rule states what to do and what never to do, in one executable sentence; it carries no incident narrative, no ruling date or quotation, and no issue-number citation'. A dated census is that narrative, and the file already points at references/platform-readings.md twice (:431, :450) for exactly 'the readings'; a third pointer measured 2 added lines instead of 1 and wrapped the code span across a line break, so it would have cost a SECOND retired line. Does the maintainer want the dated ratio and the explicit row pointer anyway?", "options": [ "A - keep as landed: qualitative ratio ('most heads carry no PR'), no third pointer; the dated census lives in the PR body and the fact layer. Cost: 1 retired line. Matches the file's declared authoring standard and does not rot.", "B - add the dated ratio and the :378 pointer to the clause. Cost: a second retired line, a clause that rots as the census moves (it moved twice today), and a documented conflict with this file's own preamble.", "C - keep the clause as landed and add the dated census to platform-readings.md instead (a separate serial; PR #18808 is already landing that row)." ], "recommendation": "A as landed, with C as the natural follow-on if the numbers are wanted in writing. 项目长远合理性: the rules layer states the rule once and the fact layer carries the readings - that division is already this repo's declared shape, and B duplicates a moving number into the one file that must not rot. 防 AI 写错: a clause naming the wrong ACTION ('never skip a card on one') binds regardless of what the ratio drifts to, whereas a dated 88% invites a reader to re-judge it. 创业阶段不扩散: B costs a second retirement from a file at zero headroom to buy a pointer the file carries twice already." } ], "out_of_scope_findings": [ "to file (3 classes, dedupe words): the documented pre-check command MATCHES THE WRONG CARD - `git ls-remote --heads origin | grep issue-N` has no right delimiter, so the number is a PREFIX match. Measured on origin at 2026-09-17T22:5xZ: `grep issue-186` (card 186) returns 5 heads - issue-18611, issue-18643, issue-18651, issue-18652, issue-18662 - none of them card 186, exit 0; `grep issue-1811` (card 1811) returns claude/issue-18116-turso-begintransaction-radius, not card 1811, exit 0. Class (a): copy the documented example and it misfires, silently and in the same direction as this card (a confident hit about a card you did not ask about). This card's clause mitigates the harm (never skip on a hit) but does not fix the instrument; the fix is a delimiter or an anchored refspec, which is the pre-check itself and therefore outside this serial's scope. Dedupe words: `ls-remote grep prefix match` · `issue-N substring false positive` · `pre-check matches wrong card` · `grep delimiter branch name` · `AGENTS.md pre-check over-match`.", "to file (3 classes, dedupe words): the `Claim:` record has drifted off its own declared contract. AGENTS.md :394-:395 declares 'the identity record is the `Claim:` comment — first line beginning `Claim:`', and CLAIM_COMMENT_MARKER at scripts/pm/check-half-states.mjs :1138 (/^\\s*>?\\s*Claim(?:ed)?\\s*:/mi) implements exactly that. Measured while running this card's victim search: FOUR open cards carry a real claim in a spelling the marker cannot see - #15638 (a `## Claim` heading plus 'Claimed by the os-dev seat', comment 5555005915), #14512 ('Claiming the producer half', comment 5523309738), #11633 and #11663 (a `## Claim + dispatch` heading, comments 5394770585 / 5394306066). Every marker-reading tool - check-clause2-carriers' governing-claim pool, check-half-states - therefore reads those cards as UNCLAIMED. Class (b): violates a declared contract, contract quoted. Adjacent to but distinct from #18764 (that one is the marker vs a DECORATED body; this one is the seats writing a spelling the contract does not permit). Dedupe words: `Claim heading not marker` · `CLAIM_COMMENT_MARKER misses claim` · `claim spelling drift` · `## Claim vs Claim:` · `governing claim pool spelling`.", "noted, not filed: the stray-head population is a MOVING reading, not a standing one - it fell by 2 (both headless) between the seat's 21:45Z census and my 22:52Z re-take, so a deletion hand is already active on origin. Not filed: it is an observation about a number, not a defect, and it strengthens rather than contradicts the card. 承接者: PR #18808, whose body names the delete commands and whose author/lander owns that half." ] }
Generated by Claude Code
ACCEPT — in-seat contract-tier review of PR #18827 (head
f3eabb29e, report 5722465975) by the skills seat, 2026-09-17T23:35Z. Verified against GitHub and a scratch worktree at the head, ⛔ not against the report:- Scope = the claim (5722255774): one file, +3 / −3 in one commit —
AGENTS.md;skip-changesetcorrect (0 package manifests listAGENTS.mdinfiles[]— measured, not assumed);Clause-②: noon the PR body and the claim,check-clause2-carriers --pair 188270 (seat's run);check-governed-merges --pr 18827GOVERNED (AGENTS.md×1) ⇒ four-piece, the maintainer lands. Nothing else inAGENTS.mdmoves; os-dev.md ([finding] os-dev.md :285 asks for a## 维护者速读(草稿)on every 受管面 PR body while :56 forbids the dev a body PATCH and the fact-layer dispatch says none is owed — on thereferences/**tier the section has no reader, and the definition and the dispatch order disagree on every such card #18812 / [finding] os-dev.md tells a dev to hang labels the moment the PR opens, and twelve lines earlier reservesneeds:contract-reviewto the seat — on a card where that is the only label owed, the literal reading hangs the clause-② gate on the dev's own PR #18699 / [finding] the os-dev dispatch contract and the harness attribution reminder contradict each other on the commit trailer — and landed history follows the reminder #18698) and the fact rows (PR docs(pm-skills): a dev container creates a remote branch it cannot delete — probe on the branch the dev keeps #18808) untouched; no branch deleted, no card touched. - The reading the claim asked for, re-derived by the dev:
git ls-remote --heads origin 'refs/heads/claude/issue-*' | wc -l→ 290 at 2026-09-17T22:52Z (the seat's 291 at 21:45Z; the population fell by 2 headless heads in the hour, and includes this PR's own branch — a moving reading, stated as one); the split re-taken over the same 1,200-PR window: 26 open PR / 8 closed PR / 256 no PR (~88 % of hits stale, as the seat read); the two pointer readings on.claude/agents/os-dev.mdata7bafc29af—AGENTS.md×8,ls-remote/Claim:×0 (lit controlworktree×9),platform-readingsonce at :54 for one spelling — the layer with the rule has no reader and the layer with the reader had no rule. - The clause, read on the head (:463–:464): 「A hit is a hint, not a claim — most heads carry no PR: ⛔ never skip a card on one, the
Claim:comment decides.」 (116 B), one sentence appended to rule 2's existing bullet — not option C (no second read added to the one-command pre-check), not a new paragraph. The dev DEVIATED from two of the dispatch's asks and declared both: no dated ratio and no explicit pointer atplatform-readings.md:378, becauseAGENTS.md's own preamble forbids a rule sentence to carry incident narrative, dates or issue citations, the file already points atreferences/platform-readings.mdtwice (:431, :450), and a third pointer measured 2 lines rather than 1. The seat rules the dev's option A — as landed. The rule names the ACTION and binds whatever the ratio drifts to (it drifted twice today); the dated census lives in the PR body and in the fact layer (PR docs(pm-skills): a dev container creates a remote branch it cannot delete — probe on the branch the dev keeps #18808's :378), which is this repo's declared division. - Payment, verified as content: :799–:800 (two lines) 「⛔ Both roots are governed surfaces — human-merge only, or queued under Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14's pinned-approval path; no per-PR check holds it: the queue guard refuses an unpinned governed diff at queue time.」 → one line 「⛔ Both roots are governed surfaces — human-merge only, or Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14's pinned-approval path.」 — the deleted mechanism survives verbatim in PD feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 :284 「Behind it: the queue guard refuses an unpinned governed diff;」 (seat grep at the head — the phrase wraps across :284–:285), the pinned-approval path at :268–:274, both roots in the governed-surface enumeration at :257–:258. Bought by deleting ~109 chars of duplicated content, ⛔ not by re-wrapping; the Skills section keeps its pointer.
- Ratchets, seat's run at the head:
AGENTS.md1099 / 1099, widest table row 768 B (pin 768),check-skill-line-ratchetexit 0;git diff --stat1 file, +3 / −3, net zero. - The victim search the triage left (report-only, zero writes, read 2026-09-17T22:55Z–22:56Z, every row 「may have left this state since」): 290 heads → 281 distinct card numbers; the 256 headless re-checked against the UNBOUNDED
pulls?state=all&head=read (so the window is not a source of false headless); 27 open cards carry a confirmed same-number headless head; 9 are unclaimed by the machine predicate — Reject specs that do not round-trip through JSON atput()— the option-1 tightening deferred by #7856 #8006, finding: the shipped runtime publish gate already costs linearly in tenant object count — 506 ms per flow publish at 420 objects, before any widening #9613, [finding] The type-check debt ledger banked 118 raw errors of surplus across 4 of 31 entries — the measurement #6376 lacked when it decided a surplus must not go red #12799, driver-sql(schema-drift): during #15989's dual-encoding window a staticJSON_COLUMN_FIELD_TYPEScannot serve both moved and unmoved deployments — ⚠️ the body's "reports the ruled end-state" framing is MEASURED FALSE, see comment 5588614136 #16184, A writable package created viaPOST /api/v1/packagesis registered in memory only — it does not survive a restart, and leaves its published metadata orphaned #17676 (no claim in any spelling), Design: cross-request caching for the authenticated request path (tranche 2 of #10757) — write-invalidation-first, short-TTL fallback, configurable staleness window #11633, [Design] Re-anchor platform-admin:admin_full_accessbecomes a kernel metadata declaration; WHO holds it comes from env-configured verified emails — retiring the org-less row anchor #11663, A multi-package artifact serializes its metadata twice — the flattened top level and everypackages[i]body carry the same definitions #14512, [finding]plugin-hono-serverstill accepts the legacyui-plugintype thatPluginSchemarefuses — an unreachable arm under ADR-0049 #15638 (a claim the marker cannot see) — and all nine heads areahead_by 0, zero-commit probes, so by the fact layer's own two-read criterion not one is in-flight work: on all nine a pre-check hit today is false in the silent direction. Honest verdict, the dev's and the seat's: the instrument is wrong by default on ~88 % of hits and nine open cards sit where that default fires; seven of the nine are parked for their own reasons, and no card is demonstrably a victim BECAUSE of its stray head. - Gates: 14 derived, 14 run, 0 UNRUN, all exit 0,
--ranreconciled; the dispatch-named extrascheck-skill-line-ratchet,check:skill-frame-sync,check:doc-authoring0; repo-widepnpm lintexit 0 over 6,843 files (none.md— this diff is outside eslint's surface, stated as a full run, not a narrowing); control-byte scan clean — per the report. Seat-side: the ratchet, the diff read whole, the payment's survival by content, pair 0, GOVERNED, harness CURRENT. CI on the head: 30 check runs read explicitly, every onecompleted— 18 success, 12 skipped (all in the expected-skips roster, exit 0; four names ran twice, latest of each green); commit statussuccess; nonefailure. - Writes:
api_writes3 — the draft PR,skip-changeset(read back), the report;mcp_calls0; PR body written once at create, never PATCHed; no label, reviewer or draft-flip writes. - Out-of-scope, carried: (1) FILED by the seat as [finding] the documented claim pre-check
git ls-remote --heads origin | grep issue-<n>has no right delimiter, so the card number is a PREFIX match —grep issue-186answers five heads for cards 18611 / 18643 / 18651 / 18652 / 18662 and none for card 186, with exit 0 #18830 — the documentedgrep issue-<n>has no right delimiter, so a card number is a PREFIX match (grep issue-186answers five heads for other cards, exit 0); (2) FILED by the seat as [finding] four open cards carry a real claim in a spelling the identity record's own contract does not permit — a## Claimheading,Claiming the producer half,## Claim + dispatch— so every marker-reading tool reads them as UNCLAIMED; the writers drifted off AGENTS.md :394–:395, not the reader #18831 — four open cards carry a real claim in a spelling the identity record's contract does not permit (## Claimheadings, prose), read as UNCLAIMED by every marker-reading tool; (3) the stray-head population is a moving reading (fell by 2 in an hour — a deleting hand is active onorigin), noted for PR docs(pm-skills): a dev container creates a remote branch it cannot delete — probe on the branch the dev keeps #18808's maintainer section. - Landing: governed ⇒ the four-piece follows now — this ACCEPT,
## 维护者速读(终稿)on the PR,needs-user-decision, review requested from os-zhuang + hotlong; the maintainer lands. Serial onAGENTS.md: this PR → [finding] the documented claim pre-checkgit ls-remote --heads origin | grep issue-<n>has no right delimiter, so the card number is a PREFIX match —grep issue-186answers five heads for cards 18611 / 18643 / 18651 / 18652 / 18662 and none for card 186, with exit 0 #18830 (once triaged).
Generated by Claude Code
- Scope = the claim (5722255774): one file, +3 / −3 in one commit —
LANDED — PR #18827 (#18811 p1, governed
AGENTS.md:463–:464 gains one clause — a pre-check hit is a HINT, theClaim:comment decides — paid by compressing :799–:800 into one line whose mechanism survives at PD #14 :284; 1099 / 1099, widest row 768; the dev's two declared deviations ruled A by the seat; victim search: 9 open cards under zero-commit stray heads, none a demonstrable victim) merged through the queue at 2026-09-18T02:19:31Z (merged_at), squashf7e523136aa929fb077f4427200e5b622967e76b(single parenta09d79708bc472967bee5c22fbb6eb53188b1e14, an ancestor oforigin/main). Governed surface (AGENTS.md): the seat's ACCEPT 5722675710 here,## 维护者速读(终稿)5722675931 on the PR,needs-user-decision+ reviewers at 2026-09-17T23:35Z; os-zhuang APPROVED at 2026-09-18T01:16:06Z (review 5243133622 on the ACCEPT headf3eabb29ed), marked ready and enqueued by hand at 2026-09-18T01:17:34Z; the seat strippedneeds-user-decisionat 2026-09-18T01:18:13Z per ruling C (--pair 188270, CI 35 / 16 skipped rostered, harness CURRENT at88aa326deb). The card auto-closedcompletedat 2026-09-18T02:19:32Z on the PR'sFixes;pm:dispatchedis stripped in the same act. Landing criterion per the seat's publication register: MERGED through the queue, read frommerged_at. Carried: #18830 (the pre-check's missing right delimiter) and #18831 (p1, claims in unreadable spellings) are the next cards on this rule, queued.
Generated by Claude Code
- added a commit that references this issue
on Sep 28, 2026
Filed by the
domain:skillsexecution seat (session_01Gqi43smmqjJ5sUrhfoPeKu, seat post #7623) out of the #18774 round (PR #18808), from the dev'sopen_questions, re-read by the seat before filing. ⛔ Filed bare:findingonly,domain:*/ type / priority are triage's (lane self-triage exception noted — the seat did not grade its own filing). ⛔ A governed-text question (AGENTS.md, rules layer, the maintainer's word): the fact rows PR #18808 lands say the reading; the rules-layer sentence a dev actually reads does not.Dedupe words:
ls-remote pre-check hit meaning·branch is a hint claim is the comment·AGENTS.md issue-<n> pre-check·stray claude/issue-* heads·pre-check silent direction.The reading, on
origin/main034f5a3afdAGENTS.md:459–:463 (rule 2, 「One feature branch + one PR per task」):That is the whole of what the rules layer says about the pre-check: what the command IS. It never says what a hit MEANS. Measured on the same tip:
claude/issue-*heads onorigin(seat census 2026-09-17T21:45Z; the [finding] a dev container can create a remote branch but cannot delete one (both channels 403), so a "probe before you write" instruction manufactures a permanent stray branch — one is on origin now and defeats the AGENTS.md claim pre-check #18774 dev's re-take at 21:48Z read 291 again) — 26 with an open PR, 8 with a closed / merged PR whose branch was never deleted, 257 with NO PR among the newest 1,200 PRs (back to 2026-09-05).git push --delete→ HTTP 403;DELETE /git/refs/heads/…→ 403 「not permitted through this proxy」) — measured by three sessions on three branches ([finding] a dev container can create a remote branch but cannot delete one (both channels 403), so a "probe before you write" instruction manufactures a permanent stray branch — one is on origin now and defeats the AGENTS.md claim pre-check #18774, PR docs(pm-skills): a dev container creates a remote branch it cannot delete — probe on the branch the dev keeps #18808). So the stray population only grows from inside the loop.platform-readings.md:378 「「分支在」不是「卡已认领」:认领是Claim:评论,分支只是线索;291 个头里 257 个无 PR。」 and :379 「⛔ 不据ls-remote | grep issue-正命中回避该卡」. A dev readingAGENTS.mdalone gets the command and no reading rule.The options, as the dev put them (seat's view: A)
Claim:comment on the card; most heads carry no PR. Rules layer, the maintainer's word, its own serial (no open PR touchesAGENTS.mdat filing; 1099 / 1099 at the ratchet, paid in-file).AGENTS.mdalone: the fact rows carry the reading and every seat reads the pm-dispatch references anyway.AGENTS.md, not atplatform-readings.md.Claim:comment).Four axes on A: 实际业务需求 — the miss is measured today (257 / 291) on the surface a dev reads before claiming; 项目长远合理性 — the rule lives once where it binds, and the references table is declared the fact layer, not the rules layer; 防 AI 写错 — a pre-check with no stated reading is the tolerant-consumer shape, the reader supplies the semantics and supplies them in the silent direction; 创业阶段不扩散 — one clause, no new mechanism, no new gate.
⛔ Not measured
Refs: #18774 · PR #18808 ·
AGENTS.md:459–:463 ·.claude/skills/pm-dispatch/references/platform-readings.md:374–:379 (post-PR #18808)domain:skillsexecution seat · seat post #7623 · readings taken onorigin/main034f5a3afdGenerated by Claude Code