@pilotspace/add 1.14.0 → 1.15.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 +149 -1
- package/THIRD_PARTY_NOTICES.md +41 -0
- package/bin/cli.js +37 -11
- 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/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 +3 -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 +17 -12
- package/skill/add/advisor.md +31 -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 +1 -2
- 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 +7 -4
- package/skill/add/phases/7-observe.md +2 -1
- package/skill/add/report-template.md +61 -18
- package/skill/add/run.md +4 -3
- package/skill/add/scope.md +2 -2
- package/skill/add/sensitivity.md +51 -0
- package/skill/add/streams.md +24 -23
- package/tooling/add.py +822 -26
- 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 +36 -6
- package/tooling/templates/gitignore.tmpl +12 -0
- package/tooling/templates/personas/_template.md.tmpl +60 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,7 +4,155 @@ All notable changes to the ADD method (`@pilotspace/add` on npm,
|
|
|
4
4
|
`pilotspace-add` on PyPI) are documented here. The format follows
|
|
5
5
|
[Keep a Changelog](https://keepachangelog.com/); versions follow semver.
|
|
6
6
|
|
|
7
|
-
## [
|
|
7
|
+
## [1.15.0] — 2026-07-02
|
|
8
|
+
|
|
9
|
+
Ten milestones — the largest bundle yet — round out ADD's self-knowledge
|
|
10
|
+
(**context-search**, **seams**, **artifact-graph**, **traceability-ids**,
|
|
11
|
+
**ground-trust**, **drift-guard**), extend it past static rules
|
|
12
|
+
(**persona-teacher-bundle**, **persona-learning-loop**, **advisor-gated-autonomy**),
|
|
13
|
+
and past Claude Code itself (**portable-roster**). All additive; nothing removed
|
|
14
|
+
or renamed on the CLI surface.
|
|
15
|
+
|
|
16
|
+
### Added (context-search — find prior work before you drift into it)
|
|
17
|
+
- **`add.py search <keyword...>`** — case-insensitive substring search over the
|
|
18
|
+
milestone/task corpus (active + archived), title/goal/rationale lines only, never
|
|
19
|
+
the full body. Surfaced at new-scope drafting and inside the specify/scenarios
|
|
20
|
+
phase guides, so related prior work is found before drafting — not after a
|
|
21
|
+
conflicting design ships.
|
|
22
|
+
|
|
23
|
+
### Added (seams — one home for a shared contract)
|
|
24
|
+
- **`SEAMS.md`.** Symbols that ≥2 tasks touch get promoted into a milestone-level
|
|
25
|
+
doc that §0 references, so a shared contract has one home instead of being
|
|
26
|
+
re-derived — and drifting — per task.
|
|
27
|
+
|
|
28
|
+
### Added (artifact-graph — a traversable cross-artifact graph)
|
|
29
|
+
- **Bidirectional backlinks.** Every ADD artifact now carries minimal backlink
|
|
30
|
+
metadata (task↔milestone↔release↔deps↔delta) so the cross-artifact graph is
|
|
31
|
+
traversable without re-deriving it by hand.
|
|
32
|
+
|
|
33
|
+
### Added (traceability-ids — every rule earns a stable ID)
|
|
34
|
+
- **`M#` / `R#` rule IDs.** Every §1 Must/Reject rule gets a stable ID that §2
|
|
35
|
+
scenarios and §4 tests reference via a `covers:` line, plus lint coverage so no
|
|
36
|
+
rule ships unscenarioed or untested.
|
|
37
|
+
|
|
38
|
+
### Added (persona-teacher-bundle — a vendored, pinned teacher corpus)
|
|
39
|
+
- **agency-agents, vendored.** The agency-agents teacher corpus ships as a pinned,
|
|
40
|
+
MIT-attributed local library (`.add/personas-teacher/`), bundled into both the
|
|
41
|
+
npm and PyPI distributions, de-branded from method prose, and refreshed on a
|
|
42
|
+
schedule. The engine stays NO-EXEC; the release build is zero-network.
|
|
43
|
+
|
|
44
|
+
### Added (persona-learning-loop — personas that learn your project)
|
|
45
|
+
- **Project-fit personas.** The AI seeds requirements personas at setup (a living
|
|
46
|
+
doc the project uses live), grows them through the observe→fold self-improve
|
|
47
|
+
loop, applies them at UDD/advisor/build, and exposes a cross-runner
|
|
48
|
+
(Claude Code · Codex · …) persona-aware subagent prompt.
|
|
49
|
+
|
|
50
|
+
### Added (advisor-gated-autonomy — earn autonomy through instrumentation, not by removing the gate)
|
|
51
|
+
- **A persisted, advisor-guarded `auto + parallel` run mode** so high-speed builds stay safe
|
|
52
|
+
without a human on every step. The whole milestone was dogfooded — every task built
|
|
53
|
+
`conservative` / human-gated, because you cannot auto-gate the feature that relaxes auto-gating.
|
|
54
|
+
- **`sensitivity:` taxonomy.** A human-declared TASK-header risk-CLASS (base
|
|
55
|
+
`security · data · architecture · mechanical`, project-extensible via `GLOSSARY.md`) — ADD now
|
|
56
|
+
reasons about *what kind* of risk, not just *how much* (`risk:`). Validated at freeze; the engine
|
|
57
|
+
never classifies.
|
|
58
|
+
- **Persisted run mode + setup choice.** The `auto + parallel` posture is persisted and chosen at
|
|
59
|
+
setup; `add.py status` shows `run mode: parallel + auto`. The non-interactive default stays
|
|
60
|
+
byte-identical.
|
|
61
|
+
- **Persisted DAG-plan snapshot.** An auditable snapshot of the computed plan (waves · critical path ·
|
|
62
|
+
tiers) with a freshness check vs the live `depends_on` edges (edges stay the source of truth).
|
|
63
|
+
- **Advisor 3-lens verdict.** The refute-read becomes a tier-aware single advisor running a sequential
|
|
64
|
+
security → concurrency → architecture sweep recorded in §6 (Verdict · Residue · Binding) — the
|
|
65
|
+
non-functional review is now structured and auditable; `advisor_verdict_unrecorded` measure-not-block lint.
|
|
66
|
+
- **Advisor coverage audits (measure, never block).** `add.py audit` flags a missing advisor verdict,
|
|
67
|
+
a self-reviewed verdict (reviewer = author), and a mechanical task with advisor-found residue (mis-tier).
|
|
68
|
+
- **`advisor-gate-relax` — the narrowest safe relaxation.** A `risk: high` + `sensitivity: mechanical`
|
|
69
|
+
task with a recorded `Verdict: PASS` + `Residue: none` auto-completes via `gate PASS` without a lowered
|
|
70
|
+
autonomy level. **Security and every non-mechanical class are never relaxed** — the human-in-the-loop
|
|
71
|
+
floor is untouched.
|
|
72
|
+
- **Per-phase spawn hint.** `status`/`guide` print an advisory subagent-spawn hint (idiom + tier) for the
|
|
73
|
+
active phase; advisory only — the engine still never spawns.
|
|
74
|
+
- Documentation, glossary (4 new terms), and headers aligned with the feature.
|
|
75
|
+
|
|
76
|
+
### Added (portable-roster — the phase-roster for every coding tool, not just Claude)
|
|
77
|
+
- **`AGENTS.md` / `.clinerules` carry the roster.** Non-Claude coding tools (Cursor,
|
|
78
|
+
Copilot, Codex, Cline, …) now receive the ADD phase-roster's 5 roles and
|
|
79
|
+
boundaries through the `AGENTS.md` the installer already drops, not just
|
|
80
|
+
Claude Code's native subagents.
|
|
81
|
+
- **`add-advisor` — the 5th roster agent.** A consultative, frontier-model agent
|
|
82
|
+
(`model: opus`) any phase can spawn on a medium-hard decision — an ambiguous
|
|
83
|
+
read, a risky shape, a change of approach. It recommends and weighs tradeoffs;
|
|
84
|
+
it never decides.
|
|
85
|
+
|
|
86
|
+
### Changed (ground-trust — GROUND surfaces problems, not just structure)
|
|
87
|
+
- **GROUND now surfaces the issues/risks** it finds in the real code (feeding
|
|
88
|
+
SPECIFY) and links each task's related intent back to the foundation
|
|
89
|
+
(`PROJECT.md` · `GLOSSARY.md` · conversation) — specs build on problems found,
|
|
90
|
+
not assumed.
|
|
91
|
+
|
|
92
|
+
### Changed (drift-guard — kill §0 reference rot)
|
|
93
|
+
- **§0 cites symbols, not line numbers**, stamps `ground_sha`, refreshes at close,
|
|
94
|
+
and strips dead live-phase scaffolding at done — a closed TASK.md stays true to
|
|
95
|
+
the code instead of rotting the moment a line shifts.
|
|
96
|
+
|
|
97
|
+
### Changed (loop-readability — human-scannable output across every phase)
|
|
98
|
+
- **Report shape, audited and tightened.** `report-template.md`'s ARC + 6-block
|
|
99
|
+
shape was checked against its own stated rules (summary-first, one decision,
|
|
100
|
+
guided-choice) across all 8 phase guides' gate-reporting cues; 2 guides
|
|
101
|
+
(`0-setup.md`'s baseline-lock sentence, `3-contract.md`'s freeze-gate
|
|
102
|
+
sentence) had drifted and were tightened to name SHAPE ahead of the APPROVE
|
|
103
|
+
guided choice.
|
|
104
|
+
- **SKILL.md's compact pipeline sentence now names the decision banner**
|
|
105
|
+
("rendered first, above everything") ahead of the ARC, matching
|
|
106
|
+
`report-template.md`'s actual render order — closing a gap the shape audit
|
|
107
|
+
surfaced.
|
|
108
|
+
- **`MILESTONE.md.tmpl` gains a UI/UX Scope hint** — the axes to name
|
|
109
|
+
precisely for a UI feature (information architecture, interaction pattern,
|
|
110
|
+
visual hierarchy, design tokens, component states, accessibility floor,
|
|
111
|
+
responsive breakpoints, user journey), pointing at `design.md` — with
|
|
112
|
+
adoption pointers wired into `1-specify.md` and `scope.md` so drafters
|
|
113
|
+
actually reach it. The seed this milestone was created to dogfood.
|
|
114
|
+
|
|
115
|
+
### Added / Changed (loose tasks since 1.14.0)
|
|
116
|
+
- **Report template PLAN/SHAPE + APPROVE banner** (`report-plan-approve`) — the
|
|
117
|
+
chat-report decision point renders a clearer guided-choice banner.
|
|
118
|
+
- **`status` pagination** (`status-pagination`) — milestones/tasks sort by
|
|
119
|
+
updated-descending and cap to the top 10, with a `--all` escape hatch, so a
|
|
120
|
+
long-lived project's `status` stays scannable.
|
|
121
|
+
- **Lean 3-agent phase roster + adaptive persona agent** (`phase-agents-lean`).
|
|
122
|
+
- **Skill-tree compaction** (`skill-tree-compaction-audit`) — audited and
|
|
123
|
+
compacted the ADD skill tree for genuine prose redundancy under the pinned
|
|
124
|
+
lean-fence budget.
|
|
125
|
+
- **Vendor-tree `.gitignore` fixes** — nested `.add/.gitignore` vendor-tree
|
|
126
|
+
patterns now resolve relative to `.add/`, not repo root
|
|
127
|
+
(`gitignore-vendor-path-fix`); the installer's own `.gitignore` seed covers all
|
|
128
|
+
3 managed vendor trees (`installer-gitignore-mirrors`); `update --global`
|
|
129
|
+
re-seeds `.gitignore` for every registered project, not just fresh installs
|
|
130
|
+
(`update-global-gitignore-seed`).
|
|
131
|
+
- **CI tooling-mirror gap closed** (`ci-tooling-mirror-gap`) — the `.add/tooling`
|
|
132
|
+
dogfood mirror is materialized in CI's test + publish-guard jobs, not just
|
|
133
|
+
locally.
|
|
134
|
+
- **Fresh-checkout skip-count tolerance widened**
|
|
135
|
+
(`nested-suite-skip-count-tolerance`) — the nested-suite OK-regex now tolerates
|
|
136
|
+
every known environment-conditional skip, not just the recursion guard.
|
|
137
|
+
- **Scope-walk hygiene** — `.claude` pruned from the scope walk
|
|
138
|
+
(`scope-exclude-claude`); stale mirror trees re-synced to canonical
|
|
139
|
+
(`mirror-resync`); `.add/tooling` untracked as a regenerable dogfood mirror
|
|
140
|
+
(`untrack-add-tooling`).
|
|
141
|
+
|
|
142
|
+
### Changed
|
|
143
|
+
- Five version sources bump in lockstep to **1.15.0** (`package.json`,
|
|
144
|
+
`package-lock.json` ×2, `pyproject.toml`, `.claude-plugin/plugin.json`,
|
|
145
|
+
`add_method.__version__`).
|
|
146
|
+
|
|
147
|
+
This release bundles **11 closed milestones** (`seams`, `context-search`,
|
|
148
|
+
`drift-guard`, `artifact-graph`, `ground-trust`, `traceability-ids`,
|
|
149
|
+
`persona-teacher-bundle`, `persona-learning-loop`, `advisor-gated-autonomy`,
|
|
150
|
+
`portable-roster`, `loop-readability`) and 13 loose tasks since 1.14.0. Every
|
|
151
|
+
milestone was built end-to-end through ADD's own spec→tests→build→verify flow.
|
|
152
|
+
25 open SPEC deltas (non-security backlog spanning the newly-grounded
|
|
153
|
+
install-update-hardening tasks, report-shape-scan-audit/skill-banner-cue
|
|
154
|
+
follow-ups, and pre-existing items — full list: `add.py deltas`) ride forward
|
|
155
|
+
unresolved into the next cycle.
|
|
8
156
|
|
|
9
157
|
## [1.14.0] — 2026-06-29
|
|
10
158
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
This project bundles third-party material. Each component below is redistributed under its own
|
|
4
|
+
license, retained in full alongside the vendored files. These notices satisfy the attribution
|
|
5
|
+
requirement of the licenses; they are not affected by any product/marketing naming choices.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Vendored teacher corpus — `add-method/personas-teacher/`
|
|
10
|
+
|
|
11
|
+
A pinned snapshot of an external library of agent definitions, vendored as a local teacher corpus
|
|
12
|
+
that the persona phase reads off-build. The pinned upstream commit and trim rules are recorded in
|
|
13
|
+
`add-method/personas-teacher/VENDOR.md`; the upstream license is retained verbatim at
|
|
14
|
+
`add-method/personas-teacher/LICENSE`.
|
|
15
|
+
|
|
16
|
+
- License: **MIT**
|
|
17
|
+
- Copyright (c) 2025 AgentLand Contributors
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
MIT License
|
|
21
|
+
|
|
22
|
+
Copyright (c) 2025 AgentLand Contributors
|
|
23
|
+
|
|
24
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
25
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
26
|
+
in the Software without restriction, including without limitation the rights
|
|
27
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
28
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
29
|
+
furnished to do so, subject to the following conditions:
|
|
30
|
+
|
|
31
|
+
The above copyright notice and this permission notice shall be included in all
|
|
32
|
+
copies or substantial portions of the Software.
|
|
33
|
+
|
|
34
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
35
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
36
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
37
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
38
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
39
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
40
|
+
SOFTWARE.
|
|
41
|
+
```
|
package/bin/cli.js
CHANGED
|
@@ -585,11 +585,21 @@ function seedSoulMd(target) {
|
|
|
585
585
|
}
|
|
586
586
|
}
|
|
587
587
|
|
|
588
|
-
//
|
|
589
|
-
//
|
|
590
|
-
//
|
|
591
|
-
//
|
|
592
|
-
//
|
|
588
|
+
// kept OUTSIDE add_engine/constants.py / gitignore.tmpl deliberately: the engine's own
|
|
589
|
+
// _GITIGNORE_BODY constant must never contain "personas-teacher" (test_engine_unchanged_
|
|
590
|
+
// and_handsoff — the engine stays hands-off of the teacher vendor tree). The INSTALLER
|
|
591
|
+
// already names that tree explicitly (MANAGED/OPTIONAL), so it is free to seed this one
|
|
592
|
+
// extra ignore line itself. BARE (not repo-root style): .add/.gitignore lives INSIDE
|
|
593
|
+
// .add/, so git resolves its patterns relative to .add/ itself. Twin of
|
|
594
|
+
// _installer.py:_INSTALLER_MANAGED_IGNORE_EXTRA.
|
|
595
|
+
const INSTALLER_MANAGED_IGNORE_EXTRA = ["personas-teacher/"];
|
|
596
|
+
|
|
597
|
+
// Ensure .add/.gitignore lists the engine's transient artifacts + managed vendor trees.
|
|
598
|
+
// Seed it from the bundled tooling/templates/gitignore.tmpl (plus
|
|
599
|
+
// INSTALLER_MANAGED_IGNORE_EXTRA) if absent; else APPEND-IF-ABSENT each pattern line that
|
|
600
|
+
// combined body carries that the file lacks — additive only, never reorders/removes user
|
|
601
|
+
// lines, idempotent; comment/blank lines are not appended to an existing file. Fail-soft.
|
|
602
|
+
// Twin of _installer.py:_seed_gitignore.
|
|
593
603
|
function seedGitignore(target) {
|
|
594
604
|
const source = path.join(PKG_ROOT, "tooling", "templates", "gitignore.tmpl");
|
|
595
605
|
if (!fs.existsSync(source)) {
|
|
@@ -598,7 +608,9 @@ function seedGitignore(target) {
|
|
|
598
608
|
}
|
|
599
609
|
const dest = path.join(target, ".add", ".gitignore");
|
|
600
610
|
try {
|
|
601
|
-
|
|
611
|
+
let body = fs.readFileSync(source, "utf8");
|
|
612
|
+
if (!body.endsWith("\n")) body += "\n";
|
|
613
|
+
body += INSTALLER_MANAGED_IGNORE_EXTRA.join("\n") + "\n";
|
|
602
614
|
if (!fs.existsSync(dest)) {
|
|
603
615
|
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
604
616
|
fs.writeFileSync(dest, body); // seed-if-missing
|
|
@@ -725,7 +737,13 @@ const MANAGED = [
|
|
|
725
737
|
["skill/add", [".claude", "skills", "add"], false],
|
|
726
738
|
["tooling", [".add", "tooling"], true],
|
|
727
739
|
["docs", [".add", "docs"], false],
|
|
740
|
+
["personas-teacher", [".add", "personas-teacher"], false],
|
|
728
741
|
];
|
|
742
|
+
// Optional managed trees: an ENHANCEMENT the persona phase reads, not core runtime. The real
|
|
743
|
+
// package always ships these (guarded by test_packaging); a malformed/older package missing one
|
|
744
|
+
// must NOT abort the install — the core lands and the optional tree is soft-skipped. Twin of
|
|
745
|
+
// _installer.py:OPTIONAL. Design-for-failure.
|
|
746
|
+
const OPTIONAL = new Set(["personas-teacher"]);
|
|
729
747
|
const STAMP_FILE = ".add-version";
|
|
730
748
|
const LOCK_FILE = ".update.lock"; // the `update --global` home lock (never user-data)
|
|
731
749
|
|
|
@@ -786,7 +804,7 @@ function cleanReplaceTree(src, dest, stripTests) {
|
|
|
786
804
|
return { restored: restored, refreshed: refreshed };
|
|
787
805
|
}
|
|
788
806
|
|
|
789
|
-
const TREE_LABEL = { "skill/add": "skill", "tooling": "tooling", "docs": "docs" };
|
|
807
|
+
const TREE_LABEL = { "skill/add": "skill", "tooling": "tooling", "docs": "docs", "personas-teacher": "personas" };
|
|
790
808
|
|
|
791
809
|
// Per managed tree: "missing" (dest absent OR empty) or "present".
|
|
792
810
|
function managedStatus(target) {
|
|
@@ -805,7 +823,9 @@ function managedStatus(target) {
|
|
|
805
823
|
// a corrupt package leaves the target untouched).
|
|
806
824
|
function reconcile(args, target, srcRoot) {
|
|
807
825
|
srcRoot = srcRoot || PKG_ROOT; // default: the package; the global home feeds propagation
|
|
808
|
-
const trees = MANAGED
|
|
826
|
+
const trees = MANAGED
|
|
827
|
+
.filter(([sub]) => !(sub === "skill/add" && args.noSkill))
|
|
828
|
+
.filter(([sub]) => !(OPTIONAL.has(sub) && !fs.existsSync(path.join(srcRoot, sub)))); // soft-skip absent optional
|
|
809
829
|
for (const [sub] of trees) {
|
|
810
830
|
if (!fs.existsSync(path.join(srcRoot, sub))) {
|
|
811
831
|
fail("missing packaged source: " + path.join(srcRoot, sub));
|
|
@@ -876,18 +896,20 @@ const GLOBAL_TREES = [
|
|
|
876
896
|
["skill/add", ["skill", "add"], false],
|
|
877
897
|
["tooling", ["tooling"], true],
|
|
878
898
|
["docs", ["docs"], false],
|
|
899
|
+
["personas-teacher", ["personas-teacher"], false],
|
|
879
900
|
];
|
|
880
901
|
|
|
881
902
|
// Clean-replace the bundled managed layer INTO <home> (canonical mirror), then DEPLOY the
|
|
882
903
|
// skill to ~/.claude/skills/add. Throws if a dir can't be written (caller -> home_unwritable).
|
|
883
904
|
// Prechecks ALL sources first (design-for-failure: a corrupt package leaves the home as-is).
|
|
884
905
|
function reconcileGlobal(home, claudeDir, noSkill) {
|
|
885
|
-
|
|
906
|
+
const trees = GLOBAL_TREES.filter(([sub]) => !(OPTIONAL.has(sub) && !fs.existsSync(path.join(PKG_ROOT, sub))));
|
|
907
|
+
for (const [sub] of trees) {
|
|
886
908
|
if (!fs.existsSync(path.join(PKG_ROOT, sub))) {
|
|
887
909
|
fail("missing packaged source: " + path.join(PKG_ROOT, sub));
|
|
888
910
|
}
|
|
889
911
|
}
|
|
890
|
-
for (const [sub, destParts, stripTests] of
|
|
912
|
+
for (const [sub, destParts, stripTests] of trees) {
|
|
891
913
|
cleanReplaceTree(path.join(PKG_ROOT, sub), path.join(home, ...destParts), stripTests);
|
|
892
914
|
}
|
|
893
915
|
if (!noSkill) cleanReplaceTree(path.join(home, "skill", "add"), claudeDir, false);
|
|
@@ -1123,6 +1145,7 @@ function cmdUpdateGlobal(args) {
|
|
|
1123
1145
|
log(" ⚠ registered path " + np + " is not an ADD project (no .add/) — dropping"); dropped++; continue;
|
|
1124
1146
|
}
|
|
1125
1147
|
reconcile(args, np, home); // standard MANAGED map, sourced from the home mirror
|
|
1148
|
+
seedGitignore(np); // keep .add/.gitignore current too (parity: _installer.py)
|
|
1126
1149
|
// re-persist an opted-in project (one that already has a snapshot); a vanished
|
|
1127
1150
|
// project's snapshot is KEPT above (the backup outlives the dir).
|
|
1128
1151
|
if (fs.existsSync(path.join(home, "data", dataKey(np)))) persistData(home, np);
|
|
@@ -1156,7 +1179,10 @@ function cmdUpdate(args) {
|
|
|
1156
1179
|
// same-version no-op ONLY when nothing is missing — a missing managed tree HEALS
|
|
1157
1180
|
// even at the current version (heal-reconcile).
|
|
1158
1181
|
const status = managedStatus(target);
|
|
1159
|
-
|
|
1182
|
+
// An optional tree absent from BOTH the package and the project can't be healed, so it
|
|
1183
|
+
// never counts as "missing" — otherwise a same-version update would never reach the no-op.
|
|
1184
|
+
const missing = MANAGED.some(([sub]) => status[sub] === "missing"
|
|
1185
|
+
&& !(OPTIONAL.has(sub) && !fs.existsSync(path.join(PKG_ROOT, sub))));
|
|
1160
1186
|
if (cur === version && !args.force && !missing) {
|
|
1161
1187
|
log("ADD already at " + version + " — nothing to update (use --force to re-materialize).");
|
|
1162
1188
|
return;
|
package/docs/02-the-flow.md
CHANGED
|
@@ -93,7 +93,7 @@ The flow runs in two directions under two rules that never conflict. **Backward
|
|
|
93
93
|
| 6 Verify | own the residue (security · concurrency · architecture); approve when `conservative` | gather evidence; **auto-PASS on complete evidence** under `autonomy: auto` |
|
|
94
94
|
| 7 Observe | read the signal; consolidate confirmed deltas into PROJECT.md | run behind a flag; emit lessons learned |
|
|
95
95
|
|
|
96
|
-
**What the human sees when it is their turn — the decision arc.** Whenever the flow stops for the human — the baseline approval that ends setup, the contract-freeze decision point and an escalated verify gate within each task, and the wider decision points of the loop (intake · scope · milestone close · stage graduation) — the AI opens its report with the **decision arc**: three engine-sourced lines — `goal:` the milestone goal the work serves · `done:` the proven progress toward it · `plan:` what comes next. The arc renders
|
|
96
|
+
**What the human sees when it is their turn — the decision banner and arc.** Whenever the flow stops for the human — the baseline approval that ends setup, the contract-freeze decision point and an escalated verify gate within each task, and the wider decision points of the loop (intake · scope · milestone close · stage graduation) — the AI opens its report with a **banner** (`PLAN · <title> · <gate> → APPROVE?` plus a file-path line) and the **decision arc**: three engine-sourced lines — `goal:` the milestone goal the work serves · `done:` the proven progress toward it · `plan:` what comes next. The arc renders above the report's summary, so the human confirms with sight of the whole trajectory rather than a local snapshot. Within that report the AI also presents **APPROVE** itself as a **guided choice** — one highlighted **recommended pick** (`▶ … (recommended)`) plus its real, described alternatives — so the human chooses with the recommendation and each option's consequence in view rather than a bare next-step line. Both are presentation only — they never add a gate or change an outcome, and the guided choice fires at human gates only. See [Appendix C](./appendix-c-glossary.md) and the `add` skill's `report-template.md` for the convention itself.
|
|
97
97
|
|
|
98
98
|
## What survives, and what is disposable
|
|
99
99
|
|
|
@@ -35,6 +35,10 @@ Four parts, kept short:
|
|
|
35
35
|
|
|
36
36
|
Naming the errors matters. "Reject bad amounts" is an instruction to guess; `amount <= 0 -> "amount_invalid"` is a rule that produces a testable scenario and a defined contract response.
|
|
37
37
|
|
|
38
|
+
### Rule IDs (optional — opt-in by usage)
|
|
39
|
+
|
|
40
|
+
Give each Must a stable `M<n>:` ID; a Reject's own error code already IS its ID (referenced later as `R:<error_code>`). Once a task uses a tag anywhere in §2 SCENARIOS or §4 TESTS, `add.py check` starts asking that every Must/Reject be covered by a scenario tag or a test's `covers:` line — a task that never tags anything is never retro-flagged. See the template's own inline example for the exact grammar.
|
|
41
|
+
|
|
38
42
|
## Template
|
|
39
43
|
|
|
40
44
|
```
|
|
@@ -58,6 +58,10 @@ Scenario: not my account
|
|
|
58
58
|
|
|
59
59
|
The `And no balance changes` line is doing real work: it specifies that a rejected transfer must leave the world untouched — a property the AI could easily violate by deducting before checking.
|
|
60
60
|
|
|
61
|
+
### Tagging back to a rule ID (optional — opt-in by usage)
|
|
62
|
+
|
|
63
|
+
If §1's Musts and Rejects carry stable IDs (`M1:`, and a Reject's own error code as `R:<error_code>`), tag each `Scenario:` line with the ID(s) it covers, e.g. `# M1, R:amount_invalid`. Once a task tags even one scenario this way, `add.py check` starts confirming every §1 ID is covered by a tag here or a `covers:` line in §4 TESTS — a task that never tags anything is left alone. See the template's own inline example for the exact grammar.
|
|
64
|
+
|
|
61
65
|
## Cover the edge cases
|
|
62
66
|
|
|
63
67
|
The transfer above is one domain; the same gaps recur in every domain — an HR leave request, a marketing campaign send, a checkout. Beyond the spec's "Reject" rules, sweep the recurring gaps and add a scenario for each that applies (or rule it out on purpose): boundary, duplicate/idempotent, ownership, stale/out-of-order, partial failure, concurrency, malformed input, limits/volume.
|
package/docs/06-step-4-tests.md
CHANGED
|
@@ -50,6 +50,10 @@ def test_not_my_account():
|
|
|
50
50
|
|
|
51
51
|
Run this now, with no implementation: all three fail. That is the correct, honest starting point for the build.
|
|
52
52
|
|
|
53
|
+
### Declaring which rule a test covers (optional — opt-in by usage)
|
|
54
|
+
|
|
55
|
+
If §1's Musts and Rejects carry stable IDs, add a trailing `covers: M1, R:amount_invalid` to a test-plan line to declare which ID(s) that test satisfies. Once any test in a task declares a `covers:` line (or any §2 scenario carries a tag), `add.py check` confirms every §1 ID is covered by a tag or a `covers:` line somewhere — a task that never uses either is left alone. See the template's own inline example for the exact grammar.
|
|
56
|
+
|
|
53
57
|
## The AI's role here
|
|
54
58
|
|
|
55
59
|
The AI generates the test suite from the scenarios and contract. Your job is to confirm two things it cannot judge for itself: that each test asserts *behavior* rather than internal detail, and that none of them pass by accident before code exists. See `playbook/4_tests.md` in [Appendix B](./appendix-b-prompts.md).
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# 18 · Personas — the project-fit learning loop
|
|
2
|
+
|
|
3
|
+
[← 17 Components](./17-components.md) · [Contents](./README.md) · Next: [Appendix A Templates →](./appendix-a-templates.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
A **persona** is a project-fit requirements lens the agent adopts so its work matches *this*
|
|
8
|
+
codebase's standards instead of a generic default. It is not a chat costume: a persona is a small,
|
|
9
|
+
versioned file under `.add/personas/<slug>.md` with three machine-readable parts —
|
|
10
|
+
|
|
11
|
+
- **Identity** — the stance the worker takes (e.g. *a payments engineer who treats money as exact*).
|
|
12
|
+
- **Critical Rules** — the constraints that must hold (the non-negotiables for this domain).
|
|
13
|
+
- **Success Metrics** — the measurable done-bar (what "good" looks like, in numbers where it can).
|
|
14
|
+
|
|
15
|
+
The **persona loop** is how those files come to exist, improve, and get used: **seed → grow →
|
|
16
|
+
apply**. The loop is opt-in and additive — a project with no personas behaves exactly as before.
|
|
17
|
+
|
|
18
|
+
## Where personas come from — the teacher
|
|
19
|
+
|
|
20
|
+
ADD does not invent personas from nothing. It learns them from a **teacher**: a corpus of worked
|
|
21
|
+
agent definitions that ADD ships as a vendored local library at `.add/personas-teacher/`.
|
|
22
|
+
The teacher is read **off-build**, by the AI, while drafting a persona — it is a *source of ideas*,
|
|
23
|
+
**never a runtime dependency**: nothing in the engine imports it, fetches it, or needs it present to
|
|
24
|
+
run. You distil a teacher entry down to the three-part shape above and commit the result; from then
|
|
25
|
+
on the project owns that persona outright.
|
|
26
|
+
|
|
27
|
+
## Seed — at setup
|
|
28
|
+
|
|
29
|
+
The first personas are **seeded** during project setup, from the foundation (`PROJECT.md`'s domain
|
|
30
|
+
and standards). Setup proposes a starter persona or two that fit the project's domain; the human
|
|
31
|
+
confirms. Seeding writes `.add/personas/<slug>.md` and nothing else — no behaviour changes until a
|
|
32
|
+
task actually applies one.
|
|
33
|
+
|
|
34
|
+
## Grow — observe → delta → consolidate
|
|
35
|
+
|
|
36
|
+
Personas are **living documents**: they improve through the same loop the foundation uses. In a
|
|
37
|
+
task's **observe** phase the AI emits a **persona delta** — a one-line, tagged proposal to add or
|
|
38
|
+
sharpen a critical-rule or success-metric, written `open` with evidence (just like a lesson learned).
|
|
39
|
+
At a retrospective the human **consolidates** confirmed deltas into the persona file (the same
|
|
40
|
+
`fold` step the foundation uses), bumping it forward. The consolidation is judgment-free
|
|
41
|
+
transcription: the engine routes a confirmed delta into the named
|
|
42
|
+
persona's `## Critical Rules` or `## Success Metrics` section and **never clobbers** existing content.
|
|
43
|
+
So a persona gets *more* accurate every milestone instead of drifting.
|
|
44
|
+
|
|
45
|
+
## Apply — three surfaces
|
|
46
|
+
|
|
47
|
+
A seeded, grown persona earns its keep when work adopts it. Three surfaces apply a persona, and all
|
|
48
|
+
three treat it the same way — as **advice**, never authority:
|
|
49
|
+
|
|
50
|
+
- **UDD (design).** At the design-definition loop a persona frames the requirements lens: which
|
|
51
|
+
rules and metrics a UI/UX slice must satisfy for this project's users.
|
|
52
|
+
- **advisor / streams (delegation).** When you delegate a piece of your plan to a subagent, its
|
|
53
|
+
`<persona>` block **selects** the best-fit `.add/personas/<slug>.md` and the returned verdict
|
|
54
|
+
**records** which persona did the work. The independent earned-green refute-read selects a
|
|
55
|
+
**Code-Reviewer** persona whose findings carry severity markers — 🔴 blocker · 🟡 concern · 💭 note.
|
|
56
|
+
The same canonical persona body rides every runner (Claude, Cursor, Copilot, Codex), so a
|
|
57
|
+
**cross-runner subagent** behaves identically wherever it is spawned.
|
|
58
|
+
- **build (overlay).** While building, the orchestrating agent may load the active persona as a
|
|
59
|
+
domain identity **overlay** layered on `SOUL.md`: SOUL is the voice and trust rules; the persona is
|
|
60
|
+
the domain stance. The overlay **never rewrites** SOUL.md (it is human-owned) and never overrides a
|
|
61
|
+
trust rule.
|
|
62
|
+
|
|
63
|
+
## The non-negotiable — a persona never lowers a gate
|
|
64
|
+
|
|
65
|
+
A persona changes *how carefully* the work is done; it never changes *what passes*. This is the one
|
|
66
|
+
hard rule across every surface:
|
|
67
|
+
|
|
68
|
+
- A **security** finding is always a **HARD-STOP**, whatever persona was adopted.
|
|
69
|
+
- High-risk scope still escalates to the human; a stronger persona never buys back a gate.
|
|
70
|
+
- The engine stays **NO-EXEC** throughout: it never spawns a subagent, never runs a persona, never
|
|
71
|
+
reads one on the build path. Selecting, loading, and applying a persona is the orchestrating
|
|
72
|
+
agent's judgment — the engine only records what was used (for the audit trail) and measures that
|
|
73
|
+
the record is present; it never auto-passes on a persona's say-so.
|
|
74
|
+
|
|
75
|
+
In short: a persona makes the agent *fit the project*. Direction, freezing, evidence, and the gate
|
|
76
|
+
are exactly as strict as they were before — the loop adds expertise, not permission.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
[← 17 Components](./17-components.md) · [Contents](./README.md) · Next: [Appendix A Templates →](./appendix-a-templates.md)
|
|
Binary file
|
|
Binary file
|
|
@@ -18,6 +18,10 @@
|
|
|
18
18
|
|
|
19
19
|
**Component** — a declared part of a multi-part codebase that owns a source `root` and its own `green-bar` (suite + checks), named in `.add/components.toml` under `[component.<name>]`. A task binds to one with a `component:` header line, which adds that root to its §5 Scope and holds it to that component's green bar at verify. At the gate the engine also **surfaces** the component's `verify` command (the literal suite to run, e.g. `pytest -q`) and records it — NO-EXEC, the operator runs it; the fast lane carries the same `component:` affordance. Declared, never inferred; a project with no components is byte-identical to a single-codebase project. See [17 Components](./17-components.md).
|
|
20
20
|
|
|
21
|
+
**persona** — a project-fit requirements lens the agent adopts, distilled from a *teacher* — the vendored local library at `.add/personas-teacher/` — to three machine-readable parts: an **Identity** (the stance), **Critical Rules** (the non-negotiable constraints), and measurable **Success Metrics** (the done-bar). Stored as a versioned `.add/personas/<slug>.md`; read off-build (the teacher is never a runtime dependency); advisory only — it never lowers a gate (a security finding still `HARD-STOP`s) and the engine stays NO-EXEC. See [18 Personas](./18-personas.md).
|
|
22
|
+
|
|
23
|
+
**persona loop** — how personas come to exist and improve: **seed** (proposed at setup from the foundation) → **grow** (observe emits a persona delta; the human consolidates confirmed deltas into the file) → **apply** (UDD framing, advisor/streams subagent selection, and the build overlay atop `SOUL.md`). Opt-in and additive; a project with no personas behaves exactly as before. See [18 Personas](./18-personas.md).
|
|
24
|
+
|
|
21
25
|
**Cross-component contract** — the frozen, machine-checkable interface between a producer component and its consumers, declared under `[contract.<id>]` (producer + consumers). A task names its role with a `produces: <id>` or `consumes: <id>` header. On the producer's freeze the engine writes an immutable snapshot at `.add/contracts/<id>.json`; a consumer pins its hash and is flagged `contract_consumer_stale` if the producer later re-freezes a changed shape. Inside one milestone a `consumes:` task is HELD from writing its §3 until the producer's snapshot exists — the intra-milestone BE→FE ordering. Freeze-recency: the consumer is also held `producer_contract_stale` if a *live* producer task has re-opened or drifted its §3 (the snapshot no longer matches a frozen producer); `add.py check` surfaces the softer `contract_producer_stale` and `contract_snapshot_hashless` (a snapshot with no hash to verify) as never-red warnings. See [17 Components](./17-components.md).
|
|
22
26
|
|
|
23
27
|
**Federation (multi-repo)** — the transport that carries a frozen cross-component contract between separate repositories. A consumer repo declares `[federation.<id>]` with a `source` (and optional `pin`); `add.py federate pull <id>` validates the producer repo's published snapshot and lands a byte-for-byte copy locally, where it behaves exactly as in a monorepo. Fail-loud: an unknown id, unreadable source, a `source` that escapes the repo's allowlist (`federation_source_escapes` — the path is confined to a sibling of the repo root), invalid snapshot, or version mismatch HARD-STOPS and lands nothing. Each repo keeps its own git-native `state.json`; only the immutable snapshot crosses. See [17 Components](./17-components.md).
|
|
@@ -52,7 +56,7 @@
|
|
|
52
56
|
|
|
53
57
|
**The decision arc** — the three engine-sourced lines a gate report opens with at every **decision point**: `goal:` the milestone goal the work serves · `done:` the achievement, the proven progress toward it (the gate reports render this line as `done`) · `plan:` what comes next. What `done` reports adapts per gate (verify: tests + evidence · milestone close: exit-criteria met · intake: the request sized) while the three-part shape stays constant. Rendered first, above the report's summary, so the human confirms with sight of the whole trajectory, not a local snapshot. Engine-sourced like all evidence — goal · done · plan are pulled from `add.py` output, never re-typed. Presentation only: it never adds a gate or changes a `PASS` / `RISK-ACCEPTED` / `HARD-STOP` / freeze outcome. The report it opens is the chat report a person reads at a decision point — distinct from the three Test/Quality/Risk reports a verify gate produces ([11 Governance](./11-governance.md)). See the `add` skill's `report-template.md`.
|
|
54
58
|
|
|
55
|
-
**Guided decision** — a **decision point** presented not as a bare next-step line but as one highlighted **recommended pick** plus its real, described alternatives (each with its one-line consequence), so the human chooses with the recommendation and what each option costs already in view. It refines the report's
|
|
59
|
+
**Guided decision** — a **decision point** presented not as a bare next-step line but as one highlighted **recommended pick** plus its real, described alternatives (each with its one-line consequence), so the human chooses with the recommendation and what each option costs already in view. It refines the report's APPROVE block — composing with **the decision arc**, never adding a gate — and fires at human gates only (never at an autonomous `[you drive]` step). The sibling of the decision arc: both are what the human sees when it is their turn. See the `add` skill's `report-template.md` for the convention itself.
|
|
56
60
|
|
|
57
61
|
**Recommended pick** — the one option a **guided decision** highlights with the `▶ … (recommended)` marker: exactly one, never zero and never two. The AI's confidence self-score informs the pick; the human overrides it freely. See **Guided decision**.
|
|
58
62
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pilotspace/add",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
4
4
|
"description": "ADD (AI-Driven Development). One skill. Eight steps. Five disciplines. Every feature ships through the loop — a minimal, state-tracked Claude Code skill that ships the AIDD book as its trust layer.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"add": "bin/cli.js"
|
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
"!**/*.pyc",
|
|
25
25
|
"tooling/templates/",
|
|
26
26
|
"docs/",
|
|
27
|
+
"personas-teacher/",
|
|
28
|
+
"THIRD_PARTY_NOTICES.md",
|
|
27
29
|
"README.md",
|
|
28
30
|
"GETTING-STARTED.md",
|
|
29
31
|
"CHANGELOG.md",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 AgentLand Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|