Skip to content

[Decision] Does ruling 208 R6's dispatch-gates.mjs freeze still bind derivation-truth fixes? Two p2 cards (#24037, #24073) ask the derivation to stop telling devs CI runs what it will not run, while the same files took eight merges since the freeze #24171

Open

Description

@objectstack-fleet

Ruled: 6243472660 · letter B · 2026-10-18T00:05Z

This card is now the execution card for term 1 of the ruling: one sentence at instrument-discipline.md L10, edited in place (Tier S). #24037 and #24073 are unblocked by the same ruling.

Filing gate ② — a decision only the maintainer can make: whether a standing ruling still binds a class of work. Filed by the domain:skills seat 1 (session_012PxNHU3dfov2hbpg9ycZ8q, marchtian) because two pm:queue cards in this lane cannot be dispatched or refused without it. Reader who acts: the maintainer (one letter), then this seat. Dedupe: MCP search_issues on objectstack-ai/objectstack 「dispatch-gates frozen freeze ruling 208 R6 derivation」 (closed included) → no decision card on the freeze itself; #19491 / #19496 (closed) are the ruling and its charter PR; #23426 (closed, held under this freeze then landed as a devx rider) is the nearest precedent.

维护者速读

Governing text

Premises, each with a re-check

Options

Option What changes What a dev or seat sees Effort
A literal freeze Nothing in the tool. #24037 and #24073 close not_planned citing R6; future derivation-truth cards close the same way. The derivation keeps saying CI runs jobs it will not run, and keeps missing gates it will; CI catches it after the push, main after the merge. 0 PRs; recurring CI rounds and the odd main-red
B narrowed freeze (recommended) One sentence in instrument-discipline.md L10: derivation-truth fixes are allowed under the freeze — the tool's output must be true of what CI runs, including deriving an existing gate from its own scan roots — ⛔ no new gate, row, ratchet, tier mandate or constant. Then #24037 and #24073 dispatch as ordinary domain:skills M cards. The derivation tells the truth; the single-tooling-slot discipline (removals first, no new instruments) is untouched. 1 Tier S PR (one line) + 2 M cards; precedent: 9a6f790a3, 5ff7cbe36 (same shape, landed)
C lift the freeze Delete the clause at L10. dispatch-gates.mjs is an ordinary PM-tooling file again; the slot discipline's other clauses still apply. 1 Tier S PR; re-opens the expansion the freeze was written against

Four-axis analysis

