@svenroth-ai/shipwright 0.24.1-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +55 -0
- package/bin/shipwright.mjs +187 -0
- package/client/dist/assets/EmbeddedTerminal-6GBZ9nXN.css +32 -0
- package/client/dist/assets/EmbeddedTerminal-CpeDvtzx.js +123 -0
- package/client/dist/assets/MarkdownEditorModal-Di9HN39z.js +212 -0
- package/client/dist/assets/abnfDiagram-VRR7QNED-BbSdq0X7.js +1 -0
- package/client/dist/assets/arc-BZT7vKjm.js +1 -0
- package/client/dist/assets/architectureDiagram-ZJ3FMSHR-BuRwoNgV.js +36 -0
- package/client/dist/assets/blockDiagram-677ZJIJ3-B2RNYWcr.js +132 -0
- package/client/dist/assets/c4Diagram-LMCZKHZV-fbXlt08K.js +10 -0
- package/client/dist/assets/channel-2-wkFEKK.js +1 -0
- package/client/dist/assets/chunk-2Q5K7J3B-NqMRUe5-.js +1 -0
- package/client/dist/assets/chunk-32BRIVSS-CIr9bFCd.js +1 -0
- package/client/dist/assets/chunk-5VM5RSS4-l0I6rbZN.js +15 -0
- package/client/dist/assets/chunk-EX3LRPZG-DXinoCxp.js +231 -0
- package/client/dist/assets/chunk-JWPE2WC7-BAcCano9.js +1 -0
- package/client/dist/assets/chunk-MOJQB5TN-DMVOqL7C.js +88 -0
- package/client/dist/assets/chunk-RYQCIY6F-CtNSAItH.js +1 -0
- package/client/dist/assets/chunk-V7JOEXUC-CufSmC93.js +206 -0
- package/client/dist/assets/chunk-VR4S4FIN-_BbUF9fa.js +1 -0
- package/client/dist/assets/chunk-XXDRQBXY-uQ35hUPB.js +1 -0
- package/client/dist/assets/classDiagram-OUVF2IWQ-A9SpDakb.js +1 -0
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-A9SpDakb.js +1 -0
- package/client/dist/assets/cose-bilkent-JH36ORCC-B9q9uYCX.js +1 -0
- package/client/dist/assets/cynefin-VYW2F7L2-C2_bJyZA.js +178 -0
- package/client/dist/assets/cynefinDiagram-TSTJHNR4-0mzVmPv4.js +62 -0
- package/client/dist/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
- package/client/dist/assets/dagre-VKFMJZFB-CIE9HMtr.js +4 -0
- package/client/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/client/dist/assets/diagram-FQU43EPY-DdkBaZrX.js +3 -0
- package/client/dist/assets/diagram-G47NLZAW-Cql4k2sg.js +24 -0
- package/client/dist/assets/diagram-NH7WQ7WH-FRAUyqEu.js +24 -0
- package/client/dist/assets/diagram-OA4YK3LP-DXo8GTB8.js +30 -0
- package/client/dist/assets/diagram-WEI45ONY-DqVtWGdt.js +41 -0
- package/client/dist/assets/ebnfDiagram-CCIWWBDH-B0La0RsO.js +1 -0
- package/client/dist/assets/erDiagram-Q63AITRT-DHbbqiY9.js +85 -0
- package/client/dist/assets/flowDiagram-23GEKE2U-I6vhJlCk.js +156 -0
- package/client/dist/assets/ganttDiagram-NO4QXBWP-CDYZHcsU.js +292 -0
- package/client/dist/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
- package/client/dist/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/client/dist/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
- package/client/dist/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
- package/client/dist/assets/gitGraphDiagram-IHSO6WYX-dyf7caP8.js +106 -0
- package/client/dist/assets/graph-C9eacEi8.js +1 -0
- package/client/dist/assets/index-BYrVLOXw.js +609 -0
- package/client/dist/assets/index-BZvZ9izZ.css +1 -0
- package/client/dist/assets/infoDiagram-FWYZ7A6U-BlWH6vM3.js +2 -0
- package/client/dist/assets/init-Gi6I4Gst.js +1 -0
- package/client/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/client/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/client/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/client/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/client/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/client/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/client/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/client/dist/assets/ishikawaDiagram-FXEZZL3T-BEKH-_6E.js +70 -0
- package/client/dist/assets/journeyDiagram-5HDEW3XC-cn_mQ2U9.js +139 -0
- package/client/dist/assets/kanban-definition-HUTT4EX6-DGZiYhYV.js +89 -0
- package/client/dist/assets/katex-DkKDou_j.js +257 -0
- package/client/dist/assets/layout-DEXfKzaS.js +1 -0
- package/client/dist/assets/linear-CdtYl6qR.js +1 -0
- package/client/dist/assets/map-Czzmt4hB.js +1 -0
- package/client/dist/assets/mermaid.core-CrKi1642.js +314 -0
- package/client/dist/assets/mindmap-definition-LN4V7U3C-G_CA7V9L.js +96 -0
- package/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/client/dist/assets/pegDiagram-2B236MQR-6ZeO9kDM.js +1 -0
- package/client/dist/assets/pieDiagram-ENE6RG2P-Bd0InZSQ.js +39 -0
- package/client/dist/assets/quadrantDiagram-ABIIQ3AL-Bg1m9Csn.js +7 -0
- package/client/dist/assets/railroadDiagram-RFXS5EU6-CCzPP1JU.js +1 -0
- package/client/dist/assets/requirementDiagram-TGXJPOKE-iN7kyPgM.js +84 -0
- package/client/dist/assets/sankeyDiagram-HTMAVEWB-DN1v_DUJ.js +40 -0
- package/client/dist/assets/sequenceDiagram-DBY2YBRQ-C5LMp5Sa.js +162 -0
- package/client/dist/assets/sizeCapture-X5ZJPWSS-Bp9jVLhL.js +1 -0
- package/client/dist/assets/stateDiagram-2N3HPSRC-VbWBetTf.js +1 -0
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-BuaUtNAG.js +1 -0
- package/client/dist/assets/swimlanes-5IMT3BWC-CrXokvQ-.js +2 -0
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-C6hwc993.js +8 -0
- package/client/dist/assets/timeline-definition-FHXFAJF6-Cxx1NT9A.js +120 -0
- package/client/dist/assets/vennDiagram-L72KCM5P-C6DBgaEy.js +34 -0
- package/client/dist/assets/wardleyDiagram-EHGQE667-RV7xMg8g.js +78 -0
- package/client/dist/assets/xychartDiagram-FW5EYKEG-Llhe9pB1.js +7 -0
- package/client/dist/backdrops/deck-golden.jpg +0 -0
- package/client/dist/backdrops/lighthouse.jpg +0 -0
- package/client/dist/index.html +27 -0
- package/client/dist/shipwright-logo-white.png +0 -0
- package/lib/cache-runtime.mjs +72 -0
- package/lib/cache-sync.mjs +243 -0
- package/lib/claude-cli.mjs +173 -0
- package/lib/plugins.mjs +181 -0
- package/lib/preflight.mjs +208 -0
- package/lib/probes.mjs +53 -0
- package/lib/server.mjs +315 -0
- package/lib/util.mjs +83 -0
- package/lib/version-check.mjs +76 -0
- package/lib/win32-spawn.mjs +253 -0
- package/package.json +67 -0
- package/scripts/deploy-procs.mjs +208 -0
- package/scripts/deploy-swap.mjs +276 -0
- package/scripts/kill-targets.js +140 -0
- package/scripts/repair-claude-json.mjs +295 -0
- package/server/dist/config/default-actions.json +90 -0
- package/server/dist/config.d.ts +96 -0
- package/server/dist/config.d.ts.map +1 -0
- package/server/dist/config.js +68 -0
- package/server/dist/config.js.map +1 -0
- package/server/dist/core/actions-schema-validator.d.ts +8 -0
- package/server/dist/core/actions-schema-validator.d.ts.map +1 -0
- package/server/dist/core/actions-schema-validator.js +394 -0
- package/server/dist/core/actions-schema-validator.js.map +1 -0
- package/server/dist/core/actions-substitute.d.ts +115 -0
- package/server/dist/core/actions-substitute.d.ts.map +1 -0
- package/server/dist/core/actions-substitute.js +549 -0
- package/server/dist/core/actions-substitute.js.map +1 -0
- package/server/dist/core/board-column.d.ts +3 -0
- package/server/dist/core/board-column.d.ts.map +1 -0
- package/server/dist/core/board-column.js +4 -0
- package/server/dist/core/board-column.js.map +1 -0
- package/server/dist/core/campaign-events.d.ts +39 -0
- package/server/dist/core/campaign-events.d.ts.map +1 -0
- package/server/dist/core/campaign-events.js +192 -0
- package/server/dist/core/campaign-events.js.map +1 -0
- package/server/dist/core/campaign-loop-state.d.ts +31 -0
- package/server/dist/core/campaign-loop-state.d.ts.map +1 -0
- package/server/dist/core/campaign-loop-state.js +124 -0
- package/server/dist/core/campaign-loop-state.js.map +1 -0
- package/server/dist/core/campaign-parse.d.ts +28 -0
- package/server/dist/core/campaign-parse.d.ts.map +1 -0
- package/server/dist/core/campaign-parse.js +174 -0
- package/server/dist/core/campaign-parse.js.map +1 -0
- package/server/dist/core/campaign-paths.d.ts +24 -0
- package/server/dist/core/campaign-paths.d.ts.map +1 -0
- package/server/dist/core/campaign-paths.js +111 -0
- package/server/dist/core/campaign-paths.js.map +1 -0
- package/server/dist/core/campaign-route-helpers.d.ts +19 -0
- package/server/dist/core/campaign-route-helpers.d.ts.map +1 -0
- package/server/dist/core/campaign-route-helpers.js +51 -0
- package/server/dist/core/campaign-route-helpers.js.map +1 -0
- package/server/dist/core/campaign-status-json.d.ts +55 -0
- package/server/dist/core/campaign-status-json.d.ts.map +1 -0
- package/server/dist/core/campaign-status-json.js +57 -0
- package/server/dist/core/campaign-status-json.js.map +1 -0
- package/server/dist/core/campaign-store.d.ts +10 -0
- package/server/dist/core/campaign-store.d.ts.map +1 -0
- package/server/dist/core/campaign-store.js +245 -0
- package/server/dist/core/campaign-store.js.map +1 -0
- package/server/dist/core/campaign-types.d.ts +101 -0
- package/server/dist/core/campaign-types.d.ts.map +1 -0
- package/server/dist/core/campaign-types.js +10 -0
- package/server/dist/core/campaign-types.js.map +1 -0
- package/server/dist/core/campaign-write.d.ts +13 -0
- package/server/dist/core/campaign-write.d.ts.map +1 -0
- package/server/dist/core/campaign-write.js +128 -0
- package/server/dist/core/campaign-write.js.map +1 -0
- package/server/dist/core/cascade-delete-project-tasks.d.ts +14 -0
- package/server/dist/core/cascade-delete-project-tasks.d.ts.map +1 -0
- package/server/dist/core/cascade-delete-project-tasks.js +68 -0
- package/server/dist/core/cascade-delete-project-tasks.js.map +1 -0
- package/server/dist/core/claude-bin-resolver.d.ts +62 -0
- package/server/dist/core/claude-bin-resolver.d.ts.map +1 -0
- package/server/dist/core/claude-bin-resolver.js +208 -0
- package/server/dist/core/claude-bin-resolver.js.map +1 -0
- package/server/dist/core/claude-theme-reader.d.ts +15 -0
- package/server/dist/core/claude-theme-reader.d.ts.map +1 -0
- package/server/dist/core/claude-theme-reader.js +52 -0
- package/server/dist/core/claude-theme-reader.js.map +1 -0
- package/server/dist/core/cli-compat.d.ts +43 -0
- package/server/dist/core/cli-compat.d.ts.map +1 -0
- package/server/dist/core/cli-compat.js +88 -0
- package/server/dist/core/cli-compat.js.map +1 -0
- package/server/dist/core/compliance-dimensions.d.ts +20 -0
- package/server/dist/core/compliance-dimensions.d.ts.map +1 -0
- package/server/dist/core/compliance-dimensions.js +114 -0
- package/server/dist/core/compliance-dimensions.js.map +1 -0
- package/server/dist/core/compliance-reader.d.ts +49 -0
- package/server/dist/core/compliance-reader.d.ts.map +1 -0
- package/server/dist/core/compliance-reader.js +147 -0
- package/server/dist/core/compliance-reader.js.map +1 -0
- package/server/dist/core/contract-version.d.ts +72 -0
- package/server/dist/core/contract-version.d.ts.map +1 -0
- package/server/dist/core/contract-version.js +114 -0
- package/server/dist/core/contract-version.js.map +1 -0
- package/server/dist/core/design-feedback.d.ts +29 -0
- package/server/dist/core/design-feedback.d.ts.map +1 -0
- package/server/dist/core/design-feedback.js +80 -0
- package/server/dist/core/design-feedback.js.map +1 -0
- package/server/dist/core/dismissed-campaigns-store.d.ts +45 -0
- package/server/dist/core/dismissed-campaigns-store.d.ts.map +1 -0
- package/server/dist/core/dismissed-campaigns-store.js +147 -0
- package/server/dist/core/dismissed-campaigns-store.js.map +1 -0
- package/server/dist/core/event-log-reader.d.ts +19 -0
- package/server/dist/core/event-log-reader.d.ts.map +1 -0
- package/server/dist/core/event-log-reader.js +209 -0
- package/server/dist/core/event-log-reader.js.map +1 -0
- package/server/dist/core/event-log-types.d.ts +99 -0
- package/server/dist/core/event-log-types.d.ts.map +1 -0
- package/server/dist/core/event-log-types.js +14 -0
- package/server/dist/core/event-log-types.js.map +1 -0
- package/server/dist/core/gitignore-cache.d.ts +16 -0
- package/server/dist/core/gitignore-cache.d.ts.map +1 -0
- package/server/dist/core/gitignore-cache.js +103 -0
- package/server/dist/core/gitignore-cache.js.map +1 -0
- package/server/dist/core/grade-runner.d.ts +63 -0
- package/server/dist/core/grade-runner.d.ts.map +1 -0
- package/server/dist/core/grade-runner.js +176 -0
- package/server/dist/core/grade-runner.js.map +1 -0
- package/server/dist/core/grade-target.d.ts +43 -0
- package/server/dist/core/grade-target.d.ts.map +1 -0
- package/server/dist/core/grade-target.js +162 -0
- package/server/dist/core/grade-target.js.map +1 -0
- package/server/dist/core/inbox-derive.d.ts +56 -0
- package/server/dist/core/inbox-derive.d.ts.map +1 -0
- package/server/dist/core/inbox-derive.js +211 -0
- package/server/dist/core/inbox-derive.js.map +1 -0
- package/server/dist/core/jsonl-decode.d.ts +28 -0
- package/server/dist/core/jsonl-decode.d.ts.map +1 -0
- package/server/dist/core/jsonl-decode.js +96 -0
- package/server/dist/core/jsonl-decode.js.map +1 -0
- package/server/dist/core/jsonl-records.d.ts +104 -0
- package/server/dist/core/jsonl-records.d.ts.map +1 -0
- package/server/dist/core/jsonl-records.js +222 -0
- package/server/dist/core/jsonl-records.js.map +1 -0
- package/server/dist/core/launcher.d.ts +74 -0
- package/server/dist/core/launcher.d.ts.map +1 -0
- package/server/dist/core/launcher.js +192 -0
- package/server/dist/core/launcher.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-commit.d.ts +28 -0
- package/server/dist/core/mission-context/artifacts-commit.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-commit.js +98 -0
- package/server/dist/core/mission-context/artifacts-commit.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-decisions.d.ts +5 -0
- package/server/dist/core/mission-context/artifacts-decisions.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-decisions.js +114 -0
- package/server/dist/core/mission-context/artifacts-decisions.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-slice2.d.ts +12 -0
- package/server/dist/core/mission-context/artifacts-slice2.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-slice2.js +125 -0
- package/server/dist/core/mission-context/artifacts-slice2.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests.d.ts +34 -0
- package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests.js +236 -0
- package/server/dist/core/mission-context/artifacts-tests.js.map +1 -0
- package/server/dist/core/mission-context/artifacts.d.ts +33 -0
- package/server/dist/core/mission-context/artifacts.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts.js +186 -0
- package/server/dist/core/mission-context/artifacts.js.map +1 -0
- package/server/dist/core/mission-context/association.d.ts +27 -0
- package/server/dist/core/mission-context/association.d.ts.map +1 -0
- package/server/dist/core/mission-context/association.js +69 -0
- package/server/dist/core/mission-context/association.js.map +1 -0
- package/server/dist/core/mission-context/campaign-artifacts.d.ts +9 -0
- package/server/dist/core/mission-context/campaign-artifacts.d.ts.map +1 -0
- package/server/dist/core/mission-context/campaign-artifacts.js +195 -0
- package/server/dist/core/mission-context/campaign-artifacts.js.map +1 -0
- package/server/dist/core/mission-context/campaign-facts.d.ts +99 -0
- package/server/dist/core/mission-context/campaign-facts.d.ts.map +1 -0
- package/server/dist/core/mission-context/campaign-facts.js +111 -0
- package/server/dist/core/mission-context/campaign-facts.js.map +1 -0
- package/server/dist/core/mission-context/decision-drops.d.ts +46 -0
- package/server/dist/core/mission-context/decision-drops.d.ts.map +1 -0
- package/server/dist/core/mission-context/decision-drops.js +269 -0
- package/server/dist/core/mission-context/decision-drops.js.map +1 -0
- package/server/dist/core/mission-context/decisions.d.ts +91 -0
- package/server/dist/core/mission-context/decisions.d.ts.map +1 -0
- package/server/dist/core/mission-context/decisions.js +222 -0
- package/server/dist/core/mission-context/decisions.js.map +1 -0
- package/server/dist/core/mission-context/doc-ids.d.ts +35 -0
- package/server/dist/core/mission-context/doc-ids.d.ts.map +1 -0
- package/server/dist/core/mission-context/doc-ids.js +78 -0
- package/server/dist/core/mission-context/doc-ids.js.map +1 -0
- package/server/dist/core/mission-context/document-read.d.ts +14 -0
- package/server/dist/core/mission-context/document-read.d.ts.map +1 -0
- package/server/dist/core/mission-context/document-read.js +36 -0
- package/server/dist/core/mission-context/document-read.js.map +1 -0
- package/server/dist/core/mission-context/fold-map.d.ts +45 -0
- package/server/dist/core/mission-context/fold-map.d.ts.map +1 -0
- package/server/dist/core/mission-context/fold-map.js +168 -0
- package/server/dist/core/mission-context/fold-map.js.map +1 -0
- package/server/dist/core/mission-context/fs-read.d.ts +47 -0
- package/server/dist/core/mission-context/fs-read.d.ts.map +1 -0
- package/server/dist/core/mission-context/fs-read.js +104 -0
- package/server/dist/core/mission-context/fs-read.js.map +1 -0
- package/server/dist/core/mission-context/iterate-record.d.ts +52 -0
- package/server/dist/core/mission-context/iterate-record.d.ts.map +1 -0
- package/server/dist/core/mission-context/iterate-record.js +156 -0
- package/server/dist/core/mission-context/iterate-record.js.map +1 -0
- package/server/dist/core/mission-context/merge-check.d.ts +60 -0
- package/server/dist/core/mission-context/merge-check.d.ts.map +1 -0
- package/server/dist/core/mission-context/merge-check.js +217 -0
- package/server/dist/core/mission-context/merge-check.js.map +1 -0
- package/server/dist/core/mission-context/merge-refresh.d.ts +14 -0
- package/server/dist/core/mission-context/merge-refresh.d.ts.map +1 -0
- package/server/dist/core/mission-context/merge-refresh.js +53 -0
- package/server/dist/core/mission-context/merge-refresh.js.map +1 -0
- package/server/dist/core/mission-context/merged-events.d.ts +34 -0
- package/server/dist/core/mission-context/merged-events.d.ts.map +1 -0
- package/server/dist/core/mission-context/merged-events.js +120 -0
- package/server/dist/core/mission-context/merged-events.js.map +1 -0
- package/server/dist/core/mission-context/pipeline-artifacts.d.ts +53 -0
- package/server/dist/core/mission-context/pipeline-artifacts.d.ts.map +1 -0
- package/server/dist/core/mission-context/pipeline-artifacts.js +161 -0
- package/server/dist/core/mission-context/pipeline-artifacts.js.map +1 -0
- package/server/dist/core/mission-context/planned-impact.d.ts +28 -0
- package/server/dist/core/mission-context/planned-impact.d.ts.map +1 -0
- package/server/dist/core/mission-context/planned-impact.js +129 -0
- package/server/dist/core/mission-context/planned-impact.js.map +1 -0
- package/server/dist/core/mission-context/pointer.d.ts +44 -0
- package/server/dist/core/mission-context/pointer.d.ts.map +1 -0
- package/server/dist/core/mission-context/pointer.js +165 -0
- package/server/dist/core/mission-context/pointer.js.map +1 -0
- package/server/dist/core/mission-context/resolver-io.d.ts +47 -0
- package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -0
- package/server/dist/core/mission-context/resolver-io.js +11 -0
- package/server/dist/core/mission-context/resolver-io.js.map +1 -0
- package/server/dist/core/mission-context/resolver-parts.d.ts +57 -0
- package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -0
- package/server/dist/core/mission-context/resolver-parts.js +136 -0
- package/server/dist/core/mission-context/resolver-parts.js.map +1 -0
- package/server/dist/core/mission-context/resolver.d.ts +11 -0
- package/server/dist/core/mission-context/resolver.d.ts.map +1 -0
- package/server/dist/core/mission-context/resolver.js +261 -0
- package/server/dist/core/mission-context/resolver.js.map +1 -0
- package/server/dist/core/mission-context/review-record-entry.d.ts +45 -0
- package/server/dist/core/mission-context/review-record-entry.d.ts.map +1 -0
- package/server/dist/core/mission-context/review-record-entry.js +214 -0
- package/server/dist/core/mission-context/review-record-entry.js.map +1 -0
- package/server/dist/core/mission-context/review-record.d.ts +35 -0
- package/server/dist/core/mission-context/review-record.d.ts.map +1 -0
- package/server/dist/core/mission-context/review-record.js +259 -0
- package/server/dist/core/mission-context/review-record.js.map +1 -0
- package/server/dist/core/mission-context/review-state.d.ts +33 -0
- package/server/dist/core/mission-context/review-state.d.ts.map +1 -0
- package/server/dist/core/mission-context/review-state.js +249 -0
- package/server/dist/core/mission-context/review-state.js.map +1 -0
- package/server/dist/core/mission-context/run-id-recovery.d.ts +44 -0
- package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -0
- package/server/dist/core/mission-context/run-id-recovery.js +175 -0
- package/server/dist/core/mission-context/run-id-recovery.js.map +1 -0
- package/server/dist/core/mission-context/scenario.d.ts +121 -0
- package/server/dist/core/mission-context/scenario.d.ts.map +1 -0
- package/server/dist/core/mission-context/scenario.js +151 -0
- package/server/dist/core/mission-context/scenario.js.map +1 -0
- package/server/dist/core/mission-context/slice2-sources.d.ts +40 -0
- package/server/dist/core/mission-context/slice2-sources.d.ts.map +1 -0
- package/server/dist/core/mission-context/slice2-sources.js +80 -0
- package/server/dist/core/mission-context/slice2-sources.js.map +1 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.d.ts +17 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.d.ts.map +1 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.js +61 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.js.map +1 -0
- package/server/dist/core/mission-context/slice3-sources.d.ts +43 -0
- package/server/dist/core/mission-context/slice3-sources.d.ts.map +1 -0
- package/server/dist/core/mission-context/slice3-sources.js +192 -0
- package/server/dist/core/mission-context/slice3-sources.js.map +1 -0
- package/server/dist/core/mission-context/spec-candidates.d.ts +66 -0
- package/server/dist/core/mission-context/spec-candidates.d.ts.map +1 -0
- package/server/dist/core/mission-context/spec-candidates.js +164 -0
- package/server/dist/core/mission-context/spec-candidates.js.map +1 -0
- package/server/dist/core/mission-context/test-evidence.d.ts +14 -0
- package/server/dist/core/mission-context/test-evidence.d.ts.map +1 -0
- package/server/dist/core/mission-context/test-evidence.js +53 -0
- package/server/dist/core/mission-context/test-evidence.js.map +1 -0
- package/server/dist/core/mission-context/tests-diff.d.ts +68 -0
- package/server/dist/core/mission-context/tests-diff.d.ts.map +1 -0
- package/server/dist/core/mission-context/tests-diff.js +151 -0
- package/server/dist/core/mission-context/tests-diff.js.map +1 -0
- package/server/dist/core/mission-context/traceability.d.ts +58 -0
- package/server/dist/core/mission-context/traceability.d.ts.map +1 -0
- package/server/dist/core/mission-context/traceability.js +168 -0
- package/server/dist/core/mission-context/traceability.js.map +1 -0
- package/server/dist/core/mission-context/types-slice2.d.ts +192 -0
- package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -0
- package/server/dist/core/mission-context/types-slice2.js +15 -0
- package/server/dist/core/mission-context/types-slice2.js.map +1 -0
- package/server/dist/core/mission-context/types-slice3.d.ts +84 -0
- package/server/dist/core/mission-context/types-slice3.d.ts.map +1 -0
- package/server/dist/core/mission-context/types-slice3.js +24 -0
- package/server/dist/core/mission-context/types-slice3.js.map +1 -0
- package/server/dist/core/mission-context/types.d.ts +198 -0
- package/server/dist/core/mission-context/types.d.ts.map +1 -0
- package/server/dist/core/mission-context/types.js +44 -0
- package/server/dist/core/mission-context/types.js.map +1 -0
- package/server/dist/core/mission-context/worktree-roots.d.ts +103 -0
- package/server/dist/core/mission-context/worktree-roots.d.ts.map +1 -0
- package/server/dist/core/mission-context/worktree-roots.js +201 -0
- package/server/dist/core/mission-context/worktree-roots.js.map +1 -0
- package/server/dist/core/model-tier-config-reader.d.ts +16 -0
- package/server/dist/core/model-tier-config-reader.d.ts.map +1 -0
- package/server/dist/core/model-tier-config-reader.js +87 -0
- package/server/dist/core/model-tier-config-reader.js.map +1 -0
- package/server/dist/core/normalize-fs-path.d.ts +2 -0
- package/server/dist/core/normalize-fs-path.d.ts.map +1 -0
- package/server/dist/core/normalize-fs-path.js +31 -0
- package/server/dist/core/normalize-fs-path.js.map +1 -0
- package/server/dist/core/parameter-resolver.d.ts +32 -0
- package/server/dist/core/parameter-resolver.d.ts.map +1 -0
- package/server/dist/core/parameter-resolver.js +300 -0
- package/server/dist/core/parameter-resolver.js.map +1 -0
- package/server/dist/core/path-guard.d.ts +40 -0
- package/server/dist/core/path-guard.d.ts.map +1 -0
- package/server/dist/core/path-guard.js +147 -0
- package/server/dist/core/path-guard.js.map +1 -0
- package/server/dist/core/pr-status.d.ts +47 -0
- package/server/dist/core/pr-status.d.ts.map +1 -0
- package/server/dist/core/pr-status.js +157 -0
- package/server/dist/core/pr-status.js.map +1 -0
- package/server/dist/core/preview-child-lifecycle.d.ts +77 -0
- package/server/dist/core/preview-child-lifecycle.d.ts.map +1 -0
- package/server/dist/core/preview-child-lifecycle.js +223 -0
- package/server/dist/core/preview-child-lifecycle.js.map +1 -0
- package/server/dist/core/preview-coherence.d.ts +59 -0
- package/server/dist/core/preview-coherence.d.ts.map +1 -0
- package/server/dist/core/preview-coherence.js +66 -0
- package/server/dist/core/preview-coherence.js.map +1 -0
- package/server/dist/core/preview-session-manager.d.ts +86 -0
- package/server/dist/core/preview-session-manager.d.ts.map +1 -0
- package/server/dist/core/preview-session-manager.js +303 -0
- package/server/dist/core/preview-session-manager.js.map +1 -0
- package/server/dist/core/preview-win32-spawn.d.ts +11 -0
- package/server/dist/core/preview-win32-spawn.d.ts.map +1 -0
- package/server/dist/core/preview-win32-spawn.js +45 -0
- package/server/dist/core/preview-win32-spawn.js.map +1 -0
- package/server/dist/core/profile-loader.d.ts +65 -0
- package/server/dist/core/profile-loader.d.ts.map +1 -0
- package/server/dist/core/profile-loader.js +125 -0
- package/server/dist/core/profile-loader.js.map +1 -0
- package/server/dist/core/project-actions-loader.d.ts +103 -0
- package/server/dist/core/project-actions-loader.d.ts.map +1 -0
- package/server/dist/core/project-actions-loader.js +161 -0
- package/server/dist/core/project-actions-loader.js.map +1 -0
- package/server/dist/core/project-manager.d.ts +110 -0
- package/server/dist/core/project-manager.d.ts.map +1 -0
- package/server/dist/core/project-manager.js +339 -0
- package/server/dist/core/project-manager.js.map +1 -0
- package/server/dist/core/project-registry-io.d.ts +64 -0
- package/server/dist/core/project-registry-io.d.ts.map +1 -0
- package/server/dist/core/project-registry-io.js +194 -0
- package/server/dist/core/project-registry-io.js.map +1 -0
- package/server/dist/core/readiness-probe.d.ts +89 -0
- package/server/dist/core/readiness-probe.d.ts.map +1 -0
- package/server/dist/core/readiness-probe.js +216 -0
- package/server/dist/core/readiness-probe.js.map +1 -0
- package/server/dist/core/run-config-reader.d.ts +35 -0
- package/server/dist/core/run-config-reader.d.ts.map +1 -0
- package/server/dist/core/run-config-reader.js +362 -0
- package/server/dist/core/run-config-reader.js.map +1 -0
- package/server/dist/core/run-data-join.d.ts +60 -0
- package/server/dist/core/run-data-join.d.ts.map +1 -0
- package/server/dist/core/run-data-join.js +264 -0
- package/server/dist/core/run-data-join.js.map +1 -0
- package/server/dist/core/run-data-types.d.ts +126 -0
- package/server/dist/core/run-data-types.d.ts.map +1 -0
- package/server/dist/core/run-data-types.js +25 -0
- package/server/dist/core/run-data-types.js.map +1 -0
- package/server/dist/core/run-loop-state-reader.d.ts +27 -0
- package/server/dist/core/run-loop-state-reader.d.ts.map +1 -0
- package/server/dist/core/run-loop-state-reader.js +79 -0
- package/server/dist/core/run-loop-state-reader.js.map +1 -0
- package/server/dist/core/sdk-sessions-merge.d.ts +60 -0
- package/server/dist/core/sdk-sessions-merge.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-merge.js +220 -0
- package/server/dist/core/sdk-sessions-merge.js.map +1 -0
- package/server/dist/core/sdk-sessions-store.d.ts +261 -0
- package/server/dist/core/sdk-sessions-store.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-store.js +315 -0
- package/server/dist/core/sdk-sessions-store.js.map +1 -0
- package/server/dist/core/sdk-sessions-validate.d.ts +9 -0
- package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-validate.js +237 -0
- package/server/dist/core/sdk-sessions-validate.js.map +1 -0
- package/server/dist/core/session-jsonl-io.d.ts +35 -0
- package/server/dist/core/session-jsonl-io.d.ts.map +1 -0
- package/server/dist/core/session-jsonl-io.js +128 -0
- package/server/dist/core/session-jsonl-io.js.map +1 -0
- package/server/dist/core/session-parser.d.ts +81 -0
- package/server/dist/core/session-parser.d.ts.map +1 -0
- package/server/dist/core/session-parser.js +168 -0
- package/server/dist/core/session-parser.js.map +1 -0
- package/server/dist/core/session-watcher-debug.d.ts +7 -0
- package/server/dist/core/session-watcher-debug.d.ts.map +1 -0
- package/server/dist/core/session-watcher-debug.js +31 -0
- package/server/dist/core/session-watcher-debug.js.map +1 -0
- package/server/dist/core/session-watcher.d.ts +101 -0
- package/server/dist/core/session-watcher.d.ts.map +1 -0
- package/server/dist/core/session-watcher.js +226 -0
- package/server/dist/core/session-watcher.js.map +1 -0
- package/server/dist/core/shell-quote.d.ts +5 -0
- package/server/dist/core/shell-quote.d.ts.map +1 -0
- package/server/dist/core/shell-quote.js +49 -0
- package/server/dist/core/shell-quote.js.map +1 -0
- package/server/dist/core/task-editability.d.ts +22 -0
- package/server/dist/core/task-editability.d.ts.map +1 -0
- package/server/dist/core/task-editability.js +34 -0
- package/server/dist/core/task-editability.js.map +1 -0
- package/server/dist/core/terminal-prompt-detect.d.ts +7 -0
- package/server/dist/core/terminal-prompt-detect.d.ts.map +1 -0
- package/server/dist/core/terminal-prompt-detect.js +128 -0
- package/server/dist/core/terminal-prompt-detect.js.map +1 -0
- package/server/dist/core/tests-gate.d.ts +23 -0
- package/server/dist/core/tests-gate.d.ts.map +1 -0
- package/server/dist/core/tests-gate.js +92 -0
- package/server/dist/core/tests-gate.js.map +1 -0
- package/server/dist/core/triage-amend.d.ts +33 -0
- package/server/dist/core/triage-amend.d.ts.map +1 -0
- package/server/dist/core/triage-amend.js +109 -0
- package/server/dist/core/triage-amend.js.map +1 -0
- package/server/dist/core/triage-board-read.d.ts +37 -0
- package/server/dist/core/triage-board-read.d.ts.map +1 -0
- package/server/dist/core/triage-board-read.js +148 -0
- package/server/dist/core/triage-board-read.js.map +1 -0
- package/server/dist/core/triage-cli-runner.d.ts +61 -0
- package/server/dist/core/triage-cli-runner.d.ts.map +1 -0
- package/server/dist/core/triage-cli-runner.js +92 -0
- package/server/dist/core/triage-cli-runner.js.map +1 -0
- package/server/dist/core/triage-compose.d.ts +33 -0
- package/server/dist/core/triage-compose.d.ts.map +1 -0
- package/server/dist/core/triage-compose.js +51 -0
- package/server/dist/core/triage-compose.js.map +1 -0
- package/server/dist/core/triage-contract.d.ts +18 -0
- package/server/dist/core/triage-contract.d.ts.map +1 -0
- package/server/dist/core/triage-contract.js +45 -0
- package/server/dist/core/triage-contract.js.map +1 -0
- package/server/dist/core/triage-defer.d.ts +36 -0
- package/server/dist/core/triage-defer.d.ts.map +1 -0
- package/server/dist/core/triage-defer.js +117 -0
- package/server/dist/core/triage-defer.js.map +1 -0
- package/server/dist/core/triage-enrich.d.ts +31 -0
- package/server/dist/core/triage-enrich.d.ts.map +1 -0
- package/server/dist/core/triage-enrich.js +127 -0
- package/server/dist/core/triage-enrich.js.map +1 -0
- package/server/dist/core/triage-lock.d.ts +12 -0
- package/server/dist/core/triage-lock.d.ts.map +1 -0
- package/server/dist/core/triage-lock.js +41 -0
- package/server/dist/core/triage-lock.js.map +1 -0
- package/server/dist/core/triage-origin.d.ts +52 -0
- package/server/dist/core/triage-origin.d.ts.map +1 -0
- package/server/dist/core/triage-origin.js +0 -0
- package/server/dist/core/triage-origin.js.map +1 -0
- package/server/dist/core/triage-paths.d.ts +25 -0
- package/server/dist/core/triage-paths.d.ts.map +1 -0
- package/server/dist/core/triage-paths.js +125 -0
- package/server/dist/core/triage-paths.js.map +1 -0
- package/server/dist/core/triage-raw.d.ts +33 -0
- package/server/dist/core/triage-raw.d.ts.map +1 -0
- package/server/dist/core/triage-raw.js +66 -0
- package/server/dist/core/triage-raw.js.map +1 -0
- package/server/dist/core/triage-store.d.ts +42 -0
- package/server/dist/core/triage-store.d.ts.map +1 -0
- package/server/dist/core/triage-store.js +268 -0
- package/server/dist/core/triage-store.js.map +1 -0
- package/server/dist/core/triage-validation.d.ts +58 -0
- package/server/dist/core/triage-validation.d.ts.map +1 -0
- package/server/dist/core/triage-validation.js +198 -0
- package/server/dist/core/triage-validation.js.map +1 -0
- package/server/dist/core/win32-spawn.d.ts +29 -0
- package/server/dist/core/win32-spawn.d.ts.map +1 -0
- package/server/dist/core/win32-spawn.js +271 -0
- package/server/dist/core/win32-spawn.js.map +1 -0
- package/server/dist/external/__tests__/api-contract-probes.d.ts +49 -0
- package/server/dist/external/__tests__/api-contract-probes.d.ts.map +1 -0
- package/server/dist/external/__tests__/api-contract-probes.js +295 -0
- package/server/dist/external/__tests__/api-contract-probes.js.map +1 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.d.ts +7 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.d.ts.map +1 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.js +41 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.js.map +1 -0
- package/server/dist/external/_routes-edit-fields-harness.d.ts +8 -0
- package/server/dist/external/_routes-edit-fields-harness.d.ts.map +1 -0
- package/server/dist/external/_routes-edit-fields-harness.js +49 -0
- package/server/dist/external/_routes-edit-fields-harness.js.map +1 -0
- package/server/dist/external/_shared/helpers.d.ts +143 -0
- package/server/dist/external/_shared/helpers.d.ts.map +1 -0
- package/server/dist/external/_shared/helpers.js +231 -0
- package/server/dist/external/_shared/helpers.js.map +1 -0
- package/server/dist/external/actions/_helpers.d.ts +15 -0
- package/server/dist/external/actions/_helpers.d.ts.map +1 -0
- package/server/dist/external/actions/_helpers.js +48 -0
- package/server/dist/external/actions/_helpers.js.map +1 -0
- package/server/dist/external/actions/get.d.ts +8 -0
- package/server/dist/external/actions/get.d.ts.map +1 -0
- package/server/dist/external/actions/get.js +96 -0
- package/server/dist/external/actions/get.js.map +1 -0
- package/server/dist/external/actions/routes.d.ts +9 -0
- package/server/dist/external/actions/routes.d.ts.map +1 -0
- package/server/dist/external/actions/routes.js +33 -0
- package/server/dist/external/actions/routes.js.map +1 -0
- package/server/dist/external/actions/stub.d.ts +6 -0
- package/server/dist/external/actions/stub.d.ts.map +1 -0
- package/server/dist/external/actions/stub.js +51 -0
- package/server/dist/external/actions/stub.js.map +1 -0
- package/server/dist/external/actions/upload-delete.d.ts +6 -0
- package/server/dist/external/actions/upload-delete.d.ts.map +1 -0
- package/server/dist/external/actions/upload-delete.js +46 -0
- package/server/dist/external/actions/upload-delete.js.map +1 -0
- package/server/dist/external/actions/upload.d.ts +6 -0
- package/server/dist/external/actions/upload.d.ts.map +1 -0
- package/server/dist/external/actions/upload.js +141 -0
- package/server/dist/external/actions/upload.js.map +1 -0
- package/server/dist/external/compliance/routes.d.ts +9 -0
- package/server/dist/external/compliance/routes.d.ts.map +1 -0
- package/server/dist/external/compliance/routes.js +46 -0
- package/server/dist/external/compliance/routes.js.map +1 -0
- package/server/dist/external/design-review/__tests__/_helpers.d.ts +16 -0
- package/server/dist/external/design-review/__tests__/_helpers.d.ts.map +1 -0
- package/server/dist/external/design-review/__tests__/_helpers.js +92 -0
- package/server/dist/external/design-review/__tests__/_helpers.js.map +1 -0
- package/server/dist/external/design-review/feedback-write.d.ts +7 -0
- package/server/dist/external/design-review/feedback-write.d.ts.map +1 -0
- package/server/dist/external/design-review/feedback-write.js +126 -0
- package/server/dist/external/design-review/feedback-write.js.map +1 -0
- package/server/dist/external/design-review/gate.d.ts +11 -0
- package/server/dist/external/design-review/gate.d.ts.map +1 -0
- package/server/dist/external/design-review/gate.js +39 -0
- package/server/dist/external/design-review/gate.js.map +1 -0
- package/server/dist/external/design-review/routes.d.ts +9 -0
- package/server/dist/external/design-review/routes.d.ts.map +1 -0
- package/server/dist/external/design-review/routes.js +25 -0
- package/server/dist/external/design-review/routes.js.map +1 -0
- package/server/dist/external/design-review/serve.d.ts +10 -0
- package/server/dist/external/design-review/serve.d.ts.map +1 -0
- package/server/dist/external/design-review/serve.js +184 -0
- package/server/dist/external/design-review/serve.js.map +1 -0
- package/server/dist/external/events/routes.d.ts +16 -0
- package/server/dist/external/events/routes.d.ts.map +1 -0
- package/server/dist/external/events/routes.js +46 -0
- package/server/dist/external/events/routes.js.map +1 -0
- package/server/dist/external/file/_helpers.d.ts +62 -0
- package/server/dist/external/file/_helpers.d.ts.map +1 -0
- package/server/dist/external/file/_helpers.js +146 -0
- package/server/dist/external/file/_helpers.js.map +1 -0
- package/server/dist/external/file/routes.d.ts +7 -0
- package/server/dist/external/file/routes.d.ts.map +1 -0
- package/server/dist/external/file/routes.js +122 -0
- package/server/dist/external/file/routes.js.map +1 -0
- package/server/dist/external/file/write.d.ts +20 -0
- package/server/dist/external/file/write.d.ts.map +1 -0
- package/server/dist/external/file/write.js +172 -0
- package/server/dist/external/file/write.js.map +1 -0
- package/server/dist/external/inbox/_cache.d.ts +48 -0
- package/server/dist/external/inbox/_cache.d.ts.map +1 -0
- package/server/dist/external/inbox/_cache.js +46 -0
- package/server/dist/external/inbox/_cache.js.map +1 -0
- package/server/dist/external/inbox/_derive.d.ts +56 -0
- package/server/dist/external/inbox/_derive.d.ts.map +1 -0
- package/server/dist/external/inbox/_derive.js +231 -0
- package/server/dist/external/inbox/_derive.js.map +1 -0
- package/server/dist/external/inbox/routes.d.ts +13 -0
- package/server/dist/external/inbox/routes.d.ts.map +1 -0
- package/server/dist/external/inbox/routes.js +59 -0
- package/server/dist/external/inbox/routes.js.map +1 -0
- package/server/dist/external/launch/_helpers.d.ts +17 -0
- package/server/dist/external/launch/_helpers.d.ts.map +1 -0
- package/server/dist/external/launch/_helpers.js +25 -0
- package/server/dist/external/launch/_helpers.js.map +1 -0
- package/server/dist/external/launch/action-substitution-branch.d.ts +11 -0
- package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -0
- package/server/dist/external/launch/action-substitution-branch.js +112 -0
- package/server/dist/external/launch/action-substitution-branch.js.map +1 -0
- package/server/dist/external/launch/campaign-branch.d.ts +12 -0
- package/server/dist/external/launch/campaign-branch.d.ts.map +1 -0
- package/server/dist/external/launch/campaign-branch.js +95 -0
- package/server/dist/external/launch/campaign-branch.js.map +1 -0
- package/server/dist/external/launch/campaign-step-branch.d.ts +12 -0
- package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -0
- package/server/dist/external/launch/campaign-step-branch.js +108 -0
- package/server/dist/external/launch/campaign-step-branch.js.map +1 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts +12 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -0
- package/server/dist/external/launch/legacy-fallback-branch.js +29 -0
- package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -0
- package/server/dist/external/launch/master-run-branch.d.ts +24 -0
- package/server/dist/external/launch/master-run-branch.d.ts.map +1 -0
- package/server/dist/external/launch/master-run-branch.js +168 -0
- package/server/dist/external/launch/master-run-branch.js.map +1 -0
- package/server/dist/external/launch/parse-body.d.ts +46 -0
- package/server/dist/external/launch/parse-body.d.ts.map +1 -0
- package/server/dist/external/launch/parse-body.js +115 -0
- package/server/dist/external/launch/parse-body.js.map +1 -0
- package/server/dist/external/launch/phase-task-branch.d.ts +18 -0
- package/server/dist/external/launch/phase-task-branch.d.ts.map +1 -0
- package/server/dist/external/launch/phase-task-branch.js +170 -0
- package/server/dist/external/launch/phase-task-branch.js.map +1 -0
- package/server/dist/external/launch/routes.d.ts +23 -0
- package/server/dist/external/launch/routes.d.ts.map +1 -0
- package/server/dist/external/launch/routes.js +198 -0
- package/server/dist/external/launch/routes.js.map +1 -0
- package/server/dist/external/media/_helpers.d.ts +32 -0
- package/server/dist/external/media/_helpers.d.ts.map +1 -0
- package/server/dist/external/media/_helpers.js +77 -0
- package/server/dist/external/media/_helpers.js.map +1 -0
- package/server/dist/external/media/routes.d.ts +7 -0
- package/server/dist/external/media/routes.d.ts.map +1 -0
- package/server/dist/external/media/routes.js +120 -0
- package/server/dist/external/media/routes.js.map +1 -0
- package/server/dist/external/mission-context/facts-slice3.d.ts +22 -0
- package/server/dist/external/mission-context/facts-slice3.d.ts.map +1 -0
- package/server/dist/external/mission-context/facts-slice3.js +143 -0
- package/server/dist/external/mission-context/facts-slice3.js.map +1 -0
- package/server/dist/external/mission-context/facts.d.ts +44 -0
- package/server/dist/external/mission-context/facts.d.ts.map +1 -0
- package/server/dist/external/mission-context/facts.js +109 -0
- package/server/dist/external/mission-context/facts.js.map +1 -0
- package/server/dist/external/mission-context/routes.d.ts +83 -0
- package/server/dist/external/mission-context/routes.d.ts.map +1 -0
- package/server/dist/external/mission-context/routes.js +226 -0
- package/server/dist/external/mission-context/routes.js.map +1 -0
- package/server/dist/external/mission-context/test-harness.d.ts +62 -0
- package/server/dist/external/mission-context/test-harness.d.ts.map +1 -0
- package/server/dist/external/mission-context/test-harness.js +121 -0
- package/server/dist/external/mission-context/test-harness.js.map +1 -0
- package/server/dist/external/mission-context/wire.d.ts +12 -0
- package/server/dist/external/mission-context/wire.d.ts.map +1 -0
- package/server/dist/external/mission-context/wire.js +62 -0
- package/server/dist/external/mission-context/wire.js.map +1 -0
- package/server/dist/external/model-config/routes.d.ts +9 -0
- package/server/dist/external/model-config/routes.d.ts.map +1 -0
- package/server/dist/external/model-config/routes.js +18 -0
- package/server/dist/external/model-config/routes.js.map +1 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.d.ts +2 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.d.ts.map +1 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.js +67 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.js.map +1 -0
- package/server/dist/external/org/_helpers.d.ts +67 -0
- package/server/dist/external/org/_helpers.d.ts.map +1 -0
- package/server/dist/external/org/_helpers.js +146 -0
- package/server/dist/external/org/_helpers.js.map +1 -0
- package/server/dist/external/org/beat-register-release-audit.d.ts +17 -0
- package/server/dist/external/org/beat-register-release-audit.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release-audit.js +96 -0
- package/server/dist/external/org/beat-register-release-audit.js.map +1 -0
- package/server/dist/external/org/beat-register-release-core.d.ts +50 -0
- package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release-core.js +183 -0
- package/server/dist/external/org/beat-register-release-core.js.map +1 -0
- package/server/dist/external/org/beat-register-release.d.ts +13 -0
- package/server/dist/external/org/beat-register-release.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release.js +81 -0
- package/server/dist/external/org/beat-register-release.js.map +1 -0
- package/server/dist/external/org/beat-register.d.ts +100 -0
- package/server/dist/external/org/beat-register.d.ts.map +1 -0
- package/server/dist/external/org/beat-register.js +198 -0
- package/server/dist/external/org/beat-register.js.map +1 -0
- package/server/dist/external/org/countersign.d.ts +8 -0
- package/server/dist/external/org/countersign.d.ts.map +1 -0
- package/server/dist/external/org/countersign.js +157 -0
- package/server/dist/external/org/countersign.js.map +1 -0
- package/server/dist/external/org/cron.d.ts +22 -0
- package/server/dist/external/org/cron.d.ts.map +1 -0
- package/server/dist/external/org/cron.js +59 -0
- package/server/dist/external/org/cron.js.map +1 -0
- package/server/dist/external/org/decisions-lock.d.ts +68 -0
- package/server/dist/external/org/decisions-lock.d.ts.map +1 -0
- package/server/dist/external/org/decisions-lock.js +209 -0
- package/server/dist/external/org/decisions-lock.js.map +1 -0
- package/server/dist/external/org/file-read.d.ts +14 -0
- package/server/dist/external/org/file-read.d.ts.map +1 -0
- package/server/dist/external/org/file-read.js +80 -0
- package/server/dist/external/org/file-read.js.map +1 -0
- package/server/dist/external/org/file-write.d.ts +14 -0
- package/server/dist/external/org/file-write.d.ts.map +1 -0
- package/server/dist/external/org/file-write.js +205 -0
- package/server/dist/external/org/file-write.js.map +1 -0
- package/server/dist/external/org/last-run.d.ts +28 -0
- package/server/dist/external/org/last-run.d.ts.map +1 -0
- package/server/dist/external/org/last-run.js +137 -0
- package/server/dist/external/org/last-run.js.map +1 -0
- package/server/dist/external/org/org-chart-lookup.d.ts +16 -0
- package/server/dist/external/org/org-chart-lookup.d.ts.map +1 -0
- package/server/dist/external/org/org-chart-lookup.js +100 -0
- package/server/dist/external/org/org-chart-lookup.js.map +1 -0
- package/server/dist/external/org/org-chart.d.ts +25 -0
- package/server/dist/external/org/org-chart.d.ts.map +1 -0
- package/server/dist/external/org/org-chart.js +110 -0
- package/server/dist/external/org/org-chart.js.map +1 -0
- package/server/dist/external/org/routes.d.ts +12 -0
- package/server/dist/external/org/routes.d.ts.map +1 -0
- package/server/dist/external/org/routes.js +90 -0
- package/server/dist/external/org/routes.js.map +1 -0
- package/server/dist/external/org/usage.d.ts +24 -0
- package/server/dist/external/org/usage.d.ts.map +1 -0
- package/server/dist/external/org/usage.js +110 -0
- package/server/dist/external/org/usage.js.map +1 -0
- package/server/dist/external/pr-status/routes.d.ts +7 -0
- package/server/dist/external/pr-status/routes.d.ts.map +1 -0
- package/server/dist/external/pr-status/routes.js +37 -0
- package/server/dist/external/pr-status/routes.js.map +1 -0
- package/server/dist/external/preview/routes.d.ts +10 -0
- package/server/dist/external/preview/routes.d.ts.map +1 -0
- package/server/dist/external/preview/routes.js +71 -0
- package/server/dist/external/preview/routes.js.map +1 -0
- package/server/dist/external/routes.d.ts +106 -0
- package/server/dist/external/routes.d.ts.map +1 -0
- package/server/dist/external/routes.js +162 -0
- package/server/dist/external/routes.js.map +1 -0
- package/server/dist/external/run-config/routes.d.ts +9 -0
- package/server/dist/external/run-config/routes.d.ts.map +1 -0
- package/server/dist/external/run-config/routes.js +55 -0
- package/server/dist/external/run-config/routes.js.map +1 -0
- package/server/dist/external/runs/routes.d.ts +16 -0
- package/server/dist/external/runs/routes.d.ts.map +1 -0
- package/server/dist/external/runs/routes.js +69 -0
- package/server/dist/external/runs/routes.js.map +1 -0
- package/server/dist/external/tasks/_phase-helpers.d.ts +37 -0
- package/server/dist/external/tasks/_phase-helpers.d.ts.map +1 -0
- package/server/dist/external/tasks/_phase-helpers.js +101 -0
- package/server/dist/external/tasks/_phase-helpers.js.map +1 -0
- package/server/dist/external/tasks/create.d.ts +12 -0
- package/server/dist/external/tasks/create.d.ts.map +1 -0
- package/server/dist/external/tasks/create.js +139 -0
- package/server/dist/external/tasks/create.js.map +1 -0
- package/server/dist/external/tasks/lifecycle.d.ts +12 -0
- package/server/dist/external/tasks/lifecycle.d.ts.map +1 -0
- package/server/dist/external/tasks/lifecycle.js +231 -0
- package/server/dist/external/tasks/lifecycle.js.map +1 -0
- package/server/dist/external/tasks/list-get.d.ts +11 -0
- package/server/dist/external/tasks/list-get.d.ts.map +1 -0
- package/server/dist/external/tasks/list-get.js +50 -0
- package/server/dist/external/tasks/list-get.js.map +1 -0
- package/server/dist/external/tasks/patch.d.ts +12 -0
- package/server/dist/external/tasks/patch.d.ts.map +1 -0
- package/server/dist/external/tasks/patch.js +192 -0
- package/server/dist/external/tasks/patch.js.map +1 -0
- package/server/dist/external/tasks/routes.d.ts +18 -0
- package/server/dist/external/tasks/routes.d.ts.map +1 -0
- package/server/dist/external/tasks/routes.js +49 -0
- package/server/dist/external/tasks/routes.js.map +1 -0
- package/server/dist/external/transcript/routes.d.ts +12 -0
- package/server/dist/external/transcript/routes.d.ts.map +1 -0
- package/server/dist/external/transcript/routes.js +160 -0
- package/server/dist/external/transcript/routes.js.map +1 -0
- package/server/dist/external/tree/routes.d.ts +7 -0
- package/server/dist/external/tree/routes.d.ts.map +1 -0
- package/server/dist/external/tree/routes.js +96 -0
- package/server/dist/external/tree/routes.js.map +1 -0
- package/server/dist/index.d.ts +3 -0
- package/server/dist/index.d.ts.map +1 -0
- package/server/dist/index.js +774 -0
- package/server/dist/index.js.map +1 -0
- package/server/dist/lib/bind-errors.d.ts +18 -0
- package/server/dist/lib/bind-errors.d.ts.map +1 -0
- package/server/dist/lib/bind-errors.js +43 -0
- package/server/dist/lib/bind-errors.js.map +1 -0
- package/server/dist/lib/resolveHonoHost.d.ts +3 -0
- package/server/dist/lib/resolveHonoHost.d.ts.map +1 -0
- package/server/dist/lib/resolveHonoHost.js +34 -0
- package/server/dist/lib/resolveHonoHost.js.map +1 -0
- package/server/dist/lib/resolveNetworkProfile.d.ts +28 -0
- package/server/dist/lib/resolveNetworkProfile.d.ts.map +1 -0
- package/server/dist/lib/resolveNetworkProfile.js +42 -0
- package/server/dist/lib/resolveNetworkProfile.js.map +1 -0
- package/server/dist/lib/resolveTailscaleIp.d.ts +26 -0
- package/server/dist/lib/resolveTailscaleIp.d.ts.map +1 -0
- package/server/dist/lib/resolveTailscaleIp.js +61 -0
- package/server/dist/lib/resolveTailscaleIp.js.map +1 -0
- package/server/dist/lib/resolveTrustedOrigins.d.ts +9 -0
- package/server/dist/lib/resolveTrustedOrigins.d.ts.map +1 -0
- package/server/dist/lib/resolveTrustedOrigins.js +154 -0
- package/server/dist/lib/resolveTrustedOrigins.js.map +1 -0
- package/server/dist/middleware/error-handler.d.ts +8 -0
- package/server/dist/middleware/error-handler.d.ts.map +1 -0
- package/server/dist/middleware/error-handler.js +75 -0
- package/server/dist/middleware/error-handler.js.map +1 -0
- package/server/dist/middleware/logger.d.ts +3 -0
- package/server/dist/middleware/logger.d.ts.map +1 -0
- package/server/dist/middleware/logger.js +13 -0
- package/server/dist/middleware/logger.js.map +1 -0
- package/server/dist/routes/_triage-api-harness.d.ts +16 -0
- package/server/dist/routes/_triage-api-harness.d.ts.map +1 -0
- package/server/dist/routes/_triage-api-harness.js +89 -0
- package/server/dist/routes/_triage-api-harness.js.map +1 -0
- package/server/dist/routes/campaigns.d.ts +26 -0
- package/server/dist/routes/campaigns.d.ts.map +1 -0
- package/server/dist/routes/campaigns.js +237 -0
- package/server/dist/routes/campaigns.js.map +1 -0
- package/server/dist/routes/diagnostics.d.ts +84 -0
- package/server/dist/routes/diagnostics.d.ts.map +1 -0
- package/server/dist/routes/diagnostics.js +143 -0
- package/server/dist/routes/diagnostics.js.map +1 -0
- package/server/dist/routes/grade.d.ts +13 -0
- package/server/dist/routes/grade.d.ts.map +1 -0
- package/server/dist/routes/grade.js +45 -0
- package/server/dist/routes/grade.js.map +1 -0
- package/server/dist/routes/profiles.d.ts +25 -0
- package/server/dist/routes/profiles.d.ts.map +1 -0
- package/server/dist/routes/profiles.js +58 -0
- package/server/dist/routes/profiles.js.map +1 -0
- package/server/dist/routes/projects.d.ts +20 -0
- package/server/dist/routes/projects.d.ts.map +1 -0
- package/server/dist/routes/projects.js +105 -0
- package/server/dist/routes/projects.js.map +1 -0
- package/server/dist/routes/readiness.d.ts +11 -0
- package/server/dist/routes/readiness.d.ts.map +1 -0
- package/server/dist/routes/readiness.js +52 -0
- package/server/dist/routes/readiness.js.map +1 -0
- package/server/dist/routes/settings.d.ts +13 -0
- package/server/dist/routes/settings.d.ts.map +1 -0
- package/server/dist/routes/settings.js +69 -0
- package/server/dist/routes/settings.js.map +1 -0
- package/server/dist/routes/terminal-appearance.d.ts +7 -0
- package/server/dist/routes/terminal-appearance.d.ts.map +1 -0
- package/server/dist/routes/terminal-appearance.js +28 -0
- package/server/dist/routes/terminal-appearance.js.map +1 -0
- package/server/dist/routes/triage.d.ts +35 -0
- package/server/dist/routes/triage.d.ts.map +1 -0
- package/server/dist/routes/triage.js +496 -0
- package/server/dist/routes/triage.js.map +1 -0
- package/server/dist/terminal/backpressure-telemetry.d.ts +86 -0
- package/server/dist/terminal/backpressure-telemetry.d.ts.map +1 -0
- package/server/dist/terminal/backpressure-telemetry.js +158 -0
- package/server/dist/terminal/backpressure-telemetry.js.map +1 -0
- package/server/dist/terminal/boot-wipe.d.ts +47 -0
- package/server/dist/terminal/boot-wipe.d.ts.map +1 -0
- package/server/dist/terminal/boot-wipe.js +122 -0
- package/server/dist/terminal/boot-wipe.js.map +1 -0
- package/server/dist/terminal/headless-mirror.d.ts +139 -0
- package/server/dist/terminal/headless-mirror.d.ts.map +1 -0
- package/server/dist/terminal/headless-mirror.js +389 -0
- package/server/dist/terminal/headless-mirror.js.map +1 -0
- package/server/dist/terminal/headless-probe.d.ts +26 -0
- package/server/dist/terminal/headless-probe.d.ts.map +1 -0
- package/server/dist/terminal/headless-probe.js +99 -0
- package/server/dist/terminal/headless-probe.js.map +1 -0
- package/server/dist/terminal/idle-reaper.d.ts +47 -0
- package/server/dist/terminal/idle-reaper.d.ts.map +1 -0
- package/server/dist/terminal/idle-reaper.js +95 -0
- package/server/dist/terminal/idle-reaper.js.map +1 -0
- package/server/dist/terminal/image-paste.d.ts +60 -0
- package/server/dist/terminal/image-paste.d.ts.map +1 -0
- package/server/dist/terminal/image-paste.js +260 -0
- package/server/dist/terminal/image-paste.js.map +1 -0
- package/server/dist/terminal/pty-manager.d.ts +452 -0
- package/server/dist/terminal/pty-manager.d.ts.map +1 -0
- package/server/dist/terminal/pty-manager.js +1014 -0
- package/server/dist/terminal/pty-manager.js.map +1 -0
- package/server/dist/terminal/replay-snapshot.d.ts +25 -0
- package/server/dist/terminal/replay-snapshot.d.ts.map +1 -0
- package/server/dist/terminal/replay-snapshot.js +124 -0
- package/server/dist/terminal/replay-snapshot.js.map +1 -0
- package/server/dist/terminal/resync-gate.d.ts +20 -0
- package/server/dist/terminal/resync-gate.d.ts.map +1 -0
- package/server/dist/terminal/resync-gate.js +58 -0
- package/server/dist/terminal/resync-gate.js.map +1 -0
- package/server/dist/terminal/routes.d.ts +67 -0
- package/server/dist/terminal/routes.d.ts.map +1 -0
- package/server/dist/terminal/routes.js +455 -0
- package/server/dist/terminal/routes.js.map +1 -0
- package/server/dist/terminal/scrollback-store.d.ts +120 -0
- package/server/dist/terminal/scrollback-store.d.ts.map +1 -0
- package/server/dist/terminal/scrollback-store.js +572 -0
- package/server/dist/terminal/scrollback-store.js.map +1 -0
- package/server/dist/terminal/snapshot-preserve.d.ts +63 -0
- package/server/dist/terminal/snapshot-preserve.d.ts.map +1 -0
- package/server/dist/terminal/snapshot-preserve.js +116 -0
- package/server/dist/terminal/snapshot-preserve.js.map +1 -0
- package/server/dist/terminal/snapshot-store.d.ts +147 -0
- package/server/dist/terminal/snapshot-store.d.ts.map +1 -0
- package/server/dist/terminal/snapshot-store.js +439 -0
- package/server/dist/terminal/snapshot-store.js.map +1 -0
- package/server/dist/terminal/snapshot-tmp-sweep.d.ts +48 -0
- package/server/dist/terminal/snapshot-tmp-sweep.d.ts.map +1 -0
- package/server/dist/terminal/snapshot-tmp-sweep.js +141 -0
- package/server/dist/terminal/snapshot-tmp-sweep.js.map +1 -0
- package/server/dist/terminal/spawn-env.d.ts +46 -0
- package/server/dist/terminal/spawn-env.d.ts.map +1 -0
- package/server/dist/terminal/spawn-env.js +232 -0
- package/server/dist/terminal/spawn-env.js.map +1 -0
- package/server/dist/terminal/terminal-reset.d.ts +31 -0
- package/server/dist/terminal/terminal-reset.d.ts.map +1 -0
- package/server/dist/terminal/terminal-reset.js +43 -0
- package/server/dist/terminal/terminal-reset.js.map +1 -0
- package/server/dist/terminal/ws-heartbeat.d.ts +78 -0
- package/server/dist/terminal/ws-heartbeat.d.ts.map +1 -0
- package/server/dist/terminal/ws-heartbeat.js +164 -0
- package/server/dist/terminal/ws-heartbeat.js.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.d.ts +96 -0
- package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts +46 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js +126 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.js +518 -0
- package/server/dist/terminal/ws-upgrade-handler.js.map +1 -0
- package/server/dist/types/action-schema.d.ts +75 -0
- package/server/dist/types/action-schema.d.ts.map +1 -0
- package/server/dist/types/action-schema.js +32 -0
- package/server/dist/types/action-schema.js.map +1 -0
- package/server/dist/types/project.d.ts +72 -0
- package/server/dist/types/project.d.ts.map +1 -0
- package/server/dist/types/project.js +16 -0
- package/server/dist/types/project.js.map +1 -0
- package/server/dist/types/run-config-v2.d.ts +172 -0
- package/server/dist/types/run-config-v2.d.ts.map +1 -0
- package/server/dist/types/run-config-v2.js +169 -0
- package/server/dist/types/run-config-v2.js.map +1 -0
- package/server/dist/types/settings.d.ts +25 -0
- package/server/dist/types/settings.d.ts.map +1 -0
- package/server/dist/types/settings.js +12 -0
- package/server/dist/types/settings.js.map +1 -0
- package/server/dist/types/task.d.ts +55 -0
- package/server/dist/types/task.d.ts.map +1 -0
- package/server/dist/types/task.js +13 -0
- package/server/dist/types/task.js.map +1 -0
- package/server/dist/types/triage.d.ts +135 -0
- package/server/dist/types/triage.d.ts.map +1 -0
- package/server/dist/types/triage.js +15 -0
- package/server/dist/types/triage.js.map +1 -0
- package/server/package.json +43 -0
- package/server/profiles/PROFILE_SCHEMA_VERSION +1 -0
- package/server/profiles/README.md +27 -0
- package/server/profiles/python-plugin-monorepo.json +35 -0
- package/server/profiles/supabase-nextjs.json +253 -0
- package/server/profiles/vite-hono.json +92 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Candidate SPEC document locations, in preference order, built from the KNOWN
|
|
3
|
+
* LAYOUT only — never from a pointer- or record-supplied sub-path (§5.1c).
|
|
4
|
+
*
|
|
5
|
+
* Both real layouts are covered: the per-run directory
|
|
6
|
+
* (`…/iterate/<run_id>/mini-plan.md`) and the flat file
|
|
7
|
+
* (`…/iterate/<date-slug>.md`, i.e. the run_id minus its `iterate-` prefix,
|
|
8
|
+
* which is the shape the `spec` field records).
|
|
9
|
+
*/
|
|
10
|
+
export declare function specCandidates(runId: string, slug: string | null): string[][];
|
|
11
|
+
/**
|
|
12
|
+
* The `spec` path RECORDED BY THE FRAMEWORK in `iterates/<run_id>.json`,
|
|
13
|
+
* validated into known-layout segments — or null.
|
|
14
|
+
*
|
|
15
|
+
* Why this exists (PROBE, 2026-07-18): measuring the 206 real iterate runs in
|
|
16
|
+
* this repo, the known-layout candidates resolve 82; 105 have genuinely no
|
|
17
|
+
* document left on disk; and **19 have a real spec the candidates MISS** —
|
|
18
|
+
* campaign SUB-ITERATE specs, which live at
|
|
19
|
+
* `.shipwright/planning/iterate/campaigns/<campaign>/sub-iterates/<ID>-<slug>.md`.
|
|
20
|
+
* That is this very campaign's own layout, so without this a campaign
|
|
21
|
+
* sub-iterate would show no Spec artifact at all.
|
|
22
|
+
*
|
|
23
|
+
* This is NOT a relaxation of §5.1. That rule forbids trusting a sub-path from
|
|
24
|
+
* the POINTER — untrusted, out-of-process input. This value comes from the
|
|
25
|
+
* framework's own agent-doc, and it is still fully constrained here:
|
|
26
|
+
* - it must live under `.shipwright/planning/iterate/` (so a recorded
|
|
27
|
+
* `01-adopted/spec.md#FR-01.25` — the whole project spec, which would be
|
|
28
|
+
* misleading as "the plan for this run" — is rejected along with anything
|
|
29
|
+
* outside the iterate tree);
|
|
30
|
+
* - any `#fragment` is dropped;
|
|
31
|
+
* - every segment must pass the strict id grammar (kills `..`, separators,
|
|
32
|
+
* encoded separators and unusual Unicode);
|
|
33
|
+
* - it must end in `.md`;
|
|
34
|
+
* and the caller still runs pathGuard + realPathGuard against the chosen root,
|
|
35
|
+
* which remains the actual security boundary.
|
|
36
|
+
*/
|
|
37
|
+
export declare function specHintCandidate(hint: string | null | undefined): string[] | null;
|
|
38
|
+
/**
|
|
39
|
+
* Campaign sub-iterate spec candidates, rebuilt from the NEVER-EVICTED event
|
|
40
|
+
* facts (`campaign` + `sub_iterate_id` on `work_completed`).
|
|
41
|
+
*
|
|
42
|
+
* Why this exists (trg-92c0c36b). `iterates/<run_id>.json` is a bounded 50-entry
|
|
43
|
+
* recency window (`append_iterate_entry` retention), and for a campaign
|
|
44
|
+
* sub-iterate its `spec` hint is the ONLY thing that resolves the Spec artifact
|
|
45
|
+
* — the known-layout candidates cannot name a path they have no campaign slug
|
|
46
|
+
* for. So today a sub-iterate's Spec silently vanishes the moment its agent-doc
|
|
47
|
+
* ages out. PROBE, 2026-07-21, this repo: 214 iterate runs in the event log but
|
|
48
|
+
* only 54 surviving agent-docs (160 evicted, 75%); 14 of the survivors resolve
|
|
49
|
+
* ONLY via the hint, and 28 runs' specs are reachable from the event facts
|
|
50
|
+
* where the known layout misses. Rebuilding from the append-only log makes that
|
|
51
|
+
* resolution survive eviction instead of decaying with it.
|
|
52
|
+
*
|
|
53
|
+
* `spec` itself is NOT read from the event log: measured on the same corpus it
|
|
54
|
+
* is present on 1 of 54 rows, so it is not a substitute source — the campaign
|
|
55
|
+
* slug (55 rows) and sub-iterate id (54 rows) are.
|
|
56
|
+
*
|
|
57
|
+
* Trust model — UNCHANGED from `specHintCandidate`: the two values come from
|
|
58
|
+
* the framework's own event log, contribute exactly TWO path segments, and the
|
|
59
|
+
* layout around them is hard-coded here. Both must pass the strict id grammar
|
|
60
|
+
* (kills `..`, separators, encoded separators, unusual Unicode), the directory
|
|
61
|
+
* read is `pathGuard`ed, only regular files are offered (a symlink is never a
|
|
62
|
+
* candidate), and the caller still runs pathGuard + realPathGuard on whatever
|
|
63
|
+
* it opens — which remains the actual security boundary.
|
|
64
|
+
*/
|
|
65
|
+
export declare function campaignSpecCandidates(root: string, campaign: string | null | undefined, subIterateId: string | null | undefined): string[][];
|
|
66
|
+
//# sourceMappingURL=spec-candidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-candidates.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/spec-candidates.ts"],"names":[],"mappings":"AA8BA;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,CAW7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,CAgBlF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,MAAM,EAAE,EAAE,CAwCZ"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* core/mission-context/spec-candidates.ts — every candidate PATH at which a
|
|
3
|
+
* run's spec document may live, in preference order.
|
|
4
|
+
*
|
|
5
|
+
* Three builders, in increasing order of how much they trust their input, and
|
|
6
|
+
* ALL of them emit only known-layout segment arrays — the caller still runs
|
|
7
|
+
* pathGuard + realPathGuard on whatever it opens, which remains the actual
|
|
8
|
+
* security boundary (§5.1):
|
|
9
|
+
*
|
|
10
|
+
* 1. `specCandidates` — pure layout, from run_id + slug alone.
|
|
11
|
+
* 2. `specHintCandidate` — the `spec` path the framework recorded in
|
|
12
|
+
* `iterates/<run_id>.json`, grammar-validated.
|
|
13
|
+
* 3. `campaignSpecCandidates` — a campaign sub-iterate path rebuilt from the
|
|
14
|
+
* never-evicted `work_completed` event, so it
|
|
15
|
+
* survives the agent-doc's 50-entry retention
|
|
16
|
+
* window (trg-92c0c36b).
|
|
17
|
+
*
|
|
18
|
+
* Split out of `iterate-record.ts` when (3) pushed that file past the 300-LOC
|
|
19
|
+
* ceiling; that module keeps the RECORD reads (agent-doc + event lookup), this
|
|
20
|
+
* one owns PATH construction.
|
|
21
|
+
*/
|
|
22
|
+
import { readdirSync } from "node:fs";
|
|
23
|
+
import { pathGuard } from "../path-guard.js";
|
|
24
|
+
import { isSafeRunId } from "./pointer.js";
|
|
25
|
+
/** Bounds a pathological sub-iterates directory (CONTRACT §11). */
|
|
26
|
+
const MAX_CAMPAIGN_DIR_ENTRIES = 1000;
|
|
27
|
+
/**
|
|
28
|
+
* Candidate SPEC document locations, in preference order, built from the KNOWN
|
|
29
|
+
* LAYOUT only — never from a pointer- or record-supplied sub-path (§5.1c).
|
|
30
|
+
*
|
|
31
|
+
* Both real layouts are covered: the per-run directory
|
|
32
|
+
* (`…/iterate/<run_id>/mini-plan.md`) and the flat file
|
|
33
|
+
* (`…/iterate/<date-slug>.md`, i.e. the run_id minus its `iterate-` prefix,
|
|
34
|
+
* which is the shape the `spec` field records).
|
|
35
|
+
*/
|
|
36
|
+
export function specCandidates(runId, slug) {
|
|
37
|
+
const base = [".shipwright", "planning", "iterate"];
|
|
38
|
+
const dateSlug = runId.startsWith("iterate-") ? runId.slice("iterate-".length) : runId;
|
|
39
|
+
const candidates = [
|
|
40
|
+
[...base, runId, "mini-plan.md"],
|
|
41
|
+
[...base, runId, "adr.md"],
|
|
42
|
+
[...base, `${runId}.md`],
|
|
43
|
+
[...base, `${dateSlug}.md`],
|
|
44
|
+
];
|
|
45
|
+
if (slug && slug !== dateSlug)
|
|
46
|
+
candidates.push([...base, `${slug}.md`]);
|
|
47
|
+
return candidates;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The `spec` path RECORDED BY THE FRAMEWORK in `iterates/<run_id>.json`,
|
|
51
|
+
* validated into known-layout segments — or null.
|
|
52
|
+
*
|
|
53
|
+
* Why this exists (PROBE, 2026-07-18): measuring the 206 real iterate runs in
|
|
54
|
+
* this repo, the known-layout candidates resolve 82; 105 have genuinely no
|
|
55
|
+
* document left on disk; and **19 have a real spec the candidates MISS** —
|
|
56
|
+
* campaign SUB-ITERATE specs, which live at
|
|
57
|
+
* `.shipwright/planning/iterate/campaigns/<campaign>/sub-iterates/<ID>-<slug>.md`.
|
|
58
|
+
* That is this very campaign's own layout, so without this a campaign
|
|
59
|
+
* sub-iterate would show no Spec artifact at all.
|
|
60
|
+
*
|
|
61
|
+
* This is NOT a relaxation of §5.1. That rule forbids trusting a sub-path from
|
|
62
|
+
* the POINTER — untrusted, out-of-process input. This value comes from the
|
|
63
|
+
* framework's own agent-doc, and it is still fully constrained here:
|
|
64
|
+
* - it must live under `.shipwright/planning/iterate/` (so a recorded
|
|
65
|
+
* `01-adopted/spec.md#FR-01.25` — the whole project spec, which would be
|
|
66
|
+
* misleading as "the plan for this run" — is rejected along with anything
|
|
67
|
+
* outside the iterate tree);
|
|
68
|
+
* - any `#fragment` is dropped;
|
|
69
|
+
* - every segment must pass the strict id grammar (kills `..`, separators,
|
|
70
|
+
* encoded separators and unusual Unicode);
|
|
71
|
+
* - it must end in `.md`;
|
|
72
|
+
* and the caller still runs pathGuard + realPathGuard against the chosen root,
|
|
73
|
+
* which remains the actual security boundary.
|
|
74
|
+
*/
|
|
75
|
+
export function specHintCandidate(hint) {
|
|
76
|
+
if (typeof hint !== "string" || hint.length === 0 || hint.length > 512)
|
|
77
|
+
return null;
|
|
78
|
+
const withoutFragment = hint.split("#")[0].trim();
|
|
79
|
+
if (!withoutFragment.toLowerCase().endsWith(".md"))
|
|
80
|
+
return null;
|
|
81
|
+
const parts = withoutFragment.replace(/\\/g, "/").split("/").filter((p) => p.length > 0);
|
|
82
|
+
const prefix = [".shipwright", "planning", "iterate"];
|
|
83
|
+
if (parts.length <= prefix.length)
|
|
84
|
+
return null;
|
|
85
|
+
for (let i = 0; i < prefix.length; i++) {
|
|
86
|
+
if (parts[i] !== prefix[i])
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
// Every remaining segment must be a safe id (the `.md` leaf included).
|
|
90
|
+
for (const seg of parts.slice(prefix.length)) {
|
|
91
|
+
if (!isSafeRunId(seg))
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return parts;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Campaign sub-iterate spec candidates, rebuilt from the NEVER-EVICTED event
|
|
98
|
+
* facts (`campaign` + `sub_iterate_id` on `work_completed`).
|
|
99
|
+
*
|
|
100
|
+
* Why this exists (trg-92c0c36b). `iterates/<run_id>.json` is a bounded 50-entry
|
|
101
|
+
* recency window (`append_iterate_entry` retention), and for a campaign
|
|
102
|
+
* sub-iterate its `spec` hint is the ONLY thing that resolves the Spec artifact
|
|
103
|
+
* — the known-layout candidates cannot name a path they have no campaign slug
|
|
104
|
+
* for. So today a sub-iterate's Spec silently vanishes the moment its agent-doc
|
|
105
|
+
* ages out. PROBE, 2026-07-21, this repo: 214 iterate runs in the event log but
|
|
106
|
+
* only 54 surviving agent-docs (160 evicted, 75%); 14 of the survivors resolve
|
|
107
|
+
* ONLY via the hint, and 28 runs' specs are reachable from the event facts
|
|
108
|
+
* where the known layout misses. Rebuilding from the append-only log makes that
|
|
109
|
+
* resolution survive eviction instead of decaying with it.
|
|
110
|
+
*
|
|
111
|
+
* `spec` itself is NOT read from the event log: measured on the same corpus it
|
|
112
|
+
* is present on 1 of 54 rows, so it is not a substitute source — the campaign
|
|
113
|
+
* slug (55 rows) and sub-iterate id (54 rows) are.
|
|
114
|
+
*
|
|
115
|
+
* Trust model — UNCHANGED from `specHintCandidate`: the two values come from
|
|
116
|
+
* the framework's own event log, contribute exactly TWO path segments, and the
|
|
117
|
+
* layout around them is hard-coded here. Both must pass the strict id grammar
|
|
118
|
+
* (kills `..`, separators, encoded separators, unusual Unicode), the directory
|
|
119
|
+
* read is `pathGuard`ed, only regular files are offered (a symlink is never a
|
|
120
|
+
* candidate), and the caller still runs pathGuard + realPathGuard on whatever
|
|
121
|
+
* it opens — which remains the actual security boundary.
|
|
122
|
+
*/
|
|
123
|
+
export function campaignSpecCandidates(root, campaign, subIterateId) {
|
|
124
|
+
if (!isSafeRunId(campaign) || !isSafeRunId(subIterateId))
|
|
125
|
+
return [];
|
|
126
|
+
const rel = [".shipwright", "planning", "iterate", "campaigns", campaign, "sub-iterates"];
|
|
127
|
+
const guard = pathGuard(root, rel.join("/"));
|
|
128
|
+
if (!guard.ok)
|
|
129
|
+
return [];
|
|
130
|
+
let names;
|
|
131
|
+
try {
|
|
132
|
+
names = readdirSync(guard.absolute, { withFileTypes: true })
|
|
133
|
+
// Bounded, so a pathological directory cannot turn a poll into a stall
|
|
134
|
+
// (CONTRACT §11). Real sub-iterate directories hold tens of entries.
|
|
135
|
+
.slice(0, MAX_CAMPAIGN_DIR_ENTRIES)
|
|
136
|
+
// Regular files ONLY — `isFile()` is false for a symlink, so a link is
|
|
137
|
+
// never even offered as a candidate.
|
|
138
|
+
.filter((e) => e.isFile())
|
|
139
|
+
.map((e) => e.name);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// ENOENT / ENOTDIR / EACCES — this run simply has no campaign spec here.
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
const exact = `${subIterateId.toLowerCase()}.md`;
|
|
146
|
+
// The trailing `-` is load-bearing: without it `W1` would also claim `W10-…`.
|
|
147
|
+
const prefix = `${subIterateId.toLowerCase()}-`;
|
|
148
|
+
return names
|
|
149
|
+
.filter((n) => {
|
|
150
|
+
if (!isSafeRunId(n))
|
|
151
|
+
return false;
|
|
152
|
+
const l = n.toLowerCase();
|
|
153
|
+
return l.endsWith(".md") && (l === exact || l.startsWith(prefix));
|
|
154
|
+
})
|
|
155
|
+
// Deterministic order — an exact `<id>.md` outranks a `<id>-<slug>.md`, then
|
|
156
|
+
// lexicographic. A stable order matters: the caller mints the document id
|
|
157
|
+
// from the candidate it matched.
|
|
158
|
+
.sort((a, b) => {
|
|
159
|
+
const rank = Number(a.toLowerCase() !== exact) - Number(b.toLowerCase() !== exact);
|
|
160
|
+
return rank !== 0 ? rank : a.localeCompare(b);
|
|
161
|
+
})
|
|
162
|
+
.map((n) => [...rel, n]);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=spec-candidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-candidates.js","sourceRoot":"","sources":["../../../src/core/mission-context/spec-candidates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface TestEvidence {
|
|
2
|
+
status: "available" | "unavailable";
|
|
3
|
+
verifiedBehaviors: string[];
|
|
4
|
+
completeness: {
|
|
5
|
+
tested: number;
|
|
6
|
+
testable: number;
|
|
7
|
+
untestedTestable: number;
|
|
8
|
+
} | null;
|
|
9
|
+
note: string | null;
|
|
10
|
+
}
|
|
11
|
+
/** Read only the immutable F5c snapshot for this exact Mission run. */
|
|
12
|
+
export declare function readTestEvidence(projectRoot: string, runId: string): TestEvidence;
|
|
13
|
+
export declare function testEvidencePath(projectRoot: string, runId: string): string;
|
|
14
|
+
//# sourceMappingURL=test-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-evidence.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/test-evidence.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC;IACpC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAID,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAwCjF;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3E"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { readBoundedFile } from "./fs-read.js";
|
|
4
|
+
import { pathGuard } from "../path-guard.js";
|
|
5
|
+
const MAX_BYTES = 1024 * 1024;
|
|
6
|
+
/** Read only the immutable F5c snapshot for this exact Mission run. */
|
|
7
|
+
export function readTestEvidence(projectRoot, runId) {
|
|
8
|
+
const rel = [".shipwright", "agent_docs", "iterates", `${runId}.test-results.json`].join("/");
|
|
9
|
+
const guard = pathGuard(projectRoot, rel);
|
|
10
|
+
if (!guard.ok || !existsSync(guard.absolute)) {
|
|
11
|
+
return { status: "unavailable", verifiedBehaviors: [], completeness: null, note: "The per-run test evidence is not available." };
|
|
12
|
+
}
|
|
13
|
+
const read = readBoundedFile(guard.absolute, MAX_BYTES);
|
|
14
|
+
if (!read)
|
|
15
|
+
return { status: "unavailable", verifiedBehaviors: [], completeness: null, note: "The per-run test evidence could not be read." };
|
|
16
|
+
try {
|
|
17
|
+
const parsed = JSON.parse(read.text);
|
|
18
|
+
const latest = parsed.iterate_latest;
|
|
19
|
+
const completenessRecord = latest?.test_completeness;
|
|
20
|
+
if (latest?.run_id !== runId || !completenessRecord) {
|
|
21
|
+
return { status: "unavailable", verifiedBehaviors: [], completeness: null, note: "The per-run test evidence could not be matched to this Mission." };
|
|
22
|
+
}
|
|
23
|
+
if (completenessRecord.status === "n/a") {
|
|
24
|
+
return { status: "available", verifiedBehaviors: [], completeness: null, note: "This run recorded no testable behaviours." };
|
|
25
|
+
}
|
|
26
|
+
if (completenessRecord.status !== "complete" || !Array.isArray(completenessRecord.behaviors)) {
|
|
27
|
+
return { status: "unavailable", verifiedBehaviors: [], completeness: null, note: "The per-run test evidence is incomplete." };
|
|
28
|
+
}
|
|
29
|
+
const behaviors = completenessRecord.behaviors;
|
|
30
|
+
const isBehavior = (entry) => Boolean(entry) && typeof entry === "object" && typeof entry.behavior === "string" && entry.behavior.trim().length > 0 && (entry.disposition === "tested" || entry.disposition === "untestable");
|
|
31
|
+
if (!behaviors.every(isBehavior)) {
|
|
32
|
+
return { status: "unavailable", verifiedBehaviors: [], completeness: null, note: "The per-run test evidence contains malformed behaviours." };
|
|
33
|
+
}
|
|
34
|
+
const allVerifiedBehaviors = behaviors.filter((entry) => entry.disposition === "tested").map((entry) => entry.behavior);
|
|
35
|
+
const verifiedBehaviors = allVerifiedBehaviors.slice(0, 12);
|
|
36
|
+
const counts = completenessRecord.counts;
|
|
37
|
+
const nonNegativeInteger = (value) => typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
38
|
+
const completeness = counts && nonNegativeInteger(counts.tested) && nonNegativeInteger(counts.testable) && nonNegativeInteger(counts.untested_testable) && counts.tested <= counts.testable && counts.tested + counts.untested_testable === counts.testable && counts.tested === allVerifiedBehaviors.length
|
|
39
|
+
? { tested: counts.tested, testable: counts.testable, untestedTestable: counts.untested_testable }
|
|
40
|
+
: null;
|
|
41
|
+
if (!completeness) {
|
|
42
|
+
return { status: "unavailable", verifiedBehaviors: [], completeness: null, note: "The per-run test-completeness counts are inconsistent." };
|
|
43
|
+
}
|
|
44
|
+
return { status: "available", verifiedBehaviors, completeness, note: null };
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return { status: "unavailable", verifiedBehaviors: [], completeness: null, note: "The per-run test evidence is malformed." };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function testEvidencePath(projectRoot, runId) {
|
|
51
|
+
return path.join(projectRoot, ".shipwright", "agent_docs", "iterates", `${runId}.test-results.json`);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=test-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-evidence.js","sourceRoot":"","sources":["../../../src/core/mission-context/test-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { GitRunner } from "./worktree-roots.js";
|
|
2
|
+
import type { TestChangeKind } from "./types-slice2.js";
|
|
3
|
+
export interface ChangedTestFile {
|
|
4
|
+
/** POSIX-style repo-relative path. Display-safe: inside the repo by definition. */
|
|
5
|
+
path: string;
|
|
6
|
+
kind: TestChangeKind;
|
|
7
|
+
}
|
|
8
|
+
export type TestsDiff = {
|
|
9
|
+
status: "ok";
|
|
10
|
+
files: ChangedTestFile[];
|
|
11
|
+
truncated: boolean;
|
|
12
|
+
} | {
|
|
13
|
+
status: "unavailable";
|
|
14
|
+
reason: "bad_commit" | "git_failed";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Bound what we KEEP. Beyond this the caller reports truncation honestly.
|
|
18
|
+
*
|
|
19
|
+
* CALIBRATED, not guessed (external plan review, HIGH #3). Measured over this
|
|
20
|
+
* repo's last 60 commits: the median commit touches 0 test files, the 95th
|
|
21
|
+
* percentile touches 13, and the two largest — both campaign-scale sweeps, incl.
|
|
22
|
+
* the #289 traceability retrofit that re-tagged every suite — touch 77 and 116.
|
|
23
|
+
* A cap of 50 would therefore have truncated REAL commits, which is why the
|
|
24
|
+
* first guess was wrong. 500 leaves >4x headroom over the largest observed
|
|
25
|
+
* commit while keeping the response bounded (~100 KB worst case), so a
|
|
26
|
+
* paginated endpoint would add an access-controlled surface for a case the
|
|
27
|
+
* history does not contain. Truncation is still REPORTED if it ever happens.
|
|
28
|
+
*/
|
|
29
|
+
export declare const MAX_TEST_FILES = 500;
|
|
30
|
+
/**
|
|
31
|
+
* Is this path a test file? Deliberately conservative — a false positive would
|
|
32
|
+
* put a production file in the Tests artifact and misreport the run.
|
|
33
|
+
*
|
|
34
|
+
* Covers this repo's two real conventions: co-located `*.test.ts(x)` (vitest)
|
|
35
|
+
* and `client/e2e/**\/*.spec.ts` (Playwright).
|
|
36
|
+
*/
|
|
37
|
+
export declare function isTestFile(p: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Layer for a file the manifest does not know (the `removed` case always lands
|
|
40
|
+
* here — the entry is gone). Returns null rather than guessing when the path
|
|
41
|
+
* carries no signal: an honest unknown beats an invented layer.
|
|
42
|
+
*/
|
|
43
|
+
export declare function inferLayer(p: string): string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Parse `git show --name-status -z` output into changed TEST files only.
|
|
46
|
+
*
|
|
47
|
+
* NUL-DELIMITED, not line-based (external plan review, MEDIUM #6). A git path
|
|
48
|
+
* may contain a tab, a quote, a newline or arbitrary Unicode; with `-z` git
|
|
49
|
+
* emits the RAW bytes as `<status>NUL<path>NUL…` and performs no quoting, so
|
|
50
|
+
* splitting on NUL is exact. Line-splitting would mis-parse such a path — and
|
|
51
|
+
* silently, which is the worst way for a test-reporting feature to fail.
|
|
52
|
+
*
|
|
53
|
+
* Exported for direct unit testing: the parser is where the real logic lives,
|
|
54
|
+
* and testing it through a git double would only test the double.
|
|
55
|
+
*/
|
|
56
|
+
export declare function parseNameStatus(out: string): {
|
|
57
|
+
files: ChangedTestFile[];
|
|
58
|
+
truncated: boolean;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Which test files this run's commit changed.
|
|
62
|
+
*
|
|
63
|
+
* `unavailable` is returned when git could not answer — NEVER an empty `ok`.
|
|
64
|
+
* Reporting "no tests changed" because git failed is precisely the false
|
|
65
|
+
* negative this feature must not produce.
|
|
66
|
+
*/
|
|
67
|
+
export declare function readChangedTestFiles(projectRoot: string, commit: string | null, git: GitRunner): Promise<TestsDiff>;
|
|
68
|
+
//# sourceMappingURL=tests-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests-diff.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/tests-diff.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC9D;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAA;CAAE,CAAC;AAKnE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAKlC;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKnD;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAqC7F;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,EAAE,SAAS,GACb,OAAO,CAAC,SAAS,CAAC,CAkBpB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* core/mission-context/tests-diff.ts — the Tests BASELINE-DIFF (CONTRACT
|
|
3
|
+
* §10 Slice-2, campaign 2026-07-18-mission-artifacts).
|
|
4
|
+
*
|
|
5
|
+
* The contract asks for "the manifest at iterate start vs. finalize (and/or the
|
|
6
|
+
* git diff of test files)". The WebUI is a read-only OBSERVER (Architecture
|
|
7
|
+
* rule 4, DO-NOT #1) — it is never running when an iterate starts, so it cannot
|
|
8
|
+
* capture a start-of-run snapshot. The git diff of the run's own commit IS the
|
|
9
|
+
* baseline diff, and it is authoritative rather than reconstructed:
|
|
10
|
+
*
|
|
11
|
+
* git show --name-status <commit> → A / M / D per file
|
|
12
|
+
*
|
|
13
|
+
* `D` is exactly the AC2 case — "its manifest entry no longer exists". A removed
|
|
14
|
+
* test cannot be found by inspecting the current manifest (that is the whole
|
|
15
|
+
* point of a removal), so the diff is the ONLY source that can classify it.
|
|
16
|
+
*
|
|
17
|
+
* git runs as an ARGUMENT ARRAY with `shell: false` (never a command string),
|
|
18
|
+
* and the commit is hex-validated BEFORE it becomes an argument, so a recorded
|
|
19
|
+
* sha cannot smuggle a flag (`--upload-pack=…`) or a pathspec.
|
|
20
|
+
*/
|
|
21
|
+
/** Bound a pathological commit — a tree-wide rewrite must not be unbounded. */
|
|
22
|
+
const MAX_DIFF_TOKENS = 40_000;
|
|
23
|
+
/**
|
|
24
|
+
* Bound what we KEEP. Beyond this the caller reports truncation honestly.
|
|
25
|
+
*
|
|
26
|
+
* CALIBRATED, not guessed (external plan review, HIGH #3). Measured over this
|
|
27
|
+
* repo's last 60 commits: the median commit touches 0 test files, the 95th
|
|
28
|
+
* percentile touches 13, and the two largest — both campaign-scale sweeps, incl.
|
|
29
|
+
* the #289 traceability retrofit that re-tagged every suite — touch 77 and 116.
|
|
30
|
+
* A cap of 50 would therefore have truncated REAL commits, which is why the
|
|
31
|
+
* first guess was wrong. 500 leaves >4x headroom over the largest observed
|
|
32
|
+
* commit while keeping the response bounded (~100 KB worst case), so a
|
|
33
|
+
* paginated endpoint would add an access-controlled surface for a case the
|
|
34
|
+
* history does not contain. Truncation is still REPORTED if it ever happens.
|
|
35
|
+
*/
|
|
36
|
+
export const MAX_TEST_FILES = 500;
|
|
37
|
+
/** A recorded sha is untrusted input until it matches this. */
|
|
38
|
+
const SHA_RE = /^[0-9a-f]{7,40}$/i;
|
|
39
|
+
/**
|
|
40
|
+
* Is this path a test file? Deliberately conservative — a false positive would
|
|
41
|
+
* put a production file in the Tests artifact and misreport the run.
|
|
42
|
+
*
|
|
43
|
+
* Covers this repo's two real conventions: co-located `*.test.ts(x)` (vitest)
|
|
44
|
+
* and `client/e2e/**\/*.spec.ts` (Playwright).
|
|
45
|
+
*/
|
|
46
|
+
export function isTestFile(p) {
|
|
47
|
+
const f = p.toLowerCase();
|
|
48
|
+
if (/\.(test|spec)\.(ts|tsx|js|jsx|mts|cts)$/.test(f))
|
|
49
|
+
return true;
|
|
50
|
+
// A helper/fixture inside an e2e tree is part of the test surface too.
|
|
51
|
+
return /(^|\/)e2e\//.test(f) && /\.(ts|tsx)$/.test(f);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Layer for a file the manifest does not know (the `removed` case always lands
|
|
55
|
+
* here — the entry is gone). Returns null rather than guessing when the path
|
|
56
|
+
* carries no signal: an honest unknown beats an invented layer.
|
|
57
|
+
*/
|
|
58
|
+
export function inferLayer(p) {
|
|
59
|
+
const f = p.toLowerCase();
|
|
60
|
+
if (/(^|\/)e2e\//.test(f) || /\.spec\.(ts|tsx|js|jsx)$/.test(f))
|
|
61
|
+
return "e2e";
|
|
62
|
+
if (/\.test\.(ts|tsx|js|jsx|mts|cts)$/.test(f))
|
|
63
|
+
return "unit";
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function classify(status) {
|
|
67
|
+
const c = status[0]?.toUpperCase();
|
|
68
|
+
if (c === "A")
|
|
69
|
+
return "added";
|
|
70
|
+
if (c === "D")
|
|
71
|
+
return "removed";
|
|
72
|
+
// M (modified), T (type change), and — with `--no-renames` off, defensively —
|
|
73
|
+
// R/C are all "this file changed" from a reader's point of view.
|
|
74
|
+
if (c === "M" || c === "T" || c === "R" || c === "C")
|
|
75
|
+
return "modified";
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Parse `git show --name-status -z` output into changed TEST files only.
|
|
80
|
+
*
|
|
81
|
+
* NUL-DELIMITED, not line-based (external plan review, MEDIUM #6). A git path
|
|
82
|
+
* may contain a tab, a quote, a newline or arbitrary Unicode; with `-z` git
|
|
83
|
+
* emits the RAW bytes as `<status>NUL<path>NUL…` and performs no quoting, so
|
|
84
|
+
* splitting on NUL is exact. Line-splitting would mis-parse such a path — and
|
|
85
|
+
* silently, which is the worst way for a test-reporting feature to fail.
|
|
86
|
+
*
|
|
87
|
+
* Exported for direct unit testing: the parser is where the real logic lives,
|
|
88
|
+
* and testing it through a git double would only test the double.
|
|
89
|
+
*/
|
|
90
|
+
export function parseNameStatus(out) {
|
|
91
|
+
const files = [];
|
|
92
|
+
const seen = new Set();
|
|
93
|
+
const tokens = out.split("\0");
|
|
94
|
+
let truncated = false;
|
|
95
|
+
for (let i = 0; i + 1 < tokens.length; i += 2) {
|
|
96
|
+
if (i >= MAX_DIFF_TOKENS) {
|
|
97
|
+
truncated = true;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
// Tokens alternate status, path. A stray empty token (trailing NUL) is
|
|
101
|
+
// skipped by re-syncing on the next non-empty status token.
|
|
102
|
+
const status = tokens[i];
|
|
103
|
+
if (!status) {
|
|
104
|
+
i -= 1; // re-align: consume one token instead of two
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const kind = classify(status);
|
|
108
|
+
// The token is used VERBATIM. Folding `\` to `/` or trimming would partly
|
|
109
|
+
// undo the `-z` hardening two lines up: git always reports POSIX paths, so
|
|
110
|
+
// a backslash here is a literal character in a legitimate filename, and
|
|
111
|
+
// leading/trailing whitespace is likewise part of the name. Either edit
|
|
112
|
+
// silently breaks the manifest join. (The backslash fold belongs to
|
|
113
|
+
// manifest ids, which may be Windows-shaped — `traceability.ts` does it
|
|
114
|
+
// there, where it is correct.)
|
|
115
|
+
const p = tokens[i + 1];
|
|
116
|
+
if (!kind || !p || !isTestFile(p) || seen.has(p))
|
|
117
|
+
continue;
|
|
118
|
+
if (files.length >= MAX_TEST_FILES) {
|
|
119
|
+
truncated = true;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
seen.add(p);
|
|
123
|
+
files.push({ path: p, kind });
|
|
124
|
+
}
|
|
125
|
+
return { files, truncated };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Which test files this run's commit changed.
|
|
129
|
+
*
|
|
130
|
+
* `unavailable` is returned when git could not answer — NEVER an empty `ok`.
|
|
131
|
+
* Reporting "no tests changed" because git failed is precisely the false
|
|
132
|
+
* negative this feature must not produce.
|
|
133
|
+
*/
|
|
134
|
+
export async function readChangedTestFiles(projectRoot, commit, git) {
|
|
135
|
+
if (!commit || !SHA_RE.test(commit))
|
|
136
|
+
return { status: "unavailable", reason: "bad_commit" };
|
|
137
|
+
let out;
|
|
138
|
+
try {
|
|
139
|
+
out = await git(
|
|
140
|
+
// `-z` — raw NUL-delimited paths, so a path containing a tab/newline/
|
|
141
|
+
// quote cannot be mis-parsed. `--first-parent` keeps a merge commit
|
|
142
|
+
// meaningful instead of silently empty.
|
|
143
|
+
["show", "--name-status", "--format=", "--no-renames", "--first-parent", "-z", commit, "--"], projectRoot);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Commit not in this repo (a sibling clone's sha), git missing, timeout.
|
|
147
|
+
return { status: "unavailable", reason: "git_failed" };
|
|
148
|
+
}
|
|
149
|
+
return { status: "ok", ...parseNameStatus(out) };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=tests-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests-diff.js","sourceRoot":"","sources":["../../../src/core/mission-context/tests-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { TestFrRef } from "./types-slice2.js";
|
|
2
|
+
export declare const TRACEABILITY_REL = ".shipwright/compliance/test-traceability.json";
|
|
3
|
+
/**
|
|
4
|
+
* Cap on indexed test entries. A pathological manifest cannot make this loop
|
|
5
|
+
* (or the resulting Map) unbounded. Real: 1038.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MAX_TEST_ENTRIES = 50000;
|
|
8
|
+
export interface TraceabilityFileEntry {
|
|
9
|
+
/** Distinct layers this file's tests are recorded under (`unit`, `e2e`, …). */
|
|
10
|
+
layers: string[];
|
|
11
|
+
/**
|
|
12
|
+
* Distinct requirement links, deduped by `frId`. `mappedFrom` carries the
|
|
13
|
+
* fold provenance — the FOLDED id the source tag named, when the manifest
|
|
14
|
+
* resolved it to a surviving parent (AC2).
|
|
15
|
+
*/
|
|
16
|
+
frs: TestFrRef[];
|
|
17
|
+
/** How many individual test cases the manifest records for this file. */
|
|
18
|
+
caseCount: number;
|
|
19
|
+
}
|
|
20
|
+
export type TraceabilityIndex = {
|
|
21
|
+
status: "ok";
|
|
22
|
+
byFile: Map<string, TraceabilityFileEntry>;
|
|
23
|
+
generatedAt: string | null;
|
|
24
|
+
/**
|
|
25
|
+
* The entry cap was hit, so the index is PARTIAL.
|
|
26
|
+
*
|
|
27
|
+
* This must be reported (external code review, MEDIUM): a changed test
|
|
28
|
+
* whose manifest entry fell after the cap would otherwise render with no
|
|
29
|
+
* requirement links while the UI claimed the manifest was fine — a false
|
|
30
|
+
* negative dressed as a clean answer, which is the exact failure this
|
|
31
|
+
* whole slice exists to prevent.
|
|
32
|
+
*/
|
|
33
|
+
truncated: boolean;
|
|
34
|
+
} | {
|
|
35
|
+
status: "unavailable";
|
|
36
|
+
reason: "missing" | "too_large" | "corrupt" | "denied";
|
|
37
|
+
};
|
|
38
|
+
/** Absolute path to the manifest — used for `sourceRev` probing. */
|
|
39
|
+
export declare function traceabilityPath(projectRoot: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* A manifest test `id` is `<file path>::<test name>`. Only the FILE half joins
|
|
42
|
+
* against a git diff, so split on the FIRST `::` and normalise separators —
|
|
43
|
+
* git reports POSIX paths, the manifest may carry either.
|
|
44
|
+
*/
|
|
45
|
+
export declare function testIdToFile(id: string): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Read + invert the manifest. Never throws: every defect becomes a typed
|
|
48
|
+
* `unavailable` the caller renders honestly.
|
|
49
|
+
*/
|
|
50
|
+
export declare function readTraceabilityIndex(projectRoot: string,
|
|
51
|
+
/**
|
|
52
|
+
* Entry cap. Overridable ONLY so the truncation branch below has a direct
|
|
53
|
+
* test: a 50k-entry fixture would be absurd, and asserting the cap through a
|
|
54
|
+
* hand-built `{truncated: true}` downstream would still pass if this producer
|
|
55
|
+
* never set the flag (internal code review, FIX-IF-CHEAP).
|
|
56
|
+
*/
|
|
57
|
+
maxEntries?: number): TraceabilityIndex;
|
|
58
|
+
//# sourceMappingURL=traceability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceability.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/traceability.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,gBAAgB,kDAAkD,CAAC;AAKhF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC,MAAM,WAAW,qBAAqB;IACpC,+EAA+E;IAC/E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC3C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;;OAQG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB,GACD;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC;AAEtF,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMtD;AAcD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM;AACnB;;;;;GAKG;AACH,UAAU,GAAE,MAAyB,GACpC,iBAAiB,CAwFnB"}
|