@tea-agent/loop-agent 0.41.1-beta.0 → 0.42.0-next.2
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/CHANGELOG.md +78 -206
- package/dist/adapters/context-transfer/optional-pi-handoff.js +31 -0
- package/dist/adapters/context-transfer/pi-session.js +61 -0
- package/dist/application/dag/generate-task-dag.js +19 -75
- package/dist/application/task-lifecycle/advance.js +5 -24
- package/dist/application/task-lifecycle/observe.js +17 -171
- package/dist/application/task-lifecycle/plan-transitions.js +7 -42
- package/dist/application/task-lifecycle/recommendations.js +2 -13
- package/dist/build-stamp.json +3 -3
- package/dist/cli/command-definitions.js +12 -7
- package/dist/cli/program.js +23 -6
- package/dist/commands/client-recovery.js +0 -3
- package/dist/commands/dag-artifact.js +284 -0
- package/dist/commands/dag-context.js +184 -0
- package/dist/commands/dag-rerun.js +206 -1
- package/dist/commands/init.js +1 -27
- package/dist/commands/task-advance.js +0 -19
- package/dist/executors/dag-pi-executor.js +266 -3792
- package/dist/executors/pi-executor.js +4 -15
- package/dist/executors/pi-sdk-executor.js +3 -0
- package/dist/executors/shell-executor.js +217 -945
- package/dist/executors/shell-write-guard.js +0 -7
- package/dist/{worker → infrastructure}/console/app-data.js +4 -0
- package/dist/infrastructure/console/artifact-revision-store.js +430 -0
- package/dist/infrastructure/console/context-export-store.js +160 -0
- package/dist/infrastructure/console/dir-lock.js +132 -0
- package/dist/infrastructure/console/operation-store.js +197 -0
- package/dist/infrastructure/harness/artifact-store.js +10 -1
- package/dist/infrastructure/harness/atomic-write.js +12 -2
- package/dist/shared/context-transfer/artifact-revision.js +172 -0
- package/dist/shared/context-transfer.js +418 -0
- package/dist/shared/dag-failure-category.js +0 -12
- package/dist/shared/openspec-spec.js +4 -70
- package/dist/shared/operator/capabilities.js +14 -7
- package/dist/shared/operator/safe-run-summary.js +1 -0
- package/dist/shared/path-safety.js +93 -0
- package/dist/shared/preview.js +28 -4
- package/dist/task/config-types.js +80 -35
- package/dist/task/contract/adopt.js +0 -4
- package/dist/task/contract/import-revision.js +0 -4
- package/dist/task/contract/project.js +0 -3
- package/dist/task/contract/schema.js +1 -2
- package/dist/task/frontend-project-capability.js +20 -203
- package/dist/task/runtime.js +2 -5
- package/dist/task/source-prepare/build-draft.js +3 -3
- package/dist/task/source-prepare/fragment-inventory.js +9 -15
- package/dist/task/source-prepare/prepare.js +1 -89
- package/dist/task/source-prepare/semantic-intake.js +2 -6
- package/dist/task/source-references.js +1 -22
- package/dist/task/task-demand-routing.js +3 -0
- package/dist/worker/console/chat/chat-event-store.js +2 -2
- package/dist/worker/console/chat/pi-runtime.js +3 -2
- package/dist/worker/console/chat/resource-preferences-store.js +1 -1
- package/dist/worker/console/chat/routes.js +13 -4
- package/dist/worker/console/chat/semantic-activity.js +12 -11
- package/dist/worker/console/chat/session-stats.js +96 -0
- package/dist/worker/console/chat/session-store.js +1 -1
- package/dist/worker/console/chat/turn-process.js +28 -4
- package/dist/worker/console/chat/user-questions.js +1 -1
- package/dist/worker/console/console-update-runtime.js +1 -1
- package/dist/worker/console/context-transfer-diagnostics.js +198 -0
- package/dist/worker/console/dag-confirmation.js +1 -1
- package/dist/worker/console/dag-execution-receipt.js +1 -1
- package/dist/worker/console/doctor.js +1 -1
- package/dist/worker/console/draft-store.js +1 -1
- package/dist/worker/console/human-gate-token.js +1 -1
- package/dist/worker/console/index.js +3 -6
- package/dist/worker/console/interview/assessment.js +1 -1
- package/dist/worker/console/interview/session.js +1 -1
- package/dist/worker/console/operation-runner.js +45 -4
- package/dist/worker/console/operation-sse.js +1 -1
- package/dist/worker/console/operation-wait.js +1 -1
- package/dist/worker/console/operator-actions.js +107 -168
- package/dist/worker/console/operator-surface-health.js +1 -1
- package/dist/worker/console/operator-user-error.js +169 -0
- package/dist/worker/console/pi-plugins.js +60 -1
- package/dist/worker/console/routes.js +637 -8
- package/dist/worker/console/security.js +35 -0
- package/dist/worker/console/server.js +6 -6
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-Bho4we4c.js → abnfDiagram-N423BO3Z-DZZ8m3PO.js} +1 -1
- package/dist/worker/console/static/assets/{arc-TBDkTeK0.js → arc-D6PvaVd-.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-BF_fZrn2.js → architectureDiagram-T3A2C74G-B_OTOiI8.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-CCnPgUe2.js → blockDiagram-VBNYF7ZC-Bv6rqHBg.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BCYZJLAT.js → c4Diagram-5PPSVZJV-B8eHr0oz.js} +1 -1
- package/dist/worker/console/static/assets/channel-BU5gOilw.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D8K6adhU.js → chunk-2GRJ4B5K-DYwR0im2.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DkT1Q78b.js → chunk-2Q5K7J3B-D2WPGqXt.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DuhvpIr7.js → chunk-5RXB4S5H-CQISJ_I7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-BnK6dC49.js → chunk-5VM5RSS4-C0o2Du1e.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DPz__z7r.js → chunk-6Q2QTUOP-4f8kr-U7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-0kkppM2j.js → chunk-GF5L2VYU-D_OWvXzX.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-BB41iK5t.js → chunk-JWPE2WC7-CasdPz5X.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CiVrxKHU.js → chunk-KBJHAD2P-Cj8lRrla.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-C2h9Xje1.js → chunk-RYQCIY6F-CUvD1FSd.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-3iOSHdbM.js → chunk-XXDRQBXY-CqLw_eqB.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DIzKJGHr.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DIzKJGHr.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BN3A7tkk.js → cose-bilkent-JH36ORCC-ku-WqJPx.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-CTuBy0Or.js → cynefin-VYW2F7L2-Bq_PYDhl.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-wb6tUlMN.js → cynefinDiagram-MW4NZA55-BiGZV641.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-GP1Ivx8B.js → dagre-VZM6K2ZE-C4JRlglF.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-ejrcK6L0.js → diagram-7IWD3JNH-B0dNeWYG.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-YFkCCvUU.js → diagram-B4RE2ZJO-Cj35YvYM.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-B4rrvIaL.js → diagram-LBJQPF4R-uzQoJ2-8.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-C-YIZcUf.js → diagram-Q27KOJAE-D1a-Buoz.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-BPF5wcL1.js → diagram-UB23O5K3-XjRrLRSs.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-CU5SzXjO.js → ebnfDiagram-BXEA7PRR-Da_O24cW.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-CpL414DE.js → erDiagram-JOGREHBK-BLJ8jrYU.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-MrhLzNau.js → flowDiagram-UKHOOZJN-B9GrLjM0.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-Bg4qFuUo.js → ganttDiagram-PKOTCBZU-CeJ0TqiK.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-ColxSXLR.js → gitGraphDiagram-DS77QQ5N-Bm2eNNFX.js} +1 -1
- package/dist/worker/console/static/assets/index-H9rFJiGL.css +1 -0
- package/dist/worker/console/static/assets/index-xwu9GxEc.js +451 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-Czvtm6gc.js → infoDiagram-6WML65LV-DB26i3d8.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-B7Xp8HyJ.js → ishikawaDiagram-WSZJBQD7-BOGRyeZT.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DWYZcvph.js → journeyDiagram-NVQOT4AX-CZRoBO_6.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-KTLZRUjx.js → kanban-definition-27J2QSJJ-qlWhJyoB.js} +1 -1
- package/dist/worker/console/static/assets/{linear-_Exn7bfl.js → linear-CfUiDDB3.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-Cxg8kX8V.js → mermaid.core-BQe6fpqj.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-oKrlo2Bt.js → mindmap-definition-FAOFIHXS-zFzWHw64.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-XAeteiNd.js → pegDiagram-VL7TDLO6-DFGUqjZO.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-BTf1K-lp.js → pieDiagram-7S7Q4E2Y-BB5i0l8Z.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-C0IlY0Jf.js → quadrantDiagram-CIZ2JOQS-obbVZ_X5.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BVbKtZhW.js → railroadDiagram-AXF67PYL-BwdaNzc1.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-C5e4JFcr.js → requirementDiagram-LRYGKXZP-CkTJaugh.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Cz30hc29.js → sankeyDiagram-W5VNT64P-BwJ-hIgq.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DS33n6d0.js → sequenceDiagram-SI44F4Z6-BzSgmm7w.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-46w7v-9T.js → sizeCapture-X5ZJPWSS-Bn3oj5Q1.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-pbcD5SsZ.js → stateDiagram-OKZ733FA-dxhGtL8K.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cld2qK9v.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-DuivYBSj.js → swimlanes-SLNWSIFB-BLpEInya.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-TIHpiT7w.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-Cb9VZVIl.js → timeline-definition-Z64GVDOM-ChJGYcXy.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-D2-mfOgR.js → vennDiagram-T6HMQDX7-DK-qjRer.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-DeS2aC76.js → wardleyDiagram-T6FBY63Y-3qeaWAg-.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-WGsrFjxH.js → xychartDiagram-ELKLHX3M-CootlyP9.js} +1 -1
- package/dist/worker/console/static/index.html +7 -2
- package/dist/worker/console/static-src/app/useOperatorActions.js +3 -2
- package/dist/worker/console/static-src/app/useRunProgress.js +9 -2
- package/dist/worker/console/static-src/operator-chat/dag-progress-link.js +22 -0
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +2 -0
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +6 -0
- package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +28 -3
- package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +106 -0
- package/dist/worker/console/static-src/shell/console-update-reload.js +25 -0
- package/dist/worker/console/workspace-context.js +28 -112
- package/dist/worker/console/workspace-registry.js +2 -2
- package/dist/worker/continuation/worker-continuation.js +278 -0
- package/dist/worker/observability/read-model.js +4 -0
- package/dist/worker/observe/health.js +1 -1
- package/dist/worker/observe/node-transparency.js +572 -0
- package/dist/worker/observe/routes.js +51 -1
- package/dist/worker/observe/static/api.js +69 -5
- package/dist/worker/observe/static/dag-context-reason-labels.d.ts +9 -0
- package/dist/worker/observe/static/dag-context-reason-labels.js +120 -0
- package/dist/worker/observe/static/dag-node-purpose.js +0 -5
- package/dist/worker/observe/static/state.js +3 -1
- package/dist/worker/observe/static/styles.css +1037 -126
- package/dist/worker/observe/static/views/dag-inspector.js +1217 -65
- package/dist/worker/observe/static/views/session-timeline.js +121 -25
- package/dist/worker/outcomes/adapters.js +19 -0
- package/dist/worker/outcomes/types.js +1 -0
- package/dist/worker/pool/attempt-lease.js +97 -66
- package/dist/worker/pool/begin-attempt-with-lease.js +1 -0
- package/dist/worker/pool/reconcile.js +46 -1
- package/dist/worker/pool/run-store.js +2 -0
- package/dist/worker/pool/state-projection.js +2 -0
- package/dist/worker/task-spec/workflow-routing.js +8 -3
- package/dist/workflows/dag/artifact-bindings.js +149 -0
- package/dist/workflows/dag/artifact-revision-schema-registry.js +31 -0
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +99 -4
- package/dist/workflows/dag/backend-test-markdown-workflow.js +13 -1
- package/dist/workflows/dag/backend-test-result-contract.js +1 -1
- package/dist/workflows/dag/backend-test-writer-completeness.js +45 -3
- package/dist/workflows/dag/budget-enforcement.js +10 -0
- package/dist/workflows/dag/context-receipt.js +305 -0
- package/dist/workflows/dag/context-transfer/context-bundle.js +423 -0
- package/dist/workflows/dag/context-transfer/operator-actions.js +61 -0
- package/dist/workflows/dag/context-transfer/renderers.js +93 -0
- package/dist/workflows/dag/contract-validator-registrations.js +2 -1
- package/dist/workflows/dag/frontend-implementation-contract.js +162 -932
- package/dist/workflows/dag/frontend-plan-render.js +1 -2
- package/dist/workflows/dag/frontend-prewrite-gate.js +349 -255
- package/dist/workflows/dag/frontend-recovery-plan.js +10 -17
- package/dist/workflows/dag/frontend-recovery-run.js +20 -33
- package/dist/workflows/dag/frontend-repair.js +432 -1
- package/dist/workflows/dag/frontend-review-context.js +15 -261
- package/dist/workflows/dag/frontend-verification-trace.js +24 -249
- package/dist/workflows/dag/frontend-worktree-diff.js +17 -250
- package/dist/workflows/dag/frontend-writer-rollback.js +32 -0
- package/dist/workflows/dag/init-hybrid.js +740 -718
- package/dist/workflows/dag/interrupt-request.js +0 -7
- package/dist/workflows/dag/node-execution.js +136 -759
- package/dist/workflows/dag/path-safety.js +1 -0
- package/dist/workflows/dag/prompt.js +30 -38
- package/dist/workflows/dag/report.js +1 -37
- package/dist/workflows/dag/rerun-feedback.js +1 -256
- package/dist/workflows/dag/rerun-plan.js +557 -11
- package/dist/workflows/dag/rerun-run.js +601 -38
- package/dist/workflows/dag/rerun-task.js +0 -29
- package/dist/workflows/dag/retry-policy.js +109 -214
- package/dist/workflows/dag/runner.js +142 -430
- package/dist/workflows/dag/scheduler.js +16 -114
- package/dist/workflows/dag/skill-snapshot.js +17 -0
- package/dist/workflows/dag/types.js +195 -246
- package/dist/workflows/dag/validate.js +12 -28
- package/docs/architecture/runtime-boundaries.md +6 -6
- package/docs/architecture/worker-and-feature.md +1 -1
- package/docs/init-surface.manifest.json +12 -30
- package/docs/skills/vetted-skill-registry.md +2 -4
- package/docs/templates/README.md +0 -2
- package/docs/templates/agent-dag-report.schema.json +2 -8
- package/docs/templates/agent-dag.schema.json +33 -1
- package/docs/templates/backend-test-dag.json +18 -18
- package/docs/templates/frontend-implementation-contract.schema.json +1 -4
- package/docs/templates/product-line/task.yaml +1 -1
- package/harness.json +3 -3
- package/package.json +3 -1
- package/skills/frontend-bounded-implement/SKILL.md +14 -15
- package/skills/frontend-design-review/SKILL.md +41 -22
- package/skills/frontend-implementation/SKILL.md +52 -0
- package/skills/frontend-implementation/references/code-standards.md +33 -0
- package/skills/frontend-implementation/references/design-spec.md +56 -0
- package/skills/frontend-implementation/references/node-contracts.md +31 -0
- package/skills/frontend-review/SKILL.md +15 -20
- package/skills/frontend-review/references/review-findings.md +7 -6
- package/skills/frontend-verification/SKILL.md +1 -1
- package/skills/loop-agent/references/command-reference.md +6 -1
- package/skills/loop-agent/references/hybrid-dag.md +2 -2
- package/dist/commands/dag-follow-up.js +0 -138
- package/dist/executors/pi-read-budget-policy.js +0 -239
- package/dist/worker/console/frontend-human-decision-adapter.js +0 -19
- package/dist/worker/console/frontend-split-operation-adapter.js +0 -20
- package/dist/worker/console/operation-store.js +0 -389
- package/dist/worker/console/static/assets/channel-bnXW0U3C.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-rZpq_twR.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-rZpq_twR.js +0 -1
- package/dist/worker/console/static/assets/index-D3CC4eUz.css +0 -1
- package/dist/worker/console/static/assets/index-DLt4ZFvD.js +0 -437
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-zBMYiUyi.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-d_rms-5i.js +0 -8
- package/dist/worker/console/static-src/active-run-badge.js +0 -17
- package/dist/worker/materialize/frontend-split-task-materializer.js +0 -72
- package/dist/workflows/dag/dag-retry-schema.js +0 -138
- package/dist/workflows/dag/frontend-closeout.js +0 -221
- package/dist/workflows/dag/frontend-design-policy.js +0 -400
- package/dist/workflows/dag/frontend-human-decision.js +0 -182
- package/dist/workflows/dag/frontend-provider-capability-matrix.js +0 -159
- package/dist/workflows/dag/frontend-read-budgets.js +0 -12
- package/dist/workflows/dag/frontend-recovery-capsule.js +0 -455
- package/dist/workflows/dag/frontend-recovery-controller.js +0 -202
- package/dist/workflows/dag/frontend-recovery-lineage.js +0 -178
- package/dist/workflows/dag/frontend-review-findings.js +0 -270
- package/dist/workflows/dag/frontend-shadow-dual-write.js +0 -914
- package/dist/workflows/dag/frontend-shape-capsule-store.js +0 -191
- package/dist/workflows/dag/frontend-shape-facts.js +0 -409
- package/dist/workflows/dag/frontend-shape.js +0 -427
- package/dist/workflows/dag/frontend-source-fidelity-ledger.js +0 -108
- package/dist/workflows/dag/frontend-split-application-service.js +0 -203
- package/dist/workflows/dag/frontend-split-orchestrator.js +0 -899
- package/dist/workflows/dag/frontend-typed-event-store.js +0 -452
- package/dist/workflows/dag/frontend-typed-event-transaction.js +0 -180
- package/dist/workflows/dag/frontend-writer-admission.js +0 -285
- package/dist/workflows/dag/frontend-writer-status.js +0 -256
- package/dist/workflows/dag/recovery-lease.js +0 -80
- package/docs/templates/frontend-implementation-dag.json +0 -89
- package/docs/templates/spec-registry.schema.json +0 -45
- package/skills/frontend-bounded-implement/references/code-standards.md +0 -19
- package/skills/frontend-contract/SKILL.md +0 -23
- package/skills/frontend-contract/references/contract-protocol.md +0 -34
- package/skills/frontend-plan/SKILL.md +0 -26
- package/skills/frontend-plan/references/decision-contract.md +0 -37
- package/skills/frontend-plan/references/design-decisions.md +0 -17
- package/skills/frontend-scout/SKILL.md +0 -25
- package/skills/frontend-scout/references/design-evidence.md +0 -16
- package/skills/frontend-scout/references/scout-evidence.md +0 -23
- /package/dist/{worker → infrastructure}/console/repo-fingerprint.js +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-implementation
|
|
3
|
+
description: >-
|
|
4
|
+
Use for frontend contract, scout, mock strategy, and plan DAG nodes.
|
|
5
|
+
references:
|
|
6
|
+
- path: references/node-contracts.md
|
|
7
|
+
required: true
|
|
8
|
+
# Compact contract index must stay under skill total budget (~10k with body + other refs).
|
|
9
|
+
# Headroom above current ~4k file; do not raise alone without checking totalMaxChars.
|
|
10
|
+
maxChars: 6000
|
|
11
|
+
- path: references/design-spec.md
|
|
12
|
+
required: true
|
|
13
|
+
maxChars: 3000
|
|
14
|
+
- path: references/code-standards.md
|
|
15
|
+
required: true
|
|
16
|
+
maxChars: 3000
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Frontend Implementation
|
|
20
|
+
|
|
21
|
+
Read all required references before running any listed frontend node.
|
|
22
|
+
|
|
23
|
+
## Source And Evidence Rules
|
|
24
|
+
|
|
25
|
+
Use task sources/references, constraints, then `task.json`. Follow `design-spec.md`:
|
|
26
|
+
query the knowledge base when available and always inspect `openspec/schemas/`,
|
|
27
|
+
`openspec/project-specs/`, and `ai_workspace/`; then use repo evidence. Cite tight paths/symbols, and never invent APIs,
|
|
28
|
+
rules, commands, or retrievals. Scout/planners locate and explicitly read applicable
|
|
29
|
+
specs; only successful paired reads count. Lockfile-only, fixture-only, or unread
|
|
30
|
+
search hits do not prove a reusable Mock service.
|
|
31
|
+
|
|
32
|
+
This broad discovery rule applies only to contract, scout, and plan phases.
|
|
33
|
+
Implementation and repair use the separate `frontend-bounded-implement` skill.
|
|
34
|
+
|
|
35
|
+
## Implementation Discipline
|
|
36
|
+
|
|
37
|
+
- Reuse confirmed specs, components, tokens, helpers, APIs, mocks, schemas, and tests.
|
|
38
|
+
- Keep real requests enabled by default; never comment them out for a mock.
|
|
39
|
+
- Prefer native Mock support; otherwise use existing browser interception for e2e or
|
|
40
|
+
a reversible request adapter/DI seam for local preview.
|
|
41
|
+
- Trace fixtures to API/schema evidence. Activation is explicit, dev/test-only,
|
|
42
|
+
production-off; Mock evidence never proves real API integration.
|
|
43
|
+
- Add dependencies only when approved. Cover applicable success/loading/empty/error/
|
|
44
|
+
permission/boundary states and justify N/A.
|
|
45
|
+
- Keep state testable. Stay in `writeSet`, preserve behavior, and update tests.
|
|
46
|
+
- Never relax lint/type/test/build config or write unauthorized generated output.
|
|
47
|
+
|
|
48
|
+
## Output And Failure Rules
|
|
49
|
+
|
|
50
|
+
- Follow `node-contracts.md`; read-only nodes never edit. Missing input blocks work
|
|
51
|
+
when proceeding would guess behavior, bounds, or verification.
|
|
52
|
+
- Preserve tokens, commands, paths, IDs, and language. Completion needs fresh shell evidence.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Frontend Code Standards
|
|
2
|
+
|
|
3
|
+
Discover rules from task constraints, `design-spec.md` source order, config, code,
|
|
4
|
+
tests, manifests, and generated types. Regardless of knowledge-base results,
|
|
5
|
+
applicable `openspec/schemas/`, `openspec/project-specs/`, and `ai_workspace/` rules are normative.
|
|
6
|
+
Preferences are not rules, and docs do not override installed APIs without an
|
|
7
|
+
explicit compatibility decision.
|
|
8
|
+
|
|
9
|
+
## Discover And Cite
|
|
10
|
+
|
|
11
|
+
- Find routing and server/client boundaries; state, forms, data/cache, and errors;
|
|
12
|
+
API/mock/UI/schema/test locations and naming; supported tests; dependency rules.
|
|
13
|
+
|
|
14
|
+
Cite representative files/config for each convention. Describe conflicts instead of
|
|
15
|
+
silently selecting one.
|
|
16
|
+
|
|
17
|
+
## Plan And Implement
|
|
18
|
+
|
|
19
|
+
- Map criteria to code and checks. Define placement, state ownership, request
|
|
20
|
+
lifecycle, validation/failures, API compatibility, mocks, and fixtures.
|
|
21
|
+
- Trace fixtures to API evidence; label gaps. Prefer native mocks, then browser
|
|
22
|
+
interception for existing e2e, then a reversible request adapter/DI preview seam.
|
|
23
|
+
- Real API stays default; mock activation is explicit, local/test-only,
|
|
24
|
+
non-production, and removable.
|
|
25
|
+
- Reuse helpers/public APIs and preserve out-of-contract behavior. Keep rendering,
|
|
26
|
+
transitions, validation, and side effects testable; cover lifecycle races/bounds
|
|
27
|
+
when relevant. Update supported tests; stay in `writeSet`.
|
|
28
|
+
|
|
29
|
+
## Prohibited
|
|
30
|
+
|
|
31
|
+
- Do not relax checks, add unapproved dependencies, comment real requests, hardcode
|
|
32
|
+
fixtures in production UI, import test mocks into production, store fixture
|
|
33
|
+
secrets, equate mock evidence with real integration, or report unrun checks as verified.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Frontend Design And Component Specification
|
|
2
|
+
|
|
3
|
+
## Required Source Sequence
|
|
4
|
+
|
|
5
|
+
Knowledge base, OpenSpec, and `ai_workspace/` are parallel specification sources:
|
|
6
|
+
|
|
7
|
+
1. Attempt the configured component/design knowledge-base query first when a
|
|
8
|
+
connector is available.
|
|
9
|
+
2. Regardless of knowledge-base success/failure/timeout/no-match, also
|
|
10
|
+
recursively search `openspec/schemas/`, `openspec/project-specs/`, and
|
|
11
|
+
`ai_workspace/` for index files and relevant content.
|
|
12
|
+
3. Treat relevant matches from both sources as the current project's
|
|
13
|
+
specification for this run.
|
|
14
|
+
4. Only then use component source, tokens, stories, tests, and pages as
|
|
15
|
+
non-normative repository fallback.
|
|
16
|
+
|
|
17
|
+
Never skip local OpenSpec or `ai_workspace/` for neighboring-code conventions,
|
|
18
|
+
even when a knowledge-base query returned results. Report source conflicts instead
|
|
19
|
+
of combining them. Explicit task requirements remain the contract.
|
|
20
|
+
|
|
21
|
+
Connector format is TODO; attempt only an available connector, otherwise record
|
|
22
|
+
`not-configured` and run the openspec fallback (never invent a connection).
|
|
23
|
+
|
|
24
|
+
## openspec Fallback Procedure
|
|
25
|
+
|
|
26
|
+
- Inspect `<repoRoot>/openspec/schemas/`, `<repoRoot>/openspec/project-specs/`,
|
|
27
|
+
and `<repoRoot>/ai_workspace/` when present; enumerate supported files recursively.
|
|
28
|
+
- Read indexes first, then search names/content using task, route, component,
|
|
29
|
+
interaction, theme, token, and state terms.
|
|
30
|
+
- Read matches in context; a filename-only hit is not a rule.
|
|
31
|
+
- Record search terms, inspected/matched paths, headings or tight line ranges,
|
|
32
|
+
applied rules, and conflicts.
|
|
33
|
+
- If both directories or relevant rules are absent, record that before using
|
|
34
|
+
repository fallback.
|
|
35
|
+
|
|
36
|
+
## Retrieval Evidence
|
|
37
|
+
|
|
38
|
+
Record source as `knowledge-base`, `openspec fallback`, `repository fallback`, or
|
|
39
|
+
`unavailable`. Knowledge-base evidence includes query, source ID/version/time, rules,
|
|
40
|
+
and conflicts. `openspec fallback` includes terms, paths/headings/lines, rules, and conflicts.
|
|
41
|
+
|
|
42
|
+
## Rules To Retrieve Or Discover
|
|
43
|
+
|
|
44
|
+
- Components, variants, props, composition, accessibility, deprecations, placement, forms, overlays, navigation, and state patterns.
|
|
45
|
+
- Tokens, typography, color, layout, breakpoints, motion, focus/keyboard/contrast, exceptions, design debt, and forbidden patterns.
|
|
46
|
+
|
|
47
|
+
## Gate Expectations
|
|
48
|
+
|
|
49
|
+
- Reuse confirmed primitives unless a new pattern is authorized.
|
|
50
|
+
- Define applicable states and responsive behavior before implementation.
|
|
51
|
+
- Cite knowledge-base or openspec spec evidence for component/token choices;
|
|
52
|
+
label weaker repo fallback.
|
|
53
|
+
- Make deviations and unresolved gaps explicit.
|
|
54
|
+
- Contract `uiComponentChoices[]` per UI purpose: `specified` needs
|
|
55
|
+
`specReference {path,section,line}`; `new` needs null ref + rationale; never
|
|
56
|
+
silently replace a spec-defined component.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Frontend Node Contracts
|
|
2
|
+
|
|
3
|
+
Pre-write nodes are read-only. Preserve IDs, labels, commands, language, required headings.
|
|
4
|
+
|
|
5
|
+
## Core nodes
|
|
6
|
+
|
|
7
|
+
- **`frontend-contract-pi`**: `Scope`, `Non-goals`, `Acceptance Criteria`, `UI States`, `Target Runtime Environment`, `Risks`, `Verification Expectations`; no guessed requirements.
|
|
8
|
+
- **`frontend-scout-pi`**: routes, components, tokens, data/API/Mock, scripts, tests, assets; fact vs inference vs gap. Search+read `openspec/schemas/`, `openspec/project-specs/`, `ai_workspace/` first. Output stack, styling, conventions, state/data, test entry points, reuse, risks.
|
|
9
|
+
- **`frontend-plan-pi` + conditional design loop**: AC → observable `expectedOutcome`; interactions → `trigger`+`expectedBehavior`; include steps, in-bound files, UI states, reuse, deps, Mock/API, frozen verify entrypoints and integration gaps. DAG freezes a protected skeleton (`schemaVersion`, `sourceBinding`, `riskLevel`, `targets.files`, `mockApi.productionDefaultOff`). Model returns a **JSON-only** editable RFC 7386 patch (`frontend-implementation-contract-plan-patch-v1`) plus one `openspec-citations` block. Runtime compiles canonical `frontend-implementation-contract-v1` and archives raw/extracted/normalized/validation candidates; unresolved optional symbols are dropped and audited. No plan prose; gate renders plan.md. IDs+paths ≠ behavior semantics. Applicable UI states need behavior/implementation/verification; non-applicable states need reasons. Active Mock needs frozen commands; `auto` without confirmed capability/command → `not-needed`; `required` without command → generation-time blocked. Only `request-revision` runs revision+final review; small-risk gets one review.
|
|
10
|
+
- `uiComponentChoices[]` (optional): `{purpose, component, decision, specReference, rationale}`; `specified` needs `specReference{path,section,line}`; `new` needs null ref+rationale.
|
|
11
|
+
- **`frontend-prewrite-gate-shell`**: sole write authorization. Resolve effective plan (revised if revision ran, else original) + review; require exact pass; retain every REQ/BR/AC id; enforce Mock policy; validate schema/source binding+writeSet containment; materialize `contracts/frontend-implementation-contract.json` from the **single** fenced contract block (multiple candidates fail closed `invalid-output`). Fallback only when conditional primary absent; malformed primary fails closed. Generation-time blocked Mock yields one blocking shell node, no writer.
|
|
12
|
+
- `verificationTarget.commandLabel` must be a **frozen command label** from `verifyEvidence.commandLabels`; others fail closed (`invalid-output`). Empty frozen set (no `run.json`) skips check.
|
|
13
|
+
- `mockApi.strategy !== "not-needed"` fails closed when `mockCommandLabels` empty (`no authorized Mock verification commands`).
|
|
14
|
+
- OpenSpec policy: `task.json.frontendOpenspec.policy` (default `cited`); candidates = `requiredReadPaths` ∪ task-source citations; effective plan must append one fenced `openspec-citations` block (one JSON `{"path","section","line"}` per line). Candidates non-empty but block missing/unparseable → `openspec-citation-block-unparseable`; candidate not cited → `openspec-not-cited`; cited path without read event → `openspec-citation-not-read` (anti-fabrication). Empty candidates skip enforcement. `scan-strict` keeps full-read semantics (`openspec-not-read`); both modes keep `candidate-missing-drift`.
|
|
15
|
+
- Component conformance: missing `uiComponentChoices` (frozen bucket non-empty + UI-visible work) → `component-choices-missing`; bad/uncited `specReference.path` → `component-spec-reference-invalid` / `component-spec-not-cited`.
|
|
16
|
+
- revisionPatch mode: revision output is an RFC 7386 merge-patch delta applied on the original canonical contract node (`planFallbackFromNodeIds[0]`); protected skeleton paths remain immutable. Legacy DAGs keep full-contract semantics. Size guard: canonical serialization >64KB → `retryable-invalid` + `contract-too-large`.
|
|
17
|
+
- **`frontend-implement-pi`**: sole regular exclusive writer; uses `frontend-bounded-implement` (not this skill). Stay in `writeSet`; real requests default-on. Atomic handler/intercept/adapter with tests. Stop on forbidden paths/guesses. First line `IMPLEMENTATION_OUTCOME: changed|already-satisfied|blocked`; runtime checks against attributed diff. Optional mock-verify when frozen; static+behavior always; behavior must prove page consumption. `not-needed` keeps real integration pending unless real backend has fresh evidence.
|
|
18
|
+
|
|
19
|
+
## Contract / trace / stages (M1–M2)
|
|
20
|
+
|
|
21
|
+
- `frontend-verify-assess-shell` runs Mock/static/behavior groups, binds `verificationTargets` to command labels+evidence, writes `frontend-verification-trace.json`+`frontend-repair-assessment.json`; browser/visual stay `not-run`.
|
|
22
|
+
- `frontend-review-context-shell` captures real diff; combines contract, effective trace, repair assessment, diff into `contracts/frontend-review-context.json`.
|
|
23
|
+
- Implement stages: (1) contract confirm (2) tests sync (3) component/UI (4) API/Mock (5) frozen checks (6) diff cleanup. Summary: Contract Ref, Changed Files, Requirements, UI States, Tests, Verification Attempts, Deviations, Residual Risks.
|
|
24
|
+
|
|
25
|
+
## Repair (M3)
|
|
26
|
+
|
|
27
|
+
Only `eligible=true` runs `frontend-repair-pi` (same writeSet; no re-spec; max 1 attempt) + `frontend-reverify-shell`. No-failure skips both. Non-repairable contract/path/dependency/credential/deploy/spec-unclear failures fail closed.
|
|
28
|
+
|
|
29
|
+
## Risk & capability (M4–M6)
|
|
30
|
+
|
|
31
|
+
Deterministic risk, no model; high-risk beats small; supervised never small. Standard/high-risk: 15 top-level nodes; small: 13 (omits revision + final review). Capability seed injects adapters; openspec specs and task sources outrank adapter guidance. A11y: static/component tools only when present; Browser a11y always not-run.
|
|
@@ -9,25 +9,17 @@ references:
|
|
|
9
9
|
|
|
10
10
|
# Frontend Review
|
|
11
11
|
|
|
12
|
-
Use for `frontend-review-pi`; read the findings guide
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
Use for `frontend-review-pi`; read the findings guide first. Required inputs are
|
|
13
|
+
original task/reference material, effective plan/design branch, implementation summary,
|
|
14
|
+
and `contracts/frontend-review-context.json`. That canonical context binds the validated
|
|
15
|
+
implementation contract, effective verification trace, repair assessment, optional
|
|
16
|
+
`frontend-lint-assessment-v1`, and run-owned diff. The diff is authoritative.
|
|
17
17
|
|
|
18
|
-
##
|
|
18
|
+
## Verdict Contract
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- `request_review_changes` for a defect, missing required evidence, forbidden
|
|
24
|
-
write, or unmet acceptance criterion. It must include a typed `issueCategory`,
|
|
25
|
-
at least one `evidenceRef`, and non-empty findings.
|
|
26
|
-
|
|
27
|
-
The typed terminal is the only authoritative outcome. Do not require or emit a
|
|
28
|
-
`VERDICT:` line or response-text JSON verdict. A request for review changes ends
|
|
29
|
-
this run and is handled by the recovery controller rather than a same-run repair
|
|
30
|
-
branch.
|
|
20
|
+
The first non-empty line must be exactly `VERDICT: pass` or
|
|
21
|
+
`VERDICT: request-revision`. Any Critical/Important finding, failed or missing
|
|
22
|
+
required check, forbidden write, or unmet acceptance criterion forces revision.
|
|
31
23
|
|
|
32
24
|
## Review Scope
|
|
33
25
|
|
|
@@ -35,7 +27,7 @@ branch.
|
|
|
35
27
|
- Inspect every changed file against allowed, forbidden, and approved write scope.
|
|
36
28
|
- Map criteria to behavior, applicable UI states, tests, and shell evidence.
|
|
37
29
|
- Review state/data flow, validation, async/error behavior, design, responsive/a11y,
|
|
38
|
-
dependencies, and regression risk when applicable.
|
|
30
|
+
dependencies, maintenance, and regression risk when applicable.
|
|
39
31
|
- Inspect static, behavior, and available Mock-specific artifacts directly. For Mock
|
|
40
32
|
strategies, compare the endpoint matrix, handler/fixture/adapter and consumer diff;
|
|
41
33
|
require the real request as default, contract-aligned fixtures, production isolation,
|
|
@@ -46,8 +38,11 @@ branch.
|
|
|
46
38
|
baseline-matched diagnostics on unchanged files, and none on writer-changed files.
|
|
47
39
|
Report debt, never `lint passed`; `failed`/`unavailable` blocks. Typecheck, build,
|
|
48
40
|
and test still require successful final exits.
|
|
49
|
-
-
|
|
50
|
-
|
|
41
|
+
- Component/design claims need both knowledge-base and local openspec evidence. Query
|
|
42
|
+
the connector when available and always read task-relevant files under
|
|
43
|
+
`<repoRoot>/openspec/schemas/`, `<repoRoot>/openspec/project-specs/`, and `<repoRoot>/ai_workspace/`.
|
|
44
|
+
Connector format is TODO; never invent evidence. Only successful `read` calls are
|
|
45
|
+
observable as "已读取规范文件".
|
|
51
46
|
- Treat shell exit status as authoritative. Do not edit files.
|
|
52
47
|
|
|
53
48
|
## Evidence And Output
|
|
@@ -14,23 +14,24 @@
|
|
|
14
14
|
`baseline-debt` only with a valid `frontend-lint-assessment-v1`; this is not a
|
|
15
15
|
passed lint result. A changed-file lint diagnostic, new unmatched diagnostic,
|
|
16
16
|
command drift, missing baseline, timeout, or unparseable output is Important.
|
|
17
|
-
- Treat
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
reference accurately instead.
|
|
17
|
+
- Treat knowledge base, `openspec/schemas/`, `openspec/project-specs/`, and `ai_workspace/` as
|
|
18
|
+
parallel sources. Record connector/query/source/time plus openspec search terms and
|
|
19
|
+
matched paths/headings; label fallback or unavailable accurately.
|
|
21
20
|
|
|
22
21
|
## Review Sequence
|
|
23
22
|
|
|
24
23
|
1. Establish changed-file inventory and write boundaries.
|
|
25
|
-
2. Compare
|
|
24
|
+
2. Compare original requirement with derived contract/constraints.
|
|
26
25
|
3. Map each criterion to code, states, tests, and evidence.
|
|
27
26
|
4. Inspect interactions, state/data/API behavior, failure paths, and regressions.
|
|
28
27
|
5. Check mock selection, contract-to-fixture mapping, activation/default path,
|
|
29
28
|
handler/fixture/adapter and consumer diff, verification, production imports, and
|
|
30
29
|
the real-integration gap.
|
|
31
|
-
6. Check
|
|
30
|
+
6. Check design evidence, responsive/a11y behavior, dependencies, and maintenance.
|
|
32
31
|
7. Classify findings and derive the verdict mechanically.
|
|
33
32
|
|
|
33
|
+
Skipping either directory is Important when design compliance affects acceptance.
|
|
34
|
+
|
|
34
35
|
```text
|
|
35
36
|
- [Critical|Important|Minor] path:line — Problem; impact; required correction; evidence.
|
|
36
37
|
```
|
|
@@ -30,7 +30,7 @@ verdict/findings, and required browser, visual, manual, or knowledge evidence.
|
|
|
30
30
|
`frontend-lint-assessment-v1` proving only pre-writer diagnostics on unchanged
|
|
31
31
|
files. Report debt count, changed files, and raw evidence. Typecheck/build/test do
|
|
32
32
|
not support debt.
|
|
33
|
-
- Use design and requirement evidence
|
|
33
|
+
- Use design and requirement evidence already bound inside
|
|
34
34
|
`contracts/frontend-review-context.json`. Closeout must not query connectors,
|
|
35
35
|
re-open task sources, OpenSpec, AI workspace, upstream model prose, or start new
|
|
36
36
|
repository research.
|
|
@@ -347,8 +347,13 @@ loop-agent dag reconcile-run --run-id <run-id> --action abandon --reason "..."
|
|
|
347
347
|
loop-agent dag request-interrupt --run-id <run-id> --request-id <id> --target-operation-id <id> --reason-code <code> --reason <detail> [--json] # 协作中止:写入 interrupt.json(identity CAS);需配 --expected-runner-pid/--expected-runner-hostname 校验 runner 身份
|
|
348
348
|
loop-agent dag rerun --run-id <run-id> --from-node <node-id> --plan [--json] # 从节点重跑资格预检(不执行)
|
|
349
349
|
loop-agent dag rerun --run-id <run-id> --from-node <node-id> --plan-hash <sha256> --request-id <key> --reason "..." [--json] # 安全子图 continuation
|
|
350
|
+
loop-agent dag context show --run-id <run-id> --node-id <node-id> --attempt <n> --json # 有界 effective-context 摘要
|
|
351
|
+
loop-agent dag context export --run-id <run-id> --node-id <node-id> --attempt <n> --target <generic|pi-session|pi-handoff|readable> --output <bundle.zip> # 默认 redacted;raw 另需显式确认
|
|
352
|
+
loop-agent dag artifact consumers --run-id <run-id> --node-id <producer> --artifact <relative-path> --json # 只读 frozen binding consumer
|
|
353
|
+
loop-agent dag artifact revision stage --run-id <run-id> --node-id <producer> --artifact <relative-path> --file <replacement> --request-id <key> --json # 暂存 revision,不修改 parent
|
|
354
|
+
loop-agent dag artifact revision discard --revision-id <revision-id> --request-id <key> --json
|
|
355
|
+
loop-agent dag rerun --run-id <run-id> --artifact-revision <revision-id> --plan [--json] # 单产物影响闭包预检
|
|
350
356
|
loop-agent dag rerun-task --run-id <run-id> --reason "..." --request-id <key> [--profile auto] [--task-id <id>] [--json] # standalone 完整任务重跑
|
|
351
|
-
loop-agent dag follow-up <parent-run-id> [--task-id <id>] [--execute] [--profile auto|minimal|standard|reviewed|supervised] # 将 frontend review 的 request_review_changes findings 物化为下游 frontend task;默认只创建并返回 task advance 命令
|
|
352
357
|
loop-agent dag request-interrupt --run-id <run-id> --request-id <key> --target-operation-id <op-id> --reason-code <code> --reason "..." --expected-runner-pid <pid> --expected-runner-hostname <host> --expected-runner-started-at <ts> --expected-controller-fingerprint <fingerprint> # 协作式中止:经 Human Gate 登记 interrupt.json,runner 等当前节点安全收敛后再停调度,不直接 SIGKILL
|
|
353
358
|
loop-agent dag reconcile-tasks --glob '<pattern>' # 仅报告的 task/run/artifact/verify drift audit
|
|
354
359
|
loop-agent dag final-verification <task-id> # 生成 closeout DAG,closeout artifact 后再 final verify
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
对于默认 `standard` 任务,生成器先读取 `source/需求.md` 中的结构化任务类型,再结合 `allowedPaths` 与 React/Next/Vue 强工程证据做确定性分类。确认是前端项目且任务不是明确后端、前后端混合、排除前端或仅文档/测试范围时,默认选择 `frontend-implementation` DAG,不依赖需求关键词。分类不会把普通后端实现路由到 `backend-test`;显式 profile、`workflowPolicy` 或 supervised quality gate 只记录治理强度,不把已识别的前端业务 workflow 换回通用模板。
|
|
18
18
|
|
|
19
|
-
前端专用链保留独立 contract/scout;plan
|
|
19
|
+
前端专用链保留独立 contract/scout;plan 同时选择 Mock/API 策略并输出结构化 implementation contract。design initial pass 直接使用原计划,只有 request-revision 才运行 revision/final review;small-risk 只执行一次 design review。`frontend-prewrite-gate-shell` 合并生效 verdict、REQ/BR/AC 覆盖、Mock policy 和 contract 物化,是唯一写入授权。实现后 `frontend-verify-assess-shell` 合并 Mock/static/behavior/trace/assessment;只有 `eligible=true` 才运行同 writeSet 的 repair 和 `frontend-reverify-shell`。`frontend-review-context-shell` 绑定真实 diff 与有效验证证据后再 review/closeout。standard/high-risk 为 15 个顶层节点,small-risk 为 13;绿色路径执行 11 个节点、7 次 Pi。生成期 blocked Mock 只生成一个确定性阻塞节点且没有 writer。
|
|
20
20
|
|
|
21
21
|
> Backend-test Markdown-first:先由确定性环境 Shell 检查 clean env 中 Python/pytest、常见配置、conftest/fixture、test root、server entry 和 HTML renderer,失败时不消耗模型调用。随后 Pi 生成中文 README 索引与模块用例卡片并独立 Review `testcase/md/**`。第 4 节点只把前置条件、操作步骤、预期结果作为必选章节,并检查 Case ID、业务 AC、步骤/预期和占位措辞;不校验需求来源引用有效性或 Markdown sensitive-shaped 内容。pytest writer 为每次真实接口调用记录脱敏、有界的请求 method/URL/参数摘要和响应 status/body 摘要。第 6 节点只扫描每条 Case 明确映射的 pytest 脚本,同时支持模块级函数和 pytest class 方法,并把缺少请求/响应日志、递归脱敏或有界截断证据记录为 advisory。第 4/6 节点均写 PASS/FAIL findings 而不阻断后续;pytest 仍只运行一次,生成 JUnit,并把 Markdown 名称/场景/脚本映射与同一 JUnit 合成为按测试概览、质量校验、失败概览、用例执行明细和技术证据组织的中文 self-contained HTML 与 Markdown facts。最终 Pi 按固定简洁结构汇总 advisory 状态、执行事实和 L-5 结论。active 流程不要求模型生成 backend-test 业务 JSON。
|
|
22
22
|
|
|
@@ -91,7 +91,7 @@ loop-agent dag execute --dag <temp-dir>/hybrid-dag.json --init-only --canvas-pat
|
|
|
91
91
|
- **Source binding / recovery**:新生成 DAG 在顶层冻结 `sourceBinding`(任务源相对路径、SHA-256、显式 `REQ/BR/AC`)。前端计划在存在显式编号时经过 `frontend-requirement-coverage-shell`;修订计划为 primary,只在条件分支未产生输出时 fallback 到原计划。主来源存在但缺号时仍在 writer 前 fail closed。中断后重新生成完整 DAG,不要从二手摘要拼接 impl-only DAG;v3 孤立 exclusive writer 若无 `sourceBinding` 且没有只读 planner 上游,会被 strict governance 拒绝。
|
|
92
92
|
- **勿宣称 live smoke 已通过**,除非真实 `dag execute` execution 中 Pi read-only、Pi writer、显式 Cursor 或 shell node 均按 DAG 完成。
|
|
93
93
|
|
|
94
|
-
可复用 template:`docs/templates/agent-dag.base.json`(model 生成 DAG 的首选 base template)、`docs/templates/agent-dag.schema.json`(JSON Schema)、`docs/templates/agent-dag.supervised-implementation.json`(supervised implementation:writeSet audit、soft/hard verify、process supervisor、repair、review verdict gate)、`docs/templates/
|
|
94
|
+
可复用 template:`docs/templates/agent-dag.base.json`(model 生成 DAG 的首选 base template)、`docs/templates/agent-dag.schema.json`(JSON Schema)、`docs/templates/agent-dag.supervised-implementation.json`(supervised implementation:writeSet audit、soft/hard verify、process supervisor、repair、review verdict gate)、`docs/templates/backend-test-dag.json`(后端测试专用模板)、`docs/templates/frontend-test-dag.json`(FE-test RAG:Markdown case manifest、串行 Playwright CLI case 子节点与逐 case 证据)、`docs/templates/agent-dag-process-supervisor.prompt.md`、`docs/templates/agent-dag-review-verdict.prompt.md`、`docs/templates/agent-dag-authority-surface-audit.prompt.md`(可选 authority surface verifier;authority signal 或显式 enablement 匹配时由 `dag init-hybrid` 插入)、`examples/hybrid-loop-agent-dag.json`、`docs/templates/hybrid-dag.json`。
|
|
95
95
|
|
|
96
96
|
### Supervised implementation flow(减少 operator 中途介入)
|
|
97
97
|
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { mkdir } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { FRONTEND_REVIEW_FINDINGS_PRD_REL, readFrontendReviewFindingsPrd, } from "../workflows/dag/frontend-review-findings.js";
|
|
4
|
-
import { locateDagRun } from "../workflows/dag/lifecycle.js";
|
|
5
|
-
import { createTask, getTaskPaths } from "../task/runtime.js";
|
|
6
|
-
import { importPrdDocument } from "../task/source-references.js";
|
|
7
|
-
function parseFlagValue(rawArgs, flag) {
|
|
8
|
-
const index = rawArgs.indexOf(flag);
|
|
9
|
-
if (index < 0 || index + 1 >= rawArgs.length)
|
|
10
|
-
return undefined;
|
|
11
|
-
return rawArgs[index + 1];
|
|
12
|
-
}
|
|
13
|
-
export function parseDagFollowUpArgs(rawArgs) {
|
|
14
|
-
const positional = rawArgs.filter((arg) => !arg.startsWith("-"));
|
|
15
|
-
const parentRunId = positional[0];
|
|
16
|
-
if (!parentRunId) {
|
|
17
|
-
throw new Error("usage: dag follow-up <parent-run-id> [--task-id <id>] [--execute] [--profile <profile>]");
|
|
18
|
-
}
|
|
19
|
-
return {
|
|
20
|
-
parentRunId,
|
|
21
|
-
taskId: parseFlagValue(rawArgs, "--task-id"),
|
|
22
|
-
execute: rawArgs.includes("--execute"),
|
|
23
|
-
profile: parseFlagValue(rawArgs, "--profile"),
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export function deriveFollowUpTaskId(parentRunId) {
|
|
27
|
-
// Deterministic, valid task id derived from the parent run id.
|
|
28
|
-
return `${parentRunId}-followup`;
|
|
29
|
-
}
|
|
30
|
-
/** CLI entry: parse raw args and run the follow-up flow. */
|
|
31
|
-
export async function runDagFollowUp(repoRoot, rawArgs) {
|
|
32
|
-
const parsed = parseDagFollowUpArgs(rawArgs);
|
|
33
|
-
const result = await runDagFollowUpInternal(repoRoot, parsed.parentRunId, {
|
|
34
|
-
taskId: parsed.taskId,
|
|
35
|
-
execute: parsed.execute,
|
|
36
|
-
profile: parsed.profile,
|
|
37
|
-
});
|
|
38
|
-
console.log(JSON.stringify(result, null, 2));
|
|
39
|
-
if (!result.ok) {
|
|
40
|
-
process.exitCode = result.mode === "blocked" ? 2 : 1;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
export async function runDagFollowUpInternal(repoRoot, parentRunId, options = {}) {
|
|
44
|
-
const located = await locateDagRun(repoRoot, parentRunId);
|
|
45
|
-
if (!located) {
|
|
46
|
-
return {
|
|
47
|
-
ok: false,
|
|
48
|
-
mode: "invalid",
|
|
49
|
-
reason: `dag run not found: ${parentRunId}`,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
const prd = await readFrontendReviewFindingsPrd(located.runDir);
|
|
53
|
-
if (!prd) {
|
|
54
|
-
return {
|
|
55
|
-
ok: false,
|
|
56
|
-
mode: "invalid",
|
|
57
|
-
reason: `no frontend review findings PRD found in run ${parentRunId} (${FRONTEND_REVIEW_FINDINGS_PRD_REL}); the review must have committed request_review_changes`,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const taskId = options.taskId ?? deriveFollowUpTaskId(parentRunId);
|
|
61
|
-
try {
|
|
62
|
-
await createTask(repoRoot, taskId, `修复 review 发现(parent ${parentRunId})`);
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
return {
|
|
66
|
-
ok: false,
|
|
67
|
-
mode: "blocked",
|
|
68
|
-
reason: `failed to create task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
// Materialize the PRD draft into the task's source directory so the task
|
|
72
|
-
// lifecycle can import it as its requirement.
|
|
73
|
-
const prdMaterialized = path.join(getTaskPaths(repoRoot, taskId).sourceDir, "review-findings-prd.md");
|
|
74
|
-
try {
|
|
75
|
-
await mkdir(path.dirname(prdMaterialized), { recursive: true });
|
|
76
|
-
await importPrdDocument({
|
|
77
|
-
repoRoot,
|
|
78
|
-
taskId,
|
|
79
|
-
filePath: path.join(located.runDir, FRONTEND_REVIEW_FINDINGS_PRD_REL),
|
|
80
|
-
name: "review-findings-prd",
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
return {
|
|
85
|
-
ok: false,
|
|
86
|
-
mode: "blocked",
|
|
87
|
-
reason: `failed to import PRD into task ${taskId}: ${error instanceof Error ? error.message : String(error)}`,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
if (!options.execute) {
|
|
91
|
-
return {
|
|
92
|
-
ok: true,
|
|
93
|
-
mode: "created",
|
|
94
|
-
taskId,
|
|
95
|
-
prdPath: prdMaterialized,
|
|
96
|
-
next: {
|
|
97
|
-
kind: "advance",
|
|
98
|
-
command: `loop-agent task advance ${taskId} --task-kind frontend-implementation --json`,
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
// Execute: advance through the frontend DAG.
|
|
103
|
-
const { advanceTaskLifecycle } = await import("../application/task-lifecycle/advance.js");
|
|
104
|
-
const profile = options.profile === "auto" ||
|
|
105
|
-
options.profile === "minimal" ||
|
|
106
|
-
options.profile === "standard" ||
|
|
107
|
-
options.profile === "reviewed" ||
|
|
108
|
-
options.profile === "supervised"
|
|
109
|
-
? options.profile
|
|
110
|
-
: undefined;
|
|
111
|
-
const result = await advanceTaskLifecycle({
|
|
112
|
-
repoRoot,
|
|
113
|
-
taskId,
|
|
114
|
-
taskKind: "frontend-implementation",
|
|
115
|
-
taskKindExplicit: true,
|
|
116
|
-
...(profile ? { profile, profileExplicit: true } : {}),
|
|
117
|
-
observer: undefined,
|
|
118
|
-
});
|
|
119
|
-
const ok = result.lifecycleState === "run-succeeded" ||
|
|
120
|
-
result.lifecycleState === "awaiting-write-set-approval";
|
|
121
|
-
return {
|
|
122
|
-
ok,
|
|
123
|
-
mode: ok ? "created" : "blocked",
|
|
124
|
-
taskId,
|
|
125
|
-
prdPath: prdMaterialized,
|
|
126
|
-
reason: ok
|
|
127
|
-
? undefined
|
|
128
|
-
: `advance lifecycleState: ${result.lifecycleState}${result.blockers.length > 0
|
|
129
|
-
? `; blockers: ${result.blockers.map((b) => b.code).join(", ")}`
|
|
130
|
-
: ""}`,
|
|
131
|
-
next: ok
|
|
132
|
-
? undefined
|
|
133
|
-
: {
|
|
134
|
-
kind: "advance",
|
|
135
|
-
command: `loop-agent task advance ${taskId} --task-kind frontend-implementation --json`,
|
|
136
|
-
},
|
|
137
|
-
};
|
|
138
|
-
}
|