@smartmemory/compose 0.3.6-beta → 0.3.7

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 (134) hide show
  1. package/.claude/skills/compose/SKILL.md +42 -88
  2. package/bin/compose.js +288 -0
  3. package/bin/git-hooks/pre-push.template +29 -0
  4. package/bin/judgment-import.js +7 -0
  5. package/contracts/feature-json.schema.json +5 -0
  6. package/contracts/judgment-record.schema.json +425 -4
  7. package/dist/assets/App-PkZzHeMj.js +894 -0
  8. package/dist/assets/_baseUniq-Bo837sRJ.js +1 -0
  9. package/dist/assets/arc-BafGpyqE.js +1 -0
  10. package/dist/assets/architectureDiagram-Q4EWVU46-BOBfUsqL.js +36 -0
  11. package/dist/assets/blockDiagram-DXYQGD6D-Dwodev1a.js +132 -0
  12. package/dist/assets/{browser-BSM23If2.js → browser-1ntj1-x_.js} +6 -6
  13. package/dist/assets/{c4Diagram-LMCZKHZV-DZf45Fbz.js → c4Diagram-AHTNJAMY-CU_bhYag.js} +1 -1
  14. package/dist/assets/channel-qVK_qn4E.js +1 -0
  15. package/dist/assets/{chunk-JWPE2WC7-_7ujgd_Q.js → chunk-4BX2VUAB-p8WsDwnO.js} +1 -1
  16. package/dist/assets/chunk-4TB4RGXK-B8h7-eR0.js +206 -0
  17. package/dist/assets/{chunk-XXDRQBXY-DfdVhbmA.js → chunk-55IACEB6-DxeEr98s.js} +1 -1
  18. package/dist/assets/{chunk-VR4S4FIN-Dt9NZ67m.js → chunk-EDXVE4YY-BYt8F151.js} +1 -1
  19. package/dist/assets/{chunk-5VM5RSS4-BY4_PV5H.js → chunk-FMBD7UC4-DGSOVeie.js} +1 -1
  20. package/dist/assets/chunk-OYMX7WX6-B-QdgYR2.js +231 -0
  21. package/dist/assets/{chunk-2Q5K7J3B-Dn1spZYu.js → chunk-QZHKN3VN-Du5UAZLs.js} +1 -1
  22. package/dist/assets/{chunk-32BRIVSS-pURGrJDk.js → chunk-YZCP3GAM-C8JbNBSk.js} +1 -1
  23. package/dist/assets/classDiagram-6PBFFD2Q-B8UcfC1q.js +1 -0
  24. package/dist/assets/classDiagram-v2-HSJHXN6E-B8UcfC1q.js +1 -0
  25. package/dist/assets/clone-Pu3RyLUh.js +1 -0
  26. package/dist/assets/{cose-bilkent-JH36ORCC-BieYif4o.js → cose-bilkent-S5V4N54A-O1ESaqge.js} +1 -1
  27. package/dist/assets/dagre-KV5264BT-CPTmFPHw.js +4 -0
  28. package/dist/assets/diagram-5BDNPKRD-B3PNrWs5.js +10 -0
  29. package/dist/assets/diagram-G4DWMVQ6-Cscfr6vc.js +24 -0
  30. package/dist/assets/diagram-MMDJMWI5-CSfqZ-TM.js +43 -0
  31. package/dist/assets/diagram-TYMM5635-Cg4aYS7W.js +24 -0
  32. package/dist/assets/erDiagram-SMLLAGMA-_ZqwG5pl.js +85 -0
  33. package/dist/assets/flowDiagram-DWJPFMVM-C83boxFT.js +162 -0
  34. package/dist/assets/ganttDiagram-T4ZO3ILL-CWnIjuEi.js +292 -0
  35. package/dist/assets/gitGraphDiagram-UUTBAWPF-DrMdxZfH.js +106 -0
  36. package/dist/assets/graph-Bi99_6Yf.js +331 -0
  37. package/dist/assets/graph-RE4I7Ty7.js +1 -0
  38. package/dist/assets/index-Rm2RE-c0.js +123 -0
  39. package/dist/assets/infoDiagram-42DDH7IO-BLmP4Epr.js +2 -0
  40. package/dist/assets/{ishikawaDiagram-FXEZZL3T-CzEB9fQS.js → ishikawaDiagram-UXIWVN3A-yuWWshKN.js} +5 -5
  41. package/dist/assets/{journeyDiagram-5HDEW3XC-Bz8TCdz2.js → journeyDiagram-VCZTEJTY-BOfhaJov.js} +1 -1
  42. package/dist/assets/{kanban-definition-HUTT4EX6-tozrMoV_.js → kanban-definition-6JOO6SKY-Bbolde15.js} +7 -7
  43. package/dist/assets/katex-DkKDou_j.js +257 -0
  44. package/dist/assets/layout-BSf33zm8.js +1 -0
  45. package/dist/assets/{linear-Ck7gpa5N.js → linear-AvSTWMqx.js} +1 -1
  46. package/dist/assets/min-QBM8H4xN.js +1 -0
  47. package/dist/assets/{mindmap-definition-LN4V7U3C-DTcHO0DJ.js → mindmap-definition-QFDTVHPH-BuvgtqIc.js} +7 -7
  48. package/dist/assets/{mobile-CaoXUwAr.js → mobile-BnXEOE3U.js} +2 -2
  49. package/dist/assets/pieDiagram-DEJITSTG-DIzF16vh.js +30 -0
  50. package/dist/assets/quadrantDiagram-34T5L4WZ-D-mbUIjS.js +7 -0
  51. package/dist/assets/{requirementDiagram-TGXJPOKE-bnI2zJeT.js → requirementDiagram-MS252O5E-CEs4kCLd.js} +3 -3
  52. package/dist/assets/sankeyDiagram-XADWPNL6-DFsnCr9n.js +10 -0
  53. package/dist/assets/sequenceDiagram-FGHM5R23-BEJYdTjQ.js +157 -0
  54. package/dist/assets/stateDiagram-FHFEXIEX-BBXs57uY.js +1 -0
  55. package/dist/assets/stateDiagram-v2-QKLJ7IA2-BqKuX4rj.js +1 -0
  56. package/dist/assets/{timeline-definition-FHXFAJF6-D267GQFF.js → timeline-definition-GMOUNBTQ-BGvLoVAY.js} +3 -3
  57. package/dist/assets/vennDiagram-DHZGUBPP-9LaBTMe0.js +34 -0
  58. package/dist/assets/wardley-RL74JXVD-P4MEqMTP.js +162 -0
  59. package/dist/assets/wardleyDiagram-NUSXRM2D-o-tmxnlC.js +20 -0
  60. package/dist/assets/xychartDiagram-5P7HB3ND-Dpn7V6qk.js +7 -0
  61. package/dist/index.html +2 -2
  62. package/lib/bug-escalation.js +30 -4
  63. package/lib/build.js +777 -52
  64. package/lib/canon-guard.js +223 -0
  65. package/lib/canon-registry.js +187 -0
  66. package/lib/codex-preflight.js +26 -4
  67. package/lib/dispatch-ledger.js +301 -0
  68. package/lib/dispatch-metrics.js +236 -0
  69. package/lib/experiment-judge.js +6 -1
  70. package/lib/feature-writer.js +9 -0
  71. package/lib/gsd.js +11 -2
  72. package/lib/hooks-status.js +32 -3
  73. package/lib/judgment/store/index.js +158 -0
  74. package/lib/judgment/store/records.js +183 -24
  75. package/lib/judgment-attest.js +259 -0
  76. package/lib/judgment-gen.js +370 -21
  77. package/lib/judgment-verify.js +153 -0
  78. package/lib/judgment-writer.js +2803 -277
  79. package/lib/lane-gate.js +2 -0
  80. package/lib/local-claude-connector.js +199 -54
  81. package/lib/mcp-enforcement.js +21 -35
  82. package/lib/result-normalizer.js +93 -15
  83. package/lib/review-normalize.js +4 -0
  84. package/lib/stratum-mcp-client.js +131 -6
  85. package/package.json +2 -2
  86. package/server/compose-mcp-tools.js +15 -1
  87. package/server/compose-mcp.js +96 -1
  88. package/server/mcp-tool-policy.js +1 -1
  89. package/dist/assets/App-BG3ngu8H.js +0 -896
  90. package/dist/assets/abnfDiagram-VRR7QNED-CjB_sD3D.js +0 -1
  91. package/dist/assets/arc-_v4hR_uD.js +0 -1
  92. package/dist/assets/architectureDiagram-ZJ3FMSHR-DreJmzXQ.js +0 -36
  93. package/dist/assets/blockDiagram-677ZJIJ3-BG9-c0O1.js +0 -132
  94. package/dist/assets/channel-B3U5wFAT.js +0 -1
  95. package/dist/assets/chunk-EX3LRPZG-DdELs1qP.js +0 -231
  96. package/dist/assets/chunk-MOJQB5TN-D-ky35G-.js +0 -88
  97. package/dist/assets/chunk-RYQCIY6F-Dag_kVlO.js +0 -1
  98. package/dist/assets/chunk-V7JOEXUC-BtewURat.js +0 -206
  99. package/dist/assets/classDiagram-OUVF2IWQ-B6fCN-ht.js +0 -1
  100. package/dist/assets/classDiagram-v2-EOCWNBFH-B6fCN-ht.js +0 -1
  101. package/dist/assets/cynefin-VYW2F7L2-CT2BA6KE.js +0 -178
  102. package/dist/assets/cynefinDiagram-TSTJHNR4-Bh6exbyg.js +0 -62
  103. package/dist/assets/dagre-VKFMJZFB-aXMLSmQL.js +0 -4
  104. package/dist/assets/diagram-FQU43EPY-Dr7JAOuQ.js +0 -3
  105. package/dist/assets/diagram-G47NLZAW-DUvA3FQK.js +0 -24
  106. package/dist/assets/diagram-NH7WQ7WH-BQUARqcu.js +0 -24
  107. package/dist/assets/diagram-OA4YK3LP-dDUc1zHi.js +0 -30
  108. package/dist/assets/diagram-WEI45ONY-B2h5Qlb1.js +0 -41
  109. package/dist/assets/ebnfDiagram-CCIWWBDH-DThRGupB.js +0 -1
  110. package/dist/assets/erDiagram-Q63AITRT-BUCsprO2.js +0 -85
  111. package/dist/assets/flowDiagram-23GEKE2U-DXtNNi6r.js +0 -156
  112. package/dist/assets/ganttDiagram-NO4QXBWP-D4zbBHh_.js +0 -292
  113. package/dist/assets/gitGraphDiagram-IHSO6WYX-DpoQws0W.js +0 -106
  114. package/dist/assets/graph-BXPQrYYB.js +0 -331
  115. package/dist/assets/graph-C9eacEi8.js +0 -1
  116. package/dist/assets/index-3ZH5eMcZ.js +0 -119
  117. package/dist/assets/infoDiagram-FWYZ7A6U-Bbas2GAo.js +0 -2
  118. package/dist/assets/katex-C5jXJg4s.js +0 -257
  119. package/dist/assets/layout-DEXfKzaS.js +0 -1
  120. package/dist/assets/map-Czzmt4hB.js +0 -1
  121. package/dist/assets/pegDiagram-2B236MQR-CHiINrNy.js +0 -1
  122. package/dist/assets/pieDiagram-ENE6RG2P-CfS4YFlR.js +0 -39
  123. package/dist/assets/quadrantDiagram-ABIIQ3AL-CadesS9w.js +0 -7
  124. package/dist/assets/railroadDiagram-RFXS5EU6-CgWEspBN.js +0 -1
  125. package/dist/assets/sankeyDiagram-HTMAVEWB-YWKFgOGw.js +0 -40
  126. package/dist/assets/sequenceDiagram-DBY2YBRQ-BvkNOyF9.js +0 -162
  127. package/dist/assets/sizeCapture-X5ZJPWSS-DlFPA2yO.js +0 -1
  128. package/dist/assets/stateDiagram-2N3HPSRC-h8NIx0kQ.js +0 -1
  129. package/dist/assets/stateDiagram-v2-6OUMAXLB-DjPgZtJ9.js +0 -1
  130. package/dist/assets/swimlanes-5IMT3BWC-CT5n22kG.js +0 -2
  131. package/dist/assets/swimlanesDiagram-G3AALYLV-Dn318Bhq.js +0 -8
  132. package/dist/assets/vennDiagram-L72KCM5P-Dj-wWLYG.js +0 -34
  133. package/dist/assets/wardleyDiagram-EHGQE667-BxCeYxkG.js +0 -78
  134. package/dist/assets/xychartDiagram-FW5EYKEG-DMFqWn7z.js +0 -7
