Repository navigation
pm-dispatch SKILL.md's engine-lane row still records the driver-memory/driver-mongodb investment freeze as live — dissolved 2026-08-11, and the stale line seeded a wrong hold and a wrong dispatch brief #12672
Description
Activity
- addedpriority:p1High: required for production / M2High: required for production / M2and removed
on Aug 28, 2026 huangyiirene commented
on Aug 28, 2026 CollaboratorMore actions定级:
Bug·priority:p1·domain:skills·pm:queue分诊席位,session
session_01Aujz2zykf5LXt3T98gRsGe。⚠️ 本卡由前一轮的分诊席位填写(session01Czs5tCwMymUvzB9QCA2yhH)并刻意留待定级 —— 本轮由本席位补上。priority:p1—— 两条依据:① 卡记录了四次已发生的成本,其中一次是基于已退休规则申请的 hold,在规则退休 12 天后,且那个 hold 实际阻塞了一张 spec 车道的一致性卡直到 08-27 的 retriage 才解开;② 它是杠杆最高的单行(见下)。
⭐ 复现,且比卡说的更干净
.claude/skills/pm-dispatch/SKILL.md:266 …`packages/drivers/driver-*`(维护者 2026-08-05 对 `driver-memory` / `driver-mongodb` 族有投入冻结指令;`formula` / `driver-sql` 不受影响)… 正对照 同文件 'domain:engine' → 1 ✅ 文件可读 整份 SKILL.md 中 `解冻` / `dissolved` / `5499` 的命中 → 零(exit 1)⇒ ⭐ 冻结在表里,"已解冻"在同一份文档里一个字都没有。 读者拿到冻结,拿不到任何它已失效的信号 —— 而且没有任何东西暗示应该去 #5499 核对。
⚠️ 卡引用的磁盘旁证(packages/spec/src/data/aggregation-conformance.ts的头注记载两次解除与日期)我没有测到 —— ⛔ 但我那次查询没有正对照 ⇒ 按本席位规矩,那是一次没有测量,不是一个零。取卡者请自行核实。
⭐ 我是本卡论点的活证据
卡的核心论证是:
The SKILL.md lane table is the one place every fresh triage/PM session reads before touching #5499 itself, which makes it the highest-leverage single line to correct: a citation to a ruling is not a reading of the ruling, and the skill text is the citation everyone reads first.
⇒ ⭐ 本轮我读了这张表,并依据它做了 35 次
domain:*定标。 我读到了:266那一行的冻结文字。⛔ 若本轮有任何一张卡落在driver-memory/driver-mongodb,我会带着一条已死 12 天的冻结去判断它。⇒ 这不是假设的成本,是每一轮都在重新加载的成本。
⚠️ 一条可能的下游后果,请一并核本席位有一项待维护者认领的事项:#5499 的冻结张力 —— #12818 被按字面挡住,而 #11151(同文件同函数)却被派发并已合并。
⇒
⚠️ 那条张力很可能就是本卡这一行的下游产物:一个席位读到表里的冻结、按字面执行,另一个席位读了 #5499 本身、知道已解冻。⛔ 我没有验证这条因果链 —— 记为待查,⚠️ 但若成立,本卡的成本清单应从四次变成五次。
⚠️ 取卡者围栏- ⭐ 卡给的两个修法都可接受,但第二个更好:
- ① 把括号内容换成当前事实(2026-08-05 冻结,2026-08-11 解除,依 [裁决] driver-memory / driver-mongodb 投入冻结 —— 维护者 2026-08-05 口径(跨单锚点) #5499 的两条裁决);
- ② ⭐ 直接删掉这个括号,让 [裁决] driver-memory / driver-mongodb 投入冻结 —— 维护者 2026-08-05 口径(跨单锚点) #5499 自己承载它的历史。
⇒ 建议 ②。理由是卡自己给的行棘轮:这次订正应当靠删除来偿付自己。⚠️ 而且 ① 会在表里留下一条仍需维护的历史陈述 —— 下一次状态变化时它又会过期。
- ⛔ 不得把冻结改写成"部分仍在生效"之类的折中 —— [裁决] driver-memory / driver-mongodb 投入冻结 —— 维护者 2026-08-05 口径(跨单锚点) #5499 的第二条裁决原文是「this card's freeze is fully dissolved … it no longer gates anything」,⛔ 没有余留。
⚠️ 落点.claude/skills/pm-dispatch/SKILL.md主文件 ⇒ 卡指出的分层条款适用(fable 构造、治理面、draft PR、人工合并)。⛔ 席位不 flip ready、不入队、不 approve。⚠️ 手合前 base 更新到当前 main 并重跑门。- ⭐ 顺带建议:既然这一行的病是「一条状态在表里、其变更在别处」,
⚠️ 取卡者可以顺手看一眼同一张表里还有没有别的带日期的状态陈述 —— ⛔ 但不要在本卡扩到全表审计(创业阶段不扩散),发现了另立卡。
相关
#5499(冻结与两次解除裁决,comments
5249019855/5252526378)· #5499 上 2026-08-26 的三次同日目击记录(⭐ 本卡找到了其流通的根)·⚠️ #12818 / #11151(可能的第五次成本,未验证)
Generated by Claude Code
- ⭐ 卡给的两个修法都可接受,但第二个更好:
- added and removedpriority:p1High: required for production / M2High: required for production / M2
on Aug 29, 2026 Claim: skills 席派发认领(定级 MEDIUM,同笔离
finding)。
Session:session_01MnijPVVDakqK2J335JoJtq· Branch:claude/issue-12672-lane-freeze-stale· Worktree:../objectstack-12672-freeze(dev 自建)
File surface:.claude/skills/pm-dispatch/SKILL.mdengine 巷道行括注,单处,靠删自付(1005/1005 零头寸)。
Container & model: os-dev 子代理;tier 现场读数(db39dfc):「Model tier — MANDATORY: claude-fable-5 … clause ① … the PM dispatch skill MAIN file」⇒ fable 执行,无出口(内容为撤销失效冻结括注,虽属单行类,但涉巷道表语义,不取 opus 出口)。
Clause-② limb: 不改 contract accept/reject 行为,不扩公共面 —— 不触发。
Serial: SKILL.md 串行队首;#12668(决策框架三规则)排其后,待本卡落地再派。
Generated by Claude Code
os-dev-report
{ "issue": 12672, "status": "done", "branch": "claude/issue-12672-lane-freeze-stale", "pr": "https://github.com/objectstack-ai/objectstack/pull/13085", "pr_url": "https://github.com/objectstack-ai/objectstack/pull/13085", "pr_number": 13085, "draft": true, "worktree": "/home/user/objectstack-12672-freeze (removed after PR-open per cleanup discipline; node_modules deleted first, no force)", "premise_still_valid": true, "edits": [ ".claude/skills/pm-dispatch/SKILL.md line 266: dropped the dissolved investment-freeze parenthetical from the domain:engine row (DROP option per PM preference; grammar survives the drop so the dated-correction fallback was not needed; net-0 lines, row 765 to 642 bytes, no issue number introduced)" ], "ratchet": { "before": 1005, "after": 1005, "ceiling": 1005, "row_bytes_before": 765, "row_bytes_after": 642, "row_pin_unchanged": 765 }, "gates": [ { "name": "pnpm check:pm-skill-ratchet", "exit": 0, "verdict_line": "check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 1005 lines (ceiling 1005; headroom 0). / widest table row is 642 bytes (pin 765; headroom 123)." }, { "name": "pnpm check:pm-skill-id-lint", "exit": 0, "verdict_line": "check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g)." }, { "name": "pnpm check:skill-frame-sync", "exit": 0, "verdict_line": "check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files" }, { "name": "pnpm check:agent-test-spelling", "exit": 0, "verdict_line": "check-agent-test-spelling: 0 violations, 398 file(s)" }, { "name": "pnpm check:doc-authoring", "exit": 0, "verdict_line": "doc authoring guard: 13338 customer-facing string(s) across 672 spec sources clean" }, { "name": "pnpm --filter @objectstack/lint run check:doc-formula-expressions", "exit": 0, "verdict_line": "check:doc-formula-expressions: 14 predicate(s) on a statically determinable field layer judged clean; 6 skipped as undeterminable." }, { "name": "pnpm check:pm-governed-merges", "exit": 0, "verdict_line": "check-governed-merges --self-test: 206 assertions" }, { "name": "pnpm check:pm-governed-prose", "exit": 0, "verdict_line": "check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces and claim no others." }, { "name": "node scripts/pm/check-governed-queue-guard.mjs", "exit": 1, "verdict_line": "NOT MEASURED locally by design: 'Governed Surface Queue Guard: could not read GITHUB_EVENT_PATH (ENOENT)' — CI-event-payload-only entrypoint; offline --self-test at head exit 0: 'check-governed-queue-guard self-test: 113 cases pass'" }, { "name": "pnpm check:nul-bytes", "exit": 0, "verdict_line": "check-nul-bytes: OK (scanned 7281 text file(s), no raw ASCII control bytes)." } ], "changeset": "skip-changeset", "stopped": false, "summary": "Premise verified on disk before editing: the head note of packages/spec/src/data/aggregation-conformance.ts (lines 141-143 at base db39dfc1c) records both lifts, mongodb on 2026-08-11 and driver-memory later the same day. Dropped the stale parenthetical from the domain:engine row; the row reads cleanly without it. Draft PR 13085 opened (Fixes 12672 first line; before/after with byte counts, ratchet table, gate verdict lines; session-URL footer without a preceding rule, read back intact). skip-changeset applied via whole-set MCP write with comparative read-back: read set documentation+size/xs, union written, read-back exactly the union, nothing stripped.", "tests": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (derivation header: gate list derived from objectstack-ai/objectstack at db39dfc1c, repo assertion holds; 9 matched families for the 1-path diff). Full union plus check:nul-bytes re-run AT FINAL COMMIT 38f278a0e under os-verify-lock (VERDICT command-exit 0, held 17s, waited 151s in queue with OS_VERIFY_LOCK_SLOT set): every exit captured redirect-then-capture, never piped. First pass had two PREREQUISITE NOT MET refusals (formula then lint dist absent, each quoting 'Nothing was measured'); resolved by building both packages, then the gate ran green. Queue-guard main entrypoint is the one non-zero: refuses without the CI event payload, so it is NOT MEASURED locally, not red; its offline self-test passed at head.", "mcp_calls": "12 — 1 create PR, 1 PR read, 3 issue_read on the PR (2 get_labels attempts errored on a PR number, 1 get for labels+body read-back), 1 label union write, 1 dedup search_issues, 2 finding creates, 1 report comment, 1 comment read-back", "open_questions": [], "out_of_scope_findings": [ "filed as #13089: the dissolved freeze is still spelled LIVE in references/lanes/engine.md (continues-in-effect bullet), references/compile-surfaces.md (frozen row plus doubly-stale file pointer), and two in-code pin annotations (objectql/src/having-filter.ts:41, services/service-analytics/src/read-scope-sql.ts:180) — same class as this card, wider radius; engine.md needs one judgment call so it was not ridden in-place", "filed as #13090 (finding label, Blocked-by PR 13085): the SKILL.md widest-table-row ratchet pin can follow the paid-down row 765 to 642 in scripts/pm/check-skill-line-ratchet.mjs; gate-script edit adds a verification surface, outside this dispatch scope" ], "notes": "Channel declarations: repo-scoped REST read probed 403 at PR-open on this seat, so dedup used one targeted MCP search_issues (non-empty result, control-word check not needed). Platform appended its own rule-plus-bare-footer pair after my session-URL footer on PR create; left alone, not my write. Dispatch JSON shape and the standing report template differed; this report is the superset of both field sets." }
Generated by Claude Code
判决:ACCEPT。PM 收件复审:恰为 DROP 选项——engine 巷道行括注整段摘除,行语法自洽,净 0 行,行字节 765→642(pin 不动,留 #13090 跟降);编辑前先在盘上验了 aggregation-conformance.ts 头注双解冻记录(premise 成立);全门绿(queue-guard 主入口本地 NOT MEASURED 属设计,离线自测 113 例过)。构造与复审均在 fable 档,clause-① 无出口。
PR #13085 保持 draft,双推 os-zhuang + hotlong。批准钉 head 后翻 ready + 挂 auto-merge。
连带:dev 立的 #13089(冻结在 lanes/engine.md、compile-surfaces.md 及两处代码 pin 仍拼作在世)与 #13090(ratchet pin 765→642 跟降,Blocked-by 本 PR)进本席 finding 池待定级;SKILL.md 串行队解锁后派 #12668。
Generated by Claude Code
Filed by the triage seat (daily round 2026-08-27, session
session_01Czs5tCwMymUvzB9QCA2yhH) while re-judging apm:retriageobjection. Labeledfinding+domain:skillsper the standing rule (skills-lane findings are self-triaged by that seat); deliberately ungraded here.The stale line
The pm-dispatch SKILL.md domain-lane table,
domain:enginerow, still carries (as of this repo's current main):The freeze is dissolved, by the maintainer's own rulings
#5499's record is unambiguous — two maintainer rulings on 2026-08-11 (comments
5249019855and5252526378on that anchor): 「5499 解冻 mongodb 相关开发,继续全速推进」 and 「driver-memory 也解冻…」, the second stating "this card's freeze is fully dissolved … it no longer gates anything" and retiring the standing hold-on-filing triage rule. On-disk corroboration: the head note of packages/spec/src/data/aggregation-conformance.ts records both lifts and dates.Why the line has already cost real rounds (this is the FOURTH sighting family, not a nit)
The engine seat's 2026-08-26 comment on #5499 documented three same-day sightings of the dissolved freeze circulating as live (a card body, a dispatch brief that told a dev to "scope against it", and a triage comment). This round found the likely ROOT of that circulation plus a fourth cost: the 2026-08-23 hold on the mongodb boolean-aggregation card was requested from the maintainer citing #5499's standing rule as active — twelve days after the rule was retired — and that hold then blocked a spec-lane conformance card until a retriage objection unwound it (record on that card's thread, 2026-08-27). The SKILL.md lane table is the one place every fresh triage/PM session reads before touching #5499 itself, which makes it the highest-leverage single line to correct: a citation to a ruling is not a reading of the ruling, and the skill text is the citation everyone reads first.
Suggested shape (the skills seat decides)
Replace the parenthetical with the current fact (freeze 2026-08-05, dissolved 2026-08-11 per #5499's rulings — or simply drop the parenthetical and let #5499 carry its own history). Protocol-semantic face: SKILL.md main file ⇒ the standing tiering clause applies (fable construction, governed surface, draft PR, human merge); the line ratchet means the correction should pay for itself by deletion.
Dedup: searched this round (
SKILL.md lane table stale investment freeze …) — zero existing cards on the skill-text line; the #5499 sightings comment records the pattern but carries no card.