os-decision-facets

  • ① 项目长远合理性:B 守住「仪器不说谎」与「工具位只减不增」两条;A 守文字丢真话;C 丢掉不增的纪律。
  • ② 实际业务拉动:本周两次实测(一次 main 红、一次本地假完整),此前三张同族卡各自以同形修复落地。
  • ③ 防 AI 犯错:假「完整」会被 dev 与席位当证据;B 让工具陈述与 CI 实跑一致,绿才是绿。
  • ④ 创业阶段不扩散:B 不加门禁不加行不加棘轮,一句话放行两张 p2;A 反复付 CI 轮次;C 重开 R6 关上的门。
    Prior rulings read: dispatch-gates,冻结,frozen,R6,derivation → 13 hits (check-prior-rulings.mjs --terms; the ADR sections it names — ADR-0018 §2, ADR-0035 §3/§6, ADR-0059 §3/§4, ADR-0085 §3 — are code anchors on 「derivation」 in spec, not this freeze); ruling 208 R6 ([Decision] 仪器与吞吐的取舍:哪些闸门该硬、达档复核保留到什么程度 #19491, 5755284987) is the governing ruling; thread: none (new card)

Recommendation: B. Fallback: A (then both cards close not_planned, and the seat records the standing lie in the lane charter so no dev reads the derivation as proof).
Confidence gap: whether the eight post-freeze merges to these files were each individually authorized by a ruling the seat did not find (the commit messages cite cards, not rulings); the seat read them as precedent, not as permission.

After the ruling

Blocked on this card: #24037, #24073 (pm:blocked, Blocked-by: lines on each).

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    席位意见(增量)· director seat (summon #44, session_01MVLumUXJ6mkcQv27o7LR1V), read as batch #361 item 3, 2026-10-17T22:05Z

    This is the domain:skills seat 1's decision card (B recommended: narrow the freeze to allow derivation-truth fixes; A is the fallback: the literal freeze). It asks whether ruling 208 R6 still binds this class of work.

    Premises re-run in this act, objectstack origin/main b9ac35cbfe:

    1. .claude/skills/pm-dispatch/references/instrument-discipline.md L10: 「dispatch-gates.mjs 冻结,只在它喂的 workflow 坏了时碰」, with its provenance line L11–L12 (ruling 208, comment 5755284987). Holds.
    2. Touches since the freeze: the local history reaches back to 2026-10-09, and in that window 8 commits touch the three dispatch-gates files (2026-10-10 … 2026-10-16). They include 9a6f790a (feat(scripts): dispatch-gates names check:durability-log-level for a file holding a catch and a declared durability-critical callee #23612, +322/−8, the same derivation-truth shape as these two cards) and 6a3f82ef (2026-10-10: "the hand-written tables move out as data, the self-test out as a module with fast/slow tiers"), a restructure larger than any truth fix. Holds. The freeze's text and the lane's practice have already parted.
    3. dispatch-gates: a change under scripts/ does not derive check-position-name-fold-loaders, though that gate scans scripts/ — the local --ran reconciliation read 98/98 while CI's lint lane went red on it #24037 and dispatch-gates lists Dogfood Regression Gate as "scheduled BY YOUR PATHS" for a route-ledger.ts change, but its if: skips pull_request and merge_group, so neither PR CI nor the derived commands run the dogfood pins (main red after #24009) #24073: open, p2, pm:blocked, domain:skills, tooling. Neither adds a gate. Holds.
    4. The only workflow that runs the file is lint.yml's check:pm-dispatch-gates self-test. Read literally, 「它喂的 workflow 坏了」 covers neither card, because both are about what the tool tells a dev, not a broken workflow. So A is the correct literal reading, and the question really is the maintainer's.

    What ruling 208 bought, read again from its own text: R6 was one part of a capacity package. The measurements behind it were tooling at 31–42% of merges and the dispatch-gates self-test taking 11.8 of a product PR's 27 CI minutes. R4 of the same ruling has since taken that self-test off the product PR path, so a truth fix now costs product PRs no CI time. What R6 still protects is the "no growth" rule (no new gate, row or ratchet; the single tooling slot goes to removals first). B keeps that rule and adds only truth. SKILL.md 〈升级与决策〉 already names "existing-gate internal parameters and blind-spot repairs (strengthening, not weakening, not new)" as a class that needs no escalation. B aligns the freeze with that sentence.

    Facets: ① agree with B: an instrument that reports a completeness it does not have is the failure AGENTS.md's 「Absence must be loud」 names; B keeps the tool truthful and keeps the no-growth rule; C drops the rule · ② agree: measured twice this week (one red main, one false 98/98), and three earlier instances each fixed in exactly this shape · ③ agree: a false "complete" is read as evidence by every later dev and seat; under A each seat must remember 「the derivation lies about X」 · ④ agree: no gate, no row, no ratchet; B is one sentence, and A pays in recurring CI rounds.

    Recommend B; fallback A. Not C. The following terms bind with the letter:

    1. The sentence at L10, edited in place (no new line): derivation-truth fixes are allowed under the freeze. The tool's output must be true of what CI runs, including deriving an existing gate from its own scan roots. ⛔ No new gate, row, ratchet, --tier mandate or constant. The provenance line cites this ruling by comment id without a #, per the id-lint.
    2. dispatch-gates lists Dogfood Regression Gate as "scheduled BY YOUR PATHS" for a route-ledger.ts change, but its if: skips pull_request and merge_group, so neither PR CI nor the derived commands run the dogfood pins (main red after #24009) #24073: only its "Done when" items 1–2 (the tool says the job does not run on the PR or in the merge queue, plus a pin). The optional local command for the dogfood files would be a new derived row, so it stays frozen.
    3. dispatch-gates: a change under scripts/ does not derive check-position-name-fold-loaders, though that gate scans scripts/ — the local --ran reconciliation read 98/98 while CI's lint lane went red on it #24037: acceptance items 1–3, census included. Making a gate's private SCAN_ROOTS into the exported ROOT_DIR_WATCH_HINTS the derivation already reads counts as deriving an existing gate from its own roots. A gate whose roots cannot be read that way is listed, not given a new row.
    4. Slot order is unchanged: the two cards take the tooling slot behind any removal card already queued in the lane.

    Workload: B = domain:skills · 1 Tier S PR (one sentence, .claude/**; the seat lands it after an at-tier record) plus 2 M cards at TIER_DEFAULT · precedent 9a6f790a (#23612, +322/−8 over 4 files) for each card. A = 2 closes, plus a standing note in the lane charter. C = 1 Tier S PR.

    Execution after the letter: B: this card becomes the execution card for the sentence (needs-user-decision → pm:queue, domain:skills already on it). #24037 and #24073 leave pm:blocked for pm:queue in the same act, each with a Ruled: line carrying terms 2–3. A: #24037 and #24073 close not_planned with the letter quoted, this card closes completed, and the lane charter gains the standing note.

    os-decision-facets

    • ① 项目长远合理性:同意 B。工具"说真话"与"工具位只减不增"两条同时守住;冻结当初买的是产能,而自测已被同一裁决的 R4 移出产品 PR 路径,修真话不再花产品 PR 的 CI 时间;SKILL 本就把"既有门禁盲区修复(加强、非新增)"列为不升级类。
    • ② 实际业务拉动:同意。本周两次实测(一次 main 红、一次本地 98/98 假完整),此前三张同族卡各自以同形修复落地;冻结后该文件已被 8 个合并改过,含一次重构,文字与实践早已脱节。
    • ③ 防 AI 犯错:同意。工具说"CI 会跑"而 CI 不跑,dev 和席位会把它当证据;B 让工具的话与 CI 实跑一致。
    • ④ 创业阶段不扩散:同意。不加门禁、不加行、不加棘轮;dispatch-gates lists Dogfood Regression Gate as "scheduled BY YOUR PATHS" for a route-ledger.ts change, but its if: skips pull_request and merge_group, so neither PR CI nor the derived commands run the dogfood pins (main red after #24009) #24073 的"给 dogfood 派本地命令"算新增行,不在 B 的放行范围。
      Prior rulings read: dispatch-gates.*(frozen|freeze|冻结)|instrument-discipline → objectstack 0 hits in AGENTS.md / docs/adr / packages/spec/src, objectui 0; ruling 208 R6 (comment 5755284987) and R4 are the governing text; thread: none

    自检:只看①选 B;②③④ 是否翻转:否。

  2. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #361 item 3 · letter B · maintainer 「24171 B」 2026-10-18T00:01Z

    Director seat, summon #44 (session_01MVLumUXJ6mkcQv27o7LR1V). The maintainer's whole reply in this session's chat: 「24217 A 24171 B;24164 重新和我讨论分析完整的业务需求,并评估相关的开发工作量」. Read as B, the seat's recommendation (delta 6241925462).

    Ruled: B — the freeze narrows, and derivation-truth fixes are allowed under it. Ruling 208 R6's other clauses stand. The following terms, from the delta, bind with the letter:

    1. .claude/skills/pm-dispatch/references/instrument-discipline.md L10 is edited in place, with no new line, to say: derivation-truth fixes are allowed under the freeze. The tool's output must be true of what CI runs, including deriving an existing gate from its own scan roots. ⛔ No new gate, row, ratchet, --tier mandate or constant. The provenance line cites this ruling by its comment id, written without # (the id-lint).
    2. dispatch-gates lists Dogfood Regression Gate as "scheduled BY YOUR PATHS" for a route-ledger.ts change, but its if: skips pull_request and merge_group, so neither PR CI nor the derived commands run the dogfood pins (main red after #24009) #24073: only its "Done when" items 1–2 (the tool says the job does not run on the PR or in the merge queue, with a pin). The optional local command for the dogfood files would be a new derived row, so it stays frozen.
    3. dispatch-gates: a change under scripts/ does not derive check-position-name-fold-loaders, though that gate scans scripts/ — the local --ran reconciliation read 98/98 while CI's lint lane went red on it #24037: acceptance items 1–3, census included. Making a gate's private SCAN_ROOTS into the exported ROOT_DIR_WATCH_HINTS the derivation already reads counts as deriving an existing gate from its own roots. A gate whose roots cannot be read that way is listed, not given a new row.
    4. Slot order is unchanged: the two cards take the tooling slot behind any removal card already queued in the lane.

    Workload of B: domain:skills · 1 Tier S PR for term 1 (one sentence in .claude/**; the seat lands it after an at-tier record) plus 2 M cards at TIER_DEFAULT · precedent 9a6f790a (#23612, +322/−8 over 4 files).

    Execution in this act: this card becomes the execution card for term 1. It gets a Ruled: line in its body, and needs-user-decision → pm:queue with priority:p2 and area:devpath (the axis its two siblings carry); domain:skills stays. The measured instances behind it are in its body (main red after #24009, and PR #24028's false 98/98). #24037 and #24073 each get a pointer naming their term, a Ruled: line in their body, and pm:blocked → pm:queue. Their Blocked-by: #24171 lines (comments 6234343947 and 6234349744) are spent by this ruling.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:skillspm:queuepriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions