@entelligentsia/forgecli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +50 -38
  3. package/dist/extensions/forgecli/forge-commands.d.ts +21 -0
  4. package/dist/extensions/forgecli/forge-commands.js +141 -0
  5. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  6. package/dist/extensions/forgecli/forge-init.d.ts +26 -0
  7. package/dist/extensions/forgecli/forge-init.js +916 -0
  8. package/dist/extensions/forgecli/forge-init.js.map +1 -0
  9. package/dist/extensions/forgecli/health-check.d.ts +18 -0
  10. package/dist/extensions/forgecli/health-check.js +154 -0
  11. package/dist/extensions/forgecli/health-check.js.map +1 -0
  12. package/dist/extensions/forgecli/index.js +22 -9
  13. package/dist/extensions/forgecli/index.js.map +1 -1
  14. package/dist/extensions/forgecli/init-context.d.ts +99 -0
  15. package/dist/extensions/forgecli/init-context.js +163 -0
  16. package/dist/extensions/forgecli/init-context.js.map +1 -0
  17. package/dist/extensions/forgecli/init-progress.d.ts +39 -0
  18. package/dist/extensions/forgecli/init-progress.js +117 -0
  19. package/dist/extensions/forgecli/init-progress.js.map +1 -0
  20. package/dist/extensions/forgecli/refresh-kb-links.d.ts +18 -0
  21. package/dist/extensions/forgecli/refresh-kb-links.js +228 -0
  22. package/dist/extensions/forgecli/refresh-kb-links.js.map +1 -0
  23. package/dist/forge-payload/.base-pack/commands/approve.md +22 -0
  24. package/dist/forge-payload/.base-pack/commands/collate.md +22 -0
  25. package/dist/forge-payload/.base-pack/commands/commit.md +22 -0
  26. package/dist/forge-payload/.base-pack/commands/enhance.md +37 -0
  27. package/dist/forge-payload/.base-pack/commands/fix-bug.md +22 -0
  28. package/dist/forge-payload/.base-pack/commands/implement.md +22 -0
  29. package/dist/forge-payload/.base-pack/commands/plan.md +22 -0
  30. package/dist/forge-payload/.base-pack/commands/quiz-agent.md +22 -0
  31. package/dist/forge-payload/.base-pack/commands/retrospective.md +22 -0
  32. package/dist/forge-payload/.base-pack/commands/review-code.md +22 -0
  33. package/dist/forge-payload/.base-pack/commands/review-plan.md +22 -0
  34. package/dist/forge-payload/.base-pack/commands/run-sprint.md +22 -0
  35. package/dist/forge-payload/.base-pack/commands/run-task.md +22 -0
  36. package/dist/forge-payload/.base-pack/commands/sprint-intake.md +22 -0
  37. package/dist/forge-payload/.base-pack/commands/sprint-plan.md +22 -0
  38. package/dist/forge-payload/.base-pack/commands/validate.md +22 -0
  39. package/dist/forge-payload/.claude-plugin/plugin.json +15 -0
  40. package/dist/forge-payload/.init/discovery/discover-database.md +32 -0
  41. package/dist/forge-payload/.init/discovery/discover-processes.md +31 -0
  42. package/dist/forge-payload/.init/discovery/discover-routing.md +31 -0
  43. package/dist/forge-payload/.init/discovery/discover-stack.md +33 -0
  44. package/dist/forge-payload/.init/discovery/discover-testing.md +34 -0
  45. package/dist/forge-payload/.init/generation/generate-kb-doc.md +60 -0
  46. package/dist/forge-payload/.schemas/bug.schema.json +53 -0
  47. package/dist/forge-payload/.schemas/collation-state.schema.json +16 -0
  48. package/dist/forge-payload/.schemas/event-sidecar.schema.json +22 -0
  49. package/dist/forge-payload/.schemas/event.schema.json +32 -0
  50. package/dist/forge-payload/.schemas/feature.schema.json +22 -0
  51. package/dist/forge-payload/.schemas/progress-entry.schema.json +16 -0
  52. package/dist/forge-payload/.schemas/project-context.schema.json +167 -0
  53. package/dist/forge-payload/.schemas/project-overlay.schema.json +25 -0
  54. package/dist/forge-payload/.schemas/sprint.schema.json +27 -0
  55. package/dist/forge-payload/.schemas/structure-versions.schema.json +57 -0
  56. package/dist/forge-payload/.schemas/task.schema.json +58 -0
  57. package/dist/forge-payload/.tools/banners.cjs +435 -0
  58. package/dist/forge-payload/.tools/build-context-pack.cjs +290 -0
  59. package/dist/forge-payload/.tools/build-init-context.cjs +322 -0
  60. package/dist/forge-payload/.tools/build-overlay.cjs +326 -0
  61. package/dist/forge-payload/.tools/build-persona-pack.cjs +226 -0
  62. package/dist/forge-payload/.tools/collate.cjs +1041 -0
  63. package/dist/forge-payload/.tools/generation-manifest.cjs +311 -0
  64. package/dist/forge-payload/.tools/lib/forge-root.cjs +59 -0
  65. package/dist/forge-payload/.tools/lib/paths.cjs +29 -0
  66. package/dist/forge-payload/.tools/lib/pricing.cjs +165 -0
  67. package/dist/forge-payload/.tools/lib/project-root.cjs +32 -0
  68. package/dist/forge-payload/.tools/lib/result.js +40 -0
  69. package/dist/forge-payload/.tools/lib/validate.js +131 -0
  70. package/dist/forge-payload/.tools/manage-config.cjs +340 -0
  71. package/dist/forge-payload/.tools/manage-versions.cjs +365 -0
  72. package/dist/forge-payload/.tools/seed-store.cjs +237 -0
  73. package/dist/forge-payload/.tools/store-cli.cjs +1123 -0
  74. package/dist/forge-payload/.tools/store.cjs +315 -0
  75. package/dist/forge-payload/.tools/substitute-placeholders.cjs +625 -0
  76. package/dist/forge-payload/.tools/validate-store.cjs +522 -0
  77. package/package.json +1 -1
  78. /package/dist/forge-payload/{personas → .base-pack/personas}/architect.md +0 -0
  79. /package/dist/forge-payload/{personas → .base-pack/personas}/bug-fixer.md +0 -0
  80. /package/dist/forge-payload/{personas → .base-pack/personas}/collator.md +0 -0
  81. /package/dist/forge-payload/{personas → .base-pack/personas}/engineer.md +0 -0
  82. /package/dist/forge-payload/{personas → .base-pack/personas}/librarian.md +0 -0
  83. /package/dist/forge-payload/{personas → .base-pack/personas}/orchestrator.md +0 -0
  84. /package/dist/forge-payload/{personas → .base-pack/personas}/product-manager.md +0 -0
  85. /package/dist/forge-payload/{personas → .base-pack/personas}/qa-engineer.md +0 -0
  86. /package/dist/forge-payload/{personas → .base-pack/personas}/supervisor.md +0 -0
  87. /package/dist/forge-payload/{skills → .base-pack/skills}/architect-skills.md +0 -0
  88. /package/dist/forge-payload/{skills → .base-pack/skills}/bug-fixer-skills.md +0 -0
  89. /package/dist/forge-payload/{skills → .base-pack/skills}/collator-skills.md +0 -0
  90. /package/dist/forge-payload/{skills → .base-pack/skills}/engineer-skills.md +0 -0
  91. /package/dist/forge-payload/{skills → .base-pack/skills}/generic-skills.md +0 -0
  92. /package/dist/forge-payload/{skills → .base-pack/skills}/librarian-skills.md +0 -0
  93. /package/dist/forge-payload/{skills → .base-pack/skills}/qa-engineer-skills.md +0 -0
  94. /package/dist/forge-payload/{skills → .base-pack/skills}/store-custodian-skills.md +0 -0
  95. /package/dist/forge-payload/{skills → .base-pack/skills}/supervisor-skills.md +0 -0
  96. /package/dist/forge-payload/{templates → .base-pack/templates}/CODE_REVIEW_TEMPLATE.md +0 -0
  97. /package/dist/forge-payload/{templates → .base-pack/templates}/COST_REPORT_TEMPLATE.md +0 -0
  98. /package/dist/forge-payload/{templates → .base-pack/templates}/PLAN_REVIEW_TEMPLATE.md +0 -0
  99. /package/dist/forge-payload/{templates → .base-pack/templates}/PLAN_SUMMARY_TEMPLATE.json +0 -0
  100. /package/dist/forge-payload/{templates → .base-pack/templates}/PLAN_TEMPLATE.md +0 -0
  101. /package/dist/forge-payload/{templates → .base-pack/templates}/PROGRESS_TEMPLATE.md +0 -0
  102. /package/dist/forge-payload/{templates → .base-pack/templates}/RETROSPECTIVE_TEMPLATE.md +0 -0
  103. /package/dist/forge-payload/{templates → .base-pack/templates}/SPRINT_MANIFEST_TEMPLATE.md +0 -0
  104. /package/dist/forge-payload/{templates → .base-pack/templates}/SPRINT_REQUIREMENTS_TEMPLATE.md +0 -0
  105. /package/dist/forge-payload/{templates → .base-pack/templates}/TASK_PROMPT_TEMPLATE.md +0 -0
  106. /package/dist/forge-payload/{workflows → .base-pack/workflows}/_fragments/context-injection.md +0 -0
  107. /package/dist/forge-payload/{workflows → .base-pack/workflows}/_fragments/event-emission-schema.md +0 -0
  108. /package/dist/forge-payload/{workflows → .base-pack/workflows}/_fragments/finalize.md +0 -0
  109. /package/dist/forge-payload/{workflows → .base-pack/workflows}/_fragments/progress-reporting.md +0 -0
  110. /package/dist/forge-payload/{workflows → .base-pack/workflows}/architect_approve.md +0 -0
  111. /package/dist/forge-payload/{workflows → .base-pack/workflows}/architect_review_sprint_completion.md +0 -0
  112. /package/dist/forge-payload/{workflows → .base-pack/workflows}/architect_sprint_intake.md +0 -0
  113. /package/dist/forge-payload/{workflows → .base-pack/workflows}/architect_sprint_plan.md +0 -0
  114. /package/dist/forge-payload/{workflows → .base-pack/workflows}/collator_agent.md +0 -0
  115. /package/dist/forge-payload/{workflows → .base-pack/workflows}/commit_task.md +0 -0
  116. /package/dist/forge-payload/{workflows → .base-pack/workflows}/fix_bug.md +0 -0
  117. /package/dist/forge-payload/{workflows → .base-pack/workflows}/implement_plan.md +0 -0
  118. /package/dist/forge-payload/{workflows → .base-pack/workflows}/migrate_structural.md +0 -0
  119. /package/dist/forge-payload/{workflows → .base-pack/workflows}/orchestrate_task.md +0 -0
  120. /package/dist/forge-payload/{workflows → .base-pack/workflows}/plan_task.md +0 -0
  121. /package/dist/forge-payload/{workflows → .base-pack/workflows}/quiz_agent.md +0 -0
  122. /package/dist/forge-payload/{workflows → .base-pack/workflows}/review_code.md +0 -0
  123. /package/dist/forge-payload/{workflows → .base-pack/workflows}/review_plan.md +0 -0
  124. /package/dist/forge-payload/{workflows → .base-pack/workflows}/run_sprint.md +0 -0
  125. /package/dist/forge-payload/{workflows → .base-pack/workflows}/sprint_retrospective.md +0 -0
  126. /package/dist/forge-payload/{workflows → .base-pack/workflows}/update_implementation.md +0 -0
  127. /package/dist/forge-payload/{workflows → .base-pack/workflows}/update_plan.md +0 -0
  128. /package/dist/forge-payload/{workflows → .base-pack/workflows}/validate_task.md +0 -0
