@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.
Files changed (305) hide show
  1. package/CHANGELOG.md +149 -1
  2. package/THIRD_PARTY_NOTICES.md +41 -0
  3. package/bin/cli.js +37 -11
  4. package/docs/02-the-flow.md +1 -1
  5. package/docs/03-step-1-specify.md +4 -0
  6. package/docs/04-step-2-scenarios.md +4 -0
  7. package/docs/06-step-4-tests.md +4 -0
  8. package/docs/18-personas.md +80 -0
  9. package/docs/add-milestone-task-lifecycle.png +0 -0
  10. package/docs/add-task-growth-wheel.png +0 -0
  11. package/docs/appendix-c-glossary.md +5 -1
  12. package/package.json +3 -1
  13. package/personas-teacher/LICENSE +21 -0
  14. package/personas-teacher/README.md +1067 -0
  15. package/personas-teacher/VENDOR.md +13 -0
  16. package/personas-teacher/academic/academic-anthropologist.md +125 -0
  17. package/personas-teacher/academic/academic-geographer.md +127 -0
  18. package/personas-teacher/academic/academic-historian.md +123 -0
  19. package/personas-teacher/academic/academic-narratologist.md +118 -0
  20. package/personas-teacher/academic/academic-psychologist.md +118 -0
  21. package/personas-teacher/design/design-brand-guardian.md +322 -0
  22. package/personas-teacher/design/design-image-prompt-engineer.md +236 -0
  23. package/personas-teacher/design/design-inclusive-visuals-specialist.md +71 -0
  24. package/personas-teacher/design/design-persona-walkthrough.md +272 -0
  25. package/personas-teacher/design/design-ui-designer.md +383 -0
  26. package/personas-teacher/design/design-ux-architect.md +469 -0
  27. package/personas-teacher/design/design-ux-researcher.md +329 -0
  28. package/personas-teacher/design/design-visual-storyteller.md +149 -0
  29. package/personas-teacher/design/design-whimsy-injector.md +438 -0
  30. package/personas-teacher/divisions.json +21 -0
  31. package/personas-teacher/engineering/engineering-ai-data-remediation-engineer.md +211 -0
  32. package/personas-teacher/engineering/engineering-ai-engineer.md +146 -0
  33. package/personas-teacher/engineering/engineering-autonomous-optimization-architect.md +107 -0
  34. package/personas-teacher/engineering/engineering-backend-architect.md +236 -0
  35. package/personas-teacher/engineering/engineering-cms-developer.md +536 -0
  36. package/personas-teacher/engineering/engineering-code-reviewer.md +76 -0
  37. package/personas-teacher/engineering/engineering-codebase-onboarding-engineer.md +173 -0
  38. package/personas-teacher/engineering/engineering-data-engineer.md +306 -0
  39. package/personas-teacher/engineering/engineering-database-optimizer.md +176 -0
  40. package/personas-teacher/engineering/engineering-devops-automator.md +376 -0
  41. package/personas-teacher/engineering/engineering-drupal-shopping-cart.md +360 -0
  42. package/personas-teacher/engineering/engineering-email-intelligence-engineer.md +353 -0
  43. package/personas-teacher/engineering/engineering-embedded-firmware-engineer.md +173 -0
  44. package/personas-teacher/engineering/engineering-feishu-integration-developer.md +598 -0
  45. package/personas-teacher/engineering/engineering-filament-optimization-specialist.md +283 -0
  46. package/personas-teacher/engineering/engineering-frontend-developer.md +225 -0
  47. package/personas-teacher/engineering/engineering-git-workflow-master.md +84 -0
  48. package/personas-teacher/engineering/engineering-incident-response-commander.md +444 -0
  49. package/personas-teacher/engineering/engineering-it-service-manager.md +561 -0
  50. package/personas-teacher/engineering/engineering-minimal-change-engineer.md +207 -0
  51. package/personas-teacher/engineering/engineering-mobile-app-builder.md +493 -0
  52. package/personas-teacher/engineering/engineering-multi-agent-systems-architect.md +600 -0
  53. package/personas-teacher/engineering/engineering-orgscript-engineer.md +113 -0
  54. package/personas-teacher/engineering/engineering-prompt-engineer.md +202 -0
  55. package/personas-teacher/engineering/engineering-rapid-prototyper.md +462 -0
  56. package/personas-teacher/engineering/engineering-senior-developer.md +176 -0
  57. package/personas-teacher/engineering/engineering-software-architect.md +112 -0
  58. package/personas-teacher/engineering/engineering-solidity-smart-contract-engineer.md +522 -0
  59. package/personas-teacher/engineering/engineering-sre.md +90 -0
  60. package/personas-teacher/engineering/engineering-technical-writer.md +393 -0
  61. package/personas-teacher/engineering/engineering-voice-ai-integration-engineer.md +561 -0
  62. package/personas-teacher/engineering/engineering-wechat-mini-program-developer.md +350 -0
  63. package/personas-teacher/engineering/engineering-wordpress-shopping-cart.md +346 -0
  64. package/personas-teacher/examples/README.md +48 -0
  65. package/personas-teacher/examples/nexus-spatial-discovery.md +852 -0
  66. package/personas-teacher/examples/workflow-book-chapter.md +55 -0
  67. package/personas-teacher/examples/workflow-landing-page.md +119 -0
  68. package/personas-teacher/examples/workflow-startup-mvp.md +155 -0
  69. package/personas-teacher/examples/workflow-with-memory.md +238 -0
  70. package/personas-teacher/finance/finance-bookkeeper-controller.md +260 -0
  71. package/personas-teacher/finance/finance-financial-analyst.md +234 -0
  72. package/personas-teacher/finance/finance-fpa-analyst.md +263 -0
  73. package/personas-teacher/finance/finance-investment-researcher.md +272 -0
  74. package/personas-teacher/finance/finance-tax-strategist.md +239 -0
  75. package/personas-teacher/game-development/blender/blender-addon-engineer.md +234 -0
  76. package/personas-teacher/game-development/game-audio-engineer.md +264 -0
  77. package/personas-teacher/game-development/game-designer.md +167 -0
  78. package/personas-teacher/game-development/godot/godot-gameplay-scripter.md +334 -0
  79. package/personas-teacher/game-development/godot/godot-multiplayer-engineer.md +297 -0
  80. package/personas-teacher/game-development/godot/godot-shader-developer.md +266 -0
  81. package/personas-teacher/game-development/level-designer.md +208 -0
  82. package/personas-teacher/game-development/narrative-designer.md +243 -0
  83. package/personas-teacher/game-development/roblox-studio/roblox-avatar-creator.md +297 -0
  84. package/personas-teacher/game-development/roblox-studio/roblox-experience-designer.md +305 -0
  85. package/personas-teacher/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
  86. package/personas-teacher/game-development/technical-artist.md +229 -0
  87. package/personas-teacher/game-development/unity/unity-architect.md +271 -0
  88. package/personas-teacher/game-development/unity/unity-editor-tool-developer.md +310 -0
  89. package/personas-teacher/game-development/unity/unity-multiplayer-engineer.md +321 -0
  90. package/personas-teacher/game-development/unity/unity-shader-graph-artist.md +269 -0
  91. package/personas-teacher/game-development/unreal-engine/unreal-multiplayer-architect.md +313 -0
  92. package/personas-teacher/game-development/unreal-engine/unreal-systems-engineer.md +310 -0
  93. package/personas-teacher/game-development/unreal-engine/unreal-technical-artist.md +256 -0
  94. package/personas-teacher/game-development/unreal-engine/unreal-world-builder.md +273 -0
  95. package/personas-teacher/gis/gis-3d-scene-developer.md +111 -0
  96. package/personas-teacher/gis/gis-analyst.md +91 -0
  97. package/personas-teacher/gis/gis-bim-specialist.md +108 -0
  98. package/personas-teacher/gis/gis-cartography-designer.md +150 -0
  99. package/personas-teacher/gis/gis-drone-reality-mapping.md +120 -0
  100. package/personas-teacher/gis/gis-geoai-ml-engineer.md +105 -0
  101. package/personas-teacher/gis/gis-geoprocessing-specialist.md +97 -0
  102. package/personas-teacher/gis/gis-qa-engineer.md +133 -0
  103. package/personas-teacher/gis/gis-solution-engineer.md +101 -0
  104. package/personas-teacher/gis/gis-spatial-data-engineer.md +97 -0
  105. package/personas-teacher/gis/gis-spatial-data-scientist.md +111 -0
  106. package/personas-teacher/gis/gis-technical-consultant.md +86 -0
  107. package/personas-teacher/gis/gis-web-gis-developer.md +108 -0
  108. package/personas-teacher/marketing/marketing-aeo-foundations.md +264 -0
  109. package/personas-teacher/marketing/marketing-agentic-search-optimizer.md +311 -0
  110. package/personas-teacher/marketing/marketing-ai-citation-strategist.md +170 -0
  111. package/personas-teacher/marketing/marketing-app-store-optimizer.md +321 -0
  112. package/personas-teacher/marketing/marketing-baidu-seo-specialist.md +226 -0
  113. package/personas-teacher/marketing/marketing-bilibili-content-strategist.md +199 -0
  114. package/personas-teacher/marketing/marketing-book-co-author.md +110 -0
  115. package/personas-teacher/marketing/marketing-carousel-growth-engine.md +199 -0
  116. package/personas-teacher/marketing/marketing-china-ecommerce-operator.md +283 -0
  117. package/personas-teacher/marketing/marketing-china-market-localization-strategist.md +283 -0
  118. package/personas-teacher/marketing/marketing-content-creator.md +54 -0
  119. package/personas-teacher/marketing/marketing-cross-border-ecommerce.md +259 -0
  120. package/personas-teacher/marketing/marketing-douyin-strategist.md +149 -0
  121. package/personas-teacher/marketing/marketing-email-strategist.md +249 -0
  122. package/personas-teacher/marketing/marketing-global-podcast-strategist.md +206 -0
  123. package/personas-teacher/marketing/marketing-growth-hacker.md +54 -0
  124. package/personas-teacher/marketing/marketing-instagram-curator.md +113 -0
  125. package/personas-teacher/marketing/marketing-kuaishou-strategist.md +223 -0
  126. package/personas-teacher/marketing/marketing-linkedin-content-creator.md +214 -0
  127. package/personas-teacher/marketing/marketing-livestream-commerce-coach.md +305 -0
  128. package/personas-teacher/marketing/marketing-multi-platform-publisher.md +217 -0
  129. package/personas-teacher/marketing/marketing-podcast-strategist.md +277 -0
  130. package/personas-teacher/marketing/marketing-pr-communications-manager.md +473 -0
  131. package/personas-teacher/marketing/marketing-private-domain-operator.md +308 -0
  132. package/personas-teacher/marketing/marketing-reddit-community-builder.md +123 -0
  133. package/personas-teacher/marketing/marketing-seo-specialist.md +321 -0
  134. package/personas-teacher/marketing/marketing-short-video-editing-coach.md +412 -0
  135. package/personas-teacher/marketing/marketing-social-media-strategist.md +125 -0
  136. package/personas-teacher/marketing/marketing-tiktok-strategist.md +125 -0
  137. package/personas-teacher/marketing/marketing-twitter-engager.md +126 -0
  138. package/personas-teacher/marketing/marketing-video-optimization-specialist.md +119 -0
  139. package/personas-teacher/marketing/marketing-wechat-official-account.md +145 -0
  140. package/personas-teacher/marketing/marketing-weibo-strategist.md +240 -0
  141. package/personas-teacher/marketing/marketing-x-twitter-intelligence-analyst.md +161 -0
  142. package/personas-teacher/marketing/marketing-xiaohongshu-specialist.md +138 -0
  143. package/personas-teacher/marketing/marketing-zhihu-strategist.md +162 -0
  144. package/personas-teacher/paid-media/paid-media-auditor.md +71 -0
  145. package/personas-teacher/paid-media/paid-media-creative-strategist.md +71 -0
  146. package/personas-teacher/paid-media/paid-media-paid-social-strategist.md +71 -0
  147. package/personas-teacher/paid-media/paid-media-ppc-strategist.md +71 -0
  148. package/personas-teacher/paid-media/paid-media-programmatic-buyer.md +71 -0
  149. package/personas-teacher/paid-media/paid-media-search-query-analyst.md +71 -0
  150. package/personas-teacher/paid-media/paid-media-tracking-specialist.md +71 -0
  151. package/personas-teacher/product/product-behavioral-nudge-engine.md +80 -0
  152. package/personas-teacher/product/product-feedback-synthesizer.md +119 -0
  153. package/personas-teacher/product/product-manager.md +469 -0
  154. package/personas-teacher/product/product-sprint-prioritizer.md +154 -0
  155. package/personas-teacher/product/product-trend-researcher.md +159 -0
  156. package/personas-teacher/project-management/project-management-experiment-tracker.md +198 -0
  157. package/personas-teacher/project-management/project-management-jira-workflow-steward.md +230 -0
  158. package/personas-teacher/project-management/project-management-meeting-notes-specialist.md +95 -0
  159. package/personas-teacher/project-management/project-management-project-shepherd.md +194 -0
  160. package/personas-teacher/project-management/project-management-studio-operations.md +200 -0
  161. package/personas-teacher/project-management/project-management-studio-producer.md +203 -0
  162. package/personas-teacher/project-management/project-manager-senior.md +135 -0
  163. package/personas-teacher/sales/sales-account-strategist.md +227 -0
  164. package/personas-teacher/sales/sales-coach.md +271 -0
  165. package/personas-teacher/sales/sales-deal-strategist.md +180 -0
  166. package/personas-teacher/sales/sales-discovery-coach.md +225 -0
  167. package/personas-teacher/sales/sales-engineer.md +182 -0
  168. package/personas-teacher/sales/sales-offer-lead-gen-strategist.md +257 -0
  169. package/personas-teacher/sales/sales-outbound-strategist.md +201 -0
  170. package/personas-teacher/sales/sales-pipeline-analyst.md +267 -0
  171. package/personas-teacher/sales/sales-proposal-strategist.md +217 -0
  172. package/personas-teacher/security/security-appsec-engineer.md +491 -0
  173. package/personas-teacher/security/security-architect.md +304 -0
  174. package/personas-teacher/security/security-blockchain-security-auditor.md +463 -0
  175. package/personas-teacher/security/security-cloud-security-architect.md +523 -0
  176. package/personas-teacher/security/security-compliance-auditor.md +158 -0
  177. package/personas-teacher/security/security-incident-responder.md +437 -0
  178. package/personas-teacher/security/security-penetration-tester.md +399 -0
  179. package/personas-teacher/security/security-senior-secops.md +750 -0
  180. package/personas-teacher/security/security-threat-detection-engineer.md +534 -0
  181. package/personas-teacher/security/security-threat-intelligence-analyst.md +644 -0
  182. package/personas-teacher/spatial-computing/macos-spatial-metal-engineer.md +337 -0
  183. package/personas-teacher/spatial-computing/terminal-integration-specialist.md +70 -0
  184. package/personas-teacher/spatial-computing/visionos-spatial-engineer.md +54 -0
  185. package/personas-teacher/spatial-computing/xr-cockpit-interaction-specialist.md +32 -0
  186. package/personas-teacher/spatial-computing/xr-immersive-developer.md +32 -0
  187. package/personas-teacher/spatial-computing/xr-interface-architect.md +32 -0
  188. package/personas-teacher/specialized/accounts-payable-agent.md +185 -0
  189. package/personas-teacher/specialized/agentic-identity-trust.md +387 -0
  190. package/personas-teacher/specialized/agents-orchestrator.md +367 -0
  191. package/personas-teacher/specialized/automation-governance-architect.md +216 -0
  192. package/personas-teacher/specialized/business-strategist.md +488 -0
  193. package/personas-teacher/specialized/change-management-consultant.md +497 -0
  194. package/personas-teacher/specialized/chief-financial-officer.md +388 -0
  195. package/personas-teacher/specialized/corporate-training-designer.md +192 -0
  196. package/personas-teacher/specialized/customer-service.md +398 -0
  197. package/personas-teacher/specialized/customer-success-manager.md +460 -0
  198. package/personas-teacher/specialized/data-consolidation-agent.md +60 -0
  199. package/personas-teacher/specialized/data-privacy-officer.md +412 -0
  200. package/personas-teacher/specialized/esg-sustainability-officer.md +396 -0
  201. package/personas-teacher/specialized/government-digital-presales-consultant.md +363 -0
  202. package/personas-teacher/specialized/grant-writer.md +511 -0
  203. package/personas-teacher/specialized/healthcare-customer-service.md +389 -0
  204. package/personas-teacher/specialized/healthcare-marketing-compliance.md +395 -0
  205. package/personas-teacher/specialized/hospitality-guest-services.md +603 -0
  206. package/personas-teacher/specialized/hr-onboarding.md +451 -0
  207. package/personas-teacher/specialized/identity-graph-operator.md +260 -0
  208. package/personas-teacher/specialized/language-translator.md +264 -0
  209. package/personas-teacher/specialized/legal-billing-time-tracking.md +569 -0
  210. package/personas-teacher/specialized/legal-client-intake.md +492 -0
  211. package/personas-teacher/specialized/legal-document-review.md +454 -0
  212. package/personas-teacher/specialized/loan-officer-assistant.md +555 -0
  213. package/personas-teacher/specialized/lsp-index-engineer.md +314 -0
  214. package/personas-teacher/specialized/ma-integration-manager.md +427 -0
  215. package/personas-teacher/specialized/medical-billing-coding-specialist.md +491 -0
  216. package/personas-teacher/specialized/operations-manager.md +399 -0
  217. package/personas-teacher/specialized/organizational-psychologist.md +391 -0
  218. package/personas-teacher/specialized/personal-growth-mentor.md +159 -0
  219. package/personas-teacher/specialized/real-estate-buyer-seller.md +596 -0
  220. package/personas-teacher/specialized/recruitment-specialist.md +509 -0
  221. package/personas-teacher/specialized/report-distribution-agent.md +65 -0
  222. package/personas-teacher/specialized/retail-customer-returns.md +566 -0
  223. package/personas-teacher/specialized/sales-data-extraction-agent.md +67 -0
  224. package/personas-teacher/specialized/sales-outreach.md +425 -0
  225. package/personas-teacher/specialized/specialized-chief-of-staff.md +279 -0
  226. package/personas-teacher/specialized/specialized-civil-engineer.md +356 -0
  227. package/personas-teacher/specialized/specialized-cultural-intelligence-strategist.md +88 -0
  228. package/personas-teacher/specialized/specialized-developer-advocate.md +317 -0
  229. package/personas-teacher/specialized/specialized-document-generator.md +55 -0
  230. package/personas-teacher/specialized/specialized-french-consulting-market.md +192 -0
  231. package/personas-teacher/specialized/specialized-korean-business-navigator.md +216 -0
  232. package/personas-teacher/specialized/specialized-mcp-builder.md +248 -0
  233. package/personas-teacher/specialized/specialized-model-qa.md +488 -0
  234. package/personas-teacher/specialized/specialized-pricing-analyst.md +243 -0
  235. package/personas-teacher/specialized/specialized-salesforce-architect.md +180 -0
  236. package/personas-teacher/specialized/specialized-strategy-duel-agent.md +130 -0
  237. package/personas-teacher/specialized/specialized-workflow-architect.md +597 -0
  238. package/personas-teacher/specialized/study-abroad-advisor.md +282 -0
  239. package/personas-teacher/specialized/supply-chain-strategist.md +582 -0
  240. package/personas-teacher/specialized/zk-steward.md +211 -0
  241. package/personas-teacher/strategy/EXECUTIVE-BRIEF.md +95 -0
  242. package/personas-teacher/strategy/QUICKSTART.md +194 -0
  243. package/personas-teacher/strategy/coordination/agent-activation-prompts.md +401 -0
  244. package/personas-teacher/strategy/coordination/handoff-templates.md +357 -0
  245. package/personas-teacher/strategy/nexus-strategy.md +1110 -0
  246. package/personas-teacher/strategy/playbooks/phase-0-discovery.md +178 -0
  247. package/personas-teacher/strategy/playbooks/phase-1-strategy.md +238 -0
  248. package/personas-teacher/strategy/playbooks/phase-2-foundation.md +278 -0
  249. package/personas-teacher/strategy/playbooks/phase-3-build.md +286 -0
  250. package/personas-teacher/strategy/playbooks/phase-4-hardening.md +332 -0
  251. package/personas-teacher/strategy/playbooks/phase-5-launch.md +277 -0
  252. package/personas-teacher/strategy/playbooks/phase-6-operate.md +318 -0
  253. package/personas-teacher/strategy/runbooks/scenario-enterprise-feature.md +157 -0
  254. package/personas-teacher/strategy/runbooks/scenario-incident-response.md +217 -0
  255. package/personas-teacher/strategy/runbooks/scenario-marketing-campaign.md +187 -0
  256. package/personas-teacher/strategy/runbooks/scenario-startup-mvp.md +154 -0
  257. package/personas-teacher/support/support-analytics-reporter.md +365 -0
  258. package/personas-teacher/support/support-executive-summary-generator.md +212 -0
  259. package/personas-teacher/support/support-finance-tracker.md +442 -0
  260. package/personas-teacher/support/support-infrastructure-maintainer.md +618 -0
  261. package/personas-teacher/support/support-legal-compliance-checker.md +588 -0
  262. package/personas-teacher/support/support-support-responder.md +585 -0
  263. package/personas-teacher/testing/testing-accessibility-auditor.md +316 -0
  264. package/personas-teacher/testing/testing-api-tester.md +306 -0
  265. package/personas-teacher/testing/testing-evidence-collector.md +210 -0
  266. package/personas-teacher/testing/testing-performance-benchmarker.md +268 -0
  267. package/personas-teacher/testing/testing-reality-checker.md +236 -0
  268. package/personas-teacher/testing/testing-test-results-analyzer.md +305 -0
  269. package/personas-teacher/testing/testing-tool-evaluator.md +394 -0
  270. package/personas-teacher/testing/testing-workflow-optimizer.md +450 -0
  271. package/personas-teacher/tools.json +19 -0
  272. package/skill/add/SKILL.md +17 -12
  273. package/skill/add/advisor.md +31 -34
  274. package/skill/add/confidence.md +1 -1
  275. package/skill/add/deltas.md +12 -13
  276. package/skill/add/design.md +52 -49
  277. package/skill/add/fold.md +18 -16
  278. package/skill/add/intake.md +4 -3
  279. package/skill/add/loop.md +1 -2
  280. package/skill/add/phases/0-ground.md +32 -34
  281. package/skill/add/phases/0-setup.md +22 -21
  282. package/skill/add/phases/1-specify.md +8 -6
  283. package/skill/add/phases/3-contract.md +1 -1
  284. package/skill/add/phases/4-tests.md +9 -10
  285. package/skill/add/phases/5-build.md +17 -13
  286. package/skill/add/phases/6-verify.md +7 -4
  287. package/skill/add/phases/7-observe.md +2 -1
  288. package/skill/add/report-template.md +61 -18
  289. package/skill/add/run.md +4 -3
  290. package/skill/add/scope.md +2 -2
  291. package/skill/add/sensitivity.md +51 -0
  292. package/skill/add/streams.md +24 -23
  293. package/tooling/add.py +822 -26
  294. package/tooling/add_engine/autonomy.py +36 -1
  295. package/tooling/add_engine/constants.py +56 -3
  296. package/tooling/add_engine/guidelines.py +22 -20
  297. package/tooling/add_engine/predicates.py +56 -3
  298. package/tooling/add_engine/search.py +165 -0
  299. package/tooling/templates/GLOSSARY.md.tmpl +16 -0
  300. package/tooling/templates/MILESTONE.md.tmpl +9 -0
  301. package/tooling/templates/PROMPT.persona.md.tmpl +44 -0
  302. package/tooling/templates/TASK.fast.md.tmpl +1 -0
  303. package/tooling/templates/TASK.md.tmpl +36 -6
  304. package/tooling/templates/gitignore.tmpl +12 -0
  305. 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
- ## [Unreleased]
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
- // Ensure .add/.gitignore lists the engine's transient artifacts. Seed it from the bundled
589
- // tooling/templates/gitignore.tmpl if absent; else APPEND-IF-ABSENT each pattern line the
590
- // template carries that the file lacks additive only, never reorders/removes user lines,
591
- // idempotent; comment/blank lines are not appended to an existing file. Fail-soft. Twin of
592
- // _installer.py:_seed_gitignore.
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
- const body = fs.readFileSync(source, "utf8");
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.filter(([sub]) => !(sub === "skill/add" && args.noSkill));
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
- for (const [sub] of GLOBAL_TREES) {
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 GLOBAL_TREES) {
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
- const missing = MANAGED.some(([sub]) => status[sub] === "missing");
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;
@@ -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 first, 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 the **DECISION** 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.
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.
@@ -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
@@ -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 DECISION 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.
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.14.0",
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.