Skip to content

pm-dispatch(seats): the triage seat and every lane PM seat run at effort high; a dispatched os-dev keeps its per-card effort (floor xhigh for protocol-semantics or docs/adr/** cards) #28901

Closed

Description

@objectstack-fleet

triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

Filing gate: ③ a task the maintainer assigned directly (a pm rule change, filed only because the maintainer named it). The maintainer asked in the triage session, verbatim, 「分诊 opus 用中等还是 high」 and 「车道经理也是 high吗」. They ruled 「同意,分诊,车道经理都用 high」, then 「写进席位规则」.
Reader: domain:skills. The file is .claude/skills/pm-dispatch/references/seat-lifecycle.md (taking a seat), plus a pointer in lanes/triage.md and in each lane file, or in one shared lane section.
Dedupe (open AND closed): effort high in:title → 1 hit, #27390 (closed, a different subject). seat effort matches only unrelated card bodies. seat-lifecycle.md names no seat effort today. The ruling is already recorded as a standing ruling in the triage seat post #6015's body (2026-11-02).
⛔ Not a claim.

The rule

  • Seat sessions run at effort high. This covers the triage seat and every lane PM seat (domain:spec, domain:server, domain:ui, domain:devx, domain:skills, and the repo:* seats).
    • Why: a seat is the fleet's judgment layer. It owns the seat check (ACCEPT) of every PR outside contract-review hits, the root cause of its own PRs' CI reds (「flake 不算根因」), and the disposition of every dev report's open questions.
    • A shallow read there costs a full return trip: a dev rework, a contract-review FAIL, a re-queue. The maintainer chose high.
  • A dispatched os-dev's effort is unchanged: it is set per card by difficulty, as SKILL.md's Container & model line already requires (effort: <medium | high | xhigh | max, by card difficulty>). The xhigh floor for protocol-semantics or docs/adr/** cards (execution-duties.md) stands.
  • Who sets it: effort is a property of the session, set where the seat's session or Routine is started. A seat cannot raise it from inside. So the rule is a seat-taking check: a seat that takes a seat below high says so in its registration line on its seat post and asks its account owner to restart it at high. ⛔ Not a gate, and not a label (「新增门禁默认否」).

Acceptance

  • seat-lifecycle.md's seat-taking steps state the effort rule and the registration-line check, in these words or tighter.
  • lanes/triage.md and the lane files point at it in one line each (or the shared section does).
  • SKILL.md's per-card dev effort rule is untouched.

Generated by Claude Code

Activity

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    pm:queueReady for the PM dispatch loop
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Nov 2, 2026
  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

    Claim: PM loop round 1 · 2026-11-02T04:17Z
    Session: session_01J8VVAnMUWA9rufXzFaEh4J
    Account: huangyiirene
    Branch: claude/project-thread-gp23sc
    Worktree: objectstack-issue-28901
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: .claude/skills/pm-dispatch/references/seat-lifecycle.md, .claude/skills/pm-dispatch/references/lanes/*.md (stop on breach; SKILL.md is out of scope)
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; references/** only, so the seat's review runs at CONTRACT_REVIEW_TIER as the compensating control), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Premise: holds
    Serial constraints cleared: #28899 (this seat, dispatched in parallel, claim 6568914471) edits the same lanes/*.md files — distinct lines, ordinary concurrency; the later to land merges main and resolves. No other open PR touches these files.

    The branch is the card thread's own (platform exception: a project thread pushes only its assigned branch). Dispatched as a card thread through the project coordinator; the order quotes the maintainer's ruling from the card body verbatim.


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 2, 2026
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAkjAB27uJGmV8x5dQr
    os-dev-report

    {
     "issue": 28901,
     "status": "done",
     "branch": "claude/project-thread-gp23sc",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/28926",
     "session": "session_01J8VVAkjAB27uJGmV8x5dQr",
     "premise_still_valid": true,
     "summary": "seat-lifecycle.md gains one line in the seat-taking stroke, right after the 坐席同笔 line: the triage seat and every lane seat run their session at effort high, and a seat taken below high says so in its registration line and asks its account owner to restart at high. Premise verified: before this change, grep for effort in seat-lifecycle.md had zero hits. The file stood at 96/96, so the line is paid for by deleting a restatement (范围与常设承诺是岗位说明不是状态, versioned in the lanes directory) that every lane charter header already carries for the same reader on the same fire. The file stays at 96 lines and the ceiling is unchanged. SKILL.md and execution-duties.md are untouched.",
     "tests": "No tested behaviour changed: no test, no ablation. Head ba49c063: all 17 dispatch-gates --commands families exit 0. pnpm check:pm-skill-ratchet reports seat-lifecycle.md is 96 lines (ceiling 96; headroom 0), and the new line is 117 bytes against the 120-byte budget. pnpm check:pm-skill-id-lint reports 106 file(s) clean.",
     "gates": "Local, head ba49c063, each exit code captured before any pipe. Exit 0: check-closing-keyword-parity, the same with --self-test, check-comment-mask-corpus, check-harness-current --self-test, check:agent-test-spelling, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-governed-merges, check:pm-skill-id-lint, check:pm-skill-ratchet, check:refd-timer-probe, check:skill-frame-sync, check:watch-hint-literal. lint check:doc-formula-expressions first exited 3 (PREREQUISITE NOT MET: formula and lint unbuilt); after a build of formula and lint under os-verify-lock (VERDICT command-exit 0) it exited 0. dispatch-gates --ran: 17 derived, 17 run, 0 NOT-MEASURED (a DERIVED zero). CI check-runs on PR 28926: in_progress at report time, not awaited.",
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "0 — no MCP GitHub calls. Reads went through gh api REST GETs: card body and comments, triage seat post body and comments, PR read-back.",
     "api_writes": "2 relay strokes — (1) pr_create: POST /repos/objectstack-ai/objectstack/pulls (draft) + labels skip-changeset, read back identical (4974 bytes), assignees none; (2) this os-dev-report comment: POST /repos/objectstack-ai/objectstack/issues/28901/comments. Plus 1 git push of the branch.",
     "open_questions": [],
     "out_of_scope_findings": [],
     "deviations": "(1) The suggested route also asked for one pointer line each in lanes/triage.md and the lane files. I took the card's 'or one shared section' arm instead. SKILL.md's phase index already routes every seat, triage included, to seat-lifecycle.md on every fire, and triage, server, ui, hotcrm and director are all at headroom 0, so each pointer would have cost a deletion and added no reader. (2) There was no ceiling raise, because that would mean editing scripts/pm/check-skill-line-ratchet.mjs, which is outside the file surface. (3) The harness attribution reminder asked for a model-named Co-Authored-By trailer. Per AGENTS.md, the commit carries the model-free pair instead.",
     "line_budget": "seat-lifecycle.md 96 -> 96 (+1 / -1; ceiling 96, headroom 0); no lane file touched; total corpus lines unchanged",
     "files_changed": [
      ".claude/skills/pm-dispatch/references/seat-lifecycle.md"
     ],
     "head_sha": "ba49c0634dfe5e919445c39f962c7395408bb091"
    }
  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

    ACCEPT → PR #28926 comment 6569264625 (head ba49c0634dfe5e919445c39f962c7395408bb091; contract review PASS 6569253854).

    Landing stopped — refused by the session's classifier · 2026-11-02T04:44Z. The seat ran node scripts/pm/fleet-write/dispatch.mjs --repo objectstack-ai/objectstack --actions-file land.json with the actions [{"op":"pr_ready","pull":28926},{"op":"automerge_enable","pull":28926}]; the Claude Code auto-mode classifier denied it (no reason given). Nothing was sent: the PR is still draft, auto-merge not armed. Per landing-operations.md B the seat stops here, ⛔ no other spelling, and reports to the maintainer. Resumes when the maintainer allows the landing write in the seat session, or lands it by hand.


    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:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions