@pilotspace/add 1.14.0 → 1.16.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/CHANGELOG.md +195 -1
- package/README.md +70 -3
- package/THIRD_PARTY_NOTICES.md +41 -0
- package/agents/add-advisor.md +31 -0
- package/agents/add-build.md +29 -0
- package/agents/add-design.md +32 -0
- package/agents/add-persona.md +31 -0
- package/agents/add-verify.md +34 -0
- package/bin/cli.js +615 -54
- package/docs/02-the-flow.md +1 -1
- package/docs/03-step-1-specify.md +4 -0
- package/docs/04-step-2-scenarios.md +4 -0
- package/docs/06-step-4-tests.md +4 -0
- package/docs/08-step-6-verify.md +7 -0
- package/docs/18-personas.md +80 -0
- package/docs/add-milestone-task-lifecycle.png +0 -0
- package/docs/add-task-growth-wheel.png +0 -0
- package/docs/appendix-c-glossary.md +5 -1
- package/package.json +4 -1
- package/personas-teacher/LICENSE +21 -0
- package/personas-teacher/README.md +1067 -0
- package/personas-teacher/VENDOR.md +13 -0
- package/personas-teacher/academic/academic-anthropologist.md +125 -0
- package/personas-teacher/academic/academic-geographer.md +127 -0
- package/personas-teacher/academic/academic-historian.md +123 -0
- package/personas-teacher/academic/academic-narratologist.md +118 -0
- package/personas-teacher/academic/academic-psychologist.md +118 -0
- package/personas-teacher/design/design-brand-guardian.md +322 -0
- package/personas-teacher/design/design-image-prompt-engineer.md +236 -0
- package/personas-teacher/design/design-inclusive-visuals-specialist.md +71 -0
- package/personas-teacher/design/design-persona-walkthrough.md +272 -0
- package/personas-teacher/design/design-ui-designer.md +383 -0
- package/personas-teacher/design/design-ux-architect.md +469 -0
- package/personas-teacher/design/design-ux-researcher.md +329 -0
- package/personas-teacher/design/design-visual-storyteller.md +149 -0
- package/personas-teacher/design/design-whimsy-injector.md +438 -0
- package/personas-teacher/divisions.json +21 -0
- package/personas-teacher/engineering/engineering-ai-data-remediation-engineer.md +211 -0
- package/personas-teacher/engineering/engineering-ai-engineer.md +146 -0
- package/personas-teacher/engineering/engineering-autonomous-optimization-architect.md +107 -0
- package/personas-teacher/engineering/engineering-backend-architect.md +236 -0
- package/personas-teacher/engineering/engineering-cms-developer.md +536 -0
- package/personas-teacher/engineering/engineering-code-reviewer.md +76 -0
- package/personas-teacher/engineering/engineering-codebase-onboarding-engineer.md +173 -0
- package/personas-teacher/engineering/engineering-data-engineer.md +306 -0
- package/personas-teacher/engineering/engineering-database-optimizer.md +176 -0
- package/personas-teacher/engineering/engineering-devops-automator.md +376 -0
- package/personas-teacher/engineering/engineering-drupal-shopping-cart.md +360 -0
- package/personas-teacher/engineering/engineering-email-intelligence-engineer.md +353 -0
- package/personas-teacher/engineering/engineering-embedded-firmware-engineer.md +173 -0
- package/personas-teacher/engineering/engineering-feishu-integration-developer.md +598 -0
- package/personas-teacher/engineering/engineering-filament-optimization-specialist.md +283 -0
- package/personas-teacher/engineering/engineering-frontend-developer.md +225 -0
- package/personas-teacher/engineering/engineering-git-workflow-master.md +84 -0
- package/personas-teacher/engineering/engineering-incident-response-commander.md +444 -0
- package/personas-teacher/engineering/engineering-it-service-manager.md +561 -0
- package/personas-teacher/engineering/engineering-minimal-change-engineer.md +207 -0
- package/personas-teacher/engineering/engineering-mobile-app-builder.md +493 -0
- package/personas-teacher/engineering/engineering-multi-agent-systems-architect.md +600 -0
- package/personas-teacher/engineering/engineering-orgscript-engineer.md +113 -0
- package/personas-teacher/engineering/engineering-prompt-engineer.md +202 -0
- package/personas-teacher/engineering/engineering-rapid-prototyper.md +462 -0
- package/personas-teacher/engineering/engineering-senior-developer.md +176 -0
- package/personas-teacher/engineering/engineering-software-architect.md +112 -0
- package/personas-teacher/engineering/engineering-solidity-smart-contract-engineer.md +522 -0
- package/personas-teacher/engineering/engineering-sre.md +90 -0
- package/personas-teacher/engineering/engineering-technical-writer.md +393 -0
- package/personas-teacher/engineering/engineering-voice-ai-integration-engineer.md +561 -0
- package/personas-teacher/engineering/engineering-wechat-mini-program-developer.md +350 -0
- package/personas-teacher/engineering/engineering-wordpress-shopping-cart.md +346 -0
- package/personas-teacher/examples/README.md +48 -0
- package/personas-teacher/examples/nexus-spatial-discovery.md +852 -0
- package/personas-teacher/examples/workflow-book-chapter.md +55 -0
- package/personas-teacher/examples/workflow-landing-page.md +119 -0
- package/personas-teacher/examples/workflow-startup-mvp.md +155 -0
- package/personas-teacher/examples/workflow-with-memory.md +238 -0
- package/personas-teacher/finance/finance-bookkeeper-controller.md +260 -0
- package/personas-teacher/finance/finance-financial-analyst.md +234 -0
- package/personas-teacher/finance/finance-fpa-analyst.md +263 -0
- package/personas-teacher/finance/finance-investment-researcher.md +272 -0
- package/personas-teacher/finance/finance-tax-strategist.md +239 -0
- package/personas-teacher/game-development/blender/blender-addon-engineer.md +234 -0
- package/personas-teacher/game-development/game-audio-engineer.md +264 -0
- package/personas-teacher/game-development/game-designer.md +167 -0
- package/personas-teacher/game-development/godot/godot-gameplay-scripter.md +334 -0
- package/personas-teacher/game-development/godot/godot-multiplayer-engineer.md +297 -0
- package/personas-teacher/game-development/godot/godot-shader-developer.md +266 -0
- package/personas-teacher/game-development/level-designer.md +208 -0
- package/personas-teacher/game-development/narrative-designer.md +243 -0
- package/personas-teacher/game-development/roblox-studio/roblox-avatar-creator.md +297 -0
- package/personas-teacher/game-development/roblox-studio/roblox-experience-designer.md +305 -0
- package/personas-teacher/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
- package/personas-teacher/game-development/technical-artist.md +229 -0
- package/personas-teacher/game-development/unity/unity-architect.md +271 -0
- package/personas-teacher/game-development/unity/unity-editor-tool-developer.md +310 -0
- package/personas-teacher/game-development/unity/unity-multiplayer-engineer.md +321 -0
- package/personas-teacher/game-development/unity/unity-shader-graph-artist.md +269 -0
- package/personas-teacher/game-development/unreal-engine/unreal-multiplayer-architect.md +313 -0
- package/personas-teacher/game-development/unreal-engine/unreal-systems-engineer.md +310 -0
- package/personas-teacher/game-development/unreal-engine/unreal-technical-artist.md +256 -0
- package/personas-teacher/game-development/unreal-engine/unreal-world-builder.md +273 -0
- package/personas-teacher/gis/gis-3d-scene-developer.md +111 -0
- package/personas-teacher/gis/gis-analyst.md +91 -0
- package/personas-teacher/gis/gis-bim-specialist.md +108 -0
- package/personas-teacher/gis/gis-cartography-designer.md +150 -0
- package/personas-teacher/gis/gis-drone-reality-mapping.md +120 -0
- package/personas-teacher/gis/gis-geoai-ml-engineer.md +105 -0
- package/personas-teacher/gis/gis-geoprocessing-specialist.md +97 -0
- package/personas-teacher/gis/gis-qa-engineer.md +133 -0
- package/personas-teacher/gis/gis-solution-engineer.md +101 -0
- package/personas-teacher/gis/gis-spatial-data-engineer.md +97 -0
- package/personas-teacher/gis/gis-spatial-data-scientist.md +111 -0
- package/personas-teacher/gis/gis-technical-consultant.md +86 -0
- package/personas-teacher/gis/gis-web-gis-developer.md +108 -0
- package/personas-teacher/marketing/marketing-aeo-foundations.md +264 -0
- package/personas-teacher/marketing/marketing-agentic-search-optimizer.md +311 -0
- package/personas-teacher/marketing/marketing-ai-citation-strategist.md +170 -0
- package/personas-teacher/marketing/marketing-app-store-optimizer.md +321 -0
- package/personas-teacher/marketing/marketing-baidu-seo-specialist.md +226 -0
- package/personas-teacher/marketing/marketing-bilibili-content-strategist.md +199 -0
- package/personas-teacher/marketing/marketing-book-co-author.md +110 -0
- package/personas-teacher/marketing/marketing-carousel-growth-engine.md +199 -0
- package/personas-teacher/marketing/marketing-china-ecommerce-operator.md +283 -0
- package/personas-teacher/marketing/marketing-china-market-localization-strategist.md +283 -0
- package/personas-teacher/marketing/marketing-content-creator.md +54 -0
- package/personas-teacher/marketing/marketing-cross-border-ecommerce.md +259 -0
- package/personas-teacher/marketing/marketing-douyin-strategist.md +149 -0
- package/personas-teacher/marketing/marketing-email-strategist.md +249 -0
- package/personas-teacher/marketing/marketing-global-podcast-strategist.md +206 -0
- package/personas-teacher/marketing/marketing-growth-hacker.md +54 -0
- package/personas-teacher/marketing/marketing-instagram-curator.md +113 -0
- package/personas-teacher/marketing/marketing-kuaishou-strategist.md +223 -0
- package/personas-teacher/marketing/marketing-linkedin-content-creator.md +214 -0
- package/personas-teacher/marketing/marketing-livestream-commerce-coach.md +305 -0
- package/personas-teacher/marketing/marketing-multi-platform-publisher.md +217 -0
- package/personas-teacher/marketing/marketing-podcast-strategist.md +277 -0
- package/personas-teacher/marketing/marketing-pr-communications-manager.md +473 -0
- package/personas-teacher/marketing/marketing-private-domain-operator.md +308 -0
- package/personas-teacher/marketing/marketing-reddit-community-builder.md +123 -0
- package/personas-teacher/marketing/marketing-seo-specialist.md +321 -0
- package/personas-teacher/marketing/marketing-short-video-editing-coach.md +412 -0
- package/personas-teacher/marketing/marketing-social-media-strategist.md +125 -0
- package/personas-teacher/marketing/marketing-tiktok-strategist.md +125 -0
- package/personas-teacher/marketing/marketing-twitter-engager.md +126 -0
- package/personas-teacher/marketing/marketing-video-optimization-specialist.md +119 -0
- package/personas-teacher/marketing/marketing-wechat-official-account.md +145 -0
- package/personas-teacher/marketing/marketing-weibo-strategist.md +240 -0
- package/personas-teacher/marketing/marketing-x-twitter-intelligence-analyst.md +161 -0
- package/personas-teacher/marketing/marketing-xiaohongshu-specialist.md +138 -0
- package/personas-teacher/marketing/marketing-zhihu-strategist.md +162 -0
- package/personas-teacher/paid-media/paid-media-auditor.md +71 -0
- package/personas-teacher/paid-media/paid-media-creative-strategist.md +71 -0
- package/personas-teacher/paid-media/paid-media-paid-social-strategist.md +71 -0
- package/personas-teacher/paid-media/paid-media-ppc-strategist.md +71 -0
- package/personas-teacher/paid-media/paid-media-programmatic-buyer.md +71 -0
- package/personas-teacher/paid-media/paid-media-search-query-analyst.md +71 -0
- package/personas-teacher/paid-media/paid-media-tracking-specialist.md +71 -0
- package/personas-teacher/product/product-behavioral-nudge-engine.md +80 -0
- package/personas-teacher/product/product-feedback-synthesizer.md +119 -0
- package/personas-teacher/product/product-manager.md +469 -0
- package/personas-teacher/product/product-sprint-prioritizer.md +154 -0
- package/personas-teacher/product/product-trend-researcher.md +159 -0
- package/personas-teacher/project-management/project-management-experiment-tracker.md +198 -0
- package/personas-teacher/project-management/project-management-jira-workflow-steward.md +230 -0
- package/personas-teacher/project-management/project-management-meeting-notes-specialist.md +95 -0
- package/personas-teacher/project-management/project-management-project-shepherd.md +194 -0
- package/personas-teacher/project-management/project-management-studio-operations.md +200 -0
- package/personas-teacher/project-management/project-management-studio-producer.md +203 -0
- package/personas-teacher/project-management/project-manager-senior.md +135 -0
- package/personas-teacher/sales/sales-account-strategist.md +227 -0
- package/personas-teacher/sales/sales-coach.md +271 -0
- package/personas-teacher/sales/sales-deal-strategist.md +180 -0
- package/personas-teacher/sales/sales-discovery-coach.md +225 -0
- package/personas-teacher/sales/sales-engineer.md +182 -0
- package/personas-teacher/sales/sales-offer-lead-gen-strategist.md +257 -0
- package/personas-teacher/sales/sales-outbound-strategist.md +201 -0
- package/personas-teacher/sales/sales-pipeline-analyst.md +267 -0
- package/personas-teacher/sales/sales-proposal-strategist.md +217 -0
- package/personas-teacher/security/security-appsec-engineer.md +491 -0
- package/personas-teacher/security/security-architect.md +304 -0
- package/personas-teacher/security/security-blockchain-security-auditor.md +463 -0
- package/personas-teacher/security/security-cloud-security-architect.md +523 -0
- package/personas-teacher/security/security-compliance-auditor.md +158 -0
- package/personas-teacher/security/security-incident-responder.md +437 -0
- package/personas-teacher/security/security-penetration-tester.md +399 -0
- package/personas-teacher/security/security-senior-secops.md +750 -0
- package/personas-teacher/security/security-threat-detection-engineer.md +534 -0
- package/personas-teacher/security/security-threat-intelligence-analyst.md +644 -0
- package/personas-teacher/spatial-computing/macos-spatial-metal-engineer.md +337 -0
- package/personas-teacher/spatial-computing/terminal-integration-specialist.md +70 -0
- package/personas-teacher/spatial-computing/visionos-spatial-engineer.md +54 -0
- package/personas-teacher/spatial-computing/xr-cockpit-interaction-specialist.md +32 -0
- package/personas-teacher/spatial-computing/xr-immersive-developer.md +32 -0
- package/personas-teacher/spatial-computing/xr-interface-architect.md +32 -0
- package/personas-teacher/specialized/accounts-payable-agent.md +185 -0
- package/personas-teacher/specialized/agentic-identity-trust.md +387 -0
- package/personas-teacher/specialized/agents-orchestrator.md +367 -0
- package/personas-teacher/specialized/automation-governance-architect.md +216 -0
- package/personas-teacher/specialized/business-strategist.md +488 -0
- package/personas-teacher/specialized/change-management-consultant.md +497 -0
- package/personas-teacher/specialized/chief-financial-officer.md +388 -0
- package/personas-teacher/specialized/corporate-training-designer.md +192 -0
- package/personas-teacher/specialized/customer-service.md +398 -0
- package/personas-teacher/specialized/customer-success-manager.md +460 -0
- package/personas-teacher/specialized/data-consolidation-agent.md +60 -0
- package/personas-teacher/specialized/data-privacy-officer.md +412 -0
- package/personas-teacher/specialized/esg-sustainability-officer.md +396 -0
- package/personas-teacher/specialized/government-digital-presales-consultant.md +363 -0
- package/personas-teacher/specialized/grant-writer.md +511 -0
- package/personas-teacher/specialized/healthcare-customer-service.md +389 -0
- package/personas-teacher/specialized/healthcare-marketing-compliance.md +395 -0
- package/personas-teacher/specialized/hospitality-guest-services.md +603 -0
- package/personas-teacher/specialized/hr-onboarding.md +451 -0
- package/personas-teacher/specialized/identity-graph-operator.md +260 -0
- package/personas-teacher/specialized/language-translator.md +264 -0
- package/personas-teacher/specialized/legal-billing-time-tracking.md +569 -0
- package/personas-teacher/specialized/legal-client-intake.md +492 -0
- package/personas-teacher/specialized/legal-document-review.md +454 -0
- package/personas-teacher/specialized/loan-officer-assistant.md +555 -0
- package/personas-teacher/specialized/lsp-index-engineer.md +314 -0
- package/personas-teacher/specialized/ma-integration-manager.md +427 -0
- package/personas-teacher/specialized/medical-billing-coding-specialist.md +491 -0
- package/personas-teacher/specialized/operations-manager.md +399 -0
- package/personas-teacher/specialized/organizational-psychologist.md +391 -0
- package/personas-teacher/specialized/personal-growth-mentor.md +159 -0
- package/personas-teacher/specialized/real-estate-buyer-seller.md +596 -0
- package/personas-teacher/specialized/recruitment-specialist.md +509 -0
- package/personas-teacher/specialized/report-distribution-agent.md +65 -0
- package/personas-teacher/specialized/retail-customer-returns.md +566 -0
- package/personas-teacher/specialized/sales-data-extraction-agent.md +67 -0
- package/personas-teacher/specialized/sales-outreach.md +425 -0
- package/personas-teacher/specialized/specialized-chief-of-staff.md +279 -0
- package/personas-teacher/specialized/specialized-civil-engineer.md +356 -0
- package/personas-teacher/specialized/specialized-cultural-intelligence-strategist.md +88 -0
- package/personas-teacher/specialized/specialized-developer-advocate.md +317 -0
- package/personas-teacher/specialized/specialized-document-generator.md +55 -0
- package/personas-teacher/specialized/specialized-french-consulting-market.md +192 -0
- package/personas-teacher/specialized/specialized-korean-business-navigator.md +216 -0
- package/personas-teacher/specialized/specialized-mcp-builder.md +248 -0
- package/personas-teacher/specialized/specialized-model-qa.md +488 -0
- package/personas-teacher/specialized/specialized-pricing-analyst.md +243 -0
- package/personas-teacher/specialized/specialized-salesforce-architect.md +180 -0
- package/personas-teacher/specialized/specialized-strategy-duel-agent.md +130 -0
- package/personas-teacher/specialized/specialized-workflow-architect.md +597 -0
- package/personas-teacher/specialized/study-abroad-advisor.md +282 -0
- package/personas-teacher/specialized/supply-chain-strategist.md +582 -0
- package/personas-teacher/specialized/zk-steward.md +211 -0
- package/personas-teacher/strategy/EXECUTIVE-BRIEF.md +95 -0
- package/personas-teacher/strategy/QUICKSTART.md +194 -0
- package/personas-teacher/strategy/coordination/agent-activation-prompts.md +401 -0
- package/personas-teacher/strategy/coordination/handoff-templates.md +357 -0
- package/personas-teacher/strategy/nexus-strategy.md +1110 -0
- package/personas-teacher/strategy/playbooks/phase-0-discovery.md +178 -0
- package/personas-teacher/strategy/playbooks/phase-1-strategy.md +238 -0
- package/personas-teacher/strategy/playbooks/phase-2-foundation.md +278 -0
- package/personas-teacher/strategy/playbooks/phase-3-build.md +286 -0
- package/personas-teacher/strategy/playbooks/phase-4-hardening.md +332 -0
- package/personas-teacher/strategy/playbooks/phase-5-launch.md +277 -0
- package/personas-teacher/strategy/playbooks/phase-6-operate.md +318 -0
- package/personas-teacher/strategy/runbooks/scenario-enterprise-feature.md +157 -0
- package/personas-teacher/strategy/runbooks/scenario-incident-response.md +217 -0
- package/personas-teacher/strategy/runbooks/scenario-marketing-campaign.md +187 -0
- package/personas-teacher/strategy/runbooks/scenario-startup-mvp.md +154 -0
- package/personas-teacher/support/support-analytics-reporter.md +365 -0
- package/personas-teacher/support/support-executive-summary-generator.md +212 -0
- package/personas-teacher/support/support-finance-tracker.md +442 -0
- package/personas-teacher/support/support-infrastructure-maintainer.md +618 -0
- package/personas-teacher/support/support-legal-compliance-checker.md +588 -0
- package/personas-teacher/support/support-support-responder.md +585 -0
- package/personas-teacher/testing/testing-accessibility-auditor.md +316 -0
- package/personas-teacher/testing/testing-api-tester.md +306 -0
- package/personas-teacher/testing/testing-evidence-collector.md +210 -0
- package/personas-teacher/testing/testing-performance-benchmarker.md +268 -0
- package/personas-teacher/testing/testing-reality-checker.md +236 -0
- package/personas-teacher/testing/testing-test-results-analyzer.md +305 -0
- package/personas-teacher/testing/testing-tool-evaluator.md +394 -0
- package/personas-teacher/testing/testing-workflow-optimizer.md +450 -0
- package/personas-teacher/tools.json +19 -0
- package/skill/add/SKILL.md +20 -14
- package/skill/add/advisor.md +33 -34
- package/skill/add/confidence.md +1 -1
- package/skill/add/deltas.md +12 -13
- package/skill/add/design.md +52 -49
- package/skill/add/fold.md +18 -16
- package/skill/add/intake.md +4 -3
- package/skill/add/loop.md +3 -4
- package/skill/add/phases/0-ground.md +32 -34
- package/skill/add/phases/0-setup.md +22 -21
- package/skill/add/phases/1-specify.md +8 -6
- package/skill/add/phases/3-contract.md +1 -1
- package/skill/add/phases/4-tests.md +9 -10
- package/skill/add/phases/5-build.md +17 -13
- package/skill/add/phases/6-verify.md +9 -4
- package/skill/add/phases/7-observe.md +2 -1
- package/skill/add/report-template.md +62 -18
- package/skill/add/run.md +5 -3
- package/skill/add/scope.md +2 -2
- package/skill/add/sensitivity.md +51 -0
- package/skill/add/streams.md +31 -23
- package/tooling/add.py +906 -28
- package/tooling/add_engine/autonomy.py +36 -1
- package/tooling/add_engine/constants.py +56 -3
- package/tooling/add_engine/guidelines.py +22 -20
- package/tooling/add_engine/predicates.py +56 -3
- package/tooling/add_engine/search.py +165 -0
- package/tooling/templates/GLOSSARY.md.tmpl +16 -0
- package/tooling/templates/MILESTONE.md.tmpl +9 -0
- package/tooling/templates/PROMPT.persona.md.tmpl +44 -0
- package/tooling/templates/TASK.fast.md.tmpl +1 -0
- package/tooling/templates/TASK.md.tmpl +39 -6
- package/tooling/templates/gitignore.tmpl +12 -0
- package/tooling/templates/personas/_template.md.tmpl +60 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# Phase 0 — Setup (autonomous draft → one human baseline approval)
|
|
2
2
|
|
|
3
|
-
Goal: point ADD at a repo and **you** draft the whole foundation — domain, first-milestone scope,
|
|
3
|
+
Goal: point ADD at a repo and **you** draft the whole foundation — domain, first-milestone scope, first task's contract — then hand the human one decision: the **baseline approval**. Brownfield silent; greenfield keeps a short interview; either way the only gate is `add.py lock`.
|
|
4
4
|
|
|
5
5
|
## 1 · Zero-touch entry — you run init yourself
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
No `.add/state.json`? Don't tell the human to initialise — run it yourself. Infer name + stage
|
|
8
|
+
from the repo and **arm the baseline-approval gate** with `--await-lock`:
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
11
|
python3 .add/tooling/add.py init --name "<inferred from repo/dir>" --stage <prototype|poc|mvp|production> --await-lock
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
- `--await-lock` seeds an *unlocked* setup — the engine refuses
|
|
15
|
-
- name + stage are **your judgment
|
|
14
|
+
- `--await-lock` seeds an *unlocked* setup — the engine refuses build or `gate` until you `lock`. A plain `init` is grandfathered-locked (`already_locked` on a later `lock`).
|
|
15
|
+
- name + stage are **your judgment**: throwaway → `prototype`, risky slice → `poc`, narrow → `mvp`, full rigor → `production`.
|
|
16
16
|
|
|
17
17
|
`init` prints one of two things — **that is your branch**:
|
|
18
18
|
- `brownfield:` → existing code (go to **2a**);
|
|
@@ -20,12 +20,12 @@ python3 .add/tooling/add.py init --name "<inferred from repo/dir>" --stage <prot
|
|
|
20
20
|
|
|
21
21
|
## 2a · Brownfield — map it silently
|
|
22
22
|
|
|
23
|
-
The code answers
|
|
23
|
+
The code answers what a greenfield interview would ask — **read it instead of asking**. Open `adopt.md`: fill each living-doc from code, never clobber, tag every decision `evidence-grounded` or `guessed`. Ask the human **nothing** here.
|
|
24
24
|
|
|
25
25
|
## 2b · Greenfield — the 4-lens interview (kept): co-specify at foundation level
|
|
26
26
|
|
|
27
|
-
An empty repo has no code
|
|
28
|
-
|
|
27
|
+
An empty repo has no code, so run the short interview — the **co-specify at foundation level** move
|
|
28
|
+
(diverge → converge → validate, as §1 does in `phases/1-specify.md`), lifted to the foundation. Ask one load-bearing question per lens, draft, rank lowest-confidence-first, show the top flag:
|
|
29
29
|
|
|
30
30
|
| Lens | The one question that unblocks the section |
|
|
31
31
|
|------|--------------------------------------------|
|
|
@@ -45,47 +45,48 @@ Ask only the live ones. Rank: `⚠ <assumption> — lowest confidence because <w
|
|
|
45
45
|
| **UDD** (users) | primary user → jobs, surface, the one flow that must feel right |
|
|
46
46
|
| **TDD** (trust) | what "done & trusted" means: risks to prove, evidence that closes them |
|
|
47
47
|
|
|
48
|
-
Capture each surfaced decision as an **ADR**
|
|
48
|
+
Capture each surfaced decision as an **ADR** in `PROJECT.md` **Key Decisions** as it lands.
|
|
49
49
|
|
|
50
|
-
**Under `autonomy: auto
|
|
50
|
+
**Under `autonomy: auto`, auto-complete all four drives in one pass** — lowest-confidence-first. This deepens **drafting**, never the gate — `lock` stays the one decision.
|
|
51
51
|
|
|
52
52
|
## 3 · Draft to the lock (both paths)
|
|
53
53
|
|
|
54
|
-
1. **Fill the living documentation**: `.add/PROJECT.md` (Domain · Spec
|
|
55
|
-
|
|
54
|
+
1. **Fill the living documentation**: `.add/PROJECT.md` (Domain · Spec · UI/UX · Key Decisions), `CONVENTIONS.md`, `GLOSSARY.md`, `MODEL_REGISTRY.md`, `dependencies.allowlist`, and — for a UI project — `DESIGN.md` (delete if no UI; `design.md`). Brownfield: from code. Greenfield: from interview, gaps flagged `guessed`.
|
|
55
|
+
- **Seed personas** (`.add/personas/`): `init` scaffolds `_template.md` (the schema). **Author one per role** from PROJECT.md + the vendored teacher library `.add/personas-teacher/` (read off-build; engine never fetches) — citing the teacher in `source:` and carrying its top `## Playbook` are the two optional parts, not the authoring. Covered by the **baseline approval**; `add.py check` validates; never clobber.
|
|
56
|
+
2. **Propose, then size it.** Float a **kickoff suggestion** for the first milestone: a **goal** (one sentence), a **flow** (task order), **scenarios** (examples of what ships). Not the frozen `MILESTONE.md`. On their reaction, draft `MILESTONE.md` (read `scope.md`).
|
|
56
57
|
3. **Create the first task and draft its candidate specification bundle.** `new-task` is allowed pre-lock:
|
|
57
58
|
```bash
|
|
58
59
|
python3 .add/tooling/add.py new-task <slug> --title "<first feature>"
|
|
59
60
|
```
|
|
60
|
-
Draft the full bundle **§1–§4**
|
|
61
|
+
Draft the full bundle **§1–§4** incl. the **§4 red suite** (`phases/4-tests.md`); the lock approves it whole. **Leave §3 `Status: DRAFT`** — the lock is its approval. You MAY `advance` pre-lock, but the engine **refuses build** until you `lock` (`setup_unlocked`). Sequence: **bundle (§1–§4, tests RED) → lock → build** — the red suite must FAIL before build.
|
|
61
62
|
4. **Write `.add/SETUP-REVIEW.md`** per `setup-review.md`: every drafted decision, **lowest-confidence-first**, tagged `guessed` | `evidence-grounded`.
|
|
62
63
|
|
|
63
64
|
## Run mode — how the build will be driven (propose parallel + auto; confirm to keep)
|
|
64
65
|
|
|
65
|
-
Before the lock, surface the **run mode** —
|
|
66
|
+
Before the lock, surface the **run mode** — autonomy + streams (`run.md` · `streams.md`):
|
|
66
67
|
|
|
67
68
|
| Run mode | Human gates | Concurrency |
|
|
68
69
|
|----------|-------------|-------------|
|
|
69
|
-
| **sequential · manual/conservative** | contract freeze **and** every Verify | one task
|
|
70
|
-
| **parallel · auto** *(
|
|
70
|
+
| **sequential · manual/conservative** | contract freeze **and** every Verify | one task; safest |
|
|
71
|
+
| **parallel · auto** *(default)* | contract freeze **only** — Verify auto-PASSes on evidence | `add.py waves` overlaps independent builds behind frozen contracts |
|
|
71
72
|
|
|
72
|
-
**Propose `parallel + auto
|
|
73
|
+
**Propose `parallel + auto`; confirm-to-keep** (or downgrade: `add.py autonomy set conservative --project` + `add.py streams set sequential --project`). Record in **`PROJECT.md` Key Decisions**.
|
|
73
74
|
|
|
74
|
-
|
|
75
|
+
Floor: **one human approval per contract**.
|
|
75
76
|
|
|
76
77
|
## 4 · The one human gate — the baseline approval
|
|
77
78
|
|
|
78
|
-
Open the report with the ARC per `report-template.md`, render
|
|
79
|
+
Open the report with the ARC per `report-template.md`, render SHAPE then APPROVE as a guided choice, then present `SETUP-REVIEW.md` lowest-confidence-first. They confirm **once** — an explicit yes; ambient agreement is not a confirmation. **Never self-stamp a timeout — hold, or re-ask.** On that recorded confirmation, you run the lock:
|
|
79
80
|
|
|
80
81
|
```bash
|
|
81
82
|
python3 .add/tooling/add.py lock --by "<name>"
|
|
82
83
|
```
|
|
83
84
|
|
|
84
|
-
Typing it themselves stays the **escape hatch** — the decision is
|
|
85
|
+
Typing it themselves stays the **escape hatch** — the decision is the human's; you execute. `lock` writes the lock layers atomically and opens the build.
|
|
85
86
|
|
|
86
87
|
## 5 · After the lock
|
|
87
88
|
|
|
88
|
-
- The lock **is** the first task's contract approval —
|
|
89
|
+
- The lock **is** the first task's contract approval — no separate contract-freeze sign-off.
|
|
89
90
|
- Stamp the first task's §3 `Status: FROZEN @ v1`, then read `phases/5-build.md`.
|
|
90
91
|
|
|
91
92
|
## Exit gate
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
Goal: state what the feature MUST do and what it must REJECT, with zero ambiguity
|
|
4
4
|
for the AI to resolve by guessing. Fill **§1 SPECIFY** in TASK.md.
|
|
5
5
|
|
|
6
|
-
Specify is **co-specification**: brainstorm the shape WITH the user, draft
|
|
6
|
+
Specify is **co-specification**: brainstorm the shape WITH the user, draft, then validate. If you cannot write the spec, you don't yet understand the feature — stop and ask.
|
|
7
7
|
|
|
8
8
|
## Co-specify in three moves
|
|
9
9
|
|
|
10
|
-
1. **Diverge** — surface the decision space: the 2–3 genuine framings
|
|
11
|
-
2. **Converge** — draft §1
|
|
10
|
+
1. **Diverge** — surface the decision space: the 2–3 genuine framings + the open questions you'd otherwise guess. Invite the user to add, kill, redirect. (Conversational — no new file; at prototype/poc, one sentence.)
|
|
11
|
+
2. **Converge** — draft §1 answering the §0 GROUND **Issues/Risks**, then RANK where your confidence is lowest (below).
|
|
12
12
|
3. **Validate** — present the ranked uncertainty first; the user confirms, corrects, or sends back.
|
|
13
13
|
|
|
14
14
|
**Identity is direction, not default (UDD).** Brand color, palette, typeface are human-owned — surface them during Diverge, never assume. For a UI feature with a screen, run the design-definition loop in `design.md`.
|
|
@@ -25,13 +25,13 @@ Specify is **co-specification**: brainstorm the shape WITH the user, draft it, t
|
|
|
25
25
|
|
|
26
26
|
## The lowest-confidence flag is bundle-wide
|
|
27
27
|
|
|
28
|
-
The single
|
|
28
|
+
The single approval is at the contract freeze, over the whole bundle — so your §1 ranking feeds the bundle-level flag the user reads there (`run.md`): *"of all I'm asking you to freeze, these 1–2 are most likely wrong."*
|
|
29
29
|
|
|
30
30
|
## AI prompt
|
|
31
31
|
|
|
32
32
|
<prompt>
|
|
33
33
|
Role: a domain analyst who brainstorms, then asks rather than assumes.
|
|
34
|
-
Read first: CONVENTIONS · GLOSSARY · the user's raw input.
|
|
34
|
+
Read first: CONVENTIONS · GLOSSARY · §0 GROUND Issues/Risks · the user's raw input.
|
|
35
35
|
Objective: fill §1 SPECIFY with zero ambiguity left for the AI to resolve by guessing.
|
|
36
36
|
Steps:
|
|
37
37
|
1. Surface 2–3 framings + the open questions; let the user react before you draft.
|
|
@@ -50,10 +50,12 @@ Never: resolve an ambiguity by guessing.
|
|
|
50
50
|
"none material" that still names the single biggest risk (never a blank "none").
|
|
51
51
|
</exit_gate>
|
|
52
52
|
|
|
53
|
+
> **Persona** — load the fit `.add/personas/<slug>.md`; its `## Critical Rules` shape §1 (advisory; never lowers a gate).
|
|
53
54
|
> **Advisor · Confidence** — for an unfamiliar domain, spawn a researcher (advisor.md); self-score the spec and let the lowest dimension aim your ⚠ flag (confidence.md).
|
|
54
55
|
|
|
55
56
|
## Next
|
|
56
57
|
|
|
57
58
|
`python3 .add/tooling/add.py advance` → read `phases/2-scenarios.md`.
|
|
58
59
|
Book: `docs/03-step-1-specify.md`. (UI feature? also sketch flows + every screen
|
|
59
|
-
state: loading/empty/error/success.
|
|
60
|
+
state: loading/empty/error/success; name it in the parent MILESTONE.md's Scope-hint
|
|
61
|
+
vocabulary, not generic prose.)
|
|
@@ -14,7 +14,7 @@ Then mark `Status: FROZEN @ v1`. Generate a mock + contract tests so dependent
|
|
|
14
14
|
work can start before the real code exists.
|
|
15
15
|
</output_format>
|
|
16
16
|
|
|
17
|
-
**The freeze is the one approval.** Present the bundle **lowest-confidence first**: the 1–2 points most likely wrong (`⚠ [spec|scenario|contract|test] … — because …; if wrong: …`). Open with the ARC per `report-template.md`, rendering the freeze
|
|
17
|
+
**The freeze is the one approval.** Present the bundle **lowest-confidence first**: the 1–2 points most likely wrong (`⚠ [spec|scenario|contract|test] … — because …; if wrong: …`). Open with the ARC per `report-template.md`, rendering SHAPE then the freeze APPROVE as a guided choice (recommended pick + alternatives) — **render before `FROZEN`, then record `Reported: yes` in §3; never on a timeout.** See `run.md`. The approval also freezes §5 **Scope (may touch)** + Strategy.
|
|
18
18
|
|
|
19
19
|
## The freeze review checklist
|
|
20
20
|
|
|
@@ -19,16 +19,14 @@ before code exists is testing nothing and will wave bad code through later.
|
|
|
19
19
|
|
|
20
20
|
## Declaring where tests live
|
|
21
21
|
|
|
22
|
-
§4's `Tests live in:` line is machine-read:
|
|
23
|
-
|
|
24
|
-
line
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Paths are confined: anything resolving outside the project root counts 0 — `..` traversal, absolute paths, and
|
|
31
|
-
symlink escapes are never read.
|
|
22
|
+
§4's `Tests live in:` line is machine-read: with no local `tests/`, `add.py report`
|
|
23
|
+
counts test functions at the declared backticked paths instead (FIRST `Tests live in:`
|
|
24
|
+
line only). Resolution: `./…` → this task's dir · a token with `/` → the project root
|
|
25
|
+
(parent of `.add/`) · a bare name → a sibling of the previous token's dir (else the
|
|
26
|
+
task dir). A directory token counts the `*.py` files directly inside it (non-recursive); a `.py`
|
|
27
|
+
file counts itself; else ignored. Resolved files dedupe; declared counts marked `†`. Paths
|
|
28
|
+
are confined: anything resolving outside the project root counts 0 — `..` traversal, absolute
|
|
29
|
+
paths, and symlink escapes are never read.
|
|
32
30
|
|
|
33
31
|
## AI prompt
|
|
34
32
|
|
|
@@ -52,6 +50,7 @@ Never: implement the feature, or assert on internals.
|
|
|
52
50
|
- [ ] Coverage target recorded.
|
|
53
51
|
</exit_gate>
|
|
54
52
|
|
|
53
|
+
> **Persona** — let the fit persona's `## Success Metrics` shape the red suite (advisory).
|
|
55
54
|
> **Advisor · Confidence** — spawn a test-author for a broad red suite (advisor.md); score Completeness — one test per scenario, every rejection covered (confidence.md).
|
|
56
55
|
|
|
57
56
|
## Next
|
|
@@ -1,27 +1,31 @@
|
|
|
1
1
|
# Phase 5 — Build (AI writes the code)
|
|
2
2
|
|
|
3
3
|
Goal: implement the feature so EVERY failing test passes — without changing any
|
|
4
|
-
test or the contract. This is the only phase the AI leads
|
|
5
|
-
|
|
4
|
+
test or the contract. This is the only phase the AI leads; §1–§4 removed all
|
|
5
|
+
ambiguity. Write code into `.add/tasks/<slug>/src/`.
|
|
6
6
|
|
|
7
7
|
## Work in small batches
|
|
8
8
|
|
|
9
|
-
Pick ONE task-sized slice, restate
|
|
10
|
-
|
|
9
|
+
Pick ONE task-sized slice, restate its tests, implement, iterate to green.
|
|
10
|
+
Keep each batch small enough to review in full.
|
|
11
11
|
|
|
12
12
|
## Declaring the scope of impact (Scope + Strategy)
|
|
13
13
|
|
|
14
|
-
§5
|
|
14
|
+
§5 opens with two declarations, drafted with the bundle and frozen by the §3 approval — never invented mid-build:
|
|
15
15
|
|
|
16
|
-
- **Scope (may touch)** — the allowlist of
|
|
17
|
-
- **Strategy (ordered batches)** — the planned build order
|
|
16
|
+
- **Scope (may touch)** — the allowlist of files the build may write (backticked tokens). A file outside it is a **STOP → change request** back to Specify, never improvisation.
|
|
17
|
+
- **Strategy (ordered batches)** — the planned build order; guidance, not enforced.
|
|
18
18
|
|
|
19
|
-
Enforced: a completing verify gate refuses an out-of-scope build (`scope_violation` → self-heal)
|
|
19
|
+
Enforced: a completing verify gate refuses an out-of-scope build (`scope_violation` → self-heal).
|
|
20
|
+
|
|
21
|
+
## Persona overlay (optional)
|
|
22
|
+
|
|
23
|
+
You may load the active `.add/personas/<slug>.md` as a domain **overlay** atop `SOUL.md` (SOUL = voice/trust; persona = domain **stance**) — name it in §5. SOUL.md is **human-owned**: the overlay never rewrites it (`soul.md`). Advisory — it never lowers a gate; security still **HARD-STOPs**.
|
|
20
24
|
|
|
21
25
|
## The cardinal rule
|
|
22
26
|
|
|
23
27
|
**Never weaken or delete a test to make it pass, and never edit the frozen
|
|
24
|
-
contract.** A genuine need to change either is a change request back to Specify. Honor the
|
|
28
|
+
contract.** A genuine need to change either is a change request back to Specify. Honor the §5 safety rule (e.g. atomic balance update).
|
|
25
29
|
|
|
26
30
|
## AI prompt
|
|
27
31
|
|
|
@@ -30,9 +34,9 @@ Role: implement the feature so EVERY failing test passes — the build phase.
|
|
|
30
34
|
Read first: §1 · §3 · §4 · CONVENTIONS.
|
|
31
35
|
Objective: every §4 test green, one small batch at a time.
|
|
32
36
|
Steps:
|
|
33
|
-
1. Make EVERY failing test pass,
|
|
37
|
+
1. Make EVERY failing test pass, honoring the §5 safety rule.
|
|
34
38
|
2. Report which tests pass and exactly what changed.
|
|
35
|
-
Never: change a test or the contract; use a package off the allow-list; or push past
|
|
39
|
+
Never: change a test or the contract; use a package off the allow-list; or push past unclear instead of asking.
|
|
36
40
|
</prompt>
|
|
37
41
|
|
|
38
42
|
## Exit gate
|
|
@@ -46,7 +50,7 @@ Never: change a test or the contract; use a package off the allow-list; or push
|
|
|
46
50
|
- [ ] Change small enough to review in full.
|
|
47
51
|
</exit_gate>
|
|
48
52
|
|
|
49
|
-
> **Advisor · Confidence** — delegate
|
|
53
|
+
> **Advisor · Confidence** — delegate a well-scoped batch (advisor.md); self-score before presenting green, refine while cheap (confidence.md).
|
|
50
54
|
|
|
51
55
|
## Next
|
|
52
56
|
|
|
@@ -55,4 +59,4 @@ Book: `docs/07-step-5-build.md`.
|
|
|
55
59
|
|
|
56
60
|
> Under `autonomy: auto` Build and Verify run together as one evidence-auto-gated run. See `run.md`.
|
|
57
61
|
>
|
|
58
|
-
> **Honest redo.** A confirmed cheat returns the task HERE — revert the tampered file or de-overfit src, then advance again
|
|
62
|
+
> **Honest redo.** A confirmed cheat returns the task HERE — revert the tampered file or de-overfit src, then advance again (the bounded self-heal loop, `run.md`; capped, then HARD-STOPs to the human). Never weaken a test or edit the frozen contract to pass.
|
|
@@ -11,7 +11,7 @@ sufficient. Fill **§6** in TASK.md including the GATE RECORD.
|
|
|
11
11
|
|
|
12
12
|
## Before you build — declare the build expectations
|
|
13
13
|
|
|
14
|
-
Fill the §6 **Build expectations** block BEFORE Build: OBSERVABLE outcomes derived from §2 + §3. At this gate, confirm each against real evidence (the `confirmed by` column) — one with no evidence
|
|
14
|
+
Fill the §6 **Build expectations** block BEFORE Build: OBSERVABLE outcomes derived from §2 + §3. At this gate, confirm each against real evidence (the `confirmed by` column) — one with no evidence isn't yet verified.
|
|
15
15
|
|
|
16
16
|
## Part one — confirm the evidence
|
|
17
17
|
|
|
@@ -19,20 +19,24 @@ Fill the §6 **Build expectations** block BEFORE Build: OBSERVABLE outcomes deri
|
|
|
19
19
|
- [ ] Coverage did not decrease.
|
|
20
20
|
- [ ] No test or contract was altered during build.
|
|
21
21
|
- [ ] Every §6 Build expectation is confirmed by real evidence (not just a green test).
|
|
22
|
+
- [ ] §1 rules trace to §2/§4 — an untraced rule is a coverage gap (`add.py audit`'s `rule_coverage_gap`; `check` has detail).
|
|
23
|
+
- [ ] every §3-cited symbol still resolves in the CURRENT tree, not just Ground SHA (§6 Live-verify evidence catches a stale/moved anchor here, not later).
|
|
22
24
|
|
|
23
25
|
If any is false, stop and return to Build.
|
|
24
26
|
|
|
25
27
|
## Part two — check what tests miss
|
|
26
28
|
|
|
27
29
|
- **Concurrency/timing** — correct when two run at once? (Tests run serially and miss races.)
|
|
28
|
-
- **Security** — exposed secrets, injection openings, unexpected dependencies. A security finding is always `HARD-STOP`, never a waiver. ANY note here escalates to the human — start it with `NOTE` or `⚠` so `add.py audit` can see it (`unescalated_security_note`). **But that check sees only what you wrote down:** it fires on a *marked* note
|
|
30
|
+
- **Security** — exposed secrets, injection openings, unexpected dependencies. A security finding is always `HARD-STOP`, never a waiver. ANY note here escalates to the human — start it with `NOTE` or `⚠` so `add.py audit` can see it (`unescalated_security_note`). **But that check sees only what you wrote down:** it fires on a *marked* note auto-gated to PASS — a finding you never marked is **invisible**, escalated to no one. Under `auto`, a human **spot-audit** (reading the diff) is the only backstop for a *missed* security finding.
|
|
29
31
|
- **Architecture** — respects layering/dependency rules in CONVENTIONS.md?
|
|
30
32
|
|
|
33
|
+
Run the three lenses in order — a Security `HARD-STOP` ends the checklist (leave the rest blank). Record in §6 `### Advisor 3-lens verdict` (Verdict · Residue · Binding): `sensitivity: mechanical` → Binding `yes` (engine reads it for `advisor-gate-relax`), every other class → Binding `advisory`. `add.py audit` flags an unfilled block `advisor_verdict_unrecorded`, a companion to `refute_unrecorded`.
|
|
34
|
+
|
|
31
35
|
## Part three — the deep check (do not skim)
|
|
32
36
|
|
|
33
37
|
If the task produced code, record that every new symbol is referenced (wiring) and that no new dead/unused code was introduced. If it produced prose or non-code, record a semantic read — what you read in full and what it confirmed. The resolver judges which path; the engine never classifies.
|
|
34
38
|
|
|
35
|
-
Record
|
|
39
|
+
Record in the §6 **Deep checks** block — an unfilled one is a **shallow verify**, not a PASS.
|
|
36
40
|
|
|
37
41
|
## Part four — was the green earned?
|
|
38
42
|
|
|
@@ -40,7 +44,7 @@ A green suite proves tests pass — not that the build EARNED them. Three judgme
|
|
|
40
44
|
|
|
41
45
|
## Record exactly one outcome (no silent pass)
|
|
42
46
|
|
|
43
|
-
Present this gate via `report-template.md`'s ARC, render
|
|
47
|
+
Present this gate via `report-template.md`'s ARC, render APPROVE, and reconcile FLAGS with `add.py report --decide`'s open-item count. **Human-led: render before `gate` and record `Reported: yes` in §6, never self-stamp.**
|
|
44
48
|
|
|
45
49
|
| Outcome | When |
|
|
46
50
|
|---------|------|
|
|
@@ -55,6 +59,7 @@ Present this gate via `report-template.md`'s ARC, render DECISION as a guided ch
|
|
|
55
59
|
(under `autonomy: auto`, no residue) the run auto-resolved as accountable owner.
|
|
56
60
|
</exit_gate>
|
|
57
61
|
|
|
62
|
+
> **Persona** — run the refute-read under the fit persona / Code-Reviewer lens (advisory; security still HARD-STOPs).
|
|
58
63
|
> **Advisor · Confidence** — the earned-green refute-read is the canonical adversarial spawn (advisor.md); score it before recording the gate (confidence.md).
|
|
59
64
|
|
|
60
65
|
```bash
|
|
@@ -38,9 +38,10 @@ Never: auto-roll-back — recommend; a human owns the production decision.
|
|
|
38
38
|
- [ ] A reviewed spec delta captured (becomes the next `new-task`).
|
|
39
39
|
</exit_gate>
|
|
40
40
|
|
|
41
|
+
> **Persona** — tag a lesson `· persona:<slug> ·` so `add.py fold` grows the persona.
|
|
41
42
|
> **Advisor · Confidence** — spawn a reviewer to mine the run for lessons (advisor.md); score Self-evaluation — did this loop teach the foundation? (confidence.md).
|
|
42
43
|
|
|
43
44
|
## Next
|
|
44
45
|
|
|
45
|
-
Loop. The artifacts you built are living
|
|
46
|
+
Loop. The artifacts you built are living docs the next cycle refines.
|
|
46
47
|
Book: `docs/09-the-loop.md`.
|
|
@@ -2,11 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
The engine renders artifacts (`report`, `report --decide`, `status`); this file governs the CHAT MESSAGE you wrap around them.
|
|
4
4
|
|
|
5
|
-
Use it every time you report at or near a
|
|
5
|
+
Use it every time you report at or near a human gate.
|
|
6
6
|
|
|
7
|
-
## The decision
|
|
7
|
+
## The decision banner — rendered first, above everything
|
|
8
8
|
|
|
9
|
-
Every report at a human gate opens with
|
|
9
|
+
Every report at a human gate opens with a banner line, so a human scanning a long chat can spot "this needs my input" without reading prose:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
════════════════════════════════════════════════════════════════
|
|
13
|
+
PLAN · <task/milestone title, bold> · <gate name> → APPROVE?
|
|
14
|
+
📄 <task's TASK.md path> · <milestone's MILESTONE.md path>
|
|
15
|
+
════════════════════════════════════════════════════════════════
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- The title is the real H1 from TASK.md/MILESTONE.md, **bolded** — not the bare slug.
|
|
19
|
+
- The path line names the actual file(s) so the human can open them directly; omit the milestone half for a milestone-free/fast task.
|
|
20
|
+
- Any `§`-numbered section named anywhere in the report (SHAPE, FLAGS, APPROVE, NEXT) is **bolded** — e.g. `**§3 CONTRACT**` — so a scanning eye finds exactly which part of the file is in play.
|
|
21
|
+
|
|
22
|
+
## The decision arc — rendered next
|
|
23
|
+
|
|
24
|
+
Every report at a human gate carries the **ARC** — three labelled lines placing the decision in the work's whole arc. Render it right after the banner, then a separator, then the report blocks:
|
|
10
25
|
|
|
11
26
|
```
|
|
12
27
|
ARC goal: <the milestone / project goal this decision serves>
|
|
@@ -27,34 +42,61 @@ Its facts are engine-sourced (goal = `m-goal` · done = exit-criteria + tasks do
|
|
|
27
42
|
- **verify** — `goal:` ship the decision arc · `done:` report-arc tests 6/6 green · `plan:` PASS → wire the arc into every gate → goal.
|
|
28
43
|
- **contract-freeze** — `goal:` … · `done:` bundle drafted, lowest-confidence flag surfaced · `plan:` freeze §3 → build → goal.
|
|
29
44
|
|
|
45
|
+
## PLAN / SHAPE — when there's more than one step, or a shape to freeze
|
|
46
|
+
|
|
47
|
+
Render one of these (never both) right after the ARC, whenever the message needs to show more than a single fact — a multi-task breakdown, a roadmap, mid-milestone orientation, or (at a contract freeze) the shape itself:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
PLAN <milestone or theme — one line>
|
|
51
|
+
✅ done (N) <collapsed — never enumerated by name>
|
|
52
|
+
🔄 <active-slug> <one line: what it's doing right now>
|
|
53
|
+
⬜ <next-slug> <one line — "depends-on: <slug>" if it blocks>
|
|
54
|
+
⬜ <next-slug>
|
|
55
|
+
⚠ <flagged-slug> <one line — why it's flagged>
|
|
56
|
+
… +N more queued <only if the live list exceeds the cap>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
SHAPE <task title, bold> — v<N> (DRAFT — not yet frozen)
|
|
61
|
+
<endpoint/type/field> <new | changed | unchanged>
|
|
62
|
+
<error case / reject token> <what triggers it>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- **Collapse done to a count.** Never enumerate finished tasks by name — the human already trusts what's shipped; re-listing it is noise.
|
|
66
|
+
- **Cap live items at ~5–7**, in dependency order; footer `+N more queued` rather than listing everything.
|
|
67
|
+
- **One line per item** — slug + what it does or blocks on; never restate the whole TASK.md.
|
|
68
|
+
- **Glyphs are fixed** — ✅ done · 🔄 active/in-progress · ⬜ pending · ⚠ blocked or flagged. Do not invent new glyphs.
|
|
69
|
+
- **Sourced from the engine, summarized by you** — pull from `add.py status`'s `tasks:`/`streams:` output; never paste it verbatim into chat.
|
|
70
|
+
- **SHAPE is freeze-only** — the concrete thing being locked, so the human reviews the actual shape, not just commentary about it.
|
|
71
|
+
|
|
30
72
|
## The report blocks, in order
|
|
31
73
|
|
|
32
74
|
Render every block (write "none" rather than dropping one); add MORE when needed.
|
|
33
75
|
|
|
34
76
|
```
|
|
35
77
|
SUMMARY one line: intent + target + where we are + what we done
|
|
36
|
-
DECISION what you need from the human (or "none — FYI") — exactly one
|
|
37
78
|
FLAGS lowest-confidence first: why + cost-if-wrong
|
|
38
79
|
DECIDED highest-confidence first: the autonomous calls you made + why each was safe
|
|
39
80
|
EVIDENCE small table: tests · gates · parity · check — engine-sourced
|
|
81
|
+
APPROVE what you need from the human (or "none — FYI") — exactly one — sits last, right before the ask
|
|
40
82
|
NEXT the recommended next actions, ranked (top ▶ highlighted, bolded) + what each unlocks
|
|
41
83
|
```
|
|
42
84
|
|
|
43
|
-
1. **SUMMARY** — one line: intent + target + position.
|
|
44
|
-
2. **
|
|
45
|
-
3. **
|
|
46
|
-
4. **
|
|
47
|
-
5. **
|
|
85
|
+
1. **SUMMARY** — one line: intent + target + position. **Never optional** — even when PLAN/SHAPE already carries most of the context, SUMMARY still renders as its own line; it is never merged into or silently replaced by another block.
|
|
86
|
+
2. **FLAGS** — lowest-confidence first, each with *why* and *cost if wrong*. Where TASK.md markers exist (`⚠` / `- [~]` / `- [ ]`), quote verbatim and keep document order.
|
|
87
|
+
3. **DECIDED** — high-confidence autonomous calls, highest-confidence first, each with *why* it was safe. "none" when none. NEVER list a security / residue / lowered-autonomy call here.
|
|
88
|
+
4. **EVIDENCE** — engine-sourced facts from `add.py` output, never re-typed.
|
|
89
|
+
5. **APPROVE** — as a **guided decision**: one `▶ … (recommended)` + 1–3 described alternatives. Exactly one per report, or "none — FYI". Rendered last among the core blocks — the actual interactive ask fires only after everything above it (show-before-ask).
|
|
48
90
|
6. **NEXT** — ranked next actions, top one marked `▶` with what it unlocks. Mirror the rollup's `DECIDE NEXT` for the top action; overrule it only with a stated reason. **Informational, not a second gate**.
|
|
49
91
|
|
|
50
92
|
### Beyond the core blocks
|
|
51
93
|
|
|
52
|
-
When a report needs more — a `RISK` ledger, a `DIFF`, a `SCOPE` map — add an extra block (SCREAMING-CASE label · one-line intent · engine-sourced where possible) AFTER EVIDENCE and BEFORE
|
|
94
|
+
When a report needs more — a `RISK` ledger, a `DIFF`, a `SCOPE` map — add an extra block (SCREAMING-CASE label · one-line intent · engine-sourced where possible) AFTER EVIDENCE and BEFORE APPROVE. Add only when it carries what the core blocks don't; never pad; never drop a core block.
|
|
53
95
|
|
|
54
|
-
### The
|
|
96
|
+
### The APPROVE block as a guided choice
|
|
55
97
|
|
|
56
98
|
```
|
|
57
|
-
|
|
99
|
+
APPROVE <the question>
|
|
58
100
|
|
|
59
101
|
▶ <recommended option> (recommended)
|
|
60
102
|
<one-line description — what it means · what it unlocks or costs>
|
|
@@ -67,19 +109,21 @@ DECISION <the question>
|
|
|
67
109
|
- **Every option is described** — pick and each alternative carry a one-line description.
|
|
68
110
|
- **Human gates only** — render at `[human gate]` points; not at `[you drive]` steps.
|
|
69
111
|
|
|
70
|
-
**The ask itself** — when block
|
|
112
|
+
**The ask itself** — when the APPROVE block becomes an `AskUserQuestion` picker: recommended option goes first with `(Recommended)` suffix. On tools without `AskUserQuestion`, render as a numbered/`▶` menu. The question is a summary, never the artifact — intent + what "yes" means + the flag count.
|
|
71
113
|
|
|
72
114
|
## Hard rules
|
|
73
115
|
|
|
74
116
|
<constraints>
|
|
75
117
|
- **Summary-first.** Never bury the decision under a task list or a diff.
|
|
76
|
-
- **Show before ask.** Render the artifact (digest · diff · report) before any approval question.
|
|
77
|
-
- **Guided decision.** At a `[human gate]`,
|
|
118
|
+
- **Show before ask.** Render the artifact (digest · diff · report) before any approval question. PLAN/SHAPE counts as the artifact here too.
|
|
119
|
+
- **Guided decision.** At a `[human gate]`, APPROVE is a guided choice — one `▶ … (recommended)` + 1–3 described alternatives; never a bare next step.
|
|
78
120
|
- **Reconcile the count.** FLAGS must reconcile with `add.py report --decide`'s open-item count before the ask. Engine wins if prose disagrees — fix the data, not the sentence.
|
|
79
121
|
- **Never pre-stamp a human decision point.** Freeze / gate / lock fields stay DRAFT or blank until the answer returns: show → ask → stamp → advance.
|
|
122
|
+
- **Never dump raw engine output as the plan.** Summarize `add.py status`/`report` through PLAN/SHAPE (or prose) — the engine's full verbosity is for `add.py` itself, not the chat message wrapped around it.
|
|
80
123
|
- **One report per decision point.** After an approval, point at the frozen artifact — do not re-render the bundle.
|
|
81
124
|
- **Honest scope.** "Done" means the request, not the last task: report "task 2/3", never "done" while approved scope remains.
|
|
82
|
-
- **The question is a summary, never the artifact.** A compact SUMMARY ·
|
|
83
|
-
- **NEXT is not a second gate.** The single decision stays in
|
|
84
|
-
- **DECIDED never holds a gate-class call.** Security / residue / lowered-autonomy calls escalate in
|
|
125
|
+
- **The question is a summary, never the artifact.** A compact SUMMARY · FLAGS block sits in chat immediately before the ask; the question text itself is two lines at most — intent + what "yes" means + flag count — pointing at the report above.
|
|
126
|
+
- **NEXT is not a second gate.** The single decision stays in APPROVE; NEXT is ranked recommendations only.
|
|
127
|
+
- **DECIDED never holds a gate-class call.** Security / residue / lowered-autonomy calls escalate in APPROVE.
|
|
128
|
+
- **Recorded, not just performed.** Rendering this template at a gate is recorded, not assumed — TASK.md's `Reported: yes` (§3/§6) is the mechanical trace; `add.py audit` surfaces an unrecorded one (`contract_report_unrecorded` / `verify_report_unrecorded`), a spot-audit the backstop.
|
|
85
129
|
</constraints>
|
package/skill/add/run.md
CHANGED
|
@@ -69,6 +69,9 @@ recorded pass is an explicit pass, not a skip).
|
|
|
69
69
|
contract edited; loops dry; completeness-critic clean; and the deep check below.
|
|
70
70
|
- **The deep check (every gate, do not skim).** If the task produced code, record that every new symbol is referenced (wiring) and that no new dead/unused code was introduced. If it produced prose or non-code, record a semantic read. An unfilled deep check is a **shallow verify**, not an auto-PASS.
|
|
71
71
|
- **The recorded refute-read (under `auto`).** The earned-green refute-read (`6-verify.md`) is not just run — its **verdict is recorded** in §6 (`EARNED | NOT-EARNED`); `add.py audit` surfaces an unrecorded one as `refute_unrecorded` — one of three shape lints it lists (with `shallow_deep_check` + `risk_unset`) — and a human spot-audit is the backstop. NOT-EARNED routes to `add.py heal`, never an auto-PASS.
|
|
72
|
+
- **The recorded Advisor 3-lens verdict (under `auto`).** The Advisor 3-lens sweep (security → concurrency → architecture, `6-verify.md`) is recorded in §6 `### Advisor 3-lens verdict`; `add.py audit` surfaces an unfilled block as `advisor_verdict_unrecorded` — a shape lint alongside `refute_unrecorded`.
|
|
73
|
+
- **The rendered gate report (§3/§6).** Report-template.md's ceremony is recorded, not just performed — a `Reported: yes` line in §3/§6; `add.py audit` surfaces an unrecorded one as `contract_report_unrecorded`/`verify_report_unrecorded`; a human spot-audit is the backstop.
|
|
74
|
+
- **The `advisor-gate-relax` pathway.** A `risk: high` + `sensitivity: mechanical` task whose §6 Advisor 3-lens verdict records Verdict `PASS` and Residue `none` may auto-complete via `add.py gate PASS` **without** a lowered autonomy level. Security and every non-mechanical sensitivity class are never relaxed by this pathway — the high-risk guard still applies.
|
|
72
75
|
- **Always escalates to a human (never auto-passed):** any **security** finding (HARD-STOP, always);
|
|
73
76
|
a **concurrency**/timing risk the tests cannot exercise; an **architecture**/layering violation;
|
|
74
77
|
any failing test.
|
|
@@ -122,9 +125,8 @@ autonomy: manual | conservative | auto
|
|
|
122
125
|
- **conservative** — the deliberate *lowering*: the run converges but STOPS at the verify gate.
|
|
123
126
|
- **manual** — the strict floor: the human owns the verify gate; the engine never auto-resolves.
|
|
124
127
|
|
|
125
|
-
> **v7 reversal (recorded).** Earlier the default was `conservative`; v7 flips it
|
|
126
|
-
>
|
|
127
|
-
> lowered wherever risk demands.
|
|
128
|
+
> **v7 reversal (recorded).** Earlier the default was `conservative`; v7 flips it to `auto` as
|
|
129
|
+
> the default. The level is still **per-scope** and is lowered wherever risk demands.
|
|
128
130
|
|
|
129
131
|
**The high-risk guard.** On a **high-risk or method-defining scope** `auto` must be lowered to
|
|
130
132
|
`conservative` or `manual`; leaving it at `auto` is the reject code **`unguarded_high_risk_auto`**.
|
package/skill/add/scope.md
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
Before drafting the goal sentence, position the request in what already exists — distinct from intake's classification, not redundant with it.
|
|
21
21
|
|
|
22
22
|
1. **Ground in current assets.** Read the goal against what exists — the goal must reflect what the project already is. Ground as rigorously as a task's §0 (`phases/0-ground.md`), using the **same four fields** at milestone scope: **Touches** (the subsystems/files the milestone spans) · **Context** (the docs · todos · config · data it works against) · **Honors** (the `PROJECT.md` / `CONVENTIONS.md` invariants it must respect) · **Anchors** (the existing contracts/symbols its tasks will cite). Grounding is complete when each is named from real assets, not assumed.
|
|
23
|
-
2. **Relate to the milestone map.**
|
|
23
|
+
2. **Relate to the milestone map.** Run `add.py search <keyword> [<keyword> ...]` first — then read every existing goal — `.add/milestones/*/MILESTONE.md` and `.add/archive/*` — and name THIS request's relationship: *extends* X · *depends-on* Y · *overlaps* Z. Record in the `rationale` line.
|
|
24
24
|
3. **If the goal is already delivered** by an existing milestone, reject `duplicate_goal` and route as `task` or `change-request`.
|
|
25
25
|
|
|
26
26
|
## Brainstorm before you draft — co-specify at milestone level
|
|
@@ -40,7 +40,7 @@ Rank assumptions lowest-confidence first; top 1–2 get the flag: `⚠ <assumpti
|
|
|
40
40
|
|
|
41
41
|
- **goal** — ONE outcome sentence (no "and" — that is two milestones).
|
|
42
42
|
- **rationale** — intake bucket + WHY, AND the milestone relationship from "Position the goal". Never in state.json.
|
|
43
|
-
- **Scope In/Out** — explicit anti-creep deferral list. An empty Out list means scope is not yet thought through.
|
|
43
|
+
- **Scope In/Out** — explicit anti-creep deferral list. An empty Out list means scope is not yet thought through. UI/UX scope? use the template's Scope hint vocabulary, not generic prose.
|
|
44
44
|
- **Shared decisions & glossary deltas** — cross-cutting rules every task must honor. New terms get a glossary entry.
|
|
45
45
|
- **Shared / risky contracts to freeze first** — decision points between tasks; name the owning task.
|
|
46
46
|
- **Tasks (breadth-first)** — `slug · depends-on · one line` each. Decompose by deliverable; keep each task one-file-sized.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Sensitivity — the project's risk-class vocabulary
|
|
2
|
+
|
|
3
|
+
A task declares its risk-CLASS with a `sensitivity:` line in the TASK header — *what
|
|
4
|
+
kind* of risk it carries, distinct from `risk:` (*how much*). The engine validates +
|
|
5
|
+
surfaces the human's declaration; it **never classifies**. Read live by freeze/status/check.
|
|
6
|
+
|
|
7
|
+
## The base four (method-universal — always apply)
|
|
8
|
+
|
|
9
|
+
- **security** — authn/authz, secrets, crypto, attack surface. A finding here is HARD-STOP;
|
|
10
|
+
the human is in the loop in EVERY tier (never advisor-gated, never auto-passed).
|
|
11
|
+
- **data** — persistence, migrations, privacy of stored records, data loss.
|
|
12
|
+
- **architecture** — module boundaries, contracts, cross-cutting structure.
|
|
13
|
+
- **mechanical** — rote, low-impact change (rename, move, format, doc). The only class
|
|
14
|
+
a recorded advisor verdict (three §6 fields: Verdict · Residue · Binding) can gate for
|
|
15
|
+
auto-completion (`advisor-gate-relax`).
|
|
16
|
+
|
|
17
|
+
These four can't be removed — a project only EXTENDS them.
|
|
18
|
+
|
|
19
|
+
## Extend per project (you maintain this)
|
|
20
|
+
|
|
21
|
+
Domain risk-classes live in `.add/GLOSSARY.md` under a `## Sensitivity classes` section,
|
|
22
|
+
one `- <token>: <definition>` bullet per line:
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
## Sensitivity classes
|
|
26
|
+
Base (always apply): security · data · architecture · mechanical
|
|
27
|
+
- pii: personally identifiable information; any task touching it escalates to human review
|
|
28
|
+
- payments: money movement; reconciliation + an audit trail are required
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`freeze` then accepts a header `sensitivity:` value from **base ∪ your domain classes**;
|
|
32
|
+
a token in neither is refused `sensitivity_invalid`. `status` prints the active task's
|
|
33
|
+
class; `check` nudges (`sensitivity_classes_unset`, never red) until you declare some.
|
|
34
|
+
|
|
35
|
+
## The AI's job — keep it current
|
|
36
|
+
|
|
37
|
+
- When a milestone or task reveals a **new kind of risk** this project carries (a regulated
|
|
38
|
+
data category, a payment rail, a tenancy boundary), ADD it as a class with a one-line
|
|
39
|
+
definition — propose it, the human confirms (it is foundation, like a glossary term).
|
|
40
|
+
- **Re-read the section each session** (it rides `GLOSSARY.md`); pick the tightest class
|
|
41
|
+
when you declare a task's `sensitivity:` at freeze.
|
|
42
|
+
- **Map domain → base behavior** in the definition so downstream gating is unambiguous —
|
|
43
|
+
e.g. "pii … escalates to human review" pins it as human-floor, not advisor-gatable.
|
|
44
|
+
|
|
45
|
+
## Hold the line
|
|
46
|
+
|
|
47
|
+
- **Declared, never inferred** — the engine reads your token; it does not guess a class.
|
|
48
|
+
- **Base four are universal** — domain classes add to them, never replace them; security
|
|
49
|
+
stays a human floor in every tier.
|
|
50
|
+
- **A comment is never a declaration** — commented-out example bullets don't count; only a
|
|
51
|
+
real `- <token>:` line under the section is a class.
|