archctx-contracts 0.7.2 → 0.8.1

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 (58) hide show
  1. package/fixtures/invalid/hook-debt-checkpoint-failed-read.json +54 -0
  2. package/fixtures/invalid/native-context-invalid-model-summary.json +635 -0
  3. package/fixtures/invalid/native-context-missing-contract-bytes.json +636 -0
  4. package/fixtures/invalid/native-context-missing-input-bytes.json +636 -0
  5. package/fixtures/invalid/native-context-mixed-snapshot.json +637 -0
  6. package/fixtures/invalid/projection-result-applied-incomplete-coverage.json +78 -0
  7. package/fixtures/invalid/refactor-decision-open-status.json +38 -0
  8. package/fixtures/valid/archctx-capabilities.json +3 -3
  9. package/fixtures/valid/capability-dependencies.json +1 -1
  10. package/fixtures/valid/docs-anchors.json +2 -1
  11. package/fixtures/valid/flow-selector-check.json +1 -1
  12. package/fixtures/valid/hook-debt-checkpoint.json +54 -0
  13. package/fixtures/valid/native-context-export.json +636 -0
  14. package/fixtures/valid/product-version-manifest.json +8 -8
  15. package/fixtures/valid/projection-manifest.json +47 -169
  16. package/fixtures/valid/projection-result.json +5 -5
  17. package/fixtures/valid/refactor-decision.json +38 -0
  18. package/fixtures/valid/runtime-recommendation-show.json +1 -0
  19. package/fixtures/valid/runtime-refactor-scan.json +6 -0
  20. package/package.json +1 -1
  21. package/schemas/repo/refactor-decision.schema.json +218 -0
  22. package/schemas/runtime/archctx-capabilities.schema.json +2 -2
  23. package/schemas/runtime/architecture-debt.schema.json +222 -0
  24. package/schemas/runtime/capability-dependencies.schema.json +10 -6
  25. package/schemas/runtime/changeset.schema.json +24 -1
  26. package/schemas/runtime/docs-anchors.schema.json +4 -3
  27. package/schemas/runtime/hook-debt-checkpoint.schema.json +69 -0
  28. package/schemas/runtime/native-context-export.schema.json +823 -0
  29. package/schemas/runtime/native-model-issue.schema.json +18 -0
  30. package/schemas/runtime/practice-checkpoint.schema.json +1 -0
  31. package/schemas/runtime/product-version-manifest.schema.json +2 -2
  32. package/schemas/runtime/projection-apply-readback.schema.json +470 -7
  33. package/schemas/runtime/projection-apply-recovery.schema.json +2 -2
  34. package/schemas/runtime/projection-manifest.schema.json +81 -186
  35. package/schemas/runtime/projection-result.schema.json +132 -5
  36. package/schemas/runtime/projection-target.schema.json +4 -1
  37. package/schemas/runtime/recommendation-v3.schema.json +106 -0
  38. package/schemas/runtime/review-result.schema.json +1 -0
  39. package/schemas/runtime/runtime-recommendation-show.schema.json +234 -13
  40. package/schemas/runtime/runtime-refactor-scan.schema.json +171 -0
  41. package/schemas/runtime/structural-observation-payload.schema.json +106 -0
  42. package/src/architecture-debt.ts +115 -0
  43. package/src/changeset-recovery.ts +49 -0
  44. package/src/docs-anchors.ts +2 -1
  45. package/src/failure.ts +810 -0
  46. package/src/index.ts +6 -0
  47. package/src/ledger.ts +14 -3
  48. package/src/native-context.ts +279 -0
  49. package/src/ownership-dependencies.ts +39 -1
  50. package/src/ports.ts +4 -0
  51. package/src/practices.ts +2 -0
  52. package/src/product-version.ts +37 -4
  53. package/src/projection-manifest.ts +372 -130
  54. package/src/projection-recovery.ts +111 -0
  55. package/src/projection.ts +443 -11
  56. package/src/refactor.ts +525 -2
  57. package/src/schema.ts +8 -0
  58. package/src/validator.ts +8 -3
