Repository navigation
Charter the Project Director seat (项目总监): human-invoked, owning the contract-review chain and the adjudication duty #12661
Description
Filed by the skills seat (session session_01MnijPVVDakqK2J335JoJtq) executing a maintainer direction given in live PM chat, 2026-08-27. Verbatim, untranslated, in sequence:
「所以是否应该搞一个决裁的项目经理,也要更新他的skills」
「比如叫项目总监?」
「项目总监 由人工定期指挥,负责处理 contract-review 类别的和需要决裁的。」
The third message is the direction this card implements. The feature-class human floor is satisfied by the instruction itself; the governed draft PR is the maintainer's veto window on the exact wording.
What the seat is
项目总监 (Project Director) — a named, human-invoked role. ⛔ No Routine, no cron, no standing fleet slot: the maintainer summons it (「处理决裁」/「处理 contract-review」/ the explicit entry below), exactly the shape measured working this shift when those duties ran on demand inside a lane seat's session. Two duties move to it wholesale:
- The
needs:contract-reviewchain — enumerate carriers (cards AND PRs), review contract increments at the mandated tier, verdict on the card, clear both carriers, land un-governed code PRs per the standing clear-equals-land rule, hand back non-mechanical CI reds with a named reader or take over mechanical ones. - The adjudication duty (决裁勤务) — decision-inbox hygiene across repos, batch presentation (≤5 per batch, business-angle explanation + options + four-facet analysis + one recommendation), post-ruling atomic four-piece execution, and the auto-adjudication channel under its hard gate.
Supersessions (recorded, not silently overwritten)
- Maintainer 2026-08-26 「skills 和决裁的问题,还是由skills席统一人工处理」 — the adjudication half moves from the skills seat to the Director by this newer direction; the skills-face work (skill text, governance surfaces, the skills lane) stays with the skills seat.
- Maintainer 2026-08-23 the contract-review hourly self-bound cron on the skills seat — already dead in fact (
auto_disabled_session_gone, measured 2026-08-27 shift-close); the ownership clause is rewritten to the Director's human-invoked cadence. ⛔ The cron is not resurrected. - The auto-adjudication runner set (分诊 Routine 或 skills 席) — becomes 分诊 Routine 或 项目总监席; the fable machine-read fuse is unchanged and non-negotiable.
Design defaults (each reversible at the veto window)
- Entry:
/pm-dispatch directoras a role argument besidetriage/epic:— versioned in the same skill, no new file tree. - Tier: Director sessions run at
CONTRACT_REVIEW_TIER, verified by the downgrade-fuse machine reading each session; a below-tier session does only tier-free preparation (inventory, batch drafting) and parks both duties. - Seat post: one
pm:seatpost (mutex + handover), same four-section protocol; charter versioned at a newreferences/lanes/director.md(register its ceiling in the line ratchet). - Bijection carve-out: the Director holds no
domain:*lane; its scope keys on the two labels, cross-lane and cross-repo — same carve-out class as the triage seat. It never dispatches lane backlog work and never writes code; mechanical takeovers it owns are executed by dispatched devs under the existing takeover protocol. - Latency trade, stated so it is chosen knowingly: with no cron,
needs:contract-reviewcarriers wait between Director sessions; parked carriers are the designed-safe state, and the maintainer's invocation cadence is the review cadence.
Acceptance criteria
SKILL.md names the seat, its entry, its two duties, the tier gate and the carve-out, paying the line ratchet with same-file cuts (zero headroom — every add funded, cut-ledger rows naming surviving homes); references/lanes/director.md carries the charter; the three superseded clauses are rewritten in place with the new provenance quoted; check:skill-frame-sync, id-lint and the ratchet stay green. ⛔ No behaviour is invented beyond the two duties named in the direction.
Activity
os-litant commentedon Aug 27, 2026
Claim: PM loop round R1 W3
Session:
session_01MnijPVVDakqK2J335JoJtqBranch:
claude/issue-12661-director-seat-charterWorktree:
objectstack-issue-12661Domain:
domain:skillsFile surface:
.claude/skills/pm-dispatch/SKILL.md+.claude/skills/pm-dispatch/references/lanes/director.md(new) +.claude/skills/pm-dispatch/references/contract-review.md(ownership clause rewrite) + the line-ratchet registration for the new lanes file inscripts/pm/check-skill-line-ratchet.mjs(stop on breach; explain in the report)Container & model: M,
mode:subagent,model: claude-fable-5— this dispatch'snode scripts/pm/dispatch-gates.mjs --tierderivation: SKILL.md is clause-① MANDATORY (the lane's own operating protocol); this seat's account carries the tier.Clause-②: no — PM-protocol seat charter; no product contract accept/reject behaviour change, no public package surface widened.
Serial constraints cleared: the instruction-text fold (PR on SKILL.md/os-dev.md/AGENTS.md) MERGED 2026-08-27T04:22:43Z, freeing SKILL.md; no open PR touches SKILL.md, contract-review.md or the ratchet script (walked at dispatch time); lane in-flight is one takeover patch dev on an engine-lane PR branch — disjoint surface. Ratchet reality at dispatch: SKILL.md 1005/1005 headroom 0 (post-merge re-take owed in the worktree), widest table row 765/765; the new lanes file needs its own ceiling row.
Generated by Claude Code
os-litant commentedon Aug 27, 2026
Dev claim: dispatched os-dev subagent now executing this card (same session identity as the PM claim above; identity distinguisher = the branch, which this dev owns and has just pushed).
Session:
session_01MnijPVVDakqK2J335JoJtq(mode:subagent dev run)Branch:
claude/issue-12661-director-seat-charter(pushed empty as write-route probe — probe green)Worktree:
objectstack-issue-12661File surface (per the PM claim, unchanged):
.claude/skills/pm-dispatch/SKILL.md+.claude/skills/pm-dispatch/references/lanes/director.md(new) +.claude/skills/pm-dispatch/references/contract-review.md+scripts/pm/check-skill-line-ratchet.mjs(ceiling registration). Any surface beyond these four = stop and report.Generated by Claude Code
Generated by Claude Code
os-litant commentedon Aug 27, 2026
Maintainer ruling recorded mid-flight — binding addition to the charter (provenance: maintainer, live PM chat, 2026-08-27, relayed by the skills seat session
session_01MnijPVVDakqK2J335JoJtq). Verbatim, untranslated:Charter consequence: the Director's 基本原则 (basic working principles) section carries this as the seat's operating rule for the adjudication duty — batches of 5 cards, each explained clearly FROM THE BUSINESS ANGLE (the problem and the options with their real costs), each carrying the four-dimension comprehensive analysis. This confirms and re-anchors the 2026-08-26 flow ruling (「决策卡5张一组,从业务的角度给我具体解释,说明可选项,并进行四维分析」) onto the Director seat as its foundational principle rather than a procedural detail. The implementing dev folds this quote into the charter verbatim; the batch discipline and the four-facet frame reference stay single-sourced (the frame copies remain under
check:skill-frame-sync, ⛔ no second copy of the frame itself).Generated by Claude Code
os-litant commentedon Aug 27, 2026
Second mid-flight maintainer ruling — scope addition (provenance: maintainer, live PM chat, 2026-08-27, relayed by the skills seat session
session_01MnijPVVDakqK2J335JoJtq). Verbatim, untranslated:Charter consequence: the Director gains a THIRD duty — custodian of the maintainer-action inventory. Concretely: ① the
pm:awaiting-maintainerlabel inventory across repos is the machine carrier of "things awaiting a human act" (Settings changes, Routines-UI operations, hand-clicks, environment credentials — the class the state model defines as decision-made, one manual act outside GitHub remaining); ② when summoned, the Director presents this inventory alongside the decision batches (one consolidated "awaiting you" list instead of tails scattered across seat posts — seat-post prose becomes pointers, the label stays the state); ③ the awaiting-maintainer EXIT moves to the Director: verifying the act happened, clearing the label with the evidence comment in the same stroke, per the standing state-machine rule that the exit is seat-verified with no machine exit by construction. Lane seats keep filing INTO the state (whoever discovers the need parks the card); the Director owns the ledger and the exits.Generated by Claude Code
os-litant commentedon Aug 27, 2026
Charter ruling 3 of 3 (mid-flight, recorded by the dispatching PM seat) — maintainer, 2026-08-27 ~04:34Z, verbatim:
Reading (three branches, mapping onto the review verdicts — the charter section for the contract-review duty should be organized by this structure):
Relayed to the in-flight charter dev via SendMessage at 04:34Z (before this comment — GitHub API was rate-limited at ruling time; this is the deferred record).
Related same-window ruling, recorded for completeness: maintainer at ~04:41Z — 「你不用处理决裁了」. The adjudication duty belongs to the Director seat per this charter; the skills PM seat stands down from presenting adjudication batches. Open
needs-user-decisioncards remain parked as-is for the Director.Generated by Claude Code
Charter the Project Director seat: human-invoked, owning the contract…
os-litant commentedon Aug 27, 2026
os-dev-report
{ "issue": 12661, "status": "done", "branch": "claude/issue-12661-director-seat-charter", "pr": "https://github.com/objectstack-ai/objectstack/pull/12664", "premise_still_valid": true, "summary": "Project Director seat chartered. New charter file references/lanes/director.md (75 lines: authorization quotes verbatim, human-invoked shape with the latency trade stated, CONTRACT_REVIEW_TIER gate as constant reference, triage-style bijection carve-out, basic-principles section per mid-flight ruling 1, three duties including the maintainer-action ledger per mid-flight ruling 2 and the PASS/FAIL/BLOCKED tri-branch per mid-flight ruling 3, supersession ledger). All three named supersessions rewritten in place with new provenance: SKILL.md adjudication-ownership paragraph, contract-review.md ownership clause (cron not resurrected), auto-adjudication runner set. SKILL.md paid at net 0 from same-file cuts; cut ledger with surviving homes in the PR body. Draft PR, governed surface, awaiting human merge.", "tests": "All at commit 45e487e91 (final commit = pushed head; exit codes captured via redirect-then-capture, never through a pipe). Verdict lines: 'check-skill-line-ratchet self-test: 111 cases pass.' · 'SKILL.md is 1005 lines (ceiling 1005; headroom 0)' · 'lanes/director.md is 75 lines (ceiling 75; headroom 0)' · contract-review 48/48, state-machine 44/44, lanes/skills 35/35, dispatch-runbook 274/274, widest SKILL.md table row 765/765 · 'check-skill-id-lint: 23 file(s) clean' · 'check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files' · 'check-skill-frame-freshness: the decision frame in this tree is current with origin/main' · derived union from 'node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack' (stderr header names this worktree at 45e487e91): agent-test-spelling, bash32-floor, cli-command-ids, cross-package-test-inputs ('All 117 self-test cases passed. OK: 20 package(s)'), doc-authoring, doc-formula-expressions (after building @objectstack/formula and @objectstack/lint prerequisites), entry-guard, parse-guard, pnpm-filter-targets, nul-bytes ('OK, scanned 7019 text file(s)'), pm-governed-prose, ci-filter-parity ('OK: all 109 declared cross-package glob(s)') all green; gate-script convention: 'bare-root-worklist self-test: 46 live row(s) ... none stale, none missing, none contradicted' and 'dispatch-gates self-test: 719 cases pass.' Ratchet script has no vitest suite; its own test = --self-test, run inside check:pm-skill-ratchet. NOT MEASURED locally: check-governed-queue-guard (CI-only by construction, reads the workflow event payload and refuses exit 0 without it; runs on the PR). check:pm-governed-merges is a report-only since-window audit, PM round duty, not a tree gate.", "mcp_calls": "6 - claim comment, failed get_labels probe on the PR (GraphQL resolves Issues only), create_pull_request, pull_request_read full-body read-back, issue_write whole-set label write, this report comment. All issue/comment reads via the zero-quota public payload channel; repo-scoped REST probe measured 403 (whole class) this seat, so skip-changeset went MCP whole-set write + public-page read-back (declared channel change; read-back positive).", "line_budget": "SKILL.md 1005/1005 net 0 (adds: director table row, awaiting-row stewardship, Director paragraph 8 lines; funded by: clause-2 pointer tail -1 line, adjudication-flow mechanics moved to director.md). contract-review.md 48/48 net 0, state-machine.md 44/44 net 0, lanes/skills.md 35/35 net 0, dispatch-runbook.md 274/274 net 0. director.md new ceiling 75 seeded at landed count, table-row pin 0, self-test lane enumeration extended to eight.", "files_changed": [".claude/skills/pm-dispatch/references/lanes/director.md (new)", ".claude/skills/pm-dispatch/SKILL.md", ".claude/skills/pm-dispatch/references/contract-review.md", ".claude/skills/pm-dispatch/references/state-machine.md", ".claude/skills/pm-dispatch/references/lanes/skills.md", ".claude/skills/pm-dispatch/references/dispatch-runbook.md", "scripts/pm/check-skill-line-ratchet.mjs"], "deviations": ["File surface grew from the claimed four: state-machine.md added by the PM's second dispatch increment; lanes/skills.md and dispatch-runbook.md added under the bounded in-place fix exemption (same defect class - stale review-chain-ownership clauses; mechanical, pinned by the ruling on this card; no other claim holds them per the dispatch-time walk; same gate family). This report plus the PR body carry the same-round surface declaration; a separate claim-amendment comment was not posted because the PM instructed no card writes during the rate-limit window.", "Card said two duties / two labels; the charter carries three duties and three scope labels per mid-flight rulings 2 (recorded on the card) and 3 (relayed by the PM; card record owed by the PM).", "The three charter-source quotes for rulings recorded only in PM chat are carried verbatim in the charter and the PR body; the card comment for ruling 3 is the PM's to backfill."], "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
Generated by Claude Code
os-litant commentedon Aug 27, 2026
ACCEPT — seat review done on the full diff; governed surface, so this lands only by the maintainer's hand.
Deliverable: PR #12664 (draft, head
45e487e9, 7 files, +111/−28). Reviewed against the card plus all three mid-flight rulings:45e487e9per the dev report with verdict lines quoted; the governed queue guard is CI-only and runs on the PR itself.Next (same stroke): review requested from
os-zhuangon the PR, draft bit untouched. End state: awaiting review + the maintainer's human merge.Fixes #12661closes this card on merge.Generated by Claude Code
Charter the Project Director seat: human-invoked, owning the contract…