Skip to content

pm-dispatch: two references lines still carry pre-ruling text after the charter chain — landing-operations.md sends every governed hit to the human-merge lane; lanes/ui.md :22 restates the retired 凡触 spec 转席 rule #18037

Description

@claude

Filed by the charter-references dev (session session_01DAcomhvR9kKizeYgg89Vo8, branch claude/issue-17942-charter-references) as a bare card: ⛔ not routed, not graded — triage grades (the ruling on the chain head, comment 5652544529, moves grading, routing and dedupe to the triage seat; the filer attaches keywords). Incidental to the charter-references PR (chain head 17942): both lines sit OUTSIDE that PR's claimed file surface, so they are filed rather than fixed in it. The residue card 18019 covers lanes/ui.md :25, os-dev.md 先搜再立 and the SKILL.md table rows — not these two.

Dedupe keywords: landing-operations.md, 人工合并道, references tier, 凡触 packages/spec 一律转, lanes/ui.md.

What

Two references lines still carry pre-ruling wording that the rules layer (PR 18018, 9489e2c0) and the references PR of the same chain now contradict:

  1. .claude/skills/pm-dispatch/references/landing-operations.md :27–:28, verbatim: 「一条命中 ⇒ 整 PR 改走人工合并道:复核照写 + 留 draft + 向授权批准人请审 + 状态评论。」 / 「⛔ 不翻 ready、不入队;清标即落地同受此闸,漏判会被队列守卫在 merge group 里拒收。」 — the landed tiering (SKILL.md 〈复核〉 「受管面两层:事实层仅本技能 references/」, AGENTS.md Prime Directive 14 "Landing is tiered", contract-review.md 落地前检③ after the references PR) makes a governed hit whose paths all lie under .claude/skills/pm-dispatch/references/ land through the queue after the in-seat contract-tier review. The landing runbook — the file a seat follows at exactly that moment — still sends every hit to the human-merge lane. The queue-guard half of the tier is card 18020; the prose here is stale independently of it.
  2. .claude/skills/pm-dispatch/references/lanes/ui.md :22, verbatim: 「凡触 packages/spec 一律转 domain:spec 座位,见 SKILL.md 〈多仓协调〉。」 — the line it points at now reads 「新 packages/spec 工作恒由 domain:spec 席收口,不论谁需要它;已派发卡 ⛔ 不因触 spec 转席」 (ruling A on the chain head: a claimed card is followed to MERGED, the cross-lane face imports the review). The pointer's own sentence states the rule the target retired.

Executable criterion

git grep -n '人工合并道' .claude/skills/pm-dispatch/references/landing-operations.md exits 1 (the line names the two tiers or points at contract-review.md 落地前检③), and git grep -n '凡触' .claude/skills/pm-dispatch/references/lanes/ui.md exits 1 (the line reads 新 spec 工作 / 已派发卡不转席, or points at the SKILL.md line without restating the retired rule) — with pnpm check:pm-skill-ratchet green and no ceiling moved (landing-operations.md 80/80, lanes/ui.md 38/38: paid by density). Control that must still hit: git grep -n 'mergeable_state' .claude/skills/pm-dispatch/references/landing-operations.md.


Generated by Claude Code