@@ -0,0 +1,636 @@
1
+ {
2
+ "schemaVersion": "archcontext.native-context-export/v1",
3
+ "profile": "repo-harness/v1",
4
+ "snapshot": {
5
+ "source": "ref",
6
+ "commitSha": "457907d4dc0737481dbf769b2b13abeb0d503107",
7
+ "treeOid": "dd4bda463c96add6600e2c2d3aa46d2ad338f7b7",
8
+ "validation": "immutable-tree"
9
+ },
10
+ "inputDigest": "sha256:7509b3e0838bd10db9603d2122da55348fc12614b07e4dffc89fc5f26ed8132c",
11
+ "inputs": [
12
+ {
13
+ "path": ".archcontext/manifest.yaml",
14
+ "role": "manifest",
15
+ "requirement": "required",
16
+ "presence": "missing",
17
+ "mode": "100644",
18
+ "byteLength": 129,
19
+ "contentDigest": "sha256:bb02f21226882c8bb0246b37b21d0f27528b6b1691467eed607226466aa080f4"
20
+ },
21
+ {
22
+ "path": ".archcontext/model/flows/flow.demo.optional.yaml",
23
+ "role": "flow",
24
+ "requirement": "required",
25
+ "presence": "present",
26
+ "mode": "100644",
27
+ "byteLength": 193,
28
+ "contentDigest": "sha256:966204ddad5a3187b6e11193ea1c9dc253b59fee9ba59235e7943313d30ae4e2"
29
+ },
30
+ {
31
+ "path": ".archcontext/model/flows/flow.demo.primary.yaml",
32
+ "role": "flow",
33
+ "requirement": "required",
34
+ "presence": "present",
35
+ "mode": "100644",
36
+ "byteLength": 1165,
37
+ "contentDigest": "sha256:0bc40190c247ee7f7f5fcb640a8a1a457da34de409d6638ddb986e9897405471"
38
+ },
39
+ {
40
+ "path": ".archcontext/model/nodes/capability.demo.feature.yaml",
41
+ "role": "node",
42
+ "requirement": "required",
43
+ "presence": "present",
44
+ "mode": "100644",
45
+ "byteLength": 324,
46
+ "contentDigest": "sha256:010135743057cf3d9e7d43cd47f7f06024caee559093fbbe48745d5c764e1f8b"
47
+ },
48
+ {
49
+ "path": ".archcontext/model/nodes/component.demo.worker.yaml",
50
+ "role": "node",
51
+ "requirement": "required",
52
+ "presence": "present",
53
+ "mode": "100644",
54
+ "byteLength": 690,
55
+ "contentDigest": "sha256:64a8251c7677456658d7cafb318d58db3a130e6591488e9ca3394193e5d4a917"
56
+ },
57
+ {
58
+ "path": ".archcontext/model/nodes/datastore.demo.resource.yaml",
59
+ "role": "node",
60
+ "requirement": "required",
61
+ "presence": "present",
62
+ "mode": "100644",
63
+ "byteLength": 179,
64
+ "contentDigest": "sha256:11d419bdb855addae1ea5d5796a45afc069407e681b17fa81fcf4ec79e3b1339"
65
+ },
66
+ {
67
+ "path": ".archcontext/model/nodes/deployment.demo.resource.yaml",
68
+ "role": "node",
69
+ "requirement": "required",
70
+ "presence": "present",
71
+ "mode": "100644",
72
+ "byteLength": 183,
73
+ "contentDigest": "sha256:e8607b98f2e0e0bc9c0fb798cb15eb253585e9950adf8b95c535502ef7b64920"
74
+ },
75
+ {
76
+ "path": ".archcontext/model/nodes/event.demo.resource.yaml",
77
+ "role": "node",
78
+ "requirement": "required",
79
+ "presence": "present",
80
+ "mode": "100644",
81
+ "byteLength": 160,
82
+ "contentDigest": "sha256:87d37b6fa59b2f39b84088489de630716f5b0d05f79ff45aee8608a309d6edca"
83
+ },
84
+ {
85
+ "path": ".archcontext/model/nodes/external.demo.resource.yaml",
86
+ "role": "node",
87
+ "requirement": "required",
88
+ "presence": "present",
89
+ "mode": "100644",
90
+ "byteLength": 193,
91
+ "contentDigest": "sha256:9d1d08d0fb0e6c3898ecc343363f150c4e14bb363287807fb0b68b4f9f8b9d75"
92
+ },
93
+ {
94
+ "path": ".archcontext/model/nodes/interface.demo.resource.yaml",
95
+ "role": "node",
96
+ "requirement": "required",
97
+ "presence": "present",
98
+ "mode": "100644",
99
+ "byteLength": 179,
100
+ "contentDigest": "sha256:9bf569506f509ce277f39ff37c1c9f32a50ab75ec86871de37b08002a7cbbc5e"
101
+ },
102
+ {
103
+ "path": ".archcontext/model/nodes/module.demo.system.yaml",
104
+ "role": "node",
105
+ "requirement": "required",
106
+ "presence": "present",
107
+ "mode": "100644",
108
+ "byteLength": 161,
109
+ "contentDigest": "sha256:530859d02ef7a49fe4b7761a3114146b55387f03d67549259a9a529b81a1086b"
110
+ },
111
+ {
112
+ "path": ".archcontext/model/relations/relation.demo.call.yaml",
113
+ "role": "relation",
114
+ "requirement": "required",
115
+ "presence": "present",
116
+ "mode": "100644",
117
+ "byteLength": 188,
118
+ "contentDigest": "sha256:72a357da298a15ea4aaabe462f8863a0d6afe9bf158c3a9a406997ca84e96fd2"
119
+ },
120
+ {
121
+ "path": "AGENTS.md",
122
+ "role": "contract",
123
+ "requirement": "declared",
124
+ "presence": "present",
125
+ "mode": "100644",
126
+ "byteLength": 20,
127
+ "contentDigest": "sha256:7ca8b8dbdf0985eaa58d387e36600a98282e6f15ffbae2f48e62e219dcd14dd7"
128
+ },
129
+ {
130
+ "path": "CLAUDE.md",
131
+ "role": "contract",
132
+ "requirement": "declared",
133
+ "presence": "present",
134
+ "mode": "100644",
135
+ "byteLength": 0,
136
+ "contentDigest": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
137
+ },
138
+ {
139
+ "path": "docs/architecture/changelog.md",
140
+ "role": "document",
141
+ "requirement": "optional",
142
+ "presence": "missing",
143
+ "mode": null,
144
+ "byteLength": null,
145
+ "contentDigest": null
146
+ },
147
+ {
148
+ "path": "docs/architecture/decisions/index.md",
149
+ "role": "document",
150
+ "requirement": "optional",
151
+ "presence": "missing",
152
+ "mode": null,
153
+ "byteLength": null,
154
+ "contentDigest": null
155
+ },
156
+ {
157
+ "path": "docs/architecture/index.md",
158
+ "role": "document",
159
+ "requirement": "optional",
160
+ "presence": "missing",
161
+ "mode": null,
162
+ "byteLength": null,
163
+ "contentDigest": null
164
+ },
165
+ {
166
+ "path": "docs/architecture/modules/demo/feature.md",
167
+ "role": "document",
168
+ "requirement": "optional",
169
+ "presence": "present",
170
+ "mode": "100644",
171
+ "byteLength": 576,
172
+ "contentDigest": "sha256:70e675d5c78ca5eebe2631aacf1e4543c68d591098803578464ed03d6887cf84"
173
+ }
174
+ ],
175
+ "allowedNodeKinds": [
176
+ "capability",
177
+ "module",
178
+ "component",
179
+ "interface",
180
+ "event",
181
+ "datastore",
182
+ "external-system",
183
+ "deployment"
184
+ ],
185
+ "contextBudgetBytes": 64,
186
+ "model": {
187
+ "nodes": [
188
+ {
189
+ "extensions": {
190
+ "contractFiles": {
191
+ "agents": "AGENTS.md",
192
+ "claude": "CLAUDE.md"
193
+ }
194
+ },
195
+ "id": "capability.demo.feature",
196
+ "kind": "capability",
197
+ "name": "Demo",
198
+ "schemaVersion": "archcontext.node/v2",
199
+ "source": {
200
+ "include": [
201
+ "src/app/[locale]/**",
202
+ "src/a.ts",
203
+ "src/a-*.ts",
204
+ "**/*.ts"
205
+ ]
206
+ },
207
+ "status": "active",
208
+ "summary": "Complete native demo"
209
+ },
210
+ {
211
+ "criticality": "medium",
212
+ "extensions": {
213
+ "example": {
214
+ "preserved": true
215
+ }
216
+ },
217
+ "id": "component.demo.worker",
218
+ "interfaces": {
219
+ "provides": [
220
+ "worker"
221
+ ]
222
+ },
223
+ "kind": "component",
224
+ "name": "",
225
+ "notes": [
226
+ "Preserve fields"
227
+ ],
228
+ "ownership": {
229
+ "lifecycle": [
230
+ "demo"
231
+ ]
232
+ },
233
+ "parent": "module.demo.system",
234
+ "responsibilities": [
235
+ "Work"
236
+ ],
237
+ "riskDomains": [
238
+ "integrity"
239
+ ],
240
+ "schemaVersion": "archcontext.node/v2",
241
+ "source": {
242
+ "entrypoints": [
243
+ {
244
+ "id": "entrypoint.demo.worker",
245
+ "path": "src/worker.ts",
246
+ "symbols": [
247
+ {
248
+ "name": "run",
249
+ "sinks": [
250
+ {
251
+ "id": "sink.demo.done",
252
+ "path": "src/done.ts",
253
+ "symbol": "finish"
254
+ }
255
+ ]
256
+ }
257
+ ]
258
+ }
259
+ ],
260
+ "exclude": [
261
+ "src/worker.test.ts"
262
+ ],
263
+ "include": [
264
+ "src/worker.ts"
265
+ ]
266
+ },
267
+ "status": "planned",
268
+ "summary": ""
269
+ },
270
+ {
271
+ "id": "datastore.demo.resource",
272
+ "kind": "datastore",
273
+ "name": "datastore",
274
+ "parent": "capability.demo.feature",
275
+ "schemaVersion": "archcontext.node/v2",
276
+ "status": "deprecated",
277
+ "summary": "datastore"
278
+ },
279
+ {
280
+ "id": "deployment.demo.resource",
281
+ "kind": "deployment",
282
+ "name": "deployment",
283
+ "parent": "capability.demo.feature",
284
+ "schemaVersion": "archcontext.node/v2",
285
+ "status": "deprecated",
286
+ "summary": "deployment"
287
+ },
288
+ {
289
+ "id": "event.demo.resource",
290
+ "kind": "event",
291
+ "name": "event",
292
+ "parent": "capability.demo.feature",
293
+ "schemaVersion": "archcontext.node/v2",
294
+ "status": "removed",
295
+ "summary": "event"
296
+ },
297
+ {
298
+ "id": "external.demo.resource",
299
+ "kind": "external-system",
300
+ "name": "external-system",
301
+ "parent": "capability.demo.feature",
302
+ "schemaVersion": "archcontext.node/v2",
303
+ "status": "removed",
304
+ "summary": "external-system"
305
+ },
306
+ {
307
+ "id": "interface.demo.resource",
308
+ "kind": "interface",
309
+ "name": "interface",
310
+ "parent": "capability.demo.feature",
311
+ "schemaVersion": "archcontext.node/v2",
312
+ "status": "deprecated",
313
+ "summary": "interface"
314
+ },
315
+ {
316
+ "id": "module.demo.system",
317
+ "kind": "module",
318
+ "name": "System",
319
+ "parent": "capability.demo.feature",
320
+ "schemaVersion": "archcontext.node/v2",
321
+ "status": "active",
322
+ "summary": "System"
323
+ }
324
+ ],
325
+ "relations": [
326
+ {
327
+ "id": "relation.demo.call",
328
+ "intent": "",
329
+ "kind": "calls",
330
+ "schemaVersion": "archcontext.relation/v1",
331
+ "source": "interface.demo.resource",
332
+ "target": "component.demo.worker",
333
+ "via": "interface.demo.resource"
334
+ }
335
+ ],
336
+ "flows": [
337
+ {
338
+ "applicability": "not-applicable",
339
+ "capabilityId": "capability.demo.feature",
340
+ "id": "flow.demo.optional",
341
+ "name": "Not applicable",
342
+ "rationale": "No corresponding flow.",
343
+ "schemaVersion": "archcontext.flow/v1"
344
+ },
345
+ {
346
+ "applicability": "required",
347
+ "capabilityId": "capability.demo.feature",
348
+ "id": "flow.demo.primary",
349
+ "name": "Primary",
350
+ "outcomes": [
351
+ {
352
+ "id": "ok",
353
+ "kind": "success",
354
+ "label": "Success",
355
+ "steps": [
356
+ {
357
+ "evidence": {
358
+ "entrypointId": "entrypoint.demo.worker",
359
+ "sinkId": "sink.demo.done",
360
+ "sourceSymbol": "run"
361
+ },
362
+ "from": "worker",
363
+ "id": "ok",
364
+ "label": "ok",
365
+ "to": "caller"
366
+ }
367
+ ],
368
+ "terminal": {
369
+ "label": "Success",
370
+ "participant": "caller"
371
+ }
372
+ },
373
+ {
374
+ "id": "failed",
375
+ "kind": "error",
376
+ "label": "Error",
377
+ "steps": [
378
+ {
379
+ "evidence": {
380
+ "entrypointId": "entrypoint.demo.worker",
381
+ "sinkId": "sink.demo.done",
382
+ "sourceSymbol": "run"
383
+ },
384
+ "from": "worker",
385
+ "id": "failed",
386
+ "label": "failed",
387
+ "to": "caller"
388
+ }
389
+ ],
390
+ "terminal": {
391
+ "label": "Error",
392
+ "participant": "caller"
393
+ }
394
+ }
395
+ ],
396
+ "participants": [
397
+ {
398
+ "id": "caller",
399
+ "nodeId": "interface.demo.resource"
400
+ },
401
+ {
402
+ "id": "worker",
403
+ "nodeId": "component.demo.worker"
404
+ }
405
+ ],
406
+ "schemaVersion": "archcontext.flow/v1",
407
+ "steps": [
408
+ {
409
+ "evidence": {
410
+ "entrypointId": "entrypoint.demo.worker",
411
+ "sinkId": "sink.demo.done",
412
+ "sourceSymbol": "run"
413
+ },
414
+ "from": "caller",
415
+ "id": "request",
416
+ "label": "request",
417
+ "to": "worker"
418
+ }
419
+ ]
420
+ }
421
+ ],
422
+ "sourcePaths": {
423
+ "nodes": {
424
+ "capability.demo.feature": ".archcontext/model/nodes/capability.demo.feature.yaml",
425
+ "component.demo.worker": ".archcontext/model/nodes/component.demo.worker.yaml",
426
+ "datastore.demo.resource": ".archcontext/model/nodes/datastore.demo.resource.yaml",
427
+ "deployment.demo.resource": ".archcontext/model/nodes/deployment.demo.resource.yaml",
428
+ "event.demo.resource": ".archcontext/model/nodes/event.demo.resource.yaml",
429
+ "external.demo.resource": ".archcontext/model/nodes/external.demo.resource.yaml",
430
+ "interface.demo.resource": ".archcontext/model/nodes/interface.demo.resource.yaml",
431
+ "module.demo.system": ".archcontext/model/nodes/module.demo.system.yaml"
432
+ },
433
+ "relations": {
434
+ "relation.demo.call": ".archcontext/model/relations/relation.demo.call.yaml"
435
+ },
436
+ "flows": {
437
+ "flow.demo.optional": ".archcontext/model/flows/flow.demo.optional.yaml",
438
+ "flow.demo.primary": ".archcontext/model/flows/flow.demo.primary.yaml"
439
+ }
440
+ }
441
+ },
442
+ "capabilityProfiles": [
443
+ {
444
+ "nodeId": "capability.demo.feature",
445
+ "status": "active",
446
+ "domain": "demo",
447
+ "name": "feature",
448
+ "modulePath": "docs/architecture/modules/demo/feature.md",
449
+ "contractFiles": {
450
+ "agents": "AGENTS.md",
451
+ "claude": "CLAUDE.md"
452
+ },
453
+ "includeAnchors": [
454
+ "src",
455
+ "src/a.ts",
456
+ "src/app/[locale]"
457
+ ],
458
+ "lspProfile": null,
459
+ "verification": null,
460
+ "directChildNodeIds": [
461
+ "datastore.demo.resource",
462
+ "deployment.demo.resource",
463
+ "event.demo.resource",
464
+ "external.demo.resource",
465
+ "interface.demo.resource",
466
+ "module.demo.system"
467
+ ],
468
+ "componentNodeIds": [
469
+ "component.demo.worker"
470
+ ]
471
+ }
472
+ ],
473
+ "contracts": [
474
+ {
475
+ "path": "AGENTS.md",
476
+ "roles": [
477
+ "agents"
478
+ ],
479
+ "capabilityNodeIds": [
480
+ "capability.demo.feature"
481
+ ],
482
+ "presence": "present",
483
+ "text": "# Agent contract\r\n\r\n",
484
+ "byteLength": 20,
485
+ "byteDigest": "sha256:7ca8b8dbdf0985eaa58d387e36600a98282e6f15ffbae2f48e62e219dcd14dd7"
486
+ },
487
+ {
488
+ "path": "CLAUDE.md",
489
+ "roles": [
490
+ "claude"
491
+ ],
492
+ "capabilityNodeIds": [
493
+ "capability.demo.feature"
494
+ ],
495
+ "presence": "present",
496
+ "text": "",
497
+ "byteLength": 0,
498
+ "byteDigest": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
499
+ }
500
+ ],
501
+ "documents": [
502
+ {
503
+ "path": "docs/architecture/changelog.md",
504
+ "targetId": "projection_target.architecture.changelog",
505
+ "capabilityNodeIds": [
506
+ "capability.demo.feature"
507
+ ],
508
+ "presence": "missing",
509
+ "markerState": "missing",
510
+ "humanRegions": [],
511
+ "section3": {
512
+ "state": "missing",
513
+ "heading": null,
514
+ "bodyRanges": [],
515
+ "body": null
516
+ },
517
+ "backlog": {
518
+ "state": "missing",
519
+ "heading": null,
520
+ "bodyRanges": [],
521
+ "body": null
522
+ }
523
+ },
524
+ {
525
+ "path": "docs/architecture/decisions/index.md",
526
+ "targetId": "projection_target.decision.index",
527
+ "capabilityNodeIds": [
528
+ "capability.demo.feature"
529
+ ],
530
+ "presence": "missing",
531
+ "markerState": "missing",
532
+ "humanRegions": [],
533
+ "section3": {
534
+ "state": "missing",
535
+ "heading": null,
536
+ "bodyRanges": [],
537
+ "body": null
538
+ },
539
+ "backlog": {
540
+ "state": "missing",
541
+ "heading": null,
542
+ "bodyRanges": [],
543
+ "body": null
544
+ }
545
+ },
546
+ {
547
+ "path": "docs/architecture/index.md",
548
+ "targetId": "projection_target.architecture.index",
549
+ "capabilityNodeIds": [
550
+ "capability.demo.feature"
551
+ ],
552
+ "presence": "missing",
553
+ "markerState": "missing",
554
+ "humanRegions": [],
555
+ "section3": {
556
+ "state": "missing",
557
+ "heading": null,
558
+ "bodyRanges": [],
559
+ "body": null
560
+ },
561
+ "backlog": {
562
+ "state": "missing",
563
+ "heading": null,
564
+ "bodyRanges": [],
565
+ "body": null
566
+ }
567
+ },
568
+ {
569
+ "path": "docs/architecture/modules/demo/feature.md",
570
+ "targetId": "projection_target.entity.capability-demo-feature",
571
+ "capabilityNodeIds": [
572
+ "capability.demo.feature"
573
+ ],
574
+ "presence": "present",
575
+ "markerState": "present",
576
+ "humanRegions": [
577
+ {
578
+ "startByte": 0,
579
+ "endByte": 13,
580
+ "startLine": 1,
581
+ "endLine": 2,
582
+ "text": "# Demo\r\n\r\n"
583
+ },
584
+ {
585
+ "startByte": 354,
586
+ "endByte": 576,
587
+ "startLine": 6,
588
+ "endLine": 18,
589
+ "text": "\r\n## 3. P3: Design Decisions and Invariants\r\n\r\nHuman café 🧭.\r\n<!-- keep this comment -->\r\n```md\r\n## Example heading\r\n<!-- BEGIN ARCHCONTEXT:generated literal -->\r\n```\r\n### Nested detail\r\n\r\n## Optimization Backlog\r\n \t\r\n"
590
+ }
591
+ ],
592
+ "section3": {
593
+ "state": "present",
594
+ "heading": {
595
+ "text": "## 3. P3: Design Decisions and Invariants\r\n",
596
+ "range": {
597
+ "startByte": 356,
598
+ "endByte": 399,
599
+ "startLine": 7,
600
+ "endLine": 7
601
+ }
602
+ },
603
+ "bodyRanges": [
604
+ {
605
+ "startByte": 399,
606
+ "endByte": 547,
607
+ "startLine": 8,
608
+ "endLine": 16
609
+ }
610
+ ],
611
+ "body": "\r\nHuman café 🧭.\r\n<!-- keep this comment -->\r\n```md\r\n## Example heading\r\n<!-- BEGIN ARCHCONTEXT:generated literal -->\r\n```\r\n### Nested detail\r\n\r\n"
612
+ },
613
+ "backlog": {
614
+ "state": "empty",
615
+ "heading": {
616
+ "text": "## Optimization Backlog\r\n",
617
+ "range": {
618
+ "startByte": 547,
619
+ "endByte": 572,
620
+ "startLine": 17,
621
+ "endLine": 17
622
+ }
623
+ },
624
+ "bodyRanges": [
625
+ {
626
+ "startByte": 572,
627
+ "endByte": 576,
628
+ "startLine": 18,
629
+ "endLine": 18
630
+ }
631
+ ],
632
+ "body": " \t\r\n"
633
+ }
634
+ }
635
+ ]
636
+ }