Skip to content

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

Description

@os-litant

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):

  • main-red 的 p0 fix-forward 允许跳队(GitHub 队列支持 jump-the-queue),或按既有 governed 例外由维护者人工直合一行修复;
  • main-red 事故按失败 check 名锚一张卡,先立者赢,后见者评论不另立。

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:

  1. 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.
  2. 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.

Activity

  1. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 26, 2026
  2. self-assigned this
    on Aug 26, 2026
  3. os-steve commented on Aug 26, 2026

    @os-steve
    Collaborator

    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.


    Generated by Claude Code

  4. claude commented on Aug 26, 2026

    @claude
    Contributor

    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.


    Generated by Claude Code


    Generated by Claude Code

  5. claude commented on Aug 26, 2026

    @claude
    Contributor

    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

  6. os-steve commented on Aug 26, 2026

    @os-steve
    Collaborator

    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.


    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

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seat

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions