@tea-agent/loop-agent 0.40.0-next.2 → 0.40.0-next.3

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 (136) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +8 -2
  3. package/README.md +2 -2
  4. package/dist/application/task-lifecycle/advance.js +12 -0
  5. package/dist/build-stamp.json +3 -3
  6. package/dist/cli/update/runtime-activity.js +1 -29
  7. package/dist/commands/dag-rerun.js +1 -1
  8. package/dist/shared/dag-prompt-override.js +4 -5
  9. package/dist/shared/update/npm-client.js +33 -11
  10. package/dist/task/contract/apply.js +11 -1
  11. package/dist/task/contract/constants.js +2 -0
  12. package/dist/task/contract/hash.js +3 -0
  13. package/dist/task/contract/observe.js +25 -4
  14. package/dist/task/contract/paths.js +2 -1
  15. package/dist/task/contract/project.js +15 -1
  16. package/dist/task/contract/schema.js +2 -0
  17. package/dist/task/contract/transaction.js +12 -0
  18. package/dist/task/source-prepare/completeness.js +188 -0
  19. package/dist/task/source-prepare/fragment-inventory.js +474 -0
  20. package/dist/task/source-prepare/index.js +3 -0
  21. package/dist/task/source-prepare/ledger-reconciliation.js +127 -0
  22. package/dist/task/source-prepare/ledger-review.js +214 -0
  23. package/dist/task/source-prepare/ledger.js +545 -0
  24. package/dist/task/source-prepare/prepare.js +262 -1
  25. package/dist/task/source-prepare/semantic-intake.js +19 -3
  26. package/dist/task/source-prepare/source-fidelity-pi.js +384 -0
  27. package/dist/task/source-prepare/types.js +22 -0
  28. package/dist/worker/cli.js +12 -26
  29. package/dist/worker/console/console-handoff.js +82 -0
  30. package/dist/worker/console/console-update-and-init.js +115 -0
  31. package/dist/worker/console/console-update-runtime.js +84 -0
  32. package/dist/worker/console/draft-store.js +49 -0
  33. package/dist/worker/console/operation-store.js +1 -1
  34. package/dist/worker/console/operator-actions.js +129 -4
  35. package/dist/worker/console/operator-surface-health.js +1 -0
  36. package/dist/worker/console/prd-intake-bridge.js +13 -0
  37. package/dist/worker/console/routes.js +3 -0
  38. package/dist/worker/console/server.js +73 -5
  39. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-DLMldIE8.js → abnfDiagram-N423BO3Z-CTx1TrNa.js} +1 -1
  40. package/dist/worker/console/static/assets/{arc-DVOg1dSW.js → arc-B4i9cVxX.js} +1 -1
  41. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-715v7joo.js → architectureDiagram-T3A2C74G-BAXE8_Rl.js} +1 -1
  42. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-BtMEGtAQ.js → blockDiagram-VBNYF7ZC-C5Xh59at.js} +1 -1
  43. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-qUxXsdxu.js → c4Diagram-5PPSVZJV-B_asOzAu.js} +1 -1
  44. package/dist/worker/console/static/assets/channel-Dj_4Moei.js +1 -0
  45. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-BYMag72f.js → chunk-2GRJ4B5K-wRO_iRNc.js} +1 -1
  46. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-C5jt5rtx.js → chunk-2Q5K7J3B-ByOaSh_G.js} +1 -1
  47. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DvZghfS2.js → chunk-5RXB4S5H-DjLzudan.js} +1 -1
  48. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-CXutxAmY.js → chunk-5VM5RSS4-JCNGkXYT.js} +1 -1
  49. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BkANIDWk.js → chunk-6Q2QTUOP-BhrPXXMZ.js} +1 -1
  50. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Bwy1wwlr.js → chunk-GF5L2VYU-TJ5JuEBT.js} +1 -1
  51. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-D3pWYVCG.js → chunk-JWPE2WC7-VVthn_mD.js} +1 -1
  52. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DRzjzmFD.js → chunk-KBJHAD2P-D60-Mny4.js} +1 -1
  53. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-C4xXDxXL.js → chunk-RYQCIY6F-zXv7aVye.js} +1 -1
  54. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-BngIZ90b.js → chunk-XXDRQBXY-By9VQoi1.js} +1 -1
  55. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0YYAyCa.js +1 -0
  56. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0YYAyCa.js +1 -0
  57. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-B40ACoFn.js → cose-bilkent-JH36ORCC-C4zQLe-M.js} +1 -1
  58. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BE-1ZRAI.js → cynefin-VYW2F7L2-wh5N2ReN.js} +1 -1
  59. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-BoYbwVTh.js → cynefinDiagram-MW4NZA55-Dlu5wIqs.js} +1 -1
  60. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-B5-KA0fK.js → dagre-VZM6K2ZE-CrDgthc6.js} +1 -1
  61. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-DJpCToT5.js → diagram-7IWD3JNH-zN1clg27.js} +1 -1
  62. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-De8R04Ng.js → diagram-B4RE2ZJO-BN-o7J7-.js} +1 -1
  63. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-BU1N8DiA.js → diagram-LBJQPF4R-C8SuPt0d.js} +1 -1
  64. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-BUUUzSYI.js → diagram-Q27KOJAE-BoizuHbZ.js} +1 -1
  65. package/dist/worker/console/static/assets/{diagram-UB23O5K3-zLoT1RC4.js → diagram-UB23O5K3-BzUzXixG.js} +1 -1
  66. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-_q4-4N8c.js → ebnfDiagram-BXEA7PRR-Ev3lA4Cf.js} +1 -1
  67. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-CTqzoNSL.js → erDiagram-JOGREHBK-GALUzRbs.js} +1 -1
  68. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-CMKSYKJM.js → flowDiagram-UKHOOZJN-CZJN65Sb.js} +1 -1
  69. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-Dj6U8Sb7.js → ganttDiagram-PKOTCBZU-JLB9OESl.js} +1 -1
  70. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-BfoxVYky.js → gitGraphDiagram-DS77QQ5N-CcvCr4GD.js} +1 -1
  71. package/dist/worker/console/static/assets/{index-CA0nQEbb.js → index-CW88Fjbw.js} +81 -81
  72. package/dist/worker/console/static/assets/index-DP0ZJl39.css +1 -0
  73. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-T5NfvHGV.js → infoDiagram-6WML65LV-HG5z7aVg.js} +1 -1
  74. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-BEhUMkut.js → ishikawaDiagram-WSZJBQD7-BHEu9chR.js} +1 -1
  75. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-B2Ld6nNt.js → journeyDiagram-NVQOT4AX-Cp_Up8-a.js} +1 -1
  76. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-nV9T85yS.js → kanban-definition-27J2QSJJ-DvVeY-em.js} +1 -1
  77. package/dist/worker/console/static/assets/{linear-CIO1zDYh.js → linear-aGmcjgTn.js} +1 -1
  78. package/dist/worker/console/static/assets/{mermaid.core-B_ucAqLq.js → mermaid.core-Biyo-tqA.js} +5 -5
  79. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-BIA3VNcZ.js → mindmap-definition-FAOFIHXS-DyxY2pIb.js} +1 -1
  80. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-CNzLjNV3.js → pegDiagram-VL7TDLO6-CkdGuc50.js} +1 -1
  81. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-PWytzfc_.js → pieDiagram-7S7Q4E2Y-NNQI9xVR.js} +1 -1
  82. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-CS0wGoIq.js → quadrantDiagram-CIZ2JOQS-PAJkuz_G.js} +1 -1
  83. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-C3Wsqph8.js → railroadDiagram-AXF67PYL-ZwrQod0O.js} +1 -1
  84. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DF6FDTYg.js → requirementDiagram-LRYGKXZP-D3ZfrzM2.js} +1 -1
  85. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-BdQUJm6y.js → sankeyDiagram-W5VNT64P-DDGFmWk5.js} +1 -1
  86. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-Bv9rppGg.js → sequenceDiagram-SI44F4Z6-DO6mmXTA.js} +1 -1
  87. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-C3Hpvb_B.js → sizeCapture-X5ZJPWSS-DMbCQiJt.js} +1 -1
  88. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-CZOWLpno.js → stateDiagram-OKZ733FA-Di_YUEfC.js} +1 -1
  89. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DrdDvela.js +1 -0
  90. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CPQRIZx5.js → swimlanes-SLNWSIFB-Bn2PphNJ.js} +2 -2
  91. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DPkEAULl.js +8 -0
  92. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CkwM9BgA.js → timeline-definition-Z64GVDOM-DPh8pRsp.js} +1 -1
  93. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-wGSoDzYc.js → vennDiagram-T6HMQDX7-GMfl26pW.js} +1 -1
  94. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-GNVas2gx.js → wardleyDiagram-T6FBY63Y-DTlmVrmF.js} +1 -1
  95. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-C5USnHw7.js → xychartDiagram-ELKLHX3M-YGBjKAS5.js} +1 -1
  96. package/dist/worker/console/static/index.html +2 -2
  97. package/dist/worker/console/static-src/app/console-types.js +40 -1
  98. package/dist/worker/console/static-src/app/useOperatorActions.js +5 -0
  99. package/dist/worker/console/static-src/app/useTaskWizard.js +73 -1
  100. package/dist/worker/observability/init-runtime-activity.js +26 -0
  101. package/dist/worker/observe/node-input.js +88 -2
  102. package/dist/worker/observe/routes.js +188 -0
  103. package/dist/worker/observe/static/api.js +3 -3
  104. package/dist/worker/observe/static/dag-node-purpose.d.ts +6 -0
  105. package/dist/worker/observe/static/dag-node-purpose.js +203 -0
  106. package/dist/worker/observe/static/format.js +37 -0
  107. package/dist/worker/observe/static/index.html +5 -0
  108. package/dist/worker/observe/static/prompt-restart-candidates.d.ts +18 -0
  109. package/dist/worker/observe/static/prompt-restart-candidates.js +36 -0
  110. package/dist/worker/observe/static/state.js +2 -2
  111. package/dist/worker/observe/static/styles.css +338 -35
  112. package/dist/worker/observe/static/views/dag-graph.js +4 -2
  113. package/dist/worker/observe/static/views/dag-inspector.js +531 -78
  114. package/dist/worker/observe/static/views/dag.d.ts +13 -0
  115. package/dist/worker/observe/static/views/dag.js +4 -3
  116. package/dist/worker/observe/static/views/task.js +55 -0
  117. package/dist/workflows/dag/frontend-implementation-contract.js +88 -2
  118. package/dist/workflows/dag/frontend-plan-render.js +24 -0
  119. package/dist/workflows/dag/frontend-prewrite-gate.js +197 -0
  120. package/dist/workflows/dag/frontend-review-context.js +92 -10
  121. package/dist/workflows/dag/init-hybrid.js +125 -4
  122. package/dist/workflows/dag/node-execution.js +45 -0
  123. package/dist/workflows/dag/types.js +42 -11
  124. package/docs/README.md +1 -0
  125. package/docs/architecture/evolution.md +45 -0
  126. package/docs/init-surface.manifest.json +1 -0
  127. package/docs/templates/README.md +1 -1
  128. package/docs/templates/frontend-implementation-contract.schema.json +681 -24
  129. package/package.json +1 -1
  130. package/skills/loop-agent/references/hybrid-dag.md +7 -0
  131. package/dist/worker/console/static/assets/channel-BG6TLen_.js +0 -1
  132. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-GuyUqs0h.js +0 -1
  133. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-GuyUqs0h.js +0 -1
  134. package/dist/worker/console/static/assets/index-C3GgHg-g.css +0 -1
  135. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Dgsvn63q.js +0 -1
  136. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DaNfG1BJ.js +0 -8
