@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,249 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* core/mission-context/review-state.ts — the REVIEW source (CONTRACT §9.1,
|
|
3
|
+
* decided in Slice 2; campaign 2026-07-18-mission-artifacts).
|
|
4
|
+
*
|
|
5
|
+
* ── THE DECISION (Sven, 2026-07-18) ────────────────────────────────────────
|
|
6
|
+
* Ship Review from the sources that already have a CLEAN CONTRACT — the
|
|
7
|
+
* per-iterate `external_*review_state.json` markers written by
|
|
8
|
+
* `shared/scripts/checks/mark-review-state.py` — and represent the INTERNAL
|
|
9
|
+
* self / code / doubt passes explicitly as unavailable. The alternative
|
|
10
|
+
* (scraping the raw session JSONL for reviewer subagent output) has no stable
|
|
11
|
+
* contract; guessing one would fabricate review history, which is the single
|
|
12
|
+
* worst thing this artifact could do. The monorepo follow-up that gives the
|
|
13
|
+
* internal passes a real machine-readable record is filed as `trg-74ec44b8`.
|
|
14
|
+
*
|
|
15
|
+
* ── WHY "unavailable" AND NOT "not run" ────────────────────────────────────
|
|
16
|
+
* They are DIFFERENT facts and the §6 state model exists to keep them apart:
|
|
17
|
+
*
|
|
18
|
+
* not_run a marker EXISTS and says the pass was skipped (opt-out,
|
|
19
|
+
* below threshold, missing keys). We know it did not run.
|
|
20
|
+
* unavailable we have no readable record either way. The pass may well
|
|
21
|
+
* have run — we cannot see it.
|
|
22
|
+
*
|
|
23
|
+
* Rendering an unreadable pass as "clean" (or as a silent absence) would turn a
|
|
24
|
+
* data-integrity gap into a false assurance. That is the exact lie the state
|
|
25
|
+
* model was introduced to kill, and it is worth the extra enum value.
|
|
26
|
+
*
|
|
27
|
+
* MEASURED ON THIS REPO 2026-07-18: 55 marker files, ONE uniform shape
|
|
28
|
+
* (`status`, `timestamp`, `provider`, `findings_count`, `self_review_fallback_ran`,
|
|
29
|
+
* `reason`, `review_mode`). Note what it does NOT contain: a per-finding array.
|
|
30
|
+
* So `findings[]` is always empty here and `findingsCount` is the real number —
|
|
31
|
+
* the UI must show the count and say the details are not recorded, never
|
|
32
|
+
* render an empty list as "no findings".
|
|
33
|
+
*/
|
|
34
|
+
import { existsSync } from "node:fs";
|
|
35
|
+
import path from "node:path";
|
|
36
|
+
import { readBoundedFile } from "./fs-read.js";
|
|
37
|
+
import { REVIEW_TYPES, readReviewRecord, reviewRecordPath } from "./review-record.js";
|
|
38
|
+
import { pathGuard } from "../path-guard.js";
|
|
39
|
+
import { isSafeRunId } from "./pointer.js";
|
|
40
|
+
/** Marker basenames, mapped to the review type each one records. */
|
|
41
|
+
const MARKERS = [
|
|
42
|
+
{ file: "external_review_state.json", type: "plan" },
|
|
43
|
+
{ file: "external_code_review_state.json", type: "external_code" },
|
|
44
|
+
];
|
|
45
|
+
/** A marker is a few hundred bytes; 256 KB bounds a corrupt one generously. */
|
|
46
|
+
const MAX_MARKER_BYTES = 256 * 1024;
|
|
47
|
+
/**
|
|
48
|
+
* Contract order — `self` first; it is the one review that always runs.
|
|
49
|
+
*
|
|
50
|
+
* IMPORTED rather than restated: `ReviewType` now admits any string, so the
|
|
51
|
+
* `ReviewType[]` annotation this list used to carry would no longer catch a
|
|
52
|
+
* typo, and a second literal could drift from the record path's without
|
|
53
|
+
* anything failing.
|
|
54
|
+
*/
|
|
55
|
+
const REVIEW_TYPE_ORDER = REVIEW_TYPES;
|
|
56
|
+
const RECORD_INTEGRITY_NOTE = "This run's review record exists but could not be read. That is a data " +
|
|
57
|
+
"problem, not a clean result.";
|
|
58
|
+
/** Prose disposition can be long (a real one runs to a paragraph) — bound it. */
|
|
59
|
+
const MAX_DISPOSITION_CHARS = 2000;
|
|
60
|
+
/**
|
|
61
|
+
* The internal passes have no machine-readable record TODAY. Naming the
|
|
62
|
+
* follow-up in the note keeps the gap traceable instead of mysterious.
|
|
63
|
+
*/
|
|
64
|
+
const INTERNAL_NOTE = "The internal review passes do not yet write a machine-readable record, " +
|
|
65
|
+
"so this run's result cannot be shown. This is a known gap, not a clean result.";
|
|
66
|
+
/** Byte-identical to `unreadableRow` but for its note — so it IS that call. */
|
|
67
|
+
function internalRow(reviewType) {
|
|
68
|
+
return unreadableRow(reviewType, INTERNAL_NOTE);
|
|
69
|
+
}
|
|
70
|
+
function unreadableRow(reviewType, note) {
|
|
71
|
+
return {
|
|
72
|
+
reviewType,
|
|
73
|
+
status: "unavailable",
|
|
74
|
+
findingsCount: null,
|
|
75
|
+
findings: [],
|
|
76
|
+
provider: null,
|
|
77
|
+
completedAt: null,
|
|
78
|
+
disposition: null,
|
|
79
|
+
note,
|
|
80
|
+
parseStatus: null,
|
|
81
|
+
source: "marker",
|
|
82
|
+
truncated: false,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function asStr(v, max = 200) {
|
|
86
|
+
return typeof v === "string" && v.trim().length > 0 ? v.trim().slice(0, max) : null;
|
|
87
|
+
}
|
|
88
|
+
/** Directory holding a run's review markers. */
|
|
89
|
+
export function reviewStateDir(projectRoot, runId) {
|
|
90
|
+
return path.join(projectRoot, ".shipwright", "planning", "iterate", runId);
|
|
91
|
+
}
|
|
92
|
+
/** Absolute marker paths — used for `sourceRev` probing so a late review refreshes. */
|
|
93
|
+
export function reviewStatePaths(projectRoot, runId) {
|
|
94
|
+
if (!isSafeRunId(runId))
|
|
95
|
+
return [];
|
|
96
|
+
const dir = reviewStateDir(projectRoot, runId);
|
|
97
|
+
const recordPath = reviewRecordPath(projectRoot, runId);
|
|
98
|
+
return [
|
|
99
|
+
...(recordPath ? [recordPath] : []),
|
|
100
|
+
...MARKERS.map((m) => path.join(dir, m.file)),
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
function readMarker(projectRoot, runId, marker) {
|
|
104
|
+
const rel = [".shipwright", "planning", "iterate", runId, marker.file].join("/");
|
|
105
|
+
const guard = pathGuard(projectRoot, rel);
|
|
106
|
+
if (!guard.ok) {
|
|
107
|
+
return { kind: "unreadable", row: unreadableRow(marker.type, "This review record could not be read safely.") };
|
|
108
|
+
}
|
|
109
|
+
if (!existsSync(guard.absolute))
|
|
110
|
+
return { kind: "absent" };
|
|
111
|
+
const read = readBoundedFile(guard.absolute, MAX_MARKER_BYTES);
|
|
112
|
+
if (!read) {
|
|
113
|
+
return { kind: "unreadable", row: unreadableRow(marker.type, "This review record could not be read.") };
|
|
114
|
+
}
|
|
115
|
+
let parsed;
|
|
116
|
+
try {
|
|
117
|
+
parsed = JSON.parse(read.text);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return { kind: "unreadable", row: unreadableRow(marker.type, "This review record is not readable.") };
|
|
121
|
+
}
|
|
122
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
123
|
+
return { kind: "unreadable", row: unreadableRow(marker.type, "This review record is not readable.") };
|
|
124
|
+
}
|
|
125
|
+
const o = parsed;
|
|
126
|
+
const raw = asStr(o.status, 64);
|
|
127
|
+
const completed = raw === "completed";
|
|
128
|
+
const count = typeof o.findings_count === "number" && Number.isFinite(o.findings_count)
|
|
129
|
+
? Math.max(0, Math.trunc(o.findings_count))
|
|
130
|
+
: null;
|
|
131
|
+
return {
|
|
132
|
+
kind: "row",
|
|
133
|
+
row: {
|
|
134
|
+
reviewType: marker.type,
|
|
135
|
+
status: completed ? "completed" : "not_run",
|
|
136
|
+
// A count only means something for a review that actually ran.
|
|
137
|
+
findingsCount: completed ? count : null,
|
|
138
|
+
findings: [],
|
|
139
|
+
provider: asStr(o.provider, 120),
|
|
140
|
+
completedAt: asStr(o.timestamp, 64),
|
|
141
|
+
disposition: asStr(o.reason, MAX_DISPOSITION_CHARS),
|
|
142
|
+
// A completed review whose count we could NOT read needs a note of its
|
|
143
|
+
// own. Leaving it null let the row render as a bare "ran", which a
|
|
144
|
+
// reader completes as "…and found nothing" (internal code review).
|
|
145
|
+
note: completed
|
|
146
|
+
? count == null
|
|
147
|
+
? "This review ran; its findings count was not recorded."
|
|
148
|
+
: null
|
|
149
|
+
: notRunNote(raw),
|
|
150
|
+
parseStatus: null,
|
|
151
|
+
source: "marker",
|
|
152
|
+
truncated: false,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/** Turn the marker's machine status into something a non-expert can read. */
|
|
157
|
+
function notRunNote(raw) {
|
|
158
|
+
if (!raw)
|
|
159
|
+
return "This review was recorded as not run.";
|
|
160
|
+
if (raw === "missing_keys")
|
|
161
|
+
return "Not run — the external reviewer was not configured.";
|
|
162
|
+
if (raw.startsWith("skipped_")) {
|
|
163
|
+
return `Not run — ${raw.slice("skipped_".length).replace(/_/g, " ")}.`;
|
|
164
|
+
}
|
|
165
|
+
return `Not run — recorded as “${raw}”.`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* All five review types for `runId`, in contract order.
|
|
169
|
+
*
|
|
170
|
+
* **Precedence: the per-run record wins.** Since
|
|
171
|
+
* `iterate-2026-07-22-mission-review-record` the producer writes
|
|
172
|
+
* `.shipwright/planning/iterate/<run_id>/reviews.json` with real per-finding
|
|
173
|
+
* detail for all five passes, so the markers are now the FALLBACK — kept
|
|
174
|
+
* byte-for-byte as they were, because 64 existing runs depend on that behaviour.
|
|
175
|
+
*
|
|
176
|
+
* A record that is present but INVALID does not fall through. Answering a
|
|
177
|
+
* corrupt record with the weaker source would present a data-integrity fault as
|
|
178
|
+
* a review history; it is reported as unreadable instead, which the §6 state
|
|
179
|
+
* model renders as "currently unavailable".
|
|
180
|
+
*/
|
|
181
|
+
export function readReviewState(projectRoot, runId) {
|
|
182
|
+
// Hoisted out of the marker path: the record read below rejects an unsafe run
|
|
183
|
+
// id too, so the marker path's own guard became unreachable AND its surviving
|
|
184
|
+
// branch would have claimed a record "exists but could not be read" for a file
|
|
185
|
+
// nobody ever probed.
|
|
186
|
+
if (!isSafeRunId(runId)) {
|
|
187
|
+
return {
|
|
188
|
+
rows: REVIEW_TYPE_ORDER.map((t) => unreadableRow(t, "This run could not be identified.")),
|
|
189
|
+
hasRecord: false,
|
|
190
|
+
sawUnreadable: true,
|
|
191
|
+
caveats: [],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const record = readReviewRecord(projectRoot, runId);
|
|
195
|
+
if (record.kind === "valid") {
|
|
196
|
+
return {
|
|
197
|
+
rows: record.rows,
|
|
198
|
+
// A record the producer JUST materialized has all five types `pending`,
|
|
199
|
+
// which map to `unavailable`. Reporting `hasRecord: true` for it made the
|
|
200
|
+
// artifact appear mid-run saying "No review was recorded as having run" —
|
|
201
|
+
// worse than the honest "not written yet" it replaced. `hasRecord` means
|
|
202
|
+
// "a source carried an actual answer", on this path as on the marker one.
|
|
203
|
+
hasRecord: record.rows.some((r) => r.status !== "unavailable"),
|
|
204
|
+
sawUnreadable: false,
|
|
205
|
+
caveats: record.caveats,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
if (record.kind === "invalid") {
|
|
209
|
+
return {
|
|
210
|
+
rows: REVIEW_TYPE_ORDER.map((t) => unreadableRow(t, RECORD_INTEGRITY_NOTE)),
|
|
211
|
+
hasRecord: false,
|
|
212
|
+
// An integrity fault is a DETECTED problem, not an absence: `false` here
|
|
213
|
+
// would make buildReviewArtifact hide the artifact entirely and throw the
|
|
214
|
+
// fault away.
|
|
215
|
+
sawUnreadable: true,
|
|
216
|
+
caveats: [],
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return readMarkerState(projectRoot, runId);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* The pre-record path, unchanged: the two `external_*review_state.json` markers,
|
|
223
|
+
* with the internal passes represented explicitly as unavailable. Reached only
|
|
224
|
+
* when no record exists — i.e. runs that predate it.
|
|
225
|
+
*/
|
|
226
|
+
function readMarkerState(projectRoot, runId) {
|
|
227
|
+
const rows = [];
|
|
228
|
+
let hasRecord = false;
|
|
229
|
+
let sawUnreadable = false;
|
|
230
|
+
const byType = new Map();
|
|
231
|
+
for (const marker of MARKERS) {
|
|
232
|
+
const r = readMarker(projectRoot, runId, marker);
|
|
233
|
+
if (r.kind === "row") {
|
|
234
|
+
hasRecord = true;
|
|
235
|
+
byType.set(marker.type, r.row);
|
|
236
|
+
}
|
|
237
|
+
else if (r.kind === "unreadable") {
|
|
238
|
+
sawUnreadable = true;
|
|
239
|
+
byType.set(marker.type, r.row);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
byType.set(marker.type, unreadableRow(marker.type, "No record of this review was found for this run."));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Contract order: plan · code · doubt · external_code.
|
|
246
|
+
rows.push(internalRow("self"), byType.get("plan"), internalRow("code"), internalRow("doubt"), byType.get("external_code"));
|
|
247
|
+
return { rows, hasRecord, sawUnreadable, caveats: [] };
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=review-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-state.js","sourceRoot":"","sources":["../../../src/core/mission-context/review-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hard cap on how much text is scanned, independent of what the caller passes.
|
|
3
|
+
* The caller already reads a bounded tail; this is the belt to that braces.
|
|
4
|
+
*/
|
|
5
|
+
export declare const MAX_SCAN_CHARS: number;
|
|
6
|
+
/**
|
|
7
|
+
* The LAST qualifying `Run-ID` in `transcript`, or null.
|
|
8
|
+
*
|
|
9
|
+
* LAST, not first: a long session legitimately contains several iterates (a
|
|
10
|
+
* fix-forward after a merge, a campaign's sub-iterates), and the most recent one
|
|
11
|
+
* is the run this session is about. Verified against every session in this
|
|
12
|
+
* project that still has a live pointer: 18 agreements, 0 disagreements.
|
|
13
|
+
*
|
|
14
|
+
* Pure — no I/O, no corroboration. `recoverRunIdFromTranscript` is the entry
|
|
15
|
+
* point that adds evidence.
|
|
16
|
+
*/
|
|
17
|
+
export declare function findRunIdFooter(transcript: string): string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Does THIS project's own record set know `runId`?
|
|
20
|
+
*
|
|
21
|
+
* `unavailable` (the log could not be read) is deliberately not evidence: an
|
|
22
|
+
* unreadable source must never be upgraded into a confirmation.
|
|
23
|
+
*/
|
|
24
|
+
export declare function hasRunRecord(projectRoot: string, runId: string): boolean;
|
|
25
|
+
export declare function _recoveryScanCount(): number;
|
|
26
|
+
/** Test-only: drop the negative-scan memo between cases. */
|
|
27
|
+
export declare function _clearRecoveryMemo(): void;
|
|
28
|
+
/**
|
|
29
|
+
* The recovered run id for this session, or null.
|
|
30
|
+
*
|
|
31
|
+
* Called ONLY from rule 5 of the ordered scenario table (scenario.ts), i.e. only
|
|
32
|
+
* once rules 1-4 — custom-actions, pointer, association, pipeline, campaign —
|
|
33
|
+
* have all missed. Every caller that reaches it therefore RESOLVES on the
|
|
34
|
+
* answer, and the route persists that answer, so the scan is paid once per task
|
|
35
|
+
* rather than once per poll.
|
|
36
|
+
*
|
|
37
|
+
* It was not always so: until iterate-2026-07-21-mission-recovery-memo-perf the
|
|
38
|
+
* resolver computed this BEFORE the table, so a campaign- or pipeline-resolved
|
|
39
|
+
* session that happened to quote a corroborated footer scanned on every poll
|
|
40
|
+
* forever — nothing consumed the answer, so nothing ever persisted it, and the
|
|
41
|
+
* memo below only covers a NEGATIVE result (internal code review of PR #309).
|
|
42
|
+
*/
|
|
43
|
+
export declare function recoverRunIdFromTranscript(projectRoot: string, transcript: string, sessionUuid?: string): string | null;
|
|
44
|
+
//# sourceMappingURL=run-id-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-id-recovery.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/run-id-recovery.ts"],"names":[],"mappings":"AAyCA;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAc,CAAC;AAoB1C;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcjE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIxE;AAkCD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAqBf"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* core/mission-context/run-id-recovery.ts — the THIRD identification source:
|
|
3
|
+
* the `Run-ID:` footer the run itself wrote into its own commit message.
|
|
4
|
+
*
|
|
5
|
+
* WHY IT EXISTS (measured 2026-07-21 on the operator's real store). The pointer
|
|
6
|
+
* is deleted at Finalize and the durable association is only ever written while
|
|
7
|
+
* somebody has the Mission tab OPEN during the live window — so 1 of 416 real
|
|
8
|
+
* tasks carried an association and 19 of 150 sessions in this project could be
|
|
9
|
+
* identified at all. The identity was never actually lost: every finalized run
|
|
10
|
+
* signs its own commit with `Run-ID: <run_id>` (the F6 footer), and that text is
|
|
11
|
+
* in the session's own transcript.
|
|
12
|
+
*
|
|
13
|
+
* The transcript is UNTRUSTED DATA even though it is read server-side (§5.1) —
|
|
14
|
+
* same posture as the transcript-derived PR number in merge-check.ts, which is
|
|
15
|
+
* bounded-int validated before use. So the value found here is admitted only
|
|
16
|
+
* after THREE independent checks, each derived from a REAL false positive found
|
|
17
|
+
* while probing 65 transcripts:
|
|
18
|
+
*
|
|
19
|
+
* 1. CANONICAL SHAPE. `Run-ID: iterate-<YYYY-MM-DD>-<slug>`, then the strict
|
|
20
|
+
* `isSafeRunId` grammar on top. A permissive id class matched the template
|
|
21
|
+
* mention `Run-ID: iterate-` and the non-iterate `Run-ID: security-…`; both
|
|
22
|
+
* pass `isSafeRunId` happily and would resolve to an iterate that does not
|
|
23
|
+
* exist.
|
|
24
|
+
* 2. LINE-TERMINATED. The id must END its line (or its JSON string). This is
|
|
25
|
+
* what a commit footer looks like. It rejects the measured prose case
|
|
26
|
+
* `→ decision_log.md (ADR via Run-ID: iterate-2026-06-14-repair-claude-json)`
|
|
27
|
+
* in a session that is not an iterate at all — a quotation is not a claim.
|
|
28
|
+
* 3. CORROBORATED. The project's OWN records must know the run: a
|
|
29
|
+
* `work_completed` row in `shipwright_events.jsonl`, or an
|
|
30
|
+
* `iterates/<run_id>.json`. Measured, this rejects the 2 cross-repo run ids
|
|
31
|
+
* quoted inside webui sessions while keeping 29 of 31 recoveries. An
|
|
32
|
+
* UNREADABLE event log is explicitly NOT evidence — "we could not check"
|
|
33
|
+
* must never become "yes".
|
|
34
|
+
*
|
|
35
|
+
* A transcript with no qualifying marker yields null and the session stays
|
|
36
|
+
* `plain`. There is no partial answer and no guess.
|
|
37
|
+
*/
|
|
38
|
+
import { findWorkCompleted, readIterateDoc } from "./iterate-record.js";
|
|
39
|
+
import { isSafeRunId } from "./pointer.js";
|
|
40
|
+
/**
|
|
41
|
+
* Hard cap on how much text is scanned, independent of what the caller passes.
|
|
42
|
+
* The caller already reads a bounded tail; this is the belt to that braces.
|
|
43
|
+
*/
|
|
44
|
+
export const MAX_SCAN_CHARS = 1024 * 1024;
|
|
45
|
+
/**
|
|
46
|
+
* The F6 footer marker.
|
|
47
|
+
*
|
|
48
|
+
* The transcript is raw JSONL, so a message newline appears as the two
|
|
49
|
+
* characters `\` + `n` inside a JSON string and a string end appears as `"`
|
|
50
|
+
* (often preceded by an escaping backslash). The lookahead therefore accepts
|
|
51
|
+
* exactly those terminators — `\n`, `\r`, `\"`, a real CR/LF, a bare quote, or
|
|
52
|
+
* end-of-input — which is what makes an inline prose mention (followed by `)`,
|
|
53
|
+
* `,`, a word…) fail to match.
|
|
54
|
+
*
|
|
55
|
+
* The escape set is ENUMERATED rather than "any backslash" (external code
|
|
56
|
+
* review, openai MEDIUM): a prose sentence ending `…-real-run\)` is a backslash
|
|
57
|
+
* too, and accepting it would re-open the very quotation case the
|
|
58
|
+
* line-termination rule exists to reject.
|
|
59
|
+
*/
|
|
60
|
+
const RUN_ID_FOOTER = /Run-ID:[ \t]*(iterate-\d{4}-\d{2}-\d{2}-[A-Za-z0-9][A-Za-z0-9._-]{0,90})[ \t]*(?=\\[nr"]|"|\r|\n|$)/g;
|
|
61
|
+
/**
|
|
62
|
+
* The LAST qualifying `Run-ID` in `transcript`, or null.
|
|
63
|
+
*
|
|
64
|
+
* LAST, not first: a long session legitimately contains several iterates (a
|
|
65
|
+
* fix-forward after a merge, a campaign's sub-iterates), and the most recent one
|
|
66
|
+
* is the run this session is about. Verified against every session in this
|
|
67
|
+
* project that still has a live pointer: 18 agreements, 0 disagreements.
|
|
68
|
+
*
|
|
69
|
+
* Pure — no I/O, no corroboration. `recoverRunIdFromTranscript` is the entry
|
|
70
|
+
* point that adds evidence.
|
|
71
|
+
*/
|
|
72
|
+
export function findRunIdFooter(transcript) {
|
|
73
|
+
if (typeof transcript !== "string" || transcript.length === 0)
|
|
74
|
+
return null;
|
|
75
|
+
const text = transcript.length > MAX_SCAN_CHARS ? transcript.slice(-MAX_SCAN_CHARS) : transcript;
|
|
76
|
+
let last = null;
|
|
77
|
+
RUN_ID_FOOTER.lastIndex = 0;
|
|
78
|
+
let m;
|
|
79
|
+
while ((m = RUN_ID_FOOTER.exec(text)) !== null) {
|
|
80
|
+
// Defense in depth: the same grammar every other run_id must satisfy before
|
|
81
|
+
// it may take part in a path join (kills `..`, separators, non-ASCII).
|
|
82
|
+
if (isSafeRunId(m[1]))
|
|
83
|
+
last = m[1];
|
|
84
|
+
}
|
|
85
|
+
return last;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Does THIS project's own record set know `runId`?
|
|
89
|
+
*
|
|
90
|
+
* `unavailable` (the log could not be read) is deliberately not evidence: an
|
|
91
|
+
* unreadable source must never be upgraded into a confirmation.
|
|
92
|
+
*/
|
|
93
|
+
export function hasRunRecord(projectRoot, runId) {
|
|
94
|
+
if (!isSafeRunId(runId))
|
|
95
|
+
return false;
|
|
96
|
+
if (findWorkCompleted(projectRoot, runId).status === "found")
|
|
97
|
+
return true;
|
|
98
|
+
return readIterateDoc(projectRoot, runId) !== null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* NEGATIVE memo (external plan review, gemini HIGH + openai MEDIUM).
|
|
102
|
+
*
|
|
103
|
+
* A SUCCESSFUL recovery is paid once because the caller persists it. A session
|
|
104
|
+
* that genuinely has no footer — an ordinary chat — never becomes associated, so
|
|
105
|
+
* without this it would re-scan on every poll for as long as its Mission tab is
|
|
106
|
+
* open.
|
|
107
|
+
*
|
|
108
|
+
* KEYED BY CONTENT, NOT BY LENGTH (external code review, openai MEDIUM). Length
|
|
109
|
+
* alone is a trap: past 1 MB the bounded tail is ALWAYS exactly `MAX_SCAN_CHARS`
|
|
110
|
+
* while its content slides forward, so a length key would freeze every large
|
|
111
|
+
* session at "no marker" — and the footer arrives precisely by sliding into that
|
|
112
|
+
* window. The fingerprint therefore also samples the END of the tail, which is
|
|
113
|
+
* exactly what moves as the transcript grows.
|
|
114
|
+
*
|
|
115
|
+
* Deliberately NOT a persisted "no run" association: that would add a second
|
|
116
|
+
* meaning to `task.missionContext` and a second write surface, to cache a regex.
|
|
117
|
+
*/
|
|
118
|
+
const negativeScans = new Map();
|
|
119
|
+
const NEGATIVE_CAP = 512;
|
|
120
|
+
/** How much of the tail END feeds the fingerprint. */
|
|
121
|
+
const FINGERPRINT_CHARS = 256;
|
|
122
|
+
function tailFingerprint(text) {
|
|
123
|
+
return `${text.length}:${text.slice(-FINGERPRINT_CHARS)}`;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Test-only: how many real scans ran. Without it a memo test can only assert the
|
|
127
|
+
* same answer twice — which passes whether or not the memo exists.
|
|
128
|
+
*/
|
|
129
|
+
let scanCount = 0;
|
|
130
|
+
export function _recoveryScanCount() {
|
|
131
|
+
return scanCount;
|
|
132
|
+
}
|
|
133
|
+
/** Test-only: drop the negative-scan memo between cases. */
|
|
134
|
+
export function _clearRecoveryMemo() {
|
|
135
|
+
negativeScans.clear();
|
|
136
|
+
scanCount = 0;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The recovered run id for this session, or null.
|
|
140
|
+
*
|
|
141
|
+
* Called ONLY from rule 5 of the ordered scenario table (scenario.ts), i.e. only
|
|
142
|
+
* once rules 1-4 — custom-actions, pointer, association, pipeline, campaign —
|
|
143
|
+
* have all missed. Every caller that reaches it therefore RESOLVES on the
|
|
144
|
+
* answer, and the route persists that answer, so the scan is paid once per task
|
|
145
|
+
* rather than once per poll.
|
|
146
|
+
*
|
|
147
|
+
* It was not always so: until iterate-2026-07-21-mission-recovery-memo-perf the
|
|
148
|
+
* resolver computed this BEFORE the table, so a campaign- or pipeline-resolved
|
|
149
|
+
* session that happened to quote a corroborated footer scanned on every poll
|
|
150
|
+
* forever — nothing consumed the answer, so nothing ever persisted it, and the
|
|
151
|
+
* memo below only covers a NEGATIVE result (internal code review of PR #309).
|
|
152
|
+
*/
|
|
153
|
+
export function recoverRunIdFromTranscript(projectRoot, transcript, sessionUuid) {
|
|
154
|
+
const memoKey = sessionUuid ? `${projectRoot}::${sessionUuid}` : null;
|
|
155
|
+
const fingerprint = memoKey ? tailFingerprint(transcript) : null;
|
|
156
|
+
if (memoKey && negativeScans.get(memoKey) === fingerprint)
|
|
157
|
+
return null;
|
|
158
|
+
scanCount++;
|
|
159
|
+
const candidate = findRunIdFooter(transcript);
|
|
160
|
+
// Memoize ONLY "this text contains no marker" — a purely TEXTUAL fact, which
|
|
161
|
+
// cannot change while the text does not. A candidate that failed
|
|
162
|
+
// CORROBORATION is deliberately re-checked every poll: the project's records
|
|
163
|
+
// can gain the run later (Finalize writes the event), and caching that answer
|
|
164
|
+
// would strand the session as `plain` until the transcript happened to grow.
|
|
165
|
+
if (!candidate) {
|
|
166
|
+
if (memoKey && fingerprint) {
|
|
167
|
+
if (negativeScans.size >= NEGATIVE_CAP)
|
|
168
|
+
negativeScans.clear();
|
|
169
|
+
negativeScans.set(memoKey, fingerprint);
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
return hasRunRecord(projectRoot, candidate) ? candidate : null;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=run-id-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-id-recovery.js","sourceRoot":"","sources":["../../../src/core/mission-context/run-id-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { MissionContextAssociation, MissionScenario } from "./types.js";
|
|
2
|
+
import type { ReadPointerResult } from "./pointer.js";
|
|
3
|
+
/** The four builtin action ids. Anything else is a user-defined custom action. */
|
|
4
|
+
export declare const BUILTIN_ACTION_IDS: ReadonlySet<string>;
|
|
5
|
+
/**
|
|
6
|
+
* What we know about the project's SDLC run-config — THREE states, not a boolean.
|
|
7
|
+
*
|
|
8
|
+
* `RunConfigReadResult` has four (`ok` / `missing` / `v1_legacy` / `invalid`) and
|
|
9
|
+
* only ONE of them, `missing`, is evidence that the project does not run the
|
|
10
|
+
* pipeline. A config that is present but corrupt, legacy, or written to a schema
|
|
11
|
+
* this build does not know is a config we COULD NOT READ — which says nothing
|
|
12
|
+
* about whether the project is an SDLC project.
|
|
13
|
+
*
|
|
14
|
+
* Collapsing the other three into "no run-config" is how an unreadable file
|
|
15
|
+
* silently deletes the Mission tab (internal code review, BLOCKING).
|
|
16
|
+
*/
|
|
17
|
+
export type RunConfigPresence =
|
|
18
|
+
/** Parsed as a valid v2 config — the project demonstrably runs the pipeline. */
|
|
19
|
+
"ok"
|
|
20
|
+
/** No run-config file at all — the ONLY state that permits a hide. */
|
|
21
|
+
| "missing"
|
|
22
|
+
/** Present but unparseable / legacy / unknown schema / unreadable. We do not know. */
|
|
23
|
+
| "unreadable";
|
|
24
|
+
export interface ScenarioInputs {
|
|
25
|
+
/** Result of reading `.shipwright/iterate_active/<uuid>.json`. */
|
|
26
|
+
pointer: ReadPointerResult;
|
|
27
|
+
/**
|
|
28
|
+
* The DURABLE association persisted on the task, if any.
|
|
29
|
+
*
|
|
30
|
+
* Load-bearing after Finalize: `prune_stale_run_pointers` deletes the pointer
|
|
31
|
+
* once the worktree is gone, so from that moment the pointer can never
|
|
32
|
+
* identify the run again. Without this fallback the resolver would answer
|
|
33
|
+
* `plain` for every finished iterate — reintroducing precisely the data loss
|
|
34
|
+
* the association was added to close, and breaking AC2 (a finalized iterate
|
|
35
|
+
* must still show its commit + merge state, never "No run data yet").
|
|
36
|
+
*/
|
|
37
|
+
association?: MissionContextAssociation | null;
|
|
38
|
+
/**
|
|
39
|
+
* A run id recovered from this session's OWN transcript and already
|
|
40
|
+
* corroborated by the project's records (`run-id-recovery.ts`).
|
|
41
|
+
*
|
|
42
|
+
* The last-resort identification source, for the tasks that ran before this
|
|
43
|
+
* build shipped: measured 2026-07-21, only 19 of this project's 150 sessions
|
|
44
|
+
* could be identified from a pointer or an association, because the pointer is
|
|
45
|
+
* pruned at Finalize and the association is only written while the Mission tab
|
|
46
|
+
* is open during the run.
|
|
47
|
+
*
|
|
48
|
+
* Ranked BELOW pipeline and campaign, unlike the association: an association
|
|
49
|
+
* is a SERVER-OBSERVED fact (this session really was running that iterate),
|
|
50
|
+
* whereas the footer is text the session happens to contain. Measured, a
|
|
51
|
+
* campaign session quotes its sub-iterates' footers — ranking this higher
|
|
52
|
+
* would demote a genuine campaign to `iterate`.
|
|
53
|
+
*
|
|
54
|
+
* A THUNK, not a value, and that is the whole point (internal code review of
|
|
55
|
+
* PR #309, PERF). Computing it eagerly meant a campaign- or pipeline-resolved
|
|
56
|
+
* session whose transcript quotes a CORROBORATED footer re-ran the regex and
|
|
57
|
+
* the record lookup on every poll forever: it never reached rule 5, so nothing
|
|
58
|
+
* ever persisted, and the negative memo does not cover a POSITIVE find.
|
|
59
|
+
* Deferring removes that work instead of remembering it, and makes this table
|
|
60
|
+
* the single place that decides whether the footer matters at all.
|
|
61
|
+
*/
|
|
62
|
+
recoverTranscriptRunId?: (() => string | null) | null;
|
|
63
|
+
/** Actions catalog facts, resolved SERVER-side from the project. */
|
|
64
|
+
actions: {
|
|
65
|
+
/** True when `.shipwright-webui/actions.json` was actually used. */
|
|
66
|
+
fromUser: boolean;
|
|
67
|
+
/** Loader diagnostics — any entry means "ambiguous", so do NOT hide. */
|
|
68
|
+
hasDiagnostics: boolean;
|
|
69
|
+
/** Every resolved action id. */
|
|
70
|
+
actionIds: readonly string[];
|
|
71
|
+
} | null;
|
|
72
|
+
/** What we know about the project's SDLC run-config. See `RunConfigPresence`. */
|
|
73
|
+
runConfigStatus: RunConfigPresence;
|
|
74
|
+
/** The task's phase-task linkage (scenario 3). */
|
|
75
|
+
phaseTaskId: string | null;
|
|
76
|
+
taskRunId: string | null;
|
|
77
|
+
/** Parsed `campaign:<slug>` from the title, and whether a record exists. */
|
|
78
|
+
campaignSlug: string | null;
|
|
79
|
+
hasCampaignRecord: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Is this project VALIDLY in custom-actions mode?
|
|
83
|
+
*
|
|
84
|
+
* Every clause must hold — the conjunction is the point. Presence of an
|
|
85
|
+
* actions.json is explicitly NOT sufficient (§4 precedence 1).
|
|
86
|
+
*
|
|
87
|
+
* S3 — the `actionIds: readonly string[]` type is a CLAIM, not a guarantee: the
|
|
88
|
+
* values cross a JSON boundary (`.shipwright-webui/actions.json`) where nothing
|
|
89
|
+
* enforces it. MEASURED on the real loader + a real temp project (S3 probe):
|
|
90
|
+
* `{"schemaVersion":1,"actions":[{"foo":"bar"}]}` parses fine, the loader reports
|
|
91
|
+
* `fromUser: true` with ZERO diagnostics because `JSON.parse` succeeded and
|
|
92
|
+
* `checkContractVersion` only WARNS, and `facts.ts` maps `a.id` to `undefined`.
|
|
93
|
+
* That produced a one-element id list matching no builtin — and this function
|
|
94
|
+
* returned true, HIDING the Mission tab for a project whose actions file is
|
|
95
|
+
* simply the wrong shape. Malformed and truncated files were already safe (they
|
|
96
|
+
* throw, so the loader falls back to the bundled default); valid-JSON-wrong-shape
|
|
97
|
+
* was the hole between "parses" and "means anything".
|
|
98
|
+
*
|
|
99
|
+
* The asymmetry is deliberate and load-bearing: hiding a whole tab is
|
|
100
|
+
* irreversible from the user's side and gives no error and no cause, so EVERY
|
|
101
|
+
* ambiguous input must resolve to SHOWING (CONTRACT §4.1, Review-2 GPT #12).
|
|
102
|
+
*/
|
|
103
|
+
export declare function isValidatedCustomActions(inputs: ScenarioInputs): boolean;
|
|
104
|
+
export interface ScenarioDecision {
|
|
105
|
+
scenario: MissionScenario;
|
|
106
|
+
missionTabVisible: boolean;
|
|
107
|
+
/** Set only for `iterate` — the run id the whole resolve joins on. */
|
|
108
|
+
runId: string | null;
|
|
109
|
+
/**
|
|
110
|
+
* WHICH rule produced `runId`. The resolver persists an association for the
|
|
111
|
+
* pointer and the transcript, never for the one it read back from the store —
|
|
112
|
+
* deriving that from `pointer.status` plus a separately-computed candidate is
|
|
113
|
+
* how the two could disagree (they did: the association branch reported
|
|
114
|
+
* `transcript_run_id` beside a null id).
|
|
115
|
+
*/
|
|
116
|
+
runIdSource: "pointer" | "association" | "transcript" | null;
|
|
117
|
+
/** Set when a pointer existed but could not be trusted (§5.1e) → `unavailable`. */
|
|
118
|
+
pointerInvalidReason: string | null;
|
|
119
|
+
}
|
|
120
|
+
export declare function detectScenario(inputs: ScenarioInputs): ScenarioDecision;
|
|
121
|
+
//# sourceMappingURL=scenario.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario.d.ts","sourceRoot":"","sources":["../../../src/core/mission-context/scenario.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAKjD,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,iBAAiB;AAC3B,gFAAgF;AAC9E,IAAI;AACN,sEAAsE;GACpE,SAAS;AACX,sFAAsF;GACpF,YAAY,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC/C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,sBAAsB,CAAC,EAAE,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACtD,oEAAoE;IACpE,OAAO,EAAE;QACP,oEAAoE;QACpE,QAAQ,EAAE,OAAO,CAAC;QAClB,wEAAwE;QACxE,cAAc,EAAE,OAAO,CAAC;QACxB,gCAAgC;QAChC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;KAC9B,GAAG,IAAI,CAAC;IACT,iFAAiF;IACjF,eAAe,EAAE,iBAAiB,CAAC;IACnC,kDAAkD;IAClD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAmBxE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sEAAsE;IACtE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;;OAMG;IACH,WAAW,EAAE,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC;IAC7D,mFAAmF;IACnF,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CA4EvE"}
|