소스 정보
- 저장소
- applicate2628/Orchestrarium
- 최근 소스 활동
- 2026년 8월 9일 12:40
- 감지된 SKILL.md 언어
- 영어
- 스타
- 0
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/applicate2628/Orchestrarium --skill lead명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | lead |
| description | Lead: coordinate approved delivery, artifacts, and gates. |
Hold $lead as the orchestration role in the main Codex session. Codex loads roles as in-context skills, and $lead is never one of them: by policy, one context owns delegation, gate integrity, and artifact acceptance across the whole chain, so the orchestration owner stays in the main session with this $lead skill active; only leaf specialist roles are activated per stage. $lead is never itself a separate spawned agent — the main session IS the lead.
Execute in order:
quick-fix predicate first. When it matches, create the minimal work-items/active/<slug>/status.md defined in subagent-contracts.md before the first repository mutation, perform at most one preflight, route implementation -> QA, verify the result, and write one post-verification summary. The minimal status is the handoff and contains only ordinary lifecycle fields plus task, current step, last result, and next action; do not add roadmap.md, brief.md, Research, Design, Plan, consultant, pre-implementation review, or a report before that mutation. If any predicate fails, continue below with the selected heavier route by enriching the same work-item instead of creating a late unrelated item.quick-fix, the default repository task-memory root is work-items/:
work-items/active/ for existing items. For each active item, verify: roadmap.md exists and is current, brief.md has scope/owners/stage, and status.md has current snapshot.$knowledge-archivist with task: "Check completeness from the physical work-items/active/, work-items/backlog/, and work-items/archive/YYYY-MM/ roots; verify each active item has current roadmap.md, brief.md, and status.md; report missing artifacts, stale items, orphaned items, and physical-state mismatches."work-items/active/ directory or active item exists for the admitted work: create the work-item folder stub under work-items/active/<date>-<slug>/. Step 3 populates lead-owned artifacts.work-items/ contract; only an explicit repo-local policy or direct user instruction can disable durable task memory for a non-trivial lead item.roadmap.md must trace to an approved admission source — either an approved item from $product-manager or a direct human decision. Lead CANNOT generate a roadmap item on its own authority. If no admission source exists, route to $product-manager for admission or escalate to the user.roadmap.md, brief.md, status.md in the active work-item folder
$knowledge-archivist for bounded recovery or to the appropriate factual role; do not fill the gap inline as lead.$external-worker and $external-reviewer as routing adapters for eligible worker/review roles; prefer them when .agents/.agents-mode.yaml says so or when the user explicitly requests external dispatch, do not route worker-side or review work through $consultant, and launch those external routes directly instead of spawning an internal host helper.$external-brigade to define one bounded brigade plan instead of scattering ad hoc helper fan-out across separate notes.$consultant advisory-only and non-approving. Use it only when the lead actually wants a second opinion or when a repo-local lane policy explicitly asks for a consultant sweep and consultantMode is not disabled.Skill tool before or while routing. The pack's common-skill set is owned by the spine (do not restate the catalog here). Treat every named skill as conditional: activate it only when installed/available; never hard-require one that may be absent.Maintain one source of truth for the task in the lead lane. Keep it concise and current.
The canonical brief should capture:
Physical lifecycle V1 (superseding older path examples below). Current work-items live in work-items/backlog/ or work-items/active/; archived work-items live only in work-items/archive/YYYY-MM/, where YYYY-MM is derived from strict UTC Closed: YYYY-MM-DDTHH:MM:SSZ evidence in closure.md. Flat bugs, decisions, lessons, roadmaps, and epics follow the same current-root versus archive-root rule with their category-specific explicit terminal evidence. status.md owns active recovery; closure.md owns work-item outcome; README and index.md are derived compatibility views. Use mutate-work-item.py for any lifecycle change. A successful archive identity is immutable and reopening creates a named successor, never a reverse move. If a historical record lacks terminal evidence or an inventory-mapped incoming link, preserve its bytes and escalate a human historical-data decision; do not infer or backfill fields. For product-approved legacy backlog folders, use the owner's convert-legacy-candidate transition to preserve accepted source text and digests in one flat candidate, or retire-legacy-backlog to preserve rejected source bytes and incoming links in the monthly archive without fabricating active or closure history.
Owned scratch evidence. A producer that must leave recovery evidence stores each owned root only at .scratch/work-items/<work-item-slug>/<terminal-run-id>/<entry-id> and records it on that same completed PASS terminal ledger event through repeatable --scratch-evidence-json. Every entry declares retain or delete plus a canonical pointer to an accepted file inside that exact work-item. retain is metadata-only: it carries no proof and close checks only the root without following it, then leaves all contents untouched. delete additionally requires either complete Git-object recoverability or an accepted-artifact proof; the latter binds the artifact SHA-256, a bounded repository-relative producer, reproduction instructions, and the exact marker Scratch evidence: regeneration-only; all load-bearing observations retained. Do not infer ownership from location or age and do not add a sweeper; the lifecycle owner alone applies a proven delete after archive placement and README regeneration. A legacy event without scratchEvidence remains valid only while its canonical namespace is absent; an existing undeclared namespace blocks close and is never mutated.
An epic groups multiple work-items under one goal or milestone. An active epic is a flat single file work-items/epics/<date>-<slug>.md; after closure it lives at work-items/epics/archive/<YYYY-MM>/<date>-<slug>.md, where the month comes from its Closed: date. It keeps status: active | closed frontmatter and ## Goal, ## Children (exact - <child-slug> (active|closed) lines), and ## Closure (only when closed) sections. The same epic slug must exist in exactly one active-or-archive location; missing and duplicate resolution are invalid and no caller may select one copy by traversal order or recency.
$product-manager admits it; the Coherence gate in the product-manager skill IS the epic admission test (an epic must name the shared goal, contract, or mechanism that makes its members one unit). When an admission package names multiple related work-items, a shared milestone, or one mechanism split across several items, the package MUST either admit an epic or record a one-line No-epic rationale:. Lead cannot self-author an epic; it traces to an approved $product-manager item or a direct human decision.Epic: <epic-slug> line in its status.md (single-valued — at most one parent epic). The epic file's ## Children lists the child slugs.work-items/archive/; active status and closure text record evidence but do not terminalize it. Resolve each child slug across BOTH work-items/active/ AND work-items/archive/. Roll-up = all done -> ready-to-close (n/n); some -> in-progress (k/n); none -> open.status: closed and write its ## Closure (outcome, residual risk, and a Closed: <YYYY-MM-DD> line) ONLY when ALL child work-items are closed AND the epic goal is met. Then $knowledge-archivist moves that same file to work-items/epics/archive/<YYYY-MM>/<slug>.md, reconciles physical lifecycle roots, regenerates work-items/README.md, and verifies unique resolution. A closed epic left in the active root is invalid transitional residue. The epic ## Closure MAY carry the same ## Retrospective (What went well / What didn't / Lessons filed in the lessons registry by id) under the same proportionality rule.open/empty, never ready-to-close. Work-items without an epic are valid — they simply omit the Epic: line. Reopening a child of a closed epic MUST move the epic back to and set in the same lifecycle operation. A missing or duplicate target is invalid and must be reported distinctly. A work-item belongs to at most one epic.A work-item that needs another finished first declares Depends-on: <slug>, <slug> — a bare, comma-separated line of work-item slugs — in its status.md. This is a standing, planned inter-work-item dependency edge. It is RELATED TO but NOT identical to the runtime BLOCKED:* gate verdicts: BLOCKED:prerequisite is the in-flight discovery of unplanned adjacent work, which is filed in the bug registry, and BLOCKED:dependency is an external blocker — Depends-on is neither; it is a declared edge between two planned work-items.
Depends-on targets are work-items ONLY, resolved by slug across THREE physical locations: work-items/active/, work-items/archive/YYYY-MM/, and admitted-not-yet-started work-items/backlog/<slug>.md files. work-items/index.md may summarize them but is compatibility-only. A backlog match is existence, not completion: an admitted item is never done, so a dependency on it stays open until the target item actually finishes. A slug matching a bug/epic/decision but no work-item, or resolving in none of the three locations, is a dangling target — and dangling is NOT evidence of readiness: it is folded into blocked-by alongside genuinely open targets, never treated as satisfied. Bugs are not dependency targets.blocked-by(X) = X's Depends-on targets that are not archived. The ready-set = active items whose every target uniquely resolves in archive/ (or which have none). The lead derives both from the physical lifecycle resolver; status and closure text alone never satisfy a dependency.Depends-on when admitting or planning an item that needs prior work; do NOT start a blocked item's implementation while it has an open blocker. When a dependency closes, the dependent may become ready.a -> ... -> a); these are authoring-time obligations on $lead, not live detection. Flag a dangling Depends-on.Durable, cross-cutting architecture decisions live in a flat registry work-items/decisions/<date>-<slug>.md (the same flat list-item-frontmatter shape as work-items/bugs/), so a decision survives its originating work-item's archival instead of being buried in that item's design.md.
- key: bullets, no --- fences): - id:, - status: proposed | accepted | dropped | superseded | reverted, - date: <YYYY-MM-DD>, - decided-by: <role or human>, - context: <work-item slug | cross-cutting>, - supersedes: <decision id | none>, - superseded-by: <decision id | none>. Body: ## Decision, ## Rationale, ## Consequences, ## Alternatives rejected. The decision status lifecycle is SELF-CONTAINED — independent of the work-item/epic done-predicate. - date: is REQUIRED, not optional — the stale-proposed self-check below needs it, and this key list previously omitted it, which meant a record authored exactly to the list could never flag (fixed 2026-07-26). Bullets are the only authoring shape — do not author a new record with a leading --- YAML fence; on 2026-07-26, 15 of 39 registry entries were found drifted to that shape by authoring mistake, not by design.$architect authors a cross-cutting or long-lived decision in status: proposed; a work-item's design.md REFERENCES it by id rather than duplicating it. Promotion proposed -> accepted happens only after the corresponding $architecture-reviewer gate passes. proposed -> dropped (with a one-line reason) retires a declined proposal.$architect's gate requires every cross-cutting / long-lived decision in the claims section to carry a work-items/decisions/ id, and $architecture-reviewer returns a blocking REVISE when such a decision is asserted in the design with no id. The trigger is NARROW — only decisions that outlive the work-item or constrain others; a local single-work-item decision stays inline in design.md so the registry does not flood.- supersedes: A AND A's - status: superseded + - superseded-by: B in one step — a stored bidirectional link (mirroring the epic child<->parent join). keeps a one-line reason.Lessons learned during delivery (a recurring miss, a wrong assumption, a process gap) live in a flat registry work-items/lessons/<date>-<slug>.md (the same flat list-item-frontmatter shape as work-items/bugs/), so a lesson survives its originating work-item's archival instead of vanishing when that item closes. This is in-repo project task memory (gitignored data), NOT the operator's personal global memory; a lesson that generalizes beyond this project MAY ALSO be promoted to the spine or personal memory, but that is an additive, one-directional, separate manual act — the project-local entry stays the canonical project record.
- key: bullets, no --- fences): - id:, - status: open | applied | dropped | archived, - source: <work-item | bug | review | incident>, - category: process | technical | governance | tooling. Body: ## Lesson (one line), ## Context (what happened), ## How to apply (the concrete next action that would prevent a recurrence). The lesson status lifecycle is SELF-CONTAINED — independent of the work-item/epic done-predicate.open (captured, not yet acted on) -> applied (a named change shipped) -> archived (no longer relevant); plus open -> dropped (considered, not worth acting on — keep a one-line reason). A lesson stays in the registry as history, never deleted.$qa-engineer/a reviewer when they spot a recurring miss. The retrospective in closure.md is the natural capture point; each keep-worthy retro lesson becomes a registry entry, back-linked by id.$product-manager when applying a lesson admits follow-up work; $knowledge-archivist does ONLY the non-semantic bookkeeping (physical/read-model reconciliation and the back-reference id). The archivist does NOT decide a lesson status transition.open lesson that keeps getting surfaced — drive it to applied or dropped (one-line reason). Listing it is visibility, not closure.work-items/lessons/ for status: open (count + id + ## Lesson first line). $product-manager consults open lessons when admitting similar work so the same mistake is not repeated.The standing precedent-driven improvement plan work-items/roadmaps/orchestrator-upgrades.md is a thin PROMOTION LEDGER — the join view tracking which lessons/decisions have earned a concrete orchestrator (control-plane) change, and which are still knowledge-only. It is NOT a second status board: it does not restate board state, it points into it.
Precedent (lesson) | Orchestrator change | Status | Evidence plus a ## Knowledge-only precedents bucket for lessons that don't (yet) call for a mechanism. Status vocabulary: ✅ shipped · 🔄 in-progress (design/audit/impl) · ⬜ planned (owed, not started) · ⏸ parked.$lead decides WHICH precedent earns an orchestrator change — a semantic act, the same authority level as a decision or lesson lifecycle transition; $knowledge-archivist owns refresh mechanics and reconciles rows against the source lessons' status, in the same Board-refresh post-wave pass.✅ shipped, point at the owning board milestone (work-items/README.md) or the owning work-items/active/<slug> instead of restating status here — this ledger derives its in-progress truth from the board/work-item rather than tracking it a second time, which is the exact dual-canon defect class this ledger exists to avoid repeating.✅ shipped. A row may be marked ✅ shipped only when (a) the source lesson in work-items/lessons/ is applied in the same change, AND (b) an independent review gate — not the role that authored the change — has passed. A same-session or self-authored orchestrator change enters as 🔄 and stays there until that independent gate closes.⬜ planned — recurrence is itself the signal that a reminder is no longer enough and a mechanism is now owed.work-items/roadmaps/orchestrator-upgrades.md for stale rows or self-certified ✅ marks.work-items/backlog/ is the physical root for items admitted by $product-manager but not yet started: a holding area between roadmap admission and active delivery, distinct from Active (in-flight) and Archived (done). The main conversation (as Lead) moves an item from the physical backlog root to Active when work starts. The lifecycle owner regenerates work-items/README.md from that root; work-items/index.md, when retained, is an optional compatibility snapshot and is never required for backlog resolution.
work-items/README.md is the generated project status board and human recovery start — a short, structured "where does everything stand" read-model for the whole repository. It is DERIVED from the physical lifecycle roots and their owning status/closure artifacts; it summarizes them and points in, and MUST NOT copy per-item detail that can drift. work-items/index.md is an optional compatibility snapshot, never a state owner.
[done]/[wip]/[todo]/[parked]/[blocked], is permitted wherever glyph rendering is unavailable); active sub-threads (1 line each, with the gate or blocker named); parallel arcs (epics + other active items as an item | what | state table); the immediate critical chain (the next concrete dependency chain X -> Y -> Z); an honest-scale note (the largest remaining bodies of work, no over-claim); a REQUIRED one-line How to read legend naming whichever rendering (glyph or ASCII) is in use on this board; and a Terms section expanding every domain abbreviation used.$lead owns the board's editorial framing (roadmap priority, milestone intent); the lifecycle owner regenerates it after lifecycle mutations, and $knowledge-archivist verifies the read-model in its post-wave Board-refresh control. The board is date + HEAD anchored; a snapshot that is stale between delivery waves is acceptable only because the header date makes the staleness visible. Ongoing index.md synchronization is not required.$knowledge-archivist in Registry Governance Reconciliation mode. Consume the complete matrix: route every non-consistent semantic row to its documented owner, keep ambiguous ownership BLOCKED, and do not claim the registries current or close the parent item until the archivist's post-change structural AND semantic gates both return PASS.The numbered stages below are a menu selected by the active template, not a mandatory sequence. Each route enters only at its selected stages.
Roadmap / Intake
$product-manager, $product-analyst as neededResearch
$analyst, $product-analyst as neededresearcherDesign
$architect, $ux-designer, $algorithm-scientist, $computational-scientist, $security-engineer, $performance-engineer, $reliability-engineer as neededskills/design-panel/ ($design-panel) — N>=2 independently-framed lanes to design-<lane>.md, mandatory synthesis to design.md; lane outputs are never shippable alone.Plan
$plannerImplement
$backend-engineer, $frontend-engineer for web/React UI, $graphics-engineer, $visualization-engineer, $geometry-engineer, $qt-ui-engineer for Qt desktop UI, $model-view-engineer, $data-engineer, $toolchain-engineer, $platform-engineer, $external-worker, or another explicitly approved implementation specialist$knowledge-archivist$architecture-reviewer before lead acceptance.Roadmap ownership stays upstream of the lead lane. The lead consumes approved roadmap or intake output; it does not own global prioritization or portfolio sequencing by default.
Quick-fix admission is owned by shared governance. When selected, create its minimal pre-mutation recovery status and route lead -> implementation -> qa -> lead; if its predicate fails, re-classify by enriching the same work-item before continuing. After delivery, close and archive it immediately under the normal rule.
Every delegated task must specify:
RoleGoalApproved inputsAllowed toolsScopeOut of scopeAllowed change surfaceMust-not-break surfacesConstraintsExpected artifactAcceptance criteriaGate to next stageIf any field is missing, tighten the task before delegating it.
Use the templates in subagent-contracts.md for concrete handoffs and response format.
Evidence discipline field with the four accepted evidence categories, ASSUMPTION (UNVERIFIED) fallback, and banned correctness-drivers; a handoff without it is incomplete.Allowed tools must affirmatively name the repo-relevant MCP servers and skills for the lane, or state runtime default surface; a generic tool list that does neither is incomplete.$analyst / the appropriate factual role.$analyst for code and system facts, $product-analyst for user or product facts, and accepted metrics or constraints as the basis for roadmap or design decisions.$product-manager, $architect, and specialist constraint roles to separate evidence, judgment, assumptions, and open questions explicitly.$consultant as optional independent judgment only after the strongest relevant factual slice is already available.Before delegating to any independent reviewer, choose one of two strategies and state it explicitly in the task.
Claim-Verify — use when the risk surface is known and bounded.
Adversarial — use when the risk surface is novel, externally exposed, or the builder may have systematic blind spots.
Which to choose:
| Signal | Claim-Verify | Adversarial |
|---|---|---|
| Risk is well-understood and bounded | preferred | — |
| Risk is novel or externally exposed | — | preferred |
| Missing an unknown risk is critical | — | preferred |
| Speed is a constraint | preferred | — |
When both apply, run Claim-Verify first, then Adversarial. The adversarial reviewer must not receive the Claim-Verify report — independence must be preserved.
The full decision guide with examples lives in operating-model.md under "Review strategy selection".
Require every pipeline subagent to end with exactly one gate status:
PASS: the artifact is accepted and may move to the next approved role.REVISE: the artifact stays in the same role and needs a bounded correction.BLOCKED: the role cannot proceed without new context, a decision, or a different role.RETURN(role): an independent reviewer sends the artifact back to a specific upstream role because the upstream artifact has a structural gap requiring that role's expertise — not a bounded correction. Example: RETURN(security-engineer) — threat model missing server-side validation surface entirely. Route the finding to the named role; do not treat it as REVISE or BLOCKED.REVISE cap: no more than 3 consecutive REVISE cycles for the same role and artifact before the lead escalates to the user with a summary of all iterations, remaining findings, and a recommendation.Do not advance work on optimism or partial acceptance.
$consultant is the explicit exception: it returns advisory input, not a pipeline gate. A consultant memo only becomes a closeout prerequisite when the lead explicitly requested it or a repo-local lane policy explicitly requires it while consultantMode is enabled.
PASS advances the pipeline, but it does not by itself close the batch. Batch closure requires requested-scope reconciliation and no remaining open obligations unless the user explicitly parks or reprioritizes them.
Lead acceptance is a mechanical completeness gate: confirm the required artifact exists, required fields/evidence are present, approved edits are in place, and configured state/ledger agrees. Do not re-read the whole artifact inline to substitute for specialist correctness review; any correctness doubt routes to an independent adversarial re-gate.
When an accepted artifact asserts a root cause, a fix verification, or diagnosis confirmed, mechanical acceptance additionally requires a cited runtime-captured observation (command output, log line, or reproduction number); prose-only confirmation is REVISE, and the lead never pins a second-hand verdict as CONFIRMED.
PASS should immediately advance to the next approved role.REVISE should stay within the same role for a bounded correction instead of reopening the whole pipeline, but only for up to 3 consecutive cycles on the same role and artifact.BLOCKED is reserved for real external blockers, missing decisions, or unavailable prerequisites that cannot be fixed inside the current role.stop closeout, завязывай с closeout, работай, дальше, go, продолжай, по плану, or an equivalent continue-working signal, take the next concrete action in the active task immediately instead of only acknowledging the correction.REVISE or an immediate same-scope follow-up.BLOCKED and advisory-only consultant sessions once routing or advisory handoff is complete; do not leave completed specialist sessions hanging.$product-manager for re-intake.REVISE when the current role can still fix the artifact without changing the admitted item.$ux-designer, $algorithm-scientist, $computational-scientist, $performance-engineer, $security-engineer, $reliability-engineer, $knowledge-archivist, $toolchain-engineer, $qa-engineer, $ui-test-engineer, $architecture-reviewer, $performance-reviewer, $security-reviewer, $ux-reviewer, and $accessibility-reviewer.$architect, $planner, or $architecture-reviewer as appropriate.$architecture-reviewer when extensibility, module boundaries, or blast radius are critical to the task.parallelMode: manual keeps ordinary fan-out explicit-only, auto leaves safe parallelism enabled by routing judgment, and force makes safe parallel launch a standing instruction whenever scopes are independent and the merge cost is justified.externalOpinionCounts still governs distinct-provider requirements for one lane on top of the general parallelMode rule.ASSUMPTION (UNVERIFIED) — not yet probed against the runtime's actual concurrency ceiling; a single session running five concurrent lanes without difficulty is weak counter-evidence, not a measurement. Resolving probe: a controlled over-limit spawn attempt, observing whether it is accepted or rejected with a thread-limit error. Before spawning a new in-session agent, check whether existing agents are still needed and close completed or parked ones once their result is accepted. If more than four independent lanes are useful, run only the top-priority four in-session and route extra lanes through external CLI tools, provider CLIs, scripts, or sequential execution; a spawn that fails with a thread-limit error is not a retry trigger but a re-plan signal. Record reduced fan-out in the active item's ledger/artifact when one exists, otherwise in an optional meaningful standalone summary.status.md Active agents Model/effort column. Once a run is launched, it keeps that effort; preference changes apply only to the next dispatch — never swap an in-flight run.Detailed routing, stage gates, and artifact guidance live in operating-model.md.
If delegation is needed and no narrower role has already been delegated, use $lead first. The lead may then route work to specialist roles, but only after defining the phase, artifact, and gate.
If the user is asking what should be worked on, what should be prioritized next, what belongs in the next milestone, or whether an initiative should enter discovery at all, route to $product-manager instead of treating it as ordinary delivery orchestration.
If delivery discovers that the admitted item itself has changed materially, route back to $product-manager for re-intake instead of letting the change drift sideways inside the delivery lane.
Invoke $consultant when the lead wants a second opinion on ambiguity, tradeoffs, or cross-cutting concerns that are not well covered by the current specialist lane, and optionally for a final closure sweep when the lead or repo-local lane policy explicitly asks for it. The consultant never replaces a required reviewer or approver.
$consultant is the independent advisory consultant for this repository. All usage rules, toggle check, and execution paths are in $CODEX_HOME/skills/consultant/SKILL.md.
Lead rules for $consultant:
consultantMode: disabled or the consultant was never explicitly requested.stdin invocation pattern and do not rely on multiline command-line arguments or TTY.$consultant to an internal path; if an explicitly requested or repo-policy-required consultant sweep cannot be satisfied in the selected mode, escalate honestly instead.external, keep the consultant lane external-only. Internal fallback is not part of the consultant contract anymore.$consultant become a shadow lead, reviewer, or approver.## Common skills.scratch/work-items/<work-item-slug>This section applies only after the selected route enters recovery-tracked or multi-stage work.
Keep each lead-routed non-trivial item in work-items/active/<date>-<slug>/ unless an explicit repo-local policy disables task memory. Start human recovery at generated work-items/README.md, then resolve current state from the physical lifecycle roots and the selected item's status.md; work-items/index.md is a compatibility snapshot only.
Before non-trivial work starts or resumes, ensure roadmap.md, brief.md, and status.md exist and are current. roadmap.md may link to an upstream roadmap artifact or record a direct human admission source when the user is the roadmap source.
Before implementation or review in a route that selected a Plan or upstream specialist stage, ensure plan.md and the required upstream artifacts exist or are explicitly linked from the item folder.
If the current stage needs an upstream artifact such as research.md, design.md, constraints/*.md, plan.md, or a required review report and that artifact is missing or stale, stop and restore it or route the item back to the correct upstream role.
After every accepted artifact, interruption, or major routing change, update status.md so the next session can resume without relying on chat memory.
Record the durable resume point in status.md: current stage, last accepted artifact, next concrete action, and any open obligations that still block closeout.
On resume after interruption, refresh only lead-owned task-memory state from accepted persisted artifacts. Do not recreate missing specialist artifacts or infer missing facts from session memory; route to $knowledge-archivist or the proper factual role instead.
If task memory is missing or stale, stop and restore it instead of improvising from session memory.
closure.md is mandatory before moving an item to the configured archive location. It holds the final closeout record: outcome, residual risk, and archive location, and MUST carry a Closed: <YYYY-MM-DD> line. It MAY include a ## Retrospective (What went well / What didn't / Lessons — each keep-worthy lesson filed in the lessons registry by id). Proportionality (anti-ceremony): the retrospective is EXPECTED for substantial or troubled items (multi-phase, a regression, a wrong-assumption rework) and OPTIONAL for trivial ones — the close step stays mandatory, the retro within it is proportionate. Residual (honest): governance-enforced only — no hook verifies a troubled close got a retrospective. On archive, invoke the lifecycle owner to move the item, reconcile physical locations, and regenerate work-items/README.md. Physical reconciliation and generated read-model verification are the $knowledge-archivist lane's mechanics contract, owed after every work-item state change; work-items/index.md is compatibility-only. Lead DECIDES the transition and owns closure.md content, applies the mechanics inline for a routine single-item close, and routes multi-item or drifted states to $knowledge-archivist.
In closure.md, reconcile the delivered outcome against the roadmap decision package's target success signals; when no measurement is available, record outcome-unmeasured: <reason>.
Before marking a batch closed, reconcile brief.md, status.md, the latest accepted artifact, required checks, canonical-source updates, and any open obligations. If admitted-scope work remains, keep the item active instead of closing it.
work-items/epics/<slug>.mdstatus: activeEpic:status or state and a value drawn ONLY from {closed, done, complete, completed, archived} so the reused done-predicate matches; do NOT use the bug-registry fixed/resolved words for the done-line.work-items/README.md through the lifecycle owner. work-items/index.md may retain an epic compatibility snapshot but has no ongoing sync requirement. Epic archive moves and physical reconciliation are the $knowledge-archivist hygiene lane; the epic lifecycle RULES are owned by $product-manager and $lead.## Goal is met remains an explicit lead decision.reverted$architect/$lead; $knowledge-archivist does ONLY the non-semantic bookkeeping (writing the stored back-link field, reconciling physical locations, and verifying the generated read-model).proposed decision that the decision scan keeps surfacing — drive it to accepted (after the $architecture-reviewer gate) or dropped (with a one-line reason). Do not let a proposal idle indefinitely; surfacing it is visibility, not closure.work-items/decisions/ holds an entry whose LEADING frontmatter matches BOTH a status: proposed field AND a date: <YYYY-MM-DD> field strictly before today's date, name that entry and either drive it forward (route to $architecture-reviewer for the proposed -> accepted gate, or dropped with a reason) or state why it is still legitimately pending. LEADING frontmatter means the block before the first # heading, recognized in EITHER shape actually present in the registry: the canonical - status: / - date: bullets, OR a legacy top-of-file ----delimited YAML block (--- / status: … / date: … / ---). Never a body line in either shape — including a bullet a YAML-shaped record pushes past its closing --- fence (some push - id: / - context: there, after the first heading); those are body, not frontmatter, and still do not count. This dual-shape read is a deliberate, bounded tolerance for the two shapes actually found on 2026-07-26 (see Shape above), not a loosening to "match status: proposed anywhere in the file" — a body line quoting another record's status still does not register as a verdict. The trigger is proposed AND date < today — a decision filed today never flags (its first-day review window is legitimate); it surfaces only once the calendar day rolls over with no promotion. This is the same date < today predicate a future hook would use; it is enforced as governance the model reads, NOT a hook (a warn-only Stop hook is invisible — only a Stop block reason reaches the model — and a blocking gate on a legitimately-pending next-day proposal is over-aggressive for a rare registry). SCOPE: decisions only; the work-items/lessons/ registry has a different lifecycle (status: open, no proposed/date:) and no analogous stale state, so it is NOT covered.work-items/decisions/. The blocking Stop hook (trigger proposed AND date < today, override [acknowledge-stale-proposed], decisions-only, fail-open + agent_id skip — designed in the Move 5 decision record) is DEFERRED; build it against evidence (an observed stale-proposed instance, or the registry growing past ~5 entries), not its hypothetical. Also DEFERRED: an authoring-time schema gate — nothing today tells an author which frontmatter shape or key set is canonical at record-creation time, so a third shape can still appear unnoticed. The natural owner is scripts/validate-work-item-state.py (the existing work-items schema validator); it was under concurrent edit elsewhere when this residual was written (2026-07-26) and is out of this fix's scope, so the gap is disclosed here rather than patched around with a second, parallel validator — see work-items/bugs/2026-07-26-decision-frontmatter-drift-hides-most-proposed-records-from-the-stale-check.md.work-items/lessons/opendelivereddonestatus.mdclosure.md<sha><token>status.md or closure.md for detail. The board complements work-items/epics/ grouping; index.md, when retained, is only a compatibility snapshot. work-items/ is gitignored local task memory, so neither generated view is a committed change.QA
$qa-engineer, $ui-test-engineer, $external-reviewer as neededIndependent review
$architecture-reviewer, $performance-reviewer, $security-reviewer, $ux-reviewer, $accessibility-reviewer, $external-reviewer as needed$lead runs the publication-safety scan and $knowledge-archivist is the default publication-gate approver; the approver must be a different role than the role that accepted the artifact into the pipeline.$consultantconsultantMode is not disabled.