@event4u/agent-config 8.10.0 → 8.12.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/.claude-plugin/marketplace.json +1 -1
- package/AGENTS.md +1 -0
- package/CHANGELOG.md +67 -149
- package/README.md +6 -6
- package/dist/agent-src/commands/challenge-me/vision.md +121 -32
- package/dist/agent-src/commands/challenge-me/with-docs.md +21 -8
- package/dist/agent-src/commands/commit/in-chunks.md +1 -1
- package/dist/agent-src/commands/commit.md +2 -1
- package/dist/agent-src/commands/cost/report.md +2 -1
- package/dist/agent-src/commands/feature/dev.md +4 -4
- package/dist/agent-src/commands/humanize.md +101 -0
- package/dist/agent-src/commands/jira-ticket.md +2 -2
- package/dist/agent-src/commands/memory/load.md +15 -0
- package/dist/agent-src/commands/optimize/project.md +12 -0
- package/dist/agent-src/commands/roadmap/create.md +12 -11
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/worktree/cleanup.md +22 -17
- package/dist/agent-src/commands/worktree/create.md +3 -1
- package/dist/agent-src/commands/worktree/status.md +12 -0
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +66 -0
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +1 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +47 -3
- package/dist/agent-src/contexts/execution/roadmap-ci-steps-mechanics.md +117 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +111 -85
- package/dist/agent-src/contexts/execution/roadmap-writing-source-derived.md +65 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +84 -0
- package/dist/agent-src/rules/architecture.md +6 -51
- package/dist/agent-src/rules/autonomous-execution.md +7 -37
- package/dist/agent-src/rules/broken-access-control.md +7 -45
- package/dist/agent-src/rules/code-comment-discipline.md +64 -0
- package/dist/agent-src/rules/context-hygiene.md +14 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +9 -77
- package/dist/agent-src/rules/delegation-policy.md +10 -8
- package/dist/agent-src/rules/design-fidelity.md +4 -0
- package/dist/agent-src/rules/git-history-discipline.md +4 -79
- package/dist/agent-src/rules/improve-before-implement.md +7 -66
- package/dist/agent-src/rules/legal-safety-floor.md +11 -55
- package/dist/agent-src/rules/no-roadmap-references.md +13 -77
- package/dist/agent-src/rules/persona-governance.md +5 -47
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +6 -32
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +21 -104
- package/dist/agent-src/rules/roadmap-progress-sync.md +5 -56
- package/dist/agent-src/rules/think-before-action.md +10 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -75
- package/dist/agent-src/rules/verify-before-complete.md +12 -0
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +96 -12
- package/dist/agent-src/skills/ai-council/SKILL.md +19 -9
- package/dist/agent-src/skills/api-design/SKILL.md +7 -5
- package/dist/agent-src/skills/api-testing/SKILL.md +1 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +59 -2
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +19 -16
- package/dist/agent-src/skills/code-refactoring/SKILL.md +9 -9
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -0
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +1 -1
- package/dist/agent-src/skills/decision-review/SKILL.md +86 -0
- package/dist/agent-src/skills/defense-in-depth/SKILL.md +2 -2
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +7 -7
- package/dist/agent-src/skills/design-intelligence/SKILL.md +8 -8
- package/dist/agent-src/skills/design-review/SKILL.md +23 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +2 -0
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +7 -9
- package/dist/agent-src/skills/git-workflow/SKILL.md +86 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +147 -0
- package/dist/agent-src/skills/humanizer/data/patterns.md +190 -0
- package/dist/agent-src/skills/humanizer/evals/triggers.json +17 -0
- package/dist/agent-src/skills/laravel/SKILL.md +14 -1
- package/dist/agent-src/skills/launch-readiness/SKILL.md +20 -19
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +126 -0
- package/dist/agent-src/skills/logging-monitoring/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +14 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +2 -1
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +58 -1
- package/dist/agent-src/skills/performance/SKILL.md +1 -1
- package/dist/agent-src/skills/php-debugging/SKILL.md +17 -0
- package/dist/agent-src/skills/readme-writing/SKILL.md +2 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -0
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +22 -51
- package/dist/agent-src/skills/security-audit/SKILL.md +6 -9
- package/dist/agent-src/skills/sentry-integration/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +8 -0
- package/dist/agent-src/skills/source-discovery/SKILL.md +26 -24
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +55 -46
- package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +42 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +10 -0
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +10 -0
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +27 -20
- package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +38 -0
- package/dist/agent-src/templates/agent-settings.md +3 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +15 -1
- package/dist/agent-src/templates/contexts/knowledge-card.md +12 -0
- package/dist/agent-src/templates/roadmaps.md +14 -0
- package/dist/cli/commands/recordTriggerEval.js +4 -14
- package/dist/cli/commands/recordTriggerEval.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +157 -88
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -6
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +13 -10
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +14 -9
- package/dist/install/install.mjs +12 -7
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/claude_settings_hooks.js +8 -0
- package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -1
- package/dist/scripts/_lib/trigger_eval_floors.js +24 -0
- package/dist/scripts/_lib/trigger_eval_floors.js.map +1 -0
- package/dist/scripts/condense.js +12 -2
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +5 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +54 -5
- package/docs/architecture.md +4 -4
- package/docs/archive/CHANGELOG-pre-8.12.0.md +304 -0
- package/docs/benchmark.md +90 -0
- package/docs/catalog.md +8 -5
- package/docs/command-flows.md +2 -1
- package/docs/contracts/ai-council-config.md +97 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/evidence-based-pruning.md +1 -0
- package/docs/contracts/hook-architecture-v1.md +25 -0
- package/docs/contracts/kernel-membership.md +35 -0
- package/docs/contracts/measurement-baseline.md +1 -0
- package/docs/contracts/persona-schema.md +49 -0
- package/docs/contracts/provider-lifecycle.md +29 -4
- package/docs/contracts/release-sizing.md +22 -0
- package/docs/contracts/write-engine.md +38 -1
- package/docs/customization.md +12 -0
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -0
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +11 -0
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +1 -1
- package/docs/decisions/ADR-028-root-layout.md +1 -1
- package/docs/decisions/ADR-038-canonical-settings-path.md +10 -0
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +29 -5
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +1 -1
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +7 -0
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +2 -2
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +1 -1
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +11 -0
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +11 -1
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +2 -1
- package/docs/decisions/ADR-118-loop-engineering-boundaries.md +162 -0
- package/docs/decisions/ADR-119-global-knowledge-default-on.md +104 -0
- package/docs/decisions/ADR-120-council-chairman-mode.md +70 -0
- package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +90 -0
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +11 -1
- package/docs/decisions/ADR-rule-kernel-and-router.md +11 -0
- package/docs/decisions/INDEX.md +13 -9
- package/docs/design/council-vs-solo-baseline.md +92 -0
- package/docs/design/cross-model-parity-eval.md +82 -0
- package/docs/design/length-neutral-judge-rerun.md +92 -0
- package/docs/design/utilization-window-criteria.md +51 -0
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +2 -2
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +68 -0
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +80 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
- package/docs/guidelines/agent-infra/untrusted-input-spotlighting.md +80 -3
- package/docs/guidelines/code-clarity.md +191 -1
- package/docs/guidelines/design-antipatterns.md +20 -0
- package/docs/guidelines/php/php-coding-patterns.md +12 -2
- package/docs/maintainers/branch-protection.md +87 -0
- package/docs/maintainers/system-map.md +85 -0
- package/docs/proof.md +32 -15
- package/docs/wedge/production-validator/production-validator.md +27 -0
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +38 -9
- package/src/scripts/_cli/cmd_doctor.ts +129 -1
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +87 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +8 -0
- package/src/scripts/_lib/knowledge_global.ts +50 -2
- package/src/scripts/_lib/knowledge_global_promote.ts +150 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +42 -4
- package/src/scripts/_lib/lexical_index.ts +15 -2
- package/src/scripts/_lib/orchestration_record.ts +14 -0
- package/src/scripts/_lib/trigger_eval_floors.ts +31 -0
- package/src/scripts/ai_council/chairman.ts +90 -0
- package/src/scripts/ai_council/clients.ts +18 -3
- package/src/scripts/ai_council/config.ts +157 -0
- package/src/scripts/ai_council/debate_gates.ts +89 -0
- package/src/scripts/ai_council/orchestrator.ts +252 -2
- package/src/scripts/ai_council/prompts.ts +121 -11
- package/src/scripts/ai_council/replay.ts +17 -0
- package/src/scripts/ai_council/stance_tally.ts +184 -0
- package/src/scripts/ai_tells_rules.ts +433 -0
- package/src/scripts/bench_humanizer_eval.ts +240 -0
- package/src/scripts/bench_persona_placebo.ts +308 -0
- package/src/scripts/bench_quality_rerun.ts +357 -0
- package/src/scripts/build_discovery_manifest.ts +6 -0
- package/src/scripts/build_proof.ts +30 -9
- package/src/scripts/check_artefact_count_messaging.ts +56 -0
- package/src/scripts/check_claims.ts +40 -0
- package/src/scripts/check_knowledge_cards.ts +33 -4
- package/src/scripts/check_portability.ts +1 -0
- package/src/scripts/check_rule_invariants.ts +10 -3
- package/src/scripts/complexity_report.ts +776 -0
- package/src/scripts/condense.ts +16 -2
- package/src/scripts/consumer_matrix.ts +292 -14
- package/src/scripts/council_cli.ts +203 -1
- package/src/scripts/detect_ai_tells.ts +312 -0
- package/src/scripts/explain_run.ts +593 -0
- package/src/scripts/install.ts +12 -0
- package/src/scripts/knowledge_global_cli.ts +235 -46
- package/src/scripts/lint_framework_leakage.ts +88 -7
- package/src/scripts/lint_framework_leakage_allowlist.json +59 -572
- package/src/scripts/lint_knowledge_scale.ts +30 -0
- package/src/scripts/lint_originality_shingles.ts +210 -0
- package/src/scripts/orchestration_record.ts +1 -0
- package/src/scripts/rule_backlinks.ts +0 -0
- package/src/scripts/schemas/agent-settings.schema.json +11 -0
- package/src/scripts/self_review_gate.ts +41 -15
- package/src/scripts/skill_eval_coverage.ts +71 -3
- package/src/scripts/skill_linter.ts +1 -0
- package/src/scripts/trigger_eval_rotation.ts +344 -0
- package/src/scripts/update_counts.ts +5 -17
- package/src/scripts/worktree_cleanup_check.ts +263 -0
- package/src/server/schemas/settings.ts +8 -3
- package/src/scripts/analysis_freshness.ts +0 -362
- package/src/scripts/export_replay_corpus.ts +0 -208
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Roadmap CI-Steps — Mechanics
|
|
2
|
+
|
|
3
|
+
Migrated body of the [`roadmap-ci-steps-policy`](../../rules/roadmap-ci-steps-policy.md)
|
|
4
|
+
rule (per P4 of `road-to-kernel-and-router.md`). Loaded by
|
|
5
|
+
[`roadmap-process-loop § 5` step 0](roadmap-process-loop.md#5-step-loop) and by
|
|
6
|
+
the rule's routing line. The Iron Law stays in the rule; this file carries the
|
|
7
|
+
pattern table, carve-outs, linter contract, inline-skip mechanics, and failure
|
|
8
|
+
modes.
|
|
9
|
+
|
|
10
|
+
## Forbidden step patterns (authoring + execution)
|
|
11
|
+
|
|
12
|
+
A step is **CI-shaped** when its text matches any of the patterns
|
|
13
|
+
below. Case-insensitive. Pattern matching is line-bounded — the
|
|
14
|
+
literal must appear inside the step's `- [ ]` line or its immediate
|
|
15
|
+
inline note (the next indented `<!-- … -->` or `(…)` annotation).
|
|
16
|
+
|
|
17
|
+
| Pattern | Example |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `task ci` | `Run task ci before the boundary` |
|
|
20
|
+
| `task ci-strict` | `task ci-strict release gate` |
|
|
21
|
+
| `task ci-fast` | `task ci-fast smoke` |
|
|
22
|
+
| `make test` | `Run make test on phase boundary` |
|
|
23
|
+
| `make ci` | `make ci pre-merge` |
|
|
24
|
+
| `npm run check` / `pnpm run check` / `yarn check` | `npm run check before commit` |
|
|
25
|
+
| `composer test` | `composer test on every phase` |
|
|
26
|
+
| `vendor/bin/phpunit` (whole-suite, no path arg) | `vendor/bin/phpunit` |
|
|
27
|
+
| `php artisan test` (no `--filter`) | `php artisan test` |
|
|
28
|
+
|
|
29
|
+
Targeted commands (`vendor/bin/phpstan analyse <module-path>` such as
|
|
30
|
+
`vendor/bin/phpstan analyse app/Modules/X` in Laravel,
|
|
31
|
+
`php artisan test --filter=…`, `npm run lint -- --fix path/`) are
|
|
32
|
+
**not** CI-shaped — they are narrow verifications, allowed regardless
|
|
33
|
+
of the setting.
|
|
34
|
+
|
|
35
|
+
## Carve-outs — when CI-shaped steps are still allowed
|
|
36
|
+
|
|
37
|
+
1. **New CI gate / smoke test / test file landed by this roadmap.**
|
|
38
|
+
Once-locally execution is mandatory under
|
|
39
|
+
[`verify-before-complete`](../../rules/verify-before-complete.md) carve-out
|
|
40
|
+
(see `templates/agent-settings.md` § `quality.local_auto_run`).
|
|
41
|
+
Mark the step with `<!-- carve-out: new-gate-verification -->`
|
|
42
|
+
on the same line; the linter and the execution loop both honour
|
|
43
|
+
the marker and let the step run.
|
|
44
|
+
2. **`quality.local_auto_run: true`.** Setting opt-in restores the
|
|
45
|
+
pre-policy behaviour — the linter no-ops and the execution loop
|
|
46
|
+
runs CI steps unmodified.
|
|
47
|
+
3. **Acceptance-criteria block at end of roadmap.** Final-gate prose
|
|
48
|
+
like "All quality gates pass (`task ci`)" inside an
|
|
49
|
+
`## Acceptance criteria` section is documentation, not an
|
|
50
|
+
executable step (no `- [ ]` checkbox in front of the literal).
|
|
51
|
+
Linter ignores; execution loop never reaches it as a step.
|
|
52
|
+
|
|
53
|
+
## Authoring — linter blocks at write-time
|
|
54
|
+
|
|
55
|
+
`task lint-roadmap-ci-steps` (wired into `task ci-fast` /
|
|
56
|
+
`lint-roadmap-complexity` cadence) scans `agents/roadmaps/*.md` and
|
|
57
|
+
per-module roadmap dirs resolved via
|
|
58
|
+
`scripts/_lib/agent_settings.ts::enumerate_modules()`
|
|
59
|
+
(`{module_path}/{modules.agent_folder}/roadmaps/*.md`; Laravel shape:
|
|
60
|
+
`app/Modules/*/agents/roadmaps/*.md`). Exit code:
|
|
61
|
+
|
|
62
|
+
- `0` — no CI-shaped steps, or setting is `true`, or every match is
|
|
63
|
+
carve-out-marked.
|
|
64
|
+
- `1` — at least one CI-shaped step in an active (non-archived,
|
|
65
|
+
non-skipped) roadmap with `quality.local_auto_run: false` and no
|
|
66
|
+
carve-out marker. Linter prints the file, line, matched literal,
|
|
67
|
+
and suggested rewording.
|
|
68
|
+
|
|
69
|
+
Archive (`agents/roadmaps/archive/`) and skipped
|
|
70
|
+
(`agents/roadmaps/skipped/`) are out of scope — they record history,
|
|
71
|
+
not future work.
|
|
72
|
+
|
|
73
|
+
## Execution — process-loop skips inline
|
|
74
|
+
|
|
75
|
+
Wrappers `/roadmap:process-step|phase|full` honour the policy at the
|
|
76
|
+
top of [`roadmap-process-loop § 5`](roadmap-process-loop.md#5-step-loop):
|
|
77
|
+
|
|
78
|
+
1. Before running a step, match its text against the patterns above.
|
|
79
|
+
2. If CI-shaped **and** `quality.local_auto_run: false` **and** no
|
|
80
|
+
carve-out marker → flip the checkbox to `[-]` (cancelled), append
|
|
81
|
+
a one-line reason as inline note, regenerate the dashboard,
|
|
82
|
+
continue to the next step. **Never** run the gate.
|
|
83
|
+
3. If CI-shaped **and** `quality.local_auto_run: true` → run the
|
|
84
|
+
step normally.
|
|
85
|
+
4. If carve-out-marked → run the step regardless of the setting.
|
|
86
|
+
|
|
87
|
+
The `[-]` reason format is fixed:
|
|
88
|
+
`<!-- skipped: quality.local_auto_run=false → remote CI is the gate -->`.
|
|
89
|
+
Per [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md) the flip and
|
|
90
|
+
the dashboard regen happen in the **same reply** that decides to
|
|
91
|
+
skip; saving skips for the archive commit is a rule violation.
|
|
92
|
+
|
|
93
|
+
## Failure modes
|
|
94
|
+
|
|
95
|
+
- Authoring `- [ ] Run task ci` while `local_auto_run: false` — linter
|
|
96
|
+
fails the PR.
|
|
97
|
+
- Executing a CI-shaped step without the inline-skip flip — Iron Law
|
|
98
|
+
violation; the loop never reaches the gate.
|
|
99
|
+
- Adding a carve-out marker to bypass the gate for an *existing*
|
|
100
|
+
pipeline run — abuse; the marker is reserved for **new** gates
|
|
101
|
+
introduced by the same roadmap.
|
|
102
|
+
- Hiding the literal inside a fenced bash block to dodge the linter —
|
|
103
|
+
the linter matches inside fenced blocks too (see
|
|
104
|
+
`scripts/lint_roadmap_ci_steps.ts`).
|
|
105
|
+
|
|
106
|
+
## See also
|
|
107
|
+
|
|
108
|
+
- [`roadmap-ci-steps-policy`](../../rules/roadmap-ci-steps-policy.md) — the
|
|
109
|
+
Iron Law + trigger surface this file backs.
|
|
110
|
+
- [`verify-before-complete`](../../rules/verify-before-complete.md) — the
|
|
111
|
+
Iron Law the policy narrows; carve-out cites it.
|
|
112
|
+
- [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md) — inline flip
|
|
113
|
+
+ dashboard regen contract.
|
|
114
|
+
- `templates/agent-settings.md` § `quality.local_auto_run` — source
|
|
115
|
+
of the toggle and its carve-out wording.
|
|
116
|
+
- [`roadmap-process-loop`](roadmap-process-loop.md) — § 5 owns the
|
|
117
|
+
inline-skip step gate.
|
|
@@ -30,22 +30,23 @@ roadmaps with open work that is blocked-for-later — parked, not active).
|
|
|
30
30
|
|
|
31
31
|
### Live merge-state before any "in-flight / merged / handled" claim
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
decision, or user-facing message
|
|
35
|
-
*handled by an open PR*, *already merged*, or *not yet merged
|
|
36
|
-
at claim
|
|
37
|
-
"<slug>"`). Never infer merge state from:
|
|
38
|
-
|
|
39
|
-
- **dashboard open-count** — lags: a completed roadmap
|
|
40
|
-
**merging** PR, so
|
|
41
|
-
merged, or read "open" seconds
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
33
|
+
When selection reasoning would **exclude** a roadmap — or a pre-run summary,
|
|
34
|
+
decision, or any user-facing message would **describe** one — as *in-flight*,
|
|
35
|
+
*handled by an open PR*, *already merged*, or *not yet merged*, verify that
|
|
36
|
+
claim **live at the moment of the claim** (`gh pr view <n> --json state,mergedAt`
|
|
37
|
+
or `gh pr list --search "<slug>"`). Never infer merge state from:
|
|
38
|
+
|
|
39
|
+
- the **dashboard's open-count** — it lags: a completed roadmap is archived in
|
|
40
|
+
the **merging** PR, so a roadmap can still read "open" on `main` while its PR
|
|
41
|
+
is already merged (archive not yet on your checkout), or read "open" seconds
|
|
42
|
+
before a merge you never re-checked;
|
|
43
|
+
- **session memory** ("I opened a PR for this earlier") or an **earlier fetch** —
|
|
44
|
+
a merge can land between your fetch and your message.
|
|
45
|
+
|
|
46
|
+
A stale merge-state claim ships an unnecessary user-facing message about work
|
|
47
|
+
that is already done — the exact failure this clause prevents. This is the
|
|
48
|
+
[`direct-answers`](../../rules/direct-answers.md) Iron-Law-2 live-state rule
|
|
49
|
+
(git/PR state never from memory), applied to roadmap selection.
|
|
49
50
|
|
|
50
51
|
## 2. Pre-run summary — gate or inline note
|
|
51
52
|
|
|
@@ -90,7 +91,7 @@ does not fire.
|
|
|
90
91
|
|
|
91
92
|
## 3. Pre-scan — execution contract or commit-step ask
|
|
92
93
|
|
|
93
|
-
Read `execution.mode` from roadmap's frontmatter
|
|
94
|
+
Read `execution.mode` from the roadmap's frontmatter
|
|
94
95
|
(`autonomous` | `phase-checkpoints` | `interactive`; absent =
|
|
95
96
|
`interactive`).
|
|
96
97
|
|
|
@@ -101,17 +102,17 @@ its four-class pre-scan over every open step:
|
|
|
101
102
|
1. commit-shaped steps (patterns below),
|
|
102
103
|
2. git-shape needs (branch / push / PR / delivery),
|
|
103
104
|
3. artifact-authoring steps (new or materially rewritten skill / rule /
|
|
104
|
-
command / guideline — feeds batched drafting-protocol research
|
|
105
|
+
command / guideline — feeds the batched drafting-protocol research
|
|
105
106
|
pass, run at contract time against current artifact state),
|
|
106
107
|
4. open questions / ambiguity markers (incl. `ask-when-uncertain`
|
|
107
108
|
vague-trigger patterns).
|
|
108
109
|
|
|
109
|
-
Surface contract summary; user's single **Accept** activates
|
|
110
|
-
grants (branch, chunked commits, push to run's own feature
|
|
111
|
-
only, PR-open, batched artifact drafting, council auto-enable) —
|
|
112
|
-
cached for run, never re-asked.
|
|
113
|
-
any safety floor; boundaries + per-mode gate table live in
|
|
114
|
-
context.
|
|
110
|
+
Surface the contract summary; the user's single **Accept** activates
|
|
111
|
+
all run grants (branch, chunked commits, push to the run's own feature
|
|
112
|
+
branch only, PR-open, batched artifact drafting, council auto-enable) —
|
|
113
|
+
cached for the run, never re-asked. The contract never lifts a Hard
|
|
114
|
+
Floor or any safety floor; boundaries + per-mode gate table live in the
|
|
115
|
+
contract context.
|
|
115
116
|
|
|
116
117
|
**`mode: interactive` (or field absent)** → legacy commit-step scan
|
|
117
118
|
only: lines matching `commit:` / `git commit` / `Commit phase`.
|
|
@@ -135,11 +136,11 @@ Read both keys from `.agent-settings.yml` once and cache for the whole
|
|
|
135
136
|
run. Do **not** re-read inside the step loop.
|
|
136
137
|
|
|
137
138
|
**`roadmap.quality_cadence`** — when to run the quality pipeline.
|
|
138
|
-
Only relevant when `quality.local_auto_run` is `true`;
|
|
139
|
-
missing (default)
|
|
140
|
-
remote CI is the gate, run-end report states
|
|
141
|
-
to remote CI"* instead of a pass claim
|
|
142
|
-
run once).
|
|
139
|
+
Only relevant when `quality.local_auto_run` is `true`; when it is
|
|
140
|
+
`false` or missing (the default), local pipeline runs are suppressed at
|
|
141
|
+
EVERY cadence — remote CI is the gate, and the run-end report states
|
|
142
|
+
*"quality gates delegated to remote CI"* instead of a pass claim
|
|
143
|
+
(new-gate carve-out steps still run once).
|
|
143
144
|
|
|
144
145
|
| Value | Pipeline runs (`local_auto_run: true` only) |
|
|
145
146
|
|---|---|
|
|
@@ -183,7 +184,8 @@ For each open step in the working set (scope-bound — see wrapper):
|
|
|
183
184
|
on the same line, regenerate the dashboard, continue to the next
|
|
184
185
|
step. Never run the gate. Carve-out marker present → run normally
|
|
185
186
|
(new gate must be verified once locally). Setting `true` → run
|
|
186
|
-
normally.
|
|
187
|
+
normally. Full pattern table, carve-outs, linter contract, failure
|
|
188
|
+
modes: [`roadmap-ci-steps-mechanics`](roadmap-ci-steps-mechanics.md).
|
|
187
189
|
1. **Bundled read — one parallel tool-call block.** The step
|
|
188
190
|
description, the immediately-relevant code files, and any
|
|
189
191
|
guideline/context the step cites are **independent** reads and
|
|
@@ -201,17 +203,18 @@ For each open step in the working set (scope-bound — see wrapper):
|
|
|
201
203
|
2. Analyze the codebase for what the step requires.
|
|
202
204
|
3. Decide and act — implement. **No "should I implement this?" prompt.**
|
|
203
205
|
4. **Open question handling:**
|
|
204
|
-
- **Council on** (toggled manually, or auto-enabled for run by
|
|
205
|
-
accepted execution contract — § 3) → invoke per
|
|
206
|
+
- **Council on** (toggled manually, or auto-enabled for the run by
|
|
207
|
+
an accepted execution contract — § 3) → invoke per
|
|
206
208
|
[`ai-council`](../../skills/ai-council/SKILL.md), integrate
|
|
207
|
-
convergence, proceed. Token spend was opted in (contract
|
|
208
|
-
named members). `high_impact` / `user_required`
|
|
209
|
-
still escalate to user per
|
|
209
|
+
convergence, proceed. Token spend was opted in (the contract
|
|
210
|
+
summary named the members). `high_impact` / `user_required`
|
|
211
|
+
classifications still escalate to the user per
|
|
210
212
|
[`ask-when-uncertain`](../../rules/ask-when-uncertain.md).
|
|
211
213
|
- **Council off / not configured** → halt, surface once, wait.
|
|
212
|
-
Resume on next turn.
|
|
213
|
-
|
|
214
|
-
and in-run ambiguity halts (never silent
|
|
214
|
+
Resume on next turn. An execution contract cannot enable a
|
|
215
|
+
council that has no configured members — the contract summary
|
|
216
|
+
says so upfront, and in-run ambiguity halts (never silent
|
|
217
|
+
guessing).
|
|
215
218
|
5. **Atomic flip — same reply, every step.**
|
|
216
219
|
Flip the checkbox in `agents/roadmaps/<file>.md`: `[x]` done ·
|
|
217
220
|
`[~]` partial · `[-]` skipped. **Non-skippable, non-batchable**
|
|
@@ -228,19 +231,36 @@ For each open step in the working set (scope-bound — see wrapper):
|
|
|
228
231
|
git status --porcelain -- agents/roadmaps/<file>.md
|
|
229
232
|
```
|
|
230
233
|
|
|
231
|
-
(`git status --porcelain`, not `git diff` — roadmap file
|
|
232
|
-
**untracked
|
|
233
|
-
would false-halt; `--porcelain` reports both `M`
|
|
234
|
+
(`git status --porcelain`, not `git diff` — a roadmap file that is
|
|
235
|
+
still **untracked**, e.g. in a fresh worktree, is invisible to
|
|
236
|
+
`git diff` and would false-halt; `--porcelain` reports both `M`
|
|
237
|
+
and `??`.)
|
|
234
238
|
|
|
235
239
|
Empty output → Iron Law 2 was violated this iteration: the step
|
|
236
240
|
landed work but no checkbox flipped. **Halt loudly**, surface
|
|
237
241
|
"step <N> landed without checkbox flip — flip then resume", and
|
|
238
242
|
stop the run. Do not auto-fix; the user resumes on the next turn.
|
|
239
243
|
|
|
240
|
-
|
|
241
|
-
catches a forgotten flip per step, not
|
|
242
|
-
every scope (`process-step`,
|
|
243
|
-
cost is one `git diff` per
|
|
244
|
+
This guard is the deterministic counterpart to the rule's
|
|
245
|
+
pre-send self-check — it catches a forgotten flip per step, not
|
|
246
|
+
only at run end. It runs in every scope (`process-step`,
|
|
247
|
+
`process-phase`, `process-full`); the cost is one `git diff` per
|
|
248
|
+
step.
|
|
249
|
+
|
|
250
|
+
**`verify:` gate (when a step carries one).** If the step declares a
|
|
251
|
+
named `verify:` command (roadmap step-field convention, see
|
|
252
|
+
[`templates/roadmaps.md`](../../templates/roadmaps.md)), a `[x]` flip
|
|
253
|
+
additionally requires a **fresh green run of that exact command this
|
|
254
|
+
iteration** — its passing output present in this reply or an earlier
|
|
255
|
+
one this run. Flipping a `verify:`-bearing step to `[x]` without that
|
|
256
|
+
fresh green run is the same class of violation as a forgotten flip:
|
|
257
|
+
**halt loudly** ("step \<N\> flipped without its `verify:` run —
|
|
258
|
+
\`<cmd>\`"), do not auto-fix. This is a check on existing output, not a
|
|
259
|
+
new loop or a new script — the agent runs the step's own command, the
|
|
260
|
+
same way `think-before-action`'s `step → verify:` planning already
|
|
261
|
+
asks. Steps with no `verify:` field are governed by the flip-guard
|
|
262
|
+
above unchanged (agent-decidable exit/acceptance criteria remain the
|
|
263
|
+
default; `verify:` is the opt-in machine-checkable tightening).
|
|
244
264
|
|
|
245
265
|
6. **Dashboard regen — cadence-gated.** Run
|
|
246
266
|
`./agent-config roadmap:progress` when due per
|
|
@@ -265,36 +285,38 @@ For each open step in the working set (scope-bound — see wrapper):
|
|
|
265
285
|
- Test failure or quality red on `per_step`
|
|
266
286
|
- Council off + true ambiguity — under an **accepted execution
|
|
267
287
|
contract** ([§ 3](#3-pre-scan--execution-contract-or-commit-step-ask))
|
|
268
|
-
this halt exists only when no council is configured: contract
|
|
269
|
-
auto-enables council for run, so in-run open questions resolve
|
|
288
|
+
this halt exists only when no council is configured: the contract
|
|
289
|
+
auto-enables council for the run, so in-run open questions resolve
|
|
270
290
|
silently (`high_impact` / `user_required` classifications still
|
|
271
291
|
escalate per [`ask-when-uncertain`](../../rules/ask-when-uncertain.md));
|
|
272
292
|
with no council configured, true ambiguity halts — never silent
|
|
273
293
|
guessing.
|
|
274
294
|
|
|
275
|
-
An accepted execution contract **never lifts a Hard Floor** or any
|
|
276
|
-
other
|
|
277
|
-
drafting, council enablement), not safety.
|
|
295
|
+
An accepted execution contract **never lifts a Hard Floor** or any of
|
|
296
|
+
the other halts above — it removes redundant *asks* (git shape,
|
|
297
|
+
artifact drafting, council enablement), not safety.
|
|
278
298
|
|
|
279
299
|
On halt: stop, surface state, do **not** auto-fix outside the failing step.
|
|
280
300
|
|
|
281
301
|
### Forbidden non-halt reasons — agent-invented cautions
|
|
282
302
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
303
|
+
The halt list above is **exhaustive**. An agent running `process-full` (or any
|
|
304
|
+
wrapper) must **never** stop the run for a reason it invented that is not on
|
|
305
|
+
that list. In particular these are NOT halt conditions and stopping for them is
|
|
306
|
+
a violation of the command and the user's will:
|
|
286
307
|
|
|
287
|
-
- "low context / token budget" — keep landing complete steps until
|
|
288
|
-
actually runs out; never announce a boundary-stop by choice.
|
|
289
|
-
- "quality would degrade / deserves a fresh focused run later"
|
|
290
|
-
- "avoid a PR pile-up" / "let open PRs merge first"
|
|
291
|
-
- "this phase is large / deep subsystem"
|
|
292
|
-
- "phase-checkpoints, so I'll checkpoint and wait" — under `process-full`
|
|
293
|
-
phase boundary emits a non-blocking status line and the run continues
|
|
294
|
-
stop-and-wait reading applies only to
|
|
308
|
+
- "running low on context / token budget" — keep landing complete steps until
|
|
309
|
+
context actually runs out; never announce a boundary-stop by choice.
|
|
310
|
+
- "quality would degrade / this deserves a fresh focused run later"
|
|
311
|
+
- "avoid a PR pile-up" / "let the open PRs merge first"
|
|
312
|
+
- "this phase is large / touches a deep subsystem"
|
|
313
|
+
- "phase-checkpoints mode, so I'll checkpoint and wait" — under `process-full`
|
|
314
|
+
a phase boundary emits a non-blocking status line and the run **continues**;
|
|
315
|
+
the stop-and-wait reading of `phase-checkpoints` applies only to
|
|
316
|
+
`process-phase`.
|
|
295
317
|
|
|
296
|
-
|
|
297
|
-
surface THAT, not a manufactured caution.
|
|
318
|
+
If the work genuinely cannot continue, it will be because one of the five real
|
|
319
|
+
halt conditions fired — surface THAT, not a manufactured caution.
|
|
298
320
|
|
|
299
321
|
### Non-halt — gating notes, "optional" tags
|
|
300
322
|
|
|
@@ -324,47 +346,51 @@ execution either way.
|
|
|
324
346
|
- **End state under an accepted execution contract** (per-mode table:
|
|
325
347
|
[`roadmap-execution-contract § 4`](roadmap-execution-contract.md)):
|
|
326
348
|
all steps `[x]` · quality green per cadence · work committed in
|
|
327
|
-
chunks on run's feature branch · pushed to that branch · ONE PR
|
|
328
|
-
open (description-only flow) · archival sweep run. **Merge is out
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
349
|
+
chunks on the run's feature branch · pushed to that branch · ONE PR
|
|
350
|
+
open (description-only flow) · archival sweep run. **Merge is out of
|
|
351
|
+
scope in every mode — always conversational.** Without a contract
|
|
352
|
+
(interactive mode), the run ends after the archival check with no
|
|
353
|
+
git delivery beyond explicitly authorized commit steps.
|
|
332
354
|
- **If the entire roadmap reached `count_open == 0`** → run the full
|
|
333
355
|
project quality pipeline. On red → stop, surface failures, do **not**
|
|
334
|
-
archive. On green → run **deferred-resolution gate** below before
|
|
356
|
+
archive. On green → run the **deferred-resolution gate** below before
|
|
335
357
|
archival.
|
|
336
358
|
|
|
337
359
|
### 6a. Deferred-resolution gate — Iron Law 3
|
|
338
360
|
|
|
339
|
-
Before any `git mv` to `archive/`, count `[~]` items in closing
|
|
340
|
-
roadmap. If `count_deferred > 0`, archival **blocked** per
|
|
361
|
+
Before any `git mv` to `archive/`, count `[~]` items in the closing
|
|
362
|
+
roadmap. If `count_deferred > 0`, archival is **blocked** per
|
|
341
363
|
[`roadmap-progress-sync § Iron Law 3`](../../rules/roadmap-progress-sync.md).
|
|
342
|
-
|
|
364
|
+
The loop MUST:
|
|
343
365
|
|
|
344
366
|
1. Enumerate every `[~]` step (phase + text + optional
|
|
345
367
|
`<!-- deferred: ... -->` annotation).
|
|
346
|
-
2. Surface numbered-options block from
|
|
368
|
+
2. Surface the numbered-options block from
|
|
347
369
|
[`roadmap-management § 4b`](../../skills/roadmap-management/SKILL.md) —
|
|
348
370
|
five choices: follow-up (draft), follow-up (ready + blocked),
|
|
349
371
|
keep-in-archive (intentional drop), restore to `[ ]`, convert
|
|
350
372
|
to `[-]` cancelled.
|
|
351
|
-
3. Wait for user.
|
|
373
|
+
3. Wait for the user. The autonomous mandate (`/work`,
|
|
352
374
|
`/roadmap:process-full`, "decide for me") does **not** lift this
|
|
353
375
|
gate — Iron Law 3 calls it "the canonical lost-information failure
|
|
354
376
|
mode this rule exists to prevent."
|
|
355
|
-
4. On picks 1 / 2 → run "Spawn follow-up from deferred items"
|
|
377
|
+
4. On picks 1 / 2 → run the "Spawn follow-up from deferred items"
|
|
356
378
|
procedure in [`roadmap-management`](../../skills/roadmap-management/SKILL.md).
|
|
357
|
-
On picks 3 / 4 / 5 → apply change, re-evaluate decision
|
|
358
|
-
archive when gate clears.
|
|
359
|
-
|
|
360
|
-
`count_deferred == 0` → archive. **Primary:**
|
|
361
|
-
— untracked-safe (`git mv`,
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
379
|
+
On picks 3 / 4 / 5 → apply the change, re-evaluate the decision
|
|
380
|
+
table, archive when the gate clears.
|
|
381
|
+
|
|
382
|
+
`count_deferred == 0` → archive. **Primary path:** run the
|
|
383
|
+
`archive_completed_roadmaps --all` sweep — it is untracked-safe (`git mv`,
|
|
384
|
+
or a plain `mv` in a pre-first-commit / untracked consumer), rewrites inbound
|
|
385
|
+
refs (on the index when tracked, on the filesystem when not), and regenerates
|
|
386
|
+
the dashboard. This entry point is **PR-independent** (gap B): it does not need
|
|
387
|
+
`/create-pr` to have run. **Fallback only when that script is not vendored** in
|
|
388
|
+
the consumer: emit a one-line instruction to vendor it (run `agents:init`),
|
|
389
|
+
then apply the manual procedure in
|
|
365
390
|
[`roadmap-management`](../../skills/roadmap-management/SKILL.md) (mkdir
|
|
366
|
-
`archive/`, `mv`, ref
|
|
367
|
-
|
|
391
|
+
`archive/`, `mv`, inbound-ref rewrite, dashboard regen). NEVER silently
|
|
392
|
+
delegate to a bare `git mv` that fails on untracked files and leaves a
|
|
393
|
+
completed roadmap rotting in the active tree.
|
|
368
394
|
|
|
369
395
|
## Scope deltas — what each wrapper binds
|
|
370
396
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Roadmap Writing — source-derived & capability-adoption roadmaps
|
|
2
|
+
|
|
3
|
+
Conditional procedure for [`roadmap-writing`](../../skills/roadmap-writing/SKILL.md)
|
|
4
|
+
§ 8. Split out of the skill body to keep it under the size budget. This fires
|
|
5
|
+
**only** for source-derived or capability-adoption roadmaps; an ordinary
|
|
6
|
+
internally-originated roadmap skips it entirely (§§ 0–7 of the skill are the
|
|
7
|
+
whole job). Pull this when the roadmap originates from an external input or
|
|
8
|
+
adopts capabilities into the suite.
|
|
9
|
+
|
|
10
|
+
## When this section fires
|
|
11
|
+
|
|
12
|
+
This section fires **only** when the roadmap originates from an
|
|
13
|
+
external input or adopts capabilities into the suite:
|
|
14
|
+
|
|
15
|
+
- a competitive / capability harvest, an external suggestion, or an
|
|
16
|
+
external LLM ideation thread, **or**
|
|
17
|
+
- a decision to integrate/adopt new skills, commands, or a pack, **or**
|
|
18
|
+
- a plan whose design has genuinely contested, not-yet-resolved
|
|
19
|
+
trade-offs.
|
|
20
|
+
|
|
21
|
+
For an ordinary internally-originated roadmap, **skip this section** —
|
|
22
|
+
§§ 0–7 are the whole job. Do not bolt a Provenance block or a
|
|
23
|
+
gap-table onto a plan that needs neither (template rule 19).
|
|
24
|
+
|
|
25
|
+
## The four extra moves
|
|
26
|
+
|
|
27
|
+
When it fires, add these four moves to the §§ 0–7 procedure:
|
|
28
|
+
|
|
29
|
+
**A. Gap-table before drafting (don't adopt — integrate).** Audit each
|
|
30
|
+
proposed item against the *existing* skill / command / rule surface and
|
|
31
|
+
classify it `KEEP` (verified gap), `FOLD` (into a named existing
|
|
32
|
+
artefact), or `CUT` (already covered). Only `KEEP` items become
|
|
33
|
+
roadmap scope; `FOLD`/`CUT` are recorded so the cut is auditable. A
|
|
34
|
+
negative grep is not proof — open the nearest existing artefacts (per
|
|
35
|
+
[`think-before-action`](../../rules/think-before-action.md) and, for an
|
|
36
|
+
external source, [`external-reference-deep-dive`](../../rules/external-reference-deep-dive.md)).
|
|
37
|
+
|
|
38
|
+
**B. Resolve contested design in the council *first*, then author.**
|
|
39
|
+
The default council flow (`/roadmap:ai-council`) *challenges a finished
|
|
40
|
+
roadmap*. For a contested or source-derived plan, run the council
|
|
41
|
+
**up front** on the design questions (`/council:design`, or the
|
|
42
|
+
[`ai-council`](../../skills/ai-council/SKILL.md) skill), converge, **then** write
|
|
43
|
+
the roadmap encoding the verdicts — so the plan ships already-decided,
|
|
44
|
+
not as open questions in prose. One run, converge; do not relitigate.
|
|
45
|
+
|
|
46
|
+
**C. Encode the decision so it survives.**
|
|
47
|
+
- Inline council convergence under a `## Council notes (<date>, <depth>)`
|
|
48
|
+
block — members + date, **never** a session filepath
|
|
49
|
+
([`no-roadmap-references`](../../rules/no-roadmap-references.md)).
|
|
50
|
+
- Add a `## Provenance` block — source by a **neutral descriptor**
|
|
51
|
+
(never the raw competitor/tool name,
|
|
52
|
+
[`source-confidentiality`](../../rules/source-confidentiality.md));
|
|
53
|
+
retain the real link as an `ENC1:` token via
|
|
54
|
+
`src/scripts/_lib/link_crypto.ts encrypt --value <url>`.
|
|
55
|
+
- Save the locked decision to memory (project type, "don't relitigate")
|
|
56
|
+
so a future session does not re-derive it.
|
|
57
|
+
|
|
58
|
+
**D. Make "integration, not dump" a testable acceptance criterion.**
|
|
59
|
+
The AC must encode the anti-dump litmus, decidably: visible commands
|
|
60
|
+
within the pack's `size_class` budget; each new visible command reuses
|
|
61
|
+
≥ 2 existing skills; no new artefact duplicates an existing one;
|
|
62
|
+
governance preflight recorded — `domain-adoption-policy` (does it open a
|
|
63
|
+
new domain?), `persona-governance` (new personas?),
|
|
64
|
+
`framework-neutrality`, `size-enforcement` — with the disposition
|
|
65
|
+
stated in the roadmap.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Subagent Modes — worktree + live-app-judge detail
|
|
2
|
+
|
|
3
|
+
Extended detail for the two heaviest [`subagent-orchestration`](../../skills/subagent-orchestration/SKILL.md)
|
|
4
|
+
modes — `do-in-worktrees` (mode 7) and `do-with-live-app-judge` (mode 8).
|
|
5
|
+
Split out of the skill body to keep it under the size budget; the mode list,
|
|
6
|
+
selection rules, and the six common modes stay inline in the skill. Pull this
|
|
7
|
+
when you actually dispatch one of these two modes.
|
|
8
|
+
|
|
9
|
+
## Mode 7 — do-in-worktrees
|
|
10
|
+
|
|
11
|
+
Cross-wing or cross-skill chain executed across isolated git
|
|
12
|
+
worktrees — each handoff in the chain runs in its own worktree, so
|
|
13
|
+
the workspace state of one step never leaks into the next. Operationalizes
|
|
14
|
+
the worktree boundary clause in
|
|
15
|
+
[`docs/contracts/cross-wing-handoff.md`](../../../../docs/contracts/cross-wing-handoff.md)
|
|
16
|
+
§ 3. State-machine layer only — worktree creation/destruction lives
|
|
17
|
+
in [`using-git-worktrees`](../../skills/using-git-worktrees/SKILL.md) and
|
|
18
|
+
[`finishing-a-development-branch`](../../skills/finishing-a-development-branch/SKILL.md).
|
|
19
|
+
|
|
20
|
+
| When to use | When not | Model pairing |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| Multi-step cross-wing chain (≥2 senior skills, each ≥30 min) where one step's open files / branch state would confuse the next | Fast iteration where each step < 30 min — worktree overhead exceeds isolation benefit | implementers = same tier per step; judge = one tier up at chain end |
|
|
23
|
+
|
|
24
|
+
**Handoff shape:** initiator-skill emits the typed output declared in
|
|
25
|
+
its `## Output` block → control passes to delegated-skill in a fresh
|
|
26
|
+
worktree → delegated-skill consumes the input shape declared in its
|
|
27
|
+
`## Input` (or `## When the agent should load this`) block. The
|
|
28
|
+
handoff is auditable; `lint_handoffs.ts` validates the chain.
|
|
29
|
+
|
|
30
|
+
**Example chain (W3 launch):** `positioning-strategy` (worktree A) →
|
|
31
|
+
`messaging-architecture` (worktree B, consumes positioning's
|
|
32
|
+
`positioning-statement.md`) → `gtm-launch` (worktree C, consumes
|
|
33
|
+
both prior artifacts). Each worktree carries one branch; the chain
|
|
34
|
+
end produces a single integration PR.
|
|
35
|
+
|
|
36
|
+
**Anti-pattern:** do not use for fast iteration loops where each
|
|
37
|
+
step is under ~30 minutes. The branch-creation, context-switch, and
|
|
38
|
+
worktree-cleanup cost dominates. Stick with mode 1 (do-and-judge)
|
|
39
|
+
or mode 3 (do-in-steps) for those.
|
|
40
|
+
|
|
41
|
+
**Competitive variant — per-candidate isolation.** When mode 5
|
|
42
|
+
(`do-competitively`) is combined with worktrees, each candidate
|
|
43
|
+
implementer runs in its own worktree (so candidates cannot read each
|
|
44
|
+
other's open files or branch state). Selection rules:
|
|
45
|
+
|
|
46
|
+
- **No auto-merge.** The orchestrator never merges a candidate
|
|
47
|
+
branch. Hard Floor per [`non-destructive-by-default`](../../rules/non-destructive-by-default.md) —
|
|
48
|
+
applies even under standing autonomy. ADR-005 records the reasoning.
|
|
49
|
+
- **Ranked presentation.** Judge ranks candidates (1..N) with a
|
|
50
|
+
one-line justification per rank; user picks the winner.
|
|
51
|
+
- **Loser worktrees stay.** The orchestrator does not delete losing
|
|
52
|
+
worktrees automatically — the user keeps the option to harvest a
|
|
53
|
+
partial idea before cleanup.
|
|
54
|
+
|
|
55
|
+
## Mode 8 — do-with-live-app-judge (gated — UI-heavy tasks)
|
|
56
|
+
|
|
57
|
+
Implementer ships the change AND starts the dev server; the judge drives
|
|
58
|
+
the RUNNING application (Playwright / browser) against a written rubric —
|
|
59
|
+
it never reads the diff. Catches the class static review misses: wired-but-
|
|
60
|
+
broken flows, dead buttons, state that renders wrong only at runtime.
|
|
61
|
+
|
|
62
|
+
| When to use | When not | Model pairing |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| UI-heavy change where "looks right in the diff" ≠ "works in the app"; a dev server + browser tooling exist | Backend/logic change (a diff judge is cheaper and sharper); no runnable app surface | implementer = session; judge = same tier, fresh context, browser tools only |
|
|
65
|
+
|
|
66
|
+
Rules:
|
|
67
|
+
|
|
68
|
+
- The judge's rubric is written BEFORE dispatch (what flows to click, what
|
|
69
|
+
must render) — never improvised from the diff it must not read.
|
|
70
|
+
- Record `dispatch_mode: do-with-live-app-judge` + `verdict_changed_outcome`
|
|
71
|
+
on every use. **Adoption gate:** this mode stays experimental until its
|
|
72
|
+
`verdict_changed_outcome` telemetry shows it changes outcomes (caught a
|
|
73
|
+
real issue a diff judge missed); a mode that never flips a verdict is
|
|
74
|
+
cost without value and gets removed.
|
|
75
|
+
- No self-play/"adversarial training" framing — this is one judge, one
|
|
76
|
+
rubric, one running app.
|
|
77
|
+
- **Low-priority future candidate (needs real screenshot tooling — do not
|
|
78
|
+
build speculatively):** the async silent-verifier shape from
|
|
79
|
+
[`design-review`](../../skills/design-review/SKILL.md) § Async-verifier pattern — a
|
|
80
|
+
background verifier that owns UI verification via screenshots, forbids the
|
|
81
|
+
main agent from self-checking, and stays silent on pass — is the natural
|
|
82
|
+
mechanism for this mode's judge once dependable screenshot tooling lands.
|
|
83
|
+
Recorded from road-to-opt-design-polish; gate it behind the same
|
|
84
|
+
`verdict_changed_outcome` adoption evidence above.
|