@event4u/agent-config 16.0.0 → 16.1.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +297 -137
- package/CONTRIBUTING.md +9 -0
- package/README.md +2 -2
- package/dist/agent-src/commands/analyze/inbox.md +26 -0
- package/dist/agent-src/commands/analyze/roadmap-repos.md +27 -0
- package/dist/agent-src/commands/challenge-me/closure.md +178 -0
- package/dist/agent-src/commands/challenge-me.md +9 -2
- package/dist/agent-src/commands/council/default.md +25 -5
- package/dist/agent-src/commands/feature/plan.md +28 -1
- package/dist/agent-src/commands/feature/roadmap.md +28 -1
- package/dist/agent-src/commands/implement-ticket.md +27 -0
- package/dist/agent-src/commands/jira-ticket.md +27 -0
- package/dist/agent-src/commands/pr/create.md +29 -0
- package/dist/agent-src/commands/pr/merge.md +60 -9
- package/dist/agent-src/commands/roadmap/ai-council.md +7 -1
- package/dist/agent-src/commands/roadmap/create.md +74 -27
- package/dist/agent-src/commands/roadmap/materialize.md +27 -0
- package/dist/agent-src/commands/roadmap/process-full.md +123 -18
- package/dist/agent-src/commands/team.md +22 -0
- package/dist/agent-src/contexts/authority/scope-growth-ownership.md +80 -0
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +47 -0
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +44 -3
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +15 -15
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +93 -0
- package/dist/agent-src/contexts/execution/fix-loop-ladder.md +108 -0
- package/dist/agent-src/contexts/execution/plan-confidence-gate.md +4 -2
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +75 -6
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +57 -0
- package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +102 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +29 -0
- package/dist/agent-src/rules/autonomous-execution.md +15 -8
- package/dist/agent-src/rules/delegation-policy.md +23 -45
- package/dist/agent-src/rules/design-fidelity.md +32 -37
- package/dist/agent-src/rules/evaluator-independence.md +43 -49
- package/dist/agent-src/rules/test-first.md +41 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
- package/dist/agent-src/skills/ai-council/SKILL.md +11 -3
- package/dist/agent-src/skills/api-design/data/manifest.json +3 -3
- package/dist/agent-src/skills/database/data/manifest.json +4 -4
- package/dist/agent-src/skills/database/data/query-tuning.csv +3 -3
- package/dist/agent-src/skills/design-review/SKILL.md +50 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -4
- package/dist/agent-src/skills/experiment-loop/SKILL.md +31 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +42 -3
- package/dist/agent-src/skills/threat-modeling/SKILL.md +9 -4
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +4 -4
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +37 -3
- package/dist/agent-src/templates/agent-settings.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +188 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +62 -2
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +1 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +1 -0
- package/dist/cli-delegate/check_update_banner.js +40 -2
- package/dist/cli-delegate/chunk-4E2W63DA.js +335 -0
- package/dist/cli-delegate/chunk-5R7HOLAF.js +99 -0
- package/dist/cli-delegate/{chunk-IVBPRCQO.js → chunk-6KFEC3G7.js} +1 -1
- package/dist/cli-delegate/{chunk-2TAQ2K4V.js → chunk-6KM6ORRY.js} +55 -386
- package/dist/cli-delegate/{chunk-2XY7ILBT.js → chunk-FC75PGJE.js} +42 -2
- package/dist/cli-delegate/{chunk-GYC3VRYN.js → chunk-FXYUYU4N.js} +57 -13
- package/dist/cli-delegate/{chunk-55ACLDUE.js → chunk-GJCBB2UG.js} +168 -10
- package/dist/cli-delegate/{chunk-AK6HODNQ.js → chunk-HDVVGPQW.js} +873 -539
- package/dist/cli-delegate/{chunk-H32DGUJH.js → chunk-P6ZHP5W2.js} +1 -1
- package/dist/cli-delegate/{chunk-57PN4GYJ.js → chunk-RGNIWTEA.js} +1 -1
- package/dist/cli-delegate/chunk-ROYYTEZU.js +39 -0
- package/dist/cli-delegate/{chunk-3FKR64R5.js → chunk-UNCRJBT3.js} +31 -7
- package/dist/cli-delegate/{chunk-2DK2VJWG.js → chunk-WGXTVKCQ.js} +20 -6
- package/dist/cli-delegate/chunk-YDPILCOL.js +152 -0
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +90 -56
- package/dist/cli-delegate/cmd_doctor.js +7 -5
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +9 -7
- package/dist/cli-delegate/cmd_fleet.js +4 -2
- package/dist/cli-delegate/cmd_handoff.js +4 -4
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +4 -2
- package/dist/cli-delegate/cmd_prune.js +10 -8
- package/dist/cli-delegate/cmd_route_audit.js +2 -2
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +28 -2
- package/dist/cli-delegate/cmd_settings_migrate.js +9 -7
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +10 -8
- package/dist/cli-delegate/cmd_uninstall.js +16 -13
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +12 -10
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +85 -38
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +10 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +8 -6
- package/dist/hooks/dispatch.js +1832 -1007
- package/dist/install/claudeRuleRewrite.js +14 -3
- package/dist/install/conflict.js +60 -10
- package/dist/install/conflictTracker.js +218 -0
- package/dist/install/fsPrimitives.js +54 -0
- package/dist/install/install.mjs +2007 -1481
- package/dist/install/manifestFiles.js +259 -0
- package/dist/install/preflight.js +14 -2
- package/dist/install/preserve.js +157 -0
- package/dist/install/recordedOwnership.js +132 -0
- package/dist/install/txlog.js +11 -2
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +398 -39
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +3 -2
- package/dist/scripts/_lib/fs_atomic.js +167 -0
- package/dist/scripts/_lib/installed_tools.js +460 -0
- package/dist/scripts/_lib/lean_projection_mode.js +3 -2
- package/dist/scripts/_lib/settings_renamed_keys.js +78 -0
- package/dist/server/routes/install.js +8 -0
- package/dist/server/routes/wizard.js +9 -3
- package/dist/server/schemas/settings.js +17 -5
- package/dist/shared/missionExecution.js +97 -0
- package/dist/ui/assets/{index-D0jaCRPM.js → index-DH1xc62v.js} +17 -17
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +103 -0
- package/docs/contracts/settings-classes.md +26 -7
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +57 -0
- package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +102 -0
- package/docs/guidelines/design-fidelity-routing.md +29 -0
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +62 -2
- package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +1 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +1 -0
- package/src/config/agent-settings.template.yml +139 -27
- package/src/config/auto-rule-budget.json +16 -0
- package/src/config/ci-local-parity.yml +18 -5
- package/src/config/continuity-surface.json +21 -0
- package/src/config/gate-coverage.yml +146 -13
- package/src/config/gate-violation-baselines.json +6 -6
- package/src/config/hook-token-budget.json +2 -0
- package/src/config/loop-surfaces.yaml +215 -0
- package/src/config/platform-anchor.json +3 -2
- package/src/config/release-gate-locality.yml +11 -0
- package/src/config/routing-coverage-seed.json +18 -4
- package/src/config/rule-enforcement-baseline.json +0 -1
- package/src/install/claudeRuleRewrite.ts +16 -2
- package/src/install/conflict.ts +65 -9
- package/src/install/conflictTracker.ts +299 -0
- package/src/install/fsPrimitives.ts +54 -0
- package/src/install/manifestFiles.ts +312 -0
- package/src/install/preflight.ts +16 -2
- package/src/install/preserve.ts +205 -0
- package/src/install/recordedOwnership.ts +149 -0
- package/src/install/txlog.ts +11 -2
- package/src/install/types.ts +19 -4
- package/src/scripts/_cli/cmd_conformance.ts +88 -15
- package/src/scripts/_cli/cmd_doctor.ts +4 -3
- package/src/scripts/_cli/cmd_route_explain.ts +9 -2
- package/src/scripts/_cli/cmd_settings_get.ts +44 -0
- package/src/scripts/_cli/doctor_execution.ts +90 -0
- package/src/scripts/_lib/activation_payload.ts +247 -0
- package/src/scripts/_lib/agent_settings.ts +4 -2
- package/src/scripts/_lib/authority_path.ts +102 -0
- package/src/scripts/_lib/cascade_base.ts +94 -0
- package/src/scripts/_lib/changelog_eras.ts +7 -2
- package/src/scripts/_lib/continuation_ladder.ts +149 -2
- package/src/scripts/_lib/council_transport.ts +129 -0
- package/src/scripts/_lib/delivery_ready.ts +112 -0
- package/src/scripts/_lib/forge_protection.ts +267 -0
- package/src/scripts/_lib/hook_platform_keys.ts +27 -0
- package/src/scripts/_lib/json_python_parity.ts +127 -0
- package/src/scripts/_lib/lean_projection_mode.ts +14 -3
- package/src/scripts/_lib/loop_surfaces.ts +382 -0
- package/src/scripts/_lib/mission_record.ts +190 -0
- package/src/scripts/_lib/obligation_frequency.ts +217 -0
- package/src/scripts/_lib/obligations.ts +402 -0
- package/src/scripts/_lib/orchestration_record.ts +11 -20
- package/src/scripts/_lib/release_highlights.ts +199 -10
- package/src/scripts/_lib/release_holds.ts +493 -0
- package/src/scripts/_lib/release_migration_gate.ts +184 -0
- package/src/scripts/_lib/rides_along.ts +102 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +82 -0
- package/src/scripts/_lib/test_delta.ts +166 -0
- package/src/scripts/_lib/test_provenance.ts +171 -0
- package/src/scripts/_lib/typed_op_grant.ts +246 -0
- package/src/scripts/_lib/typed_op_watch.ts +185 -0
- package/src/scripts/ai_council/config.ts +8 -11
- package/src/scripts/ai_council/fallback_config.ts +5 -3
- package/src/scripts/ai_council/ownership_classes.ts +118 -0
- package/src/scripts/ask_block_census.ts +285 -15
- package/src/scripts/check_enforcement_matrix.ts +624 -0
- package/src/scripts/check_gate_reachability.ts +173 -10
- package/src/scripts/check_generator_sync.ts +954 -0
- package/src/scripts/check_preamble_payload_budget.ts +75 -2
- package/src/scripts/check_release_highlights.ts +33 -1
- package/src/scripts/check_release_holds.ts +567 -0
- package/src/scripts/check_rule_projection_integrity.ts +22 -12
- package/src/scripts/check_test_delta.ts +294 -0
- package/src/scripts/check_test_weakening.ts +299 -0
- package/src/scripts/closure_scan.ts +333 -0
- package/src/scripts/compile_hook_manifest.ts +43 -3
- package/src/scripts/council_record_shape.ts +209 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +88 -9
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/design_pass_hook.ts +128 -3
- package/src/scripts/hooks/evidence_independence.ts +96 -0
- package/src/scripts/hooks/memory_recall_hook.ts +540 -0
- package/src/scripts/hooks/obligation_settle_hook.ts +182 -0
- package/src/scripts/hooks/rule_inject_hook.ts +49 -1
- package/src/scripts/hooks/run_continuation_hook.ts +17 -20
- package/src/scripts/hooks_doctor.ts +85 -0
- package/src/scripts/hooks_status.ts +19 -0
- package/src/scripts/install.ts +106 -206
- package/src/scripts/janitor.ts +7 -0
- package/src/scripts/lint_decision_classes.ts +464 -0
- package/src/scripts/lint_hook_manifest.ts +11 -0
- package/src/scripts/lint_major_migration_sections.ts +450 -0
- package/src/scripts/lint_plan_risk_register.ts +47 -3
- package/src/scripts/lint_roadmap_blockers.ts +61 -0
- package/src/scripts/lint_roadmap_producers.ts +202 -0
- package/src/scripts/measure_rule_budget.ts +101 -5
- package/src/scripts/new_roadmap.ts +37 -0
- package/src/scripts/orchestration_record.ts +0 -5
- package/src/scripts/release.ts +14 -98
- package/src/scripts/release_drill.ts +267 -1
- package/src/scripts/release_publication.ts +51 -0
- package/src/scripts/report_enforcement_drift.ts +566 -0
- package/src/scripts/report_host_injection_effect.ts +3 -11
- package/src/scripts/report_standing_payload_by_host.ts +26 -152
- package/src/scripts/schemas/agent-settings.schema.json +23 -0
- package/src/scripts/schemas/command.schema.json +4 -0
- package/src/scripts/scope_growth.ts +219 -0
- package/src/scripts/trigger_eval_grandfather.json +0 -1
- package/src/scripts/ui_conformance_probe.ts +622 -0
- package/src/server/schemas/settings.ts +31 -7
- package/src/shared/missionExecution.ts +126 -0
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
package/CONTRIBUTING.md
CHANGED
|
@@ -101,6 +101,15 @@ task lint-skills # ./scripts-run src/scripts/skill_linter --all
|
|
|
101
101
|
- Keep commits focused. Split mechanical renames from logic changes.
|
|
102
102
|
- Open the PR against `main` with a short description of the change,
|
|
103
103
|
motivation, and any notes for reviewers.
|
|
104
|
+
- **Fixed a diagnosed, non-deterministic CI flake with a reusable root cause?**
|
|
105
|
+
Add a `Flake-diagnosis:` trailer to the fixing commit's body naming the
|
|
106
|
+
class in a few words, e.g. `Flake-diagnosis: gitignored-dir-watch-scope |
|
|
107
|
+
parallel writes to an unrelated ignored dir trip a whole-worktree witness`.
|
|
108
|
+
Scope it narrowly — a diagnosed, non-deterministic failure whose root cause
|
|
109
|
+
could plausibly recur, never a deterministic bug or an unexplained one — so
|
|
110
|
+
the convention stays a one-line note, not a registry. Search prior
|
|
111
|
+
diagnoses with `git log --all --grep="Flake-diagnosis:"` before
|
|
112
|
+
re-investigating a failure shape from scratch.
|
|
104
113
|
|
|
105
114
|
### Branch names, PR text and commit messages are a gated surface
|
|
106
115
|
|
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [](https://www.npmjs.com/package/@event4u/agent-config) [](https://glama.ai/mcp/servers/event4u-app/agent-config) [](https://mcptoplist.com/server/glama%2Fevent4u-app%2Fagent-config)
|
|
6
6
|
|
|
7
|
-
[](dist/agent-src/skills/) [](dist/agent-src/skills/) [](dist/agent-src/rules/) [](dist/agent-src/commands/) [](docs/guidelines/) [](dist/agent-src/personas/) [](dist/agent-src/personas/advisors/) <!-- claim:published-artifact-counts -->
|
|
8
8
|
|
|
9
|
-
<sub>**How these are counted** — one canonical counter, `agent-config` → `update_counts --check`, re-derives all six from the tree and fails CI on a drift of one. Two bases are not what the linked directory shows, so they are stated here rather than left to be inferred: **Commands 202** counts every command file **recursively** (the linked directory holds 61 at its top level), and **Rules
|
|
9
|
+
<sub>**How these are counted** — one canonical counter, `agent-config` → `update_counts --check`, re-derives all six from the tree and fails CI on a drift of one. Two bases are not what the linked directory shows, so they are stated here rather than left to be inferred: **Commands 202** counts every command file **recursively** (the linked directory holds 61 at its top level), and **Rules 121** counts the **source** rules while the linked projection holds 120 — one rule is dormant and is not projected. **Personas 29** excludes the directory README. Counts are of files and directories: none of them measures quality, activation, or adoption. <!-- claim:published-artifact-counts --></sub>
|
|
10
10
|
|
|
11
11
|
**Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
|
|
12
12
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: high
|
|
3
3
|
name: analyze-inbox
|
|
4
|
+
produces_roadmap: true
|
|
4
5
|
pack: analysis-workbench
|
|
5
6
|
visibility: internal
|
|
6
7
|
sub: inbox
|
|
@@ -1177,3 +1178,28 @@ prompted this section could not be given.
|
|
|
1177
1178
|
orchestrator.
|
|
1178
1179
|
- Collapse a multi-topic round into fewer artifacts than it had topics without
|
|
1179
1180
|
saying, per topic, where its content went.
|
|
1181
|
+
## Closure — the last step, always
|
|
1182
|
+
|
|
1183
|
+
```
|
|
1184
|
+
THIS COMMAND PRODUCES A ROADMAP, SO IT ENDS IN CLOSURE.
|
|
1185
|
+
NEVER HAND BACK A PLAN CARRYING A DECISION PLANNING COULD HAVE CLOSED.
|
|
1186
|
+
```
|
|
1187
|
+
|
|
1188
|
+
Declared by `produces_roadmap: true` in the frontmatter and enforced by
|
|
1189
|
+
`lint_roadmap_producers`: a producer that does not end here reds CI.
|
|
1190
|
+
|
|
1191
|
+
Read `planning.closure_pass` (missing = `true`). When active, run
|
|
1192
|
+
[`/challenge-me closure`](../../../meta/challenge-me/closure/command.md) on the
|
|
1193
|
+
roadmap this command just produced, before handing back:
|
|
1194
|
+
|
|
1195
|
+
```bash
|
|
1196
|
+
./scripts-run src/scripts/closure_scan <roadmap-path>
|
|
1197
|
+
```
|
|
1198
|
+
|
|
1199
|
+
Every detected decision is resolved at the lowest rung that owns it and written
|
|
1200
|
+
into the roadmap's `## Decisions` table. Owner-owned residue is asked **now**,
|
|
1201
|
+
one question per turn, and its answer recorded — never handed back as *"the
|
|
1202
|
+
open questions are in the file"*.
|
|
1203
|
+
|
|
1204
|
+
An explicit *just write it* drops the pass and is recorded as a **bypass** on
|
|
1205
|
+
its own axis, never as an absent closure. A mission grant is not a bypass.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: medium
|
|
3
3
|
name: analyze-roadmap-repos
|
|
4
|
+
produces_roadmap: true
|
|
4
5
|
pack: analysis-workbench
|
|
5
6
|
visibility: internal
|
|
6
7
|
sub: roadmap-repos
|
|
@@ -127,3 +128,29 @@ any other.
|
|
|
127
128
|
- Script: `src/scripts/harvest_reference_tokens.ts` — discovery, the only one.
|
|
128
129
|
- Rule: [`source-confidentiality`](../../../../rules/source-confidentiality.md)
|
|
129
130
|
— why the identities stay in the gitignored area.
|
|
131
|
+
|
|
132
|
+
## Closure — the last step, always
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
THIS COMMAND PRODUCES A ROADMAP, SO IT ENDS IN CLOSURE.
|
|
136
|
+
NEVER HAND BACK A PLAN CARRYING A DECISION PLANNING COULD HAVE CLOSED.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Declared by `produces_roadmap: true` in the frontmatter and enforced by
|
|
140
|
+
`lint_roadmap_producers`: a producer that does not end here reds CI.
|
|
141
|
+
|
|
142
|
+
Read `planning.closure_pass` (missing = `true`). When active, run
|
|
143
|
+
[`/challenge-me closure`](../../../meta/challenge-me/closure/command.md) on the
|
|
144
|
+
roadmap this command just produced, before handing back:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
./scripts-run src/scripts/closure_scan <roadmap-path>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Every detected decision is resolved at the lowest rung that owns it and written
|
|
151
|
+
into the roadmap's `## Decisions` table. Owner-owned residue is asked **now**,
|
|
152
|
+
one question per turn, and its answer recorded — never handed back as *"the
|
|
153
|
+
open questions are in the file"*.
|
|
154
|
+
|
|
155
|
+
An explicit *just write it* drops the pass and is recorded as a **bypass** on
|
|
156
|
+
its own axis, never as an absent closure. A mission grant is not a bypass.
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: medium
|
|
3
|
+
name: challenge-me-closure
|
|
4
|
+
pack: product-reasoning
|
|
5
|
+
visibility: internal
|
|
6
|
+
cluster: challenge-me
|
|
7
|
+
sub: closure
|
|
8
|
+
description: "Close every foreseeable decision in a roadmap before execution — detect the open ones, resolve each at the lowest rung that owns it, and write the answers into a `## Decisions` table."
|
|
9
|
+
argument-hint: "<roadmap-path>"
|
|
10
|
+
suggestion:
|
|
11
|
+
eligible: false
|
|
12
|
+
rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
|
|
13
|
+
workspaces:
|
|
14
|
+
- agent-config-maintainer
|
|
15
|
+
packs:
|
|
16
|
+
- product-reasoning
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# /challenge-me closure
|
|
20
|
+
|
|
21
|
+
> Take a roadmap that is about to enter execution and make it an **execution
|
|
22
|
+
> contract**: every foreseeable decision closed, the closing done council-first,
|
|
23
|
+
> the owner reached only for product, business, taste or destructive residue.
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
A QUESTION PLANNING COULD HAVE CLOSED AND EXECUTION MEETS INSTEAD IS A DEFECT.
|
|
27
|
+
RESOLVE AT THE LOWEST RUNG THAT OWNS THE DECISION. THE OWNER IS THE LAST RUNG,
|
|
28
|
+
NEVER THE FIRST, AND NEVER REACHED FOR A TECHNICAL DECISION AT ALL.
|
|
29
|
+
NEVER ASK ABOUT PR TOPOLOGY. NEVER RAISE MERGE UNLESS THE OWNER RAISED IT.
|
|
30
|
+
EVERY ANSWER IS WRITTEN INTO `## Decisions` BEFORE THE RUN STARTS.
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Input is a roadmap path. Output is the same file with a `## Decisions` table
|
|
34
|
+
and, where residue was genuinely owner-owned, at most one host-native ask per
|
|
35
|
+
turn whose answer is recorded immediately.
|
|
36
|
+
|
|
37
|
+
## Step 1 — Detect
|
|
38
|
+
|
|
39
|
+
Run the deterministic detector. It finds and classifies; it resolves nothing.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
./scripts-run src/scripts/closure_scan <roadmap-path>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
It reports one row per open decision: an id, a line, a detector kind, and the
|
|
46
|
+
**ownership class** that kind maps to. The families are `tbd`,
|
|
47
|
+
`unpicked-alternative`, `unchecked-assumption`, `missing-verify`,
|
|
48
|
+
`ambiguous-acceptance`, `contradictory`, `product-semantics`, `typed-op` and
|
|
49
|
+
`spend`.
|
|
50
|
+
|
|
51
|
+
Then add what a scanner cannot see, reading the file yourself:
|
|
52
|
+
|
|
53
|
+
- the prose checks `lint_roadmap_complexity` already runs — vague steps, human
|
|
54
|
+
gates in steps, headings or exit criteria, external-population gates;
|
|
55
|
+
- an **unresolved typed-op need**: work that cannot finish without an operation
|
|
56
|
+
from the typed vocabulary for which no grant exists;
|
|
57
|
+
- a **product semantics** fork the scanner's phrasing missed — two valid
|
|
58
|
+
user-visible outcomes with no source of truth to pick between them.
|
|
59
|
+
|
|
60
|
+
`--rows` prints the `## Decisions` skeleton; `--json` is the machine form.
|
|
61
|
+
|
|
62
|
+
## Step 2 — Resolve, in this order, stopping at the first rung that can
|
|
63
|
+
|
|
64
|
+
For each detected decision, in order, and never skipping a rung upward:
|
|
65
|
+
|
|
66
|
+
1. **Evidence** — the tree answers it. Read the file, run the probe, check the
|
|
67
|
+
schema. A decision the code already made is not a decision.
|
|
68
|
+
2. **Convention, ADR or contract** — a recorded rule answers it. Cite the ADR
|
|
69
|
+
number or the contract path.
|
|
70
|
+
3. **The agent** — reversible and inside the stated convention
|
|
71
|
+
(`deterministic`, `reversible-technical`). Pick, and say why.
|
|
72
|
+
4. **An independent session** — a second instance with no stake in the first
|
|
73
|
+
answer. This is the first rung for `contested-technical`.
|
|
74
|
+
5. **The council** — `agent-config council:status` decides availability, never
|
|
75
|
+
the project tree. `critical-technical` targets a **provider-diverse**
|
|
76
|
+
council; with one provider configured the class degrades to owner-confirm of
|
|
77
|
+
the agent's proposal rather than one model reviewing itself.
|
|
78
|
+
6. **The team** — where a council is unavailable and `ai_team` is configured.
|
|
79
|
+
7. **The owner** — **only** for `product-owned`, `business-owned` and
|
|
80
|
+
`destructive-owned`. A technical decision never reaches here, however hard
|
|
81
|
+
it is.
|
|
82
|
+
|
|
83
|
+
`spend-exhaustion` leaves the ladder entirely: it **pauses and reports** — what
|
|
84
|
+
needed the council, why the CLI rung was unavailable, the estimated spend, the
|
|
85
|
+
mission state, and what can still proceed.
|
|
86
|
+
|
|
87
|
+
## Step 3 — What is never asked
|
|
88
|
+
|
|
89
|
+
- **PR topology.** Stacked, split, one branch or five is the agent's call.
|
|
90
|
+
- **Merge intent**, unless the owner already discussed merge for this work. A
|
|
91
|
+
merge grant is a typed op the owner grants; it is not a question closure
|
|
92
|
+
invents.
|
|
93
|
+
- **A count.** "Three attempts failed, continue?" is a strategy change, never a
|
|
94
|
+
question.
|
|
95
|
+
- **A continuation.** "Shall I go on?" after a clean batch is not a decision.
|
|
96
|
+
|
|
97
|
+
## Step 4 — Write the answers down
|
|
98
|
+
|
|
99
|
+
Append or update a `## Decisions` section with one row per decision:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
| ID | ownership | resolved by | decision | evidence | revisit if |
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`ownership` is one of the eight ownership classes. `resolved by` is one of
|
|
106
|
+
`evidence`, `agent`, `independent:<session or model>`, `council:<record>`,
|
|
107
|
+
`team:<record>`, `owner`. `revisit if` names the condition that reopens it — a
|
|
108
|
+
closed decision is re-asked only when that condition became true.
|
|
109
|
+
|
|
110
|
+
`lint_decision_classes` enforces both vocabularies. Run it before handing back:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
./scripts-run src/scripts/lint_decision_classes
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Step 5 — Residue is asked now, never filed
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
OWNER-OWNED RESIDUE IS ASKED THIS TURN. ONE QUESTION PER TURN.
|
|
120
|
+
THE ANSWER IS WRITTEN INTO `## Decisions` BEFORE THE NEXT QUESTION IS PUT.
|
|
121
|
+
NEVER HAND BACK "THE FOUR OPEN QUESTIONS ARE IN FILE X" — A FILED QUESTION IS
|
|
122
|
+
AN UNCLOSED ONE WEARING A RECORD'S CLOTHES, AND THE FILE IS WHERE IT DIES.
|
|
123
|
+
NEVER HAND BACK A COUNT — "3 QUESTIONS OUTSTANDING" IS A NUMBER RENDERED WHERE
|
|
124
|
+
A DECISION BELONGS.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Ask using the host's own primitive where one exists — `agent-config
|
|
128
|
+
hooks:status` prints the shape, and the numbered text block is the named
|
|
129
|
+
fallback (see `user-interaction`). Each option carries what changes by
|
|
130
|
+
answering it, and the recommendation has exactly one source.
|
|
131
|
+
|
|
132
|
+
Two mechanical consequences, both already enforced:
|
|
133
|
+
|
|
134
|
+
- `ask_block_census` classifies a question written into a section instead of
|
|
135
|
+
asked as `file-parked`, and a count rendered where a question belongs as
|
|
136
|
+
`count-only`. Both are their own axes; neither is an ask.
|
|
137
|
+
- `lint_decision_classes` reds a `ready` roadmap carrying an unresolved marker
|
|
138
|
+
outside `## Decisions`. A question that exists only as prose in the plan is
|
|
139
|
+
exactly that marker, so the prose form cannot survive to `ready`.
|
|
140
|
+
|
|
141
|
+
**Where the residue genuinely cannot be asked** — the run is non-interactive,
|
|
142
|
+
or the answer needs something the owner has not got yet — the step is parked
|
|
143
|
+
and independent phases continue (§ 4 of the process loop), and the plan records
|
|
144
|
+
a structured `## Blockers` entry naming one of the three owner-owned classes.
|
|
145
|
+
That is the one legal file-shaped home, and it is legal because a five-field
|
|
146
|
+
blocker is decidable: recommendation, cost of the non-decision, what to do, and
|
|
147
|
+
what resolves it. A bare sentence in `## Notes` is none of those.
|
|
148
|
+
|
|
149
|
+
## Bypass
|
|
150
|
+
|
|
151
|
+
An explicit *just write it* / *skip closure* / *einfach machen* drops this pass
|
|
152
|
+
entirely. The bypass is **recorded** as a bypass — it is its own axis in the ask
|
|
153
|
+
census, not an absent closure — and it is never inferred from a mission grant,
|
|
154
|
+
an autonomy setting or momentum. Only the owner's words this turn are a bypass.
|
|
155
|
+
|
|
156
|
+
## Fixtures
|
|
157
|
+
|
|
158
|
+
Under `tests/fixtures/decision-closure/`:
|
|
159
|
+
|
|
160
|
+
| Fixture | What it must produce |
|
|
161
|
+
|---|---|
|
|
162
|
+
| `F1-technical-ambiguities.md` | twelve findings, **zero** owner questions |
|
|
163
|
+
| `F2-product-semantics.md` | **exactly one** owner question, `product-owned` |
|
|
164
|
+
| `F0-closed-plan.md` | nothing — a plan already closed |
|
|
165
|
+
| `R1-ready-unresolved.md` / `R2-ready-resolved.md` | red, then green on the same plan once the marker is recorded |
|
|
166
|
+
| `F3a-conclusive-technical.md` / `F3b-non-convergent-product.md` | no options block, then a proposal |
|
|
167
|
+
|
|
168
|
+
Each pair is required and neither half alone is evidence: a detector weakened
|
|
169
|
+
until it finds nothing passes F0 and fails F1, and one that fires on ordinary
|
|
170
|
+
prose does the reverse. F1 against F2 is the ownership discrimination — twelve
|
|
171
|
+
technical ambiguities cost the owner nothing, one product fork costs exactly
|
|
172
|
+
one question.
|
|
173
|
+
|
|
174
|
+
## See also
|
|
175
|
+
|
|
176
|
+
- [`/challenge-me`](../command.md) — the cluster head.
|
|
177
|
+
- [`/challenge-me vision`](../vision/command.md) — the interview loop this reuses.
|
|
178
|
+
- `docs/contracts/ai-council-config.md` § Decision resolution by ownership — the eight classes and their Iron Laws.
|
|
@@ -3,8 +3,8 @@ model_tier: medium
|
|
|
3
3
|
name: challenge-me
|
|
4
4
|
pack: product-reasoning
|
|
5
5
|
visibility: internal
|
|
6
|
-
description: Challenge-me orchestrator — routes to vision, with-docs
|
|
7
|
-
argument-hint: "[vision|with-docs] [flags] [seed]"
|
|
6
|
+
description: Challenge-me orchestrator — routes to vision, with-docs, closure
|
|
7
|
+
argument-hint: "[vision|with-docs|closure] [flags] [seed]"
|
|
8
8
|
cluster: challenge-me
|
|
9
9
|
type: orchestrator
|
|
10
10
|
suggestion:
|
|
@@ -32,12 +32,17 @@ enough to emit a copyable Markdown pitch.
|
|
|
32
32
|
|---|---|---|
|
|
33
33
|
| `/challenge-me vision` | `commands/challenge-me/vision.md` | Standard variant — interrogate a fuzzy plan / idea / ticket draft to 95% confidence, emit a vision pitch |
|
|
34
34
|
| `/challenge-me with-docs` | `commands/challenge-me/with-docs.md` | Doc-aware variant — same flow plus session glossary against `CONTEXT.md`, load-bearing claim-vs-code verification, optional `CONTEXT.md` patch + ADR candidates in the pitch |
|
|
35
|
+
| `/challenge-me closure` | `commands/challenge-me/closure.md` | Plan-closure variant — take a roadmap about to enter execution, detect every open decision, resolve each at the lowest rung that owns it, and write the answers into a `## Decisions` table |
|
|
35
36
|
|
|
36
37
|
## When to pick which
|
|
37
38
|
|
|
38
39
|
- **`vision`** — greenfield idea, fresh ticket draft, or a plan with no
|
|
39
40
|
existing project glossary / domain docs. Default for "challenge me on
|
|
40
41
|
this plan".
|
|
42
|
+
- **`closure`** — the input is a **roadmap path**, not a fuzzy idea, and the
|
|
43
|
+
goal is an execution contract rather than a pitch. Pick it when a plan is
|
|
44
|
+
about to be executed: it closes the decisions a twelve-hour run would
|
|
45
|
+
otherwise meet mid-flight.
|
|
41
46
|
- **`with-docs`** — the project has `CONTEXT.md`, an ADR directory
|
|
42
47
|
(`docs/adr/`, `docs/decisions/`, `agents/decisions/`), or the user
|
|
43
48
|
uses domain terms that may already be defined. The variant catches
|
|
@@ -54,6 +59,8 @@ enough to emit a copyable Markdown pitch.
|
|
|
54
59
|
> 1. vision — standard 95%-confidence interview, emits a copyable pitch
|
|
55
60
|
> 2. with-docs — same flow, but checks the seed against `CONTEXT.md` /
|
|
56
61
|
> ADRs and emits an optional doc patch in the pitch
|
|
62
|
+
> 3. closure — take a roadmap path and close every open decision in it
|
|
63
|
+
> before execution, recording the answers in `## Decisions`
|
|
57
64
|
|
|
58
65
|
## In-interview triggers (both sub-commands)
|
|
59
66
|
|
|
@@ -279,12 +279,32 @@ The host is the convener **and** the skeptic — never paraphrase
|
|
|
279
279
|
council output as host reasoning, and never auto-promote convergence
|
|
280
280
|
to correctness.
|
|
281
281
|
|
|
282
|
-
### 5b. Translate verdicts into user options
|
|
282
|
+
### 5b. Translate verdicts into user options — when the verdict is owed to the owner
|
|
283
283
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
284
|
+
```
|
|
285
|
+
THE OPTIONS BLOCK IS CONDITIONAL, AND THE CONDITION IS OWNERSHIP.
|
|
286
|
+
A CONCLUSIVE **TECHNICAL** VERDICT EMITS NO OWNER-FACING OPTIONS BLOCK —
|
|
287
|
+
IT IS A RESOLUTION, AND HANDING IT OVER AS OPTIONS ROUTES A TECHNICAL
|
|
288
|
+
DECISION TO A PERSON BECAUSE IT WAS HARD (ADR-268 § 10).
|
|
289
|
+
THE BLOCK IS OWED WHEN THE VERDICT IS OWNER-OWNED — `product-owned`,
|
|
290
|
+
`business-owned`, `destructive-owned` — OR WHEN THE COUNCIL DID NOT
|
|
291
|
+
CONVERGE. THEN IT CARRIES THE COUNCIL'S PROPOSAL FOR THE OWNER TO CONFIRM.
|
|
292
|
+
CONVERGENCE IS READ FROM THE RECORD, NEVER INFERRED: A RECORD THAT DOES
|
|
293
|
+
NOT SAY WHETHER ITS MEMBERS CONVERGED IS ITSELF THE FINDING.
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
A conclusive technical verdict still produces the full record — question,
|
|
297
|
+
evidence, member positions, convergence, verdict, confidence, revisit
|
|
298
|
+
condition — and the run continues on it. The resolution is written into the
|
|
299
|
+
consuming artifact's `## Decisions` table with `resolved by: council:<record>`.
|
|
300
|
+
|
|
301
|
+
`./scripts-run src/scripts/council_record_shape <record.md>` checks a record
|
|
302
|
+
against this contract in both directions.
|
|
303
|
+
|
|
304
|
+
When the block IS owed, it is a numbered-options block carrying the host
|
|
305
|
+
verdict per finding (e.g. `1. [accept] Apply finding 1 — <patch summary>`,
|
|
306
|
+
`2. [reject] Skip finding 2 — <reason>` — user can override), with "discard
|
|
307
|
+
council input" always present as an option.
|
|
288
308
|
|
|
289
309
|
### 6. Hard floor — text only
|
|
290
310
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: feature-plan
|
|
4
|
+
produces_roadmap: true
|
|
4
5
|
pack: engineering-base
|
|
5
6
|
visibility: internal
|
|
6
7
|
cluster: feature
|
|
@@ -24,7 +25,7 @@ packs:
|
|
|
24
25
|
|
|
25
26
|
Before gathering, run the plan-confidence gate per
|
|
26
27
|
[`plan-confidence-gate`](../../contexts/execution/plan-confidence-gate.md):
|
|
27
|
-
read `planning.
|
|
28
|
+
read `planning.closure_pass` (missing = `true`), do the codebase
|
|
28
29
|
lookup, and assess the four 95%-conditions — **seed = the provided
|
|
29
30
|
description** (when none was provided, step 1's ask supplies it first).
|
|
30
31
|
Confident → single marker line, continue with step 1. Uncertain → route
|
|
@@ -389,3 +390,29 @@ What's next?
|
|
|
389
390
|
- [`role-contracts`](../../guidelines/agent-infra/role-contracts.md#po) — PO mode output contract (Goal / Assumptions / Acceptance criteria / Impacted modules / Risks / Open questions for stakeholder)
|
|
390
391
|
- [`refine-ticket`](refine-ticket.md) — optional upstream step: run first when the input is a Jira/Linear ticket rather than a fresh idea
|
|
391
392
|
- [`estimate-ticket`](estimate-ticket.md) — sibling of `refine-ticket`; size + risk + split recommendation for an already-refined ticket
|
|
393
|
+
|
|
394
|
+
## Closure — the last step, always
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
THIS COMMAND PRODUCES A ROADMAP, SO IT ENDS IN CLOSURE.
|
|
398
|
+
NEVER HAND BACK A PLAN CARRYING A DECISION PLANNING COULD HAVE CLOSED.
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Declared by `produces_roadmap: true` in the frontmatter and enforced by
|
|
402
|
+
`lint_roadmap_producers`: a producer that does not end here reds CI.
|
|
403
|
+
|
|
404
|
+
Read `planning.closure_pass` (missing = `true`). When active, run
|
|
405
|
+
[`/challenge-me closure`](../../../meta/challenge-me/closure/command.md) on the
|
|
406
|
+
roadmap this command just produced, before handing back:
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
./scripts-run src/scripts/closure_scan <roadmap-path>
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
Every detected decision is resolved at the lowest rung that owns it and written
|
|
413
|
+
into the roadmap's `## Decisions` table. Owner-owned residue is asked **now**,
|
|
414
|
+
one question per turn, and its answer recorded — never handed back as *"the
|
|
415
|
+
open questions are in the file"*.
|
|
416
|
+
|
|
417
|
+
An explicit *just write it* drops the pass and is recorded as a **bypass** on
|
|
418
|
+
its own axis, never as an absent closure. A mission grant is not a bypass.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: feature-roadmap
|
|
4
|
+
produces_roadmap: true
|
|
4
5
|
pack: engineering-base
|
|
5
6
|
visibility: internal
|
|
6
7
|
cluster: feature
|
|
@@ -56,7 +57,7 @@ Stop.
|
|
|
56
57
|
|
|
57
58
|
**Confidence gate (Gate C)** — after reading the feature plan, run
|
|
58
59
|
[`plan-confidence-gate`](../../contexts/execution/plan-confidence-gate.md)
|
|
59
|
-
with the **feature document as seed** (`planning.
|
|
60
|
+
with the **feature document as seed** (`planning.closure_pass`,
|
|
60
61
|
missing = `true`). All four 95%-conditions hold → single marker line,
|
|
61
62
|
continue. A gap that would change the phases or acceptance criteria →
|
|
62
63
|
`/challenge-me vision` interview (or inline degrade protocol) **before**
|
|
@@ -239,3 +240,29 @@ What's next?
|
|
|
239
240
|
## See also
|
|
240
241
|
|
|
241
242
|
- [`role-contracts`](../../guidelines/agent-infra/role-contracts.md#planner) — Planner mode output contract (Goal / Constraints / Option set / Recommendation / Dependencies / Rollback)
|
|
243
|
+
|
|
244
|
+
## Closure — the last step, always
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
THIS COMMAND PRODUCES A ROADMAP, SO IT ENDS IN CLOSURE.
|
|
248
|
+
NEVER HAND BACK A PLAN CARRYING A DECISION PLANNING COULD HAVE CLOSED.
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Declared by `produces_roadmap: true` in the frontmatter and enforced by
|
|
252
|
+
`lint_roadmap_producers`: a producer that does not end here reds CI.
|
|
253
|
+
|
|
254
|
+
Read `planning.closure_pass` (missing = `true`). When active, run
|
|
255
|
+
[`/challenge-me closure`](../../../meta/challenge-me/closure/command.md) on the
|
|
256
|
+
roadmap this command just produced, before handing back:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
./scripts-run src/scripts/closure_scan <roadmap-path>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Every detected decision is resolved at the lowest rung that owns it and written
|
|
263
|
+
into the roadmap's `## Decisions` table. Owner-owned residue is asked **now**,
|
|
264
|
+
one question per turn, and its answer recorded — never handed back as *"the
|
|
265
|
+
open questions are in the file"*.
|
|
266
|
+
|
|
267
|
+
An explicit *just write it* drops the pass and is recorded as a **bypass** on
|
|
268
|
+
its own axis, never as an absent closure. A mission grant is not a bypass.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: implement-ticket
|
|
4
|
+
produces_roadmap: true
|
|
4
5
|
pack: engineering-base
|
|
5
6
|
intent: "Implement a tracker ticket end-to-end from its id"
|
|
6
7
|
routes_to: [refine-ticket, feature-planning]
|
|
@@ -200,3 +201,29 @@ permission-gated.
|
|
|
200
201
|
|
|
201
202
|
- [`refine-ticket`](refine-ticket.md), [`feature-plan`](feature-plan.md), [`tests-execute`](tests-execute.md), [`review-changes`](review-changes.md) — skills the directives delegate to
|
|
202
203
|
- [`commit`](commit.md), [`create-pr`](create-pr.md) — post-delivery commands the user runs explicitly
|
|
204
|
+
|
|
205
|
+
## Closure — the last step, always
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
THIS COMMAND PRODUCES A ROADMAP, SO IT ENDS IN CLOSURE.
|
|
209
|
+
NEVER HAND BACK A PLAN CARRYING A DECISION PLANNING COULD HAVE CLOSED.
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Declared by `produces_roadmap: true` in the frontmatter and enforced by
|
|
213
|
+
`lint_roadmap_producers`: a producer that does not end here reds CI.
|
|
214
|
+
|
|
215
|
+
Read `planning.closure_pass` (missing = `true`). When active, run
|
|
216
|
+
[`/challenge-me closure`](../../meta/challenge-me/closure/command.md) on the
|
|
217
|
+
roadmap this command just produced, before handing back:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
./scripts-run src/scripts/closure_scan <roadmap-path>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Every detected decision is resolved at the lowest rung that owns it and written
|
|
224
|
+
into the roadmap's `## Decisions` table. Owner-owned residue is asked **now**,
|
|
225
|
+
one question per turn, and its answer recorded — never handed back as *"the
|
|
226
|
+
open questions are in the file"*.
|
|
227
|
+
|
|
228
|
+
An explicit *just write it* drops the pass and is recorded as a **bypass** on
|
|
229
|
+
its own axis, never as an absent closure. A mission grant is not a bypass.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
model_tier: inherit
|
|
3
3
|
name: jira-ticket
|
|
4
|
+
produces_roadmap: true
|
|
4
5
|
pack: product-basic
|
|
5
6
|
intent: "Read a Jira ticket from the branch and implement the feature or fix the bug"
|
|
6
7
|
routes_to: [jira-integration, feature-planning]
|
|
@@ -82,3 +83,29 @@ packs:
|
|
|
82
83
|
## See also
|
|
83
84
|
|
|
84
85
|
- [`role-contracts`](../guidelines/agent-infra/role-contracts.md#developer) — Developer mode output contract (Goal / Plan / Changes / Tests / Open questions)
|
|
86
|
+
|
|
87
|
+
## Closure — the last step, always
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
THIS COMMAND PRODUCES A ROADMAP, SO IT ENDS IN CLOSURE.
|
|
91
|
+
NEVER HAND BACK A PLAN CARRYING A DECISION PLANNING COULD HAVE CLOSED.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Declared by `produces_roadmap: true` in the frontmatter and enforced by
|
|
95
|
+
`lint_roadmap_producers`: a producer that does not end here reds CI.
|
|
96
|
+
|
|
97
|
+
Read `planning.closure_pass` (missing = `true`). When active, run
|
|
98
|
+
[`/challenge-me closure`](../../meta/challenge-me/closure/command.md) on the
|
|
99
|
+
roadmap this command just produced, before handing back:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
./scripts-run src/scripts/closure_scan <roadmap-path>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Every detected decision is resolved at the lowest rung that owns it and written
|
|
106
|
+
into the roadmap's `## Decisions` table. Owner-owned residue is asked **now**,
|
|
107
|
+
one question per turn, and its answer recorded — never handed back as *"the
|
|
108
|
+
open questions are in the file"*.
|
|
109
|
+
|
|
110
|
+
An explicit *just write it* drops the pass and is recorded as a **bypass** on
|
|
111
|
+
its own axis, never as an absent closure. A mission grant is not a bypass.
|
|
@@ -276,6 +276,35 @@ fallback structure defined in `/create-pr:description-only`. NEVER invent a cust
|
|
|
276
276
|
title and body as copyable blocks and ask for adjustments before
|
|
277
277
|
proceeding. The user reviews and adjusts the content in that step.
|
|
278
278
|
|
|
279
|
+
### 2a. Scope delta — what grew, and why it was the agent's
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
AGENT-OWNED SCOPE GROWTH IS RECORDED IN THE PR BODY. ONE LINE PER ITEM.
|
|
283
|
+
GROWTH DONE AND NOT RECORDED IS INDISTINGUISHABLE FROM SCOPE CREEP.
|
|
284
|
+
A FOLLOW-UP ARTIFACT IS NAMED HERE TOO — IT IS WHAT THE MISSION DID NOT ABSORB.
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Where the run did work beyond the literal task, add a `## Scope delta` section
|
|
288
|
+
to the body — one line per item, naming what grew and which row of the
|
|
289
|
+
agent-owned list it matched (a necessary internal refactor · a missing test on
|
|
290
|
+
a touched path · a regression on a touched path · a small dependency
|
|
291
|
+
adjustment · a local API change inside defined semantics · a Boy-Scout cleanup
|
|
292
|
+
that is small, local, low blast radius, testable and carries no new product
|
|
293
|
+
decision). Full enumeration and the council / owner rows:
|
|
294
|
+
[`scope-mechanics`](../../../../agent-src/contexts/authority/scope-mechanics.md)
|
|
295
|
+
section Scope growth.
|
|
296
|
+
|
|
297
|
+
`./scripts-run src/scripts/scope_growth "<one-line description>"` classifies a
|
|
298
|
+
single item when the row is not obvious. `unknown` is a real verdict: growth
|
|
299
|
+
nothing classifies is growth nobody decided, and it does not silently become
|
|
300
|
+
agent work.
|
|
301
|
+
|
|
302
|
+
A larger unrelated opportunity is **not** a scope delta. It is a follow-up
|
|
303
|
+
artifact, named in the same section under *Not absorbed* with its roadmap path,
|
|
304
|
+
because a mission delivering everything it met would deliver none of it.
|
|
305
|
+
|
|
306
|
+
Omit the section entirely when the diff is the task and nothing grew.
|
|
307
|
+
|
|
279
308
|
### 2b. Council review — explicitly excluded
|
|
280
309
|
|
|
281
310
|
`/create-pr` does **not** prompt for council review, even when
|