@@ -21,16 +21,149 @@
21
21
  "pattern": "^[a-z0-9][a-z0-9-]*#r[1-9][0-9]*$"
22
22
  },
23
23
 
24
+ "entry_id": {
25
+ "type": "string",
26
+ "description": "Writer-allocated stable sub-entry id.",
27
+ "pattern": "^(?:f|e|of|o|l|c|gj|gl)[1-9][0-9]*$"
28
+ },
29
+
30
+ "fact_id": {
31
+ "type": "string",
32
+ "pattern": "^f[1-9][0-9]*$"
33
+ },
34
+
35
+ "edge_id": {
36
+ "type": "string",
37
+ "pattern": "^e[1-9][0-9]*$"
38
+ },
39
+
40
+ "open_field_id": {
41
+ "type": "string",
42
+ "pattern": "^of[1-9][0-9]*$"
43
+ },
44
+
45
+ "owed_id": {
46
+ "type": "string",
47
+ "pattern": "^o[1-9][0-9]*$"
48
+ },
49
+
50
+ "load_link_id": {
51
+ "type": "string",
52
+ "pattern": "^l[1-9][0-9]*$"
53
+ },
54
+
55
+ "clause_id": {
56
+ "type": "string",
57
+ "pattern": "^c[1-9][0-9]*$"
58
+ },
59
+
60
+ "goal_joint_id": {
61
+ "type": "string",
62
+ "pattern": "^gj[1-9][0-9]*$"
63
+ },
64
+
65
+ "goal_load_link_id": {
66
+ "type": "string",
67
+ "pattern": "^gl[1-9][0-9]*$"
68
+ },
69
+
70
+ "goal_clause_ref": {
71
+ "type": "string",
72
+ "description": "Strict address of a clause in a goal version.",
73
+ "pattern": "^goal:v[1-9][0-9]*#c[1-9][0-9]*$"
74
+ },
75
+
24
76
  "provenance": {
25
77
  "type": "object",
26
- "description": "Writer-stamped, never caller-set. actor is a v1 constant (oq1-agent-only-v1); session is best-effort diagnostic garnish and nothing may depend on it; via: 'import' marks historical transcription.",
78
+ "description": "Writer-stamped, never caller-set. actor is a v1 constant (oq1-agent-only-v1); session is best-effort diagnostic garnish and nothing may depend on it; via marks sanctioned historical transcription or migration.",
27
79
  "required": ["actor", "written_at"],
28
80
  "additionalProperties": false,
29
81
  "properties": {
30
82
  "actor": { "const": "agent" },
31
83
  "session": { "type": ["string", "null"] },
32
84
  "written_at": { "type": "string", "format": "date-time" },
33
- "via": { "enum": ["import"] }
85
+ "via": { "enum": ["import", "migration"] },
86
+ "intent_id": { "type": "string", "minLength": 1 }
87
+ }
88
+ },
89
+
90
+ "fact_text": {
91
+ "type": "string",
92
+ "minLength": 1
93
+ },
94
+
95
+ "fact_channel": {
96
+ "enum": ["said", "observed", "secondhand", "inferred"]
97
+ },
98
+
99
+ "fact_at": {
100
+ "type": "string",
101
+ "format": "date"
102
+ },
103
+
104
+ "fact_via": {
105
+ "type": "string",
106
+ "minLength": 1
107
+ },
108
+
109
+ "person_section": {
110
+ "enum": ["role", "life", "stated", "revealed"]
111
+ },
112
+
113
+ "correction_trace_list": {
114
+ "type": "array",
115
+ "items": { "$ref": "#/definitions/correction_trace" }
116
+ },
117
+
118
+ "correction_trace": {
119
+ "type": "object",
120
+ "description": "Writer-produced prior values for one correction, fill, give, or reopen transition.",
121
+ "required": ["prior", "corrected_at", "provenance"],
122
+ "additionalProperties": false,
123
+ "properties": {
124
+ "prior": {
125
+ "type": "object",
126
+ "minProperties": 1,
127
+ "additionalProperties": { "type": ["string", "number", "boolean", "null"] }
128
+ },
129
+ "corrected_at": { "type": "string", "format": "date-time" },
130
+ "provenance": { "$ref": "#/definitions/provenance" }
131
+ }
132
+ },
133
+
134
+ "removed_block": {
135
+ "type": "object",
136
+ "description": "Writer-stamped retirement marker; the containing stable entry remains in place.",
137
+ "required": ["at", "reason", "provenance"],
138
+ "additionalProperties": false,
139
+ "properties": {
140
+ "at": { "type": "string", "format": "date-time" },
141
+ "reason": { "type": "string", "minLength": 1 },
142
+ "provenance": { "$ref": "#/definitions/provenance" }
143
+ }
144
+ },
145
+
146
+ "ratification": {
147
+ "type": "object",
148
+ "description": "Owner attestation citation: the elicitation triplet plus the owner's quoted answer.",
149
+ "required": ["asked", "answered_at", "answer_ref", "quote"],
150
+ "additionalProperties": false,
151
+ "properties": {
152
+ "asked": { "type": "string", "minLength": 1 },
153
+ "answered_at": { "type": "string", "format": "date-time" },
154
+ "answer_ref": { "type": "string", "minLength": 1 },
155
+ "quote": { "type": "string", "minLength": 1 }
156
+ }
157
+ },
158
+
159
+ "provocation": {
160
+ "type": "object",
161
+ "description": "Owner words that provoked a goal cut and when they were recorded.",
162
+ "required": ["quote", "at"],
163
+ "additionalProperties": false,
164
+ "properties": {
165
+ "quote": { "type": "string", "minLength": 1 },
166
+ "at": { "type": "string", "format": "date-time" }
34
167
  }
35
168
  },
