You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
skills: write the two ruled main-red incident conventions into the PM protocol text — p0 fix-forward queue-jump, and one-anchor-card-per-failing-check #12212
Filed by the spec PM seat (session_01NDGG54XF5gbTLdQzCtnaVV) recording a maintainer ruling. Reader: the domain:skills execution seat — this is skill-text work on a governed face (draft + human merge; tiering per the skill's own clause-① rules).
Ruling (provenance)
Maintainer, 2026-08-25, live PM chat, verbatim: 「同意」 — accepting exactly this proposal (quoted as put to them, after the stale-ledger outage post-mortem):
Context: the 2026-08-25 check:exported-any-returns outage — detection took 11 minutes, the repair was one line, yet the outage ran ~70 minutes because (a) the fix PR queued behind the wreckage it was fixing, and (b) three seats filed three duplicate incident cards in 20 minutes (two diagnoses wasted). The structural CI-side half (merge-queue check-set parity) is tracked separately in #12211 and is NOT this card.
Executable criterion
The pm-dispatch protocol text (SKILL.md's landing/incident section or the reference file its 红/踢出处置 row points at — placement is the skills seat's call, ratchet rules apply) gains the two conventions, stated so any seat can execute them without interpretation:
p0 fix-forward queue-jump: a fix-forward PR for a main-red gate (p0, mechanical, verified root cause) may jump the merge queue where the mechanism exists, or go to the maintainer for a break-glass direct merge — waiting behind a queue the outage itself has clogged is the named anti-pattern. This is an exception for MAIN-RED REPAIR ONLY; it does not loosen the queue-only landing rule for anything else.
One anchor card per failing check: a main-red incident is anchored on ONE card named by the failing check (first filer wins); every later discoverer comments their readings on the anchor instead of filing — three-cards-in-20-minutes is the measured failure mode this rule retires.
Both lines carry the ruling's date + verbatim 「同意」 per the skill's own provenance discipline.
Claim: PM loop round R1
Session: session_01JANH3y7qe3MD8aLaLXci8N
Branch: claude/issue-12212-main-red-conventions
Worktree: objectstack-issue-12212
Domain: domain:skills
File surface: .claude/skills/pm-dispatch/references/landing-operations.md + at most a line-level hook in .claude/skills/pm-dispatch/SKILL.md (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: claude-fable-5 — this round's node scripts/pm/dispatch-gates.mjs --tier … SKILL.md output: "Model tier — MANDATORY: claude-fable-5 … clause ① … the PM dispatch skill MAIN file is the lane's own operating protocol"
Clause-②: no — internal protocol text; no product contract change
Serial constraints cleared: none — zero open PRs touch the pm-dispatch skill files (checked the full open-PR list, 9 PRs, this round). Same-day churn noted: ca7c442 (#12375, contract-review same-stroke landing rule) and 078bdcd (#12390) touched these files today — dev must re-read current origin/main before editing. Ratchet live readings this round: SKILL.md 1005/1005, landing-operations.md 80/80 — headroom 0 on both; every net-added line must be paid by a deletion in the SAME file.
Claim (dev seat): implementing this card.
Session: session_01JANH3y7qe3MD8aLaLXci8N
Branch: claude/issue-12212-main-red-conventions
File surface: .claude/skills/pm-dispatch/references/landing-operations.md + at most a line-level hook in .claude/skills/pm-dispatch/SKILL.md, per the PM claim above.
{
"issue": 12212,
"status": "done",
"branch": "claude/issue-12212-main-red-conventions",
"pr": "https://github.com/objectstack-ai/objectstack/pull/12406",
"premise_still_valid": true,
"summary": "Both ruled conventions now live in the PM protocol text. landing-operations.md section B gains the two-convention paragraph (p0 fix-forward queue-jump — main-red repair only, queue-only rule untouched elsewhere; one anchor card per failing check — first filer wins, later discoverers comment on the anchor), each convention carrying 维护者 2026-08-25 verbatim 「同意」. SKILL.md gains two in-place line-level pointers at zero net lines: the queue-only landing paragraph (whose anecdote already ended at fix-forward) and the stop-bleed-and-file line (the instruction that previously produced the duplicate-cards mode) both point at landing-operations B — two lines touched rather than one, judged necessary because the 立单 line otherwise contradicts convention 2; both edits are in-place, so the ratchet payment due is zero net lines. Zero-headroom ratchet held: SKILL.md 1005/1005 (+136 bytes within line-length slack), landing-operations.md 80/80 (net −100 bytes) — paid by cutting genuinely redundant content, each cut with a named surviving home (full cut ledger in the PR body), not by re-wrap alone. Premises verified on origin/main at cdbd920 before editing: fix-forward appeared only in SKILL.md:778's anecdote; landing-operations.md was 80 lines with no incident-convention content; live ratchet readings matched the dispatch (1005/1005, 80/80).",
"tests": "Gate list derived from the actual diff, not recalled: node scripts/pm/dispatch-gates.mjs (no paths) — 9 matched families; derivation stderr named repo objectstack-ai/objectstack at cdbd9204. Re-run at final commit cf1760c4 on a clean tree, exit codes captured before any pipe: pnpm check:pm-skill-ratchet PASS ('.claude/skills/pm-dispatch/SKILL.md is 1005 lines (ceiling 1005; headroom 0)' · '.claude/skills/pm-dispatch/references/landing-operations.md is 80 lines (ceiling 80; headroom 0)' · table-row pins unchanged); check:pm-skill-id-lint PASS ('22 file(s) clean (pattern /#[0-9]{3,}/g)'); check:skill-frame-sync PASS ('binding sentence present in all 4; 4 count mention(s) agree'); check:pm-governed-prose PASS ('2 instruction surface(s) name all 5 registered governed surfaces'); check:doc-authoring PASS ('390 files clean'); check:agent-test-spelling PASS ('0 violations'); check:nul-bytes PASS (plus manual control-char grep: no hits). On the byte-identical pre-commit tree: check:pm-governed-merges PASS (159 self-test assertions); pnpm --filter @objectstack/lint run check:doc-formula-expressions PASS after building its declared prerequisites @objectstack/formula and @objectstack/lint through os-verify-lock.sh (VERDICT command-exit 0, waited 0s). check-governed-queue-guard.mjs NOT MEASURED locally — it reads GITHUB_EVENT_PATH (workflow-context only) and its own text says 'could not look must never exit 0'; CI runs it with a real event. No changeset (internal .claude/ files only); skip-changeset added via the additive labels endpoint and read back after the bots settled: ['documentation','size/s','skip-changeset']. Draft PR, never flipped ready, no auto-merge — governed surface, human merge.",
"open_questions": [],
"out_of_scope_findings": []
}
ACCEPT — PR #12406 reviewed on its actual diff at head cf1760c4 (reviewer of record: skills seat, session_01JANH3y7qe3MD8aLaLXci8N, contract-review tier per the skill-face requirement).
Checklist conclusion: draft ✓ · base main ✓ · Fixes #12212 first line ✓ · files = the two declared pm-dispatch surfaces only ✓ · .claude/-only ⇒ skip-changeset ✓. The two ruled conventions land in landing-operations B verbatim-anchored (each carries 维护者 2026-08-25「同意」), with the scope guard stated in the text itself (仅限 main-red 修复,⛔ 不放宽其它任何 PR 的 queue-only 落地; first-filer-wins + comment-on-the-anchor). The two SKILL.md pointers are the right discoverability shape: the queue-only paragraph and the stop-bleed-and-file line both now point at the exception, at zero net lines.
Cut ledger audited cut-by-cut against live surviving homes (the review's load-bearing step on a zero-headroom file): os-regen four-step details → os-regen-merge.sh (script-as-authority is standing doctrine, 机械守卫索引 row); silent-swallow fact → SKILL.md's own 入队与落地 bullet; completed: success job discipline → SKILL.md 平台读数纪律; timer-text rules → SKILL.md 定时器文本纪律; ready/auto-merge order → contract-review.md; draft-conversion double-loss → platform-readings :33 AND os-dev.md; mergeable_state lazy fact → platform-readings :26; enable-auto-merge resend/verify sequence → platform-readings :40–55 (re-read on origin/main this review, not assumed). No cut is homeless — nothing was lost to pay the ratchet.
Governed-surface ending: PR stays draft — ⛔ never ready/queued/auto-merge; review being requested from os-zhuang with draft: true explicit; human merge is the review record. Listed under "awaiting a human merge" in the round report.
Activity
os-steve commentedon Aug 26, 2026
Claim: PM loop round R1
Session:
session_01JANH3y7qe3MD8aLaLXci8NBranch:
claude/issue-12212-main-red-conventionsWorktree:
objectstack-issue-12212Domain:
domain:skillsFile surface:
.claude/skills/pm-dispatch/references/landing-operations.md+ at most a line-level hook in.claude/skills/pm-dispatch/SKILL.md(stop on breach; explain in the report)Container & model: S,
mode:subagent,model: claude-fable-5— this round'snode scripts/pm/dispatch-gates.mjs --tier … SKILL.mdoutput: "Model tier — MANDATORY: claude-fable-5 … clause ① … the PM dispatch skill MAIN file is the lane's own operating protocol"Clause-②: no — internal protocol text; no product contract change
Serial constraints cleared: none — zero open PRs touch the pm-dispatch skill files (checked the full open-PR list, 9 PRs, this round). Same-day churn noted:
ca7c442(#12375, contract-review same-stroke landing rule) and078bdcd(#12390) touched these files today — dev must re-read currentorigin/mainbefore editing. Ratchet live readings this round: SKILL.md 1005/1005, landing-operations.md 80/80 — headroom 0 on both; every net-added line must be paid by a deletion in the SAME file.Generated by Claude Code
claude commentedon Aug 26, 2026
Claim (dev seat): implementing this card.
Session:
session_01JANH3y7qe3MD8aLaLXci8NBranch:
claude/issue-12212-main-red-conventionsFile surface:
.claude/skills/pm-dispatch/references/landing-operations.md+ at most a line-level hook in.claude/skills/pm-dispatch/SKILL.md, per the PM claim above.Generated by Claude Code
Generated by Claude Code
claude commentedon Aug 26, 2026
os-dev-report
{ "issue": 12212, "status": "done", "branch": "claude/issue-12212-main-red-conventions", "pr": "https://github.com/objectstack-ai/objectstack/pull/12406", "premise_still_valid": true, "summary": "Both ruled conventions now live in the PM protocol text. landing-operations.md section B gains the two-convention paragraph (p0 fix-forward queue-jump — main-red repair only, queue-only rule untouched elsewhere; one anchor card per failing check — first filer wins, later discoverers comment on the anchor), each convention carrying 维护者 2026-08-25 verbatim 「同意」. SKILL.md gains two in-place line-level pointers at zero net lines: the queue-only landing paragraph (whose anecdote already ended at fix-forward) and the stop-bleed-and-file line (the instruction that previously produced the duplicate-cards mode) both point at landing-operations B — two lines touched rather than one, judged necessary because the 立单 line otherwise contradicts convention 2; both edits are in-place, so the ratchet payment due is zero net lines. Zero-headroom ratchet held: SKILL.md 1005/1005 (+136 bytes within line-length slack), landing-operations.md 80/80 (net −100 bytes) — paid by cutting genuinely redundant content, each cut with a named surviving home (full cut ledger in the PR body), not by re-wrap alone. Premises verified on origin/main at cdbd920 before editing: fix-forward appeared only in SKILL.md:778's anecdote; landing-operations.md was 80 lines with no incident-convention content; live ratchet readings matched the dispatch (1005/1005, 80/80).", "tests": "Gate list derived from the actual diff, not recalled: node scripts/pm/dispatch-gates.mjs (no paths) — 9 matched families; derivation stderr named repo objectstack-ai/objectstack at cdbd9204. Re-run at final commit cf1760c4 on a clean tree, exit codes captured before any pipe: pnpm check:pm-skill-ratchet PASS ('.claude/skills/pm-dispatch/SKILL.md is 1005 lines (ceiling 1005; headroom 0)' · '.claude/skills/pm-dispatch/references/landing-operations.md is 80 lines (ceiling 80; headroom 0)' · table-row pins unchanged); check:pm-skill-id-lint PASS ('22 file(s) clean (pattern /#[0-9]{3,}/g)'); check:skill-frame-sync PASS ('binding sentence present in all 4; 4 count mention(s) agree'); check:pm-governed-prose PASS ('2 instruction surface(s) name all 5 registered governed surfaces'); check:doc-authoring PASS ('390 files clean'); check:agent-test-spelling PASS ('0 violations'); check:nul-bytes PASS (plus manual control-char grep: no hits). On the byte-identical pre-commit tree: check:pm-governed-merges PASS (159 self-test assertions); pnpm --filter @objectstack/lint run check:doc-formula-expressions PASS after building its declared prerequisites @objectstack/formula and @objectstack/lint through os-verify-lock.sh (VERDICT command-exit 0, waited 0s). check-governed-queue-guard.mjs NOT MEASURED locally — it reads GITHUB_EVENT_PATH (workflow-context only) and its own text says 'could not look must never exit 0'; CI runs it with a real event. No changeset (internal .claude/ files only); skip-changeset added via the additive labels endpoint and read back after the bots settled: ['documentation','size/s','skip-changeset']. Draft PR, never flipped ready, no auto-merge — governed surface, human merge.", "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
Generated by Claude Code
os-steve commentedon Aug 26, 2026
ACCEPT — PR #12406 reviewed on its actual diff at head
cf1760c4(reviewer of record: skills seat,session_01JANH3y7qe3MD8aLaLXci8N, contract-review tier per the skill-face requirement).Checklist conclusion: draft ✓ · base
main✓ ·Fixes #12212first line ✓ · files = the two declared pm-dispatch surfaces only ✓ ·.claude/-only ⇒skip-changeset✓. The two ruled conventions land in landing-operations B verbatim-anchored (each carries 维护者 2026-08-25「同意」), with the scope guard stated in the text itself (仅限 main-red 修复,⛔ 不放宽其它任何 PR 的 queue-only 落地; first-filer-wins + comment-on-the-anchor). The two SKILL.md pointers are the right discoverability shape: the queue-only paragraph and the stop-bleed-and-file line both now point at the exception, at zero net lines.Cut ledger audited cut-by-cut against live surviving homes (the review's load-bearing step on a zero-headroom file): os-regen four-step details →
os-regen-merge.sh(script-as-authority is standing doctrine, 机械守卫索引 row); silent-swallow fact → SKILL.md's own 入队与落地 bullet;completed: successjob discipline → SKILL.md 平台读数纪律; timer-text rules → SKILL.md 定时器文本纪律; ready/auto-merge order →contract-review.md; draft-conversion double-loss → platform-readings :33 AND os-dev.md;mergeable_statelazy fact → platform-readings :26; enable-auto-merge resend/verify sequence → platform-readings :40–55 (re-read onorigin/mainthis review, not assumed). No cut is homeless — nothing was lost to pay the ratchet.Governed-surface ending: PR stays draft — ⛔ never ready/queued/auto-merge; review being requested from
os-zhuangwithdraft: trueexplicit; human merge is the review record. Listed under "awaiting a human merge" in the round report.Generated by Claude Code