@thebackstoryis/engineering-with-ai 0.2.9

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 (334) hide show
  1. package/Docs/README.md +50 -0
  2. package/Docs/adoption/consultancy-and-multi-project-rollout.md +135 -0
  3. package/Docs/adoption/non-technical-team-guide.md +126 -0
  4. package/Docs/archaeology-technology-and-hosting-discovery.md +212 -0
  5. package/Docs/blast-radius-and-impact-routing-guide.md +325 -0
  6. package/Docs/blueprints/internal-blueprint-catalogue.md +146 -0
  7. package/Docs/blueprints/maintaining-organisation-blueprints.md +154 -0
  8. package/Docs/blueprints/validation-and-troubleshooting.md +168 -0
  9. package/Docs/cli-reference.md +113 -0
  10. package/Docs/completed-phase-evidence-amendments.md +74 -0
  11. package/Docs/consultancy-network-rollout-control-plane-guide.md +202 -0
  12. package/Docs/context-aware-delivery-companion-guide.md +198 -0
  13. package/Docs/context-aware-delivery-companion-user-guide.md +184 -0
  14. package/Docs/context-management-and-token-efficiency.md +113 -0
  15. package/Docs/design-systems/design-system-implementation-guide.md +85 -0
  16. package/Docs/design-systems/design-system-pack-authoring-guide.md +95 -0
  17. package/Docs/design-systems/design-system-review-guide.md +51 -0
  18. package/Docs/design-systems/design-system-user-guide.md +96 -0
  19. package/Docs/design-systems/product-owner-guide.md +49 -0
  20. package/Docs/designing-organisation-blueprint-packs.md +384 -0
  21. package/Docs/developer-delivery-guide.md +224 -0
  22. package/Docs/error-reporting-guide.md +110 -0
  23. package/Docs/error-reporting-provider-guide.md +49 -0
  24. package/Docs/examples/error-report-adapter.md +70 -0
  25. package/Docs/examples/meeting-review.md +76 -0
  26. package/Docs/examples/minimal-design-system.md +67 -0
  27. package/Docs/examples/prototype-review-inputs.md +175 -0
  28. package/Docs/examples/reproducible-archaeology-depth-example.md +144 -0
  29. package/Docs/examples/test-scenario-input.md +68 -0
  30. package/Docs/examples/worked-examples.md +147 -0
  31. package/Docs/existing-project-onboarding-guide.md +214 -0
  32. package/Docs/explanation/core-concepts.md +26 -0
  33. package/Docs/explanation/delivery-workflow.md +48 -0
  34. package/Docs/governance/governance-team-guide.md +139 -0
  35. package/Docs/governed-starter-project-materialisation-guide.md +284 -0
  36. package/Docs/guide-catalogue.md +117 -0
  37. package/Docs/guided-discovery-facilitator-guide.md +172 -0
  38. package/Docs/guided-intent-workspace-guide.md +109 -0
  39. package/Docs/guided-phase-evidence-drafting-guide.md +119 -0
  40. package/Docs/human-approval-and-assurance-guide.md +146 -0
  41. package/Docs/knowledge-proposals-implementer-guide.md +106 -0
  42. package/Docs/knowledge-proposals-user-guide.md +247 -0
  43. package/Docs/maintainers/context-benchmarks.md +29 -0
  44. package/Docs/maintainers/contributing.md +58 -0
  45. package/Docs/maintainers/evidence-depth-acceptance.md +72 -0
  46. package/Docs/maintainers/verification-walkthroughs.md +104 -0
  47. package/Docs/meeting-evidence-implementer-guide.md +132 -0
  48. package/Docs/meeting-evidence-user-guide.md +200 -0
  49. package/Docs/operations/dashboard-and-delivery-state.md +153 -0
  50. package/Docs/operations/dashboard-configuration.md +87 -0
  51. package/Docs/operations/installation-updating-and-entitlements.md +135 -0
  52. package/Docs/operations/premium-personas-setup.md +76 -0
  53. package/Docs/operations/troubleshooting-and-recovery.md +205 -0
  54. package/Docs/organisation-rollout-guide.md +142 -0
  55. package/Docs/persona-entitlement-provider-guide.md +199 -0
  56. package/Docs/persona-guided-prototype-iteration.md +129 -0
  57. package/Docs/personas/organisation-specific-personas.md +103 -0
  58. package/Docs/personas/persona-authoring-cookbook.md +176 -0
  59. package/Docs/personas/persona-engagement-ui.md +133 -0
  60. package/Docs/personas/persona-governance.md +118 -0
  61. package/Docs/platform-export-analysis-guide.md +336 -0
  62. package/Docs/policies/governance-owner-guide.md +36 -0
  63. package/Docs/policies/implementation-guide.md +42 -0
  64. package/Docs/policies/organisation-policy-design-gates.md +58 -0
  65. package/Docs/policies/policy-pack-authoring-guide.md +108 -0
  66. package/Docs/policies/product-owner-guide.md +43 -0
  67. package/Docs/policies/technical-owner-guide.md +37 -0
  68. package/Docs/product-owner-guide.md +327 -0
  69. package/Docs/project-portfolio-orchestration-guide.md +199 -0
  70. package/Docs/quality/manual-qa-and-acceptance.md +162 -0
  71. package/Docs/quality/persona-driven-test-scenarios.md +172 -0
  72. package/Docs/quality/reproducible-archaeology-depth-review-checklist.md +89 -0
  73. package/Docs/reference/capabilities-and-project-layout.md +678 -0
  74. package/Docs/reference/cli-and-configuration.md +398 -0
  75. package/Docs/reference/contributions-api.md +23 -0
  76. package/Docs/reference/security-adapter-authoring.md +81 -0
  77. package/Docs/reference/starter-adapter-authoring.md +74 -0
  78. package/Docs/repository-source-map-guide.md +381 -0
  79. package/Docs/reproducible-archaeology-and-discovery-depth.md +292 -0
  80. package/Docs/screen-prototype-creation-guide.md +324 -0
  81. package/Docs/security-validation-guide.md +353 -0
  82. package/Docs/solution-readiness-review-guide.md +123 -0
  83. package/Docs/standards/project-standards-authoring.md +157 -0
  84. package/Docs/team-hub-guide.md +162 -0
  85. package/Docs/team-hub-resource-registry-guide.md +167 -0
  86. package/Docs/tutorials/first-delivery.md +83 -0
  87. package/Docs/tutorials/first-session.md +62 -0
  88. package/Docs/using-lifecycle-hooks.md +381 -0
  89. package/Docs/working-with-personas.md +274 -0
  90. package/LICENSE +165 -0
  91. package/README.md +96 -0
  92. package/agents-src/claude/ewai-security-reviewer.md +15 -0
  93. package/bin/ewai +5 -0
  94. package/config/archaeology-record-families.yaml +59 -0
  95. package/config/delivery-artifacts.yaml +121 -0
  96. package/config/delivery-stages.yaml +77 -0
  97. package/config/design-system.schema.json +46 -0
  98. package/config/error-reporting.schema.json +79 -0
  99. package/config/evidence-depth.schema.json +53 -0
  100. package/config/intent.schema.json +90 -0
  101. package/config/knowledge-proposals-proposal.schema.json +34 -0
  102. package/config/lifecycle-event.schema.json +68 -0
  103. package/config/lifecycle-handler.schema.json +45 -0
  104. package/config/lifecycle-hook-ack.schema.json +19 -0
  105. package/config/meeting-evidence-candidate.schema.json +102 -0
  106. package/config/organisation-policy.schema.json +137 -0
  107. package/config/pack.schema.json +250 -0
  108. package/config/persona-pack.schema.json +21 -0
  109. package/config/persona.schema.json +17 -0
  110. package/config/policy-evaluation.schema.json +77 -0
  111. package/config/policy-facts.schema.json +140 -0
  112. package/config/portfolio.schema.json +68 -0
  113. package/config/project.schema.json +313 -0
  114. package/config/prototype-iteration.schema.json +128 -0
  115. package/config/rollout.schema.json +87 -0
  116. package/config/security-adapter.schema.json +31 -0
  117. package/config/security-scan-request.schema.json +64 -0
  118. package/config/security-scan-response.schema.json +52 -0
  119. package/config/security-validation-policy.schema.json +74 -0
  120. package/config/starter-source-acknowledgement.schema.json +13 -0
  121. package/config/starter-source-adapter.schema.json +38 -0
  122. package/config/starter-source-request.schema.json +61 -0
  123. package/package.json +77 -0
  124. package/packs/core/pack.yaml +7 -0
  125. package/packs/design-systems/default/experience-promise.md +9 -0
  126. package/packs/design-systems/default/intentional-review.md +10 -0
  127. package/packs/design-systems/default/interaction-and-entry.md +9 -0
  128. package/packs/design-systems/default/meaningful-content-and-states.md +9 -0
  129. package/packs/design-systems/default/pack.yaml +44 -0
  130. package/packs/design-systems/default/principles.md +10 -0
  131. package/packs/personas/core/pack.yaml +7 -0
  132. package/packs/personas/core/personas/archaeologist.md +37 -0
  133. package/packs/personas/core/personas/end-user.md +17 -0
  134. package/packs/personas/core/personas/maintainer.md +17 -0
  135. package/packs/personas/core/personas/operator.md +17 -0
  136. package/packs/personas/core/personas/specs-knowledge-curator.md +35 -0
  137. package/packs/technologies/laravel/pack.yaml +30 -0
  138. package/packs/technologies/laravel-nuxt/pack.yaml +30 -0
  139. package/packs/technologies/nuxt/pack.yaml +30 -0
  140. package/packs/technologies/power-platform/pack.yaml +31 -0
  141. package/packs/technologies/salesforce/pack.yaml +25 -0
  142. package/public/app.js +4896 -0
  143. package/public/apple-touch-icon.png +0 -0
  144. package/public/assets/backstory-icon.png +0 -0
  145. package/public/dashboard-navigation.js +98 -0
  146. package/public/favicon-16.png +0 -0
  147. package/public/favicon-32.png +0 -0
  148. package/public/favicon.ico +0 -0
  149. package/public/index.html +789 -0
  150. package/public/styles.css +2693 -0
  151. package/public/team-hub/app.js +202 -0
  152. package/public/team-hub/index.html +79 -0
  153. package/public/team-hub/styles.css +90 -0
  154. package/scripts/publication-check.mjs +140 -0
  155. package/scripts/setup.mjs +21 -0
  156. package/skills-src/ewai-archaeology/SKILL.md +334 -0
  157. package/skills-src/ewai-archaeology/agents/openai.yaml +4 -0
  158. package/skills-src/ewai-archaeology/references/archaeology-contract.md +201 -0
  159. package/skills-src/ewai-archaeology/references/lifecycle-reconstruction.md +177 -0
  160. package/skills-src/ewai-archaeology/references/maximum-detail-reconstruction.md +97 -0
  161. package/skills-src/ewai-archaeology/references/model-routing.md +26 -0
  162. package/skills-src/ewai-architecture/SKILL.md +108 -0
  163. package/skills-src/ewai-architecture/agents/openai.yaml +4 -0
  164. package/skills-src/ewai-architecture/references/architecture-contract.md +176 -0
  165. package/skills-src/ewai-context/SKILL.md +68 -0
  166. package/skills-src/ewai-context/agents/openai.yaml +4 -0
  167. package/skills-src/ewai-context-import/SKILL.md +118 -0
  168. package/skills-src/ewai-context-import/agents/openai.yaml +4 -0
  169. package/skills-src/ewai-context-import/references/context-import-contract.md +106 -0
  170. package/skills-src/ewai-dashboard-configuration/SKILL.md +20 -0
  171. package/skills-src/ewai-deliver/SKILL.md +122 -0
  172. package/skills-src/ewai-deliver/references/delivery-evidence.md +92 -0
  173. package/skills-src/ewai-deliver/references/phase-routing.md +31 -0
  174. package/skills-src/ewai-design-system-apply/SKILL.md +27 -0
  175. package/skills-src/ewai-design-system-apply/agents/openai.yaml +4 -0
  176. package/skills-src/ewai-design-system-apply/references/application-contract.md +36 -0
  177. package/skills-src/ewai-design-system-author/SKILL.md +28 -0
  178. package/skills-src/ewai-design-system-author/agents/openai.yaml +4 -0
  179. package/skills-src/ewai-design-system-author/references/authoring-contract.md +38 -0
  180. package/skills-src/ewai-design-system-review/SKILL.md +26 -0
  181. package/skills-src/ewai-design-system-review/agents/openai.yaml +4 -0
  182. package/skills-src/ewai-design-system-review/references/review-contract.md +40 -0
  183. package/skills-src/ewai-error-reporting/SKILL.md +46 -0
  184. package/skills-src/ewai-error-reporting/agents/openai.yaml +4 -0
  185. package/skills-src/ewai-error-reporting/references/provider-contract.md +74 -0
  186. package/skills-src/ewai-evidence-depth/SKILL.md +72 -0
  187. package/skills-src/ewai-evidence-depth/agents/openai.yaml +4 -0
  188. package/skills-src/ewai-evidence-depth/references/evidence-depth-contract.md +127 -0
  189. package/skills-src/ewai-intent/SKILL.md +68 -0
  190. package/skills-src/ewai-intent/agents/openai.yaml +4 -0
  191. package/skills-src/ewai-intent/references/intent-contract.md +42 -0
  192. package/skills-src/ewai-knowledge-proposals/SKILL.md +105 -0
  193. package/skills-src/ewai-knowledge-proposals/agents/openai.yaml +4 -0
  194. package/skills-src/ewai-knowledge-proposals/references/proposal-contract.md +59 -0
  195. package/skills-src/ewai-meeting-evidence/SKILL.md +106 -0
  196. package/skills-src/ewai-meeting-evidence/agents/openai.yaml +4 -0
  197. package/skills-src/ewai-meeting-evidence/references/candidate-contract.md +64 -0
  198. package/skills-src/ewai-organisation-policy/SKILL.md +62 -0
  199. package/skills-src/ewai-organisation-policy/agents/openai.yaml +4 -0
  200. package/skills-src/ewai-organisation-policy/references/policy-contract.md +94 -0
  201. package/skills-src/ewai-palace-housekeeping/SKILL.md +55 -0
  202. package/skills-src/ewai-palace-housekeeping/agents/openai.yaml +4 -0
  203. package/skills-src/ewai-persona-entitlement/SKILL.md +60 -0
  204. package/skills-src/ewai-persona-entitlement/agents/openai.yaml +4 -0
  205. package/skills-src/ewai-phase-evidence/SKILL.md +79 -0
  206. package/skills-src/ewai-phase-evidence/agents/openai.yaml +4 -0
  207. package/skills-src/ewai-pipeline/SKILL.md +130 -0
  208. package/skills-src/ewai-pipeline/agents/openai.yaml +4 -0
  209. package/skills-src/ewai-pipeline/references/cli.md +86 -0
  210. package/skills-src/ewai-pipeline/references/specs-contract.md +16 -0
  211. package/skills-src/ewai-portfolio/SKILL.md +70 -0
  212. package/skills-src/ewai-portfolio/agents/openai.yaml +4 -0
  213. package/skills-src/ewai-portfolio/references/portfolio-contract.md +67 -0
  214. package/skills-src/ewai-project-discovery/SKILL.md +95 -0
  215. package/skills-src/ewai-project-discovery/agents/openai.yaml +4 -0
  216. package/skills-src/ewai-project-discovery/references/discovery-contract.md +34 -0
  217. package/skills-src/ewai-prototype-iteration/SKILL.md +30 -0
  218. package/skills-src/ewai-prototype-iteration/agents/openai.yaml +4 -0
  219. package/skills-src/ewai-prototype-iteration/references/review-contract.md +49 -0
  220. package/skills-src/ewai-retro/SKILL.md +48 -0
  221. package/skills-src/ewai-retro/agents/openai.yaml +4 -0
  222. package/skills-src/ewai-retro/references/asset-routing.md +14 -0
  223. package/skills-src/ewai-rollout/SKILL.md +74 -0
  224. package/skills-src/ewai-rollout/agents/openai.yaml +4 -0
  225. package/skills-src/ewai-rollout/references/rollout-contract.md +74 -0
  226. package/skills-src/ewai-shape-intents/SKILL.md +84 -0
  227. package/skills-src/ewai-shape-intents/agents/openai.yaml +4 -0
  228. package/skills-src/ewai-shape-intents/references/intent-mapping-contract.md +109 -0
  229. package/skills-src/ewai-solution-readiness/SKILL.md +55 -0
  230. package/skills-src/ewai-solution-readiness/agents/openai.yaml +4 -0
  231. package/skills-src/ewai-standards-check/SKILL.md +93 -0
  232. package/skills-src/ewai-standards-check/agents/openai.yaml +4 -0
  233. package/skills-src/ewai-standards-check/references/report-contract.md +116 -0
  234. package/skills-src/ewai-test-scenarios/SKILL.md +94 -0
  235. package/skills-src/ewai-test-scenarios/agents/openai.yaml +4 -0
  236. package/skills-src/ewai-test-scenarios/references/scenario-contract.md +88 -0
  237. package/src/afk-worker.mjs +16 -0
  238. package/src/archaeology.mjs +1333 -0
  239. package/src/checkin.mjs +261 -0
  240. package/src/cli.mjs +2427 -0
  241. package/src/companion-guidance.mjs +257 -0
  242. package/src/companion-opening.mjs +62 -0
  243. package/src/companion.mjs +256 -0
  244. package/src/context.mjs +210 -0
  245. package/src/dashboard-preferences.mjs +80 -0
  246. package/src/delivery-artifacts.mjs +204 -0
  247. package/src/delivery-documents.mjs +248 -0
  248. package/src/delivery-gates.mjs +317 -0
  249. package/src/delivery.mjs +1433 -0
  250. package/src/design-system-application.mjs +291 -0
  251. package/src/design-system-authoring.mjs +101 -0
  252. package/src/design-systems.mjs +466 -0
  253. package/src/discovery.mjs +1314 -0
  254. package/src/error-reporting.mjs +323 -0
  255. package/src/evidence-depth.mjs +543 -0
  256. package/src/execution-state.mjs +243 -0
  257. package/src/install.mjs +166 -0
  258. package/src/intent-dependencies.mjs +117 -0
  259. package/src/intent-maps.mjs +402 -0
  260. package/src/intents.mjs +747 -0
  261. package/src/knowledge-proposals.mjs +717 -0
  262. package/src/launcher.mjs +51 -0
  263. package/src/meeting-evidence.mjs +703 -0
  264. package/src/network-rollout.mjs +386 -0
  265. package/src/organisation-blueprints.mjs +438 -0
  266. package/src/organisation-policies.mjs +448 -0
  267. package/src/packs.mjs +44 -0
  268. package/src/paths.mjs +62 -0
  269. package/src/persona-entitlements.mjs +438 -0
  270. package/src/persona-licence-config.mjs +98 -0
  271. package/src/persona-website-provider.mjs +134 -0
  272. package/src/persona-zip.mjs +87 -0
  273. package/src/personas.mjs +159 -0
  274. package/src/platform-metadata-analysis.mjs +314 -0
  275. package/src/policy-design-gates.mjs +623 -0
  276. package/src/policy-gate-integration.mjs +318 -0
  277. package/src/portfolio.mjs +509 -0
  278. package/src/power-platform-source-map.mjs +190 -0
  279. package/src/project.mjs +449 -0
  280. package/src/prototype-iterations.mjs +730 -0
  281. package/src/repository-source-map.mjs +603 -0
  282. package/src/runtime/afk-conductor.mjs +973 -0
  283. package/src/runtime/context-assembly.mjs +457 -0
  284. package/src/runtime/context-benchmarks.mjs +115 -0
  285. package/src/runtime/dashboard-actions.mjs +109 -0
  286. package/src/runtime/dashboard-handoffs.mjs +149 -0
  287. package/src/runtime/dashboard-server.mjs +1272 -0
  288. package/src/runtime/dashboard.mjs +197 -0
  289. package/src/runtime/database.mjs +789 -0
  290. package/src/runtime/error-reporting.mjs +581 -0
  291. package/src/runtime/evidence-depth-workspace.mjs +412 -0
  292. package/src/runtime/execution-leases.mjs +299 -0
  293. package/src/runtime/guided-discovery.mjs +350 -0
  294. package/src/runtime/guided-intents.mjs +517 -0
  295. package/src/runtime/impact-analysis.mjs +535 -0
  296. package/src/runtime/intents.mjs +222 -0
  297. package/src/runtime/knowledge.mjs +86 -0
  298. package/src/runtime/lifecycle-hooks.mjs +1239 -0
  299. package/src/runtime/mcp-config.mjs +110 -0
  300. package/src/runtime/mcp-server.mjs +1885 -0
  301. package/src/runtime/palace.mjs +362 -0
  302. package/src/runtime/paths.mjs +58 -0
  303. package/src/runtime/persona-engagement.mjs +255 -0
  304. package/src/runtime/phase-contributions.mjs +594 -0
  305. package/src/runtime/policy-workspace.mjs +170 -0
  306. package/src/runtime/prototype-iterations.mjs +235 -0
  307. package/src/runtime/provider-adapters.mjs +163 -0
  308. package/src/runtime/repository-index.mjs +838 -0
  309. package/src/runtime/runs.mjs +185 -0
  310. package/src/runtime/security-validation.mjs +1230 -0
  311. package/src/runtime/starter-materialisation.mjs +1155 -0
  312. package/src/runtime/team-hub-client.mjs +479 -0
  313. package/src/runtime/team-hub-database.mjs +288 -0
  314. package/src/runtime/team-hub-server.mjs +191 -0
  315. package/src/runtime/team-hub.mjs +110 -0
  316. package/src/runtime/tree-sitter-index.mjs +390 -0
  317. package/src/runtime/version.mjs +1 -0
  318. package/src/runtime/work.mjs +633 -0
  319. package/src/salesforce-source-map.mjs +212 -0
  320. package/src/security-validation-config.mjs +224 -0
  321. package/src/solution-readiness.mjs +620 -0
  322. package/src/starter-materialisation-contract.mjs +407 -0
  323. package/src/task-graph.mjs +544 -0
  324. package/src/team-hub-resources.mjs +239 -0
  325. package/src/team-hub.mjs +242 -0
  326. package/src/test-scenarios.mjs +622 -0
  327. package/src/validation-config.mjs +289 -0
  328. package/templates/SPECS/1.Scope/personas/registry.yaml +12 -0
  329. package/templates/SPECS/5.Strategy/patterns/context-packet.md +119 -0
  330. package/templates/SPECS/6.Build/_tracker-template.md +16 -0
  331. package/templates/SPECS/pipeline.yaml +62 -0
  332. package/templates/discovery-answers.yaml +86 -0
  333. package/templates/intent-body.md +21 -0
  334. package/tests/fixtures/context-benchmarks.json +9 -0