36
169
 
@@ -46,6 +179,274 @@
46
179
  }
47
180
  },
48
181
 
182
+ "person_fact": {
183
+ "type": "object",
184
+ "required": ["id", "section", "text", "channel", "at", "provenance", "trace"],
185
+ "additionalProperties": false,
186
+ "properties": {
187
+ "id": { "$ref": "#/definitions/fact_id" },
188
+ "section": { "$ref": "#/definitions/person_section" },
189
+ "text": { "$ref": "#/definitions/fact_text" },
190
+ "channel": { "$ref": "#/definitions/fact_channel" },
191
+ "via": { "$ref": "#/definitions/fact_via" },
192
+ "at": { "$ref": "#/definitions/fact_at" },
193
+ "diverges_with": { "$ref": "#/definitions/fact_id" },
194
+ "provenance": { "$ref": "#/definitions/provenance" },
195
+ "trace": { "$ref": "#/definitions/correction_trace_list" }
196
+ },
197
+ "if": {
198
+ "properties": { "channel": { "const": "secondhand" } },
199
+ "required": ["channel"]
200
+ },
201
+ "then": { "required": ["via"] },
202
+ "else": { "not": { "required": ["via"] } }
203
+ },
204
+
205
+ "situation_fact": {
206
+ "type": "object",
207
+ "required": ["id", "text", "channel", "at", "provenance", "trace"],
208
+ "additionalProperties": false,
209
+ "properties": {
210
+ "id": { "$ref": "#/definitions/fact_id" },
211
+ "text": { "$ref": "#/definitions/fact_text" },
212
+ "channel": { "$ref": "#/definitions/fact_channel" },
213
+ "via": { "$ref": "#/definitions/fact_via" },
214
+ "at": { "$ref": "#/definitions/fact_at" },
215
+ "provenance": { "$ref": "#/definitions/provenance" },
216
+ "trace": { "$ref": "#/definitions/correction_trace_list" }
217
+ },
218
+ "if": {
219
+ "properties": { "channel": { "const": "secondhand" } },
220
+ "required": ["channel"]
221
+ },
222
+ "then": { "required": ["via"] },
223
+ "else": { "not": { "required": ["via"] } }
224
+ },
225
+
226
+ "person_edge": {
227
+ "type": "object",
228
+ "required": ["id", "to", "kind", "provenance", "removed"],
229
+ "additionalProperties": false,
230
+ "properties": {
231
+ "id": { "$ref": "#/definitions/edge_id" },
232
+ "to": { "$ref": "#/definitions/slug" },
233
+ "kind": { "type": "string", "minLength": 1 },
234
+ "provenance": { "$ref": "#/definitions/provenance" },
235
+ "removed": {
236
+ "anyOf": [
237
+ { "type": "null" },
238
+ { "$ref": "#/definitions/removed_block" }
239
+ ]
240
+ }
241
+ }
242
+ },
243
+
244
+ "fact_load_link": {
245
+ "type": "object",
246
+ "required": ["id", "fact", "carries", "provenance", "removed"],
247
+ "additionalProperties": false,
248
+ "properties": {
249
+ "id": { "$ref": "#/definitions/load_link_id" },
250
+ "fact": { "$ref": "#/definitions/fact_id" },
251
+ "carries": { "type": "string", "minLength": 1 },
252
+ "provenance": { "$ref": "#/definitions/provenance" },
253
+ "removed": {
254
+ "anyOf": [
255
+ { "type": "null" },
256
+ { "$ref": "#/definitions/removed_block" }
257
+ ]
258
+ }
259
+ }
260
+ },
261
+
262
+ "open_field": {
263
+ "type": "object",
264
+ "required": ["id", "name", "status", "provenance", "trace"],
265
+ "additionalProperties": false,
266
+ "properties": {
267
+ "id": { "$ref": "#/definitions/open_field_id" },
268
+ "name": { "type": "string", "minLength": 1 },
269
+ "status": { "enum": ["open", "filled"] },
270
+ "filled_by": { "$ref": "#/definitions/fact_id" },
271
+ "provenance": { "$ref": "#/definitions/provenance" },
272
+ "trace": { "$ref": "#/definitions/correction_trace_list" }
273
+ },
274
+ "if": {
275
+ "properties": { "status": { "const": "filled" } },
276
+ "required": ["status"]
277
+ },
278
+ "then": { "required": ["filled_by"] },
279
+ "else": { "not": { "required": ["filled_by"] } }
280
+ },
281
+
282
+ "owed": {
283
+ "type": "object",
284
+ "required": ["id", "name", "why_load_bearing", "status", "provenance", "trace"],
285
+ "additionalProperties": false,
286
+ "properties": {
287
+ "id": { "$ref": "#/definitions/owed_id" },
288
+ "name": { "type": "string", "minLength": 1 },
289
+ "why_load_bearing": { "type": "string", "minLength": 1 },
290
+ "status": { "enum": ["open", "given"] },
291
+ "filled_by": { "$ref": "#/definitions/fact_id" },
292
+ "provenance": { "$ref": "#/definitions/provenance" },
293
+ "trace": { "$ref": "#/definitions/correction_trace_list" }
294
+ },
295
+ "if": {
296
+ "properties": { "status": { "const": "given" } },
297
+ "required": ["status"]
298
+ },
299
+ "then": { "required": ["filled_by"] },
300
+ "else": { "not": { "required": ["filled_by"] } }
301
+ },
302
+
303
+ "goal_clause": {
304
+ "type": "object",
305
+ "required": ["id", "text", "channel", "elicitation", "provenance", "trace"],
306
+ "additionalProperties": false,
307
+ "properties": {
308
+ "id": { "$ref": "#/definitions/clause_id" },
309
+ "text": { "$ref": "#/definitions/fact_text" },
310
+ "channel": { "$ref": "#/definitions/fact_channel" },
311
+ "via": { "$ref": "#/definitions/fact_via" },
312
+ "elicitation": { "$ref": "#/definitions/elicitation" },
313
+ "provenance": { "$ref": "#/definitions/provenance" },
314
+ "trace": { "$ref": "#/definitions/correction_trace_list" }
315
+ },
316
+ "if": {
317
+ "properties": { "channel": { "const": "secondhand" } },
318
+ "required": ["channel"]
319
+ },
320
+ "then": { "required": ["via"] },
321
+ "else": { "not": { "required": ["via"] } }
322
+ },
323
+
324
+ "goal_joint_link": {
325
+ "type": "object",
326
+ "required": ["id", "joint", "provenance", "removed"],
327
+ "additionalProperties": false,
328
+ "properties": {
329
+ "id": { "$ref": "#/definitions/goal_joint_id" },
330
+ "joint": { "$ref": "#/definitions/slug" },
331
+ "provenance": { "$ref": "#/definitions/provenance" },
332
+ "removed": {
333
+ "anyOf": [
334
+ { "type": "null" },
335
+ { "$ref": "#/definitions/removed_block" }
336
+ ]
337
+ }
338
+ }
339
+ },
340
+
341
+ "goal_load_link": {
342
+ "type": "object",
343
+ "required": ["id", "clause", "carries", "provenance", "removed"],
344
+ "additionalProperties": false,
345
+ "properties": {
346
+ "id": { "$ref": "#/definitions/goal_load_link_id" },
347
+ "clause": {
348
+ "type": "string",
349
+ "pattern": "^v[1-9][0-9]*#c[1-9][0-9]*$"
350
+ },
351
+ "carries": { "type": "string", "minLength": 1 },
352
+ "provenance": { "$ref": "#/definitions/provenance" },
353
+ "removed": {
354
+ "anyOf": [
355
+ { "type": "null" },
356
+ { "$ref": "#/definitions/removed_block" }
357
+ ]
358
+ }
359
+ }
360
+ },
361
+
362
+ "person": {
363
+ "type": "object",
364
+ "description": "One aggregate record per person under records/people/<slug>.json.",
365
+ "required": ["slug", "display_name", "facts", "edges", "open_fields", "load_links", "provenance"],
366
+ "additionalProperties": false,
367
+ "properties": {
368
+ "slug": { "$ref": "#/definitions/slug" },
369
+ "display_name": { "type": "string", "minLength": 1 },
370
+ "facts": { "type": "array", "items": { "$ref": "#/definitions/person_fact" } },
371
+ "edges": { "type": "array", "items": { "$ref": "#/definitions/person_edge" } },
372
+ "open_fields": { "type": "array", "items": { "$ref": "#/definitions/open_field" } },
373
+ "load_links": { "type": "array", "items": { "$ref": "#/definitions/fact_load_link" } },
374
+ "provenance": { "$ref": "#/definitions/provenance" }
375
+ }
376
+ },
377
+
378
+ "situation_entity": {
379
+ "type": "object",
380
+ "description": "One aggregate situation record per entity under records/situation/<slug>.json.",
381
+ "required": ["slug", "display_name", "facts", "owed", "load_links", "provenance"],
382
+ "additionalProperties": false,
383
+ "properties": {
384
+ "slug": { "$ref": "#/definitions/slug" },
385
+ "display_name": { "type": "string", "minLength": 1 },
386
+ "facts": { "type": "array", "items": { "$ref": "#/definitions/situation_fact" } },
387
+ "owed": { "type": "array", "items": { "$ref": "#/definitions/owed" } },
388
+ "load_links": { "type": "array", "items": { "$ref": "#/definitions/fact_load_link" } },
389
+ "provenance": { "$ref": "#/definitions/provenance" }
390
+ }
391
+ },
392
+
393
+ "goal_version": {
394
+ "type": "object",
395
+ "description": "One immutable meaning version in records/goal/v<N>.json; wording-only corrections remain visibly traced.",
396
+ "required": ["version", "clauses", "provocation", "diff_note", "provenance"],
397
+ "additionalProperties": false,
398
+ "properties": {
399
+ "version": { "type": "integer", "minimum": 1 },
400
+ "clauses": {
401
+ "type": "array",
402
+ "minItems": 1,
403
+ "items": { "$ref": "#/definitions/goal_clause" }
404
+ },
405
+ "provocation": {
406
+ "anyOf": [
407
+ { "type": "null" },
408
+ { "$ref": "#/definitions/provocation" }
409
+ ]
410
+ },
411
+ "ratification": {
412
+ "anyOf": [
413
+ { "type": "null" },
414
+ { "$ref": "#/definitions/ratification" }
415
+ ]
416
+ },
417
+ "diff_note": { "type": "string", "minLength": 1 },
418
+ "provenance": { "$ref": "#/definitions/provenance" }
419
+ },
420
+ "if": {
421
+ "properties": {
422
+ "provenance": {
423
+ "properties": { "via": { "enum": ["import", "migration"] } },
424
+ "required": ["via"]
425
+ }
426
+ },
427
+ "required": ["provenance"]
428
+ },
429
+ "else": {
430
+ "required": ["ratification"],
431
+ "properties": {
432
+ "provocation": { "$ref": "#/definitions/provocation" },
433
+ "ratification": { "$ref": "#/definitions/ratification" }
434
+ }
435
+ }
436
+ },
437
+
438
+ "goal_state": {
439
+ "type": "object",
440
+ "description": "Mutable traced goal associations stored separately from the immutable meaning chain.",
441
+ "required": ["joints", "load_links", "provenance"],
442
+ "additionalProperties": false,
443
+ "properties": {
444
+ "joints": { "type": "array", "items": { "$ref": "#/definitions/goal_joint_link" } },
445
+ "load_links": { "type": "array", "items": { "$ref": "#/definitions/goal_load_link" } },
446
+ "provenance": { "$ref": "#/definitions/provenance" }
447
+ }
448
+ },
449
+
49
450
  "conviction": {
50
451
  "type": "object",
51
452
  "required": ["level", "source"],
@@ -298,7 +699,7 @@
298
699
  "required": ["kind", "title", "provenance"],
299
700
  "additionalProperties": false,
300
701
  "properties": {
301
- "kind": { "enum": ["decide", "kill", "override", "escalate", "calibrate", "postmortem", "rank", "note", "correct", "open"] },
702
+ "kind": { "enum": ["decide", "kill", "override", "escalate", "calibrate", "postmortem", "rank", "note", "correct", "open", "attest"] },
302
703
  "title": { "type": "string", "minLength": 1 },
303
704
  "body": { "type": "string" },
304
705
  "refs": { "type": "array", "items": { "type": "string" }, "default": [] },
@@ -306,6 +707,7 @@
306
707
  "conviction": { "$ref": "#/definitions/conviction" },
307
708
  "trigger": { "type": "string", "minLength": 1 },
308
709
  "open_joints": { "type": "array", "items": { "type": "string" } },
710
+ "rests_on": { "type": "array", "items": { "$ref": "#/definitions/goal_clause_ref" } },
309
711
  "prediction": { "$ref": "#/definitions/embedded_prediction" },
310
712
  "disposition": { "enum": ["EXT", "INT", "CONSTRUCT", "ASSERT", "STRADDLE"] },
311
713
  "recall_verdict": { "enum": ["NAMED", "NAMED-BUT-MISRANKED", "MISSED", "UNKNOWABLE"] },
@@ -314,6 +716,9 @@
314
716
  "prediction_grade": { "enum": ["right", "right-wrong-reason", "wrong"] },
315
717
  "reason": { "type": "string", "minLength": 1 },
316
718
  "anchor": { "type": "string", "minLength": 1 },
719
+ "intent_id": { "type": "string", "minLength": 1 },
720
+ "tool": { "type": "string", "minLength": 1 },
721
+ "op": { "type": "string", "minLength": 1 },
317
722
  "rank_change": {
318
723
  "type": "object",
319
724
  "required": ["joint", "from", "to"],
@@ -380,6 +785,20 @@
380
785
  {
381
786
  "if": { "required": ["disposition"], "properties": { "disposition": { "const": "CONSTRUCT" } } },
382
787
  "then": { "required": ["prediction"] }
788
+ },
789
+ {
790
+ "if": {
791
+ "properties": { "kind": { "const": "attest" } },
792
+ "required": ["kind"]
793
+ },
794
+ "then": { "required": ["intent_id", "tool", "op"] },
795
+ "else": {
796
+ "allOf": [
797
+ { "not": { "required": ["intent_id"] } },
798
+ { "not": { "required": ["tool"] } },
799
+ { "not": { "required": ["op"] } }
800
+ ]
801
+ }
383
802
  }
384
803
  ]
385
804
  },
@@ -387,10 +806,12 @@
387
806
  "pending_intent": {
388
807
  "type": "object",
389
808
  "description": "Intent-first transition record: the COMPLETE mutation persisted atomically BEFORE the guard call, replayed idempotently by the reconciler — guard state authoritative for the edge, the intent authoritative for the payload.",
390
- "required": ["id", "op", "payload", "created_at"],
809
+ "required": ["id", "kind", "tool", "op", "payload", "created_at"],
391
810
  "additionalProperties": false,
392
811
  "properties": {
393
812
  "id": { "type": "string", "minLength": 1 },
813
+ "kind": { "type": "string", "minLength": 1 },
814
+ "tool": { "type": "string", "minLength": 1 },
394
815
  "op": { "type": "string", "minLength": 1 },
395
816
  "payload": { "type": "object" },
396
817
  "created_at": { "type": "string", "format": "date-time" }