Skip to content

Charter the Project Director seat (项目总监): human-invoked, owning the contract-review chain and the adjudication duty #12661

Closed

Description

@os-litant

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:

  1. The needs:contract-review chain — 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.
  2. 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 director as a role argument beside triage / 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:seat post (mutex + handover), same four-section protocol; charter versioned at a new references/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-review carriers 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

  1. os-litant commented on Aug 27, 2026

    @os-litant
    CollaboratorAuthor

    Claim: PM loop round R1 W3
    Session: session_01MnijPVVDakqK2J335JoJtq
    Branch: claude/issue-12661-director-seat-charter
    Worktree: objectstack-issue-12661
    Domain: domain:skills
    File 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 in scripts/pm/check-skill-line-ratchet.mjs (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: claude-fable-5 — this dispatch's node scripts/pm/dispatch-gates.mjs --tier derivation: 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

  2. self-assigned this
    on Aug 27, 2026
  3. os-litant commented on Aug 27, 2026

    @os-litant
    CollaboratorAuthor

    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-12661
    File 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

  4. os-litant commented on Aug 27, 2026

    @os-litant
    CollaboratorAuthor

    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:

    「项目总监 工作的基本原则,5张一批,要从业务角度解释清楚问题和和选项,并带上四维综合分析」

    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

  5. os-litant commented on Aug 27, 2026

    @os-litant
    CollaboratorAuthor

    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-maintainer label 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

  6. os-litant commented on Aug 27, 2026

    @os-litant
    CollaboratorAuthor

    Charter ruling 3 of 3 (mid-flight, recorded by the dispatching PM seat) — maintainer, 2026-08-27 ~04:34Z, verbatim:

    刚才说的 needs:contract-review 类别,项目总监处理时,如果是收尾,应该帮忙处理完到合并。如果有大的错误,应该改标签。如果是卡在决策卡,和我讨论该怎么处理。

    Reading (three branches, mapping onto the review verdicts — the charter section for the contract-review duty should be organized by this structure):

    1. Wrap-up (PASS) → the Director carries the item through to merge: for un-governed code PRs this is the existing 清标即落地 chain (pre-landing checks → ready → auto-merge/queue) executed by the Director; for governed-surface PRs "to merge" means driving to human-merge readiness and naming the waiting state — draft-only + human merge stays unchanged.
    2. Big error (FAIL/REWORK) → change the label: one read-modify-write replace back to the appropriate re-dispatch/rework state. The label IS the inbox — a prose call-out is an empty handback (same lesson as the engine-lane rework case earlier today).
    3. Stuck on a decision card (BLOCKED) → discuss with the maintainer: fold into the adjudication batch format already ruled on this card (batches of ≤5, business-angle explanation, options, four-dimension analysis, one recommendation each).

    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-decision cards remain parked as-is for the Director.


    Generated by Claude Code

  7. added a commit that references this issue on Aug 27, 2026
    45e487e
  8. os-litant commented on Aug 27, 2026

    @os-litant
    CollaboratorAuthor

    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

  9. os-litant commented on Aug 27, 2026

    @os-litant
    CollaboratorAuthor

    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:

    • All four charter-source quotes carried verbatim (untranslated, including the original's 「和和」): the three founding lines, the basic-principles ruling, the third-duty ruling, and the PASS/FAIL/BLOCKED tri-branch ruling.
    • Tri-branch section matches the ruling's structure: wrap-up ⇒ carry to merge (un-governed via the existing 清标即落地 chain; governed stays draft-only — "to merge" means drive to human-merge readiness, never merge for the maintainer); big error ⇒ label flip IS the handback (prose call-outs explicitly voided); stuck on a decision card ⇒ into the adjudication batch, never self-ruled. One interpretation flag for the maintainer's merge-time review: the governed-surface carve-out inside the wrap-up branch is the PM's reading of 「帮忙处理完到合并」, flagged in chat without objection so far — merging this PR ratifies it.
    • Three supersessions rewritten in place, zero quotes lost: the 2026-08-26 adjudication-ownership half, the 2026-08-23 hourly-clock ownership (dead in fact, not resurrected), and the auto-adjudication runner set — every displaced ruling quote has a named surviving home in director.md's supersession ledger, and the SKILL.md tombstone pointer is retargeted.
    • Line economy holds everywhere: SKILL.md 1005/1005 net 0 with a full cut ledger (each cut's surviving home named in the PR body), contract-review 48/48, state-machine 44/44, lanes/skills 35/35, dispatch-runbook 274/274, director.md seeded shrink-only at 75/75 with table-row pin 0 and the lane self-test enumeration extended to eight.
    • Surface additions blessed: items 6–7 (lanes/skills.md, dispatch-runbook.md) accepted under the bounded in-place fix exemption — same defect class (stale review-chain-ownership clauses), mechanical shape pinned by the ruling, no competing claim (open-PR walk at dispatch), same gate family. state-machine.md was ordered by this seat's second dispatch increment. The claim-amendment comment was withheld on this seat's own rate-limit instruction; this comment is the amendment record.
    • Gates: ratchet + id-lint + frame-sync/freshness + the derived union all green at 45e487e9 per 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-zhuang on the PR, draft bit untouched. End state: awaiting review + the maintainer's human merge. Fixes #12661 closes this card on merge.


    Generated by Claude Code

  10. added a commit that references this issue on Sep 1, 2026
    7cde0d7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions