@matteeh/osq 0.2.1 → 0.2.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/README.md +234 -15
- package/dist/cli/approve.d.ts +7 -0
- package/dist/cli/approve.d.ts.map +1 -1
- package/dist/cli/approve.js +34 -0
- package/dist/cli/approve.js.map +1 -1
- package/dist/cli/bin.js +2 -3
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/check.d.ts +15 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +65 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +10 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +6 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/lint.d.ts +3 -0
- package/dist/cli/lint.d.ts.map +1 -1
- package/dist/cli/lint.js +33 -14
- package/dist/cli/lint.js.map +1 -1
- package/dist/cli/plan-queue.d.ts +10 -4
- package/dist/cli/plan-queue.d.ts.map +1 -1
- package/dist/cli/plan-queue.js +20 -19
- package/dist/cli/plan-queue.js.map +1 -1
- package/dist/cli/plan-sections.d.ts +15 -0
- package/dist/cli/plan-sections.d.ts.map +1 -0
- package/dist/cli/plan-sections.js +47 -0
- package/dist/cli/plan-sections.js.map +1 -0
- package/dist/cli/plan.d.ts +1 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +14 -4
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/report.d.ts.map +1 -1
- package/dist/cli/report.js +73 -1
- package/dist/cli/report.js.map +1 -1
- package/dist/cli/run.d.ts +7 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +22 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/verified.d.ts +15 -0
- package/dist/cli/verified.d.ts.map +1 -0
- package/dist/cli/verified.js +34 -0
- package/dist/cli/verified.js.map +1 -0
- package/dist/core/foundation/config-agents.d.ts +16 -0
- package/dist/core/foundation/config-agents.d.ts.map +1 -0
- package/dist/core/foundation/config-agents.js +2 -0
- package/dist/core/foundation/config-agents.js.map +1 -0
- package/dist/core/foundation/config-claude.d.ts +48 -0
- package/dist/core/foundation/config-claude.d.ts.map +1 -0
- package/dist/core/foundation/config-claude.js +106 -0
- package/dist/core/foundation/config-claude.js.map +1 -0
- package/dist/core/foundation/config-codex-resolve.d.ts +10 -0
- package/dist/core/foundation/config-codex-resolve.d.ts.map +1 -0
- package/dist/core/foundation/config-codex-resolve.js +24 -0
- package/dist/core/foundation/config-codex-resolve.js.map +1 -0
- package/dist/core/foundation/config-file.d.ts +18 -0
- package/dist/core/foundation/config-file.d.ts.map +1 -0
- package/dist/core/foundation/config-file.js +46 -0
- package/dist/core/foundation/config-file.js.map +1 -0
- package/dist/core/foundation/config-gates.d.ts +2 -0
- package/dist/core/foundation/config-gates.d.ts.map +1 -1
- package/dist/core/foundation/config-gates.js +8 -0
- package/dist/core/foundation/config-gates.js.map +1 -1
- package/dist/core/foundation/config-opencode.d.ts +25 -0
- package/dist/core/foundation/config-opencode.d.ts.map +1 -0
- package/dist/core/foundation/config-opencode.js +55 -0
- package/dist/core/foundation/config-opencode.js.map +1 -0
- package/dist/core/foundation/config-pi.d.ts +10 -0
- package/dist/core/foundation/config-pi.d.ts.map +1 -1
- package/dist/core/foundation/config-pi.js +13 -0
- package/dist/core/foundation/config-pi.js.map +1 -1
- package/dist/core/foundation/config-planning.d.ts +12 -1
- package/dist/core/foundation/config-planning.d.ts.map +1 -1
- package/dist/core/foundation/config-planning.js +29 -1
- package/dist/core/foundation/config-planning.js.map +1 -1
- package/dist/core/foundation/config-traceability.d.ts +28 -0
- package/dist/core/foundation/config-traceability.d.ts.map +1 -0
- package/dist/core/foundation/config-traceability.js +63 -0
- package/dist/core/foundation/config-traceability.js.map +1 -0
- package/dist/core/foundation/config-user.d.ts +32 -0
- package/dist/core/foundation/config-user.d.ts.map +1 -0
- package/dist/core/foundation/config-user.js +2 -0
- package/dist/core/foundation/config-user.js.map +1 -0
- package/dist/core/foundation/config-vcs.d.ts +29 -0
- package/dist/core/foundation/config-vcs.d.ts.map +1 -0
- package/dist/core/foundation/config-vcs.js +57 -0
- package/dist/core/foundation/config-vcs.js.map +1 -0
- package/dist/core/foundation/config.d.ts +23 -24
- package/dist/core/foundation/config.d.ts.map +1 -1
- package/dist/core/foundation/config.js +29 -36
- package/dist/core/foundation/config.js.map +1 -1
- package/dist/core/foundation/decisions-validate.d.ts +16 -0
- package/dist/core/foundation/decisions-validate.d.ts.map +1 -0
- package/dist/core/foundation/decisions-validate.js +74 -0
- package/dist/core/foundation/decisions-validate.js.map +1 -0
- package/dist/core/foundation/decisions.d.ts +34 -0
- package/dist/core/foundation/decisions.d.ts.map +1 -0
- package/dist/core/foundation/decisions.js +152 -0
- package/dist/core/foundation/decisions.js.map +1 -0
- package/dist/core/foundation/doctor-decisions.d.ts +9 -0
- package/dist/core/foundation/doctor-decisions.d.ts.map +1 -0
- package/dist/core/foundation/doctor-decisions.js +49 -0
- package/dist/core/foundation/doctor-decisions.js.map +1 -0
- package/dist/core/foundation/doctor-managed.d.ts.map +1 -1
- package/dist/core/foundation/doctor-managed.js +3 -0
- package/dist/core/foundation/doctor-managed.js.map +1 -1
- package/dist/core/foundation/doctor-prices.d.ts +8 -0
- package/dist/core/foundation/doctor-prices.d.ts.map +1 -0
- package/dist/core/foundation/doctor-prices.js +25 -0
- package/dist/core/foundation/doctor-prices.js.map +1 -0
- package/dist/core/foundation/doctor.d.ts.map +1 -1
- package/dist/core/foundation/doctor.js +20 -30
- package/dist/core/foundation/doctor.js.map +1 -1
- package/dist/core/foundation/harness-catalog.d.ts +7 -8
- package/dist/core/foundation/harness-catalog.d.ts.map +1 -1
- package/dist/core/foundation/harness-catalog.js +26 -41
- package/dist/core/foundation/harness-catalog.js.map +1 -1
- package/dist/core/foundation/init-blocks.d.ts +1 -1
- package/dist/core/foundation/init-blocks.d.ts.map +1 -1
- package/dist/core/foundation/init-blocks.js +51 -14
- package/dist/core/foundation/init-blocks.js.map +1 -1
- package/dist/core/foundation/init.d.ts +4 -0
- package/dist/core/foundation/init.d.ts.map +1 -1
- package/dist/core/foundation/init.js +7 -0
- package/dist/core/foundation/init.js.map +1 -1
- package/dist/core/foundation/new.d.ts +4 -1
- package/dist/core/foundation/new.d.ts.map +1 -1
- package/dist/core/foundation/new.js +18 -8
- package/dist/core/foundation/new.js.map +1 -1
- package/dist/core/foundation/package-root.d.ts +6 -0
- package/dist/core/foundation/package-root.d.ts.map +1 -1
- package/dist/core/foundation/package-root.js +6 -0
- package/dist/core/foundation/package-root.js.map +1 -1
- package/dist/core/foundation/rules-block.d.ts +11 -0
- package/dist/core/foundation/rules-block.d.ts.map +1 -0
- package/dist/core/foundation/rules-block.js +90 -0
- package/dist/core/foundation/rules-block.js.map +1 -0
- package/dist/core/foundation/traceability-block.d.ts +13 -0
- package/dist/core/foundation/traceability-block.d.ts.map +1 -0
- package/dist/core/foundation/traceability-block.js +124 -0
- package/dist/core/foundation/traceability-block.js.map +1 -0
- package/dist/core/lifecycle/done.d.ts.map +1 -1
- package/dist/core/lifecycle/done.js +2 -4
- package/dist/core/lifecycle/done.js.map +1 -1
- package/dist/core/lifecycle/recertify.d.ts +9 -0
- package/dist/core/lifecycle/recertify.d.ts.map +1 -0
- package/dist/core/lifecycle/recertify.js +27 -0
- package/dist/core/lifecycle/recertify.js.map +1 -0
- package/dist/core/lifecycle/reject.d.ts.map +1 -1
- package/dist/core/lifecycle/reject.js +3 -4
- package/dist/core/lifecycle/reject.js.map +1 -1
- package/dist/core/lifecycle/retry.d.ts.map +1 -1
- package/dist/core/lifecycle/retry.js +6 -20
- package/dist/core/lifecycle/retry.js.map +1 -1
- package/dist/core/lifecycle/verification-record.d.ts +42 -0
- package/dist/core/lifecycle/verification-record.d.ts.map +1 -0
- package/dist/core/lifecycle/verification-record.js +76 -0
- package/dist/core/lifecycle/verification-record.js.map +1 -0
- package/dist/core/report/approval-flags.d.ts +16 -3
- package/dist/core/report/approval-flags.d.ts.map +1 -1
- package/dist/core/report/approval-flags.js +59 -22
- package/dist/core/report/approval-flags.js.map +1 -1
- package/dist/core/report/brief-to-approval.d.ts +7 -0
- package/dist/core/report/brief-to-approval.d.ts.map +1 -0
- package/dist/core/report/brief-to-approval.js +43 -0
- package/dist/core/report/brief-to-approval.js.map +1 -0
- package/dist/core/report/planning-price-gaps.d.ts +10 -0
- package/dist/core/report/planning-price-gaps.d.ts.map +1 -0
- package/dist/core/report/planning-price-gaps.js +37 -0
- package/dist/core/report/planning-price-gaps.js.map +1 -0
- package/dist/core/report/planning-slice-lookup.d.ts.map +1 -1
- package/dist/core/report/planning-slice-lookup.js +3 -9
- package/dist/core/report/planning-slice-lookup.js.map +1 -1
- package/dist/core/report/recent-disclosures.d.ts +18 -0
- package/dist/core/report/recent-disclosures.d.ts.map +1 -0
- package/dist/core/report/recent-disclosures.js +105 -0
- package/dist/core/report/recent-disclosures.js.map +1 -0
- package/dist/core/report/record-disclosures.d.ts +14 -0
- package/dist/core/report/record-disclosures.d.ts.map +1 -0
- package/dist/core/report/record-disclosures.js +30 -0
- package/dist/core/report/record-disclosures.js.map +1 -0
- package/dist/core/report/record-estimates.d.ts +25 -0
- package/dist/core/report/record-estimates.d.ts.map +1 -0
- package/dist/core/report/record-estimates.js +83 -0
- package/dist/core/report/record-estimates.js.map +1 -0
- package/dist/core/report/record-rework.d.ts +19 -0
- package/dist/core/report/record-rework.d.ts.map +1 -0
- package/dist/core/report/record-rework.js +50 -0
- package/dist/core/report/record-rework.js.map +1 -0
- package/dist/core/report/record-verification.d.ts +16 -0
- package/dist/core/report/record-verification.d.ts.map +1 -0
- package/dist/core/report/record-verification.js +33 -0
- package/dist/core/report/record-verification.js.map +1 -0
- package/dist/core/report/report-dependencies.d.ts +29 -0
- package/dist/core/report/report-dependencies.d.ts.map +1 -0
- package/dist/core/report/report-dependencies.js +92 -0
- package/dist/core/report/report-dependencies.js.map +1 -0
- package/dist/core/report/report-events.d.ts +1 -0
- package/dist/core/report/report-events.d.ts.map +1 -1
- package/dist/core/report/report-events.js +8 -26
- package/dist/core/report/report-events.js.map +1 -1
- package/dist/core/report/report-mutation.d.ts +34 -0
- package/dist/core/report/report-mutation.d.ts.map +1 -0
- package/dist/core/report/report-mutation.js +191 -0
- package/dist/core/report/report-mutation.js.map +1 -0
- package/dist/core/report/report-scope.d.ts +21 -0
- package/dist/core/report/report-scope.d.ts.map +1 -0
- package/dist/core/report/report-scope.js +61 -0
- package/dist/core/report/report-scope.js.map +1 -0
- package/dist/core/report/report-traceability.d.ts +29 -0
- package/dist/core/report/report-traceability.d.ts.map +1 -0
- package/dist/core/report/report-traceability.js +94 -0
- package/dist/core/report/report-traceability.js.map +1 -0
- package/dist/core/report/report.d.ts +35 -1
- package/dist/core/report/report.d.ts.map +1 -1
- package/dist/core/report/report.js +130 -111
- package/dist/core/report/report.js.map +1 -1
- package/dist/core/report/result-sections.d.ts +30 -0
- package/dist/core/report/result-sections.d.ts.map +1 -0
- package/dist/core/report/result-sections.js +125 -0
- package/dist/core/report/result-sections.js.map +1 -0
- package/dist/core/report/scope-size.d.ts +7 -0
- package/dist/core/report/scope-size.d.ts.map +1 -0
- package/dist/core/report/scope-size.js +22 -0
- package/dist/core/report/scope-size.js.map +1 -0
- package/dist/core/run/commit-message.d.ts +24 -0
- package/dist/core/run/commit-message.d.ts.map +1 -0
- package/dist/core/run/commit-message.js +76 -0
- package/dist/core/run/commit-message.js.map +1 -0
- package/dist/core/run/dead-commit.d.ts +10 -0
- package/dist/core/run/dead-commit.d.ts.map +1 -0
- package/dist/core/run/dead-commit.js +70 -0
- package/dist/core/run/dead-commit.js.map +1 -0
- package/dist/core/run/focused-tests.d.ts +43 -0
- package/dist/core/run/focused-tests.d.ts.map +1 -0
- package/dist/core/run/focused-tests.js +116 -0
- package/dist/core/run/focused-tests.js.map +1 -0
- package/dist/core/run/manifest-approval.d.ts +7 -0
- package/dist/core/run/manifest-approval.d.ts.map +1 -0
- package/dist/core/run/manifest-approval.js +30 -0
- package/dist/core/run/manifest-approval.js.map +1 -0
- package/dist/core/run/manifest.d.ts +11 -1
- package/dist/core/run/manifest.d.ts.map +1 -1
- package/dist/core/run/manifest.js +52 -11
- package/dist/core/run/manifest.js.map +1 -1
- package/dist/core/run/mutation-report.d.ts +29 -0
- package/dist/core/run/mutation-report.d.ts.map +1 -0
- package/dist/core/run/mutation-report.js +107 -0
- package/dist/core/run/mutation-report.js.map +1 -0
- package/dist/core/run/mutation-run.d.ts +32 -0
- package/dist/core/run/mutation-run.d.ts.map +1 -0
- package/dist/core/run/mutation-run.js +80 -0
- package/dist/core/run/mutation-run.js.map +1 -0
- package/dist/core/run/verification.d.ts +12 -1
- package/dist/core/run/verification.d.ts.map +1 -1
- package/dist/core/run/verification.js +24 -2
- package/dist/core/run/verification.js.map +1 -1
- package/dist/core/spec/approve-worktree-shared.d.ts +33 -0
- package/dist/core/spec/approve-worktree-shared.d.ts.map +1 -0
- package/dist/core/spec/approve-worktree-shared.js +59 -0
- package/dist/core/spec/approve-worktree-shared.js.map +1 -0
- package/dist/core/spec/approve-worktree.d.ts +21 -0
- package/dist/core/spec/approve-worktree.d.ts.map +1 -0
- package/dist/core/spec/approve-worktree.js +153 -0
- package/dist/core/spec/approve-worktree.js.map +1 -0
- package/dist/core/spec/approve.d.ts +20 -10
- package/dist/core/spec/approve.d.ts.map +1 -1
- package/dist/core/spec/approve.js +57 -54
- package/dist/core/spec/approve.js.map +1 -1
- package/dist/core/spec/capability-impact.d.ts +43 -0
- package/dist/core/spec/capability-impact.d.ts.map +1 -0
- package/dist/core/spec/capability-impact.js +85 -0
- package/dist/core/spec/capability-impact.js.map +1 -0
- package/dist/core/spec/decisions-lint.d.ts +18 -0
- package/dist/core/spec/decisions-lint.d.ts.map +1 -0
- package/dist/core/spec/decisions-lint.js +127 -0
- package/dist/core/spec/decisions-lint.js.map +1 -0
- package/dist/core/spec/delta.d.ts +6 -0
- package/dist/core/spec/delta.d.ts.map +1 -1
- package/dist/core/spec/delta.js +73 -5
- package/dist/core/spec/delta.js.map +1 -1
- package/dist/core/spec/digest-decisions.d.ts +27 -0
- package/dist/core/spec/digest-decisions.d.ts.map +1 -0
- package/dist/core/spec/digest-decisions.js +86 -0
- package/dist/core/spec/digest-decisions.js.map +1 -0
- package/dist/core/spec/digest-format.d.ts +4 -0
- package/dist/core/spec/digest-format.d.ts.map +1 -0
- package/dist/core/spec/digest-format.js +44 -0
- package/dist/core/spec/digest-format.js.map +1 -0
- package/dist/core/spec/digest.d.ts +5 -3
- package/dist/core/spec/digest.d.ts.map +1 -1
- package/dist/core/spec/digest.js +14 -33
- package/dist/core/spec/digest.js.map +1 -1
- package/dist/core/spec/human-steps.d.ts +20 -0
- package/dist/core/spec/human-steps.d.ts.map +1 -0
- package/dist/core/spec/human-steps.js +52 -0
- package/dist/core/spec/human-steps.js.map +1 -0
- package/dist/core/spec/impact-lint.d.ts +24 -0
- package/dist/core/spec/impact-lint.d.ts.map +1 -0
- package/dist/core/spec/impact-lint.js +39 -0
- package/dist/core/spec/impact-lint.js.map +1 -0
- package/dist/core/spec/import-graph.d.ts +35 -0
- package/dist/core/spec/import-graph.d.ts.map +1 -0
- package/dist/core/spec/import-graph.js +155 -0
- package/dist/core/spec/import-graph.js.map +1 -0
- package/dist/core/spec/lint-findings.d.ts +44 -0
- package/dist/core/spec/lint-findings.d.ts.map +1 -0
- package/dist/core/spec/lint-findings.js +56 -0
- package/dist/core/spec/lint-findings.js.map +1 -0
- package/dist/core/spec/lint-output.d.ts +53 -0
- package/dist/core/spec/lint-output.d.ts.map +1 -0
- package/dist/core/spec/lint-output.js +87 -0
- package/dist/core/spec/lint-output.js.map +1 -0
- package/dist/core/spec/linter.d.ts +14 -4
- package/dist/core/spec/linter.d.ts.map +1 -1
- package/dist/core/spec/linter.js +271 -111
- package/dist/core/spec/linter.js.map +1 -1
- package/dist/core/spec/merged-spec-check.d.ts +24 -0
- package/dist/core/spec/merged-spec-check.d.ts.map +1 -0
- package/dist/core/spec/merged-spec-check.js +95 -0
- package/dist/core/spec/merged-spec-check.js.map +1 -0
- package/dist/core/spec/openspec-issues.d.ts +58 -0
- package/dist/core/spec/openspec-issues.d.ts.map +1 -0
- package/dist/core/spec/openspec-issues.js +166 -0
- package/dist/core/spec/openspec-issues.js.map +1 -0
- package/dist/core/spec/parser.d.ts +1 -0
- package/dist/core/spec/parser.d.ts.map +1 -1
- package/dist/core/spec/parser.js +16 -6
- package/dist/core/spec/parser.js.map +1 -1
- package/dist/core/spec/scenario-impact.d.ts +47 -0
- package/dist/core/spec/scenario-impact.d.ts.map +1 -0
- package/dist/core/spec/scenario-impact.js +130 -0
- package/dist/core/spec/scenario-impact.js.map +1 -0
- package/dist/core/spec/test-impact.d.ts +28 -0
- package/dist/core/spec/test-impact.d.ts.map +1 -0
- package/dist/core/spec/test-impact.js +119 -0
- package/dist/core/spec/test-impact.js.map +1 -0
- package/dist/core/spec/traceability-links.d.ts +50 -0
- package/dist/core/spec/traceability-links.d.ts.map +1 -0
- package/dist/core/spec/traceability-links.js +120 -0
- package/dist/core/spec/traceability-links.js.map +1 -0
- package/dist/core/spec/traceability-lint.d.ts +29 -0
- package/dist/core/spec/traceability-lint.d.ts.map +1 -0
- package/dist/core/spec/traceability-lint.js +143 -0
- package/dist/core/spec/traceability-lint.js.map +1 -0
- package/dist/core/status/blocked-item.d.ts +8 -0
- package/dist/core/status/blocked-item.d.ts.map +1 -0
- package/dist/core/status/blocked-item.js +45 -0
- package/dist/core/status/blocked-item.js.map +1 -0
- package/dist/core/status/change-locations.d.ts +44 -0
- package/dist/core/status/change-locations.d.ts.map +1 -0
- package/dist/core/status/change-locations.js +138 -0
- package/dist/core/status/change-locations.js.map +1 -0
- package/dist/core/status/dependency-readiness.d.ts +11 -0
- package/dist/core/status/dependency-readiness.d.ts.map +1 -0
- package/dist/core/status/dependency-readiness.js +39 -0
- package/dist/core/status/dependency-readiness.js.map +1 -0
- package/dist/core/status/inbox-projection.d.ts.map +1 -1
- package/dist/core/status/inbox-projection.js +23 -4
- package/dist/core/status/inbox-projection.js.map +1 -1
- package/dist/core/status/inbox-text.d.ts.map +1 -1
- package/dist/core/status/inbox-text.js +34 -3
- package/dist/core/status/inbox-text.js.map +1 -1
- package/dist/core/status/inbox.d.ts +10 -1
- package/dist/core/status/inbox.d.ts.map +1 -1
- package/dist/core/status/inbox.js +19 -1
- package/dist/core/status/inbox.js.map +1 -1
- package/dist/core/status/layout.d.ts +6 -0
- package/dist/core/status/layout.d.ts.map +1 -1
- package/dist/core/status/layout.js +8 -0
- package/dist/core/status/layout.js.map +1 -1
- package/dist/core/status/next-step.d.ts +17 -0
- package/dist/core/status/next-step.d.ts.map +1 -0
- package/dist/core/status/next-step.js +85 -0
- package/dist/core/status/next-step.js.map +1 -0
- package/dist/core/status/pre-spawn-words.d.ts +13 -0
- package/dist/core/status/pre-spawn-words.d.ts.map +1 -0
- package/dist/core/status/pre-spawn-words.js +26 -0
- package/dist/core/status/pre-spawn-words.js.map +1 -0
- package/dist/core/status/queue-parser.d.ts +1 -0
- package/dist/core/status/queue-parser.d.ts.map +1 -1
- package/dist/core/status/queue-parser.js +41 -2
- package/dist/core/status/queue-parser.js.map +1 -1
- package/dist/core/status/queue-planning.d.ts +1 -0
- package/dist/core/status/queue-planning.d.ts.map +1 -1
- package/dist/core/status/queue-planning.js +24 -12
- package/dist/core/status/queue-planning.js.map +1 -1
- package/dist/core/status/queue-report-detail.d.ts.map +1 -1
- package/dist/core/status/queue-report-detail.js +5 -3
- package/dist/core/status/queue-report-detail.js.map +1 -1
- package/dist/core/status/queue-state.d.ts +1 -1
- package/dist/core/status/queue-state.d.ts.map +1 -1
- package/dist/core/status/queue-state.js +27 -41
- package/dist/core/status/queue-state.js.map +1 -1
- package/dist/core/status/show.d.ts +25 -0
- package/dist/core/status/show.d.ts.map +1 -1
- package/dist/core/status/show.js +354 -91
- package/dist/core/status/show.js.map +1 -1
- package/dist/core/status/state.d.ts.map +1 -1
- package/dist/core/status/state.js +1 -23
- package/dist/core/status/state.js.map +1 -1
- package/dist/core/status/status.d.ts +18 -0
- package/dist/core/status/status.d.ts.map +1 -1
- package/dist/core/status/status.js +59 -80
- package/dist/core/status/status.js.map +1 -1
- package/dist/core/status/verification.d.ts +27 -0
- package/dist/core/status/verification.d.ts.map +1 -0
- package/dist/core/status/verification.js +111 -0
- package/dist/core/status/verification.js.map +1 -0
- package/dist/core/trace/function-ranges.d.ts +30 -0
- package/dist/core/trace/function-ranges.d.ts.map +1 -0
- package/dist/core/trace/function-ranges.js +250 -0
- package/dist/core/trace/function-ranges.js.map +1 -0
- package/dist/core/trace/mutation-pick.d.ts +55 -0
- package/dist/core/trace/mutation-pick.d.ts.map +1 -0
- package/dist/core/trace/mutation-pick.js +96 -0
- package/dist/core/trace/mutation-pick.js.map +1 -0
- package/dist/core/trace/scenario-index.d.ts +27 -0
- package/dist/core/trace/scenario-index.d.ts.map +1 -0
- package/dist/core/trace/scenario-index.js +76 -0
- package/dist/core/trace/scenario-index.js.map +1 -0
- package/dist/core/trace/scenario-lookup.d.ts +14 -0
- package/dist/core/trace/scenario-lookup.d.ts.map +1 -0
- package/dist/core/trace/scenario-lookup.js +179 -0
- package/dist/core/trace/scenario-lookup.js.map +1 -0
- package/dist/core/trace/tag-scan.d.ts +44 -0
- package/dist/core/trace/tag-scan.d.ts.map +1 -0
- package/dist/core/trace/tag-scan.js +200 -0
- package/dist/core/trace/tag-scan.js.map +1 -0
- package/dist/core/vcs/doctor-git.d.ts +13 -0
- package/dist/core/vcs/doctor-git.d.ts.map +1 -0
- package/dist/core/vcs/doctor-git.js +114 -0
- package/dist/core/vcs/doctor-git.js.map +1 -0
- package/dist/core/vcs/git-vcs-write.d.ts +47 -0
- package/dist/core/vcs/git-vcs-write.d.ts.map +1 -0
- package/dist/core/vcs/git-vcs-write.js +210 -0
- package/dist/core/vcs/git-vcs-write.js.map +1 -0
- package/dist/core/vcs/git-vcs.d.ts +40 -0
- package/dist/core/vcs/git-vcs.d.ts.map +1 -0
- package/dist/core/vcs/git-vcs.js +170 -0
- package/dist/core/vcs/git-vcs.js.map +1 -0
- package/dist/core/vcs/no-vcs.d.ts +26 -0
- package/dist/core/vcs/no-vcs.d.ts.map +1 -0
- package/dist/core/vcs/no-vcs.js +62 -0
- package/dist/core/vcs/no-vcs.js.map +1 -0
- package/dist/core/vcs/select.d.ts +11 -0
- package/dist/core/vcs/select.d.ts.map +1 -0
- package/dist/core/vcs/select.js +33 -0
- package/dist/core/vcs/select.js.map +1 -0
- package/dist/core/vcs/snapshot.d.ts +34 -0
- package/dist/core/vcs/snapshot.d.ts.map +1 -0
- package/dist/core/vcs/snapshot.js +71 -0
- package/dist/core/vcs/snapshot.js.map +1 -0
- package/dist/core/vcs/vcs.d.ts +55 -0
- package/dist/core/vcs/vcs.d.ts.map +1 -0
- package/dist/core/vcs/vcs.js +2 -0
- package/dist/core/vcs/vcs.js.map +1 -0
- package/dist/core/vcs/worktree.d.ts +10 -0
- package/dist/core/vcs/worktree.d.ts.map +1 -0
- package/dist/core/vcs/worktree.js +25 -0
- package/dist/core/vcs/worktree.js.map +1 -0
- package/dist/core/web/web-data-folders.d.ts.map +1 -1
- package/dist/core/web/web-data-folders.js +18 -33
- package/dist/core/web/web-data-folders.js.map +1 -1
- package/dist/core/web/web-data-lifecycle.d.ts.map +1 -1
- package/dist/core/web/web-data-lifecycle.js +2 -1
- package/dist/core/web/web-data-lifecycle.js.map +1 -1
- package/dist/core/web/web-events.d.ts +8 -6
- package/dist/core/web/web-events.d.ts.map +1 -1
- package/dist/core/web/web-events.js +7 -31
- package/dist/core/web/web-events.js.map +1 -1
- package/dist/core/web/web-server.d.ts.map +1 -1
- package/dist/core/web/web-server.js +3 -0
- package/dist/core/web/web-server.js.map +1 -1
- package/dist/core/web/web-trees.d.ts +27 -0
- package/dist/core/web/web-trees.d.ts.map +1 -0
- package/dist/core/web/web-trees.js +82 -0
- package/dist/core/web/web-trees.js.map +1 -0
- package/dist/harness/claude/claude-exec-args.d.ts +13 -0
- package/dist/harness/claude/claude-exec-args.d.ts.map +1 -0
- package/dist/harness/claude/claude-exec-args.js +61 -0
- package/dist/harness/claude/claude-exec-args.js.map +1 -0
- package/dist/harness/claude/claude-exec.d.ts +12 -0
- package/dist/harness/claude/claude-exec.d.ts.map +1 -0
- package/dist/harness/claude/claude-exec.js +79 -0
- package/dist/harness/claude/claude-exec.js.map +1 -0
- package/dist/harness/claude/claude-stream.d.ts +31 -0
- package/dist/harness/claude/claude-stream.d.ts.map +1 -0
- package/dist/harness/claude/claude-stream.js +150 -0
- package/dist/harness/claude/claude-stream.js.map +1 -0
- package/dist/harness/claude/claude-tools.d.ts +5 -0
- package/dist/harness/claude/claude-tools.d.ts.map +1 -0
- package/dist/harness/claude/claude-tools.js +30 -0
- package/dist/harness/claude/claude-tools.js.map +1 -0
- package/dist/harness/index.d.ts +1 -0
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +3 -0
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/opencode/opencode-session.d.ts +42 -0
- package/dist/harness/opencode/opencode-session.d.ts.map +1 -0
- package/dist/harness/opencode/opencode-session.js +123 -0
- package/dist/harness/opencode/opencode-session.js.map +1 -0
- package/dist/harness/opencode/opencode.d.ts +2 -1
- package/dist/harness/opencode/opencode.d.ts.map +1 -1
- package/dist/harness/opencode/opencode.js +52 -28
- package/dist/harness/opencode/opencode.js.map +1 -1
- package/dist/harness/prompt.js +1 -1
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/types.d.ts +112 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/scenario.d.ts +29 -0
- package/dist/testing/scenario.d.ts.map +1 -0
- package/dist/testing/scenario.js +157 -0
- package/dist/testing/scenario.js.map +1 -0
- package/dist/watcher/archiver.d.ts +2 -1
- package/dist/watcher/archiver.d.ts.map +1 -1
- package/dist/watcher/archiver.js +27 -2
- package/dist/watcher/archiver.js.map +1 -1
- package/dist/watcher/auto-recertify.d.ts +27 -0
- package/dist/watcher/auto-recertify.d.ts.map +1 -0
- package/dist/watcher/auto-recertify.js +113 -0
- package/dist/watcher/auto-recertify.js.map +1 -0
- package/dist/watcher/auto-retry.d.ts +1 -1
- package/dist/watcher/auto-retry.d.ts.map +1 -1
- package/dist/watcher/auto-retry.js +3 -11
- package/dist/watcher/auto-retry.js.map +1 -1
- package/dist/watcher/baseline-key.d.ts +17 -0
- package/dist/watcher/baseline-key.d.ts.map +1 -0
- package/dist/watcher/baseline-key.js +31 -0
- package/dist/watcher/baseline-key.js.map +1 -0
- package/dist/watcher/baseline.d.ts +32 -0
- package/dist/watcher/baseline.d.ts.map +1 -0
- package/dist/watcher/baseline.js +166 -0
- package/dist/watcher/baseline.js.map +1 -0
- package/dist/watcher/blocked.d.ts +12 -0
- package/dist/watcher/blocked.d.ts.map +1 -0
- package/dist/watcher/blocked.js +24 -0
- package/dist/watcher/blocked.js.map +1 -0
- package/dist/watcher/dependencies.d.ts +28 -0
- package/dist/watcher/dependencies.d.ts.map +1 -0
- package/dist/watcher/dependencies.js +152 -0
- package/dist/watcher/dependencies.js.map +1 -0
- package/dist/watcher/done-metadata.d.ts +4 -0
- package/dist/watcher/done-metadata.d.ts.map +1 -0
- package/dist/watcher/done-metadata.js +20 -0
- package/dist/watcher/done-metadata.js.map +1 -0
- package/dist/watcher/failure-reason.d.ts +1 -1
- package/dist/watcher/failure-reason.d.ts.map +1 -1
- package/dist/watcher/focused-verify.d.ts +17 -0
- package/dist/watcher/focused-verify.d.ts.map +1 -0
- package/dist/watcher/focused-verify.js +54 -0
- package/dist/watcher/focused-verify.js.map +1 -0
- package/dist/watcher/git-guard.d.ts +24 -0
- package/dist/watcher/git-guard.d.ts.map +1 -0
- package/dist/watcher/git-guard.js +95 -0
- package/dist/watcher/git-guard.js.map +1 -0
- package/dist/watcher/instructions-drift.d.ts +21 -0
- package/dist/watcher/instructions-drift.d.ts.map +1 -0
- package/dist/watcher/instructions-drift.js +115 -0
- package/dist/watcher/instructions-drift.js.map +1 -0
- package/dist/watcher/loop.d.ts.map +1 -1
- package/dist/watcher/loop.js +36 -50
- package/dist/watcher/loop.js.map +1 -1
- package/dist/watcher/measures.d.ts.map +1 -1
- package/dist/watcher/measures.js +22 -39
- package/dist/watcher/measures.js.map +1 -1
- package/dist/watcher/mutation-check.d.ts +42 -0
- package/dist/watcher/mutation-check.d.ts.map +1 -0
- package/dist/watcher/mutation-check.js +147 -0
- package/dist/watcher/mutation-check.js.map +1 -0
- package/dist/watcher/regression.d.ts +10 -5
- package/dist/watcher/regression.d.ts.map +1 -1
- package/dist/watcher/regression.js +29 -22
- package/dist/watcher/regression.js.map +1 -1
- package/dist/watcher/runner.d.ts.map +1 -1
- package/dist/watcher/runner.js +12 -14
- package/dist/watcher/runner.js.map +1 -1
- package/dist/watcher/spawn.d.ts.map +1 -1
- package/dist/watcher/spawn.js +5 -0
- package/dist/watcher/spawn.js.map +1 -1
- package/dist/watcher/task-verify.d.ts +7 -2
- package/dist/watcher/task-verify.d.ts.map +1 -1
- package/dist/watcher/task-verify.js +33 -8
- package/dist/watcher/task-verify.js.map +1 -1
- package/dist/watcher/verify.d.ts +1 -5
- package/dist/watcher/verify.d.ts.map +1 -1
- package/dist/watcher/verify.js +2 -6
- package/dist/watcher/verify.js.map +1 -1
- package/package.json +5 -1
- package/templates/PLANNER.md +35 -9
- package/templates/openspec/config.yaml +1 -1
- package/templates/openspec/schemas/osq/schema.yaml +4 -2
- package/templates/openspec/schemas/osq/templates/proposal.md +9 -2
- package/templates/proposal.md +9 -2
- package/ui/dist/assets/{index-CZYeQ8la.js → index-D39uYbbL.js} +1 -1
- package/ui/dist/index.html +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import YAML from 'yaml';
|
|
4
|
+
import { SCOPE_RESOLVER_VERSION } from '../run/scope.js';
|
|
5
|
+
import { parseFrontmatter } from '../spec/parser.js';
|
|
6
|
+
/**
|
|
7
|
+
* Refresh a canonical done marker in place after a passing recertification.
|
|
8
|
+
* Every existing field is kept, the first trusted hash is retained as
|
|
9
|
+
* `original_scope_hash`, the current resolver-2 hashes and timestamp are
|
|
10
|
+
* recorded, and `recertification_count` increments.
|
|
11
|
+
*/
|
|
12
|
+
export async function refreshRecertifiedDoneMarker(runDir, taskNumber, recordedHash, current) {
|
|
13
|
+
const { data, body } = parseFrontmatter(await fs.readFile(path.join(runDir, 'done', taskNumber), 'utf8'));
|
|
14
|
+
const merged = { ...data };
|
|
15
|
+
if (typeof merged.original_scope_hash !== 'string' || !merged.original_scope_hash) {
|
|
16
|
+
merged.original_scope_hash = recordedHash;
|
|
17
|
+
}
|
|
18
|
+
merged.scope_hash = current.hash;
|
|
19
|
+
merged.scope_files = current.fileHashes;
|
|
20
|
+
merged.scope_resolver = SCOPE_RESOLVER_VERSION;
|
|
21
|
+
merged.recertified_at = new Date().toISOString();
|
|
22
|
+
const count = data.recertification_count;
|
|
23
|
+
merged.recertification_count =
|
|
24
|
+
(typeof count === 'number' && Number.isInteger(count) && count > 0 ? count : 0) + 1;
|
|
25
|
+
await fs.writeFile(path.join(runDir, 'done', taskNumber), `---\n${YAML.stringify(merged)}---\n${body}`, 'utf8');
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=recertify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recertify.js","sourceRoot":"","sources":["../../../src/core/lifecycle/recertify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAc,EACd,UAAkB,EAClB,YAAoB,EACpB,OAAwB;IAExB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,gBAAgB,CACrC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CACjE,CAAC;IACF,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;IACpD,IAAI,OAAO,MAAM,CAAC,mBAAmB,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAClF,MAAM,CAAC,mBAAmB,GAAG,YAAY,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IACjC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IACxC,MAAM,CAAC,cAAc,GAAG,sBAAsB,CAAC;IAC/C,MAAM,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC;IACzC,MAAM,CAAC,qBAAqB;QAC1B,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EACrC,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAC5C,MAAM,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/reject.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAyCD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"reject.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/reject.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAyCD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,YAAY,CAAC,CAoDvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import {
|
|
4
|
-
import { getChangeRunDir,
|
|
3
|
+
import { findChange } from '../status/change-locations.js';
|
|
4
|
+
import { getChangeRunDir, getRejectedDir } from '../status/layout.js';
|
|
5
5
|
import { deriveSpecState, readChangeFolder } from '../status/state.js';
|
|
6
6
|
async function pathExists(target) {
|
|
7
7
|
return fs.stat(target).then(() => true, () => false);
|
|
@@ -43,8 +43,7 @@ export async function rejectSpec(projectRoot, specIdOrPrefix, reason, config) {
|
|
|
43
43
|
}
|
|
44
44
|
// Resolve only beneath the active changes directory. Archived and rejected
|
|
45
45
|
// folders live elsewhere and therefore never match.
|
|
46
|
-
const
|
|
47
|
-
const sourcePath = await findSpecFolder(specsDir, specIdOrPrefix);
|
|
46
|
+
const { folderPath: sourcePath } = await findChange(projectRoot, config, specIdOrPrefix);
|
|
48
47
|
const folderName = path.basename(sourcePath);
|
|
49
48
|
const specId = folderName.match(/^(\d+)/)?.[1] ?? folderName;
|
|
50
49
|
const rejectedDir = getRejectedDir(config.paths.openspecRoot, projectRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject.js","sourceRoot":"","sources":["../../../src/core/lifecycle/reject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"reject.js","sourceRoot":"","sources":["../../../src/core/lifecycle/reject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/retry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/retry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAsBzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAClD;AAED,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAkCD,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAmJtB"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import YAML from 'yaml';
|
|
4
3
|
import { computeTaskScopeHash, readDoneMarker, } from '../run/scope-hash.js';
|
|
5
|
-
import { SCOPE_RESOLVER_VERSION } from '../run/scope.js';
|
|
6
4
|
import { runVerificationCommand } from '../run/verification.js';
|
|
7
|
-
import { findSpecFolder } from '../spec/approve.js';
|
|
8
5
|
import { hashChangeFolder } from '../spec/hasher.js';
|
|
9
6
|
import { parseFrontmatter, parseTaskMd } from '../spec/parser.js';
|
|
10
|
-
import {
|
|
7
|
+
import { findChange } from '../status/change-locations.js';
|
|
8
|
+
import { getChangeRunDir } from '../status/layout.js';
|
|
9
|
+
import { refreshRecertifiedDoneMarker } from './recertify.js';
|
|
11
10
|
import { appendTargetEvent, retainFailureMarkers } from './retry-transition.js';
|
|
12
11
|
// Retry renames active failure markers into attempt-suffixed history; a numeric
|
|
13
12
|
// scope regression with an automated done marker is recertified by re-running
|
|
@@ -47,8 +46,7 @@ export async function retrySpec(projectRoot, specIdOrPrefix, target, config, opt
|
|
|
47
46
|
if (rawTarget !== CHANGE_TARGET && !NUMERIC_TARGET.test(rawTarget)) {
|
|
48
47
|
throw new Error(`Invalid retry target "${target}": expected a numeric task or "change".`);
|
|
49
48
|
}
|
|
50
|
-
const
|
|
51
|
-
const folderPath = await findSpecFolder(specsDir, specIdOrPrefix);
|
|
49
|
+
const { folderPath } = await findChange(projectRoot, config, specIdOrPrefix);
|
|
52
50
|
const folderName = path.basename(folderPath);
|
|
53
51
|
const specId = folderName.match(/^(\d+)/)?.[1] ?? folderName;
|
|
54
52
|
const runDir = getChangeRunDir(folderPath);
|
|
@@ -110,7 +108,7 @@ export async function retrySpec(projectRoot, specIdOrPrefix, target, config, opt
|
|
|
110
108
|
.split('\n')
|
|
111
109
|
.filter((line) => line.startsWith('- '))
|
|
112
110
|
.map((line) => line.slice(2).trim());
|
|
113
|
-
const gate = await runVerificationCommand(projectRoot, taskData.verify, config.timeouts.verifyTimeoutSeconds);
|
|
111
|
+
const gate = await runVerificationCommand(projectRoot, taskData.verify, config.timeouts.verifyTimeoutSeconds, folderPath);
|
|
114
112
|
const current = await computeTaskScopeHash(projectRoot, taskData.scope);
|
|
115
113
|
recertification = gate.exitCode === 0 && !gate.error ? 'passed' : 'requeued';
|
|
116
114
|
recertificationEvent = {
|
|
@@ -127,19 +125,7 @@ export async function retrySpec(projectRoot, specIdOrPrefix, target, config, opt
|
|
|
127
125
|
...(recertification === 'passed' ? {} : { attempt: ordinal + 1, reason: SCOPE_REGRESSION }),
|
|
128
126
|
};
|
|
129
127
|
if (recertification === 'passed') {
|
|
130
|
-
|
|
131
|
-
const merged = { ...data };
|
|
132
|
-
if (typeof merged.original_scope_hash !== 'string' || !merged.original_scope_hash) {
|
|
133
|
-
merged.original_scope_hash = done.scopeHash;
|
|
134
|
-
}
|
|
135
|
-
merged.scope_hash = current.hash;
|
|
136
|
-
merged.scope_files = current.fileHashes;
|
|
137
|
-
merged.scope_resolver = SCOPE_RESOLVER_VERSION;
|
|
138
|
-
merged.recertified_at = new Date().toISOString();
|
|
139
|
-
const count = data.recertification_count;
|
|
140
|
-
merged.recertification_count =
|
|
141
|
-
(typeof count === 'number' && Number.isInteger(count) && count > 0 ? count : 0) + 1;
|
|
142
|
-
await fs.writeFile(path.join(runDir, 'done', rawTarget), `---\n${YAML.stringify(merged)}---\n${body}`, 'utf8');
|
|
128
|
+
await refreshRecertifiedDoneMarker(runDir, rawTarget, done.scopeHash, current);
|
|
143
129
|
}
|
|
144
130
|
}
|
|
145
131
|
const retainedMarkers = await retainFailureMarkers({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/core/lifecycle/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/core/lifecycle/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { OsqConfig } from '../foundation/config.js';
|
|
2
|
+
import { type VerificationResult } from '../run/verification.js';
|
|
3
|
+
import { type VerificationOutcome } from '../status/verification.js';
|
|
4
|
+
/**
|
|
5
|
+
* Human verification records for archived changes. Like the `rejected` event,
|
|
6
|
+
* the `check_ran` and `verification_recorded` events are appended directly to
|
|
7
|
+
* the change-level stream so `src/core` stays free of cross-tier imports.
|
|
8
|
+
*/
|
|
9
|
+
/** Data of one `check_ran` event recorded for an archived change. */
|
|
10
|
+
export interface CheckRanEventData {
|
|
11
|
+
readonly command: string;
|
|
12
|
+
readonly exitCode: number;
|
|
13
|
+
readonly duration: number;
|
|
14
|
+
readonly timedOut: boolean;
|
|
15
|
+
readonly output: string;
|
|
16
|
+
}
|
|
17
|
+
/** Data of one human `verification_recorded` event. */
|
|
18
|
+
export interface VerificationRecordedEventData {
|
|
19
|
+
readonly outcome: VerificationOutcome;
|
|
20
|
+
readonly note: string | null;
|
|
21
|
+
}
|
|
22
|
+
/** The archived change a verification event was appended to. */
|
|
23
|
+
export interface VerificationTarget {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly folderName: string;
|
|
26
|
+
readonly folderPath: string;
|
|
27
|
+
}
|
|
28
|
+
/** Result of running an archived change's recorded `check` command. */
|
|
29
|
+
export interface CheckRunResult extends VerificationTarget {
|
|
30
|
+
readonly check: VerificationResult;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Record one human verification outcome for an archived change that requires
|
|
34
|
+
* verification. Exactly one `verification_recorded` event is appended.
|
|
35
|
+
*/
|
|
36
|
+
export declare function recordVerification(projectRoot: string, id: string, outcome: VerificationOutcome, note: string | null, config: OsqConfig): Promise<VerificationTarget>;
|
|
37
|
+
/**
|
|
38
|
+
* Run an archived change's recorded `check` command from the project root
|
|
39
|
+
* under the verify timeout and append exactly one `check_ran` event.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runCheck(projectRoot: string, id: string, config: OsqConfig): Promise<CheckRunResult>;
|
|
42
|
+
//# sourceMappingURL=verification-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-record.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/verification-record.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAA0B,MAAM,wBAAwB,CAAC;AAEzF,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AAEH,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,uDAAuD;AACvD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;CACpC;AA6CD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAS7B;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,cAAc,CAAC,CA6BzB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { runVerificationCommand } from '../run/verification.js';
|
|
4
|
+
import { resolveSpecFolder } from '../status/show.js';
|
|
5
|
+
import { readVerification, } from '../status/verification.js';
|
|
6
|
+
function changeId(folderPath) {
|
|
7
|
+
const name = path.basename(folderPath);
|
|
8
|
+
return name.match(/^(\d+)/)?.[1] ?? name;
|
|
9
|
+
}
|
|
10
|
+
/** Append one typed change-level event, mirroring `appendRejectedEvent`. */
|
|
11
|
+
async function appendChangeEvent(folderPath, type, data) {
|
|
12
|
+
const eventsDir = path.join(folderPath, '.run', 'events');
|
|
13
|
+
await fs.mkdir(eventsDir, { recursive: true });
|
|
14
|
+
const event = { type, timestamp: new Date().toISOString(), data };
|
|
15
|
+
await fs.appendFile(path.join(eventsDir, 'change.jsonl'), `${JSON.stringify(event)}\n`, 'utf8');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve an archived change that records a verification requirement, or
|
|
19
|
+
* throw before any append. A non-archived change and an archived change with
|
|
20
|
+
* no recorded requirement are both refused.
|
|
21
|
+
*/
|
|
22
|
+
async function resolvePending(projectRoot, id, config) {
|
|
23
|
+
const { folderPath, location } = await resolveSpecFolder(projectRoot, id, config);
|
|
24
|
+
const folderName = path.basename(folderPath);
|
|
25
|
+
if (location !== 'archived') {
|
|
26
|
+
throw new Error(`Change ${folderName} is not archived; verification applies only to archived changes.`);
|
|
27
|
+
}
|
|
28
|
+
const verification = await readVerification(folderPath);
|
|
29
|
+
if (!verification.required) {
|
|
30
|
+
throw new Error(`Change ${folderName} does not require after-landing verification.`);
|
|
31
|
+
}
|
|
32
|
+
return { id: changeId(folderPath), folderName, folderPath, verification };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Record one human verification outcome for an archived change that requires
|
|
36
|
+
* verification. Exactly one `verification_recorded` event is appended.
|
|
37
|
+
*/
|
|
38
|
+
export async function recordVerification(projectRoot, id, outcome, note, config) {
|
|
39
|
+
const target = await resolvePending(projectRoot, id, config);
|
|
40
|
+
const trimmedNote = (note ?? '').trim();
|
|
41
|
+
const data = {
|
|
42
|
+
outcome,
|
|
43
|
+
note: trimmedNote === '' ? null : trimmedNote,
|
|
44
|
+
};
|
|
45
|
+
await appendChangeEvent(target.folderPath, 'verification_recorded', data);
|
|
46
|
+
return { id: target.id, folderName: target.folderName, folderPath: target.folderPath };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run an archived change's recorded `check` command from the project root
|
|
50
|
+
* under the verify timeout and append exactly one `check_ran` event.
|
|
51
|
+
*/
|
|
52
|
+
export async function runCheck(projectRoot, id, config) {
|
|
53
|
+
const target = await resolvePending(projectRoot, id, config);
|
|
54
|
+
const check = target.verification.check;
|
|
55
|
+
if (check === null) {
|
|
56
|
+
throw new Error(`Change ${target.folderName} has no recorded check command.`);
|
|
57
|
+
}
|
|
58
|
+
// An archived change's check runs with no OSQ_CHANGE: its deltas are already
|
|
59
|
+
// in the living spec, so the command should not resolve against the change.
|
|
60
|
+
const result = await runVerificationCommand(projectRoot, check, config.timeouts.verifyTimeoutSeconds, null);
|
|
61
|
+
const data = {
|
|
62
|
+
command: result.command,
|
|
63
|
+
exitCode: result.exitCode,
|
|
64
|
+
duration: result.duration,
|
|
65
|
+
timedOut: result.timedOut,
|
|
66
|
+
output: result.output,
|
|
67
|
+
};
|
|
68
|
+
await appendChangeEvent(target.folderPath, 'check_ran', data);
|
|
69
|
+
return {
|
|
70
|
+
id: target.id,
|
|
71
|
+
folderName: target.folderName,
|
|
72
|
+
folderPath: target.folderPath,
|
|
73
|
+
check: result,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=verification-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-record.js","sourceRoot":"","sources":["../../../src/core/lifecycle/verification-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ReworkEntry } from './record-rework.js';
|
|
1
2
|
/** The key used for changes whose recorded flag ids are empty. */
|
|
2
3
|
export declare const NO_APPROVAL_FLAGS = "none";
|
|
3
4
|
/** Every reported key, never recomputed: the flag ids then `none`. */
|
|
@@ -12,18 +13,30 @@ export interface ApprovalFlagOutcome {
|
|
|
12
13
|
readonly shown: ApprovalFlagModeOutcome;
|
|
13
14
|
readonly confirmed: ApprovalFlagModeOutcome;
|
|
14
15
|
}
|
|
16
|
+
/** Later trouble of one change, in the fixed `dead`, `regressed`, `rework` order. */
|
|
17
|
+
export type TroubleKind = 'dead' | 'regressed' | 'rework';
|
|
18
|
+
/** One change that recorded flags and later had trouble. */
|
|
19
|
+
export interface TroubledChange {
|
|
20
|
+
readonly change: string;
|
|
21
|
+
readonly flags: readonly string[];
|
|
22
|
+
readonly kinds: readonly TroubleKind[];
|
|
23
|
+
/** Sorted ids of later active/archived changes naming it in `fixes`. */
|
|
24
|
+
readonly fixedBy: readonly string[];
|
|
25
|
+
}
|
|
15
26
|
/** Per-key outcomes plus the number of changes that recorded flags. */
|
|
16
27
|
export interface ApprovalFlagOutcomes {
|
|
17
28
|
readonly changes: number;
|
|
18
29
|
readonly byFlag: Record<string, ApprovalFlagOutcome>;
|
|
30
|
+
readonly troubledChanges: readonly TroubledChange[];
|
|
19
31
|
}
|
|
20
32
|
/**
|
|
21
33
|
* Reads recorded `approvalFlags` from every given change folder's manifest and
|
|
22
34
|
* counts, per key and mode, how many changes fired it and how many later had
|
|
23
|
-
* trouble.
|
|
24
|
-
*
|
|
35
|
+
* trouble. Later trouble is a task `dead`, any `regressed` event, or a later
|
|
36
|
+
* change naming it in `fixes`. Folders without a valid recorded field
|
|
37
|
+
* contribute nothing; flags are never recomputed from the authored change.
|
|
25
38
|
*/
|
|
26
|
-
export declare function collectApprovalFlagOutcomes(folders: readonly string[]): Promise<ApprovalFlagOutcomes>;
|
|
39
|
+
export declare function collectApprovalFlagOutcomes(folders: readonly string[], rework: readonly ReworkEntry[]): Promise<ApprovalFlagOutcomes>;
|
|
27
40
|
/** Render the `Approval flags:` body, one line per key in fixed order. */
|
|
28
41
|
export declare function formatApprovalFlagOutcomes(outcomes: ApprovalFlagOutcomes): string[];
|
|
29
42
|
//# sourceMappingURL=approval-flags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-flags.d.ts","sourceRoot":"","sources":["../../../src/core/report/approval-flags.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"approval-flags.d.ts","sourceRoot":"","sources":["../../../src/core/report/approval-flags.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,oBAAoB,CAAC;AAexE,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAqC,CAAC;AAEtF,6DAA6D;AAC7D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;CAC7C;AAED,qFAAqF;AACrF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1D,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACrD,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;CACrD;AAqGD;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,SAAS,WAAW,EAAE,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAwC/B;AAUD,0EAA0E;AAC1E,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAcnF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { changeIdOfFolder } from './record-rework.js';
|
|
3
4
|
import { parseEventLines } from './report-events.js';
|
|
4
5
|
/** The fixed flag ids in the order the digest emits them. */
|
|
5
6
|
const FLAG_IDS = [
|
|
@@ -9,6 +10,8 @@ const FLAG_IDS = [
|
|
|
9
10
|
'removed_requirement',
|
|
10
11
|
'unknown_capability',
|
|
11
12
|
'verify_starts_conflict',
|
|
13
|
+
'adr_departure',
|
|
14
|
+
'adr_check_modified',
|
|
12
15
|
];
|
|
13
16
|
/** The key used for changes whose recorded flag ids are empty. */
|
|
14
17
|
export const NO_APPROVAL_FLAGS = 'none';
|
|
@@ -51,27 +54,20 @@ function parseRecordedFlags(content) {
|
|
|
51
54
|
function isTaskStream(entry) {
|
|
52
55
|
return /^\d+\.jsonl$/.test(entry);
|
|
53
56
|
}
|
|
54
|
-
/** True when a stream carries trouble: a task `dead` or any kind of `regressed`. */
|
|
55
|
-
function streamHasTrouble(entry, content) {
|
|
56
|
-
const taskStream = isTaskStream(entry);
|
|
57
|
-
return parseEventLines(content).some((event) => {
|
|
58
|
-
if (event.type === 'regressed')
|
|
59
|
-
return true;
|
|
60
|
-
return taskStream && event.type === 'dead';
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
57
|
/**
|
|
64
|
-
* A change has
|
|
65
|
-
* event,
|
|
58
|
+
* A change has `dead` trouble when any numbered task stream holds a `dead`
|
|
59
|
+
* event, and `regressed` trouble when any task or change stream holds a
|
|
60
|
+
* `regressed` event.
|
|
66
61
|
*/
|
|
67
|
-
async function
|
|
62
|
+
async function changeEventTrouble(folderPath) {
|
|
63
|
+
const trouble = { dead: false, regressed: false };
|
|
68
64
|
const eventsDir = path.join(folderPath, '.run', 'events');
|
|
69
65
|
let entries = [];
|
|
70
66
|
try {
|
|
71
67
|
entries = await fs.readdir(eventsDir);
|
|
72
68
|
}
|
|
73
69
|
catch {
|
|
74
|
-
return
|
|
70
|
+
return trouble;
|
|
75
71
|
}
|
|
76
72
|
for (const entry of entries) {
|
|
77
73
|
if (!entry.endsWith('.jsonl'))
|
|
@@ -79,10 +75,26 @@ async function changeHasTrouble(folderPath) {
|
|
|
79
75
|
if (!isTaskStream(entry) && entry !== 'change.jsonl')
|
|
80
76
|
continue;
|
|
81
77
|
const content = await fs.readFile(path.join(eventsDir, entry), 'utf8').catch(() => '');
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
const taskStream = isTaskStream(entry);
|
|
79
|
+
for (const event of parseEventLines(content)) {
|
|
80
|
+
if (event.type === 'regressed')
|
|
81
|
+
trouble.regressed = true;
|
|
82
|
+
if (taskStream && event.type === 'dead')
|
|
83
|
+
trouble.dead = true;
|
|
84
|
+
}
|
|
84
85
|
}
|
|
85
|
-
return
|
|
86
|
+
return trouble;
|
|
87
|
+
}
|
|
88
|
+
/** Trouble kinds for a change, in the fixed `dead`, `regressed`, `rework` order. */
|
|
89
|
+
function troubleKinds(trouble, fixedBy) {
|
|
90
|
+
const kinds = [];
|
|
91
|
+
if (trouble.dead)
|
|
92
|
+
kinds.push('dead');
|
|
93
|
+
if (trouble.regressed)
|
|
94
|
+
kinds.push('regressed');
|
|
95
|
+
if (fixedBy.length > 0)
|
|
96
|
+
kinds.push('rework');
|
|
97
|
+
return kinds;
|
|
86
98
|
}
|
|
87
99
|
/** Every reported key starts at zero so callers never infer an absent key. */
|
|
88
100
|
function emptyByFlag() {
|
|
@@ -94,11 +106,16 @@ function emptyByFlag() {
|
|
|
94
106
|
/**
|
|
95
107
|
* Reads recorded `approvalFlags` from every given change folder's manifest and
|
|
96
108
|
* counts, per key and mode, how many changes fired it and how many later had
|
|
97
|
-
* trouble.
|
|
98
|
-
*
|
|
109
|
+
* trouble. Later trouble is a task `dead`, any `regressed` event, or a later
|
|
110
|
+
* change naming it in `fixes`. Folders without a valid recorded field
|
|
111
|
+
* contribute nothing; flags are never recomputed from the authored change.
|
|
99
112
|
*/
|
|
100
|
-
export async function collectApprovalFlagOutcomes(folders) {
|
|
113
|
+
export async function collectApprovalFlagOutcomes(folders, rework) {
|
|
101
114
|
const byFlag = emptyByFlag();
|
|
115
|
+
const fixedByChange = new Map();
|
|
116
|
+
for (const entry of rework)
|
|
117
|
+
fixedByChange.set(entry.change, entry.fixedBy);
|
|
118
|
+
const troubledChanges = [];
|
|
102
119
|
let changes = 0;
|
|
103
120
|
for (const folderPath of folders) {
|
|
104
121
|
const content = await fs
|
|
@@ -110,7 +127,10 @@ export async function collectApprovalFlagOutcomes(folders) {
|
|
|
110
127
|
if (!recorded)
|
|
111
128
|
continue;
|
|
112
129
|
changes++;
|
|
113
|
-
const
|
|
130
|
+
const changeId = changeIdOfFolder(folderPath);
|
|
131
|
+
const fixedBy = fixedByChange.get(changeId) ?? [];
|
|
132
|
+
const troubled = troubleKinds(await changeEventTrouble(folderPath), fixedBy);
|
|
133
|
+
const hasTrouble = troubled.length > 0;
|
|
114
134
|
const keys = new Set(recorded.ids.length === 0 ? [NO_APPROVAL_FLAGS] : recorded.ids);
|
|
115
135
|
for (const key of keys) {
|
|
116
136
|
const outcome = byFlag[key];
|
|
@@ -118,11 +138,25 @@ export async function collectApprovalFlagOutcomes(folders) {
|
|
|
118
138
|
continue;
|
|
119
139
|
const bucket = recorded.mode === 'confirmed' ? outcome.confirmed : outcome.shown;
|
|
120
140
|
bucket.fired++;
|
|
121
|
-
if (
|
|
141
|
+
if (hasTrouble)
|
|
122
142
|
bucket.troubled++;
|
|
123
143
|
}
|
|
144
|
+
if (hasTrouble && recorded.ids.length > 0) {
|
|
145
|
+
troubledChanges.push({
|
|
146
|
+
change: changeId,
|
|
147
|
+
flags: [...recorded.ids],
|
|
148
|
+
kinds: troubled,
|
|
149
|
+
fixedBy: [...fixedBy],
|
|
150
|
+
});
|
|
151
|
+
}
|
|
124
152
|
}
|
|
125
|
-
|
|
153
|
+
troubledChanges.sort((a, b) => a.change.localeCompare(b.change));
|
|
154
|
+
return { changes, byFlag, troubledChanges };
|
|
155
|
+
}
|
|
156
|
+
/** Render one troubled change's line, naming the fixing ids for rework. */
|
|
157
|
+
function formatTroubledChange(entry) {
|
|
158
|
+
const kinds = entry.kinds.map((kind) => kind === 'rework' ? `rework (fixed by ${entry.fixedBy.join(', ')})` : kind);
|
|
159
|
+
return ` ${entry.change} (${entry.flags.join(', ')}): ${kinds.join(', ')}`;
|
|
126
160
|
}
|
|
127
161
|
/** Render the `Approval flags:` body, one line per key in fixed order. */
|
|
128
162
|
export function formatApprovalFlagOutcomes(outcomes) {
|
|
@@ -133,6 +167,9 @@ export function formatApprovalFlagOutcomes(outcomes) {
|
|
|
133
167
|
const troubled = outcome.shown.troubled + outcome.confirmed.troubled;
|
|
134
168
|
lines.push(` ${key}: fired ${fired} (shown ${outcome.shown.fired}, confirmed ${outcome.confirmed.fired}), later trouble ${troubled} (shown ${outcome.shown.troubled}, confirmed ${outcome.confirmed.troubled})`);
|
|
135
169
|
}
|
|
170
|
+
for (const entry of outcomes.troubledChanges ?? []) {
|
|
171
|
+
lines.push(formatTroubledChange(entry));
|
|
172
|
+
}
|
|
136
173
|
return lines;
|
|
137
174
|
}
|
|
138
175
|
//# sourceMappingURL=approval-flags.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-flags.js","sourceRoot":"","sources":["../../../src/core/report/approval-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,6DAA6D;AAC7D,MAAM,QAAQ,GAA8B;IAC1C,aAAa;IACb,gBAAgB;IAChB,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,wBAAwB;
|
|
1
|
+
{"version":3,"file":"approval-flags.js","sourceRoot":"","sources":["../../../src/core/report/approval-flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seconds from a manifest `createdAt` marked `createdAtSource: "created"` to a
|
|
3
|
+
* trusted approval time. Null when the creation marker, a valid creation time,
|
|
4
|
+
* or a trusted approval is missing, or when the approval precedes creation.
|
|
5
|
+
*/
|
|
6
|
+
export declare function readBriefToApprovalSeconds(folderPath: string): Promise<number | null>;
|
|
7
|
+
//# sourceMappingURL=brief-to-approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brief-to-approval.d.ts","sourceRoot":"","sources":["../../../src/core/report/brief-to-approval.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyB3F"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readManifestApprovedAt } from '../run/manifest-approval.js';
|
|
4
|
+
/**
|
|
5
|
+
* Seconds from a manifest `createdAt` marked `createdAtSource: "created"` to a
|
|
6
|
+
* trusted approval time. Null when the creation marker, a valid creation time,
|
|
7
|
+
* or a trusted approval is missing, or when the approval precedes creation.
|
|
8
|
+
*/
|
|
9
|
+
export async function readBriefToApprovalSeconds(folderPath) {
|
|
10
|
+
const content = await fs
|
|
11
|
+
.readFile(path.join(folderPath, '.run', 'manifest.json'), 'utf8')
|
|
12
|
+
.catch(() => null);
|
|
13
|
+
if (content === null)
|
|
14
|
+
return null;
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse(content);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
23
|
+
return null;
|
|
24
|
+
const manifest = parsed;
|
|
25
|
+
if (manifest.createdAtSource !== 'created')
|
|
26
|
+
return null;
|
|
27
|
+
if (typeof manifest.createdAt !== 'string')
|
|
28
|
+
return null;
|
|
29
|
+
const createdMs = Date.parse(manifest.createdAt);
|
|
30
|
+
if (!Number.isFinite(createdMs))
|
|
31
|
+
return null;
|
|
32
|
+
const approvedAt = await readManifestApprovedAt(folderPath);
|
|
33
|
+
if (approvedAt === null)
|
|
34
|
+
return null;
|
|
35
|
+
const approvedMs = Date.parse(approvedAt);
|
|
36
|
+
if (!Number.isFinite(approvedMs))
|
|
37
|
+
return null;
|
|
38
|
+
const delta = approvedMs - createdMs;
|
|
39
|
+
if (delta < 0)
|
|
40
|
+
return null;
|
|
41
|
+
return Math.round(delta / 1000);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=brief-to-approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brief-to-approval.js","sourceRoot":"","sources":["../../../src/core/report/brief-to-approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,UAAkB;IACjE,MAAM,OAAO,GAAG,MAAM,EAAE;SACrB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC;SAChE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,QAAQ,GAAG,MAA4D,CAAC;IAC9E,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;IACrC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PlanningPrice } from '../foundation/config-planning.js';
|
|
2
|
+
/** The exact configuration key an approver adds for a missing model price. */
|
|
3
|
+
export declare function formatPriceKey(model: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* Sorted distinct `plan_started` models of sessions that recorded tokens but
|
|
6
|
+
* have no `planning.prices` entry. A missing `prices` map leaves every model
|
|
7
|
+
* unpriced.
|
|
8
|
+
*/
|
|
9
|
+
export declare function findUnpricedPlanningModels(folders: readonly string[], prices: Readonly<Record<string, PlanningPrice>> | undefined): Promise<string[]>;
|
|
10
|
+
//# sourceMappingURL=planning-price-gaps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-price-gaps.d.ts","sourceRoot":"","sources":["../../../src/core/report/planning-price-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAatE,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,GAC1D,OAAO,CAAC,MAAM,EAAE,CAAC,CAYnB"}
|