@@ -0,0 +1,167 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "project-context.schema.json",
4
+ "title": "Project Context",
5
+ "description": "Machine-readable bridge file produced by the Discover phase (Phase 2) of the Forge init flow. Governs project-context.json written by the Phase 2 Discover agent and read by the T03 substitution tool. Distinct from project-overlay.schema.json, which is a per-spawn runtime context overlay; this schema captures persistent project metadata discovered at init/migrate time.",
6
+ "type": "object",
7
+ "required": ["project"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "project": {
11
+ "type": "object",
12
+ "required": ["name", "prefix"],
13
+ "additionalProperties": false,
14
+ "properties": {
15
+ "name": { "type": "string", "description": "Human-readable project name" },
16
+ "prefix": { "type": "string", "description": "Short identifier prefix (e.g. MYAPP)" },
17
+ "description": { "type": "string", "description": "Brief project description", "default": "" },
18
+ "stack": {
19
+ "type": "array",
20
+ "items": { "type": "string" },
21
+ "description": "Technology stack in display order (e.g. [\"Express 4.22\", \"MongoDB 7\"])",
22
+ "default": []
23
+ },
24
+ "commands": {
25
+ "type": "object",
26
+ "additionalProperties": false,
27
+ "description": "Primary project lifecycle commands",
28
+ "properties": {
29
+ "test": { "type": "string", "default": "" },
30
+ "build": { "type": "string", "default": "" },
31
+ "deploy": { "type": "string", "default": "" }
32
+ }
33
+ }
34
+ }
35
+ },
36
+ "architecture": {
37
+ "type": "object",
38
+ "additionalProperties": false,
39
+ "properties": {
40
+ "frameworks": {
41
+ "type": "object",
42
+ "additionalProperties": false,
43
+ "x-placeholder": "STACK_SUMMARY",
44
+ "description": "Primary frameworks by tier. Rendered as 'backend + frontend + database' string by T03 substitution tool.",
45
+ "properties": {
46
+ "backend": { "type": "string", "default": "" },
47
+ "frontend": { "type": "string", "default": "" },
48
+ "database": { "type": "string", "default": "" }
49
+ }
50
+ },
51
+ "dataAccess": {
52
+ "type": "string",
53
+ "description": "Data access pattern (e.g. 'Mongoose ODM')",
54
+ "default": ""
55
+ },
56
+ "deployment": {
57
+ "type": "string",
58
+ "description": "Deployment target summary (e.g. 'AWS ECS')",
59
+ "default": ""
60
+ },
61
+ "keyDirectories": {
62
+ "type": "array",
63
+ "items": { "type": "string" },
64
+ "x-placeholder": "KEY_DIRECTORIES",
65
+ "description": "Key source directories joined to 'routes/, admin-app/, ...' by T03.",
66
+ "default": []
67
+ }
68
+ }
69
+ },
70
+ "entities": {
71
+ "type": "array",
72
+ "items": { "type": "string" },
73
+ "description": "Domain entity names (e.g. [\"User\", \"Order\", \"Product\"])",
74
+ "default": []
75
+ },
76
+ "conventions": {
77
+ "type": "object",
78
+ "additionalProperties": false,
79
+ "properties": {
80
+ "branching": {
81
+ "type": "string",
82
+ "x-placeholder": "BRANCHING_CONVENTION",
83
+ "description": "Branching strategy description (e.g. 'feature/TASK-ID-slug'). Direct string substitution by T03.",
84
+ "default": ""
85
+ },
86
+ "taskIdFormat": {
87
+ "type": "string",
88
+ "description": "Task ID format pattern (e.g. 'PROJ-###')",
89
+ "default": ""
90
+ }
91
+ }
92
+ },
93
+ "impactCategories": {
94
+ "type": "array",
95
+ "items": { "type": "string" },
96
+ "x-placeholder": "IMPACT_CATEGORIES",
97
+ "description": "Impact/risk category labels joined to comma-separated string by T03.",
98
+ "default": []
99
+ },
100
+ "technicalDebt": {
101
+ "type": "array",
102
+ "items": { "type": "string" },
103
+ "x-placeholder": "TECHNICAL_DEBT",
104
+ "description": "Known technical debt items joined to comma-separated string by T03.",
105
+ "default": []
106
+ },
107
+ "deployment": {
108
+ "type": "object",
109
+ "additionalProperties": false,
110
+ "properties": {
111
+ "environments": {
112
+ "type": "array",
113
+ "x-placeholder": "DEPLOYMENT_ENVIRONMENTS",
114
+ "description": "Deployment environment definitions rendered as a markdown table by T03.",
115
+ "items": {
116
+ "type": "object",
117
+ "additionalProperties": false,
118
+ "properties": {
119
+ "name": { "type": "string", "default": "" },
120
+ "frontend": { "type": "string", "default": "" },
121
+ "backend": { "type": "string", "default": "" },
122
+ "region": { "type": "string", "default": "" }
123
+ }
124
+ },
125
+ "default": []
126
+ },
127
+ "impactNotes": {
128
+ "type": "string",
129
+ "description": "Freeform deployment impact notes",
130
+ "default": ""
131
+ }
132
+ }
133
+ },
134
+ "verification": {
135
+ "type": "object",
136
+ "x-placeholder": "VERIFICATION_COMMANDS",
137
+ "additionalProperties": false,
138
+ "description": "Full verification command suite. Rendered as 'npm run type-check, npm test, npm run build' by T03.",
139
+ "properties": {
140
+ "typeCheck": { "type": "string", "default": "" },
141
+ "lint": { "type": "string", "default": "" },
142
+ "test": { "type": "string", "default": "" },
143
+ "build": { "type": "string", "default": "" },
144
+ "infraBuild": { "type": "string", "default": "" }
145
+ }
146
+ },
147
+ "skillWiring": {
148
+ "type": "array",
149
+ "x-placeholder": "SKILL_DIRECTIVES",
150
+ "description": "Skill-to-persona wiring. Rendered as 'skill → persona1, persona2' lines by T03. Mirrors config.json skillWiring so T03 has a single source.",
151
+ "items": {
152
+ "type": "object",
153
+ "additionalProperties": false,
154
+ "required": ["skill"],
155
+ "properties": {
156
+ "skill": { "type": "string" },
157
+ "personas": {
158
+ "type": "array",
159
+ "items": { "type": "string" },
160
+ "default": []
161
+ }
162
+ }
163
+ },
164
+ "default": []
165
+ }
166
+ }
167
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "project-overlay.schema.json",
4
+ "title": "Project Overlay",
5
+ "description": "Per-spawn context overlay materialized by the orchestrator. Budget: ≤1kB JSON.",
6
+ "version": "1.0.0",
7
+ "type": "object",
8
+ "required": ["projectPrefix", "storeRoot", "indexSlice"],
9
+ "additionalProperties": false,
10
+ "properties": {
11
+ "version": { "type": "string", "description": "Schema version string. Read by manage-versions.cjs to populate overlayToolVersion at init time.", "default": "1.0.0" },
12
+ "projectPrefix": { "type": "string", "pattern": "^[A-Z][A-Z0-9-]+$" },
13
+ "sprintId": { "type": "string" },
14
+ "sprintDir": { "type": "string" },
15
+ "taskId": { "type": "string" },
16
+ "taskDir": { "type": "string" },
17
+ "taskStatus": { "type": "string" },
18
+ "bugId": { "type": "string" },
19
+ "bugDir": { "type": "string" },
20
+ "storeRoot": { "type": "string" },
21
+ "indexSlice": { "type": "string", "maxLength": 800 },
22
+ "toolCommands": { "type": "object" },
23
+ "lastPhaseSummary": { "type": "object" }
24
+ }
25
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "forge/sprint.schema.json",
4
+ "title": "Sprint",
5
+ "type": "object",
6
+ "required": ["sprintId", "title", "status", "taskIds", "createdAt"],
7
+ "properties": {
8
+ "sprintId": { "type": "string" },
9
+ "feature_id": { "type": ["string", "null"] },
10
+ "title": { "type": "string" },
11
+ "description": { "type": "string" },
12
+ "goal": { "type": "string" },
13
+ "status": {
14
+ "type": "string",
15
+ "enum": ["planning", "active", "completed", "retrospective-done", "blocked", "partially-completed", "abandoned"]
16
+ },
17
+ "taskIds": { "type": "array", "items": { "type": "string" } },
18
+ "dependencies": { "type": "object" },
19
+ "executionMode": { "type": "string", "enum": ["sequential", "wave-parallel", "full-parallel"] },
20
+ "createdAt": { "type": "string", "format": "date-time" },
21
+ "completedAt": { "type": "string", "format": "date-time" },
22
+ "path": { "type": "string" },
23
+ "humanEstimates": { "type": "object" },
24
+ "features": { "type": "array", "items": { "type": "string" } }
25
+ },
26
+ "additionalProperties": false
27
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "structure-versions.schema.json",
4
+ "title": "Structure Versions",
5
+ "description": "Tracks versioned structural snapshots of .forge/ elements. Lives at .forge/structure-versions.json (NOT under .forge/store/). Composition model: Working Artifact = base@pluginVersion + snapshot@currentSnapshot + user_enhancements. Snapshot-array invariant: snapshots is ordered ascending by index; currentSnapshot always equals snapshots[snapshots.length - 1].index. Idempotency: manage-versions.cjs init is a no-op if the file already exists.",
6
+ "type": "object",
7
+ "required": ["basePackVersion", "overlayToolVersion", "currentSnapshot", "snapshots"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "basePackVersion": {
11
+ "type": "string",
12
+ "description": "Plugin version at materialization time. Ties the snapshot set to a specific base-pack release."
13
+ },
14
+ "overlayToolVersion": {
15
+ "type": "string",
16
+ "description": "Version of project-overlay.schema.json at materialization time. Independent of structural drift; lets /forge:update detect runtime-contract drift."
17
+ },
18
+ "currentSnapshot": {
19
+ "type": "integer",
20
+ "minimum": 0,
21
+ "description": "Index of the snapshot that produced the current .forge/ working set. Always equals snapshots[snapshots.length - 1].index."
22
+ },
23
+ "snapshots": {
24
+ "type": "array",
25
+ "description": "Ordered list of snapshots, ascending by index. Index 0 is always the base-pack snapshot.",
26
+ "items": {
27
+ "type": "object",
28
+ "required": ["index", "createdAt", "source"],
29
+ "additionalProperties": false,
30
+ "properties": {
31
+ "index": {
32
+ "type": "integer",
33
+ "minimum": 0
34
+ },
35
+ "createdAt": {
36
+ "type": "string",
37
+ "format": "date-time"
38
+ },
39
+ "source": {
40
+ "type": "string",
41
+ "description": "Origin of the snapshot: 'base-pack', 'post-init', 'post-sprint:SPRINT_ID', 'manual'"
42
+ },
43
+ "enhancedElements": {
44
+ "type": "array",
45
+ "items": { "type": "string" },
46
+ "description": "Relative paths of .forge/ elements modified in this snapshot. Empty for snapshot 0.",
47
+ "default": []
48
+ },
49
+ "archivePath": {
50
+ "type": ["string", "null"],
51
+ "description": "Path to the archive directory for this snapshot, e.g. .forge/archive/snap-1/. Null for snapshot 0 (nothing to archive before first enhancement)."
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "forge/task.schema.json",
4
+ "title": "Task",
5
+ "type": "object",
6
+ "required": ["taskId", "sprintId", "title", "status", "path"],
7
+ "properties": {
8
+ "taskId": { "type": "string" },
9
+ "feature_id": { "type": ["string", "null"] },
10
+ "sprintId": { "type": "string" },
11
+ "title": { "type": "string" },
12
+ "description": { "type": "string" },
13
+ "status": {
14
+ "type": "string",
15
+ "enum": [
16
+ "draft", "planned", "plan-approved", "implementing",
17
+ "implemented", "review-approved", "approved", "committed",
18
+ "plan-revision-required", "code-revision-required", "blocked", "escalated", "abandoned"
19
+ ]
20
+ },
21
+ "path": { "type": "string" },
22
+ "estimate": { "type": "string", "enum": ["S", "M", "L", "XL"] },
23
+ "dependencies": { "type": "array", "items": { "type": "string" } },
24
+ "knowledgeUpdates": { "type": "array" },
25
+ "planIterations": { "type": "integer", "minimum": 0 },
26
+ "codeReviewIterations": { "type": "integer", "minimum": 0 },
27
+ "assignedModel": { "type": "string" },
28
+ "pipeline": { "type": "string" },
29
+ "summaries": {
30
+ "type": "object",
31
+ "description": "Terse structured summaries of phase artifacts. Optional; full artifacts on disk remain authoritative.",
32
+ "properties": {
33
+ "plan": { "$ref": "#/$defs/phaseSummary" },
34
+ "review_plan": { "$ref": "#/$defs/phaseSummary" },
35
+ "implementation": { "$ref": "#/$defs/phaseSummary" },
36
+ "code_review": { "$ref": "#/$defs/phaseSummary" },
37
+ "validation": { "$ref": "#/$defs/phaseSummary" }
38
+ },
39
+ "additionalProperties": false
40
+ }
41
+ },
42
+ "additionalProperties": false,
43
+ "$defs": {
44
+ "phaseSummary": {
45
+ "type": "object",
46
+ "required": ["objective", "written_at"],
47
+ "properties": {
48
+ "objective": { "type": "string", "maxLength": 280 },
49
+ "key_changes": { "type": "array", "items": { "type": "string", "maxLength": 200 }, "maxItems": 12 },
50
+ "findings": { "type": "array", "items": { "type": "string", "maxLength": 200 }, "maxItems": 12 },
51
+ "verdict": { "type": "string", "enum": ["approved", "revision", "n/a"] },
52
+ "written_at": { "type": "string", "format": "date-time" },
53
+ "artifact_ref":{ "type": "string", "description": "Relative path to the full artifact" }
54
+ },
55
+ "additionalProperties": false
56
+ }
57
+ }
58
+ }