@smartmemory/compose 0.1.28-beta → 0.1.30-beta
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/README.md +1 -0
- package/bin/compose.js +27 -0
- package/contracts/goal-result.json +128 -0
- package/contracts/judge-result.json +152 -0
- package/contracts/review-result.json +2 -2
- package/contracts/task-result.json +60 -0
- package/contracts/taskgraph-gsd.json +94 -0
- package/dist/assets/App-CB0U2nlm.js +768 -0
- package/dist/assets/arc-Ib57etRP.js +1 -0
- package/dist/assets/architectureDiagram-3BPJPVTR-3N4ul7Lp.js +36 -0
- package/dist/assets/blockDiagram-GPEHLZMM-iPkpmFIG.js +132 -0
- package/dist/assets/{c4Diagram-AHTNJAMY-CqzLpnSp.js → c4Diagram-AAUBKEIU-BCKTL1Dk.js} +3 -3
- package/dist/assets/channel-Bd09RsPV.js +1 -0
- package/dist/assets/chunk-2J33WTMH-Daqe8HpE.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-D27n9FGy.js → chunk-4BX2VUAB-BjnNKI2i.js} +1 -1
- package/dist/assets/chunk-55IACEB6-DRsniyrS.js +1 -0
- package/dist/assets/chunk-727SXJPM-BiShnVey.js +206 -0
- package/dist/assets/chunk-AQP2D5EJ-Dd9CkPhT.js +231 -0
- package/dist/assets/{chunk-FMBD7UC4-B-C0Qn-h.js → chunk-FMBD7UC4-CrED-oPn.js} +1 -1
- package/dist/assets/chunk-ND2GUHAM-dk4lChMO.js +1 -0
- package/dist/assets/{chunk-QZHKN3VN-DV2v0Qii.js → chunk-QZHKN3VN-a1SBIOVJ.js} +1 -1
- package/dist/assets/classDiagram-4FO5ZUOK-D_vAH5lP.js +1 -0
- package/dist/assets/classDiagram-v2-Q7XG4LA2-D_vAH5lP.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-CXtbzn7R.js +1 -0
- package/dist/assets/dagre-BM42HDAG-By5-LlQC.js +4 -0
- package/dist/assets/{defaultLocale-DX6XiGOO.js → defaultLocale-CrowFXzY.js} +1 -1
- package/dist/assets/diagram-2AECGRRQ-BWFSnxuX.js +43 -0
- package/dist/assets/diagram-5GNKFQAL-DtyjjvQp.js +10 -0
- package/dist/assets/diagram-KO2AKTUF-D2Y15IJ0.js +3 -0
- package/dist/assets/diagram-LMA3HP47-CE-THjCD.js +24 -0
- package/dist/assets/diagram-OG6HWLK6-Blju-noD.js +24 -0
- package/dist/assets/{erDiagram-SMLLAGMA-B1zsRPqn.js → erDiagram-TEJ5UH35-DI6ayS27.js} +1 -1
- package/dist/assets/{flowDiagram-DWJPFMVM-AvlZ6pTE.js → flowDiagram-I6XJVG4X-BQf0uOzY.js} +4 -4
- package/dist/assets/ganttDiagram-6RSMTGT7-_upG_Ajl.js +292 -0
- package/dist/assets/gitGraphDiagram-PVQCEYII-5sVMQhO3.js +106 -0
- package/dist/assets/graph-BEmEBUp_.js +1 -0
- package/dist/assets/{graph-CfEl_ohV.js → graph-DPbJeZyN.js} +2 -2
- package/dist/assets/{index-CF7jc-By.js → index-DLF-s4tP.js} +3 -3
- package/dist/assets/infoDiagram-5YYISTIA-4Hpw9ky_.js +2 -0
- package/dist/assets/{ishikawaDiagram-UXIWVN3A-COnZHJuM.js → ishikawaDiagram-YF4QCWOH-CuHQNWRf.js} +5 -5
- package/dist/assets/{journeyDiagram-VCZTEJTY-Bsssj2jr.js → journeyDiagram-JHISSGLW-PFwOct4G.js} +1 -1
- package/dist/assets/{kanban-definition-6JOO6SKY-1o5Em0Ia.js → kanban-definition-UN3LZRKU-M70jtg2M.js} +7 -7
- package/dist/assets/katex-CQk2-UhE.js +257 -0
- package/dist/assets/layout-Bw0msyOw.js +1 -0
- package/dist/assets/linear-BkYLp90p.js +1 -0
- package/dist/assets/{mindmap-definition-QFDTVHPH-79V6zmXV.js → mindmap-definition-RKZ34NQL-1KQv07E1.js} +10 -10
- package/dist/assets/{mobile-BOyZ87uL.js → mobile-CsuriFuT.js} +3 -3
- package/dist/assets/pieDiagram-4H26LBE5-B8lh9yMA.js +30 -0
- package/dist/assets/quadrantDiagram-W4KKPZXB-DUPV_-qJ.js +7 -0
- package/dist/assets/{requirementDiagram-MS252O5E-9YEiDjlT.js → requirementDiagram-4Y6WPE33-ChYWhFld.js} +3 -3
- package/dist/assets/sankeyDiagram-5OEKKPKP-HsjvNkHR.js +40 -0
- package/dist/assets/sequenceDiagram-3UESZ5HK-CR5iTMTw.js +162 -0
- package/dist/assets/stateDiagram-AJRCARHV-BwMjQVHC.js +1 -0
- package/dist/assets/stateDiagram-v2-BHNVJYJU-X1hOVHVI.js +1 -0
- package/dist/assets/{timeline-definition-GMOUNBTQ-DGpUOjs3.js → timeline-definition-PNZ67QCA-BI88FufN.js} +3 -3
- package/dist/assets/vennDiagram-CIIHVFJN-BKg5ydB8.js +34 -0
- package/dist/assets/wardley-L42UT6IY-CtYx0E7z.js +173 -0
- package/dist/assets/wardleyDiagram-YWT4CUSO-CAColVNQ.js +78 -0
- package/dist/assets/{xychartDiagram-5P7HB3ND-C6hwimqo.js → xychartDiagram-2RQKCTM6-CJqak-xY.js} +4 -4
- package/dist/index.html +2 -2
- package/lib/gsd-blackboard.js +135 -0
- package/lib/gsd-decompose-enrich.js +171 -0
- package/lib/gsd-prompt.js +82 -0
- package/lib/gsd.js +364 -0
- package/package.json +1 -1
- package/pipelines/gsd.stratum.yaml +141 -0
- package/dist/assets/App-Dj7XWWxC.js +0 -768
- package/dist/assets/_baseUniq-tNOA7dYy.js +0 -1
- package/dist/assets/arc-BAmAJ19S.js +0 -1
- package/dist/assets/architectureDiagram-Q4EWVU46-BPWGVKHW.js +0 -36
- package/dist/assets/blockDiagram-DXYQGD6D-CVlFbWKF.js +0 -132
- package/dist/assets/channel-Ddcaj0fR.js +0 -1
- package/dist/assets/chunk-4TB4RGXK-BNXf8s1x.js +0 -206
- package/dist/assets/chunk-55IACEB6-kGd4Gwx6.js +0 -1
- package/dist/assets/chunk-EDXVE4YY-Ci9gWeIv.js +0 -1
- package/dist/assets/chunk-OYMX7WX6-CosYsxuv.js +0 -231
- package/dist/assets/chunk-YZCP3GAM-BlgKQRCn.js +0 -1
- package/dist/assets/classDiagram-6PBFFD2Q-DfGxrNIN.js +0 -1
- package/dist/assets/classDiagram-v2-HSJHXN6E-DfGxrNIN.js +0 -1
- package/dist/assets/clone-DVujR_lO.js +0 -1
- package/dist/assets/cose-bilkent-S5V4N54A-CSkzhGHO.js +0 -1
- package/dist/assets/dagre-KV5264BT-zp76534d.js +0 -4
- package/dist/assets/diagram-5BDNPKRD-CAsORZBT.js +0 -10
- package/dist/assets/diagram-G4DWMVQ6-Da2z6fvR.js +0 -24
- package/dist/assets/diagram-MMDJMWI5-R9NZEWPF.js +0 -43
- package/dist/assets/diagram-TYMM5635-DXabRna8.js +0 -24
- package/dist/assets/ganttDiagram-T4ZO3ILL-Bnj-jTcM.js +0 -292
- package/dist/assets/gitGraphDiagram-UUTBAWPF-82ysfuqG.js +0 -106
- package/dist/assets/graph-6nRhlKgL.js +0 -1
- package/dist/assets/infoDiagram-42DDH7IO-DSGEEGYr.js +0 -2
- package/dist/assets/katex-DkKDou_j.js +0 -257
- package/dist/assets/layout-C6Mitjz_.js +0 -1
- package/dist/assets/linear-DoGSpDWQ.js +0 -1
- package/dist/assets/min-BqH4I4oK.js +0 -1
- package/dist/assets/pieDiagram-DEJITSTG-nXz4HiT6.js +0 -30
- package/dist/assets/quadrantDiagram-34T5L4WZ-BuwKLcii.js +0 -7
- package/dist/assets/sankeyDiagram-XADWPNL6-gX8lhWn5.js +0 -10
- package/dist/assets/sequenceDiagram-FGHM5R23-CkssrD67.js +0 -157
- package/dist/assets/stateDiagram-FHFEXIEX-DPmEy2eV.js +0 -1
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-BGZzYkLq.js +0 -1
- package/dist/assets/vennDiagram-DHZGUBPP-CIvkd661.js +0 -34
- package/dist/assets/wardley-RL74JXVD-BqRTpa3K.js +0 -162
- package/dist/assets/wardleyDiagram-NUSXRM2D-B93hOd7R.js +0 -20
package/README.md
CHANGED
|
@@ -95,6 +95,7 @@ Topic-scoped reference:
|
|
|
95
95
|
- [docs/configuration.md](docs/configuration.md) — `.compose/*.json`, pipeline specs, `.mcp.json`, `ROADMAP.md`, environment variables.
|
|
96
96
|
- [docs/mcp.md](docs/mcp.md) — MCP server tool list (vision, lifecycle, gates, iteration loops).
|
|
97
97
|
- [docs/examples.md](docs/examples.md) — worked workflows and the full `compose pipeline` editing reference.
|
|
98
|
+
- [docs/command-flows.md](docs/command-flows.md) — mermaid flow diagrams for every CLI verb (`build`, `fix`, `gsd`, `new`, `import`, `feature`, `roadmap`, `triage`, `qa-scope`, `pipeline`, `init`/`setup`/`update`/`doctor`).
|
|
98
99
|
|
|
99
100
|
### Specs and design
|
|
100
101
|
|
package/bin/compose.js
CHANGED
|
@@ -112,6 +112,7 @@ if (!cmd || cmd === '--help' || cmd === '-h') {
|
|
|
112
112
|
console.log(' feature Add a single feature (folder, design seed, ROADMAP entry)')
|
|
113
113
|
console.log(' build Run a feature through the headless lifecycle')
|
|
114
114
|
console.log(' fix Run a bug through the headless bug-fix lifecycle')
|
|
115
|
+
console.log(' gsd Per-task fresh-context dispatch from existing blueprint+Boundary Map')
|
|
115
116
|
console.log(' pipeline View and edit the build pipeline')
|
|
116
117
|
console.log(' roadmap Show roadmap status and next buildable features')
|
|
117
118
|
console.log(' roadmap generate Regenerate ROADMAP.md from feature.json files')
|
|
@@ -1913,6 +1914,32 @@ if (cmd === 'build') {
|
|
|
1913
1914
|
process.exit(1)
|
|
1914
1915
|
})
|
|
1915
1916
|
})
|
|
1917
|
+
} else if (cmd === 'gsd') {
|
|
1918
|
+
// compose gsd <feature-code> — runs the per-task fresh-context dispatch
|
|
1919
|
+
// pipeline (pipelines/gsd.stratum.yaml). Hard-requires existing
|
|
1920
|
+
// docs/features/<code>/blueprint.md with a parseable Boundary Map.
|
|
1921
|
+
const gsdCode = args.find(a => !a.startsWith('-'))
|
|
1922
|
+
if (!gsdCode) {
|
|
1923
|
+
console.error('Usage: compose gsd <feature-code>')
|
|
1924
|
+
console.error('')
|
|
1925
|
+
console.error('Runs the per-task fresh-context dispatch pipeline (COMP-GSD-2).')
|
|
1926
|
+
console.error('Hard-requires docs/features/<code>/blueprint.md with a valid Boundary Map.')
|
|
1927
|
+
console.error('')
|
|
1928
|
+
console.error('Options:')
|
|
1929
|
+
console.error(' --cwd <path> Working directory (defaults to current)')
|
|
1930
|
+
process.exit(1)
|
|
1931
|
+
}
|
|
1932
|
+
const { root: gsdCwd } = resolveCwdWithWorkspace(args)
|
|
1933
|
+
const cwdIdx = args.indexOf('--cwd')
|
|
1934
|
+
const gsdAgentCwd = cwdIdx !== -1 ? resolve(args[cwdIdx + 1]) : gsdCwd
|
|
1935
|
+
const { runGsd } = await import('../lib/gsd.js')
|
|
1936
|
+
try {
|
|
1937
|
+
const result = await runGsd(gsdCode, { cwd: gsdAgentCwd })
|
|
1938
|
+
console.log(`gsd complete: ${result.blackboardEntries} task results captured.`)
|
|
1939
|
+
} catch (err) {
|
|
1940
|
+
console.error(`gsd failed: ${err.message}`)
|
|
1941
|
+
process.exit(1)
|
|
1942
|
+
}
|
|
1916
1943
|
} else if (cmd === 'triage') {
|
|
1917
1944
|
const triageCode = args.find(a => !a.startsWith('-'))
|
|
1918
1945
|
if (!triageCode) {
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "goal-result.json",
|
|
4
|
+
"_source": "docs/features/STRAT-GOAL/design.md",
|
|
5
|
+
"_roadmap": "STRAT-GOAL",
|
|
6
|
+
"title": "GoalResult",
|
|
7
|
+
"description": "Output of stratum_goal — superset of JudgeResult (judge-result.json). Adds goal-orchestrator top-level fields: goal_id, goal_version, mode, status, turns_run, worker_runs, round, predicate_outcomes, and the optional would_have_decided. Invariant inherited: clean == met.",
|
|
8
|
+
"allOf": [
|
|
9
|
+
{ "$ref": "judge-result.json" },
|
|
10
|
+
{
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": [
|
|
13
|
+
"goal_id",
|
|
14
|
+
"goal_version",
|
|
15
|
+
"mode",
|
|
16
|
+
"status",
|
|
17
|
+
"turns_run",
|
|
18
|
+
"worker_runs",
|
|
19
|
+
"round",
|
|
20
|
+
"predicate_outcomes"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"goal_id": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Caller-supplied stable goal identifier. Immutable after first call."
|
|
26
|
+
},
|
|
27
|
+
"goal_version": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"const": "1.0",
|
|
30
|
+
"description": "Schema version for forward compatibility."
|
|
31
|
+
},
|
|
32
|
+
"mode": {
|
|
33
|
+
"enum": ["shadow", "advisory", "autonomous"],
|
|
34
|
+
"description": "Orchestration mode for this goal."
|
|
35
|
+
},
|
|
36
|
+
"status": {
|
|
37
|
+
"enum": [
|
|
38
|
+
"met",
|
|
39
|
+
"not_met",
|
|
40
|
+
"awaiting_decision",
|
|
41
|
+
"budget_exhausted",
|
|
42
|
+
"killed",
|
|
43
|
+
"in_progress"
|
|
44
|
+
],
|
|
45
|
+
"description": "Current goal status. Derived from FlowState on every read — not a sticky sentinel. 'awaiting_decision' means a met claim is pending human review (advisory / non-whitelisted autonomous class). 'budget_exhausted' means max_turns reached before all predicates met. 'in_progress' is emitted only by stratum_goal_status for an in-flight goal that has not yet reached a terminal step or awaiting_decision — it is never produced by the orchestrator's GoalResult."
|
|
46
|
+
},
|
|
47
|
+
"turns_run": {
|
|
48
|
+
"type": "integer",
|
|
49
|
+
"minimum": 0,
|
|
50
|
+
"description": "Total number of judge-evaluated turns (worker-dispatch failures that never reached the judge are not counted)."
|
|
51
|
+
},
|
|
52
|
+
"worker_runs": {
|
|
53
|
+
"type": "array",
|
|
54
|
+
"description": "Per-turn worker dispatch record. Length may exceed turns_run when worker failures occurred before a judge call.",
|
|
55
|
+
"items": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"required": ["turn", "agent_correlation_id", "duration_ms"],
|
|
58
|
+
"properties": {
|
|
59
|
+
"turn": { "type": "integer", "minimum": 1 },
|
|
60
|
+
"agent_correlation_id": { "type": "string" },
|
|
61
|
+
"duration_ms": { "type": "integer", "minimum": 0 }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"round": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"minimum": 0,
|
|
68
|
+
"description": "Current synthetic-flow round index. Used to address the goal_decision gate step as (goal_id, 'goal_decision')."
|
|
69
|
+
},
|
|
70
|
+
"predicate_outcomes": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"description": "Per-predicate outcome after autonomy partition. One entry per predicate in the goal's predicate list. MAY be empty for zero-turn results (e.g. budget exhausted before any judge call).",
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "object",
|
|
75
|
+
"required": [
|
|
76
|
+
"id",
|
|
77
|
+
"type",
|
|
78
|
+
"verdict",
|
|
79
|
+
"confidence",
|
|
80
|
+
"applied_gate",
|
|
81
|
+
"judge_verdict",
|
|
82
|
+
"bound_autonomously",
|
|
83
|
+
"awaiting_human"
|
|
84
|
+
],
|
|
85
|
+
"properties": {
|
|
86
|
+
"id": { "type": "string" },
|
|
87
|
+
"type": {
|
|
88
|
+
"enum": ["deterministic", "verified", "judged"],
|
|
89
|
+
"description": "Predicate type — determines autonomy eligibility."
|
|
90
|
+
},
|
|
91
|
+
"verdict": {
|
|
92
|
+
"enum": ["met", "not_met", "ambiguous"],
|
|
93
|
+
"description": "Post-normalization verdict — same as JudgeResult.predicates[].verdict."
|
|
94
|
+
},
|
|
95
|
+
"confidence": {
|
|
96
|
+
"type": "integer",
|
|
97
|
+
"minimum": 1,
|
|
98
|
+
"maximum": 10
|
|
99
|
+
},
|
|
100
|
+
"applied_gate": {
|
|
101
|
+
"type": "integer",
|
|
102
|
+
"minimum": 1,
|
|
103
|
+
"maximum": 10
|
|
104
|
+
},
|
|
105
|
+
"judge_verdict": {
|
|
106
|
+
"enum": ["met", "not_met", "ambiguous"],
|
|
107
|
+
"description": "Raw kernel verdict before autonomy partition (same as verdict in v1; separate field reserved for v2 mixed-mode where autonomy can override)."
|
|
108
|
+
},
|
|
109
|
+
"bound_autonomously": {
|
|
110
|
+
"type": "boolean",
|
|
111
|
+
"description": "True iff this predicate class was on the autonomy allow-list AND the verdict was met. Only ever true in autonomous mode."
|
|
112
|
+
},
|
|
113
|
+
"awaiting_human": {
|
|
114
|
+
"type": "boolean",
|
|
115
|
+
"description": "True iff verdict was met but this predicate class is NOT on the autonomy allow-list (advisory mode, or autonomous mode with non-whitelisted class). The goal pauses for human review."
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"additionalProperties": false
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"would_have_decided": {
|
|
122
|
+
"enum": ["met", "not_met", "ambiguous"],
|
|
123
|
+
"description": "Shadow-mode only. Reflects what the loop would have decided if it were binding. Derived from the last turn's overall verdict. Present iff mode == 'shadow' AND at least one judge-evaluated turn ran. Omitted in the zero-turn edge case (e.g. all worker failures consumed budget)."
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "judge-result.json",
|
|
4
|
+
"_source": "docs/features/STRAT-JUDGE/design.md",
|
|
5
|
+
"_roadmap": "STRAT-JUDGE",
|
|
6
|
+
"title": "JudgeResult",
|
|
7
|
+
"description": "Output of stratum_judge — strict superset of CrossModelReviewResult. Adds judge-specific top-level fields (met, stakes, predicates, tier_disagreements, budget_consumed, judge_kernel_meta); inherits findings/clean/consensus/claude_only/codex_only/meta/summary unchanged. Invariant: clean == met. Findings are emitted only for not_met or ambiguous predicates; met predicates contribute zero findings.",
|
|
8
|
+
"allOf": [
|
|
9
|
+
{ "$ref": "cross-model-review-result.json" },
|
|
10
|
+
{
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": [
|
|
13
|
+
"judge_version",
|
|
14
|
+
"met",
|
|
15
|
+
"stakes",
|
|
16
|
+
"predicates",
|
|
17
|
+
"budget_consumed",
|
|
18
|
+
"judge_kernel_meta"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"judge_version": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"const": "1.0",
|
|
24
|
+
"description": "Schema version for forward compatibility."
|
|
25
|
+
},
|
|
26
|
+
"met": {
|
|
27
|
+
"type": "boolean",
|
|
28
|
+
"description": "Top-level goal verdict. Defined as all(p.verdict == 'met' for p in predicates) after per-predicate normalization. Identical to inherited `clean` by invariant."
|
|
29
|
+
},
|
|
30
|
+
"stakes": {
|
|
31
|
+
"enum": ["cheap", "default", "paranoid"],
|
|
32
|
+
"description": "Depth class set by caller. v1: cheap (T1 only), default (T1+T2). paranoid raises StakesNotAvailableError until v2."
|
|
33
|
+
},
|
|
34
|
+
"predicates": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"description": "Per-predicate verdicts. MAY be empty for zero-turn results (e.g. budget exhausted before any judge call). Non-empty results are validated at the kernel boundary (EmptyPredicateListError) to prevent vacuous-pass gate bypass.",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"required": [
|
|
40
|
+
"id",
|
|
41
|
+
"type",
|
|
42
|
+
"statement",
|
|
43
|
+
"verdict",
|
|
44
|
+
"confidence",
|
|
45
|
+
"applied_gate",
|
|
46
|
+
"evidence",
|
|
47
|
+
"tier_history"
|
|
48
|
+
],
|
|
49
|
+
"properties": {
|
|
50
|
+
"id": { "type": "string" },
|
|
51
|
+
"type": {
|
|
52
|
+
"enum": ["deterministic", "verified", "judged"],
|
|
53
|
+
"description": "Predicate type sets the tier ceiling. deterministic = T1 only. verified = T2. judged = T3 in v2, downgraded to T2 in v1."
|
|
54
|
+
},
|
|
55
|
+
"statement": { "type": "string" },
|
|
56
|
+
"verdict": {
|
|
57
|
+
"enum": ["met", "not_met", "ambiguous"],
|
|
58
|
+
"description": "Post-normalization verdict. A raw 'met' with confidence < applied_gate is downgraded to 'ambiguous' before this is written."
|
|
59
|
+
},
|
|
60
|
+
"confidence": { "type": "integer", "minimum": 1, "maximum": 10 },
|
|
61
|
+
"applied_gate": {
|
|
62
|
+
"type": "integer",
|
|
63
|
+
"minimum": 1,
|
|
64
|
+
"maximum": 10,
|
|
65
|
+
"description": "Per-predicate confidence threshold. Defaults to 7 (mirrors review-finding convention)."
|
|
66
|
+
},
|
|
67
|
+
"evidence": {
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"required": ["source", "quote", "tier"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"source": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"pattern": "^(artifacts|modified)/[^:]+:[0-9]+$",
|
|
76
|
+
"description": "Canonical citation format <bucket>/<path>:<line>. bucket must be 'artifacts' or 'modified'. Validated at the kernel boundary; path must resolve under the current turn's staging tree."
|
|
77
|
+
},
|
|
78
|
+
"quote": { "type": "string" },
|
|
79
|
+
"tier": { "enum": ["T1", "T1.5", "T2", "T3", "T4"] }
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"tier_history": {
|
|
84
|
+
"type": "array",
|
|
85
|
+
"items": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"required": ["tier", "verdict", "confidence", "reason"],
|
|
88
|
+
"properties": {
|
|
89
|
+
"tier": { "enum": ["T1", "T1.5", "T2", "T3", "T4"] },
|
|
90
|
+
"verdict": { "enum": ["met", "not_met", "ambiguous", "n/a"] },
|
|
91
|
+
"confidence": {
|
|
92
|
+
"type": ["integer", "null"],
|
|
93
|
+
"minimum": 1,
|
|
94
|
+
"maximum": 10,
|
|
95
|
+
"description": "Null for T1 'n/a' verdicts (no LLM tier ran)."
|
|
96
|
+
},
|
|
97
|
+
"reason": { "type": "string" }
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"tier_disagreements": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"description": "Cross-tier disagreements within a single judge call. Empty in v1 (single-tier-per-predicate after T1). Reserved for v2+ T2/T3 quorum resolution.",
|
|
107
|
+
"items": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"required": ["predicate", "tiers", "resolution"],
|
|
110
|
+
"properties": {
|
|
111
|
+
"predicate": { "type": "string" },
|
|
112
|
+
"tiers": { "type": "array", "items": { "type": "string" } },
|
|
113
|
+
"resolution": { "type": "string" }
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"budget_consumed": {
|
|
118
|
+
"type": "object",
|
|
119
|
+
"required": ["turns", "dollars", "wall_clock_s"],
|
|
120
|
+
"properties": {
|
|
121
|
+
"turns": { "type": "integer", "minimum": 0 },
|
|
122
|
+
"dollars": {
|
|
123
|
+
"type": "number",
|
|
124
|
+
"minimum": 0,
|
|
125
|
+
"description": "Recorded but NOT enforced in v1 (no token-cost accounting yet)."
|
|
126
|
+
},
|
|
127
|
+
"wall_clock_s": { "type": "number", "minimum": 0 }
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"judge_kernel_meta": {
|
|
131
|
+
"type": "object",
|
|
132
|
+
"required": ["decomposer_mode"],
|
|
133
|
+
"properties": {
|
|
134
|
+
"decomposer_mode": {
|
|
135
|
+
"enum": ["user", "auto", "hybrid", "ask"],
|
|
136
|
+
"description": "v1 ships 'user' only; auto/hybrid/ask are v2."
|
|
137
|
+
},
|
|
138
|
+
"smartmemory_priors_consulted": {
|
|
139
|
+
"type": "integer",
|
|
140
|
+
"minimum": 0,
|
|
141
|
+
"description": "Always 0 in v1 (SmartMemory wiring is v2)."
|
|
142
|
+
},
|
|
143
|
+
"degraded_judged": {
|
|
144
|
+
"type": "boolean",
|
|
145
|
+
"description": "True when a 'judged' predicate was downgraded to T2 because T3 is unavailable in v1."
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"required": ["agent_type", "model_id"],
|
|
69
69
|
"properties": {
|
|
70
70
|
"agent_type": {
|
|
71
|
-
"enum": ["claude", "codex"],
|
|
72
|
-
"description": "Which model type produced this result."
|
|
71
|
+
"enum": ["claude", "codex", "judge"],
|
|
72
|
+
"description": "Which model type produced this result. 'judge' is used by stratum_judge for T1-only paths (no LLM dispatched); when T2 fires, agent_type reflects the actual model invoked."
|
|
73
73
|
},
|
|
74
74
|
"model_id": {
|
|
75
75
|
"type": ["string", "null"],
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "task-result.json",
|
|
4
|
+
"_source": "docs/features/COMP-GSD-2/blueprint.md",
|
|
5
|
+
"_roadmap": "COMP-GSD-2",
|
|
6
|
+
"title": "TaskResult",
|
|
7
|
+
"description": "Per-task post-execution capture written by the task agent at .compose/gsd/<featureCode>/results/<task_id>.json and committed as part of its diff. After execute step completion, runGsd walks the merged base cwd, reads each per-task file, and writes the consolidated blackboard.json. This schema is the post-execution audit/retro substrate (consumed by GSD-7 milestone reports), NOT a runtime channel between tasks.",
|
|
8
|
+
"type": "object",
|
|
9
|
+
"required": ["status", "files_changed", "summary", "produces", "gates", "attempts"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"status": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"enum": ["passed", "failed"],
|
|
14
|
+
"description": "Whether the agent considered the task complete with all gates green."
|
|
15
|
+
},
|
|
16
|
+
"files_changed": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": { "type": "string" },
|
|
19
|
+
"description": "Repo-relative paths the agent touched in its worktree."
|
|
20
|
+
},
|
|
21
|
+
"summary": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "One- or two-paragraph machine-readable summary of what was done."
|
|
24
|
+
},
|
|
25
|
+
"produces": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"additionalProperties": { "type": "string" },
|
|
28
|
+
"description": "Realized symbol map: { symbolName: signature-or-shape-string }. Mirrors the task's declared produces but with the actually-implemented signatures."
|
|
29
|
+
},
|
|
30
|
+
"gates": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": { "$ref": "#/definitions/GateRun" },
|
|
33
|
+
"description": "One entry per gate command run. Array (not lint/build/test object) so arbitrary project-configured gateCommands are supported."
|
|
34
|
+
},
|
|
35
|
+
"attempts": {
|
|
36
|
+
"type": "integer",
|
|
37
|
+
"minimum": 0,
|
|
38
|
+
"description": "Number of internal TDD-loop iterations the agent took before declaring done."
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"definitions": {
|
|
43
|
+
"GateRun": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": ["command", "status", "output"],
|
|
46
|
+
"properties": {
|
|
47
|
+
"command": { "type": "string", "minLength": 1 },
|
|
48
|
+
"status": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"enum": ["pass", "fail"]
|
|
51
|
+
},
|
|
52
|
+
"output": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "Truncated stdout/stderr from the gate run (e.g., last 2000 chars)."
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"additionalProperties": false
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "taskgraph-gsd.json",
|
|
4
|
+
"_source": "docs/features/COMP-GSD-2/blueprint.md",
|
|
5
|
+
"_roadmap": "COMP-GSD-2",
|
|
6
|
+
"title": "TaskGraphGsd",
|
|
7
|
+
"description": "Output of the gsd pipeline's decompose_gsd step. Extends the bare TaskGraph (from build.stratum.yaml's decompose) with required produces/consumes per task, sourced from the blueprint's Boundary Map. Each task carries a rich `description` string pre-baked with the spec context that Stratum's parallel_dispatch interpolation cannot carry on its own.",
|
|
8
|
+
"type": "object",
|
|
9
|
+
"required": ["tasks"],
|
|
10
|
+
"properties": {
|
|
11
|
+
"tasks": {
|
|
12
|
+
"type": "array",
|
|
13
|
+
"minItems": 1,
|
|
14
|
+
"items": { "$ref": "#/definitions/Task" }
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"additionalProperties": false,
|
|
18
|
+
"definitions": {
|
|
19
|
+
"Task": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"required": ["id", "files_owned", "files_read", "depends_on", "description", "produces", "consumes"],
|
|
22
|
+
"properties": {
|
|
23
|
+
"id": { "type": "string", "minLength": 1 },
|
|
24
|
+
"files_owned": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"items": { "type": "string" },
|
|
27
|
+
"description": "Files this task may write. Must not overlap with other tasks' files_owned (enforced by no_file_conflicts ensure)."
|
|
28
|
+
},
|
|
29
|
+
"files_read": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "type": "string" },
|
|
32
|
+
"description": "Files this task may read but not write."
|
|
33
|
+
},
|
|
34
|
+
"depends_on": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": { "type": "string" },
|
|
37
|
+
"description": "Task ids that must complete before this one."
|
|
38
|
+
},
|
|
39
|
+
"description": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"minLength": 1,
|
|
42
|
+
"description": "Rich prompt fragment containing the per-task spec context (produces/consumes/slice/upstream summary/gates). Packed at decompose time because Stratum's parallel_dispatch only interpolates a fixed set of tokens."
|
|
43
|
+
},
|
|
44
|
+
"produces": {
|
|
45
|
+
"type": "array",
|
|
46
|
+
"items": { "$ref": "#/definitions/ProducesEntry" },
|
|
47
|
+
"description": "Symbols this task lands. Sourced from the matching Boundary Map slice."
|
|
48
|
+
},
|
|
49
|
+
"consumes": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "$ref": "#/definitions/ConsumesEntry" },
|
|
52
|
+
"description": "Symbols this task may import from upstream tasks (resolved at end-of-step merge in topological order)."
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"additionalProperties": true
|
|
56
|
+
},
|
|
57
|
+
"ProducesEntry": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"required": ["file", "symbols", "kind"],
|
|
60
|
+
"properties": {
|
|
61
|
+
"file": { "type": "string", "minLength": 1 },
|
|
62
|
+
"symbols": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"minItems": 1,
|
|
65
|
+
"items": { "type": "string" }
|
|
66
|
+
},
|
|
67
|
+
"kind": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"enum": ["interface", "type", "function", "class", "const", "hook", "component"],
|
|
70
|
+
"description": "Symbol kind. Mirrors lib/boundary-map.js KIND_ALLOWLIST."
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"additionalProperties": false
|
|
74
|
+
},
|
|
75
|
+
"ConsumesEntry": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"required": ["from", "file", "symbols"],
|
|
78
|
+
"properties": {
|
|
79
|
+
"from": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"pattern": "^S\\d{2,}$",
|
|
82
|
+
"description": "Upstream slice id (S01, S02, ...)."
|
|
83
|
+
},
|
|
84
|
+
"file": { "type": "string", "minLength": 1 },
|
|
85
|
+
"symbols": {
|
|
86
|
+
"type": "array",
|
|
87
|
+
"minItems": 1,
|
|
88
|
+
"items": { "type": "string" }
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"additionalProperties": false
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|