@tea-agent/loop-agent 0.39.0-next.9 → 0.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -1
- package/CHANGELOG.md +269 -69
- package/README.md +11 -5
- package/bin/loop-agent.js +7 -3
- package/dist/application/dag/generate-task-dag.js +9 -0
- package/dist/application/task-lifecycle/advance.js +16 -0
- package/dist/build-stamp.json +3 -3
- package/dist/cli/command-definitions.js +16 -5
- package/dist/cli/program.js +16 -2
- package/dist/cli/update/notifier.js +2 -2
- package/dist/cli/update/runtime-activity.js +1 -29
- package/dist/cli.js +2 -1
- package/dist/commands/dag-rerun.js +55 -1
- package/dist/commands/init-model-catalog.js +464 -0
- package/dist/commands/init-upgrade.js +265 -97
- package/dist/commands/init.js +428 -27
- package/dist/commands/inspect-next.js +8 -0
- package/dist/commands/task-advance.js +31 -0
- package/dist/executors/dag-pi-executor.js +124 -18
- package/dist/executors/pi-event-serializer.js +42 -1
- package/dist/executors/pi-executor.js +51 -0
- package/dist/executors/pi-extension-resolver.js +233 -0
- package/dist/executors/pi-playwright-cli-tool.js +74 -28
- package/dist/executors/pi-sdk-executor.js +187 -59
- package/dist/executors/shell-executor.js +555 -34
- package/dist/executors/shell-write-guard.js +7 -0
- package/dist/shared/dag-failure-category.js +138 -0
- package/dist/shared/dag-prompt-override.js +27 -0
- package/dist/shared/operator/capabilities.js +181 -27
- package/dist/shared/playwright-cli-command-policy.js +15 -0
- package/dist/shared/update/console-notifier.js +100 -0
- package/dist/{cli → shared}/update/npm-client.js +70 -15
- package/dist/{cli → shared}/update/state.js +41 -13
- package/dist/task/config-types.js +28 -0
- package/dist/task/contract/apply.js +11 -1
- package/dist/task/contract/constants.js +3 -0
- package/dist/task/contract/diff.js +26 -0
- package/dist/task/contract/hash.js +3 -0
- package/dist/task/contract/observe.js +25 -4
- package/dist/task/contract/paths.js +2 -1
- package/dist/task/contract/project.js +20 -1
- package/dist/task/contract/schema.js +8 -1
- package/dist/task/contract/transaction.js +12 -0
- package/dist/task/source-prepare/build-draft.js +15 -0
- package/dist/task/source-prepare/completeness.js +188 -0
- package/dist/task/source-prepare/fragment-inventory.js +474 -0
- package/dist/task/source-prepare/index.js +3 -0
- package/dist/task/source-prepare/ledger-reconciliation.js +127 -0
- package/dist/task/source-prepare/ledger-review.js +214 -0
- package/dist/task/source-prepare/ledger.js +545 -0
- package/dist/task/source-prepare/parse-intent.js +24 -4
- package/dist/task/source-prepare/prepare.js +262 -1
- package/dist/task/source-prepare/semantic-intake.js +19 -3
- package/dist/task/source-prepare/source-fidelity-pi.js +384 -0
- package/dist/task/source-prepare/types.js +22 -0
- package/dist/worker/cli.js +18 -2
- package/dist/worker/console/chat/deferred-turn.js +91 -0
- package/dist/worker/console/chat/mcp-inventory.js +221 -0
- package/dist/worker/console/chat/operation-card.js +8 -1
- package/dist/worker/console/chat/pi-console-config.js +81 -10
- package/dist/worker/console/chat/pi-runtime.js +165 -83
- package/dist/worker/console/chat/repo-walk.js +10 -1
- package/dist/worker/console/chat/routes.js +480 -55
- package/dist/worker/console/chat/semantic-activity.js +20 -8
- package/dist/worker/console/chat/session-store.js +146 -2
- package/dist/worker/console/chat/turn-process.js +10 -10
- package/dist/worker/console/console-handoff.js +82 -0
- package/dist/worker/console/console-update-and-init.js +115 -0
- package/dist/worker/console/console-update-runtime.js +84 -0
- package/dist/worker/console/dag-execution-receipt.js +33 -0
- package/dist/worker/console/draft-store.js +49 -0
- package/dist/worker/console/inspect-split.js +18 -0
- package/dist/worker/console/operation-run-facts.js +19 -3
- package/dist/worker/console/operation-store.js +1 -1
- package/dist/worker/console/operator-actions.js +320 -4
- package/dist/worker/console/operator-surface-health.js +1 -0
- package/dist/worker/console/operator-user-error.js +2 -2
- package/dist/worker/console/pi-readiness.js +5 -4
- package/dist/worker/console/prd-intake-bridge.js +13 -0
- package/dist/worker/console/recovery-cta.js +4 -4
- package/dist/worker/console/recovery-error-copy.js +4 -4
- package/dist/worker/console/routes.js +46 -2
- package/dist/worker/console/security.js +63 -9
- package/dist/worker/console/server.js +111 -7
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BLXFe4qI.js → abnfDiagram-N423BO3Z-CTx1TrNa.js} +1 -1
- package/dist/worker/console/static/assets/{arc-7iOJeqho.js → arc-B4i9cVxX.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CYoyj5K7.js → architectureDiagram-T3A2C74G-BAXE8_Rl.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-fK01JNlR.js → blockDiagram-VBNYF7ZC-C5Xh59at.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-bzbw5D_Z.js → c4Diagram-5PPSVZJV-B_asOzAu.js} +1 -1
- package/dist/worker/console/static/assets/channel-Dj_4Moei.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-Cf6hJFFG.js → chunk-2GRJ4B5K-wRO_iRNc.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DSFXR-et.js → chunk-2Q5K7J3B-ByOaSh_G.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BagJechl.js → chunk-5RXB4S5H-DjLzudan.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-E7QNMFaW.js → chunk-5VM5RSS4-JCNGkXYT.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BG_eOBrC.js → chunk-6Q2QTUOP-BhrPXXMZ.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Bo42dqol.js → chunk-GF5L2VYU-TJ5JuEBT.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-dibM-87v.js → chunk-JWPE2WC7-VVthn_mD.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-Bytrp3Oe.js → chunk-KBJHAD2P-D60-Mny4.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DBABILrr.js → chunk-RYQCIY6F-zXv7aVye.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DCUk5Pf9.js → chunk-XXDRQBXY-By9VQoi1.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0YYAyCa.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0YYAyCa.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BlGE9v6E.js → cose-bilkent-JH36ORCC-C4zQLe-M.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DGl5ewph.js → cynefin-VYW2F7L2-wh5N2ReN.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-DsJ_SVH_.js → cynefinDiagram-MW4NZA55-Dlu5wIqs.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BIhjFdzv.js → dagre-VZM6K2ZE-CrDgthc6.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Dmy1ctTb.js → diagram-7IWD3JNH-zN1clg27.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-DYCtWUF3.js → diagram-B4RE2ZJO-BN-o7J7-.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-BMZFHVd2.js → diagram-LBJQPF4R-C8SuPt0d.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-b_U8gfaO.js → diagram-Q27KOJAE-BoizuHbZ.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-Dzy_bn-I.js → diagram-UB23O5K3-BzUzXixG.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DJCiMNEI.js → ebnfDiagram-BXEA7PRR-Ev3lA4Cf.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-28lD016B.js → erDiagram-JOGREHBK-GALUzRbs.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DGyHJmIw.js → flowDiagram-UKHOOZJN-CZJN65Sb.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CzdwUjrO.js → ganttDiagram-PKOTCBZU-JLB9OESl.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-D9bGwuo8.js → gitGraphDiagram-DS77QQ5N-CcvCr4GD.js} +1 -1
- package/dist/worker/console/static/assets/index-CW88Fjbw.js +406 -0
- package/dist/worker/console/static/assets/index-DP0ZJl39.css +1 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-LJgJUQFC.js → infoDiagram-6WML65LV-HG5z7aVg.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-98LaB8zb.js → ishikawaDiagram-WSZJBQD7-BHEu9chR.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-D-ISzwlQ.js → journeyDiagram-NVQOT4AX-Cp_Up8-a.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-gfYOI-EL.js → kanban-definition-27J2QSJJ-DvVeY-em.js} +1 -1
- package/dist/worker/console/static/assets/{linear-CyntZgKV.js → linear-aGmcjgTn.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-BBOR7dg0.js → mermaid.core-Biyo-tqA.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CQAgwPMk.js → mindmap-definition-FAOFIHXS-DyxY2pIb.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DkMiZFuV.js → pegDiagram-VL7TDLO6-CkdGuc50.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DLNXa_0J.js → pieDiagram-7S7Q4E2Y-NNQI9xVR.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Dc7bdzjm.js → quadrantDiagram-CIZ2JOQS-PAJkuz_G.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BxMB0QqW.js → railroadDiagram-AXF67PYL-ZwrQod0O.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-FjumoKn4.js → requirementDiagram-LRYGKXZP-D3ZfrzM2.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-CkhKc_E3.js → sankeyDiagram-W5VNT64P-DDGFmWk5.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DoBWqTTH.js → sequenceDiagram-SI44F4Z6-DO6mmXTA.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CQeh_YeE.js → sizeCapture-X5ZJPWSS-DMbCQiJt.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-LuHmFW-I.js → stateDiagram-OKZ733FA-Di_YUEfC.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DrdDvela.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CHwbDctY.js → swimlanes-SLNWSIFB-Bn2PphNJ.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DPkEAULl.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CoMngk0X.js → timeline-definition-Z64GVDOM-DPh8pRsp.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-CURYbtbO.js → vennDiagram-T6HMQDX7-GMfl26pW.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BdqSECjU.js → wardleyDiagram-T6FBY63Y-DTlmVrmF.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-DbMUYuAg.js → xychartDiagram-ELKLHX3M-YGBjKAS5.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/app/console-types.js +40 -1
- package/dist/worker/console/static-src/app/useOperatorActions.js +6 -1
- package/dist/worker/console/static-src/app/useRecoveryActions.js +2 -2
- package/dist/worker/console/static-src/app/useRecoveryConsole.js +38 -2
- package/dist/worker/console/static-src/app/useRunProgress.js +46 -0
- package/dist/worker/console/static-src/app/useTaskWizard.js +73 -1
- package/dist/worker/console/static-src/operator-chat/cards/failure-category-advice.js +25 -0
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +74 -26
- package/dist/worker/console/static-src/operator-chat/input-history.js +76 -0
- package/dist/worker/console/static-src/operator-chat/mutation-gate.js +1 -1
- package/dist/worker/console/static-src/operator-chat/open-preview-in-browser.js +328 -0
- package/dist/worker/console/static-src/operator-chat/resource-diagnostics.js +204 -0
- package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +8 -1
- package/dist/worker/console/static-src/operator-chat/turn-submission.js +54 -0
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +3 -0
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +237 -11
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +50 -22
- package/dist/worker/console/static-src/operator-chat/useComposer.js +32 -0
- package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +26 -1
- package/dist/worker/console/static-src/pages/tasks/run-id-resolution.js +79 -0
- package/dist/worker/console/static-src/pages/tasks/run-ownership-verify.js +23 -0
- package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +110 -0
- package/dist/worker/loop-agent/loop-agent-client.js +7 -3
- package/dist/worker/materialize/harness-task-lineage.js +5 -2
- package/dist/worker/observability/init-runtime-activity.js +26 -0
- package/dist/worker/observability/read-model.js +22 -0
- package/dist/worker/observe/node-input.js +160 -3
- package/dist/worker/observe/node-process.js +377 -0
- package/dist/worker/observe/routes.js +224 -3
- package/dist/worker/observe/shell-handler-keys.js +34 -0
- package/dist/worker/observe/static/api.js +67 -1
- package/dist/worker/observe/static/constants.js +8 -1
- package/dist/worker/observe/static/dag-history-labels.js +4 -0
- package/dist/worker/observe/static/format.js +60 -0
- package/dist/worker/observe/static/index.html +5 -0
- package/dist/worker/observe/static/markdown-render.js +20 -1
- package/dist/worker/observe/static/operator-chrome.js +4 -0
- package/dist/worker/observe/static/prompt-restart-candidates.d.ts +18 -0
- package/dist/worker/observe/static/prompt-restart-candidates.js +36 -0
- package/dist/worker/observe/static/state.js +13 -2
- package/dist/worker/observe/static/styles.css +85 -0
- package/dist/worker/observe/static/views/dag-inspector.js +912 -8
- package/dist/worker/observe/static/views/dag.js +8 -1
- package/dist/worker/observe/static/views/failures.js +5 -2
- package/dist/worker/observe/static/views/session-timeline.js +78 -9
- package/dist/worker/observe/static/views/task.js +55 -0
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +856 -54
- package/dist/workflows/dag/backend-test-case-manifest.js +4 -0
- package/dist/workflows/dag/backend-test-execution-contract.js +18 -9
- package/dist/workflows/dag/backend-test-gap-fill.js +205 -0
- package/dist/workflows/dag/backend-test-intake-context.js +32 -0
- package/dist/workflows/dag/backend-test-layout.js +133 -0
- package/dist/workflows/dag/backend-test-markdown-workflow.js +343 -33
- package/dist/workflows/dag/backend-test-module-stem.js +5 -0
- package/dist/workflows/dag/backend-test-pytest-collection.js +454 -36
- package/dist/workflows/dag/backend-test-result-contract.js +1 -1
- package/dist/workflows/dag/backend-test-scenario-param.js +884 -140
- package/dist/workflows/dag/backend-test-scenario-partitions.js +321 -0
- package/dist/workflows/dag/backend-test-writer-completeness.js +110 -61
- package/dist/workflows/dag/contract-output-registry.js +15 -0
- package/dist/workflows/dag/contract-validator-registrations.js +3 -1
- package/dist/workflows/dag/convergence/controller.js +141 -0
- package/dist/workflows/dag/dynamic-runtime/loop-until.js +1 -1
- package/dist/workflows/dag/dynamic-runtime/map.js +25 -9
- package/dist/workflows/dag/dynamic-runtime/shared.js +1 -1
- package/dist/workflows/dag/failure-category.js +7 -116
- package/dist/workflows/dag/frontend-implementation-contract.js +465 -6
- package/dist/workflows/dag/frontend-plan-render.js +24 -0
- package/dist/workflows/dag/frontend-prewrite-gate.js +293 -84
- package/dist/workflows/dag/frontend-repair.js +14 -0
- package/dist/workflows/dag/frontend-review-context.js +92 -10
- package/dist/workflows/dag/frontend-risk.js +15 -2
- package/dist/workflows/dag/frontend-test-case-checklist.js +30 -4
- package/dist/workflows/dag/frontend-test-case-manifest.js +11 -4
- package/dist/workflows/dag/frontend-test-case-quality.js +11 -16
- package/dist/workflows/dag/frontend-test-environment-probe.js +230 -0
- package/dist/workflows/dag/frontend-test-html-report.js +3 -1
- package/dist/workflows/dag/frontend-test-l5-report.js +3 -1
- package/dist/workflows/dag/frontend-test-layout.js +159 -0
- package/dist/workflows/dag/frontend-test-markdown.js +61 -0
- package/dist/workflows/dag/frontend-test-result-contract.js +188 -42
- package/dist/workflows/dag/frontend-test-standard-scenarios.js +70 -0
- package/dist/workflows/dag/frontend-verification-trace.js +29 -4
- package/dist/workflows/dag/init-hybrid.js +1019 -209
- package/dist/workflows/dag/node-execution.js +228 -15
- package/dist/workflows/dag/prompt.js +60 -1
- package/dist/workflows/dag/rerun-feedback.js +212 -0
- package/dist/workflows/dag/rerun-plan.js +224 -27
- package/dist/workflows/dag/rerun-run.js +61 -6
- package/dist/workflows/dag/rerun-task.js +61 -2
- package/dist/workflows/dag/retry-policy.js +109 -0
- package/dist/workflows/dag/structured-output-repair.js +712 -0
- package/dist/workflows/dag/types.js +185 -12
- package/dist/workflows/dag/validate.js +64 -20
- package/docs/README.md +1 -0
- package/docs/architecture/evolution.md +45 -0
- package/docs/init-surface.manifest.json +6 -0
- package/docs/operations/README.md +1 -1
- package/docs/operations/local-development-environment.md +1 -5
- package/docs/skills/vetted-skill-registry.md +14 -0
- package/docs/templates/README.md +2 -2
- package/docs/templates/agent-dag.schema.json +44 -0
- package/docs/templates/backend-test-dag.json +60 -35
- package/docs/templates/frontend-implementation-contract.schema.json +681 -24
- package/docs/templates/frontend-test-case-checklist.md +2 -2
- package/docs/templates/frontend-test-dag.json +8 -10
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +1 -1
- package/docs/templates/init-managed-agents.md +13 -3
- package/harness.json +6 -4
- package/package.json +12 -4
- package/scripts/next-info.mjs +356 -0
- package/scripts/next-publish-gate.mjs +238 -0
- package/scripts/release-source-binding.mjs +251 -0
- package/skills/analyze-product-requirements/SKILL.md +8 -5
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +1 -1
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +10 -6
- package/skills/analyze-product-requirements/references/example.md +50 -0
- package/skills/analyze-product-requirements/references/forward-test-cases.md +11 -7
- package/skills/analyze-product-requirements/references/kb-integration.md +5 -5
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +8 -4
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +2 -2
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +1 -1
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +11 -1
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +20 -1
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +9 -0
- package/skills/codebase-scout/SKILL.md +1 -1
- package/skills/fe-test-ui-scout/SKILL.md +65 -0
- package/skills/fe-test-ui-scout/references/ledger-schema.md +62 -0
- package/skills/fe-test-ui-scout/references/recon-protocol.md +54 -0
- package/skills/frontend-implementation/references/node-contracts.md +2 -2
- package/skills/improve-codebase-architecture/SKILL.md +81 -0
- package/skills/improve-codebase-architecture/deepening.md +37 -0
- package/skills/improve-codebase-architecture/html-report.md +123 -0
- package/skills/improve-codebase-architecture/interface-design.md +44 -0
- package/skills/improve-codebase-architecture/language.md +53 -0
- package/skills/loop-agent/references/command-reference.md +11 -4
- package/skills/loop-agent/references/hybrid-dag.md +7 -0
- package/skills/playwright-cli/SKILL.md +23 -1
- package/skills/playwright-cli-case-generator/SKILL.md +29 -8
- package/dist/worker/console/static/assets/channel-BBOTJHvD.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-Cm8Yf8tD.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-Cm8Yf8tD.js +0 -1
- package/dist/worker/console/static/assets/index-B-qWGThd.js +0 -325
- package/dist/worker/console/static/assets/index-C-xRgY_0.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DZihfdKc.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CKnXCjHX.js +0 -8
|
@@ -21,6 +21,7 @@ export async function runJournaledContractCommit(input) {
|
|
|
21
21
|
const constraintsRel = `source/${CONSTRAINTS_FILE_NAME}`;
|
|
22
22
|
const taskConfigRel = "task.json";
|
|
23
23
|
const contractRel = CONTRACT_FILE_NAME;
|
|
24
|
+
const requirementLedgerRel = `source/requirement-ledger.json`;
|
|
24
25
|
const targetSpecs = [
|
|
25
26
|
{
|
|
26
27
|
kind: "requirement",
|
|
@@ -46,6 +47,17 @@ export async function runJournaledContractCommit(input) {
|
|
|
46
47
|
content: input.targets.contractRef,
|
|
47
48
|
isJson: true,
|
|
48
49
|
},
|
|
50
|
+
...(input.targets.requirementLedgerContent !== undefined
|
|
51
|
+
? [
|
|
52
|
+
{
|
|
53
|
+
kind: "requirement-ledger",
|
|
54
|
+
relativePath: requirementLedgerRel,
|
|
55
|
+
// Content is already serialized JSON text; stageText avoids double-encoding.
|
|
56
|
+
content: input.targets.requirementLedgerContent,
|
|
57
|
+
isJson: false,
|
|
58
|
+
},
|
|
59
|
+
]
|
|
60
|
+
: []),
|
|
49
61
|
];
|
|
50
62
|
const targetRecords = [];
|
|
51
63
|
for (const spec of targetSpecs) {
|
|
@@ -22,6 +22,18 @@ function resolveTaskKindExplicit(flags, baseDraft) {
|
|
|
22
22
|
return flags.taskKindExplicit;
|
|
23
23
|
return baseDraft?.taskKindExplicit ?? false;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve managed backend-test layout config.
|
|
27
|
+
* Precedence: explicit CLI flags > --from-draft base > existing task.json
|
|
28
|
+
* (the last tier self-heals tasks whose backendTest was hand-written).
|
|
29
|
+
*/
|
|
30
|
+
function resolveBackendTest(flags, baseDraft, existing) {
|
|
31
|
+
if (flags.backendTest !== undefined)
|
|
32
|
+
return flags.backendTest;
|
|
33
|
+
if (baseDraft?.backendTest !== undefined)
|
|
34
|
+
return baseDraft.backendTest;
|
|
35
|
+
return existing?.backendTest ?? undefined;
|
|
36
|
+
}
|
|
25
37
|
function resolveTitle(taskId, flags, facts, baseDraft, existing) {
|
|
26
38
|
return (trimNonEmpty(flags.title) ??
|
|
27
39
|
trimNonEmpty(baseDraft?.title) ??
|
|
@@ -205,6 +217,9 @@ export function buildPrepareDraft(input) {
|
|
|
205
217
|
};
|
|
206
218
|
if (featureId)
|
|
207
219
|
draft.featureId = featureId;
|
|
220
|
+
const backendTest = resolveBackendTest(flags, baseDraft, existingTaskConfig);
|
|
221
|
+
if (backendTest !== undefined)
|
|
222
|
+
draft.backendTest = backendTest;
|
|
208
223
|
if (references && references.length > 0) {
|
|
209
224
|
draft.references = references.map((ref) => ({
|
|
210
225
|
role: ref.role,
|
|
@@ -55,6 +55,25 @@ export function observationBlocksPrepare(state) {
|
|
|
55
55
|
}
|
|
56
56
|
return null;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* 精确 identity 绑定的人类 resolution 判定(AC-001 / AC-005):decidedBy==='human'、
|
|
60
|
+
* decision trim 后非空、sourceRef 与冲突 id 精确匹配三者同时成立才算有效;model/
|
|
61
|
+
* system 伪造判定、stale sourceRef(不匹配当前冲突 identity)或空/空白 decision 一律
|
|
62
|
+
* 不解锁。resolution 信息取自 draft 层(不重排流水线,listPrepareGaps 仍先于 ledger
|
|
63
|
+
* 构建执行)。
|
|
64
|
+
*/
|
|
65
|
+
export function hasValidHumanConflictResolution(draft, conflictId) {
|
|
66
|
+
for (const resolution of draft.sourceResolutions ?? []) {
|
|
67
|
+
if (resolution.sourceRef !== conflictId)
|
|
68
|
+
continue;
|
|
69
|
+
if (resolution.decidedBy !== "human")
|
|
70
|
+
continue;
|
|
71
|
+
if (!resolution.decision?.trim())
|
|
72
|
+
continue;
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
58
77
|
export function listPrepareGaps(input) {
|
|
59
78
|
const gaps = [];
|
|
60
79
|
const risks = [];
|
|
@@ -108,6 +127,12 @@ export function listPrepareGaps(input) {
|
|
|
108
127
|
}
|
|
109
128
|
if (input.acceptanceConflicts && input.acceptanceConflicts.length > 0) {
|
|
110
129
|
for (const conflict of input.acceptanceConflicts) {
|
|
130
|
+
// AC-001:有效 human resolution(human + 非空 decision + sourceRef 与冲突 id
|
|
131
|
+
// 精确匹配)解除该 id 的 legacy blocking gap;无 resolution 或 resolution 不
|
|
132
|
+
// 满足三条件(AC-005:伪造判定 / stale sourceRef / 空 decision)仍发射阻断。
|
|
133
|
+
if (hasValidHumanConflictResolution(input.draft, conflict.id)) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
111
136
|
gaps.push({
|
|
112
137
|
code: "ACCEPTANCE_ID_CONFLICT",
|
|
113
138
|
level: "blocking",
|
|
@@ -246,3 +271,166 @@ export function hasBlockingGaps(gaps) {
|
|
|
246
271
|
export function hasBlockingRisks(risks) {
|
|
247
272
|
return risks.some((risk) => risk.level === "blocking");
|
|
248
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Source fidelity ledger 分级 fail-closed 阻断(AC-003 / AC-FIDELITY-003):
|
|
276
|
+
* 高风险未映射/排除、unresolved、冲突返回稳定错误并阻断;低风险 context-only 仅当
|
|
277
|
+
* 理由完整且独立 reviewer pass 后继续;duplicate 保留全部来源(warning 可见)。
|
|
278
|
+
* 仅 taskKind 为 frontend-implementation 时全量阻断,其他 taskKind 保持 warning。
|
|
279
|
+
*/
|
|
280
|
+
export function appendLedgerGaps(input) {
|
|
281
|
+
const { gaps, risks } = input;
|
|
282
|
+
if (!input.ledgerSummary?.present)
|
|
283
|
+
return;
|
|
284
|
+
const blocking = input.taskKind === "frontend-implementation";
|
|
285
|
+
const level = blocking ? "blocking" : "warning";
|
|
286
|
+
const summary = input.ledgerSummary;
|
|
287
|
+
if (summary.unresolvedCount > 0) {
|
|
288
|
+
const gap = {
|
|
289
|
+
code: "SOURCE_FIDELITY_UNRESOLVED",
|
|
290
|
+
level,
|
|
291
|
+
message: `ledger 有 ${summary.unresolvedCount} 个 unresolved fragment(需人工 sourceResolutions 确认后才可继续)`,
|
|
292
|
+
details: {
|
|
293
|
+
fragmentIds: summary.exclusions
|
|
294
|
+
.filter((e) => /^REQ-SRC-/.test(e.fragmentId) || e.fragmentId.startsWith("AC-"))
|
|
295
|
+
.slice(0, 10)
|
|
296
|
+
.map((e) => e.fragmentId),
|
|
297
|
+
},
|
|
298
|
+
selfHealing: blocking
|
|
299
|
+
? {
|
|
300
|
+
action: "reimport-prd",
|
|
301
|
+
steps: [
|
|
302
|
+
"检查原始 PRD 中无法映射到 canonical AC 的可执行片段(unresolved)",
|
|
303
|
+
"补齐/修正 PRD 使每个可执行片段都能绑定 AC,或由人工在 sourceResolutions 中确认排除理由",
|
|
304
|
+
"重新 importPrd(同 taskId)后 task advance 重建 ledger",
|
|
305
|
+
],
|
|
306
|
+
}
|
|
307
|
+
: undefined,
|
|
308
|
+
};
|
|
309
|
+
gaps.push(gap);
|
|
310
|
+
risks.push({
|
|
311
|
+
code: "SOURCE_FIDELITY_UNRESOLVED",
|
|
312
|
+
level: blocking ? "blocking" : "elevated",
|
|
313
|
+
message: gap.message,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
if (summary.conflictCount > 0) {
|
|
317
|
+
const gap = {
|
|
318
|
+
code: "SOURCE_FIDELITY_CONFLICT",
|
|
319
|
+
level,
|
|
320
|
+
message: `ledger 检测到 ${summary.conflictCount} 个 AC 文本冲突(同一 ID 不同文本)`,
|
|
321
|
+
selfHealing: blocking
|
|
322
|
+
? {
|
|
323
|
+
action: "reimport-prd",
|
|
324
|
+
steps: [
|
|
325
|
+
"统一同一 AC ID 的文本后重新 importPrd(同 taskId)",
|
|
326
|
+
"或由人工在 sourceResolutions 中声明冲突取舍(conflict → decision)",
|
|
327
|
+
],
|
|
328
|
+
}
|
|
329
|
+
: undefined,
|
|
330
|
+
};
|
|
331
|
+
gaps.push(gap);
|
|
332
|
+
risks.push({
|
|
333
|
+
code: "SOURCE_FIDELITY_CONFLICT",
|
|
334
|
+
level: blocking ? "blocking" : "elevated",
|
|
335
|
+
message: gap.message,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
if (summary.failureCode === "SOURCE_FIDELITY_HIGH_RISK_UNCOVERED") {
|
|
339
|
+
const gap = {
|
|
340
|
+
code: "SOURCE_FIDELITY_HIGH_RISK_UNCOVERED",
|
|
341
|
+
level,
|
|
342
|
+
message: "ledger 存在高风险 acceptance 片段未映射到 canonical requirement",
|
|
343
|
+
selfHealing: blocking
|
|
344
|
+
? {
|
|
345
|
+
action: "reimport-prd",
|
|
346
|
+
steps: [
|
|
347
|
+
"为每个未覆盖的高风险片段补齐 canonical AC(或人工 sourceResolutions 确认)",
|
|
348
|
+
"重新 importPrd(同 taskId)后 task advance 重建 ledger",
|
|
349
|
+
],
|
|
350
|
+
}
|
|
351
|
+
: undefined,
|
|
352
|
+
};
|
|
353
|
+
gaps.push(gap);
|
|
354
|
+
risks.push({
|
|
355
|
+
code: "SOURCE_FIDELITY_HIGH_RISK_UNCOVERED",
|
|
356
|
+
level: blocking ? "blocking" : "elevated",
|
|
357
|
+
message: gap.message,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
for (const error of input.ledgerErrors ?? []) {
|
|
361
|
+
if (error.code === "SOURCE_FIDELITY_LEDGER_MISSING") {
|
|
362
|
+
const gap = {
|
|
363
|
+
code: "SOURCE_FIDELITY_LEDGER_MISSING",
|
|
364
|
+
level,
|
|
365
|
+
message: error.message,
|
|
366
|
+
};
|
|
367
|
+
gaps.push(gap);
|
|
368
|
+
}
|
|
369
|
+
// AC-BLOCK-001:canonical requirement 缺少 fragment/sourceRef 证据、来源引用
|
|
370
|
+
// 无效、fragment 无效均为 blocking gap(frontend task),保证 prepare/apply
|
|
371
|
+
// 以稳定码 fail closed(appendLedgerGaps 是 prepare 补洞的唯一入口)。
|
|
372
|
+
if (error.code === "SOURCE_FIDELITY_REQUIREMENT_NOT_COVERED" ||
|
|
373
|
+
error.code === "SOURCE_FIDELITY_SOURCE_REF_INVALID" ||
|
|
374
|
+
error.code === "SOURCE_FIDELITY_FRAGMENT_INVALID") {
|
|
375
|
+
const gap = {
|
|
376
|
+
code: error.code,
|
|
377
|
+
level,
|
|
378
|
+
message: error.message,
|
|
379
|
+
selfHealing: blocking
|
|
380
|
+
? {
|
|
381
|
+
action: "reimport-prd",
|
|
382
|
+
steps: [
|
|
383
|
+
"检查 PRD 中每个 canonical requirement 是否都有可审计的 fragment/sourceRef 证据",
|
|
384
|
+
"补齐缺失的验收标准映射或修正引用后重新 importPrd(同 taskId)",
|
|
385
|
+
"重新 importPrd(同 taskId)后 task advance 重建 ledger",
|
|
386
|
+
],
|
|
387
|
+
}
|
|
388
|
+
: undefined,
|
|
389
|
+
};
|
|
390
|
+
gaps.push(gap);
|
|
391
|
+
risks.push({
|
|
392
|
+
code: error.code,
|
|
393
|
+
level: blocking ? "blocking" : "elevated",
|
|
394
|
+
message: error.message,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
if (error.code === "SOURCE_FIDELITY_CONTEXT_ONLY_UNREVIEWED" &&
|
|
398
|
+
blocking) {
|
|
399
|
+
// 低风险 context-only 仅独立 reviewer pass 放行;未通过则 frontend 任务阻断。
|
|
400
|
+
const gap = {
|
|
401
|
+
code: "SOURCE_FIDELITY_CONTEXT_ONLY_UNREVIEWED",
|
|
402
|
+
level: "blocking",
|
|
403
|
+
message: error.message,
|
|
404
|
+
selfHealing: {
|
|
405
|
+
action: "reimport-prd",
|
|
406
|
+
steps: [
|
|
407
|
+
"检查 context-only 片段是否缺少完整排除理由,或由人工在 sourceResolutions 中确认",
|
|
408
|
+
"重新 importPrd(同 taskId)后 task advance 重建 ledger 并复核 reviewer 判定",
|
|
409
|
+
],
|
|
410
|
+
},
|
|
411
|
+
};
|
|
412
|
+
gaps.push(gap);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// 低风险 context-only:记录并提示排除理由/独立 reviewer 要求(不阻断普通任务)。
|
|
416
|
+
if (summary.contextOnlyCount > 0) {
|
|
417
|
+
gaps.push({
|
|
418
|
+
code: "SOURCE_FIDELITY_CONTEXT_ONLY_UNREVIEWED",
|
|
419
|
+
level: "warning",
|
|
420
|
+
message: `ledger 有 ${summary.contextOnlyCount} 个 context-only fragment(低风险排除;frontend 任务需完整理由且独立 reviewer pass)`,
|
|
421
|
+
details: {
|
|
422
|
+
fragmentIds: summary.exclusions
|
|
423
|
+
.filter((e) => e.fragmentId.startsWith("REQ-SRC-"))
|
|
424
|
+
.slice(0, 10)
|
|
425
|
+
.map((e) => e.fragmentId),
|
|
426
|
+
},
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
if (summary.duplicateCount > 0) {
|
|
430
|
+
gaps.push({
|
|
431
|
+
code: "SOURCE_FIDELITY_DUPLICATE_PRESERVED",
|
|
432
|
+
level: "warning",
|
|
433
|
+
message: `ledger 保留 ${summary.duplicateCount} 个 duplicate fragment(duplicate 保留全部来源)`,
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
}
|