@@ -4,32 +4,689 @@
4
4
  "title": "Frontend Implementation Contract v1",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
- "required": ["schemaVersion", "sourceBinding", "riskLevel", "targets", "requirements", "uiStates", "interactions", "mockApi", "designEvidence", "verificationTargets", "evidenceGaps"],
7
+ "required": [
8
+ "schemaVersion",
9
+ "sourceBinding",
10
+ "riskLevel",
11
+ "targets",
12
+ "requirements",
13
+ "uiStates",
14
+ "interactions",
15
+ "mockApi",
16
+ "designEvidence",
17
+ "verificationTargets",
18
+ "evidenceGaps"
19
+ ],
8
20
  "properties": {
9
- "schemaVersion": { "const": 1 },
10
- "sourceBinding": { "$ref": "#/$defs/sourceBinding" },
11
- "riskLevel": { "enum": ["small", "standard", "high-risk"] },
12
- "targets": { "type": "object", "additionalProperties": false, "required": ["files"], "properties": { "files": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/path" } }, "routes": { "type": "array", "items": { "type": "string", "pattern": "^/" } }, "publicApiChanges": { "type": "array", "items": { "type": "string", "minLength": 1 } } } },
13
- "requirements": { "type": "array", "minItems": 1, "items": { "type": "object", "additionalProperties": false, "required": ["id", "expectedOutcome", "implementationTargets", "verificationTargetIds"], "properties": { "id": { "$ref": "#/$defs/requirementId" }, "expectedOutcome": { "type": "string", "minLength": 1 }, "implementationTargets": { "type": "array", "items": { "$ref": "#/$defs/path" } }, "verificationTargetIds": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "evidenceGap": { "$ref": "#/$defs/gap" } } } },
14
- "uiStates": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["name", "applicable"], "properties": { "name": { "type": "string", "minLength": 1 }, "applicable": { "type": "boolean" }, "expectedBehavior": { "type": "string", "minLength": 1 }, "implementationTargets": { "type": "array", "items": { "$ref": "#/$defs/path" } }, "verificationTargetIds": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "notApplicableReason": { "type": "string", "minLength": 1 } }, "allOf": [{ "if": { "properties": { "applicable": { "const": true } }, "required": ["applicable"] }, "then": { "required": ["expectedBehavior", "implementationTargets", "verificationTargetIds"], "properties": { "implementationTargets": { "minItems": 1 }, "verificationTargetIds": { "minItems": 1 } } } }, { "if": { "properties": { "applicable": { "const": false } }, "required": ["applicable"] }, "then": { "required": ["notApplicableReason"] } }] } },
15
- "interactions": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["name", "trigger", "expectedBehavior", "implementationTargets", "verificationTargetIds"], "properties": { "name": { "type": "string", "minLength": 1 }, "trigger": { "type": "string", "minLength": 1 }, "expectedBehavior": { "type": "string", "minLength": 1 }, "implementationTargets": { "type": "array", "items": { "$ref": "#/$defs/path" } }, "verificationTargetIds": { "type": "array", "items": { "type": "string" } } } } },
16
- "mockApi": { "type": "object", "additionalProperties": false, "required": ["strategy", "productionDefaultOff", "activation", "endpoints"], "properties": { "strategy": { "enum": ["native", "browser-intercept", "request-adapter", "not-needed"] }, "productionDefaultOff": { "const": true }, "activation": { "type": ["string", "null"], "minLength": 1 }, "endpoints": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["method", "path"], "properties": { "method": { "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"] }, "path": { "type": "string", "pattern": "^/" }, "fixture": { "anyOf": [{ "$ref": "#/$defs/path" }, { "type": "null" }] }, "consumer": { "anyOf": [{ "$ref": "#/$defs/path" }, { "type": "null" }] } } } } } },
17
- "designEvidence": { "type": "object", "additionalProperties": false, "required": ["source", "paths", "conflicts"], "properties": { "source": { "type": "string", "minLength": 1 }, "paths": { "type": "array", "items": { "$ref": "#/$defs/path" } }, "conflicts": { "type": "array", "items": { "type": "string", "minLength": 1 } } } },
18
- "verificationTargets": { "type": "array", "minItems": 1, "items": { "type": "object", "additionalProperties": false, "required": ["id", "type", "commandLabel", "file", "requirementIds", "uiStates"], "properties": { "id": { "type": "string", "minLength": 1 }, "type": { "enum": ["static", "unit", "component", "integration", "mock"] }, "commandLabel": { "type": "string", "minLength": 1 }, "file": { "$ref": "#/$defs/path" }, "symbol": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] }, "requirementIds": { "type": "array", "items": { "$ref": "#/$defs/requirementId" } }, "uiStates": { "type": "array", "items": { "type": "string", "minLength": 1 } } } } },
19
- "evidenceGaps": { "type": "array", "items": { "$ref": "#/$defs/gap" } },
20
- "implementationSteps": { "type": "array", "items": { "type": "string", "minLength": 1 } },
21
- "stylingStrategy": { "type": "string", "minLength": 1 },
22
- "uiComponentChoices": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["purpose", "component", "decision", "rationale"], "properties": { "purpose": { "type": "string", "minLength": 1 }, "component": { "type": "string", "minLength": 1 }, "decision": { "enum": ["specified", "reuse-existing", "new"] }, "specReference": { "anyOf": [{ "$ref": "#/$defs/uiComponentSpecReference" }, { "type": "null" }] }, "rationale": { "type": "string", "minLength": 1 } }, "allOf": [ { "if": { "properties": { "decision": { "const": "specified" } }, "required": ["decision"] }, "then": { "required": ["specReference"], "properties": { "specReference": { "$ref": "#/$defs/uiComponentSpecReference" } } } }, { "if": { "properties": { "decision": { "const": "new" } }, "required": ["decision"] }, "then": { "properties": { "specReference": { "type": "null" } } } } ] } },
23
- "dependencyPolicy": { "type": "string", "minLength": 1 },
24
- "residualRisks": { "type": "array", "items": { "type": "string", "minLength": 1 } },
25
- "realIntegrationGap": { "type": "string", "minLength": 1 }
21
+ "schemaVersion": {
22
+ "const": 1
23
+ },
24
+ "sourceBinding": {
25
+ "$ref": "#/$defs/sourceBinding"
26
+ },
27
+ "riskLevel": {
28
+ "enum": [
29
+ "small",
30
+ "standard",
31
+ "high-risk"
32
+ ]
33
+ },
34
+ "targets": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": [
38
+ "files"
39
+ ],
40
+ "properties": {
41
+ "files": {
42
+ "type": "array",
43
+ "minItems": 1,
44
+ "items": {
45
+ "$ref": "#/$defs/path"
46
+ }
47
+ },
48
+ "routes": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "string",
52
+ "pattern": "^/"
53
+ }
54
+ },
55
+ "publicApiChanges": {
56
+ "type": "array",
57
+ "items": {
58
+ "type": "string",
59
+ "minLength": 1
60
+ }
61
+ }
62
+ }
63
+ },
64
+ "requirements": {
65
+ "type": "array",
66
+ "minItems": 1,
67
+ "items": {
68
+ "type": "object",
69
+ "additionalProperties": false,
70
+ "required": [
71
+ "id",
72
+ "expectedOutcome",
73
+ "implementationTargets",
74
+ "verificationTargetIds"
75
+ ],
76
+ "properties": {
77
+ "id": {
78
+ "$ref": "#/$defs/requirementId"
79
+ },
80
+ "expectedOutcome": {
81
+ "type": "string",
82
+ "minLength": 1
83
+ },
84
+ "implementationTargets": {
85
+ "type": "array",
86
+ "items": {
87
+ "$ref": "#/$defs/path"
88
+ }
89
+ },
90
+ "verificationTargetIds": {
91
+ "type": "array",
92
+ "items": {
93
+ "type": "string",
94
+ "minLength": 1
95
+ }
96
+ },
97
+ "evidenceGap": {
98
+ "$ref": "#/$defs/gap"
99
+ },
100
+ "sourceFragmentIds": {
101
+ "type": "array",
102
+ "items": {
103
+ "type": "string",
104
+ "minLength": 1
105
+ }
106
+ },
107
+ "sourceRefs": {
108
+ "type": "array",
109
+ "items": {
110
+ "$ref": "#/$defs/path"
111
+ }
112
+ }
113
+ }
114
+ }
115
+ },
116
+ "uiStates": {
117
+ "type": "array",
118
+ "items": {
119
+ "type": "object",
120
+ "additionalProperties": false,
121
+ "required": [
122
+ "name",
123
+ "applicable"
124
+ ],
125
+ "properties": {
126
+ "name": {
127
+ "type": "string",
128
+ "minLength": 1
129
+ },
130
+ "applicable": {
131
+ "type": "boolean"
132
+ },
133
+ "expectedBehavior": {
134
+ "type": "string",
135
+ "minLength": 1
136
+ },
137
+ "implementationTargets": {
138
+ "type": "array",
139
+ "items": {
140
+ "$ref": "#/$defs/path"
141
+ }
142
+ },
143
+ "verificationTargetIds": {
144
+ "type": "array",
145
+ "items": {
146
+ "type": "string",
147
+ "minLength": 1
148
+ }
149
+ },
150
+ "notApplicableReason": {
151
+ "type": "string",
152
+ "minLength": 1
153
+ }
154
+ },
155
+ "allOf": [
156
+ {
157
+ "if": {
158
+ "properties": {
159
+ "applicable": {
160
+ "const": true
161
+ }
162
+ },
163
+ "required": [
164
+ "applicable"
165
+ ]
166
+ },
167
+ "then": {
168
+ "required": [
169
+ "expectedBehavior",
170
+ "implementationTargets",
171
+ "verificationTargetIds"
172
+ ],
173
+ "properties": {
174
+ "implementationTargets": {
175
+ "minItems": 1
176
+ },
177
+ "verificationTargetIds": {
178
+ "minItems": 1
179
+ }
180
+ }
181
+ }
182
+ },
183
+ {
184
+ "if": {
185
+ "properties": {
186
+ "applicable": {
187
+ "const": false
188
+ }
189
+ },
190
+ "required": [
191
+ "applicable"
192
+ ]
193
+ },
194
+ "then": {
195
+ "required": [
196
+ "notApplicableReason"
197
+ ]
198
+ }
199
+ }
200
+ ]
201
+ }
202
+ },
203
+ "interactions": {
204
+ "type": "array",
205
+ "items": {
206
+ "type": "object",
207
+ "additionalProperties": false,
208
+ "required": [
209
+ "name",
210
+ "trigger",
211
+ "expectedBehavior",
212
+ "implementationTargets",
213
+ "verificationTargetIds"
214
+ ],
215
+ "properties": {
216
+ "name": {
217
+ "type": "string",
218
+ "minLength": 1
219
+ },
220
+ "trigger": {
221
+ "type": "string",
222
+ "minLength": 1
223
+ },
224
+ "expectedBehavior": {
225
+ "type": "string",
226
+ "minLength": 1
227
+ },
228
+ "implementationTargets": {
229
+ "type": "array",
230
+ "items": {
231
+ "$ref": "#/$defs/path"
232
+ }
233
+ },
234
+ "verificationTargetIds": {
235
+ "type": "array",
236
+ "items": {
237
+ "type": "string"
238
+ }
239
+ }
240
+ }
241
+ }
242
+ },
243
+ "mockApi": {
244
+ "type": "object",
245
+ "additionalProperties": false,
246
+ "required": [
247
+ "strategy",
248
+ "productionDefaultOff",
249
+ "activation",
250
+ "endpoints"
251
+ ],
252
+ "properties": {
253
+ "strategy": {
254
+ "enum": [
255
+ "native",
256
+ "browser-intercept",
257
+ "request-adapter",
258
+ "not-needed"
259
+ ]
260
+ },
261
+ "productionDefaultOff": {
262
+ "const": true
263
+ },
264
+ "activation": {
265
+ "type": [
266
+ "string",
267
+ "null"
268
+ ],
269
+ "minLength": 1
270
+ },
271
+ "endpoints": {
272
+ "type": "array",
273
+ "items": {
274
+ "type": "object",
275
+ "additionalProperties": false,
276
+ "required": [
277
+ "method",
278
+ "path"
279
+ ],
280
+ "properties": {
281
+ "method": {
282
+ "enum": [
283
+ "GET",
284
+ "POST",
285
+ "PUT",
286
+ "PATCH",
287
+ "DELETE",
288
+ "HEAD",
289
+ "OPTIONS"
290
+ ]
291
+ },
292
+ "path": {
293
+ "type": "string",
294
+ "pattern": "^/"
295
+ },
296
+ "fixture": {
297
+ "anyOf": [
298
+ {
299
+ "$ref": "#/$defs/path"
300
+ },
301
+ {
302
+ "type": "null"
303
+ }
304
+ ]
305
+ },
306
+ "consumer": {
307
+ "anyOf": [
308
+ {
309
+ "$ref": "#/$defs/path"
310
+ },
311
+ {
312
+ "type": "null"
313
+ }
314
+ ]
315
+ }
316
+ }
317
+ }
318
+ }
319
+ }
320
+ },
321
+ "designEvidence": {
322
+ "type": "object",
323
+ "additionalProperties": false,
324
+ "required": [
325
+ "source",
326
+ "paths",
327
+ "conflicts"
328
+ ],
329
+ "properties": {
330
+ "source": {
331
+ "type": "string",
332
+ "minLength": 1
333
+ },
334
+ "paths": {
335
+ "type": "array",
336
+ "items": {
337
+ "$ref": "#/$defs/path"
338
+ }
339
+ },
340
+ "conflicts": {
341
+ "type": "array",
342
+ "items": {
343
+ "type": "string",
344
+ "minLength": 1
345
+ }
346
+ }
347
+ }
348
+ },
349
+ "verificationTargets": {
350
+ "type": "array",
351
+ "minItems": 1,
352
+ "items": {
353
+ "type": "object",
354
+ "additionalProperties": false,
355
+ "required": [
356
+ "id",
357
+ "type",
358
+ "commandLabel",
359
+ "file",
360
+ "requirementIds",
361
+ "uiStates"
362
+ ],
363
+ "properties": {
364
+ "id": {
365
+ "type": "string",
366
+ "minLength": 1
367
+ },
368
+ "type": {
369
+ "enum": [
370
+ "static",
371
+ "unit",
372
+ "component",
373
+ "integration",
374
+ "mock"
375
+ ]
376
+ },
377
+ "commandLabel": {
378
+ "type": "string",
379
+ "minLength": 1
380
+ },
381
+ "file": {
382
+ "$ref": "#/$defs/path"
383
+ },
384
+ "symbol": {
385
+ "anyOf": [
386
+ {
387
+ "type": "string",
388
+ "minLength": 1
389
+ },
390
+ {
391
+ "type": "null"
392
+ }
393
+ ]
394
+ },
395
+ "requirementIds": {
396
+ "type": "array",
397
+ "items": {
398
+ "$ref": "#/$defs/requirementId"
399
+ }
400
+ },
401
+ "uiStates": {
402
+ "type": "array",
403
+ "items": {
404
+ "type": "string",
405
+ "minLength": 1
406
+ }
407
+ }
408
+ }
409
+ }
410
+ },
411
+ "evidenceGaps": {
412
+ "type": "array",
413
+ "items": {
414
+ "$ref": "#/$defs/gap"
415
+ }
416
+ },
417
+ "implementationSteps": {
418
+ "type": "array",
419
+ "items": {
420
+ "type": "string",
421
+ "minLength": 1
422
+ }
423
+ },
424
+ "stylingStrategy": {
425
+ "type": "string",
426
+ "minLength": 1
427
+ },
428
+ "uiComponentChoices": {
429
+ "type": "array",
430
+ "items": {
431
+ "type": "object",
432
+ "additionalProperties": false,
433
+ "required": [
434
+ "purpose",
435
+ "component",
436
+ "decision",
437
+ "rationale"
438
+ ],
439
+ "properties": {
440
+ "purpose": {
441
+ "type": "string",
442
+ "minLength": 1
443
+ },
444
+ "component": {
445
+ "type": "string",
446
+ "minLength": 1
447
+ },
448
+ "decision": {
449
+ "enum": [
450
+ "specified",
451
+ "reuse-existing",
452
+ "new"
453
+ ]
454
+ },
455
+ "specReference": {
456
+ "anyOf": [
457
+ {
458
+ "$ref": "#/$defs/uiComponentSpecReference"
459
+ },
460
+ {
461
+ "type": "null"
462
+ }
463
+ ]
464
+ },
465
+ "rationale": {
466
+ "type": "string",
467
+ "minLength": 1
468
+ }
469
+ },
470
+ "allOf": [
471
+ {
472
+ "if": {
473
+ "properties": {
474
+ "decision": {
475
+ "const": "specified"
476
+ }
477
+ },
478
+ "required": [
479
+ "decision"
480
+ ]
481
+ },
482
+ "then": {
483
+ "required": [
484
+ "specReference"
485
+ ],
486
+ "properties": {
487
+ "specReference": {
488
+ "$ref": "#/$defs/uiComponentSpecReference"
489
+ }
490
+ }
491
+ }
492
+ },
493
+ {
494
+ "if": {
495
+ "properties": {
496
+ "decision": {
497
+ "const": "new"
498
+ }
499
+ },
500
+ "required": [
501
+ "decision"
502
+ ]
503
+ },
504
+ "then": {
505
+ "properties": {
506
+ "specReference": {
507
+ "type": "null"
508
+ }
509
+ }
510
+ }
511
+ }
512
+ ]
513
+ }
514
+ },
515
+ "dependencyPolicy": {
516
+ "type": "string",
517
+ "minLength": 1
518
+ },
519
+ "residualRisks": {
520
+ "type": "array",
521
+ "items": {
522
+ "type": "string",
523
+ "minLength": 1
524
+ }
525
+ },
526
+ "realIntegrationGap": {
527
+ "type": "string",
528
+ "minLength": 1
529
+ }
26
530
  },