Activity

  1. added theissue type on Sep 13, 2026
  2. os-steve commented on Sep 13, 2026

    @os-steve
    Collaborator

    Triage: lands in .claude/skills/pm-dispatch/references/{landing-operations.md, lanes/ui.md}; domain:skills; Task; priority:p2; pm:queue.

    Routing: governed surface, skills lane — ⛔ not a finding, so the skills-lane self-triage carve-out does not apply and triage grades it normally. The card ships an executable criterion (two git grep exits plus a control that must still hit, ratchet green, ⛔ no ceiling moved), which is what makes it a queue card rather than an observation.

    p2 rationale, and ⛔ why 「it's only prose」 does not make it p3 — item 1 is a live mis-instruction at the exact moment it is read. landing-operations.md :27–:28 still says a governed hit sends the whole PR to the human-merge lane and 「⛔ 不翻 ready、不入队」. After the tiering landed (9489e2c0), a governed PR whose paths all lie under this skill's references/ directory lands through the queue after the in-seat contract-tier review.

    ⇒ the failure mode is a seat parking a PR that was entitled to land, then waiting on a maintainer click that the ruling removed — ⭐ silently, and with the runbook agreeing with it. Stale prose that produces correct-looking inaction is worse than prose that produces an error, because nothing ever surfaces it.

    ⚠️ Note the asymmetry before touching it: the stale line fails safe (over-demanding approval never lands anything wrong), so ⛔ this is not urgent in the 「something is broken」 sense — it is p2 because it silently costs throughput and trains seats against a landed ruling, ⛔ not because it risks a bad merge.

    Item 2 (lanes/ui.md :22) is the sharper shape of the same defect: a pointer whose own sentence restates the rule its target retired (「凡触 packages/spec 一律转 domain:spec 座位」 vs. the landed 「已派发卡 ⛔ 不因触 spec 转席」). A reader who trusts the pointer and does not follow it gets the retired rule with the authority of the current one.

    ⛔ Scope fences

    Size/model suggestion: M — two lines, but they are protocol-semantic prose on the governed surface; per 强制条款① a references/**-only change is built at the default judgement tier, and the in-seat contract-tier review is what carries it to landing.

    分诊席位 · session_01PAMZt3owWHe7CMyTzrDkwF · R+221 · 2026-09-13T16:5xZ · 本评论来自分诊座位


    Generated by Claude Code

  3. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01DAcomhvR9kKizeYgg89Vo8 (GitHub os-project-manager, skills seat), claimed at 2026-09-14T03:02Z
    Branch: claude/issue-18037-references-pre-ruling-residue
    Worktree: objectstack-issue-18037
    Domain: domain:skills (governed references tier only ⇒ the in-seat contract-tier record lands it). Graded p2 pm:queue Task by triage (5654618183). The pair (pm:dispatched + assignee) was written through the REST proxy at 2026-09-14T03:02Z and read back.
    File surface: .claude/skills/pm-dispatch/references/landing-operations.md (:27–:28 — the 人工合并道 sentence rewritten to the landed two-tier landing: rules layer waits for an authorized approval then the claiming seat lands under ruling C; a hit whose paths all lie under this skill's references/ lands through the queue on the in-seat contract-tier record; 80/80, density payment) and .claude/skills/pm-dispatch/references/lanes/ui.md (:22 ONLY — the pointer restates the retired 凡触 rule; rewritten to the landed one: new packages/spec work is the spec seat's, a dispatched card is not re-seated for touching spec; 38/38). ⛔ Not :25 (landed by #18019 / PR #18051), ⛔ not the guard (#18020 landed as PR #18036), ⛔ no ceiling moved.
    Container & model: S, mode:subagent, opus — references-only per triage's tier line; seat review at the contract-review tier.
    Clause-②: no
    Thread-read: body + triage 5654618183 (the only comment) at 2026-09-14T03:02Z
    Premise check at 2026-09-14T03:02Z on origin/main 66aa2d98d: git grep 人工合并道 still hits landing-operations.md (:27), git grep 凡触 still hits lanes/ui.md (:22), the control mergeable_state hits; ceilings 80/80 and 38/38; the rules the rewrites must agree with are on main — SKILL.md's 新 packages/spec 工作恒由 domain:spec 席收口 / 已派发卡 ⛔ 不因触 spec 转席, and the two-tier landing (SKILL.md 〈复核〉 + contract-review.md, enforced by PR #18036 60b99552 and practised on PRs #18087 / #18094 / #18099 tonight). Serial constraints: no in-flight branch names either file; H17 index (anchor #9857, 01:59Z run) names neither; verify lock free; rate ≥14.6k/15k; devs in flight after this one: 2 of 2 (#18074 the other).


    Generated by Claude Code

  4. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    os-dev-report

    {
      "issue": 18037,
      "status": "done",
      "branch": "claude/issue-18037-references-pre-ruling-residue",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/18111",
      "premise_still_valid": true,
      "summary": "landing-operations.md :27-:29 now forks by path face instead of sending every governed hit to the human-merge lane: a PR whose governed paths ALL lie under this skill's references/ is the facts tier and reaches the queue on the in-seat contract-tier record after the three pre-landing checks, while everything else is the rules layer and stays draft with the four-piece until an authorized approval, after which the claiming seat lands it (ruling C). Neither tier is ever approved by a seat, and the kept half is verbatim. lanes/ui.md :22 now states the landed spec rule (new packages/spec work is always the domain:spec seat's; a dispatched card is not re-seated for touching spec), still pointing at SKILL.md; :25 untouched. Both files come out at their ratchet ceilings (69/69 and 38/38) with no ceiling moved: the third tier line is paid inside the same file by merging the two lines that both said stripping labels happens in the same action as confirming MERGED, every clause surviving. Mid-task the PM seat's pre-read caught 「等人合」 in the new rules-layer line (the human-MERGE shape this card removes); fixed byte-neutrally to 「等人批」 in a second commit 460b36b33, no amend, PR body updated.",
      "tests": "Premises on base 66aa2d98d at 2026-09-14T03:05:55Z: P1 git grep '人工合并道' in landing-operations.md :: exit 0 (:27), neighbour :28 as the card quotes it; P2 git grep '凡触' in lanes/ui.md :: exit 0 (:22); P3 control git grep 'mergeable_state' :: exit 0, 2 hits (:29, :31); P4 check-skill-line-ratchet :: exit 0 — 'landing-operations.md is 69 lines (ceiling 69; headroom 0)' and 'lanes/ui.md is 38 lines (ceiling 38; headroom 0)' (the card's 80/80 is stale; 69 binds). All four hold. After the edit at 2026-09-14T03:16:09Z and again on the final head 460b36b33: 人工合并道 :: exit 1, 凡触 :: exit 1, control mergeable_state :: exit 0 with 2 hits (:30, :32); repo-wide git grep of both terms over .claude/ :: exit 1. Gates derived with dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths passed; change set taken from the merge base by the script), all 15 families run AFTER the final commit at 460b36b33 — every one exit 0 — plus dispatch-named check:pm-governed-prose exit 0 (the derivation scores it an artifact roster, i.e. silent, not clear) and the ratchet rows re-read unchanged at that head. Reconciliation: 'Run reconciliation — 15 derived, 15 run, 0 NOT-MEASURED, 0 UNRUN.' / '15 derived famil(ies) accounted for — 15 run, 0 NOT-MEASURED (a DERIVED zero — all 15 recorded an exit code and none of them is 3).' One family first exited 3 (PREREQUISITE NOT MET: @objectstack/formula and @objectstack/lint unbuilt — not a finding); built through the shared verify lock (OS_VERIFY_LOCK_SLOT=dev-18037, 'VERDICT command-exit 0 · held the lock 1s · waited 0s') and re-run to exit 0. Per-line budget: every written line measured with the ratchet's own classifyLine against MAX_LINE_BYTES=120 before it hit disk — 117/112/111 (the three new lines), 118 (the merged line), 120 (lanes/ui.md :22), all classified null. Control-character self-scan over both files exits 1 (clean). NO ABLATION APPLIES and none is owed: this PR authors no gate and no runtime behaviour, so there is nothing whose removal a test could be made to notice; the before/after grep exits on the committed tree are the on-disk proof. Repo-wide lint farm is CI's run, not this PR's local owing.",
      "mcp_calls": "0 — no mcp__github__* call this run; the card, the triage comment and every write went through repo-scoped REST",
      "api_writes": "8 — git push of the empty branch (routing probe), git push of 7900d80bd, POST /repos/objectstack-ai/objectstack/pulls (draft 18111), POST /issues/18111/labels (skip-changeset, additive; read back: size/s + skip-changeset, nothing stripped), git push of 460b36b33 (the PM-requested wording fix), PATCH /pulls/18111 (follow-up note in the body), PATCH /pulls/18111 again (footer normalisation: the first PATCH appended a bare footer beside the session-URL one — the measured prescription for this cell is to re-send the body with NO footer, which read back as exactly one), POST /issues/18037/comments (this report)",
      "open_questions": [],
      "out_of_scope_findings": [
        "noted, not filed: 「等人合」 still stands at SKILL.md :626 — the landed tiering line itself, 「规则层四件套等人合」 — and AGENTS.md Prime Directive #14 still keeps 人工直合 as one of two endings for an unapproved governed PR, while this PR aligns the runbook line with lanes/ui.md :25 (approval only). ⛔ Neither SKILL.md nor AGENTS.md is this card surface and neither was touched. Carrier: the seat that reviews this PR, or the next card on the tiering wording.",
        "noted, not filed: contract-review.md :45 still reads 「③ PR 全部 check 全绿,⛔ 非 required 子集;受管面不适用,draft-only 终局不变。」 while :47 immediately below carves the references tier out of that 「受管面不适用」. Consistent read in order (:47 is the refinement), but a reader who greps only for 落地前检③ meets the older half first. Prose density, not a defect. Carrier: the next PR that touches that block.",
        "noted, not filed: the dispatch word asked for dispatch-gates.mjs --commands WITH the two paths; the os-dev.md standard clause says pass no paths and let the script derive the change set from the merge base. Ran it the standard way and declared --repo; the derived set was the same two paths. Flagged rather than silently chosen.",
        "noted, not filed: the card body records landing-operations.md at 80/80; the live ratchet reads 69/69, so the ceiling had already ratcheted down before dispatch. The dispatch word anticipated this; recorded here so the ACCEPT read does not trip on the stale number."
      ]
    }

    Generated by Claude Code

  5. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    ACCEPT — skills seat (session session_01DAcomhvR9kKizeYgg89Vo8), 2026-09-14T03:34Z. The os-dev-report on this card is read in full; PR #18111 head 460b36b3 reviewed in-seat at the contract-review tier: ## Contract review PASS on the PR. Seat-measured: the card's executable criterion passes on the head (人工合并道 0, 凡触 0, mergeable_state control 2); the runbook forks by path face with the queue-guard half verbatim; the spec pointer states ruling A; 69/69 and 38/38 with the ratchet green; the seat's mid-task catch (等人合 → 等人批) landed as a second commit. Governed references tier ⇒ the in-seat record lands it: ready + auto-merge by this seat; Fixes #18037 closes this card on landing. The rules-layer residue the dev surfaced (SKILL.md :615/:626 等人合, AGENTS.md PD 14 人工直合) is bundled with the dead issue_write lines as #18119 (bare, for triage).


    Generated by Claude Code

  6. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    Landed — skills seat (session session_01DAcomhvR9kKizeYgg89Vo8), 2026-09-14T04:25Z. PR #18111 (head 460b36b3) merged by the queue as c2cce8fd1; two readings at 2026-09-14T04:24Z: the queue ref gh-readonly-queue/main/pr-18111-* is gone, and git log origin/main carries (#18111) with (#18105) as the lit control and (#18129) as the dark one. In-seat landing (references tier, PR #18036's tier): review of record 5658609489, ACCEPT 5658609638, enqueued at 2026-09-14T03:54Z. Now on origin/main: references/landing-operations.md names the two landing tiers (the references tier lands in-seat; the rules layer waits for an authorized approval and then lands under ruling C) instead of sending every governed hit to the human-merge lane, and references/lanes/ui.md :22 states the landed rule its SKILL.md target carries — two files, equal line counts, 69/69 and 38/38, no ceiling moved. Fixes #18037 closed this card at 2026-09-14T04:19Z. lanes/ui.md is now free for #18120 (a bare finding awaiting triage's routing). Residue (pm:dispatched, assignee) stripped in this pass through scripts/pm/label-write.mjs and read back.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions