@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.
- package/Docs/README.md +50 -0
- package/Docs/adoption/consultancy-and-multi-project-rollout.md +135 -0
- package/Docs/adoption/non-technical-team-guide.md +126 -0
- package/Docs/archaeology-technology-and-hosting-discovery.md +212 -0
- package/Docs/blast-radius-and-impact-routing-guide.md +325 -0
- package/Docs/blueprints/internal-blueprint-catalogue.md +146 -0
- package/Docs/blueprints/maintaining-organisation-blueprints.md +154 -0
- package/Docs/blueprints/validation-and-troubleshooting.md +168 -0
- package/Docs/cli-reference.md +113 -0
- package/Docs/completed-phase-evidence-amendments.md +74 -0
- package/Docs/consultancy-network-rollout-control-plane-guide.md +202 -0
- package/Docs/context-aware-delivery-companion-guide.md +198 -0
- package/Docs/context-aware-delivery-companion-user-guide.md +184 -0
- package/Docs/context-management-and-token-efficiency.md +113 -0
- package/Docs/design-systems/design-system-implementation-guide.md +85 -0
- package/Docs/design-systems/design-system-pack-authoring-guide.md +95 -0
- package/Docs/design-systems/design-system-review-guide.md +51 -0
- package/Docs/design-systems/design-system-user-guide.md +96 -0
- package/Docs/design-systems/product-owner-guide.md +49 -0
- package/Docs/designing-organisation-blueprint-packs.md +384 -0
- package/Docs/developer-delivery-guide.md +224 -0
- package/Docs/error-reporting-guide.md +110 -0
- package/Docs/error-reporting-provider-guide.md +49 -0
- package/Docs/examples/error-report-adapter.md +70 -0
- package/Docs/examples/meeting-review.md +76 -0
- package/Docs/examples/minimal-design-system.md +67 -0
- package/Docs/examples/prototype-review-inputs.md +175 -0
- package/Docs/examples/reproducible-archaeology-depth-example.md +144 -0
- package/Docs/examples/test-scenario-input.md +68 -0
- package/Docs/examples/worked-examples.md +147 -0
- package/Docs/existing-project-onboarding-guide.md +214 -0
- package/Docs/explanation/core-concepts.md +26 -0
- package/Docs/explanation/delivery-workflow.md +48 -0
- package/Docs/governance/governance-team-guide.md +139 -0
- package/Docs/governed-starter-project-materialisation-guide.md +284 -0
- package/Docs/guide-catalogue.md +117 -0
- package/Docs/guided-discovery-facilitator-guide.md +172 -0
- package/Docs/guided-intent-workspace-guide.md +109 -0
- package/Docs/guided-phase-evidence-drafting-guide.md +119 -0
- package/Docs/human-approval-and-assurance-guide.md +146 -0
- package/Docs/knowledge-proposals-implementer-guide.md +106 -0
- package/Docs/knowledge-proposals-user-guide.md +247 -0
- package/Docs/maintainers/context-benchmarks.md +29 -0
- package/Docs/maintainers/contributing.md +58 -0
- package/Docs/maintainers/evidence-depth-acceptance.md +72 -0
- package/Docs/maintainers/verification-walkthroughs.md +104 -0
- package/Docs/meeting-evidence-implementer-guide.md +132 -0
- package/Docs/meeting-evidence-user-guide.md +200 -0
- package/Docs/operations/dashboard-and-delivery-state.md +153 -0
- package/Docs/operations/dashboard-configuration.md +87 -0
- package/Docs/operations/installation-updating-and-entitlements.md +135 -0
- package/Docs/operations/premium-personas-setup.md +76 -0
- package/Docs/operations/troubleshooting-and-recovery.md +205 -0
- package/Docs/organisation-rollout-guide.md +142 -0
- package/Docs/persona-entitlement-provider-guide.md +199 -0
- package/Docs/persona-guided-prototype-iteration.md +129 -0
- package/Docs/personas/organisation-specific-personas.md +103 -0
- package/Docs/personas/persona-authoring-cookbook.md +176 -0
- package/Docs/personas/persona-engagement-ui.md +133 -0
- package/Docs/personas/persona-governance.md +118 -0
- package/Docs/platform-export-analysis-guide.md +336 -0
- package/Docs/policies/governance-owner-guide.md +36 -0
- package/Docs/policies/implementation-guide.md +42 -0
- package/Docs/policies/organisation-policy-design-gates.md +58 -0
- package/Docs/policies/policy-pack-authoring-guide.md +108 -0
- package/Docs/policies/product-owner-guide.md +43 -0
- package/Docs/policies/technical-owner-guide.md +37 -0
- package/Docs/product-owner-guide.md +327 -0
- package/Docs/project-portfolio-orchestration-guide.md +199 -0
- package/Docs/quality/manual-qa-and-acceptance.md +162 -0
- package/Docs/quality/persona-driven-test-scenarios.md +172 -0
- package/Docs/quality/reproducible-archaeology-depth-review-checklist.md +89 -0
- package/Docs/reference/capabilities-and-project-layout.md +678 -0
- package/Docs/reference/cli-and-configuration.md +398 -0
- package/Docs/reference/contributions-api.md +23 -0
- package/Docs/reference/security-adapter-authoring.md +81 -0
- package/Docs/reference/starter-adapter-authoring.md +74 -0
- package/Docs/repository-source-map-guide.md +381 -0
- package/Docs/reproducible-archaeology-and-discovery-depth.md +292 -0
- package/Docs/screen-prototype-creation-guide.md +324 -0
- package/Docs/security-validation-guide.md +353 -0
- package/Docs/solution-readiness-review-guide.md +123 -0
- package/Docs/standards/project-standards-authoring.md +157 -0
- package/Docs/team-hub-guide.md +162 -0
- package/Docs/team-hub-resource-registry-guide.md +167 -0
- package/Docs/tutorials/first-delivery.md +83 -0
- package/Docs/tutorials/first-session.md +62 -0
- package/Docs/using-lifecycle-hooks.md +381 -0
- package/Docs/working-with-personas.md +274 -0
- package/LICENSE +165 -0
- package/README.md +96 -0
- package/agents-src/claude/ewai-security-reviewer.md +15 -0
- package/bin/ewai +5 -0
- package/config/archaeology-record-families.yaml +59 -0
- package/config/delivery-artifacts.yaml +121 -0
- package/config/delivery-stages.yaml +77 -0
- package/config/design-system.schema.json +46 -0
- package/config/error-reporting.schema.json +79 -0
- package/config/evidence-depth.schema.json +53 -0
- package/config/intent.schema.json +90 -0
- package/config/knowledge-proposals-proposal.schema.json +34 -0
- package/config/lifecycle-event.schema.json +68 -0
- package/config/lifecycle-handler.schema.json +45 -0
- package/config/lifecycle-hook-ack.schema.json +19 -0
- package/config/meeting-evidence-candidate.schema.json +102 -0
- package/config/organisation-policy.schema.json +137 -0
- package/config/pack.schema.json +250 -0
- package/config/persona-pack.schema.json +21 -0
- package/config/persona.schema.json +17 -0
- package/config/policy-evaluation.schema.json +77 -0
- package/config/policy-facts.schema.json +140 -0
- package/config/portfolio.schema.json +68 -0
- package/config/project.schema.json +313 -0
- package/config/prototype-iteration.schema.json +128 -0
- package/config/rollout.schema.json +87 -0
- package/config/security-adapter.schema.json +31 -0
- package/config/security-scan-request.schema.json +64 -0
- package/config/security-scan-response.schema.json +52 -0
- package/config/security-validation-policy.schema.json +74 -0
- package/config/starter-source-acknowledgement.schema.json +13 -0
- package/config/starter-source-adapter.schema.json +38 -0
- package/config/starter-source-request.schema.json +61 -0
- package/package.json +77 -0
- package/packs/core/pack.yaml +7 -0
- package/packs/design-systems/default/experience-promise.md +9 -0
- package/packs/design-systems/default/intentional-review.md +10 -0
- package/packs/design-systems/default/interaction-and-entry.md +9 -0
- package/packs/design-systems/default/meaningful-content-and-states.md +9 -0
- package/packs/design-systems/default/pack.yaml +44 -0
- package/packs/design-systems/default/principles.md +10 -0
- package/packs/personas/core/pack.yaml +7 -0
- package/packs/personas/core/personas/archaeologist.md +37 -0
- package/packs/personas/core/personas/end-user.md +17 -0
- package/packs/personas/core/personas/maintainer.md +17 -0
- package/packs/personas/core/personas/operator.md +17 -0
- package/packs/personas/core/personas/specs-knowledge-curator.md +35 -0
- package/packs/technologies/laravel/pack.yaml +30 -0
- package/packs/technologies/laravel-nuxt/pack.yaml +30 -0
- package/packs/technologies/nuxt/pack.yaml +30 -0
- package/packs/technologies/power-platform/pack.yaml +31 -0
- package/packs/technologies/salesforce/pack.yaml +25 -0
- package/public/app.js +4896 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/assets/backstory-icon.png +0 -0
- package/public/dashboard-navigation.js +98 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/index.html +789 -0
- package/public/styles.css +2693 -0
- package/public/team-hub/app.js +202 -0
- package/public/team-hub/index.html +79 -0
- package/public/team-hub/styles.css +90 -0
- package/scripts/publication-check.mjs +140 -0
- package/scripts/setup.mjs +21 -0
- package/skills-src/ewai-archaeology/SKILL.md +334 -0
- package/skills-src/ewai-archaeology/agents/openai.yaml +4 -0
- package/skills-src/ewai-archaeology/references/archaeology-contract.md +201 -0
- package/skills-src/ewai-archaeology/references/lifecycle-reconstruction.md +177 -0
- package/skills-src/ewai-archaeology/references/maximum-detail-reconstruction.md +97 -0
- package/skills-src/ewai-archaeology/references/model-routing.md +26 -0
- package/skills-src/ewai-architecture/SKILL.md +108 -0
- package/skills-src/ewai-architecture/agents/openai.yaml +4 -0
- package/skills-src/ewai-architecture/references/architecture-contract.md +176 -0
- package/skills-src/ewai-context/SKILL.md +68 -0
- package/skills-src/ewai-context/agents/openai.yaml +4 -0
- package/skills-src/ewai-context-import/SKILL.md +118 -0
- package/skills-src/ewai-context-import/agents/openai.yaml +4 -0
- package/skills-src/ewai-context-import/references/context-import-contract.md +106 -0
- package/skills-src/ewai-dashboard-configuration/SKILL.md +20 -0
- package/skills-src/ewai-deliver/SKILL.md +122 -0
- package/skills-src/ewai-deliver/references/delivery-evidence.md +92 -0
- package/skills-src/ewai-deliver/references/phase-routing.md +31 -0
- package/skills-src/ewai-design-system-apply/SKILL.md +27 -0
- package/skills-src/ewai-design-system-apply/agents/openai.yaml +4 -0
- package/skills-src/ewai-design-system-apply/references/application-contract.md +36 -0
- package/skills-src/ewai-design-system-author/SKILL.md +28 -0
- package/skills-src/ewai-design-system-author/agents/openai.yaml +4 -0
- package/skills-src/ewai-design-system-author/references/authoring-contract.md +38 -0
- package/skills-src/ewai-design-system-review/SKILL.md +26 -0
- package/skills-src/ewai-design-system-review/agents/openai.yaml +4 -0
- package/skills-src/ewai-design-system-review/references/review-contract.md +40 -0
- package/skills-src/ewai-error-reporting/SKILL.md +46 -0
- package/skills-src/ewai-error-reporting/agents/openai.yaml +4 -0
- package/skills-src/ewai-error-reporting/references/provider-contract.md +74 -0
- package/skills-src/ewai-evidence-depth/SKILL.md +72 -0
- package/skills-src/ewai-evidence-depth/agents/openai.yaml +4 -0
- package/skills-src/ewai-evidence-depth/references/evidence-depth-contract.md +127 -0
- package/skills-src/ewai-intent/SKILL.md +68 -0
- package/skills-src/ewai-intent/agents/openai.yaml +4 -0
- package/skills-src/ewai-intent/references/intent-contract.md +42 -0
- package/skills-src/ewai-knowledge-proposals/SKILL.md +105 -0
- package/skills-src/ewai-knowledge-proposals/agents/openai.yaml +4 -0
- package/skills-src/ewai-knowledge-proposals/references/proposal-contract.md +59 -0
- package/skills-src/ewai-meeting-evidence/SKILL.md +106 -0
- package/skills-src/ewai-meeting-evidence/agents/openai.yaml +4 -0
- package/skills-src/ewai-meeting-evidence/references/candidate-contract.md +64 -0
- package/skills-src/ewai-organisation-policy/SKILL.md +62 -0
- package/skills-src/ewai-organisation-policy/agents/openai.yaml +4 -0
- package/skills-src/ewai-organisation-policy/references/policy-contract.md +94 -0
- package/skills-src/ewai-palace-housekeeping/SKILL.md +55 -0
- package/skills-src/ewai-palace-housekeeping/agents/openai.yaml +4 -0
- package/skills-src/ewai-persona-entitlement/SKILL.md +60 -0
- package/skills-src/ewai-persona-entitlement/agents/openai.yaml +4 -0
- package/skills-src/ewai-phase-evidence/SKILL.md +79 -0
- package/skills-src/ewai-phase-evidence/agents/openai.yaml +4 -0
- package/skills-src/ewai-pipeline/SKILL.md +130 -0
- package/skills-src/ewai-pipeline/agents/openai.yaml +4 -0
- package/skills-src/ewai-pipeline/references/cli.md +86 -0
- package/skills-src/ewai-pipeline/references/specs-contract.md +16 -0
- package/skills-src/ewai-portfolio/SKILL.md +70 -0
- package/skills-src/ewai-portfolio/agents/openai.yaml +4 -0
- package/skills-src/ewai-portfolio/references/portfolio-contract.md +67 -0
- package/skills-src/ewai-project-discovery/SKILL.md +95 -0
- package/skills-src/ewai-project-discovery/agents/openai.yaml +4 -0
- package/skills-src/ewai-project-discovery/references/discovery-contract.md +34 -0
- package/skills-src/ewai-prototype-iteration/SKILL.md +30 -0
- package/skills-src/ewai-prototype-iteration/agents/openai.yaml +4 -0
- package/skills-src/ewai-prototype-iteration/references/review-contract.md +49 -0
- package/skills-src/ewai-retro/SKILL.md +48 -0
- package/skills-src/ewai-retro/agents/openai.yaml +4 -0
- package/skills-src/ewai-retro/references/asset-routing.md +14 -0
- package/skills-src/ewai-rollout/SKILL.md +74 -0
- package/skills-src/ewai-rollout/agents/openai.yaml +4 -0
- package/skills-src/ewai-rollout/references/rollout-contract.md +74 -0
- package/skills-src/ewai-shape-intents/SKILL.md +84 -0
- package/skills-src/ewai-shape-intents/agents/openai.yaml +4 -0
- package/skills-src/ewai-shape-intents/references/intent-mapping-contract.md +109 -0
- package/skills-src/ewai-solution-readiness/SKILL.md +55 -0
- package/skills-src/ewai-solution-readiness/agents/openai.yaml +4 -0
- package/skills-src/ewai-standards-check/SKILL.md +93 -0
- package/skills-src/ewai-standards-check/agents/openai.yaml +4 -0
- package/skills-src/ewai-standards-check/references/report-contract.md +116 -0
- package/skills-src/ewai-test-scenarios/SKILL.md +94 -0
- package/skills-src/ewai-test-scenarios/agents/openai.yaml +4 -0
- package/skills-src/ewai-test-scenarios/references/scenario-contract.md +88 -0
- package/src/afk-worker.mjs +16 -0
- package/src/archaeology.mjs +1333 -0
- package/src/checkin.mjs +261 -0
- package/src/cli.mjs +2427 -0
- package/src/companion-guidance.mjs +257 -0
- package/src/companion-opening.mjs +62 -0
- package/src/companion.mjs +256 -0
- package/src/context.mjs +210 -0
- package/src/dashboard-preferences.mjs +80 -0
- package/src/delivery-artifacts.mjs +204 -0
- package/src/delivery-documents.mjs +248 -0
- package/src/delivery-gates.mjs +317 -0
- package/src/delivery.mjs +1433 -0
- package/src/design-system-application.mjs +291 -0
- package/src/design-system-authoring.mjs +101 -0
- package/src/design-systems.mjs +466 -0
- package/src/discovery.mjs +1314 -0
- package/src/error-reporting.mjs +323 -0
- package/src/evidence-depth.mjs +543 -0
- package/src/execution-state.mjs +243 -0
- package/src/install.mjs +166 -0
- package/src/intent-dependencies.mjs +117 -0
- package/src/intent-maps.mjs +402 -0
- package/src/intents.mjs +747 -0
- package/src/knowledge-proposals.mjs +717 -0
- package/src/launcher.mjs +51 -0
- package/src/meeting-evidence.mjs +703 -0
- package/src/network-rollout.mjs +386 -0
- package/src/organisation-blueprints.mjs +438 -0
- package/src/organisation-policies.mjs +448 -0
- package/src/packs.mjs +44 -0
- package/src/paths.mjs +62 -0
- package/src/persona-entitlements.mjs +438 -0
- package/src/persona-licence-config.mjs +98 -0
- package/src/persona-website-provider.mjs +134 -0
- package/src/persona-zip.mjs +87 -0
- package/src/personas.mjs +159 -0
- package/src/platform-metadata-analysis.mjs +314 -0
- package/src/policy-design-gates.mjs +623 -0
- package/src/policy-gate-integration.mjs +318 -0
- package/src/portfolio.mjs +509 -0
- package/src/power-platform-source-map.mjs +190 -0
- package/src/project.mjs +449 -0
- package/src/prototype-iterations.mjs +730 -0
- package/src/repository-source-map.mjs +603 -0
- package/src/runtime/afk-conductor.mjs +973 -0
- package/src/runtime/context-assembly.mjs +457 -0
- package/src/runtime/context-benchmarks.mjs +115 -0
- package/src/runtime/dashboard-actions.mjs +109 -0
- package/src/runtime/dashboard-handoffs.mjs +149 -0
- package/src/runtime/dashboard-server.mjs +1272 -0
- package/src/runtime/dashboard.mjs +197 -0
- package/src/runtime/database.mjs +789 -0
- package/src/runtime/error-reporting.mjs +581 -0
- package/src/runtime/evidence-depth-workspace.mjs +412 -0
- package/src/runtime/execution-leases.mjs +299 -0
- package/src/runtime/guided-discovery.mjs +350 -0
- package/src/runtime/guided-intents.mjs +517 -0
- package/src/runtime/impact-analysis.mjs +535 -0
- package/src/runtime/intents.mjs +222 -0
- package/src/runtime/knowledge.mjs +86 -0
- package/src/runtime/lifecycle-hooks.mjs +1239 -0
- package/src/runtime/mcp-config.mjs +110 -0
- package/src/runtime/mcp-server.mjs +1885 -0
- package/src/runtime/palace.mjs +362 -0
- package/src/runtime/paths.mjs +58 -0
- package/src/runtime/persona-engagement.mjs +255 -0
- package/src/runtime/phase-contributions.mjs +594 -0
- package/src/runtime/policy-workspace.mjs +170 -0
- package/src/runtime/prototype-iterations.mjs +235 -0
- package/src/runtime/provider-adapters.mjs +163 -0
- package/src/runtime/repository-index.mjs +838 -0
- package/src/runtime/runs.mjs +185 -0
- package/src/runtime/security-validation.mjs +1230 -0
- package/src/runtime/starter-materialisation.mjs +1155 -0
- package/src/runtime/team-hub-client.mjs +479 -0
- package/src/runtime/team-hub-database.mjs +288 -0
- package/src/runtime/team-hub-server.mjs +191 -0
- package/src/runtime/team-hub.mjs +110 -0
- package/src/runtime/tree-sitter-index.mjs +390 -0
- package/src/runtime/version.mjs +1 -0
- package/src/runtime/work.mjs +633 -0
- package/src/salesforce-source-map.mjs +212 -0
- package/src/security-validation-config.mjs +224 -0
- package/src/solution-readiness.mjs +620 -0
- package/src/starter-materialisation-contract.mjs +407 -0
- package/src/task-graph.mjs +544 -0
- package/src/team-hub-resources.mjs +239 -0
- package/src/team-hub.mjs +242 -0
- package/src/test-scenarios.mjs +622 -0
- package/src/validation-config.mjs +289 -0
- package/templates/SPECS/1.Scope/personas/registry.yaml +12 -0
- package/templates/SPECS/5.Strategy/patterns/context-packet.md +119 -0
- package/templates/SPECS/6.Build/_tracker-template.md +16 -0
- package/templates/SPECS/pipeline.yaml +62 -0
- package/templates/discovery-answers.yaml +86 -0
- package/templates/intent-body.md +21 -0
- 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,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,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
|
+
]
|