@tea-agent/loop-agent 0.39.0-next.9 → 0.39.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 (288) hide show
  1. package/AGENTS.md +4 -1
  2. package/CHANGELOG.md +269 -69
  3. package/README.md +11 -5
  4. package/bin/loop-agent.js +7 -3
  5. package/dist/application/dag/generate-task-dag.js +9 -0
  6. package/dist/application/task-lifecycle/advance.js +16 -0
  7. package/dist/build-stamp.json +3 -3
  8. package/dist/cli/command-definitions.js +16 -5
  9. package/dist/cli/program.js +16 -2
  10. package/dist/cli/update/notifier.js +2 -2
  11. package/dist/cli/update/runtime-activity.js +1 -29
  12. package/dist/cli.js +2 -1
  13. package/dist/commands/dag-rerun.js +55 -1
  14. package/dist/commands/init-model-catalog.js +464 -0
  15. package/dist/commands/init-upgrade.js +265 -97
  16. package/dist/commands/init.js +428 -27
  17. package/dist/commands/inspect-next.js +8 -0
  18. package/dist/commands/task-advance.js +31 -0
  19. package/dist/executors/dag-pi-executor.js +124 -18
  20. package/dist/executors/pi-event-serializer.js +42 -1
  21. package/dist/executors/pi-executor.js +51 -0
  22. package/dist/executors/pi-extension-resolver.js +233 -0
  23. package/dist/executors/pi-playwright-cli-tool.js +74 -28
  24. package/dist/executors/pi-sdk-executor.js +187 -59
  25. package/dist/executors/shell-executor.js +555 -34
  26. package/dist/executors/shell-write-guard.js +7 -0
  27. package/dist/shared/dag-failure-category.js +138 -0
  28. package/dist/shared/dag-prompt-override.js +27 -0
  29. package/dist/shared/operator/capabilities.js +181 -27
  30. package/dist/shared/playwright-cli-command-policy.js +15 -0
  31. package/dist/shared/update/console-notifier.js +100 -0
  32. package/dist/{cli → shared}/update/npm-client.js +70 -15
  33. package/dist/{cli → shared}/update/state.js +41 -13
  34. package/dist/task/config-types.js +28 -0
  35. package/dist/task/contract/apply.js +11 -1
  36. package/dist/task/contract/constants.js +3 -0
  37. package/dist/task/contract/diff.js +26 -0
  38. package/dist/task/contract/hash.js +3 -0
  39. package/dist/task/contract/observe.js +25 -4
  40. package/dist/task/contract/paths.js +2 -1
  41. package/dist/task/contract/project.js +20 -1
  42. package/dist/task/contract/schema.js +8 -1
  43. package/dist/task/contract/transaction.js +12 -0
  44. package/dist/task/source-prepare/build-draft.js +15 -0
  45. package/dist/task/source-prepare/completeness.js +188 -0
  46. package/dist/task/source-prepare/fragment-inventory.js +474 -0
  47. package/dist/task/source-prepare/index.js +3 -0
  48. package/dist/task/source-prepare/ledger-reconciliation.js +127 -0
  49. package/dist/task/source-prepare/ledger-review.js +214 -0
  50. package/dist/task/source-prepare/ledger.js +545 -0
  51. package/dist/task/source-prepare/parse-intent.js +24 -4
  52. package/dist/task/source-prepare/prepare.js +262 -1
  53. package/dist/task/source-prepare/semantic-intake.js +19 -3
  54. package/dist/task/source-prepare/source-fidelity-pi.js +384 -0
  55. package/dist/task/source-prepare/types.js +22 -0
  56. package/dist/worker/cli.js +18 -2
  57. package/dist/worker/console/chat/deferred-turn.js +91 -0
  58. package/dist/worker/console/chat/mcp-inventory.js +221 -0
  59. package/dist/worker/console/chat/operation-card.js +8 -1
  60. package/dist/worker/console/chat/pi-console-config.js +81 -10
  61. package/dist/worker/console/chat/pi-runtime.js +165 -83
  62. package/dist/worker/console/chat/repo-walk.js +10 -1
  63. package/dist/worker/console/chat/routes.js +480 -55
  64. package/dist/worker/console/chat/semantic-activity.js +20 -8
  65. package/dist/worker/console/chat/session-store.js +146 -2
  66. package/dist/worker/console/chat/turn-process.js +10 -10
  67. package/dist/worker/console/console-handoff.js +82 -0
  68. package/dist/worker/console/console-update-and-init.js +115 -0
  69. package/dist/worker/console/console-update-runtime.js +84 -0
  70. package/dist/worker/console/dag-execution-receipt.js +33 -0
  71. package/dist/worker/console/draft-store.js +49 -0
  72. package/dist/worker/console/inspect-split.js +18 -0
  73. package/dist/worker/console/operation-run-facts.js +19 -3
  74. package/dist/worker/console/operation-store.js +1 -1
  75. package/dist/worker/console/operator-actions.js +320 -4
  76. package/dist/worker/console/operator-surface-health.js +1 -0
  77. package/dist/worker/console/operator-user-error.js +2 -2
  78. package/dist/worker/console/pi-readiness.js +5 -4
  79. package/dist/worker/console/prd-intake-bridge.js +13 -0
  80. package/dist/worker/console/recovery-cta.js +4 -4
  81. package/dist/worker/console/recovery-error-copy.js +4 -4
  82. package/dist/worker/console/routes.js +46 -2
  83. package/dist/worker/console/security.js +63 -9
  84. package/dist/worker/console/server.js +111 -7
  85. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BLXFe4qI.js → abnfDiagram-N423BO3Z-CTx1TrNa.js} +1 -1
  86. package/dist/worker/console/static/assets/{arc-7iOJeqho.js → arc-B4i9cVxX.js} +1 -1
  87. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CYoyj5K7.js → architectureDiagram-T3A2C74G-BAXE8_Rl.js} +1 -1
  88. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-fK01JNlR.js → blockDiagram-VBNYF7ZC-C5Xh59at.js} +1 -1
  89. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-bzbw5D_Z.js → c4Diagram-5PPSVZJV-B_asOzAu.js} +1 -1
  90. package/dist/worker/console/static/assets/channel-Dj_4Moei.js +1 -0
  91. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-Cf6hJFFG.js → chunk-2GRJ4B5K-wRO_iRNc.js} +1 -1
  92. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DSFXR-et.js → chunk-2Q5K7J3B-ByOaSh_G.js} +1 -1
  93. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BagJechl.js → chunk-5RXB4S5H-DjLzudan.js} +1 -1
  94. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-E7QNMFaW.js → chunk-5VM5RSS4-JCNGkXYT.js} +1 -1
  95. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BG_eOBrC.js → chunk-6Q2QTUOP-BhrPXXMZ.js} +1 -1
  96. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Bo42dqol.js → chunk-GF5L2VYU-TJ5JuEBT.js} +1 -1
  97. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-dibM-87v.js → chunk-JWPE2WC7-VVthn_mD.js} +1 -1
  98. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-Bytrp3Oe.js → chunk-KBJHAD2P-D60-Mny4.js} +1 -1
  99. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DBABILrr.js → chunk-RYQCIY6F-zXv7aVye.js} +1 -1
  100. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DCUk5Pf9.js → chunk-XXDRQBXY-By9VQoi1.js} +1 -1
  101. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0YYAyCa.js +1 -0
  102. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0YYAyCa.js +1 -0
  103. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BlGE9v6E.js → cose-bilkent-JH36ORCC-C4zQLe-M.js} +1 -1
  104. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DGl5ewph.js → cynefin-VYW2F7L2-wh5N2ReN.js} +1 -1
  105. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-DsJ_SVH_.js → cynefinDiagram-MW4NZA55-Dlu5wIqs.js} +1 -1
  106. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BIhjFdzv.js → dagre-VZM6K2ZE-CrDgthc6.js} +1 -1
  107. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Dmy1ctTb.js → diagram-7IWD3JNH-zN1clg27.js} +1 -1
  108. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-DYCtWUF3.js → diagram-B4RE2ZJO-BN-o7J7-.js} +1 -1
  109. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-BMZFHVd2.js → diagram-LBJQPF4R-C8SuPt0d.js} +1 -1
  110. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-b_U8gfaO.js → diagram-Q27KOJAE-BoizuHbZ.js} +1 -1
  111. package/dist/worker/console/static/assets/{diagram-UB23O5K3-Dzy_bn-I.js → diagram-UB23O5K3-BzUzXixG.js} +1 -1
  112. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DJCiMNEI.js → ebnfDiagram-BXEA7PRR-Ev3lA4Cf.js} +1 -1
  113. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-28lD016B.js → erDiagram-JOGREHBK-GALUzRbs.js} +1 -1
  114. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DGyHJmIw.js → flowDiagram-UKHOOZJN-CZJN65Sb.js} +1 -1
  115. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CzdwUjrO.js → ganttDiagram-PKOTCBZU-JLB9OESl.js} +1 -1
  116. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-D9bGwuo8.js → gitGraphDiagram-DS77QQ5N-CcvCr4GD.js} +1 -1
  117. package/dist/worker/console/static/assets/index-CW88Fjbw.js +406 -0
  118. package/dist/worker/console/static/assets/index-DP0ZJl39.css +1 -0
  119. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-LJgJUQFC.js → infoDiagram-6WML65LV-HG5z7aVg.js} +1 -1
  120. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-98LaB8zb.js → ishikawaDiagram-WSZJBQD7-BHEu9chR.js} +1 -1
  121. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-D-ISzwlQ.js → journeyDiagram-NVQOT4AX-Cp_Up8-a.js} +1 -1
  122. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-gfYOI-EL.js → kanban-definition-27J2QSJJ-DvVeY-em.js} +1 -1
  123. package/dist/worker/console/static/assets/{linear-CyntZgKV.js → linear-aGmcjgTn.js} +1 -1
  124. package/dist/worker/console/static/assets/{mermaid.core-BBOR7dg0.js → mermaid.core-Biyo-tqA.js} +5 -5
  125. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CQAgwPMk.js → mindmap-definition-FAOFIHXS-DyxY2pIb.js} +1 -1
  126. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DkMiZFuV.js → pegDiagram-VL7TDLO6-CkdGuc50.js} +1 -1
  127. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DLNXa_0J.js → pieDiagram-7S7Q4E2Y-NNQI9xVR.js} +1 -1
  128. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Dc7bdzjm.js → quadrantDiagram-CIZ2JOQS-PAJkuz_G.js} +1 -1
  129. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BxMB0QqW.js → railroadDiagram-AXF67PYL-ZwrQod0O.js} +1 -1
  130. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-FjumoKn4.js → requirementDiagram-LRYGKXZP-D3ZfrzM2.js} +1 -1
  131. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-CkhKc_E3.js → sankeyDiagram-W5VNT64P-DDGFmWk5.js} +1 -1
  132. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DoBWqTTH.js → sequenceDiagram-SI44F4Z6-DO6mmXTA.js} +1 -1
  133. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CQeh_YeE.js → sizeCapture-X5ZJPWSS-DMbCQiJt.js} +1 -1
  134. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-LuHmFW-I.js → stateDiagram-OKZ733FA-Di_YUEfC.js} +1 -1
  135. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DrdDvela.js +1 -0
  136. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CHwbDctY.js → swimlanes-SLNWSIFB-Bn2PphNJ.js} +2 -2
  137. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DPkEAULl.js +8 -0
  138. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CoMngk0X.js → timeline-definition-Z64GVDOM-DPh8pRsp.js} +1 -1
  139. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-CURYbtbO.js → vennDiagram-T6HMQDX7-GMfl26pW.js} +1 -1
  140. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BdqSECjU.js → wardleyDiagram-T6FBY63Y-DTlmVrmF.js} +1 -1
  141. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-DbMUYuAg.js → xychartDiagram-ELKLHX3M-YGBjKAS5.js} +1 -1
  142. package/dist/worker/console/static/index.html +2 -2
  143. package/dist/worker/console/static-src/app/console-types.js +40 -1
  144. package/dist/worker/console/static-src/app/useOperatorActions.js +6 -1
  145. package/dist/worker/console/static-src/app/useRecoveryActions.js +2 -2
  146. package/dist/worker/console/static-src/app/useRecoveryConsole.js +38 -2
  147. package/dist/worker/console/static-src/app/useRunProgress.js +46 -0
  148. package/dist/worker/console/static-src/app/useTaskWizard.js +73 -1
  149. package/dist/worker/console/static-src/operator-chat/cards/failure-category-advice.js +25 -0
  150. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +74 -26
  151. package/dist/worker/console/static-src/operator-chat/input-history.js +76 -0
  152. package/dist/worker/console/static-src/operator-chat/mutation-gate.js +1 -1
  153. package/dist/worker/console/static-src/operator-chat/open-preview-in-browser.js +328 -0
  154. package/dist/worker/console/static-src/operator-chat/resource-diagnostics.js +204 -0
  155. package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +8 -1
  156. package/dist/worker/console/static-src/operator-chat/turn-submission.js +54 -0
  157. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +3 -0
  158. package/dist/worker/console/static-src/operator-chat/useChatStream.js +237 -11
  159. package/dist/worker/console/static-src/operator-chat/useChatThread.js +50 -22
  160. package/dist/worker/console/static-src/operator-chat/useComposer.js +32 -0
  161. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +26 -1
  162. package/dist/worker/console/static-src/pages/tasks/run-id-resolution.js +79 -0
  163. package/dist/worker/console/static-src/pages/tasks/run-ownership-verify.js +23 -0
  164. package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +110 -0
  165. package/dist/worker/loop-agent/loop-agent-client.js +7 -3
  166. package/dist/worker/materialize/harness-task-lineage.js +5 -2
  167. package/dist/worker/observability/init-runtime-activity.js +26 -0
  168. package/dist/worker/observability/read-model.js +22 -0
  169. package/dist/worker/observe/node-input.js +160 -3
  170. package/dist/worker/observe/node-process.js +377 -0
  171. package/dist/worker/observe/routes.js +224 -3
  172. package/dist/worker/observe/shell-handler-keys.js +34 -0
  173. package/dist/worker/observe/static/api.js +67 -1
  174. package/dist/worker/observe/static/constants.js +8 -1
  175. package/dist/worker/observe/static/dag-history-labels.js +4 -0
  176. package/dist/worker/observe/static/format.js +60 -0
  177. package/dist/worker/observe/static/index.html +5 -0
  178. package/dist/worker/observe/static/markdown-render.js +20 -1
  179. package/dist/worker/observe/static/operator-chrome.js +4 -0
  180. package/dist/worker/observe/static/prompt-restart-candidates.d.ts +18 -0
  181. package/dist/worker/observe/static/prompt-restart-candidates.js +36 -0
  182. package/dist/worker/observe/static/state.js +13 -2
  183. package/dist/worker/observe/static/styles.css +85 -0
  184. package/dist/worker/observe/static/views/dag-inspector.js +912 -8
  185. package/dist/worker/observe/static/views/dag.js +8 -1
  186. package/dist/worker/observe/static/views/failures.js +5 -2
  187. package/dist/worker/observe/static/views/session-timeline.js +78 -9
  188. package/dist/worker/observe/static/views/task.js +55 -0
  189. package/dist/workflows/dag/backend-test-case-coverage-analysis.js +856 -54
  190. package/dist/workflows/dag/backend-test-case-manifest.js +4 -0
  191. package/dist/workflows/dag/backend-test-execution-contract.js +18 -9
  192. package/dist/workflows/dag/backend-test-gap-fill.js +205 -0
  193. package/dist/workflows/dag/backend-test-intake-context.js +32 -0
  194. package/dist/workflows/dag/backend-test-layout.js +133 -0
  195. package/dist/workflows/dag/backend-test-markdown-workflow.js +343 -33
  196. package/dist/workflows/dag/backend-test-module-stem.js +5 -0
  197. package/dist/workflows/dag/backend-test-pytest-collection.js +454 -36
  198. package/dist/workflows/dag/backend-test-result-contract.js +1 -1
  199. package/dist/workflows/dag/backend-test-scenario-param.js +884 -140
  200. package/dist/workflows/dag/backend-test-scenario-partitions.js +321 -0
  201. package/dist/workflows/dag/backend-test-writer-completeness.js +110 -61
  202. package/dist/workflows/dag/contract-output-registry.js +15 -0
  203. package/dist/workflows/dag/contract-validator-registrations.js +3 -1
  204. package/dist/workflows/dag/convergence/controller.js +141 -0
  205. package/dist/workflows/dag/dynamic-runtime/loop-until.js +1 -1
  206. package/dist/workflows/dag/dynamic-runtime/map.js +25 -9
  207. package/dist/workflows/dag/dynamic-runtime/shared.js +1 -1
  208. package/dist/workflows/dag/failure-category.js +7 -116
  209. package/dist/workflows/dag/frontend-implementation-contract.js +465 -6
  210. package/dist/workflows/dag/frontend-plan-render.js +24 -0
  211. package/dist/workflows/dag/frontend-prewrite-gate.js +293 -84
  212. package/dist/workflows/dag/frontend-repair.js +14 -0
  213. package/dist/workflows/dag/frontend-review-context.js +92 -10
  214. package/dist/workflows/dag/frontend-risk.js +15 -2
  215. package/dist/workflows/dag/frontend-test-case-checklist.js +30 -4
  216. package/dist/workflows/dag/frontend-test-case-manifest.js +11 -4
  217. package/dist/workflows/dag/frontend-test-case-quality.js +11 -16
  218. package/dist/workflows/dag/frontend-test-environment-probe.js +230 -0
  219. package/dist/workflows/dag/frontend-test-html-report.js +3 -1
  220. package/dist/workflows/dag/frontend-test-l5-report.js +3 -1
  221. package/dist/workflows/dag/frontend-test-layout.js +159 -0
  222. package/dist/workflows/dag/frontend-test-markdown.js +61 -0
  223. package/dist/workflows/dag/frontend-test-result-contract.js +188 -42
  224. package/dist/workflows/dag/frontend-test-standard-scenarios.js +70 -0
  225. package/dist/workflows/dag/frontend-verification-trace.js +29 -4
  226. package/dist/workflows/dag/init-hybrid.js +1019 -209
  227. package/dist/workflows/dag/node-execution.js +228 -15
  228. package/dist/workflows/dag/prompt.js +60 -1
  229. package/dist/workflows/dag/rerun-feedback.js +212 -0
  230. package/dist/workflows/dag/rerun-plan.js +224 -27
  231. package/dist/workflows/dag/rerun-run.js +61 -6
  232. package/dist/workflows/dag/rerun-task.js +61 -2
  233. package/dist/workflows/dag/retry-policy.js +109 -0
  234. package/dist/workflows/dag/structured-output-repair.js +712 -0
  235. package/dist/workflows/dag/types.js +185 -12
  236. package/dist/workflows/dag/validate.js +64 -20
  237. package/docs/README.md +1 -0
  238. package/docs/architecture/evolution.md +45 -0
  239. package/docs/init-surface.manifest.json +6 -0
  240. package/docs/operations/README.md +1 -1
  241. package/docs/operations/local-development-environment.md +1 -5
  242. package/docs/skills/vetted-skill-registry.md +14 -0
  243. package/docs/templates/README.md +2 -2
  244. package/docs/templates/agent-dag.schema.json +44 -0
  245. package/docs/templates/backend-test-dag.json +60 -35
  246. package/docs/templates/frontend-implementation-contract.schema.json +681 -24
  247. package/docs/templates/frontend-test-case-checklist.md +2 -2
  248. package/docs/templates/frontend-test-dag.json +8 -10
  249. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +1 -1
  250. package/docs/templates/init-managed-agents.md +13 -3
  251. package/harness.json +6 -4
  252. package/package.json +12 -4
  253. package/scripts/next-info.mjs +356 -0
  254. package/scripts/next-publish-gate.mjs +238 -0
  255. package/scripts/release-source-binding.mjs +251 -0
  256. package/skills/analyze-product-requirements/SKILL.md +8 -5
  257. package/skills/analyze-product-requirements/references/acceptance-criteria.md +1 -1
  258. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +10 -6
  259. package/skills/analyze-product-requirements/references/example.md +50 -0
  260. package/skills/analyze-product-requirements/references/forward-test-cases.md +11 -7
  261. package/skills/analyze-product-requirements/references/kb-integration.md +5 -5
  262. package/skills/analyze-product-requirements/references/product-analysis-schema.md +8 -4
  263. package/skills/analyze-product-requirements/references/product-requirement-schema.md +2 -2
  264. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +1 -1
  265. package/skills/analyze-product-requirements/scripts/test-validators.mjs +11 -1
  266. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +20 -1
  267. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +9 -0
  268. package/skills/codebase-scout/SKILL.md +1 -1
  269. package/skills/fe-test-ui-scout/SKILL.md +65 -0
  270. package/skills/fe-test-ui-scout/references/ledger-schema.md +62 -0
  271. package/skills/fe-test-ui-scout/references/recon-protocol.md +54 -0
  272. package/skills/frontend-implementation/references/node-contracts.md +2 -2
  273. package/skills/improve-codebase-architecture/SKILL.md +81 -0
  274. package/skills/improve-codebase-architecture/deepening.md +37 -0
  275. package/skills/improve-codebase-architecture/html-report.md +123 -0
  276. package/skills/improve-codebase-architecture/interface-design.md +44 -0
  277. package/skills/improve-codebase-architecture/language.md +53 -0
  278. package/skills/loop-agent/references/command-reference.md +11 -4
  279. package/skills/loop-agent/references/hybrid-dag.md +7 -0
  280. package/skills/playwright-cli/SKILL.md +23 -1
  281. package/skills/playwright-cli-case-generator/SKILL.md +29 -8
  282. package/dist/worker/console/static/assets/channel-BBOTJHvD.js +0 -1
  283. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-Cm8Yf8tD.js +0 -1
  284. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-Cm8Yf8tD.js +0 -1
  285. package/dist/worker/console/static/assets/index-B-qWGThd.js +0 -325
  286. package/dist/worker/console/static/assets/index-C-xRgY_0.css +0 -1
  287. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DZihfdKc.js +0 -1
  288. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CKnXCjHX.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
  }