@matteeh/osq 0.2.0 → 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-capability.d.ts +17 -0
- package/dist/core/spec/digest-capability.d.ts.map +1 -0
- package/dist/core/spec/digest-capability.js +89 -0
- package/dist/core/spec/digest-capability.js.map +1 -0
- 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-flags.d.ts +1 -0
- package/dist/core/spec/digest-flags.d.ts.map +1 -1
- package/dist/core/spec/digest-flags.js +16 -16
- package/dist/core/spec/digest-flags.js.map +1 -1
- 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 +6 -3
- package/dist/core/spec/digest.d.ts.map +1 -1
- package/dist/core/spec/digest.js +18 -32
- 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 +114 -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/build-project.d.ts +11 -0
- package/dist/watcher/build-project.d.ts.map +1 -0
- package/dist/watcher/build-project.js +36 -0
- package/dist/watcher/build-project.js.map +1 -0
- package/dist/watcher/build.d.ts +8 -5
- package/dist/watcher/build.d.ts.map +1 -1
- package/dist/watcher/build.js +35 -39
- package/dist/watcher/build.js.map +1 -1
- 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/fingerprint.d.ts +2 -2
- package/dist/watcher/fingerprint.d.ts.map +1 -1
- package/dist/watcher/fingerprint.js +31 -2
- package/dist/watcher/fingerprint.js.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 +37 -51
- 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/outcome.d.ts +2 -0
- package/dist/watcher/outcome.d.ts.map +1 -1
- package/dist/watcher/outcome.js +5 -1
- package/dist/watcher/outcome.js.map +1 -1
- package/dist/watcher/regression.d.ts +10 -5
- package/dist/watcher/regression.d.ts.map +1 -1
- package/dist/watcher/regression.js +29 -19
- 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 +11 -1
- 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,143 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DEFAULT_TRACEABILITY_CONFIG, } from '../foundation/config-traceability.js';
|
|
4
|
+
import { readDecisions } from '../foundation/decisions.js';
|
|
5
|
+
import { buildScenarioIndex } from '../trace/scenario-index.js';
|
|
6
|
+
import { effectiveScenarios } from '../trace/scenario-lookup.js';
|
|
7
|
+
import { readCapabilityOwnership } from './capability-impact.js';
|
|
8
|
+
import { parseCapabilitySpec } from './delta.js';
|
|
9
|
+
import { makeFinding } from './lint-findings.js';
|
|
10
|
+
import { extractSection, parseFrontmatter } from './parser.js';
|
|
11
|
+
import { blastScenarios, readCapabilityChanges, readDeltaCapabilities, scenarioImpactFindings, specDirectories, } from './scenario-impact.js';
|
|
12
|
+
import { linkFindings, plannedCoversFunction, scenarioKey, traceabilitySeverity, } from './traceability-links.js';
|
|
13
|
+
/** The opted-in capability set; `'all'` expands to living specs and deltas. */
|
|
14
|
+
async function readOptedIn(input, deltas, traceability) {
|
|
15
|
+
const configured = traceability.capabilities;
|
|
16
|
+
if (configured === 'all') {
|
|
17
|
+
const specsDir = path.join(input.projectRoot, input.config.paths.openspecRoot, 'specs');
|
|
18
|
+
return new Set([...(await specDirectories(specsDir)), ...deltas]);
|
|
19
|
+
}
|
|
20
|
+
return new Set(configured);
|
|
21
|
+
}
|
|
22
|
+
/** Effective scenario names, tolerating a delta the merge engine refuses. */
|
|
23
|
+
async function effectiveNamesFor(openspecRoot, folderPath, capability, change) {
|
|
24
|
+
try {
|
|
25
|
+
return effectiveScenarios(openspecRoot, folderPath, capability).map((scenario) => scenario.name);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
const living = await fs
|
|
29
|
+
.readFile(path.join(openspecRoot, 'specs', capability, 'spec.md'), 'utf8')
|
|
30
|
+
.catch(() => null);
|
|
31
|
+
if (living !== null) {
|
|
32
|
+
return parseCapabilitySpec(living).requirements.flatMap((requirement) => requirement.scenarios.map((scenario) => scenario.name));
|
|
33
|
+
}
|
|
34
|
+
return change === undefined ? [] : [...change.addedNames, ...change.modifiedNames];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Build the opted-in capability link info, effective scenarios included. */
|
|
38
|
+
async function readLinkCapabilities(input, openspecRoot, changes, optedIn) {
|
|
39
|
+
const capabilities = [];
|
|
40
|
+
for (const capability of [...optedIn].sort()) {
|
|
41
|
+
const change = changes.get(capability);
|
|
42
|
+
capabilities.push({
|
|
43
|
+
capability,
|
|
44
|
+
deltaPath: change?.deltaPath ?? null,
|
|
45
|
+
effectiveNames: await effectiveNamesFor(openspecRoot, input.folderPath, capability, change),
|
|
46
|
+
alteredNames: change === undefined ? [] : [...change.addedNames, ...change.modifiedNames],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return capabilities;
|
|
50
|
+
}
|
|
51
|
+
/** A test path is under `tests/`, or its file name holds `.test.` or `.spec.`. */
|
|
52
|
+
function isTestPath(relativePath) {
|
|
53
|
+
if (relativePath === 'tests' || relativePath.startsWith('tests/'))
|
|
54
|
+
return true;
|
|
55
|
+
const base = relativePath.slice(relativePath.lastIndexOf('/') + 1);
|
|
56
|
+
return base.includes('.test.') || base.includes('.spec.');
|
|
57
|
+
}
|
|
58
|
+
/** The `## Scenarios` keys each task with a test path lists, by task number. */
|
|
59
|
+
async function readPlannedScenarios(projectRoot, tasks) {
|
|
60
|
+
const planned = new Map();
|
|
61
|
+
for (const task of tasks) {
|
|
62
|
+
if (!task.resolvedPaths.some(isTestPath))
|
|
63
|
+
continue;
|
|
64
|
+
const content = await fs
|
|
65
|
+
.readFile(path.join(projectRoot, task.taskPath), 'utf8')
|
|
66
|
+
.catch(() => null);
|
|
67
|
+
if (content === null)
|
|
68
|
+
continue;
|
|
69
|
+
const section = extractSection(parseFrontmatter(content).body, 'Scenarios');
|
|
70
|
+
const keys = new Set();
|
|
71
|
+
for (const line of section.split('\n')) {
|
|
72
|
+
const bullet = /^\s*[-*]\s+(.*)$/.exec(line);
|
|
73
|
+
if (bullet === null)
|
|
74
|
+
continue;
|
|
75
|
+
const colon = bullet[1].indexOf(':');
|
|
76
|
+
if (colon === -1)
|
|
77
|
+
continue;
|
|
78
|
+
const capability = bullet[1].slice(0, colon).trim();
|
|
79
|
+
const name = bullet[1].slice(colon + 1).trim();
|
|
80
|
+
if (capability !== '' && name !== '')
|
|
81
|
+
keys.add(scenarioKey(capability, name));
|
|
82
|
+
}
|
|
83
|
+
if (keys.size > 0)
|
|
84
|
+
planned.set(task.taskNumber, keys);
|
|
85
|
+
}
|
|
86
|
+
return planned;
|
|
87
|
+
}
|
|
88
|
+
/** Every unreadable tag or scenario call the index holds in a resolved scope. */
|
|
89
|
+
function unreadableFindings(input) {
|
|
90
|
+
const severity = traceabilitySeverity(input.mode);
|
|
91
|
+
const findings = [];
|
|
92
|
+
for (const form of input.index.unreadable) {
|
|
93
|
+
if (!input.scopedFiles.has(form.file))
|
|
94
|
+
continue;
|
|
95
|
+
if (form.capability !== undefined && !input.optedIn.has(form.capability))
|
|
96
|
+
continue;
|
|
97
|
+
findings.push(makeFinding(severity, { file: form.file }, `${form.file}:${form.line}: ${form.reason}`));
|
|
98
|
+
}
|
|
99
|
+
return findings;
|
|
100
|
+
}
|
|
101
|
+
/** Collect the traceability findings for one change folder. */
|
|
102
|
+
export async function collectTraceabilityFindings(input) {
|
|
103
|
+
const traceability = input.config.traceability ?? DEFAULT_TRACEABILITY_CONFIG;
|
|
104
|
+
const mode = traceability.mode;
|
|
105
|
+
const openspecRoot = path.join(input.projectRoot, input.config.paths.openspecRoot);
|
|
106
|
+
const deltas = await readDeltaCapabilities(input.folderPath);
|
|
107
|
+
const optedIn = await readOptedIn(input, deltas, traceability);
|
|
108
|
+
const changes = await readCapabilityChanges(input.projectRoot, input.folderPath, openspecRoot, deltas);
|
|
109
|
+
const index = buildScenarioIndex(input.projectRoot, input.importGraph);
|
|
110
|
+
const findings = [];
|
|
111
|
+
if (optedIn.size > 0) {
|
|
112
|
+
const scopedFiles = new Set(input.tasks.flatMap((task) => [...task.resolvedPaths]));
|
|
113
|
+
const scopedTests = new Set(index.scenarioTestFiles.filter((file) => scopedFiles.has(file)));
|
|
114
|
+
const plannedByTask = await readPlannedScenarios(input.projectRoot, input.tasks);
|
|
115
|
+
const planned = new Set([...plannedByTask.values()].flatMap((keys) => [...keys]));
|
|
116
|
+
const namedByScopedTest = (capability, name) => index.testsNaming(capability, name).some((file) => scopedTests.has(file));
|
|
117
|
+
const capabilities = await readLinkCapabilities(input, openspecRoot, changes, optedIn);
|
|
118
|
+
const adrs = (await readDecisions(input.projectRoot, input.config)).adrs;
|
|
119
|
+
const ownerships = await readCapabilityOwnership(input.projectRoot, input.config.paths.openspecRoot);
|
|
120
|
+
findings.push(...linkFindings({
|
|
121
|
+
mode,
|
|
122
|
+
index,
|
|
123
|
+
scopedFiles,
|
|
124
|
+
optedIn,
|
|
125
|
+
capabilities,
|
|
126
|
+
planned,
|
|
127
|
+
namedByScopedTest,
|
|
128
|
+
plannedCoversFunction: (file, capability, name) => plannedCoversFunction(input.tasks, plannedByTask, file, capability, name, namedByScopedTest),
|
|
129
|
+
adrs,
|
|
130
|
+
ownerships,
|
|
131
|
+
}));
|
|
132
|
+
findings.push(...unreadableFindings({ index, scopedFiles, optedIn, mode }));
|
|
133
|
+
}
|
|
134
|
+
findings.push(...scenarioImpactFindings({
|
|
135
|
+
mode,
|
|
136
|
+
index,
|
|
137
|
+
optedIn,
|
|
138
|
+
tasks: input.tasks,
|
|
139
|
+
scenarios: blastScenarios(changes),
|
|
140
|
+
}));
|
|
141
|
+
return findings;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=traceability-lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceability-lint.js","sourceRoot":"","sources":["../../../src/core/spec/traceability-lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NeedsYouItem } from './inbox.js';
|
|
2
|
+
import type { StatusOverview } from './status.js';
|
|
3
|
+
/**
|
|
4
|
+
* Annotate `task-dead` items whose task died blocked with the stated need and
|
|
5
|
+
* the reject-and-replan command. Every other item is returned unchanged.
|
|
6
|
+
*/
|
|
7
|
+
export declare function applyBlockedItems(overview: StatusOverview, items: NeedsYouItem[]): Promise<NeedsYouItem[]>;
|
|
8
|
+
//# sourceMappingURL=blocked-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocked-item.d.ts","sourceRoot":"","sources":["../../../src/core/status/blocked-item.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA2BlD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,YAAY,EAAE,GACpB,OAAO,CAAC,YAAY,EAAE,CAAC,CAczB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { parseResultSections } from '../report/result-sections.js';
|
|
3
|
+
import { getResultPath } from './layout.js';
|
|
4
|
+
const NOT_STATED = '(not stated)';
|
|
5
|
+
const REJECT_REASON = '--reason <text>';
|
|
6
|
+
/** The task state behind a task-dead item, when the overview still holds it. */
|
|
7
|
+
function findTask(overview, item) {
|
|
8
|
+
const spec = overview.specs.find((candidate) => candidate.id === item.change.id);
|
|
9
|
+
if (!spec)
|
|
10
|
+
return null;
|
|
11
|
+
const taskNumber = item.task?.number;
|
|
12
|
+
if (!taskNumber)
|
|
13
|
+
return null;
|
|
14
|
+
const task = spec.tasks.find((candidate) => candidate.taskNumber === taskNumber);
|
|
15
|
+
return task ? { spec, task } : null;
|
|
16
|
+
}
|
|
17
|
+
/** The task result file's stated need, or `(not stated)` when it has none. */
|
|
18
|
+
async function readNeed(folderPath, taskNumber) {
|
|
19
|
+
const content = await fs
|
|
20
|
+
.readFile(getResultPath(folderPath, taskNumber), 'utf8')
|
|
21
|
+
.catch(() => null);
|
|
22
|
+
if (content === null)
|
|
23
|
+
return NOT_STATED;
|
|
24
|
+
return parseResultSections(content).blocked ?? NOT_STATED;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Annotate `task-dead` items whose task died blocked with the stated need and
|
|
28
|
+
* the reject-and-replan command. Every other item is returned unchanged.
|
|
29
|
+
*/
|
|
30
|
+
export async function applyBlockedItems(overview, items) {
|
|
31
|
+
return Promise.all(items.map(async (item) => {
|
|
32
|
+
if (item.kind !== 'task-dead')
|
|
33
|
+
return item;
|
|
34
|
+
const found = findTask(overview, item);
|
|
35
|
+
if (!found || found.task.deadReason !== 'blocked')
|
|
36
|
+
return item;
|
|
37
|
+
const need = await readNeed(found.spec.folderPath, found.task.taskNumber);
|
|
38
|
+
return {
|
|
39
|
+
...item,
|
|
40
|
+
command: `osq reject ${item.change.id} ${REJECT_REASON}`,
|
|
41
|
+
blocked: { need },
|
|
42
|
+
};
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=blocked-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocked-item.js","sourceRoot":"","sources":["../../../src/core/status/blocked-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,UAAU,GAAG,cAAc,CAAC;AAClC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,gFAAgF;AAChF,SAAS,QAAQ,CACf,QAAwB,EACxB,IAAkB;IAElB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;IACrC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,KAAK,UAAU,QAAQ,CAAC,UAAkB,EAAE,UAAkB;IAC5D,MAAM,OAAO,GAAG,MAAM,EAAE;SACrB,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC;SACvD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IACxC,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAwB,EACxB,KAAqB;IAErB,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,aAAa,EAAE;YACxD,OAAO,EAAE,EAAE,IAAI,EAAE;SACK,CAAC;IAC3B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { OsqConfig } from '../foundation/config.js';
|
|
2
|
+
/** Where a change folder currently lives. */
|
|
3
|
+
export type ChangeLocation = 'active' | 'archived' | 'rejected';
|
|
4
|
+
/** One tree changes live in, with its canonical change directories. */
|
|
5
|
+
export interface ChangeTree {
|
|
6
|
+
/** Absolute project root of the tree. */
|
|
7
|
+
readonly root: string;
|
|
8
|
+
/** For an osq worktree tree, the change folder it checks out. */
|
|
9
|
+
readonly worktreeFolder?: string;
|
|
10
|
+
readonly changesDir: string;
|
|
11
|
+
readonly archiveDir: string;
|
|
12
|
+
readonly rejectedDir: string;
|
|
13
|
+
}
|
|
14
|
+
/** One change folder with its location and the tree it lives in. */
|
|
15
|
+
export interface LocatedChange {
|
|
16
|
+
readonly folderName: string;
|
|
17
|
+
/** Absolute path of the folder. */
|
|
18
|
+
readonly folderPath: string;
|
|
19
|
+
readonly location: ChangeLocation;
|
|
20
|
+
readonly tree: ChangeTree;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The trees changes live in. The first is always the project root; with
|
|
24
|
+
* `vcs.enabled` and git selected, one tree follows per osq worktree, carrying
|
|
25
|
+
* the change folder its branch names. A relative project root resolves against
|
|
26
|
+
* the current directory.
|
|
27
|
+
*/
|
|
28
|
+
export declare function changeTrees(projectRoot: string, config: OsqConfig): Promise<ChangeTree[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Every change folder across every tree, directories only, active first, then
|
|
31
|
+
* archived, then rejected, each in numeric prefix order.
|
|
32
|
+
*/
|
|
33
|
+
export declare function listChanges(projectRoot: string, config: OsqConfig, locations?: readonly ChangeLocation[]): Promise<LocatedChange[]>;
|
|
34
|
+
/**
|
|
35
|
+
* The active change matching an exact name, a number with or without zero
|
|
36
|
+
* padding, or that number followed by `-`. Fails with `findSpecFolder`'s
|
|
37
|
+
* message when nothing matches.
|
|
38
|
+
*/
|
|
39
|
+
export declare function findChange(projectRoot: string, config: OsqConfig, idOrPrefix: string): Promise<LocatedChange>;
|
|
40
|
+
/** The change an absolute folder path names, or null when no tree holds it. */
|
|
41
|
+
export declare function locateFolder(projectRoot: string, config: OsqConfig, folderPath: string): Promise<LocatedChange | null>;
|
|
42
|
+
/** The changes directory relative to the project root, for display. */
|
|
43
|
+
export declare function changesDirLabel(config: OsqConfig): string;
|
|
44
|
+
//# sourceMappingURL=change-locations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-locations.d.ts","sourceRoot":"","sources":["../../../src/core/status/change-locations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAUzD,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAEhE,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAmDD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAgB/F;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,SAAS,EACjB,SAAS,GAAE,SAAS,cAAc,EAAmB,GACpD,OAAO,CAAC,aAAa,EAAE,CAAC,CA+B1B;AAgBD;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED,+EAA+E;AAC/E,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAI/B;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { selectVcs } from '../vcs/select.js';
|
|
4
|
+
import { getArchiveDir, getChangesDir, getRejectedDir, isActiveChangeFolderName, } from './layout.js';
|
|
5
|
+
import { compareNumericPrefix } from './state.js';
|
|
6
|
+
const LOCATION_ORDER = ['active', 'archived', 'rejected'];
|
|
7
|
+
/** Order two located changes by location, then numeric prefix. */
|
|
8
|
+
function compareLocated(a, b) {
|
|
9
|
+
const rank = LOCATION_ORDER.indexOf(a.location) - LOCATION_ORDER.indexOf(b.location);
|
|
10
|
+
if (rank !== 0)
|
|
11
|
+
return rank;
|
|
12
|
+
return compareNumericPrefix(a.folderName, b.folderName);
|
|
13
|
+
}
|
|
14
|
+
/** Whether a change-location directory entry is a change folder candidate. */
|
|
15
|
+
function isLocationEntry(entry, location) {
|
|
16
|
+
if (location === 'active')
|
|
17
|
+
return isActiveChangeFolderName(entry);
|
|
18
|
+
return !entry.startsWith('_') && !entry.startsWith('.');
|
|
19
|
+
}
|
|
20
|
+
/** Every change folder directly under one canonical directory. */
|
|
21
|
+
async function listLocation(tree, dir, location) {
|
|
22
|
+
const entries = await fs.readdir(dir).catch(() => []);
|
|
23
|
+
const changes = [];
|
|
24
|
+
for (const entry of entries) {
|
|
25
|
+
if (!isLocationEntry(entry, location))
|
|
26
|
+
continue;
|
|
27
|
+
const folderPath = path.join(dir, entry);
|
|
28
|
+
const stat = await fs.stat(folderPath).catch(() => null);
|
|
29
|
+
if (!stat?.isDirectory())
|
|
30
|
+
continue;
|
|
31
|
+
changes.push({ folderName: entry, folderPath, location, tree });
|
|
32
|
+
}
|
|
33
|
+
return changes;
|
|
34
|
+
}
|
|
35
|
+
/** One tree rooted at `root`, its canonical directories from the config. */
|
|
36
|
+
function treeAt(root, config, worktreeFolder) {
|
|
37
|
+
return {
|
|
38
|
+
root,
|
|
39
|
+
...(worktreeFolder !== undefined ? { worktreeFolder } : {}),
|
|
40
|
+
changesDir: getChangesDir(config.paths.openspecRoot, root),
|
|
41
|
+
archiveDir: getArchiveDir(config.paths.openspecRoot, root),
|
|
42
|
+
rejectedDir: getRejectedDir(config.paths.openspecRoot, root),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Resolve a path with symlinks, falling back to the raw path when absent. */
|
|
46
|
+
async function realpath(target) {
|
|
47
|
+
return fs.realpath(target).catch(() => target);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The trees changes live in. The first is always the project root; with
|
|
51
|
+
* `vcs.enabled` and git selected, one tree follows per osq worktree, carrying
|
|
52
|
+
* the change folder its branch names. A relative project root resolves against
|
|
53
|
+
* the current directory.
|
|
54
|
+
*/
|
|
55
|
+
export async function changeTrees(projectRoot, config) {
|
|
56
|
+
const root = path.resolve(projectRoot);
|
|
57
|
+
const trees = [treeAt(root, config)];
|
|
58
|
+
if (config.vcs?.enabled !== true)
|
|
59
|
+
return trees;
|
|
60
|
+
const vcs = await selectVcs(root, config);
|
|
61
|
+
if (vcs.kind !== 'git')
|
|
62
|
+
return trees;
|
|
63
|
+
const rootReal = await realpath(root);
|
|
64
|
+
for (const worktree of await vcs.worktreeList()) {
|
|
65
|
+
const branch = worktree.branch;
|
|
66
|
+
if (!branch?.startsWith('osq/'))
|
|
67
|
+
continue;
|
|
68
|
+
if ((await realpath(worktree.path)) === rootReal)
|
|
69
|
+
continue;
|
|
70
|
+
trees.push(treeAt(worktree.path, config, branch.slice('osq/'.length)));
|
|
71
|
+
}
|
|
72
|
+
return trees;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Every change folder across every tree, directories only, active first, then
|
|
76
|
+
* archived, then rejected, each in numeric prefix order.
|
|
77
|
+
*/
|
|
78
|
+
export async function listChanges(projectRoot, config, locations = LOCATION_ORDER) {
|
|
79
|
+
const wanted = new Set(locations);
|
|
80
|
+
const trees = await changeTrees(projectRoot, config);
|
|
81
|
+
const worktreeFolders = new Set(trees.flatMap((tree) => (tree.worktreeFolder === undefined ? [] : [tree.worktreeFolder])));
|
|
82
|
+
const changes = [];
|
|
83
|
+
for (const tree of trees) {
|
|
84
|
+
const entries = [];
|
|
85
|
+
if (wanted.has('active')) {
|
|
86
|
+
entries.push(...(await listLocation(tree, tree.changesDir, 'active')));
|
|
87
|
+
}
|
|
88
|
+
if (wanted.has('archived')) {
|
|
89
|
+
entries.push(...(await listLocation(tree, tree.archiveDir, 'archived')));
|
|
90
|
+
}
|
|
91
|
+
if (wanted.has('rejected')) {
|
|
92
|
+
entries.push(...(await listLocation(tree, tree.rejectedDir, 'rejected')));
|
|
93
|
+
}
|
|
94
|
+
// A worktree tree contributes only the folder its branch names; the
|
|
95
|
+
// project root drops an active folder any worktree tree names.
|
|
96
|
+
if (tree.worktreeFolder !== undefined) {
|
|
97
|
+
changes.push(...entries.filter((entry) => entry.folderName === tree.worktreeFolder));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
changes.push(...entries.filter((entry) => entry.location !== 'active' || !worktreeFolders.has(entry.folderName)));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return changes.sort(compareLocated);
|
|
104
|
+
}
|
|
105
|
+
/** Whether a folder name matches a query as `findSpecFolder` matches it. */
|
|
106
|
+
function matchesFolder(folderName, query) {
|
|
107
|
+
const trimmed = query.trim();
|
|
108
|
+
const num = Number.parseInt(trimmed, 10);
|
|
109
|
+
const padded = !Number.isNaN(num) ? String(num).padStart(3, '0') : trimmed;
|
|
110
|
+
return (folderName === trimmed ||
|
|
111
|
+
folderName === padded ||
|
|
112
|
+
folderName.startsWith(`${trimmed}-`) ||
|
|
113
|
+
folderName.startsWith(`${padded}-`));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The active change matching an exact name, a number with or without zero
|
|
117
|
+
* padding, or that number followed by `-`. Fails with `findSpecFolder`'s
|
|
118
|
+
* message when nothing matches.
|
|
119
|
+
*/
|
|
120
|
+
export async function findChange(projectRoot, config, idOrPrefix) {
|
|
121
|
+
const active = await listChanges(projectRoot, config, ['active']);
|
|
122
|
+
const match = active.find((change) => matchesFolder(change.folderName, idOrPrefix));
|
|
123
|
+
if (match)
|
|
124
|
+
return match;
|
|
125
|
+
const [tree] = await changeTrees(projectRoot, config);
|
|
126
|
+
throw new Error(`Spec "${idOrPrefix}" not found in ${tree.changesDir}`);
|
|
127
|
+
}
|
|
128
|
+
/** The change an absolute folder path names, or null when no tree holds it. */
|
|
129
|
+
export async function locateFolder(projectRoot, config, folderPath) {
|
|
130
|
+
const target = path.resolve(projectRoot, folderPath);
|
|
131
|
+
const changes = await listChanges(projectRoot, config);
|
|
132
|
+
return changes.find((change) => change.folderPath === target) ?? null;
|
|
133
|
+
}
|
|
134
|
+
/** The changes directory relative to the project root, for display. */
|
|
135
|
+
export function changesDirLabel(config) {
|
|
136
|
+
return getChangesDir(config.paths.openspecRoot);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=change-locations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-locations.js","sourceRoot":"","sources":["../../../src/core/status/change-locations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Directory entries, or an empty list when the directory cannot be read. */
|
|
2
|
+
export declare function listDir(dir: string): Promise<string[]>;
|
|
3
|
+
/** True while an archived change requires a verification outcome that has not passed. */
|
|
4
|
+
export declare function isVerificationPending(folderPath: string): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Runtime dependency completion: an archived dependency counts as met only when
|
|
7
|
+
* its recorded verification is not pending. A rejected dependency and an
|
|
8
|
+
* unfinished active change are never met.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isDependencyDone(changesDir: string, dependency: string): Promise<boolean>;
|
|
11
|
+
//# sourceMappingURL=dependency-readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-readiness.d.ts","sourceRoot":"","sources":["../../../src/core/status/dependency-readiness.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE5D;AAOD,yFAAyF;AACzF,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAc/F"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readVerification } from './verification.js';
|
|
4
|
+
/** Directory entries, or an empty list when the directory cannot be read. */
|
|
5
|
+
export async function listDir(dir) {
|
|
6
|
+
return fs.readdir(dir).catch(() => []);
|
|
7
|
+
}
|
|
8
|
+
async function findFolder(parent, prefix) {
|
|
9
|
+
const entries = await listDir(parent);
|
|
10
|
+
return entries.find((entry) => entry === prefix || entry.startsWith(`${prefix}-`)) ?? null;
|
|
11
|
+
}
|
|
12
|
+
/** True while an archived change requires a verification outcome that has not passed. */
|
|
13
|
+
export async function isVerificationPending(folderPath) {
|
|
14
|
+
const { required, outcome } = await readVerification(folderPath);
|
|
15
|
+
return required && outcome !== 'passed';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Runtime dependency completion: an archived dependency counts as met only when
|
|
19
|
+
* its recorded verification is not pending. A rejected dependency and an
|
|
20
|
+
* unfinished active change are never met.
|
|
21
|
+
*/
|
|
22
|
+
export async function isDependencyDone(changesDir, dependency) {
|
|
23
|
+
const padded = dependency.padStart(3, '0');
|
|
24
|
+
const archived = await findFolder(path.join(changesDir, 'archive'), padded);
|
|
25
|
+
if (archived)
|
|
26
|
+
return !(await isVerificationPending(path.join(changesDir, 'archive', archived)));
|
|
27
|
+
if (await findFolder(path.join(changesDir, 'rejected'), padded))
|
|
28
|
+
return false;
|
|
29
|
+
const active = await findFolder(changesDir, padded);
|
|
30
|
+
if (!active)
|
|
31
|
+
return false;
|
|
32
|
+
const dependencyFolder = path.join(changesDir, active);
|
|
33
|
+
const taskFiles = (await listDir(path.join(dependencyFolder, 'tasks'))).filter((entry) => entry.endsWith('.md'));
|
|
34
|
+
if (taskFiles.length === 0)
|
|
35
|
+
return false;
|
|
36
|
+
const done = new Set(await listDir(path.join(dependencyFolder, '.run', 'done')));
|
|
37
|
+
return taskFiles.every((entry) => done.has(entry.replace(/\.md$/, '')));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=dependency-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-readiness.js","sourceRoot":"","sources":["../../../src/core/status/dependency-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW;IACvC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAC7F,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC5D,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACjE,OAAO,QAAQ,IAAI,OAAO,KAAK,QAAQ,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB,EAAE,UAAkB;IAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5E,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACvF,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtB,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox-projection.d.ts","sourceRoot":"","sources":["../../../src/core/status/inbox-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"inbox-projection.d.ts","sourceRoot":"","sources":["../../../src/core/status/inbox-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzE,OAAO,EAAE,KAAK,KAAK,EAAuD,MAAM,YAAY,CAAC;AAG7F,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAmBD;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,KAAK,CAAC,CAWhB"}
|
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
import { DEFAULT_CONFIG } from '../foundation/config.js';
|
|
2
|
+
import { applyBlockedItems } from './blocked-item.js';
|
|
3
|
+
import { changeTrees } from './change-locations.js';
|
|
2
4
|
import { readLastLook } from './inbox-cursor.js';
|
|
3
5
|
import { collectLandedItems, projectInbox } from './inbox.js';
|
|
4
|
-
import { getArchiveDir } from './layout.js';
|
|
5
6
|
import { getStatusOverview } from './status.js';
|
|
7
|
+
function changeId(folderName) {
|
|
8
|
+
return folderName.match(/^(\d+)/)?.[1] ?? folderName;
|
|
9
|
+
}
|
|
10
|
+
/** One needs-you item per archived change still awaiting a verification outcome. */
|
|
11
|
+
function projectPendingVerifications(overview) {
|
|
12
|
+
return (overview.pendingVerifications ?? []).map((pending) => {
|
|
13
|
+
const id = changeId(pending.folderName);
|
|
14
|
+
return {
|
|
15
|
+
kind: pending.next.detail === 'failed' ? 'verification-failed' : 'verification-pending',
|
|
16
|
+
change: { id, title: pending.title },
|
|
17
|
+
task: null,
|
|
18
|
+
command: pending.next.command ?? `osq verified ${id} --passed|--failed`,
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
|
6
22
|
/**
|
|
7
23
|
* Derives the stable inbox object without mutating any file. Both the CLI and
|
|
8
24
|
* the read-only HTTP transport consume it, so a contemporaneous invocation and
|
|
@@ -13,8 +29,11 @@ export async function readInbox(projectRoot, options = {}) {
|
|
|
13
29
|
const now = options.now ?? new Date();
|
|
14
30
|
const overview = await getStatusOverview(projectRoot, config);
|
|
15
31
|
const lastLookMs = await readLastLook(projectRoot, options.home);
|
|
16
|
-
const
|
|
17
|
-
const landed = await collectLandedItems(archiveDir, lastLookMs);
|
|
18
|
-
|
|
32
|
+
const [tree] = await changeTrees(projectRoot, config);
|
|
33
|
+
const landed = await collectLandedItems(tree.archiveDir, lastLookMs);
|
|
34
|
+
const inbox = projectInbox(overview, landed, now.getTime());
|
|
35
|
+
const pending = projectPendingVerifications(overview);
|
|
36
|
+
const needsYou = await applyBlockedItems(overview, [...inbox.needsYou, ...pending]);
|
|
37
|
+
return { ...inbox, needsYou };
|
|
19
38
|
}
|
|
20
39
|
//# sourceMappingURL=inbox-projection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox-projection.js","sourceRoot":"","sources":["../../../src/core/status/inbox-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"inbox-projection.js","sourceRoot":"","sources":["../../../src/core/status/inbox-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAiC,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAuB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASrE,SAAS,QAAQ,CAAC,UAAkB;IAClC,OAAO,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,oFAAoF;AACpF,SAAS,2BAA2B,CAAC,QAAwB;IAC3D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3D,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB;YACvF,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;YACpC,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,gBAAgB,EAAE,oBAAoB;SACjD,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,WAAmB,EACnB,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACpF,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox-text.d.ts","sourceRoot":"","sources":["../../../src/core/status/inbox-text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAuD,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"inbox-text.d.ts","sourceRoot":"","sources":["../../../src/core/status/inbox-text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAuD,MAAM,YAAY,CAAC;AAkD7F,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAmBpD"}
|
|
@@ -2,12 +2,25 @@ import { formatDuration } from '../report/report.js';
|
|
|
2
2
|
const REJECT_HINT = '--reason <text>';
|
|
3
3
|
function needsYouLine(item) {
|
|
4
4
|
const head = ` ${item.change.id}: ${item.change.title}`;
|
|
5
|
-
if (item.kind === '
|
|
6
|
-
return `${head} — ${item.command}`;
|
|
5
|
+
if (item.kind === 'planning')
|
|
6
|
+
return `${head} — unplanned — ${item.command}`;
|
|
7
|
+
if (item.kind === 'verification-pending')
|
|
8
|
+
return `${head} — verification pending — ${item.command}`;
|
|
9
|
+
if (item.kind === 'verification-failed')
|
|
10
|
+
return `${head} — verification failed — ${item.command}`;
|
|
11
|
+
if (item.kind === 'approval') {
|
|
12
|
+
return item.beforeApproval
|
|
13
|
+
? `${head} — do the steps before approval first — ${item.command}`
|
|
14
|
+
: `${head} — ${item.command}`;
|
|
15
|
+
}
|
|
7
16
|
if (item.kind === 'change-regressed')
|
|
8
17
|
return `${head} — change regressed — ${item.command}`;
|
|
9
18
|
const task = item.task;
|
|
10
19
|
const row = `${head} — task ${task.number}: ${task.title}`;
|
|
20
|
+
if (item.blocked) {
|
|
21
|
+
const need = item.blocked.need.replace(/\s+/g, ' ');
|
|
22
|
+
return `${row} — blocked: ${need} — reject, then osq plan --next --replan — ${item.command}`;
|
|
23
|
+
}
|
|
11
24
|
if (!item.stuck)
|
|
12
25
|
return `${row} — ${item.command}`;
|
|
13
26
|
return `${row} — stuck: same failure twice; amend the spec or osq reject ${item.change.id} ${REJECT_HINT} — ${item.command}`;
|
|
@@ -16,8 +29,26 @@ function runningLine(item) {
|
|
|
16
29
|
const duration = formatDuration(item.elapsedSeconds * 1000);
|
|
17
30
|
return ` ${item.change.id}: ${item.change.title} — task ${item.task.number}: ${item.task.title} — ${duration} — ${item.command}`;
|
|
18
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The `— disclosed: ...` suffix for a landed item whose tasks disclosed a gap.
|
|
34
|
+
* Counts appear in the order deviated, missing context, outside scope, and an
|
|
35
|
+
* item without disclosures contributes nothing.
|
|
36
|
+
*/
|
|
37
|
+
function disclosedSuffix(item) {
|
|
38
|
+
const disclosures = item.disclosures;
|
|
39
|
+
if (!disclosures)
|
|
40
|
+
return '';
|
|
41
|
+
const parts = [];
|
|
42
|
+
if (disclosures.deviated > 0)
|
|
43
|
+
parts.push(`deviated ${disclosures.deviated}`);
|
|
44
|
+
if (disclosures.missingContext > 0)
|
|
45
|
+
parts.push(`missing context ${disclosures.missingContext}`);
|
|
46
|
+
if (disclosures.outsideScope > 0)
|
|
47
|
+
parts.push(`outside scope ${disclosures.outsideScope}`);
|
|
48
|
+
return parts.length > 0 ? ` — disclosed: ${parts.join(', ')}` : '';
|
|
49
|
+
}
|
|
19
50
|
function landedLine(item) {
|
|
20
|
-
return ` ${item.change.id}: ${item.change.title} — archived ${item.archivedAt} — ${item.command}`;
|
|
51
|
+
return ` ${item.change.id}: ${item.change.title} — archived ${item.archivedAt}${disclosedSuffix(item)} — ${item.command}`;
|
|
21
52
|
}
|
|
22
53
|
/** Concise text rendering of the three inbox groups. */
|
|
23
54
|
export function formatInboxText(inbox) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox-text.js","sourceRoot":"","sources":["../../../src/core/status/inbox-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAEtC,SAAS,YAAY,CAAC,IAAkB;IACtC,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACzD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,GAAG,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"inbox-text.js","sourceRoot":"","sources":["../../../src/core/status/inbox-text.ts"],"names":[],"mappings":"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"}
|