session-orchestrator 5.0.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/autopilot/SKILL.md +1 -0
- package/.agents/skills/bootstrap/SKILL.md +2 -0
- package/.agents/skills/brainstorm/SKILL.md +3 -0
- package/.agents/skills/close/SKILL.md +17 -0
- package/.agents/skills/debug/SKILL.md +2 -0
- package/.agents/skills/discovery/SKILL.md +2 -1
- package/.agents/skills/dispatcher/SKILL.md +2 -0
- package/.agents/skills/eli5/SKILL.md +2 -0
- package/.agents/skills/eval/SKILL.md +1 -0
- package/.agents/skills/evolve/SKILL.md +2 -1
- package/.agents/skills/go/SKILL.md +18 -0
- package/.agents/skills/grill/SKILL.md +2 -0
- package/.agents/skills/harness-audit/SKILL.md +16 -0
- package/.agents/skills/memory-cleanup/SKILL.md +1 -0
- package/.agents/skills/persona-panel/SKILL.md +1 -0
- package/.agents/skills/plan/SKILL.md +3 -1
- package/.agents/skills/portfolio/SKILL.md +17 -0
- package/.agents/skills/reconcile/SKILL.md +1 -0
- package/.agents/skills/release/SKILL.md +18 -0
- package/.agents/skills/repo-audit/SKILL.md +1 -0
- package/.agents/skills/spinout/SKILL.md +1 -0
- package/.agents/skills/sunset-review/SKILL.md +2 -0
- package/.agents/skills/test/SKILL.md +17 -0
- package/.agents/skills/ux-grill/SKILL.md +2 -0
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +2 -2
- package/.codex-plugin/skills/autopilot/SKILL.md +5 -4
- package/.codex-plugin/skills/bootstrap/SKILL.md +8 -4
- package/.codex-plugin/skills/brainstorm/SKILL.md +11 -4
- package/.codex-plugin/skills/close/SKILL.md +3 -3
- package/.codex-plugin/skills/convergence-monitoring/SKILL.md +2 -0
- package/.codex-plugin/skills/convergence-monitoring/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/debug/SKILL.md +11 -4
- package/.codex-plugin/skills/discovery/SKILL.md +8 -4
- package/.codex-plugin/skills/dispatcher/SKILL.md +4 -4
- package/.codex-plugin/skills/eli5/SKILL.md +9 -4
- package/.codex-plugin/skills/eval/SKILL.md +9 -4
- package/.codex-plugin/skills/evolve/SKILL.md +9 -4
- package/.codex-plugin/skills/go/SKILL.md +3 -3
- package/.codex-plugin/skills/grill/SKILL.md +11 -4
- package/.codex-plugin/skills/harness-audit/SKILL.md +4 -3
- package/.codex-plugin/skills/memory-cleanup/SKILL.md +9 -4
- package/.codex-plugin/skills/npm-publish/SKILL.md +2 -0
- package/.codex-plugin/skills/npm-publish/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/persona-panel/SKILL.md +5 -5
- package/.codex-plugin/skills/plan/SKILL.md +8 -4
- package/.codex-plugin/skills/portfolio/SKILL.md +3 -3
- package/.codex-plugin/skills/reconcile/SKILL.md +9 -4
- package/.codex-plugin/skills/release/SKILL.md +3 -3
- package/.codex-plugin/skills/repo-audit/SKILL.md +6 -4
- package/.codex-plugin/skills/spinout/SKILL.md +4 -4
- package/.codex-plugin/skills/sunset-review/SKILL.md +5 -4
- package/.codex-plugin/skills/test/SKILL.md +3 -3
- package/.codex-plugin/skills/ux-grill/SKILL.md +11 -4
- package/.cursor/commands/autopilot.md +4 -4
- package/.cursor/commands/bootstrap.md +5 -4
- package/.cursor/commands/brainstorm.md +5 -4
- package/.cursor/commands/close.md +4 -3
- package/.cursor/commands/convergence-monitoring.md +13 -0
- package/.cursor/commands/debug.md +4 -4
- package/.cursor/commands/discovery.md +4 -4
- package/.cursor/commands/dispatcher.md +4 -4
- package/.cursor/commands/eli5.md +4 -4
- package/.cursor/commands/eval.md +4 -4
- package/.cursor/commands/evolve.md +4 -4
- package/.cursor/commands/go.md +4 -3
- package/.cursor/commands/grill.md +4 -4
- package/.cursor/commands/harness-audit.md +3 -3
- package/.cursor/commands/memory-cleanup.md +4 -4
- package/.cursor/commands/npm-publish.md +13 -0
- package/.cursor/commands/persona-panel.md +4 -4
- package/.cursor/commands/plan.md +5 -4
- package/.cursor/commands/portfolio.md +3 -3
- package/.cursor/commands/reconcile.md +4 -4
- package/.cursor/commands/release.md +4 -3
- package/.cursor/commands/repo-audit.md +4 -4
- package/.cursor/commands/spinout.md +4 -4
- package/.cursor/commands/sunset-review.md +4 -4
- package/.cursor/commands/test.md +3 -3
- package/.cursor/commands/ux-grill.md +4 -4
- package/.cursor/rules/010-session-workflow.mdc +2 -2
- package/.cursor/skills/bootstrap/SKILL.md +1 -0
- package/.cursor/skills/close/SKILL.md +13 -0
- package/.cursor/skills/debug/SKILL.md +0 -1
- package/.cursor/skills/discovery/SKILL.md +0 -1
- package/.cursor/skills/dispatcher/SKILL.md +0 -1
- package/.cursor/skills/eli5/SKILL.md +0 -1
- package/.cursor/skills/evolve/SKILL.md +0 -1
- package/.cursor/skills/go/SKILL.md +13 -0
- package/.cursor/skills/grill/SKILL.md +0 -1
- package/.cursor/skills/harness-audit/SKILL.md +12 -0
- package/.cursor/skills/portfolio/SKILL.md +12 -0
- package/.cursor/skills/release/SKILL.md +13 -0
- package/.cursor/skills/repo-audit/SKILL.md +0 -1
- package/.cursor/skills/sunset-review/SKILL.md +0 -1
- package/.cursor/skills/test/SKILL.md +12 -0
- package/.cursor/skills/ux-grill/SKILL.md +0 -1
- package/.cursor-plugin/plugin.json +2 -2
- package/.orchestrator/policy/blocked-commands.json +10 -0
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +80 -0
- package/README.md +74 -235
- package/commands/session.md +10 -0
- package/docs/USER-GUIDE.md +24 -0
- package/docs/ci-setup.md +53 -0
- package/docs/codex-setup.md +1 -1
- package/docs/components.md +12 -5
- package/docs/events-schema.md +5 -1
- package/docs/install.md +128 -0
- package/docs/persona-panel.md +1 -1
- package/docs/pi-setup.md +1 -1
- package/docs/rule-authoring.md +83 -14
- package/docs/scope-collision-guard.md +2 -0
- package/docs/session-config-reference.md +6 -4
- package/docs/session-config-template.md +38 -0
- package/docs/telemetry.md +15 -0
- package/hooks/_lib/hook-import-set.json +46 -6
- package/hooks/_lib/subagent-paths.mjs +15 -0
- package/hooks/_lib/vcs-create-matcher.mjs +217 -62
- package/hooks/enforce-scope.mjs +42 -1
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks.json +1 -1
- package/hooks/on-session-end.mjs +14 -2
- package/hooks/on-stop.mjs +43 -1
- package/hooks/post-bash-write-verify.mjs +3 -0
- package/hooks/pre-auq-clarity.mjs +3 -0
- package/hooks/pre-bash-issue-budget.mjs +103 -17
- package/hooks/pre-task-scope-disjoint.mjs +152 -3
- package/hooks/skill-invocation-telemetry.mjs +2 -1
- package/package.json +3 -2
- package/pi/prompts/autopilot.md +3 -3
- package/pi/prompts/bootstrap.md +3 -3
- package/pi/prompts/brainstorm.md +3 -3
- package/pi/prompts/close.md +2 -2
- package/pi/prompts/convergence-monitoring.md +11 -0
- package/pi/prompts/debug.md +3 -3
- package/pi/prompts/discovery.md +3 -3
- package/pi/prompts/dispatcher.md +3 -3
- package/pi/prompts/eli5.md +3 -3
- package/pi/prompts/eval.md +3 -3
- package/pi/prompts/evolve.md +3 -3
- package/pi/prompts/go.md +2 -2
- package/pi/prompts/grill.md +3 -3
- package/pi/prompts/harness-audit.md +2 -3
- package/pi/prompts/memory-cleanup.md +3 -3
- package/pi/prompts/npm-publish.md +11 -0
- package/pi/prompts/persona-panel.md +3 -3
- package/pi/prompts/plan.md +3 -3
- package/pi/prompts/portfolio.md +2 -2
- package/pi/prompts/reconcile.md +3 -3
- package/pi/prompts/release.md +3 -3
- package/pi/prompts/repo-audit.md +3 -4
- package/pi/prompts/session.md +1 -1
- package/pi/prompts/spinout.md +3 -3
- package/pi/prompts/sunset-review.md +3 -3
- package/pi/prompts/templates-ack.md +1 -1
- package/pi/prompts/test.md +3 -3
- package/pi/prompts/ux-grill.md +3 -3
- package/scripts/archive-closed-prds.mjs +2 -2
- package/scripts/auq-audit.mjs +2 -3
- package/scripts/backfill-abandoned-sessions.mjs +57 -3
- package/scripts/backfill-evidence-digest.mjs +2 -1
- package/scripts/backfill-learnings-from-vault.mjs +2 -2
- package/scripts/check-package-manager.mjs +2 -2
- package/scripts/ci/assert-vitest-green.mjs +2 -1
- package/scripts/emit-session.mjs +2 -3
- package/scripts/export-hw-learnings.mjs +2 -1
- package/scripts/express-path.mjs +1 -1
- package/scripts/gc-stale-worktrees.mjs +2 -1
- package/scripts/generate-codex-skills.mjs +48 -4
- package/scripts/generate-cursor-adapter.mjs +173 -9
- package/scripts/generate-hook-import-set.mjs +12 -27
- package/scripts/generate-pi-prompts.mjs +183 -13
- package/scripts/github-protection-audit.mjs +2 -3
- package/scripts/lib/agent-frontmatter.mjs +23 -1
- package/scripts/lib/claude-md-budget-lint.mjs +2 -5
- package/scripts/lib/command-blocker.mjs +209 -9
- package/scripts/lib/config/drift-check.mjs +19 -0
- package/scripts/lib/convergence-monitor.mjs +2 -2
- package/scripts/lib/cursor-hook-bridge.mjs +2 -2
- package/scripts/lib/description-surface.mjs +2 -5
- package/scripts/lib/dispatcher/cli.mjs +2 -1
- package/scripts/lib/ecosystem-wizard.mjs +2 -1
- package/scripts/lib/fetch-baseline.mjs +3 -8
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +2 -1
- package/scripts/lib/gitlab-portfolio/cli.mjs +2 -1
- package/scripts/lib/instruction-budget-guard.mjs +186 -46
- package/scripts/lib/is-main-module.mjs +82 -0
- package/scripts/lib/locks/index.mjs +32 -25
- package/scripts/lib/maintenance-due-banner.mjs +69 -3
- package/scripts/lib/peer-discovery.mjs +2 -5
- package/scripts/lib/playwright-driver/runner.mjs +63 -2
- package/scripts/lib/reconcile/rule-expiry-sweep.mjs +642 -0
- package/scripts/lib/rules-sync.mjs +2 -5
- package/scripts/lib/scope-echo.mjs +392 -7
- package/scripts/lib/session-close-backfill.mjs +58 -6
- package/scripts/lib/state-md.mjs +84 -3
- package/scripts/lib/sunset/walker.mjs +31 -4
- package/scripts/lib/tests-src-ratio.mjs +2 -6
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +2 -1
- package/scripts/lib/user-invocable-skills.mjs +185 -0
- package/scripts/lib/validate/check-banner-parity.mjs +2 -2
- package/scripts/lib/validate/check-cursor-adapter.mjs +2 -2
- package/scripts/lib/validate/check-dead-bridge.mjs +2 -2
- package/scripts/lib/validate/check-doc-cli-commands.mjs +2 -2
- package/scripts/lib/validate/check-entry-guard.mjs +366 -0
- package/scripts/lib/validate/check-guard-requires-parity.mjs +2 -2
- package/scripts/lib/validate/check-hooks-emit-event-guard.mjs +2 -2
- package/scripts/lib/validate/check-learning-provenance.mjs +2 -2
- package/scripts/lib/validate/check-skill-links.mjs +27 -6
- package/scripts/lib/validate/check-skill-script-paths.mjs +2 -2
- package/scripts/lib/validate/check-test-git-config-target.mjs +2 -2
- package/scripts/lib/validate/check-unicode-safety.mjs +2 -2
- package/scripts/lib/validate/check-untracked-test-deps.mjs +2 -2
- package/scripts/lib/validate/check-unwired-features.mjs +266 -11
- package/scripts/lib/validate/check-validator-registration.mjs +2 -2
- package/scripts/lib/validate/check-vcs-repo-flag.mjs +2 -2
- package/scripts/lib/validate-vendored-rules.mjs +35 -9
- package/scripts/lib/wave-transcript-tail.mjs +2 -2
- package/scripts/lock-reaper.mjs +2 -1
- package/scripts/materialize-wave-scope.mjs +87 -4
- package/scripts/migrate-sessions-jsonl.mjs +2 -1
- package/scripts/migrate-vault-paths.mjs +2 -3
- package/scripts/release.mjs +124 -35
- package/scripts/relocate-vault-corpus.mjs +2 -3
- package/scripts/repair-invalid-sessions.mjs +2 -2
- package/scripts/session-shape.mjs +2 -2
- package/scripts/site-numbers.mjs +35 -11
- package/scripts/sweep-expired-rules.mjs +216 -0
- package/scripts/validate-plugin.mjs +9 -0
- package/scripts/vault-consolidate.mjs +2 -2
- package/scripts/vault-mirror.mjs +2 -3
- package/scripts/wave-scope-binding.mjs +2 -3
- package/skills/_shared/bootstrap-gate.md +1 -1
- package/skills/_shared/monitor-patterns.md +1 -1
- package/skills/_shared/research-evidence.md +53 -0
- package/skills/_shared/state-ownership.md +3 -0
- package/skills/autopilot/SKILL.md +58 -4
- package/skills/bootstrap/SKILL.md +51 -1
- package/skills/brainstorm/SKILL.md +16 -0
- package/skills/claude-md-drift-check/checker.mjs +49 -11
- package/{commands/close.md → skills/close/SKILL.md} +9 -3
- package/skills/debug/SKILL.md +10 -0
- package/skills/discovery/SKILL.md +24 -1
- package/skills/discovery/probes-session.md +2 -2
- package/skills/dispatcher/SKILL.md +38 -7
- package/skills/eli5/SKILL.md +11 -0
- package/skills/eval/SKILL.md +14 -0
- package/skills/evolve/SKILL.md +8 -1
- package/skills/evolve/references/evolve-dialectic-mode.md +6 -2
- package/{commands/go.md → skills/go/SKILL.md} +9 -1
- package/skills/grill/SKILL.md +19 -0
- package/{commands/harness-audit.md → skills/harness-audit/SKILL.md} +7 -2
- package/skills/hook-development/SKILL.md +46 -41
- package/skills/memory-cleanup/SKILL.md +7 -0
- package/skills/npm-publish/SKILL.md +1 -1
- package/skills/persona-panel/SKILL.md +56 -1
- package/skills/persona-panel/persona-format.md +1 -1
- package/skills/plan/SKILL.md +28 -1
- package/skills/playwright-driver/SKILL.md +7 -10
- package/{commands/portfolio.md → skills/portfolio/SKILL.md} +8 -2
- package/skills/reconcile/SKILL.md +10 -0
- package/{commands/release.md → skills/release/SKILL.md} +16 -2
- package/skills/repo-audit/SKILL.md +7 -0
- package/skills/session-end/plan-verification.md +2 -2
- package/skills/session-plan/SKILL.md +1 -1
- package/skills/session-start/SKILL.md +5 -4
- package/skills/session-start/phase-8-5-express-path.md +6 -6
- package/skills/session-start/references/phase-1-5-session-continuity.md +1 -1
- package/skills/session-start/references/phase-2-7-portfolio-snapshot.md +1 -1
- package/skills/session-start/references/phase-4-ssot-environment-check.md +4 -3
- package/skills/spinout/SKILL.md +12 -1
- package/skills/sunset-review/SKILL.md +13 -0
- package/{commands/test.md → skills/test/SKILL.md} +10 -4
- package/skills/ux-grill/SKILL.md +19 -1
- package/skills/wave-executor/SKILL.md +7 -4
- package/skills/wave-executor/references/wave-executor-state-init.md +13 -1
- package/skills/wave-executor/references/wave-loop-dispatch.md +3 -1
- package/skills/wave-executor/references/wave-loop-review.md +17 -1
- package/commands/autopilot.md +0 -80
- package/commands/bootstrap.md +0 -56
- package/commands/brainstorm.md +0 -48
- package/commands/debug.md +0 -36
- package/commands/discovery.md +0 -32
- package/commands/dispatcher.md +0 -59
- package/commands/eli5.md +0 -33
- package/commands/eval.md +0 -28
- package/commands/evolve.md +0 -10
- package/commands/grill.md +0 -45
- package/commands/memory-cleanup.md +0 -26
- package/commands/persona-panel.md +0 -121
- package/commands/plan.md +0 -15
- package/commands/reconcile.md +0 -23
- package/commands/repo-audit.md +0 -24
- package/commands/spinout.md +0 -15
- package/commands/sunset-review.md +0 -27
- package/commands/ux-grill.md +0 -51
|
@@ -71,5 +71,5 @@ Proceed to Phase 3 without blocking.
|
|
|
71
71
|
|
|
72
72
|
### Cross-reference
|
|
73
73
|
|
|
74
|
-
See `
|
|
74
|
+
See `skills/portfolio/SKILL.md` for the `/portfolio` command (full write path, `--dry-run`, `--repo` single-repo testing).
|
|
75
75
|
|
|
@@ -71,9 +71,9 @@
|
|
|
71
71
|
|
|
72
72
|
The instruction-budget probe (`scripts/lib/instruction-budget-guard.mjs`, `checkInstructionBudget`) runs in the Phase 4 banner family as `id: 'instruction-budget'` in `scripts/lib/session-start-probes.mjs` `PROBES`. The helper returns `null` (silent no-op) when the always-on directive count is at or under the configured ceiling, or on any read failure. When a non-null result is returned (`{ severity: 'warn', message }`), render `result.message` alongside the other banners. Non-blocking. Cross-reference: "Instruction Budget Audit" (#687; archived in the private Meta-Vault).
|
|
73
73
|
|
|
74
|
-
The maintenance-due probe (`scripts/lib/maintenance-due-banner.mjs`, `checkMaintenanceDue`) runs in the Phase 4 banner family as `id: 'maintenance-due'` in `scripts/lib/session-start-probes.mjs` `PROBES`, called with `{ repoRoot, config }`. This probe REPLACED the former `reconcile-nudge` entry in `scripts/lib/session-start-probes.mjs` (it reuses `computeReconcileNudge` wholesale as one of its
|
|
74
|
+
The maintenance-due probe (`scripts/lib/maintenance-due-banner.mjs`, `checkMaintenanceDue`) runs in the Phase 4 banner family as `id: 'maintenance-due'` in `scripts/lib/session-start-probes.mjs` `PROBES`, called with `{ repoRoot, config }`. This probe REPLACED the former `reconcile-nudge` entry in `scripts/lib/session-start-probes.mjs` (it reuses `computeReconcileNudge` wholesale as one of its seven signals) AND the two retired session-end nudges — Phase 3.6.5 auto-dream and Phase 3.6.7 auto-dialectic — which asked the operator at close for work only a housekeeping session can do. Return contract: `null` (silent no-op) or `{ severity: 'warn', message }`; never throws. `computeMaintenanceDue` exposes the same computation without the banner suppression.
|
|
75
75
|
|
|
76
|
-
The
|
|
76
|
+
The seven signals (`MAINTENANCE_TOTAL_SIGNALS = 7`), each side-effect-free:
|
|
77
77
|
|
|
78
78
|
| id | due when | source |
|
|
79
79
|
|---|---|---|
|
|
@@ -83,12 +83,13 @@
|
|
|
83
83
|
| `dialectic` | `shouldDispatchAutoDialectic().trigger === true` | `scripts/lib/auto-dialectic.mjs` — the side-effect-free decision function; a variant that advanced the last-run stamp would consume the signal it reports (the former recording wrapper was removed in #1288) |
|
|
84
84
|
| `memory-cleanup` | `shouldDispatchAutoDream().trigger === true` | `scripts/lib/auto-dream.mjs` |
|
|
85
85
|
| `pending-sidecar` | an unapplied pending dream/dialectic proposal younger than `SIDECAR_MAX_AGE_DAYS` (14) | `.orchestrator/*-pending*.md` |
|
|
86
|
+
| `generated-rules-expiring` | a machine-generated rule in `.claude/rules/` is already expired or expires within `GENERATED_RULE_EXPIRY_HORIZON_DAYS` (7) days; the population comes from `listMachineGeneratedRules({ repoRoot })` — one definition of "machine-generated", shared with the byte ceiling that judges the same set. The detail names each file and its `expires-at` date (HR-106), soonest first, because those are exactly the files the operator has to open to repair it. An unreadable rules directory goes to `undeterminable`, never to "clean" | `scripts/lib/instruction-budget-guard.mjs` (via #1372) |
|
|
86
87
|
|
|
87
88
|
Introduces NO new Session Config key — every threshold is an existing key or an existing module constant.
|
|
88
89
|
|
|
89
90
|
- **Nothing due and everything readable**: silent (no banner).
|
|
90
91
|
- **A housekeeping session completed within `HOUSEKEEPING_COOLDOWN_DAYS` (7) days**: silent, even when signals are due — the operator already did the thing the banner would ask for. This cooldown is what keeps the instrument rare (HR-101, `.claude/rules/host-resources.md`); the housekeeping session's own record IS the last-maintenance stamp.
|
|
91
|
-
- **Otherwise**: render `result.message`, shaped as `⚠ maintenance due: <N> of
|
|
92
|
+
- **Otherwise**: render `result.message`, shaped as `⚠ maintenance due: <N> of 7 (<id>: <detail> · <id>: <detail>) — run /session housekeeping.` Every due signal carries the number or date that made it due (HR-106) — no aggregate stands alone.
|
|
92
93
|
- **Unreadable inputs** append an ` · undeterminable: <id>, <id>` suffix before the `— run /session housekeeping.` tail. A signal whose inputs cannot be read is three-state: never folded into "clean" (the `never` vs `undeterminable` discipline inherited from `reconcile-nudge-banner.mjs`).
|
|
93
94
|
|
|
94
95
|
Non-blocking. Cross-reference: `scripts/lib/reconcile-nudge-banner.mjs` (`computeReconcileNudge`), `scripts/lib/reconcile/engine.mjs` (`runReconcile`), `skills/reconcile/SKILL.md`, `skills/session-start/SKILL.md` Phase 7 (the housekeeping maintenance loop the banner routes to), and issues #723 / #1200.
|
package/skills/spinout/SKILL.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spinout
|
|
3
3
|
user-invocable: true
|
|
4
|
+
argument-hint: "[--type venture|snapshot] [--dry-run]"
|
|
4
5
|
model: sonnet
|
|
5
6
|
description: >
|
|
6
7
|
Use when extracting a project into its own repo — a venture spinout (e.g. a product leaving its
|
|
@@ -11,6 +12,17 @@ description: >
|
|
|
11
12
|
|
|
12
13
|
# spinout — Guided Project-Extraction Runbook
|
|
13
14
|
|
|
15
|
+
The user wants to extract this project (or a sub-path of it) into a new standalone repo — a venture spinout or a sanitized content-snapshot fork. Arguments: **$ARGUMENTS**
|
|
16
|
+
|
|
17
|
+
## Invocation
|
|
18
|
+
|
|
19
|
+
Parse `$ARGUMENTS` before Phase 0. Two optional flags are recognised; anything else is ignored.
|
|
20
|
+
|
|
21
|
+
| Flag | Behavior |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `--type venture\|snapshot` | Skips the extraction-type question in Phase 1 (`AskUserQuestion`) — still asks for destination path and sphere. |
|
|
24
|
+
| `--dry-run` | Runs all 5 phases as a plan-print (target, sanitize checklist, copy plan, freeze-marker draft, remote plan) with no writes. |
|
|
25
|
+
|
|
14
26
|
## Status: Deliberately Not Scripted
|
|
15
27
|
|
|
16
28
|
This is a 5-phase interactive runbook, not a CLI wrapper. Automate only after 2-3 hand-runs have stabilized the pattern — spinout is a low-frequency, high-stakes operation (new remote, fresh history, a frozen marker left behind in the source repo), and premature scripting bakes wrong defaults (wrong sphere, wrong sanitize scope, wrong remote layout) into something expensive to undo. See #730 / H2.
|
|
@@ -74,7 +86,6 @@ Confirm each write via `AskUserQuestion` before executing:
|
|
|
74
86
|
|
|
75
87
|
## See Also
|
|
76
88
|
|
|
77
|
-
- `commands/spinout.md` — slash-command entry point.
|
|
78
89
|
- `skills/_shared/bootstrap-gate.md` — Phase 0 gate contract.
|
|
79
90
|
- `.claude/rules/ask-via-tool.md` — AUQ-001 (every user decision goes through the tool, not prose).
|
|
80
91
|
- `.claude/rules/parallel-sessions.md` § PSA-003 — destructive-action safeguards apply to any write in Phase 3/4/5.
|
|
@@ -11,6 +11,8 @@ description: >
|
|
|
11
11
|
/ Active. No item is deleted automatically; I'll surface Retire/Demote candidates for your decision."
|
|
12
12
|
<commentary>The user wants a usage-driven prune candidate list; this skill runs the read-only walker,
|
|
13
13
|
presents grouped verdicts, and writes a sidecar — it never deletes.</commentary></example>
|
|
14
|
+
user-invocable: true
|
|
15
|
+
argument-hint: "[--kind skill|agent|command] [--window-days N]"
|
|
14
16
|
model: inherit
|
|
15
17
|
color: amber
|
|
16
18
|
---
|
|
@@ -19,6 +21,17 @@ color: amber
|
|
|
19
21
|
|
|
20
22
|
Identify which skills, agents, and commands in the plugin surface are still earning their keep, and which are candidates to **Demote** (downgrade docs/tier) or **Retire** (remove). The skill is advisory: it produces a ranked candidate list and a sidecar artifact. **It never deletes anything.**
|
|
21
23
|
|
|
24
|
+
## Invocation
|
|
25
|
+
|
|
26
|
+
Parse `$ARGUMENTS` before Phase 1. Two optional flags narrow the scope; anything else is ignored.
|
|
27
|
+
|
|
28
|
+
| Flag | Behavior |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `--kind skill\|agent\|command` | Limits the walk to one surface kind — passed straight through to the walker. |
|
|
31
|
+
| `--window-days N` | Overrides the default 90-day dispatch window resolved in Phase 1. |
|
|
32
|
+
|
|
33
|
+
`/harness-audit` answers a third question — "is session-orchestrator installed correctly?" (plugin health) — and is not this skill.
|
|
34
|
+
|
|
22
35
|
## Why this is a distinct skill (not /repo-audit)
|
|
23
36
|
|
|
24
37
|
`/repo-audit` answers "does this repo match the ecosystem baseline?" — a pass/fail compliance check. `/sunset-review` answers a different question — "which parts of OUR surface are unused?" — with different inputs (dispatch telemetry + static ref scanning), a different cadence (quarterly, not per-session), and a different output (prune candidates, not compliance status). Folding it into repo-audit would muddy both.
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: test
|
|
2
3
|
description: Agentic end-to-end test orchestrator — drive web/macOS flows, evaluate UX rubric, reconcile issues
|
|
4
|
+
user-invocable: true
|
|
3
5
|
argument-hint: "[scope|profile-name] [--since <git-ref>] [--full]"
|
|
6
|
+
model: inherit
|
|
4
7
|
---
|
|
5
|
-
|
|
6
8
|
# Test
|
|
7
9
|
|
|
8
10
|
Run agentic end-to-end tests against the current project or a named target. The user invoked `/test` with arguments: **$ARGUMENTS**
|
|
9
11
|
|
|
10
|
-
This
|
|
12
|
+
This skill resolves a test target and profile, dispatches the appropriate driver (Playwright for web, Peekaboo for macOS), invokes the `ux-evaluator` agent against the captured artifacts, and reconciles findings with the open issue tracker. All logic lives in `skills/test-runner/SKILL.md` — this file is the user-facing entry point only.
|
|
13
|
+
|
|
14
|
+
## Invocation
|
|
15
|
+
|
|
16
|
+
`$ARGUMENTS` carries the recognised flags (`--target`, `--profile`, `--dry-run`, `--since`, `--full`) and an optional bare scope token. Parse it per § Argument Validation, resolve per § Argument Precedence Resolution, and only then hand the six-argument § Handoff Contract to `skills/test-runner/SKILL.md`, which owns all further resolution, driver dispatch, evaluation, and issue reconciliation.
|
|
11
17
|
|
|
12
18
|
## Argument Validation
|
|
13
19
|
|
|
@@ -83,7 +89,7 @@ Pass the following handoff contract to the skill entry point.
|
|
|
83
89
|
|
|
84
90
|
## Handoff Contract
|
|
85
91
|
|
|
86
|
-
The
|
|
92
|
+
The six named arguments below are the canonical contract between this skill and `skills/test-runner/SKILL.md`. The skill reads them from context; do NOT reconstruct them inside the skill.
|
|
87
93
|
|
|
88
94
|
| Argument | Type | Value |
|
|
89
95
|
|---|---|---|
|
|
@@ -94,4 +100,4 @@ The five named arguments below are the canonical contract between this command a
|
|
|
94
100
|
| `explicit_profile` | `boolean` | `true` if `--profile` was present in `$ARGUMENTS`; `false` otherwise |
|
|
95
101
|
| `since_ref` | `string \| undefined` | Git ref from `--since <git-ref>`, or `undefined` if not provided |
|
|
96
102
|
|
|
97
|
-
The skill is the single source of truth for all further resolution, driver dispatch, evaluation, and issue reconciliation. Do NOT re-implement profile logic, driver selection, or issue triage
|
|
103
|
+
The skill is the single source of truth for all further resolution, driver dispatch, evaluation, and issue reconciliation. Do NOT re-implement profile logic, driver selection, or issue triage here.
|
package/skills/ux-grill/SKILL.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ux-grill
|
|
3
|
+
user-invocable: true
|
|
4
|
+
argument-hint: "[url | manifest-path]"
|
|
3
5
|
description: Use when a running web app's UX has to be audited reproducibly rather than by feel — a deterministic mechanical pass over routes and viewports (axe, target size, horizontal overflow, page title, scripted journeys) followed by a screenshot-grounded interrogation of the operator, journey by journey, with two persona lenses from the target repo's manifest. Triggered by "grill the UX", "roast the dashboard", "UX-Audit", "/ux-grill". Bootstraps its own manifest from a loopback URL on the first run, so it never requires a hand-written file to start.
|
|
4
6
|
model: inherit
|
|
5
7
|
color: magenta
|
|
@@ -10,6 +12,22 @@ tools: Read, Grep, Glob, Bash, Write
|
|
|
10
12
|
|
|
11
13
|
> Two stages, hard boundary. **Stufe 1** measures — a Node pass over routes × viewports that calls `agent-browser` and writes JSON, with no model in the loop. **Stufe 2** grills — the `/grill` loop applied to journeys, where every claim carries a screenshot path. Severity is never a judgment here; it comes out of `schema.mjs`.
|
|
12
14
|
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
The user invoked `/ux-grill` with arguments: **$ARGUMENTS**. Parse them before anything else — exactly one positional argument is recognised:
|
|
18
|
+
|
|
19
|
+
- **An absolute `http(s)` URL** (e.g. `http://127.0.0.1:3100`) → bootstrap path (§ 0.2). The target repo has no manifest yet; ask for the env names, crawl the navigation and write one. The URL must be loopback — anything else is refused before a browser starts.
|
|
20
|
+
- **A file path** (ends in `.md`, or resolves to an existing file) → treat it as the manifest path, repo-relative to the target repo.
|
|
21
|
+
- **Empty** → the manifest at `DEFAULT_MANIFEST_PATH` (`.orchestrator/ux-manifest.md` <!-- path-check: example -->). If that file does not exist, say so and name the bootstrap form `/ux-grill <url>` — do not invent a manifest from nothing.
|
|
22
|
+
- **Anything else** → stop with: `ux-grill: argument must be a loopback URL or a manifest path (default .orchestrator/ux-manifest.md)`.
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
- `/ux-grill` — runs against the target repo's existing manifest
|
|
26
|
+
- `/ux-grill http://127.0.0.1:3100` — first run: AUQ for env names, crawl, write the manifest, stop with a fill-in hint
|
|
27
|
+
- `/ux-grill .orchestrator/ux-manifest.md` — explicit manifest path
|
|
28
|
+
|
|
29
|
+
**No CI, no HARD-GATE.** Stufe 1 is built CI-shaped (deterministic, exit-coded, LLM-free) but is deliberately not wired into any pipeline — the PRD's dose argument. `/ux-grill` gates nothing: it writes measurement artefacts, an optional dossier and — only through `reconcile.mjs` <!-- path-check: planned #1327 --> — issues. It never commits, never pushes, never edits product code.
|
|
30
|
+
|
|
13
31
|
## Soul Reference
|
|
14
32
|
|
|
15
33
|
Read `soul.md` in this skill directory before anything else. It defines WHO you are — the UX Interrogator — the persona-lens discipline, and the six tactics in their UX form. The rubric you measure against is `rubric-v2.md`; read it before Phase 1 so you can read `findings.jsonl` without guessing what a `checkId` means.
|
|
@@ -33,7 +51,7 @@ Read `soul.md` in this skill directory before anything else. It defines WHO you
|
|
|
33
51
|
|
|
34
52
|
### 0.1 Resolve the argument
|
|
35
53
|
|
|
36
|
-
Per
|
|
54
|
+
Per § Invocation above: a loopback URL selects the bootstrap path, a file path or empty selects `DEFAULT_MANIFEST_PATH` from `scripts/lib/ux-grill/manifest.mjs`.
|
|
37
55
|
|
|
38
56
|
### 0.2 Bootstrap (URL, no manifest yet)
|
|
39
57
|
|
|
@@ -253,10 +253,13 @@ A housekeeping session is **ONE coordinator-direct wave**, not a shrunken multi-
|
|
|
253
253
|
|---|---|---|---|
|
|
254
254
|
| 1 | `claude-md-drift-check` | unconditional | checker JSON (`errors`/`warnings` counts) |
|
|
255
255
|
| 2 | expired-learnings sweep | unconditional | `orchestrator.learnings.sweep_applied` |
|
|
256
|
-
| 3 |
|
|
257
|
-
| 4 | `/
|
|
258
|
-
| 5 | `/
|
|
259
|
-
| 6 | `/
|
|
256
|
+
| 3 | expired-generated-**rules** sweep — `node scripts/sweep-expired-rules.mjs` (`--dry-run` first, then `--apply`) | AUQ-gated (it rewrites and can DELETE tracked `.claude/rules/*.md` files) | `orchestrator.rules.expiry_sweep_applied` |
|
|
257
|
+
| 4 | `/evolve analyze` | AUQ-gated (the operator approves the proposed learnings) | `orchestrator.evolve.completed` |
|
|
258
|
+
| 5 | `/reconcile` | AUQ-gated (rule proposals are never applied unasked) | `orchestrator.reconcile.completed` with `dry_run: false` |
|
|
259
|
+
| 6 | `/evolve dialectic` | AUQ-gated (the derived thesis is presented, not committed) | `orchestrator.dialectic.completed` |
|
|
260
|
+
| 7 | `/memory-cleanup` | AUQ-gated (deletions are operator-approved) | `orchestrator.memory.cleanup_completed` |
|
|
261
|
+
|
|
262
|
+
Row 3 runs directly after row 2 because its evidence comes from row 2's corpus: an entry's date is recoverable only via its `learning-id` → `learnings.jsonl` `expires_at`, so the rule sweep must see the store the learnings sweep left behind. Show the operator the dry-run plan — it names every rewrite, every delete, every `no-1to1-mapping` skip and every unresolvable pair — before asking. Contract: `docs/rule-authoring.md` § Consolidated rules → "The expiry sweep".
|
|
260
263
|
|
|
261
264
|
The session-start probe `maintenance-due` (`scripts/lib/maintenance-due-banner.mjs`) says which of these are DUE for this repo; a run that is not due may be skipped, and the skip is reported. An AUQ-gated run the operator declines is reported as declined — never as done. **Absence of the artefact event is the only evidence that counts**: a run claimed in prose without its event is not a run (`.claude/rules/verification-before-completion.md`).
|
|
262
265
|
|
|
@@ -16,7 +16,9 @@ schema-version: 1
|
|
|
16
16
|
session-type: feature|deep|housekeeping
|
|
17
17
|
branch: <current branch>
|
|
18
18
|
issues: [<issue numbers from plan>]
|
|
19
|
-
|
|
19
|
+
session: <semantic session label, e.g. main-2026-01-01-deep-1>
|
|
20
|
+
session-id: <raw session_id from .orchestrator/session.lock — OMIT the key when no lock exists>
|
|
21
|
+
started_at: <resolveSessionStartedAt({ repoRoot }) — the lock's own started_at, NEVER new Date() at write time (#1368)>
|
|
20
22
|
status: active
|
|
21
23
|
current-wave: 0
|
|
22
24
|
total-waves: <from session plan>
|
|
@@ -37,6 +39,16 @@ Wave 0 — Initializing
|
|
|
37
39
|
(none yet)
|
|
38
40
|
```
|
|
39
41
|
|
|
42
|
+
**`started_at` and `session-id` are SOURCED, not typed (#1368).** Read both from the live session-lock before writing — never from the clock, and never from memory:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
node -e "import('./scripts/lib/state-md.mjs').then(m => console.log(JSON.stringify({ started_at: m.resolveSessionStartedAt({ repoRoot: process.cwd() }), ...m.resolveSessionIds({ repoRoot: process.cwd() }) })))"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`resolveSessionStartedAt()` returns `.orchestrator/session.lock`'s own `started_at`, which the `orchestrator.session.lock.acquired` and `orchestrator.session.started` events agree with to the millisecond; it falls back to the current time only when no lock exists (`persistence: false`, or the acquire failed). Writing `new Date()` here instead put STATE.md 48 minutes ahead of the lock (measured 2026-09-13) and made `/close`'s #429 pre-check unable to join STATE.md to its own ledger record.
|
|
49
|
+
|
|
50
|
+
`session-id` is the raw/native harness id (`resolveSessionIds().session_id`), `session` the semantic label (`.semantic_session_id`). Both are OPTIONAL (`schema-version` stays `1`): when the lock yields `null`, OMIT the key entirely — never write a placeholder. Neither field grants lock or registry ownership; see `skills/_shared/state-ownership.md`.
|
|
51
|
+
|
|
40
52
|
Create the `<state-dir>` directory if needed (`mkdir -p <state-dir>`) before writing. This file is the persistent state record — other skills and resumed sessions read it.
|
|
41
53
|
|
|
42
54
|
**Then VALIDATE `total-waves` against the resolved shape — do not skip this.** A plan whose wave count the shape does not produce must never be dispatched silently:
|
|
@@ -559,7 +559,9 @@ Marker line plus fenced block, in that order: `hooks/pre-task-scope-disjoint.mjs
|
|
|
559
559
|
node scripts/lib/scope-echo.mjs --scope-file "$AGENT_FILESCOPE_JSON" --instruction
|
|
560
560
|
```
|
|
561
561
|
|
|
562
|
-
It prints exactly one line (`renderScopeEchoInstruction` in `scripts/lib/scope-echo.mjs`), naming the `scopeDigest` of that agent's own scope file: `End your final report with the line: SCOPE-DIGEST: <8-hex>`. Append it verbatim.
|
|
562
|
+
It prints exactly one line (`renderScopeEchoInstruction` in `scripts/lib/scope-echo.mjs`), naming the `scopeDigest` of that agent's own scope file: `End your final report with the line: SCOPE-DIGEST: <8-hex>`. Append it verbatim.
|
|
563
|
+
|
|
564
|
+
**The echo line and the fenced block MUST come from the SAME `$AGENT_FILESCOPE_JSON`.** Since #1092 the dispatch hook digests the paths it extracted from the prompt and compares them against the digest that line names, recording `digest_consistent: false` when they disagree — so pasting agent A's block beside agent B's echo line is now caught at dispatch time, in the ledger, with no filesystem read. Nothing blocks on it (the hook stays ALLOW), but it is a wave deviation, and it is exactly the collapse the box at the top of this section warns about: one agent's block reused for the batch. It prints NOTHING when the scope file is empty, missing or unreadable — Discovery waves therefore inject nothing here, exactly as they inject no `FILE-SCOPE` block. The post-wave comparison is `wave-loop-review.md` step 3d-bis; what the echo does and does not prove is stated there.
|
|
563
565
|
|
|
564
566
|
#### Structured Reasoning (STATE:/PLAN:) — opt-in via `reasoning-output: true` (#79)
|
|
565
567
|
|
|
@@ -130,6 +130,22 @@ Log every non-`pass` result as an event to `.orchestrator/metrics/events.jsonl`
|
|
|
130
130
|
|
|
131
131
|
`checkScopeEcho` prints the verdict as JSON and `--emit` appends one `orchestrator.wave_dispatch.scope_echo_checked` record (payload: `docs/events-schema.md`; counts, digests and closed enums only — no path, no prompt text). `match: false` or `echoed: false` is logged in the wave progress update as `scope-echo: <agent> missing|mismatch` and changes NOTHING else — no re-dispatch, no deviation write, no gate.
|
|
132
132
|
|
|
133
|
+
Then, ONCE for the wave — not once per agent — join the two halves:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
node scripts/lib/scope-echo.mjs --verify --wave <N> --state-dir "<state-dir>" --json --emit
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
It joins the send-side `scope_checked` records, the `<state-dir>/filescopes/wave-<N>/*.json` artefacts and the echoes **on the digest** — never on `agent_id`, because the two halves spell the same agent differently (measured 2026-09-16: 609 send-side vs 51 receive-side records, agent-id overlap ZERO; one session had 23 echoes against 18 injections and nothing could be paired). Log one line in the wave progress update:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
scope-injection: <injected>/<dispatches> injected, <echoed> echoed
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Two verdicts are a **STATE.md deviation write** (`### Deviations`), never a block and never a re-dispatch: `injection-missing` — a scope file materialized for this wave that NO dispatch claimed, i.e. the #1020 failure where the coordinator dispatched without injecting — and `duplicate-claim` — one digest claimed by two distinct agent ids, i.e. agent A's scope reported for agent B. `injected-not-echoed` is the normal state for any agent whose report has not landed yet and is logged, not written.
|
|
146
|
+
|
|
147
|
+
**On `transport: unobservable`** (the report's own field, from the wave's `scope_materialized` record — Codex, Cursor and Pi have no `PreToolUse` `Agent` matcher, so the send-side record cannot exist at all) every verdict degrades to `echo-only`, and a MISSING send-side record is **not** evidence of a missing injection. Do not write a deviation from an absence on those platforms.
|
|
148
|
+
|
|
133
149
|
**What it proves:** the agent's final report carried the digest the coordinator handed it, i.e. the injected line survived the round trip into the agent's context and back. **What it does not prove:** that the model read the `FILE-SCOPE` block, understood it, or obeyed it — the digest is in the prompt, so it can be copied without ever looking at the paths (BV-004 ceiling, `docs/scope-collision-guard.md` § 4.2). Obedience is still measured at write time (`enforce-scope.mjs`) and by the W5 verification pass.
|
|
134
150
|
|
|
135
151
|
3e. **Collect Open Questions** (Close Handover-Alignment-Gate, PRD 2026-07-07): scan every completed agent's report from this wave for an optional `OPEN-QUESTIONS:` line (see the report-line convention in `wave-loop-dispatch.md` `#### Agent-Type Resolution` — an agent MAY emit `OPEN-QUESTIONS: <question> | context: <...> | candidates: <opt A / opt B>`; most agents emit none). For each such line found:
|
|
@@ -580,4 +596,4 @@ On a clean `PROCEED` no deviation is written — the sidecar alone is sufficient
|
|
|
580
596
|
|
|
581
597
|
When the hook is skipped (gate condition false), omit the `persona_gate` field entirely — never write `triggered: false` for skipped runs, so a downstream consumer can distinguish "hook did not fire" from "hook fired but found no dissent".
|
|
582
598
|
|
|
583
|
-
**Motivating example:** a flagship product's W5 Buyer-Panel pattern (six buyer personas at `hard-gate-threshold` `6-of-6`, `mode: 'strict'`, `after: 'quality'`) — UI work is gate-checked against every persona before commit, abort on any dissent. See `docs/session-config-reference.md § Persona-Gate Wave (#458)` and `
|
|
599
|
+
**Motivating example:** a flagship product's W5 Buyer-Panel pattern (six buyer personas at `hard-gate-threshold` `6-of-6`, `mode: 'strict'`, `after: 'quality'`) — UI work is gate-checked against every persona before commit, abort on any dissent. See `docs/session-config-reference.md § Persona-Gate Wave (#458)` and `skills/persona-panel/SKILL.md` for the standalone CLI equivalent.
|
package/commands/autopilot.md
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Autonomous session-orchestration loop with kill-switches (Phase C-1.b — all 10 kill-switches shipped)
|
|
3
|
-
argument-hint: "[--headless] [--verbose] [--max-sessions=N] [--max-hours=H] [--confidence-threshold=0.X] [--dry-run]"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Autopilot
|
|
7
|
-
|
|
8
|
-
You are entering autonomous session-orchestration mode. The user has invoked `/autopilot` with arguments: **$ARGUMENTS**
|
|
9
|
-
|
|
10
|
-
## Status
|
|
11
|
-
|
|
12
|
-
**Phase C-1.b complete (issues #295 + #300). Runtime at `scripts/lib/autopilot/kill-switches.mjs:18-32` (the frozen `KILL_SWITCHES` enum is SSOT).** All 10 kill-switches enforced — pre-iteration (6): `max-sessions-reached`, `max-hours-exceeded`, `resource-overload`, `low-confidence-fallback`, `user-abort`, `token-budget-exceeded`; post-iteration (1): `stall-timeout` (ADR-364 §3, default 600s); post-session (3): `spiral`, `failed-wave`, `carryover-too-high`. Post-session gates read schema-canonical fields off the `sessionRunner` return shape (`agent_summary.{spiral, failed}` numeric counts, `effectiveness.{carryover, planned_issues}`); absent fields are forward-compatible (no kill).
|
|
13
|
-
|
|
14
|
-
Production `sessionRunner` callers MUST persist `args.autopilotRunId` into the per-iteration `sessions.jsonl` record (additive optional field, schema_version 1 compatible). Manual sessions write `null` or omit the field — readers treat both identically.
|
|
15
|
-
|
|
16
|
-
## Verdict-Gated Launch (dispatcher handoff — #682)
|
|
17
|
-
|
|
18
|
-
When the cross-repo dispatcher (`/dispatcher`) routes into an autopilot launch, a
|
|
19
|
-
**pre-loop suitability verdict** decides whether the launch proceeds WITHOUT per-selection
|
|
20
|
-
confirmation. The dispatcher launches autonomously ONLY when the effective dispatcher
|
|
21
|
-
autonomy is `autonomous-gated` AND the verdict is green (`suitable === true`); in EVERY
|
|
22
|
-
other case it informs the operator (rationale + warnings) and asks before launch
|
|
23
|
-
(fail-closed — see `skills/dispatcher/SKILL.md § Phase 1.5`). This is **opt-in by design**:
|
|
24
|
-
the autonomy dial defaults to `off`, and a direct `/autopilot` invocation is always
|
|
25
|
-
operator-initiated.
|
|
26
|
-
|
|
27
|
-
The verdict gate is a PRE-LAUNCH decision computed once at the handoff via
|
|
28
|
-
`computeSuitabilityVerdict(...)` (`scripts/lib/autonomy/suitability.mjs`) over the effective
|
|
29
|
-
dial from `resolveDispatcherAutonomy(...)` (`scripts/lib/config/dispatcher-autonomy.mjs`).
|
|
30
|
-
It does NOT add or modify any of the 10 per-iteration kill-switches — those are reused
|
|
31
|
-
unchanged once the loop is running. The verdict's kill-switch-rate gate reads this repo's
|
|
32
|
-
recent run history via `readRecentAutopilotRuns(...)`
|
|
33
|
-
(`scripts/lib/autopilot/recent-runs.mjs`).
|
|
34
|
-
|
|
35
|
-
## Argument Parsing
|
|
36
|
-
|
|
37
|
-
Parse `$ARGUMENTS` for these flags. Unrecognized flags are ignored. Out-of-range values silently clamp to bounds.
|
|
38
|
-
|
|
39
|
-
| Flag | Default | Bounds |
|
|
40
|
-
|------|---------|--------|
|
|
41
|
-
| `--headless` | `false` | flag |
|
|
42
|
-
| `--max-sessions=N` | `5` | 1..50 |
|
|
43
|
-
| `--max-hours=H` | `4.0` | 0.5..24.0 |
|
|
44
|
-
| `--confidence-threshold=0.X` | `0.85` | 0.0..1.0 |
|
|
45
|
-
| `--dry-run` | `false` | flag |
|
|
46
|
-
|
|
47
|
-
`--headless`: Run via `scripts/autopilot.mjs` driver — spawns `claude -p` per iteration. Required for unattended walk-away mode. Without this flag, `/autopilot` runs the in-process driver inside the current chat session.
|
|
48
|
-
|
|
49
|
-
Use `parseFlags` from `scripts/lib/autopilot.mjs` for canonical parsing — never re-implement clamping inline.
|
|
50
|
-
|
|
51
|
-
## Headless Mode
|
|
52
|
-
|
|
53
|
-
When invoked with `--headless`, the slash command delegates to the standalone driver `scripts/autopilot.mjs` which spawns `claude -p '/session <mode>'` as a child process per iteration. Use this for true walk-away operation; the in-process default keeps you in the current chat. See `skills/autopilot/SKILL.md § Production Wiring` for the design contract and issue #302 for the implementation rationale.
|
|
54
|
-
|
|
55
|
-
Headless requirements:
|
|
56
|
-
- Anthropic API key configured for `claude -p` (Claude Code CLI auth).
|
|
57
|
-
- `scripts/autopilot.mjs` reads `sessions.jsonl` tail after each child exit to construct the `sessionRunner` return shape — the spawned session must complete cleanly and append its record (session-end Phase 3.7 handles this).
|
|
58
|
-
- `AUTOPILOT_RUN_ID` env var is propagated to the child so session-end stamps it onto the per-iteration `sessions.jsonl` record.
|
|
59
|
-
|
|
60
|
-
## Invocation
|
|
61
|
-
|
|
62
|
-
**Invoke the autopilot skill.** Follow `skills/autopilot/SKILL.md` precisely. Do NOT re-implement loop logic inline — the skill and `scripts/lib/autopilot.mjs` are authoritative.
|
|
63
|
-
|
|
64
|
-
The runtime entrypoint is `runLoop(opts)`. Production callers wire injectable dependencies as follows:
|
|
65
|
-
|
|
66
|
-
- `modeSelector`: invokes `selectMode` from `scripts/lib/mode-selector.mjs` with live signals from session-start Phase 7.5.
|
|
67
|
-
- `sessionRunner`: invokes the standard session-start → session-plan → wave-executor → session-end lifecycle for one iteration; returns `{session_id}` on success.
|
|
68
|
-
- `resourceEvaluator`: calls `evaluate(probe(), thresholds)` from `scripts/lib/resource-probe.mjs`.
|
|
69
|
-
- `peerCounter`: calls `detectPeers({sessionId})` from `scripts/lib/session-registry.mjs` and returns the array length.
|
|
70
|
-
- `abortSignal`: hooked to Ctrl+C / Esc handlers.
|
|
71
|
-
|
|
72
|
-
Loop semantics, kill-switches, resource-adaptive cap logic, and telemetry contract are documented in the skill. The PRD "Autopilot Loop" (#277; archived in the private Meta-Vault) is the underlying design document.
|
|
73
|
-
|
|
74
|
-
## Critical Rules
|
|
75
|
-
|
|
76
|
-
- Never invoke `/autopilot` from inside a running session — top-level command only.
|
|
77
|
-
- Never modify `selectMode` output to force a specific mode — use `/session [mode]` manually for that.
|
|
78
|
-
- Iteration boundaries are atomic; do NOT abort sessions mid-flight.
|
|
79
|
-
- Kill-switches are enforced by `scripts/lib/autopilot.mjs`, not by this command file or by Claude inline.
|
|
80
|
-
- The runtime writes ONE record to `.orchestrator/metrics/autopilot.jsonl` per invocation via atomic tmp+rename. Do not append directly to that file from any other code path.
|
package/commands/bootstrap.md
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Scaffold the minimum repo structure required by session-orchestrator
|
|
3
|
-
disable-model-invocation: true
|
|
4
|
-
argument-hint: "[--upgrade <tier>]"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Bootstrap
|
|
8
|
-
|
|
9
|
-
**TL;DR — for first-time users:** Run `/bootstrap` with no flags. The skill auto-detects the right tier (fast/standard/deep) from your repo, recommends one with a one-line reason, then walks a **fixed questionnaire** — tier/stack (1–2 prompts), owner persona (5), dispatcher autonomy (1); **7–9 prompts** on a first-run full bootstrap. Bestätigen → fertig. Keine weiteren Schritte.
|
|
10
|
-
|
|
11
|
-
The flags below cover special cases (re-adopting an existing repo, upgrading a tier, syncing rules). If you don't recognize the case in the description, you don't need the flag.
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
You are running the bootstrap skill directly. The user has invoked `/bootstrap` with arguments: **$ARGUMENTS**.
|
|
16
|
-
|
|
17
|
-
> **Instruction file alias:** Bootstrap creates and reads `CLAUDE.md` (or `AGENTS.md` on Codex CLI). The two are transparent aliases — pick one, never both. Resolution rule: see `skills/_shared/instruction-file-resolution.md`.
|
|
18
|
-
|
|
19
|
-
## Standard usage (no flags)
|
|
20
|
-
|
|
21
|
-
This is the path 95 % of users want.
|
|
22
|
-
|
|
23
|
-
| Invocation | Behavior |
|
|
24
|
-
|------------|----------|
|
|
25
|
-
| `/bootstrap` | Auto-detect tier (fast / standard / deep) from repo context. Present recommendation via `AskUserQuestion` with options to confirm or override. Tier/stack: 1–2 questions; first-run full bootstrap adds owner interview (5, `owner-interview.mjs`) + dispatcher-autonomy capture (1). Then scaffold files + commit. |
|
|
26
|
-
|
|
27
|
-
What the user sees:
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
Skill: "Repo leer. Empfehle 'standard' weil <reason>. Passt das?"
|
|
31
|
-
User: [Enter on "standard (Empfohlen)"]
|
|
32
|
-
Skill: <writes files, commits, prints summary>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Flag reference (special cases)
|
|
36
|
-
|
|
37
|
-
Only use a flag if you have one of the situations described.
|
|
38
|
-
|
|
39
|
-
| Flag | When to use it |
|
|
40
|
-
|------|----------------|
|
|
41
|
-
| `--upgrade <tier>` | You bootstrapped `fast` earlier and now need `standard` or `deep`. Idempotent — writes only the delta. Refuses downgrade. Valid: `fast → standard`, `fast → deep`, `standard → deep`. |
|
|
42
|
-
| `--retroactive` | The repo already has `CLAUDE.md` (or `AGENTS.md` on Codex CLI) + `## Session Config` but no `bootstrap.lock` (manually bootstrapped before the gate existed). Writes the lock based on file inventory; **makes no scaffolding changes**. Commit: `chore: bootstrap lock (retroactive)`. |
|
|
43
|
-
| `--refresh-lock` | Your `bootstrap.lock` already has valid `version`/`tier` fields but the freshness probe flags it as stale or plugin-version-drifted — `--retroactive` is a no-op here. Acknowledges the current plugin version and resets the freshness clock (`refreshed-at` + `refreshed-plugin-version`) without touching the lock's original bootstrap provenance. No scaffolding, no auto-commit. |
|
|
44
|
-
| `--sync-rules` | Pull canonical rules from the plugin's `rules/` library into `.claude/rules/`. Preserves local rules (files without the plugin source header). Standalone — does not touch `bootstrap.lock`. |
|
|
45
|
-
| `--ecosystem-health` | Run the ecosystem-health wizard: detects CI provider + package manager, prompts for health endpoints, pipelines, and critical issue labels. Writes the config block + `.orchestrator/policy/ecosystem.json`. No scaffolding, no auto-commit. |
|
|
46
|
-
| `--fast` / `--standard` / `--deep` | Skip the tier confirmation question (e.g., for scripted runs). Equivalent to running `/bootstrap` and selecting that option. |
|
|
47
|
-
|
|
48
|
-
All flag-driven flows are idempotent — running twice with no upstream change is a no-op.
|
|
49
|
-
|
|
50
|
-
## Invoke the skill
|
|
51
|
-
|
|
52
|
-
Read `skills/bootstrap/SKILL.md` and follow its instructions with `INVOCATION_MODE = direct`.
|
|
53
|
-
|
|
54
|
-
Pass the parsed flags so the skill can skip the tier confirmation question when `--fast`, `--standard`, or `--deep` is provided. `--retroactive`, `--sync-rules`, and `--ecosystem-health` are standalone short-circuit flows — they run to completion inside SKILL.md without dispatching to a tier template.
|
|
55
|
-
|
|
56
|
-
After bootstrap completes, report the files created and the git commit hash. Do NOT automatically continue to any other skill — this is a standalone invocation.
|
package/commands/brainstorm.md
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run a lightweight Socratic design dialogue (3-5 AUQ rounds) and write a spec markdown file before any implementation work. Use BEFORE /plan feature when scope/UX is ambiguous.
|
|
3
|
-
disable-model-invocation: true
|
|
4
|
-
argument-hint: "[topic-or-feature-slug]"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Brainstorm
|
|
8
|
-
|
|
9
|
-
Invokes the `brainstorm` skill. Produces `docs/specs/YYYY-MM-DD-<slug>-design.md` after the user approves a design approach. HARD-GATE prevents any code or implementation work until the design is user-approved.
|
|
10
|
-
|
|
11
|
-
## Argument Validation
|
|
12
|
-
|
|
13
|
-
The optional argument is a topic or feature slug used in the spec filename (lowercase, hyphens, no special characters). If absent, the skill derives a slug from the user's Phase 1 answer.
|
|
14
|
-
|
|
15
|
-
Examples:
|
|
16
|
-
- `/brainstorm` — no slug; skill prompts for the problem in Phase 1
|
|
17
|
-
- `/brainstorm export-to-csv` — slug pre-set to `export-to-csv`
|
|
18
|
-
- `/brainstorm "user notification system"` — skill normalizes to `user-notification-system`
|
|
19
|
-
|
|
20
|
-
## Behavior
|
|
21
|
-
|
|
22
|
-
1. **Bootstrap gate** — reads `skills/_shared/bootstrap-gate.md`; halts if GATE_CLOSED until bootstrap completes.
|
|
23
|
-
2. **Phase 1** — single AUQ to characterize the problem and capture the source of ambiguity.
|
|
24
|
-
3. **Phase 2** — 3-5 Socratic AUQ rounds (user surface, data shape, integration points, risk, success criteria).
|
|
25
|
-
4. **Phase 3** — synthesize 2-3 approaches via AUQ with explicit trade-offs; user selects one.
|
|
26
|
-
5. **Phase 4** — write spec to `docs/specs/YYYY-MM-DD-<slug>-design.md`.
|
|
27
|
-
6. **Phase 5** — self-review pass (no placeholders, consistent with answers, explicit out-of-scope).
|
|
28
|
-
7. **Phase 6** — hand-off AUQ: proceed to `/plan feature`, `/write-executable-plan`, revise, or done.
|
|
29
|
-
|
|
30
|
-
## HARD-GATE
|
|
31
|
-
|
|
32
|
-
The skill enforces a HARD-GATE in Phase 0 that prevents any Edit, Write (code), or Bash (implementation) tool calls until the user approves the design via AskUserQuestion in Phase 6. The only Write call permitted before approval is writing the spec file itself in Phase 4. See `skills/brainstorm/SKILL.md` Phase 0 for the verbatim gate text.
|
|
33
|
-
|
|
34
|
-
## When to use vs. /plan feature
|
|
35
|
-
|
|
36
|
-
| Situation | Use |
|
|
37
|
-
|-----------|-----|
|
|
38
|
-
| Scope or UX is ambiguous | `/brainstorm` |
|
|
39
|
-
| Scope is clear, need a formal PRD | `/plan feature` |
|
|
40
|
-
| Full project kickoff | `/plan new` |
|
|
41
|
-
| Spec already written, ready to formalize | `/plan feature` |
|
|
42
|
-
|
|
43
|
-
## Related
|
|
44
|
-
|
|
45
|
-
- `skills/brainstorm/SKILL.md` — full skill specification (GH #36, umbrella #35)
|
|
46
|
-
- `skills/plan/SKILL.md` — primary hand-off target after design approval
|
|
47
|
-
- `skills/write-executable-plan/SKILL.md` — alternative hand-off for direct execution (issue #39)
|
|
48
|
-
- `.claude/rules/ask-via-tool.md` — AUQ tool usage convention (AUQ-001..005)
|
package/commands/debug.md
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run a 4-phase systematic debugging investigation before proposing any fix. Iron Law — NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST. Produces a `.orchestrator/debug/` artifact the fixer agent must reference.
|
|
3
|
-
argument-hint: "[bug-description-or-issue-ref]"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Debug
|
|
7
|
-
|
|
8
|
-
Invokes the `debug` skill. Runs 4 phases (Root Cause → Pattern → Impact → Solution) and writes an artifact to `.orchestrator/debug/<session>-<n>.md` before any fix code is written.
|
|
9
|
-
|
|
10
|
-
## Argument Validation
|
|
11
|
-
|
|
12
|
-
The optional argument is a short bug description or issue reference (e.g. `"test timeout in CI"` or `#408`). If absent, the skill will inspect recent errors and git log to surface the most likely candidate, then confirm with the user.
|
|
13
|
-
|
|
14
|
-
## Behavior
|
|
15
|
-
|
|
16
|
-
1. **Bootstrap gate** — reads `skills/_shared/bootstrap-gate.md`. Gate CLOSED blocks all further steps.
|
|
17
|
-
2. **Phase 1: Root Cause Investigation** — quotes error verbatim, reproduces, checks recent commits via `git log --oneline -20`, instruments component boundaries, traces data flow backward. Writes artifact to `.orchestrator/debug/<session-id>-<n>.md`.
|
|
18
|
-
3. **Phase 2: Pattern Identification** — recurrence? class of bug? missing test? similar code paths in the codebase?
|
|
19
|
-
4. **Phase 3: Impact Analysis** — what else does the root-caused code touch? callers, dependents, transitive effects.
|
|
20
|
-
5. **Phase 4: Solution** — proposes minimal fix + identifies test cases. Records resolution in the artifact.
|
|
21
|
-
|
|
22
|
-
## Iron Law
|
|
23
|
-
|
|
24
|
-
The skill enforces: **NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST.** Skipping Phase 1 is forbidden regardless of how obvious the fix appears. The artifact from Phase 1 is a prerequisite for Phase 4, not optional documentation.
|
|
25
|
-
|
|
26
|
-
## Artifact location
|
|
27
|
-
|
|
28
|
-
`.orchestrator/debug/<session-id>-<sequence>.md`
|
|
29
|
-
|
|
30
|
-
Sequence resets per session (1, 2, 3, …). The artifact records: exact error, reproduction command, suspect commits, instrumentation data, hypothesized root cause (ONE sentence + confidence level), and eventually the resolution.
|
|
31
|
-
|
|
32
|
-
## Related
|
|
33
|
-
|
|
34
|
-
- `skills/debug/SKILL.md` — full skill spec (GH #37, umbrella #35)
|
|
35
|
-
- `.claude/rules/verification-before-completion.md` — verify the fix passes fresh (#38)
|
|
36
|
-
- `agents/code-implementer.md` — bugfix-classified tasks reference this skill
|
package/commands/discovery.md
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Systematic quality discovery and issue detection
|
|
3
|
-
argument-hint: "[all|code|infra|ui|arch|session|audit|vault|feature] [--since <git-ref>] [--full]"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Quality Discovery
|
|
7
|
-
|
|
8
|
-
The user wants to run systematic quality discovery. Invoke the discovery skill with scope: **$ARGUMENTS** (if empty, default to `all`).
|
|
9
|
-
|
|
10
|
-
## Argument Parsing
|
|
11
|
-
|
|
12
|
-
Parse `$ARGUMENTS` before doing anything else. Extract the following flags and tokens in any order:
|
|
13
|
-
|
|
14
|
-
- `--since <git-ref>` — restrict discovery to files changed since the given git ref (e.g. `HEAD~5`, `main`, a commit hash). Sets `since_ref = <git-ref>`.
|
|
15
|
-
- `--full` — explicit full-repo scan. Sets `full_scan = true`.
|
|
16
|
-
- Any remaining tokens are treated as scope specifiers (see below).
|
|
17
|
-
|
|
18
|
-
**Conflict check:** If BOTH `--since` and `--full` are present, stop immediately and report:
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
Error: Cannot use --since with --full. Provide one, not both.
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Do NOT proceed with discovery when this conflict is present.
|
|
25
|
-
|
|
26
|
-
**Argument validation:** Valid scopes: `all`, `code`, `infra`, `ui`, `arch`, `session`, `audit`, `vault`, `feature` (comma-separated for multiple). If any scope is invalid, inform the user: "Invalid scope '[token]'. Valid scopes: all, code, infra, ui, arch, session, audit, vault, feature." and default that token to `all`.
|
|
27
|
-
|
|
28
|
-
When `--since <git-ref>` is provided, pass `since_ref` to the discovery skill (Phase 3 plumbing — see `skills/discovery/SKILL.md`).
|
|
29
|
-
|
|
30
|
-
Scan the codebase for quality issues, technical debt, and improvement opportunities within the requested scope.
|
|
31
|
-
|
|
32
|
-
Do NOT skip the interactive triage phase. Every finding must be confirmed by the user before issue creation. Evidence before assertions.
|
package/commands/dispatcher.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Pick the next-best repo to work on across the portfolio — rank free repos, recommend one, claim its lease atomically, and route to the entry command
|
|
3
|
-
argument-hint: "[--dry-run] [--repo <name>]"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Dispatcher
|
|
7
|
-
|
|
8
|
-
Enumerates candidate repos below the confinement root, resolves free/busy from each repo's `session.lock` lease, ranks the FREE ones by backlog priority × staleness × readiness, recommends the single most worthwhile one, claims its lease atomically, and routes you to the chosen entry command. Invoked with arguments: **$ARGUMENTS**
|
|
9
|
-
|
|
10
|
-
## Argument Parsing
|
|
11
|
-
|
|
12
|
-
Parse `$ARGUMENTS` before doing anything else.
|
|
13
|
-
|
|
14
|
-
Recognized flags:
|
|
15
|
-
|
|
16
|
-
- `--dry-run` — run the non-mutating rank only; print the recommendation and the free-candidate table; do NOT claim any lease.
|
|
17
|
-
- `--repo <name>` — limit the human-readable output to a single `repoName` (informational; does not change ranking). Useful for previewing where one repo lands.
|
|
18
|
-
- `--start-dir <path>` — override the scan root (defaults to the confinement root).
|
|
19
|
-
- `--json` — emit the full `{ candidates, free, ranked, warnings, recommended }` object to stdout.
|
|
20
|
-
|
|
21
|
-
If `$ARGUMENTS` contains an unrecognized flag (starts with `--` but is not one of the above), inform the user:
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
Unknown flag '<flag>'. Recognized flags: --dry-run, --repo <name>, --start-dir <path>, --json.
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Then continue with the remaining valid arguments.
|
|
28
|
-
|
|
29
|
-
## Handoff
|
|
30
|
-
|
|
31
|
-
**Invoke the `dispatcher` skill via the `Skill` tool.** Follow `skills/dispatcher/SKILL.md` precisely:
|
|
32
|
-
|
|
33
|
-
1. **Enumerate + Rank** — run `node scripts/lib/dispatcher/cli.mjs --json` and surface every warning.
|
|
34
|
-
2. **Verdict gate (#682)** — for the recommended repo, compute `computeSuitabilityVerdict(...)` (four-gate engine). Wire the live signals through honestly: CI as `{ status: ciStatus }` (or `null` on fetch-failure — never a bare string or synthesized-absent object), the real resource verdict string (or `null` on probe-failure — never a fabricated `'green'`), and the TRUE `readRecentAutopilotRuns(...)` count (never `limit < 5`). **Verdict-gated launch:** when the effective dispatcher autonomy is `autonomous-gated` AND the verdict is green (`suitable === true`), the dispatcher MAY launch WITHOUT per-selection confirmation (skip step 3 AUQ → straight to claim). In EVERY other case (any non-`autonomous-gated` dial OR a non-suitable verdict — incl. the `FORCED: CI red` / `FORCED: resource critical` branch, which fails regardless of confidence) it INFORMS the operator of the verdict rationale + warnings, then asks before launch. **Fail-closed: never auto-launch outside the green-verdict autonomous-gated branch.**
|
|
35
|
-
3. **Owner-AUQ** — present the top-ranked free repo as option 1 `(Recommended)` via `AskUserQuestion` (coordinator-only). Skipped only when step 2 green-lit an autonomous launch.
|
|
36
|
-
4. **Atomic claim** — `acquire(...)` BEFORE launching (in BOTH branches); on `ok:false`, exclude the repo and re-rank.
|
|
37
|
-
5. **Route** — invoke the chosen entry command (`/session`, `/plan`, `/discovery`) for the claimed repo.
|
|
38
|
-
6. **Edge cases** — no free repo ⇒ report "all busy", offer resume/wait; never force a selection.
|
|
39
|
-
|
|
40
|
-
## Exit Codes
|
|
41
|
-
|
|
42
|
-
| Code | Meaning |
|
|
43
|
-
|---|---|
|
|
44
|
-
| `0` | Success |
|
|
45
|
-
| `1` | User/input error (bad args, bad `--start-dir`) |
|
|
46
|
-
| `2` | System error (unexpected dispatch failure) |
|
|
47
|
-
|
|
48
|
-
Exit codes follow `.claude/rules/cli-design.md` conventions.
|
|
49
|
-
|
|
50
|
-
## Related
|
|
51
|
-
|
|
52
|
-
- `skills/dispatcher/SKILL.md` — skill spec: enumerate → rank → verdict gate → AUQ → atomic claim → route (issues #678, #682)
|
|
53
|
-
- `scripts/lib/dispatcher/enumerate.mjs` — candidate enumeration + free/busy resolution (#676)
|
|
54
|
-
- `scripts/lib/dispatcher/rank.mjs` — backlog priority × staleness × readiness scorer (#677)
|
|
55
|
-
- `scripts/lib/autonomy/suitability.mjs` — `computeSuitabilityVerdict(...)` four-gate verdict engine (#680, wired into launch by #682)
|
|
56
|
-
- `scripts/lib/config/dispatcher-autonomy.mjs` — `resolveDispatcherAutonomy(...)` effective autonomy dial (#679); opt-in by design, fail-closed to `off`
|
|
57
|
-
- `scripts/lib/autopilot/recent-runs.mjs` — `readRecentAutopilotRuns(...)` per-repo kill-switch-history reader feeding the verdict's G2 gate (#682)
|
|
58
|
-
- `scripts/lib/session-lock.mjs` — `acquire(...)` atomic-claim primitive (`linkSync` create-or-fail)
|
|
59
|
-
- `commands/portfolio.md` — cross-repo read-only health dashboard (the dispatcher's read-only sibling)
|