27
- "allOf": [{ "if": { "properties": { "mockApi": { "properties": { "strategy": { "enum": ["native", "browser-intercept", "request-adapter"] } } } } }, "then": { "properties": { "mockApi": { "properties": { "endpoints": { "minItems": 1, "items": { "required": ["method", "path", "fixture", "consumer"] } } } } } } }],
531
+ "allOf": [
532
+ {
533
+ "if": {
534
+ "properties": {
535
+ "mockApi": {
536
+ "properties": {
537
+ "strategy": {
538
+ "enum": [
539
+ "native",
540
+ "browser-intercept",
541
+ "request-adapter"
542
+ ]
543
+ }
544
+ }
545
+ }
546
+ }
547
+ },
548
+ "then": {
549
+ "properties": {
550
+ "mockApi": {
551
+ "properties": {
552
+ "endpoints": {
553
+ "minItems": 1,
554
+ "items": {
555
+ "required": [
556
+ "method",
557
+ "path",
558
+ "fixture",
559
+ "consumer"
560
+ ]
561
+ }
562
+ }
563
+ }
564
+ }
565
+ }
566
+ }
567
+ }
568
+ ],
28
569
  "$defs": {
29
- "path": { "type": "string", "minLength": 1, "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$" },
30
- "requirementId": { "type": "string", "pattern": "^(?:REQ|BR|AC)-[A-Z0-9]+(?:-[A-Z0-9]+)*$" },
31
- "gap": { "type": "object", "additionalProperties": false, "required": ["description", "blocking"], "properties": { "requirementId": { "$ref": "#/$defs/requirementId" }, "description": { "type": "string", "minLength": 1 }, "blocking": { "type": "boolean" } } },
32
- "sourceBinding": { "type": "object", "additionalProperties": false, "required": ["taskId", "requirementPath", "requirementSha256", "referencePaths", "requirementIds"], "properties": { "taskId": { "type": "string", "minLength": 1 }, "requirementPath": { "$ref": "#/$defs/path" }, "requirementSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "referencePaths": { "type": "array", "items": { "$ref": "#/$defs/path" } }, "requirementIds": { "type": "array", "items": { "$ref": "#/$defs/requirementId" } } } },
33
- "uiComponentSpecReference": { "type": "object", "additionalProperties": false, "required": ["path", "section"], "properties": { "path": { "$ref": "#/$defs/path" }, "section": { "type": "string" }, "line": { "anyOf": [{ "type": "integer" }, { "type": "null" }] } } }
570
+ "path": {
571
+ "type": "string",
572
+ "minLength": 1,
573
+ "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$"
574
+ },
575
+ "requirementId": {
576
+ "type": "string",
577
+ "pattern": "^(?:REQ|BR|AC)-[A-Z0-9]+(?:-[A-Z0-9]+)*$"
578
+ },
579
+ "gap": {
580
+ "type": "object",
581
+ "additionalProperties": false,
582
+ "required": [
583
+ "description",
584
+ "blocking"
585
+ ],
586
+ "properties": {
587
+ "requirementId": {
588
+ "$ref": "#/$defs/requirementId"
589
+ },
590
+ "description": {
591
+ "type": "string",
592
+ "minLength": 1
593
+ },
594
+ "blocking": {
595
+ "type": "boolean"
596
+ }
597
+ }
598
+ },
599
+ "sourceBinding": {
600
+ "type": "object",
601
+ "additionalProperties": false,
602
+ "required": [
603
+ "taskId",
604
+ "requirementPath",
605
+ "requirementSha256",
606
+ "referencePaths",
607
+ "requirementIds"
608
+ ],
609
+ "allOf": [
610
+ {
611
+ "if": {
612
+ "required": ["ledgerPath"]
613
+ },
614
+ "then": {
615
+ "required": ["ledgerSha256", "inputDigest", "requirementToFragments"]
616
+ }
617
+ }
618
+ ],
619
+ "properties": {
620
+ "taskId": {
621
+ "type": "string",
622
+ "minLength": 1
623
+ },
624
+ "requirementPath": {
625
+ "$ref": "#/$defs/path"
626
+ },
627
+ "requirementSha256": {
628
+ "type": "string",
629
+ "pattern": "^[a-f0-9]{64}$"
630
+ },
631
+ "referencePaths": {
632
+ "type": "array",
633
+ "items": {
634
+ "$ref": "#/$defs/path"
635
+ }
636
+ },
637
+ "requirementIds": {
638
+ "type": "array",
639
+ "items": {
640
+ "$ref": "#/$defs/requirementId"
641
+ }
642
+ },
643
+ "ledgerPath": {
644
+ "$ref": "#/$defs/path"
645
+ },
646
+ "ledgerSha256": {
647
+ "type": "string",
648
+ "pattern": "^[a-f0-9]{64}$"
649
+ },
650
+ "inputDigest": {
651
+ "type": "string",
652
+ "pattern": "^[a-f0-9]{64}$"
653
+ },
654
+ "requirementToFragments": {
655
+ "type": "object",
656
+ "additionalProperties": {
657
+ "type": "array",
658
+ "items": {
659
+ "type": "string"
660
+ }
661
+ }
662
+ }
663
+ }
664
+ },
665
+ "uiComponentSpecReference": {
666
+ "type": "object",
667
+ "additionalProperties": false,
668
+ "required": [
669
+ "path",
670
+ "section"
671
+ ],
672
+ "properties": {
673
+ "path": {
674
+ "$ref": "#/$defs/path"
675
+ },
676
+ "section": {
677
+ "type": "string"
678
+ },
679
+ "line": {
680
+ "anyOf": [
681
+ {
682
+ "type": "integer"
683
+ },
684
+ {
685
+ "type": "null"
686
+ }
687
+ ]
688
+ }
689
+ }
690
+ }
34
691
  }
35
692
  }