@@ -0,0 +1,289 @@
1
+ export const VALIDATION_PROVIDERS = Object.freeze(['claude', 'codex', 'antigravity']);
2
+
3
+ const LEGACY_PROVIDER_ALIASES = Object.freeze({
4
+ gemini: 'antigravity',
5
+ agy: 'antigravity',
6
+ });
7
+
8
+ export function canonicalValidationProvider(provider) {
9
+ const value = String(provider ?? '').trim().toLowerCase();
10
+ return LEGACY_PROVIDER_ALIASES[value] ?? value;
11
+ }
12
+
13
+ export const VALIDATION_CHECKPOINTS = Object.freeze({
14
+ 'implementation-plan': 'validate-external-plan',
15
+ 'test-plan': 'validate-external-test-plan',
16
+ code: 'validate-external-code',
17
+ });
18
+
19
+ export const VALIDATION_BREADTHS = Object.freeze([
20
+ 'targeted',
21
+ 'change-set',
22
+ 'capability',
23
+ 'system',
24
+ ]);
25
+
26
+ export const VALIDATION_DEPTHS = Object.freeze([
27
+ 'issues-only',
28
+ 'issues-and-fixes',
29
+ 'analysis-and-recommendations',
30
+ ]);
31
+
32
+ export const VALIDATION_OUTPUTS = Object.freeze(['small', 'medium', 'large']);
33
+
34
+ const DEFAULT_CHECKPOINTS = Object.freeze({
35
+ 'implementation-plan': {
36
+ enabled: true,
37
+ max_cycles: 2,
38
+ validators: 'auto',
39
+ review: {
40
+ breadth: 'capability',
41
+ depth: 'issues-and-fixes',
42
+ output: 'medium',
43
+ },
44
+ },
45
+ 'test-plan': {
46
+ enabled: true,
47
+ max_cycles: 2,
48
+ validators: 'auto',
49
+ review: {
50
+ breadth: 'capability',
51
+ depth: 'issues-and-fixes',
52
+ output: 'medium',
53
+ },
54
+ },
55
+ code: {
56
+ enabled: true,
57
+ max_cycles: 2,
58
+ validators: 'auto',
59
+ review: {
60
+ breadth: 'change-set',
61
+ depth: 'issues-and-fixes',
62
+ output: 'medium',
63
+ },
64
+ },
65
+ });
66
+
67
+ function clone(value) {
68
+ return JSON.parse(JSON.stringify(value));
69
+ }
70
+
71
+ function requireEnum(value, allowed, label) {
72
+ if (!allowed.includes(value)) {
73
+ throw new Error(`${label} must be one of: ${allowed.join(', ')}`);
74
+ }
75
+ return value;
76
+ }
77
+
78
+ function normaliseProvider(value, provider) {
79
+ if (typeof value === 'string') {
80
+ requireEnum(value, ['available', 'unavailable'], `validation provider ${provider}`);
81
+ return {
82
+ state: value,
83
+ enabled: value === 'available',
84
+ };
85
+ }
86
+
87
+ const state = value?.state ?? 'unavailable';
88
+ requireEnum(state, ['available', 'unavailable'], `validation provider ${provider} state`);
89
+ if (value?.enabled !== undefined && typeof value.enabled !== 'boolean') {
90
+ throw new Error(`validation provider ${provider} enabled must be true or false`);
91
+ }
92
+ const enabled = state === 'available' && (value?.enabled ?? true);
93
+
94
+ return { state, enabled };
95
+ }
96
+
97
+ function normaliseValidators(value, checkpoint) {
98
+ if (value === undefined || value === 'auto') {
99
+ return 'auto';
100
+ }
101
+ if (!Array.isArray(value)) {
102
+ throw new Error(`validation checkpoint ${checkpoint} validators must be "auto" or an array`);
103
+ }
104
+
105
+ const validators = [...new Set(value.map(canonicalValidationProvider))];
106
+ for (const provider of validators) {
107
+ requireEnum(provider, VALIDATION_PROVIDERS, `validation checkpoint ${checkpoint} validator`);
108
+ }
109
+ return validators;
110
+ }
111
+
112
+ function normaliseCheckpoint(value, checkpoint) {
113
+ const defaults = DEFAULT_CHECKPOINTS[checkpoint];
114
+ const review = value?.review ?? {};
115
+ if (value?.enabled !== undefined && typeof value.enabled !== 'boolean') {
116
+ throw new Error(`validation checkpoint ${checkpoint} enabled must be true or false`);
117
+ }
118
+ const maxCycles = value?.max_cycles ?? defaults.max_cycles;
119
+ if (!Number.isInteger(maxCycles) || maxCycles < 1 || maxCycles > 3) {
120
+ throw new Error(`validation checkpoint ${checkpoint} max_cycles must be an integer from 1 to 3`);
121
+ }
122
+
123
+ return {
124
+ enabled: value?.enabled ?? defaults.enabled,
125
+ max_cycles: maxCycles,
126
+ validators: normaliseValidators(value?.validators, checkpoint),
127
+ review: {
128
+ breadth: requireEnum(
129
+ review.breadth ?? defaults.review.breadth,
130
+ VALIDATION_BREADTHS,
131
+ `validation checkpoint ${checkpoint} review breadth`,
132
+ ),
133
+ depth: requireEnum(
134
+ review.depth ?? defaults.review.depth,
135
+ VALIDATION_DEPTHS,
136
+ `validation checkpoint ${checkpoint} review depth`,
137
+ ),
138
+ output: requireEnum(
139
+ review.output ?? defaults.review.output,
140
+ VALIDATION_OUTPUTS,
141
+ `validation checkpoint ${checkpoint} review output`,
142
+ ),
143
+ },
144
+ };
145
+ }
146
+
147
+ export function defaultValidationConfig() {
148
+ return {
149
+ standards: {
150
+ required: true,
151
+ allow_waiver: false,
152
+ },
153
+ external: {
154
+ policy: 'configured',
155
+ independent_only: true,
156
+ providers: Object.fromEntries(
157
+ VALIDATION_PROVIDERS.map((provider) => [
158
+ provider,
159
+ { state: 'unavailable', enabled: false },
160
+ ]),
161
+ ),
162
+ checkpoints: clone(DEFAULT_CHECKPOINTS),
163
+ },
164
+ };
165
+ }
166
+
167
+ export function normaliseValidationConfig(value = {}) {
168
+ if (value?.standards?.required === false) {
169
+ throw new Error('Standards compliance is mandatory and cannot be disabled');
170
+ }
171
+ if (value?.standards?.allow_waiver === true) {
172
+ throw new Error('Standards compliance cannot be waived');
173
+ }
174
+ if (value?.external?.independent_only === false) {
175
+ throw new Error('External validation must remain independent of the orchestrator');
176
+ }
177
+
178
+ const rawProviders = value?.external?.providers ?? {};
179
+ const providers = Object.fromEntries(
180
+ VALIDATION_PROVIDERS.map((provider) => [
181
+ provider,
182
+ normaliseProvider(
183
+ rawProviders[provider] ?? (provider === 'antigravity' ? rawProviders.gemini : undefined),
184
+ provider,
185
+ ),
186
+ ]),
187
+ );
188
+
189
+ const rawCheckpoints = value?.external?.checkpoints ?? {};
190
+ const checkpoints = Object.fromEntries(
191
+ Object.keys(VALIDATION_CHECKPOINTS).map((checkpoint) => [
192
+ checkpoint,
193
+ normaliseCheckpoint(rawCheckpoints[checkpoint], checkpoint),
194
+ ]),
195
+ );
196
+
197
+ return {
198
+ standards: {
199
+ required: true,
200
+ allow_waiver: false,
201
+ },
202
+ external: {
203
+ policy: 'configured',
204
+ independent_only: true,
205
+ providers,
206
+ checkpoints,
207
+ },
208
+ };
209
+ }
210
+
211
+ export function validationCheckpointForPhase(phaseId) {
212
+ return Object.entries(VALIDATION_CHECKPOINTS)
213
+ .find(([, configuredPhase]) => configuredPhase === phaseId)?.[0] ?? null;
214
+ }
215
+
216
+ export function effectiveValidationConfig(configOrValidation, orchestrator = 'manual') {
217
+ const validation = normaliseValidationConfig(
218
+ configOrValidation?.validation ?? configOrValidation,
219
+ );
220
+ const canonicalOrchestrator = canonicalValidationProvider(orchestrator);
221
+ const normalisedOrchestrator = VALIDATION_PROVIDERS.includes(canonicalOrchestrator)
222
+ ? canonicalOrchestrator
223
+ : 'manual';
224
+
225
+ const globallyEligible = VALIDATION_PROVIDERS.filter((provider) => {
226
+ const setting = validation.external.providers[provider];
227
+ return setting.state === 'available' && setting.enabled;
228
+ });
229
+
230
+ const checkpoints = Object.fromEntries(
231
+ Object.entries(validation.external.checkpoints).map(([checkpoint, setting]) => {
232
+ const requested = setting.validators === 'auto'
233
+ ? globallyEligible
234
+ : setting.validators.filter((provider) => globallyEligible.includes(provider));
235
+ const providers = requested.filter((provider) => provider !== normalisedOrchestrator);
236
+
237
+ return [
238
+ checkpoint,
239
+ {
240
+ phase: VALIDATION_CHECKPOINTS[checkpoint],
241
+ enabled: setting.enabled,
242
+ max_cycles: setting.max_cycles,
243
+ validators: providers,
244
+ review: clone(setting.review),
245
+ skipped_orchestrator: requested.includes(normalisedOrchestrator)
246
+ ? normalisedOrchestrator
247
+ : null,
248
+ },
249
+ ];
250
+ }),
251
+ );
252
+
253
+ return {
254
+ standards: clone(validation.standards),
255
+ orchestrator: normalisedOrchestrator,
256
+ providers: clone(validation.external.providers),
257
+ checkpoints,
258
+ };
259
+ }
260
+
261
+ export function setValidationProvider(config, provider, state, enabled = undefined) {
262
+ requireEnum(provider, VALIDATION_PROVIDERS, 'validation provider');
263
+ requireEnum(state, ['available', 'unavailable'], 'validation provider state');
264
+ const validation = normaliseValidationConfig(config.validation);
265
+ validation.external.providers[provider] = {
266
+ state,
267
+ enabled: state === 'available' ? (enabled ?? true) : false,
268
+ };
269
+ config.validation = validation;
270
+ return config;
271
+ }
272
+
273
+ export function setValidationCheckpoint(config, checkpoint, update) {
274
+ requireEnum(checkpoint, Object.keys(VALIDATION_CHECKPOINTS), 'validation checkpoint');
275
+ const validation = normaliseValidationConfig(config.validation);
276
+ validation.external.checkpoints[checkpoint] = normaliseCheckpoint(
277
+ {
278
+ ...validation.external.checkpoints[checkpoint],
279
+ ...update,
280
+ review: {
281
+ ...validation.external.checkpoints[checkpoint].review,
282
+ ...(update.review ?? {}),
283
+ },
284
+ },
285
+ checkpoint,
286
+ );
287
+ config.validation = validation;
288
+ return config;
289
+ }
@@ -0,0 +1,12 @@
1
+ schema: ewai.persona-registry/v1
2
+ sources:
3
+ - id: project
4
+ path: project
5
+ managed: false
6
+ - id: personal
7
+ scope: user
8
+ managed: false
9
+ - id: premium
10
+ pack: ewai.personas.professional
11
+ managed: true
12
+ assignments: {}
@@ -0,0 +1,119 @@
1
+ # Context Packet Pattern
2
+
3
+ > SPECS 5.Strategy / patterns
4
+ > Status: EWAI v1
5
+
6
+ ## Purpose
7
+
8
+ Give every phase and contributor involved in a capability one living artefact that summarises the current delivery run. It prevents each AI or person from re-deriving context and keeps resumable work intelligible.
9
+
10
+ The Context Packet is distinct from:
11
+
12
+ - `tracker.md`, the phase-status state machine;
13
+ - phase artefacts such as `intent-summary.md` and `build-plan.md`;
14
+ - ADRs, which hold durable cross-capability decisions;
15
+ - agent memory, which is not project truth.
16
+
17
+ It lives at `SPECS/6.Build/{slug}/context-packet.md`, is created beside the tracker, is read on every phase entry, and is updated on every phase exit.
18
+
19
+ ## Required structure
20
+
21
+ The packet uses these sections in this order:
22
+
23
+ ```markdown
24
+ # Context Packet: {Capability Name}
25
+
26
+ **Slug:** `{slug}`
27
+ **Started:** {ISO timestamp}
28
+ **Last updated:** {ISO timestamp}
29
+ **Current phase:** {phase or paused state}
30
+ **Review intensity:** {full | scoped | targeted}
31
+ **Execution tier:** {full | scoped | targeted}
32
+ **Input type:** {intent | capability | idea | bug | resume}
33
+ **Run mode:** {normal | dry-run | shelf | bug | resume}
34
+ **Branch strategy:** {n/a | no-build-branches | branches-created-at-shelf}
35
+ **Working branch:** {main | feature/{slug} | mixed; explain}
36
+
37
+ ---
38
+
39
+ ## What this capability is
40
+
41
+ {One plain-language paragraph from the accepted intent.}
42
+
43
+ ## Why it matters
44
+
45
+ {Business rationale, beneficiaries, and what fails without it.}
46
+
47
+ ## Scope boundary
48
+
49
+ **In scope:**
50
+ - {item}
51
+
52
+ **Out of scope (explicitly deferred):**
53
+ - {item}: {reason and destination}
54
+
55
+ ## Key decisions made during this run
56
+
57
+ | # | Decision | Made during | Rationale | Reversibility |
58
+ |---|---|---|---|---|
59
+
60
+ ## Open escalations
61
+
62
+ | # | Phase raised | Question | Status | Resolution |
63
+ |---|---|---|---|---|
64
+
65
+ ## Phase log
66
+
67
+ | Phase | Status | Started | Completed | Key artefact | Notes |
68
+ |---|---|---|---|---|---|
69
+
70
+ ## Active constraints
71
+
72
+ - {binding constraint downstream phases must retain}
73
+
74
+ ## Push-back signals
75
+
76
+ | # | Phase / tool | Reference file | Nature of push-back | What we did instead | Proposed update |
77
+ |---|---|---|---|---|---|
78
+
79
+ ## Handoff notes
80
+
81
+ `{phase} → {next phase}: {three to five useful sentences}`
82
+
83
+ ## Links
84
+
85
+ - Tracker: `tracker.md`
86
+ - Durable state: `delivery-state.json`
87
+ - Destination: `destination.md` (after Plan)
88
+ - Task graph: `task-graph.json` (after Plan)
89
+ - Intent: `intent-summary.md`
90
+ - Build plan: `build-plan.md` (after Plan)
91
+ - Test plan: `test-plan.md` (after TestPlan)
92
+ - Task reports: `tasks/T-###/report.md` (during Build)
93
+ - Retro: `retro.md` (after completion)
94
+ ```
95
+
96
+ ## Maintenance protocol
97
+
98
+ On entry, read the packet and use it as the primary brief. Open referenced artefacts where more detail is required. Before repository-truth claims, query the project-local EWAI index and verify material evidence in source.
99
+
100
+ On exit, update:
101
+
102
+ - timestamp and current phase;
103
+ - the completed phase-log row;
104
+ - new decisions and their reversibility;
105
+ - active constraints and open escalations;
106
+ - newly created links;
107
+ - the handoff for the next phase.
108
+
109
+ On escalation, record the question and exact paused phase. On resume, validate the packet against `delivery-state.json`, the intent Markdown and JSON, and SQLite. The JSON and guarded transition checks decide whether work may proceed; this Markdown makes the state legible.
110
+
111
+ Contributors and subagents do not mutate the packet directly. They return evidence to the orchestrator, which is its single writer. Tracker, Context Packet, checklist, gate ledgers, and branch merges are sequentially owned surfaces.
112
+
113
+ ## Retention
114
+
115
+ Archive the packet with all other delivery evidence after Retro. It remains the readable account of how the capability moved through the pipeline.
116
+
117
+ ## Exclusions
118
+
119
+ Do not put long analysis, code, per-task execution detail, cross-capability ADR content, hidden agent memory, or speculative ideas in this packet. Keep it under 300 lines; move depth into a linked artefact.
@@ -0,0 +1,16 @@
1
+ ---
2
+ schema: ewai.tracker/v1
3
+ slug: ""
4
+ status: preparing
5
+ current_phase: intent
6
+ ---
7
+
8
+ # Delivery tracker
9
+
10
+ ## Outcome
11
+
12
+ ## Phase state
13
+
14
+ ## Decisions
15
+
16
+ ## Blockers
@@ -0,0 +1,62 @@
1
+ schema: ewai.project/v1
2
+ project:
3
+ name: {{PROJECT_NAME}}
4
+ specs:
5
+ root: {{SPECS_ROOT}}
6
+ repositories:
7
+ - name: {{PRIMARY_REPOSITORY_NAME}}
8
+ path: {{PRIMARY_REPOSITORY_PATH}}
9
+ role: {{PRIMARY_REPOSITORY_ROLE}}
10
+ skills:
11
+ namespace: ewai
12
+ profile: full
13
+ packs:
14
+ - ewai.core
15
+ personas:
16
+ premium:
17
+ provider: wordpress-edd
18
+ approvals:
19
+ build: required
20
+ destructive_operations: required
21
+ validation:
22
+ standards:
23
+ required: true
24
+ allow_waiver: false
25
+ external:
26
+ policy: configured
27
+ independent_only: true
28
+ providers:
29
+ claude:
30
+ state: unavailable
31
+ enabled: false
32
+ codex:
33
+ state: unavailable
34
+ enabled: false
35
+ antigravity:
36
+ state: unavailable
37
+ enabled: false
38
+ checkpoints:
39
+ implementation-plan:
40
+ enabled: true
41
+ max_cycles: 2
42
+ validators: auto
43
+ review:
44
+ breadth: capability
45
+ depth: issues-and-fixes
46
+ output: medium
47
+ test-plan:
48
+ enabled: true
49
+ max_cycles: 2
50
+ validators: auto
51
+ review:
52
+ breadth: capability
53
+ depth: issues-and-fixes
54
+ output: medium
55
+ code:
56
+ enabled: true
57
+ max_cycles: 2
58
+ validators: auto
59
+ review:
60
+ breadth: change-set
61
+ depth: issues-and-fixes
62
+ output: medium
@@ -0,0 +1,86 @@
1
+ schema: ewai.discovery-answers/v1
2
+ project:
3
+ name: Example Product
4
+ whyNow: Explain what changed or became unacceptable.
5
+ purpose: Help a defined group of users achieve a valuable outcome.
6
+ problem: Describe the current unmet need and why it matters.
7
+ primaryUsers:
8
+ - Primary user
9
+ desiredOutcomes:
10
+ - Measurable outcome
11
+ inScope:
12
+ - Primary project boundary
13
+ capabilities:
14
+ - Required capability
15
+ missingCapabilities: []
16
+ stage: new
17
+ productTypes:
18
+ - web application
19
+ nonGoals: []
20
+ dontTouch: []
21
+ hardConstraints: []
22
+ softConstraints: []
23
+ nonNegotiables: []
24
+ successSignals:
25
+ - Observable evidence of the desired outcome
26
+ failureSignals: []
27
+ definitionOfReady: []
28
+ definitionOfDone:
29
+ - Delivery gates pass
30
+ - Manual QA is approved
31
+ - Retrospective is complete
32
+ openQuestions: []
33
+ risks: []
34
+ oneSentence: A one-sentence honest description of the project.
35
+ avoidBecoming: A solution detached from the real user problem.
36
+ ownership:
37
+ product: Product owner name or role
38
+ delivery: Delivery owner name or role
39
+ technical: Technical owner name or role
40
+ delivery:
41
+ technologyPacks:
42
+ - ewai.stack.laravel-nuxt
43
+ customTechnology: []
44
+ deploymentTarget: Managed cloud platform
45
+ constraints: []
46
+ assurance:
47
+ jurisdictions:
48
+ - United Kingdom
49
+ regulatedDomains: []
50
+ dataClassification: confidential
51
+ personalData: yes
52
+ sensitiveData: unknown
53
+ authentication: yes
54
+ multiTenant: yes
55
+ internetFacing: yes
56
+ payments: no
57
+ aiFeatures: no
58
+ accessibility: yes
59
+ availability: standard
60
+ validation:
61
+ providers:
62
+ claude:
63
+ state: unavailable
64
+ enabled: false
65
+ codex:
66
+ state: unavailable
67
+ enabled: false
68
+ antigravity:
69
+ state: unavailable
70
+ enabled: false
71
+ checkpoints:
72
+ implementation-plan:
73
+ max_cycles: 2
74
+ breadth: capability
75
+ depth: issues-and-fixes
76
+ output: medium
77
+ test-plan:
78
+ max_cycles: 2
79
+ breadth: capability
80
+ depth: issues-and-fixes
81
+ output: medium
82
+ code:
83
+ max_cycles: 2
84
+ breadth: change-set
85
+ depth: issues-and-fixes
86
+ output: medium
@@ -0,0 +1,21 @@
1
+ # {{TITLE}}
2
+
3
+ ## Problem
4
+
5
+ ## Desired outcome
6
+
7
+ ## Users and personas
8
+
9
+ ## Journeys
10
+
11
+ ## Acceptance criteria
12
+
13
+ ## Constraints
14
+
15
+ ## Dependencies and relationships
16
+
17
+ ## Delivery shape preview
18
+
19
+ ## Evidence
20
+
21
+ ## Open decisions
@@ -0,0 +1,9 @@
1
+ [
2
+ {"profile":"companion","focus":"continue governed delivery","budgetTokens":150,"segments":[{"id":"companion-state","label":"Current state","evidenceClass":"mandatory","priority":100,"sourcePath":"SPECS/6.Build/example/delivery-state.json","content":"MANDATORY:COMPANION CURRENT_PHASE plan HUMAN_ROUTE continue","requiredMarkers":["MANDATORY:COMPANION","CURRENT_PHASE","HUMAN_ROUTE"],"selectionReason":"Current state and human route are required."},{"id":"companion-focus","label":"Current focus","evidenceClass":"relevant","priority":60,"sourcePath":"SPECS/6.Build/example/context-packet.md","content":"FOCUS governed delivery next action and blocker","selectionReason":"Matches current work."},{"id":"companion-history","label":"Repeated history","evidenceClass":"optional","priority":5,"sourcePath":"SPECS/3.Evidence/history.md","content":"Historical delivery narrative already represented by current state. ","repeat":80,"selectionReason":"Only useful with spare budget."}]},
3
+ {"profile":"intent","focus":"define context outcome","budgetTokens":170,"segments":[{"id":"intent-outcome","label":"Outcome and acceptance","evidenceClass":"mandatory","priority":100,"sourcePath":"SPECS/2.Purpose/intents/example.md","content":"MANDATORY:INTENT OUTCOME minimum sufficient context ACCEPTANCE no engineering regression","requiredMarkers":["MANDATORY:INTENT","OUTCOME","ACCEPTANCE"],"selectionReason":"Outcome and acceptance are required."},{"id":"intent-personas","label":"Relevant personas","evidenceClass":"relevant","priority":60,"sourcePath":"SPECS/1.Scope/personas/project.md","content":"PERSONAS product owner maintainer operator curator","selectionReason":"Relevant lenses refine the intent."},{"id":"intent-notes","label":"Raw ideation","evidenceClass":"optional","priority":5,"sourcePath":"SPECS/2.Purpose/ideas/example.md","content":"Repeated ideation notes superseded by reviewed outcome. ","repeat":80,"selectionReason":"Background only."}]},
4
+ {"profile":"plan","focus":"plan context assembly","budgetTokens":190,"segments":[{"id":"plan-contract","label":"Plan contract","evidenceClass":"mandatory","priority":100,"sourcePath":"SPECS/6.Build/example/build-plan.md","content":"MANDATORY:PLAN SLICE GCA-S1 STANDARD lifecycle safety TEST first failing test","requiredMarkers":["MANDATORY:PLAN","SLICE","STANDARD","TEST"],"selectionReason":"Slices standards and tests are required."},{"id":"plan-truth","label":"Repository truth","evidenceClass":"relevant","priority":70,"sourcePath":"SPECS/6.Build/example/repository-truth.md","content":"SOURCE_TRUTH provider adapter is the host boundary","selectionReason":"Direct source evidence shapes the plan."},{"id":"plan-duplicates","label":"Paired representations","evidenceClass":"optional","priority":5,"sourcePath":"SPECS/6.Build/example/all-artefacts.md","content":"Repeated Markdown and JSON representations of the same planning evidence. ","repeat":90,"selectionReason":"Canonical files remain stored but need not all enter one model call."}]},
5
+ {"profile":"build-task","focus":"implement T-001","budgetTokens":230,"segments":[{"id":"build-task-contract","label":"Task contract","evidenceClass":"mandatory","priority":100,"sourcePath":"SPECS/6.Build/example/task-graph.json","content":"MANDATORY:BUILD TASK T-001 WRITE_SET src/runtime/context.mjs ALLOWED_COMMAND node test STOP_CONDITION authority drift","requiredMarkers":["MANDATORY:BUILD","TASK T-001","WRITE_SET","ALLOWED_COMMAND","STOP_CONDITION"],"selectionReason":"The complete task boundary is required."},{"id":"build-standard","label":"Applicable standard","evidenceClass":"mandatory","priority":95,"sourcePath":"SPECS/4.Constraints/standards/lifecycle-hook-safety.md","content":"STANDARD authority none HUMAN_GATE Build and Manual QA","requiredMarkers":["STANDARD","HUMAN_GATE"],"selectionReason":"Applicable standards and human gates are required."},{"id":"build-history","label":"Unchanged delivery history","evidenceClass":"optional","priority":5,"sourcePath":"SPECS/6.Build/example/history.md","content":"Repeated unchanged delivery events and completed phase prose. ","repeat":100,"selectionReason":"Not needed for this task."}]},
6
+ {"profile":"fresh-context-review","focus":"review T-001","budgetTokens":230,"segments":[{"id":"review-contract","label":"Review contract","evidenceClass":"mandatory","priority":100,"sourcePath":"SPECS/6.Build/example/task-graph.json","content":"MANDATORY:REVIEW TESTS_FIRST DIFF WRITE_SET STOP_CONDITION VERDICT PASS_OR_FAIL","requiredMarkers":["MANDATORY:REVIEW","TESTS_FIRST","DIFF","WRITE_SET","VERDICT"],"selectionReason":"Fresh review obligations are required."},{"id":"review-standard","label":"Review standards","evidenceClass":"mandatory","priority":95,"sourcePath":"SPECS/4.Constraints/standards/lifecycle-hook-safety.md","content":"SECURITY privacy authority scope tests","requiredMarkers":["SECURITY","privacy","authority"],"selectionReason":"Review must cover standards and security."},{"id":"review-history","label":"Earlier conversation","evidenceClass":"optional","priority":5,"sourcePath":"SPECS/6.Build/example/conversation.md","content":"Repeated earlier implementation conversation not needed by fresh review. ","repeat":100,"selectionReason":"Fresh review must not inherit unnecessary conversation."}]},
7
+ {"profile":"phase-contribution-review","focus":"review evidence contribution","budgetTokens":190,"segments":[{"id":"contribution-thread","label":"Shared evidence thread","evidenceClass":"mandatory","priority":100,"sourcePath":"SPECS/3.Evidence/contributions/example.json","content":"MANDATORY:CONTRIBUTION ATTRIBUTION source owner disagreement AUTHORITY_NONE","requiredMarkers":["MANDATORY:CONTRIBUTION","ATTRIBUTION","disagreement","AUTHORITY_NONE"],"selectionReason":"Attribution and unresolved disagreement are required."},{"id":"contribution-personas","label":"Active lenses","evidenceClass":"relevant","priority":60,"sourcePath":"SPECS/1.Scope/personas/index.json","content":"ACTIVE_PERSONAS business technical shared review","selectionReason":"Current lenses support challenge."},{"id":"contribution-history","label":"Prior revisions","evidenceClass":"optional","priority":5,"sourcePath":"SPECS/3.Evidence/contributions/history.md","content":"Repeated superseded contribution revisions preserved canonically. ","repeat":90,"selectionReason":"Exact delta replaces replay of unchanged revisions."}]},
8
+ {"profile":"design-system-apply","focus":"prototype interaction and states","budgetTokens":240,"segments":[{"id":"design-authority","label":"Design authority boundary","evidenceClass":"mandatory","priority":110,"sourcePath":"Docs/human-approval-and-assurance-guide.md","content":"MANDATORY:DESIGN AUTHORITY_NONE cannot approve Build or Manual QA publish deploy or release","requiredMarkers":["MANDATORY:DESIGN","AUTHORITY_NONE","Manual QA","release"],"selectionReason":"Human design and delivery authority remains mandatory."},{"id":"design-required","label":"Required experience guidance","evidenceClass":"mandatory","priority":100,"sourcePath":"design-system/ewai.design-system.default/principles.md","content":"EXPERIENCE_PROMISE interaction content states accessibility intentional review","requiredMarkers":["EXPERIENCE_PROMISE","interaction","states","accessibility"],"selectionReason":"Required resolved design guidance must remain complete."},{"id":"design-focus","label":"Focus-matched component guidance","evidenceClass":"relevant","priority":60,"sourcePath":"design-system/org.example.product/components.md","content":"PROTOTYPE_FOCUS established components and responsive states","selectionReason":"The contribution matches this prototype surface."},{"id":"design-history","label":"Unrelated design history","evidenceClass":"optional","priority":5,"sourcePath":"SPECS/3.Evidence/design-history.md","content":"Repeated superseded visual exploration and prior prototype conversation. ","repeat":100,"selectionReason":"Historical exploration remains durable but outside this application."}]}
9
+ ]