@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-blocks.js","sourceRoot":"","sources":["../../../src/core/foundation/init-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,0HAA0H;IAC1H,
|
|
1
|
+
{"version":3,"file":"init-blocks.js","sourceRoot":"","sources":["../../../src/core/foundation/init-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,0HAA0H;IAC1H,8JAA8J;IAC9J,oNAAoN;IACpN,wDAAwD;IACxD,sKAAsK;IACtK,oLAAoL;IACpL,uJAAuJ;CACxJ,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAwD;IAClF,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE;IACvD;QACE,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,oEAAoE;KAC9E;IACD;QACE,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE,wDAAwD;KAClE;IACD;QACE,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE,yEAAyE;KACnF;IACD;QACE,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,iFAAiF;KAC3F;IACD,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,2DAA2D,EAAE;CAC7F,CAAC;AAEF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,0GAA0G;IAC1G,EAAE;IACF,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,OAAO,OAAO,OAAO,EAAE,CAAC;IAChF,EAAE;IACF,iCAAiC,qBAAqB,6GAA6G;IACnK,EAAE;IACF,+CAA+C;CAChD,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,gBAAgB;;;;;EAKvD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAIzB,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;EAgB9B,cAAc,EAAE,CAAC;AAEnB,yFAAyF;AACzF,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsGtD,cAAc,EAAE,CAAC;AAEnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,gBAAgB;;;;;;;;;EAS5D,cAAc,EAAE,CAAC;AAEnB,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type OsqConfig } from './config.js';
|
|
1
2
|
export { TEMPLATES_ROOT } from './package-root.js';
|
|
2
3
|
export { CLAUDE_PLAN_COMMAND_PATH, MANAGED_AGENTS_BLOCK, MANAGED_AGENTS_MD_BODY, MANAGED_CLAUDE_PLAN_COMMAND, MANAGED_PLANNER_BLOCK, OSQ_END_MARKER, OSQ_START_MARKER, } from './init-blocks.js';
|
|
3
4
|
export { inspectManagedBlock, updateAgentsMd, updateClaudePlanCommand, updatePlannerMd, } from './init-managed.js';
|
|
@@ -9,10 +10,13 @@ export interface InitResult {
|
|
|
9
10
|
refreshedFiles: string[];
|
|
10
11
|
currentFiles: string[];
|
|
11
12
|
updatedAgentsMd: boolean;
|
|
13
|
+
updatedProjectRules: boolean;
|
|
12
14
|
updatedPlannerMd: boolean;
|
|
13
15
|
updatedClaudePlanCommand: boolean;
|
|
16
|
+
updatedTraceability: boolean;
|
|
14
17
|
}
|
|
15
18
|
export declare function scaffoldProject(targetDir: string, options?: {
|
|
16
19
|
refreshSchema?: boolean;
|
|
20
|
+
config?: OsqConfig;
|
|
17
21
|
}): Promise<InitResult>;
|
|
18
22
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAsB7D,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wBAAwB,EAAE,OAAO,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAuCD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAO,GAC5D,OAAO,CAAC,UAAU,CAAC,CA0ErB"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { DEFAULT_CONFIG } from './config.js';
|
|
3
4
|
import { CLAUDE_PLAN_COMMAND_PATH } from './init-blocks.js';
|
|
4
5
|
import { updateAgentsMd, updateClaudePlanCommand, updatePlannerMd } from './init-managed.js';
|
|
5
6
|
import { TEMPLATES_ROOT } from './package-root.js';
|
|
7
|
+
import { writeRulesBlock } from './rules-block.js';
|
|
8
|
+
import { writeTraceabilityBlocks } from './traceability-block.js';
|
|
6
9
|
export { TEMPLATES_ROOT } from './package-root.js';
|
|
7
10
|
export { CLAUDE_PLAN_COMMAND_PATH, MANAGED_AGENTS_BLOCK, MANAGED_AGENTS_MD_BODY, MANAGED_CLAUDE_PLAN_COMMAND, MANAGED_PLANNER_BLOCK, OSQ_END_MARKER, OSQ_START_MARKER, } from './init-blocks.js';
|
|
8
11
|
export { inspectManagedBlock, updateAgentsMd, updateClaudePlanCommand, updatePlannerMd, } from './init-managed.js';
|
|
@@ -62,8 +65,10 @@ export async function scaffoldProject(targetDir, options = {}) {
|
|
|
62
65
|
refreshedFiles: [],
|
|
63
66
|
currentFiles: [],
|
|
64
67
|
updatedAgentsMd: false,
|
|
68
|
+
updatedProjectRules: false,
|
|
65
69
|
updatedPlannerMd: false,
|
|
66
70
|
updatedClaudePlanCommand: false,
|
|
71
|
+
updatedTraceability: false,
|
|
67
72
|
};
|
|
68
73
|
const dirsToCreate = [
|
|
69
74
|
'openspec',
|
|
@@ -102,8 +107,10 @@ export async function scaffoldProject(targetDir, options = {}) {
|
|
|
102
107
|
}
|
|
103
108
|
const claudeCommandExisted = await pathExists(path.join(targetDir, CLAUDE_PLAN_COMMAND_PATH));
|
|
104
109
|
result.updatedAgentsMd = await updateAgentsMd(targetDir);
|
|
110
|
+
result.updatedProjectRules = await writeRulesBlock(targetDir, options.config ?? DEFAULT_CONFIG);
|
|
105
111
|
result.updatedPlannerMd = await updatePlannerMd(targetDir);
|
|
106
112
|
result.updatedClaudePlanCommand = await updateClaudePlanCommand(targetDir);
|
|
113
|
+
result.updatedTraceability = await writeTraceabilityBlocks(targetDir, options.config ?? DEFAULT_CONFIG);
|
|
107
114
|
if (claudeCommandExisted)
|
|
108
115
|
result.existingFiles.push(CLAUDE_PLAN_COMMAND_PATH);
|
|
109
116
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/core/foundation/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/core/foundation/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { TEMPLATES_ROOT } from './package-root.js';
|
|
2
|
+
export declare const FALLBACK_PROPOSAL_MD = "---\ntitle: Change title\ndepends_on: []\nverify: node -e \"process.exit(0)\"\nfeatures:\n reads: []\n---\n## Goal\n\nWhat problem this change solves and why.\n\n## Verify\n\n`node -e \"process.exit(0)\"`\n\nReplace this planning sentinel, here and in the frontmatter, with the command\nthat verifies the completed change's final tree, and say what it proves.\n\n## Non-goals\n\n- What this change deliberately does not do.\n\n## Surface\n\n<!-- User-facing names this change adds, changes, or removes: commands, flags,\nconfig keys, frontmatter fields, document sections, dead reasons, and event\ntypes. Replace None with one line per name, such as\n\"- Added: `osq init --refresh-schema` (flag)\". -->\nNone\n\n## Decisions\n\n<!-- One line per accepted ADR that governs a capability this change writes,\nsaying what it means here, such as \"ADR 009: the adapter is the only module\nthat imports dockerode.\" Start a line \"Departs from ADR <n>:\" to record a\ndeparture and its reason. -->\nNone\n\n## Contract\n\n### Requirement: <requirement name>\n\nThe system SHALL <observable behavior>.\n\n#### Scenario: <scenario name>\n- **WHEN** <condition>\n- **THEN** <outcome>\n\n## Human steps\n\nNone\n\n## Delta\n\nDelta specs live beside the proposal as `specs/<capability>/spec.md`. Each holds\nthe exact text the capability spec will contain after the change, under\n`## ADDED Requirements`, `## MODIFIED Requirements`, `## REMOVED Requirements`,\nor `## RENAMED Requirements`; a modified requirement repeats its full text. List\neach delta here in one line and name any file two tasks share.\n\nA delta that introduces a new capability also declares the files it owns in a\n`### Requirement: Code ownership` block. Its `<!-- source: ... -->` comment lists\nthe owned path globs, comma-separated, and its scenario restates them:\n\n```markdown\n### Requirement: Code ownership\n<!-- source: src/core/example.ts, src/cli/example.ts -->\nThe <capability> capability SHALL own <subsystems>.\n\n#### Scenario: Codebase ownership boundaries\n- **WHEN** file ownership is resolved for <capability>\n- **THEN** system maps `src/core/example.ts` and `src/cli/example.ts` to <capability>\n```\n";
|
|
2
3
|
export declare function slugify(text: string): string;
|
|
3
4
|
export declare function getNextSpecNumber(specsDir: string): Promise<string>;
|
|
4
5
|
export interface NewSpecResult {
|
|
@@ -6,9 +7,11 @@ export interface NewSpecResult {
|
|
|
6
7
|
folderName: string;
|
|
7
8
|
folderPath: string;
|
|
8
9
|
}
|
|
10
|
+
type IdList = readonly string[];
|
|
9
11
|
export declare function createNewSpec(projectDir: string, title: string, options?: {
|
|
10
12
|
specsDirName?: string;
|
|
11
13
|
slug?: string;
|
|
12
|
-
dependsOn?:
|
|
14
|
+
dependsOn?: IdList;
|
|
15
|
+
fixes?: IdList;
|
|
13
16
|
}): Promise<NewSpecResult>;
|
|
14
17
|
//# sourceMappingURL=new.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/new.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/new.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,oBAAoB,opEAyEhC,CAAC;AAoBF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BzE;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAmBhC,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACzF,OAAO,CAAC,aAAa,CAAC,CAkFxB"}
|
|
@@ -4,7 +4,7 @@ import { getChangesDir } from '../status/layout.js';
|
|
|
4
4
|
import { DEFAULT_CONFIG } from './config.js';
|
|
5
5
|
import { TEMPLATES_ROOT } from './package-root.js';
|
|
6
6
|
export { TEMPLATES_ROOT } from './package-root.js';
|
|
7
|
-
const FALLBACK_PROPOSAL_MD = `---
|
|
7
|
+
export const FALLBACK_PROPOSAL_MD = `---
|
|
8
8
|
title: Change title
|
|
9
9
|
depends_on: []
|
|
10
10
|
verify: node -e "process.exit(0)"
|
|
@@ -34,6 +34,14 @@ types. Replace None with one line per name, such as
|
|
|
34
34
|
"- Added: \`osq init --refresh-schema\` (flag)". -->
|
|
35
35
|
None
|
|
36
36
|
|
|
37
|
+
## Decisions
|
|
38
|
+
|
|
39
|
+
<!-- One line per accepted ADR that governs a capability this change writes,
|
|
40
|
+
saying what it means here, such as "ADR 009: the adapter is the only module
|
|
41
|
+
that imports dockerode." Start a line "Departs from ADR <n>:" to record a
|
|
42
|
+
departure and its reason. -->
|
|
43
|
+
None
|
|
44
|
+
|
|
37
45
|
## Contract
|
|
38
46
|
|
|
39
47
|
### Requirement: <requirement name>
|
|
@@ -46,8 +54,7 @@ The system SHALL <observable behavior>.
|
|
|
46
54
|
|
|
47
55
|
## Human steps
|
|
48
56
|
|
|
49
|
-
|
|
50
|
-
yourself.
|
|
57
|
+
None
|
|
51
58
|
|
|
52
59
|
## Delta
|
|
53
60
|
|
|
@@ -120,16 +127,19 @@ export async function getNextSpecNumber(specsDir) {
|
|
|
120
127
|
return String(maxNum + 1).padStart(3, '0');
|
|
121
128
|
}
|
|
122
129
|
/**
|
|
123
|
-
* Replace only the proposal title and, when queue
|
|
124
|
-
*
|
|
125
|
-
* stay intact.
|
|
130
|
+
* Replace only the proposal title and, when supplied, the queue dependency and
|
|
131
|
+
* fix lines. Every other frontmatter key stays intact.
|
|
126
132
|
*/
|
|
127
|
-
function seedProposal(content, title, dependsOn) {
|
|
133
|
+
function seedProposal(content, title, dependsOn, fixes) {
|
|
128
134
|
let seeded = content.replace(/^title:\s*.*$/m, `title: ${title}`);
|
|
129
135
|
if (dependsOn !== undefined) {
|
|
130
136
|
const value = `[${dependsOn.map((id) => JSON.stringify(id)).join(', ')}]`;
|
|
131
137
|
seeded = seeded.replace(/^depends_on:\s*.*$/m, `depends_on: ${value}`);
|
|
132
138
|
}
|
|
139
|
+
if (fixes !== undefined && fixes.length > 0) {
|
|
140
|
+
const value = `[${fixes.map((id) => JSON.stringify(id)).join(', ')}]`;
|
|
141
|
+
seeded = seeded.replace(/^(depends_on:.*)$/m, `$1\nfixes: ${value}`);
|
|
142
|
+
}
|
|
133
143
|
return seeded;
|
|
134
144
|
}
|
|
135
145
|
export async function createNewSpec(projectDir, title, options = {}) {
|
|
@@ -178,7 +188,7 @@ export async function createNewSpec(projectDir, title, options = {}) {
|
|
|
178
188
|
proposalContent = await fs.readFile(path.join(TEMPLATES_ROOT, 'proposal.md'), 'utf8');
|
|
179
189
|
}
|
|
180
190
|
catch { }
|
|
181
|
-
const updatedProposal = seedProposal(proposalContent, trimmedTitle, options.dependsOn);
|
|
191
|
+
const updatedProposal = seedProposal(proposalContent, trimmedTitle, options.dependsOn, options.fixes);
|
|
182
192
|
await fs.writeFile(path.join(targetDir, 'proposal.md'), updatedProposal, 'utf8');
|
|
183
193
|
let tasksContent = FALLBACK_TASKS_MD;
|
|
184
194
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/core/foundation/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,oBAAoB,GAAG
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/core/foundation/new.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,10 @@
|
|
|
6
6
|
export declare const PACKAGE_ROOT: string;
|
|
7
7
|
/** Path to the package's bundled `templates/` directory. */
|
|
8
8
|
export declare const TEMPLATES_ROOT: string;
|
|
9
|
+
/**
|
|
10
|
+
* The running osq's own `index` entry, without an extension: `src/index` under
|
|
11
|
+
* `tsx` and `dist/index` once compiled. Config files import `@matteeh/osq`,
|
|
12
|
+
* which jiti aliases here so they resolve to the running osq.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PACKAGE_ENTRY: string;
|
|
9
15
|
//# sourceMappingURL=package-root.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-root.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/package-root.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAqE,CAAC;AAE/F,4DAA4D;AAC5D,eAAO,MAAM,cAAc,QAAuC,CAAC"}
|
|
1
|
+
{"version":3,"file":"package-root.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/package-root.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAqE,CAAC;AAE/F,4DAA4D;AAC5D,eAAO,MAAM,cAAc,QAAuC,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAuE,CAAC"}
|
|
@@ -8,4 +8,10 @@ import { fileURLToPath } from 'node:url';
|
|
|
8
8
|
export const PACKAGE_ROOT = path.resolve(fileURLToPath(new URL('../../../', import.meta.url)));
|
|
9
9
|
/** Path to the package's bundled `templates/` directory. */
|
|
10
10
|
export const TEMPLATES_ROOT = path.join(PACKAGE_ROOT, 'templates');
|
|
11
|
+
/**
|
|
12
|
+
* The running osq's own `index` entry, without an extension: `src/index` under
|
|
13
|
+
* `tsx` and `dist/index` once compiled. Config files import `@matteeh/osq`,
|
|
14
|
+
* which jiti aliases here so they resolve to the running osq.
|
|
15
|
+
*/
|
|
16
|
+
export const PACKAGE_ENTRY = path.resolve(fileURLToPath(new URL('../../index', import.meta.url)));
|
|
11
17
|
//# sourceMappingURL=package-root.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-root.js","sourceRoot":"","sources":["../../../src/core/foundation/package-root.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE/F,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"package-root.js","sourceRoot":"","sources":["../../../src/core/foundation/package-root.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE/F,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OsqConfig } from './config.js';
|
|
2
|
+
import { type DecisionRecords } from './decisions.js';
|
|
3
|
+
export declare const RULES_START_MARKER = "<!-- OSQ:RULES:START -->";
|
|
4
|
+
export declare const RULES_END_MARKER = "<!-- OSQ:RULES:END -->";
|
|
5
|
+
/** The canonical block for these records, or null with no system-wide ADR. */
|
|
6
|
+
export declare function renderRulesBlock(records: DecisionRecords): string | null;
|
|
7
|
+
/** Write, replace, or remove the block in AGENTS.md; true when the file changed. */
|
|
8
|
+
export declare function writeRulesBlock(projectRoot: string, config: OsqConfig): Promise<boolean>;
|
|
9
|
+
/** Error messages for a stale, missing, or unexpected block, and for too many rules. */
|
|
10
|
+
export declare function checkProjectRules(projectRoot: string, config: OsqConfig): Promise<string[]>;
|
|
11
|
+
//# sourceMappingURL=rules-block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-block.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/rules-block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,eAAe,EAAiC,MAAM,gBAAgB,CAAC;AAErF,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAC7D,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AAKzD,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAKxE;AAuCD,oFAAoF;AACpF,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAc9F;AAED,wFAAwF;AACxF,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBjG"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readDecisions, systemWideAdrs } from './decisions.js';
|
|
4
|
+
export const RULES_START_MARKER = '<!-- OSQ:RULES:START -->';
|
|
5
|
+
export const RULES_END_MARKER = '<!-- OSQ:RULES:END -->';
|
|
6
|
+
/** The managed block the rules block always sits directly before. */
|
|
7
|
+
const MANAGED_START_MARKER = '<!-- OSQ:START -->';
|
|
8
|
+
/** The canonical block for these records, or null with no system-wide ADR. */
|
|
9
|
+
export function renderRulesBlock(records) {
|
|
10
|
+
const rules = systemWideAdrs(records);
|
|
11
|
+
if (rules.length === 0)
|
|
12
|
+
return null;
|
|
13
|
+
const lines = rules.map((adr) => `- ${adr.rule} ADR ${adr.number}`);
|
|
14
|
+
return `${RULES_START_MARKER}\n## Project rules\n\n${lines.join('\n')}\n${RULES_END_MARKER}`;
|
|
15
|
+
}
|
|
16
|
+
/** The first ordered rules marker pair in `content`, or null. */
|
|
17
|
+
function findRulesRange(content) {
|
|
18
|
+
const start = content.indexOf(RULES_START_MARKER);
|
|
19
|
+
const end = content.indexOf(RULES_END_MARKER);
|
|
20
|
+
if (start === -1 || end < start)
|
|
21
|
+
return null;
|
|
22
|
+
return { start, end: end + RULES_END_MARKER.length };
|
|
23
|
+
}
|
|
24
|
+
/** Delete one block range and the one blank line that followed it. */
|
|
25
|
+
function removeRulesBlock(content, range) {
|
|
26
|
+
const after = content.slice(range.end);
|
|
27
|
+
const tail = after.startsWith('\n\n') ? 2 : after.startsWith('\n') ? 1 : 0;
|
|
28
|
+
return content.slice(0, range.start) + after.slice(tail);
|
|
29
|
+
}
|
|
30
|
+
/** Insert the block directly before the managed block, or append at the end. */
|
|
31
|
+
function insertRulesBlock(content, block) {
|
|
32
|
+
const index = content.indexOf(MANAGED_START_MARKER);
|
|
33
|
+
if (index !== -1)
|
|
34
|
+
return `${content.slice(0, index)}${block}\n\n${content.slice(index)}`;
|
|
35
|
+
const separator = content === '' || content.endsWith('\n\n') ? '' : content.endsWith('\n') ? '\n' : '\n\n';
|
|
36
|
+
return `${content}${separator}${block}\n`;
|
|
37
|
+
}
|
|
38
|
+
/** Replace, insert, or remove the canonical block in `content`. */
|
|
39
|
+
function applyRulesBlock(content, block) {
|
|
40
|
+
const range = findRulesRange(content);
|
|
41
|
+
if (block === null)
|
|
42
|
+
return range === null ? content : removeRulesBlock(content, range);
|
|
43
|
+
if (range !== null && content.slice(range.start, range.end) === block)
|
|
44
|
+
return content;
|
|
45
|
+
return insertRulesBlock(range === null ? content : removeRulesBlock(content, range), block);
|
|
46
|
+
}
|
|
47
|
+
/** Write, replace, or remove the block in AGENTS.md; true when the file changed. */
|
|
48
|
+
export async function writeRulesBlock(projectRoot, config) {
|
|
49
|
+
const agentsPath = path.join(projectRoot, 'AGENTS.md');
|
|
50
|
+
const [records, existing] = await Promise.all([
|
|
51
|
+
readDecisions(projectRoot, config),
|
|
52
|
+
fs.readFile(agentsPath, 'utf8').catch(() => null),
|
|
53
|
+
]);
|
|
54
|
+
const block = renderRulesBlock(records);
|
|
55
|
+
if (existing === null && block === null)
|
|
56
|
+
return false;
|
|
57
|
+
const content = existing ?? '';
|
|
58
|
+
const next = applyRulesBlock(content, block);
|
|
59
|
+
if (existing !== null && next === content)
|
|
60
|
+
return false;
|
|
61
|
+
await fs.mkdir(projectRoot, { recursive: true });
|
|
62
|
+
await fs.writeFile(agentsPath, next, 'utf8');
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/** Error messages for a stale, missing, or unexpected block, and for too many rules. */
|
|
66
|
+
export async function checkProjectRules(projectRoot, config) {
|
|
67
|
+
const records = await readDecisions(projectRoot, config);
|
|
68
|
+
const expected = renderRulesBlock(records);
|
|
69
|
+
const agents = await fs.readFile(path.join(projectRoot, 'AGENTS.md'), 'utf8').catch(() => '');
|
|
70
|
+
const range = findRulesRange(agents);
|
|
71
|
+
const current = range === null ? null : agents.slice(range.start, range.end);
|
|
72
|
+
const errors = [];
|
|
73
|
+
if (current !== expected) {
|
|
74
|
+
if (current === null) {
|
|
75
|
+
errors.push('AGENTS.md is missing its project rules block; run `osq init`');
|
|
76
|
+
}
|
|
77
|
+
else if (expected === null) {
|
|
78
|
+
errors.push('AGENTS.md has an unexpected project rules block; run `osq init`');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
errors.push('AGENTS.md project rules block is out of date; run `osq init`');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const count = systemWideAdrs(records).length;
|
|
85
|
+
if (count > config.limits.maxProjectRules) {
|
|
86
|
+
errors.push(`AGENTS.md holds ${count} project rules, more than limits.maxProjectRules (${config.limits.maxProjectRules})`);
|
|
87
|
+
}
|
|
88
|
+
return errors;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=rules-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-block.js","sourceRoot":"","sources":["../../../src/core/foundation/rules-block.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OsqConfig } from './config.js';
|
|
2
|
+
export declare const TRACEABILITY_START_MARKER = "<!-- OSQ:TRACEABILITY:START -->";
|
|
3
|
+
export declare const TRACEABILITY_END_MARKER = "<!-- OSQ:TRACEABILITY:END -->";
|
|
4
|
+
export type TraceabilityBlockFile = 'AGENTS.md' | 'PLANNER.md';
|
|
5
|
+
/** `every capability` for `'all'`, the opted-in names joined by `, `, else null. */
|
|
6
|
+
export declare function traceabilityScope(config: OsqConfig): string | null;
|
|
7
|
+
/** The canonical block for `file`, markers included, or null with none opted in. */
|
|
8
|
+
export declare function renderTraceabilityBlock(file: TraceabilityBlockFile, config: OsqConfig): string | null;
|
|
9
|
+
/** Write, replace, or remove both blocks; true when either file changed. */
|
|
10
|
+
export declare function writeTraceabilityBlocks(projectRoot: string, config: OsqConfig): Promise<boolean>;
|
|
11
|
+
/** Errors for a stale, missing, or unexpected block in either managed file. */
|
|
12
|
+
export declare function checkTraceabilityBlocks(projectRoot: string, config: OsqConfig): Promise<string[]>;
|
|
13
|
+
//# sourceMappingURL=traceability-block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceability-block.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/traceability-block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,eAAO,MAAM,yBAAyB,oCAAoC,CAAC;AAC3E,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AAEvE,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,YAAY,CAAC;AAI/D,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAKlE;AA4BD,oFAAoF;AACpF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,SAAS,GAChB,MAAM,GAAG,IAAI,CAIf;AA2CD,4EAA4E;AAC5E,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED,+EAA+E;AAC/E,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { OSQ_END_MARKER } from './init-blocks.js';
|
|
4
|
+
export const TRACEABILITY_START_MARKER = '<!-- OSQ:TRACEABILITY:START -->';
|
|
5
|
+
export const TRACEABILITY_END_MARKER = '<!-- OSQ:TRACEABILITY:END -->';
|
|
6
|
+
const TRACEABILITY_FILES = ['AGENTS.md', 'PLANNER.md'];
|
|
7
|
+
/** `every capability` for `'all'`, the opted-in names joined by `, `, else null. */
|
|
8
|
+
export function traceabilityScope(config) {
|
|
9
|
+
const capabilities = config.traceability?.capabilities ?? [];
|
|
10
|
+
if (capabilities === 'all')
|
|
11
|
+
return 'every capability';
|
|
12
|
+
if (capabilities.length === 0)
|
|
13
|
+
return null;
|
|
14
|
+
return capabilities.join(', ');
|
|
15
|
+
}
|
|
16
|
+
function plannerBlock(scope) {
|
|
17
|
+
return `${TRACEABILITY_START_MARKER}
|
|
18
|
+
## Traceability
|
|
19
|
+
|
|
20
|
+
Traceability covers ${scope}.
|
|
21
|
+
|
|
22
|
+
- Under \`## Scenarios\` in each task, list the scenarios its tests prove as \`- <capability>: <scenario name>\`, and scope their test files.
|
|
23
|
+
- Give a scenario with more than one case a table of exact inputs and outputs directly under its THEN.
|
|
24
|
+
- Put every test that names a modified scenario in its task's scope with \`tests.modify: true\`; \`osq lint\` lists them.
|
|
25
|
+
- Have exported functions tagged with \`@scenario\` and \`@adr\`.
|
|
26
|
+
${TRACEABILITY_END_MARKER}`;
|
|
27
|
+
}
|
|
28
|
+
function agentsBlock(scope) {
|
|
29
|
+
return `${TRACEABILITY_START_MARKER}
|
|
30
|
+
## Traceability
|
|
31
|
+
|
|
32
|
+
For ${scope}:
|
|
33
|
+
|
|
34
|
+
- Prove each scenario with \`import { scenario } from '@matteeh/osq/testing'\` and \`scenario('<capability>', '<scenario name>', { covers: fn }, ({ run, then, each }) => ...)\`, with literal names. Call \`fn\` only through \`run\`.
|
|
35
|
+
- Take expected values from the scenario's THEN lines and tables, never from running the code.
|
|
36
|
+
- Check a table with \`each\`. Check a rule that holds for every input with a property test inside \`then\`.
|
|
37
|
+
- Tag each exported function you add or change in a doc comment directly above \`export function\` or \`export const <name> = (...) =>\`: one \`@scenario <capability>: <scenario name>\` line per scenario it serves and one \`@adr <number>\` line per decision it follows.
|
|
38
|
+
${TRACEABILITY_END_MARKER}`;
|
|
39
|
+
}
|
|
40
|
+
/** The canonical block for `file`, markers included, or null with none opted in. */
|
|
41
|
+
export function renderTraceabilityBlock(file, config) {
|
|
42
|
+
const scope = traceabilityScope(config);
|
|
43
|
+
if (scope === null)
|
|
44
|
+
return null;
|
|
45
|
+
return file === 'PLANNER.md' ? plannerBlock(scope) : agentsBlock(scope);
|
|
46
|
+
}
|
|
47
|
+
function findTraceRange(content) {
|
|
48
|
+
const start = content.indexOf(TRACEABILITY_START_MARKER);
|
|
49
|
+
if (start === -1)
|
|
50
|
+
return null;
|
|
51
|
+
const endMarker = content.indexOf(TRACEABILITY_END_MARKER, start);
|
|
52
|
+
if (endMarker === -1)
|
|
53
|
+
return null;
|
|
54
|
+
return { start, end: endMarker + TRACEABILITY_END_MARKER.length };
|
|
55
|
+
}
|
|
56
|
+
/** Insert the block after the managed block's end line, or at the end of the file. */
|
|
57
|
+
function insertTraceabilityBlock(content, block) {
|
|
58
|
+
const end = content.indexOf(OSQ_END_MARKER);
|
|
59
|
+
if (end !== -1) {
|
|
60
|
+
const after = end + OSQ_END_MARKER.length;
|
|
61
|
+
const rest = content.slice(after);
|
|
62
|
+
const body = rest.startsWith('\n') ? rest.slice(1) : rest;
|
|
63
|
+
return `${content.slice(0, after)}\n${block}\n${body}`;
|
|
64
|
+
}
|
|
65
|
+
const lead = content === '' || content.endsWith('\n') ? '' : '\n';
|
|
66
|
+
return `${content}${lead}${block}\n`;
|
|
67
|
+
}
|
|
68
|
+
/** Undo {@link insertTraceabilityBlock}, dropping the newline it added. */
|
|
69
|
+
function removeTraceabilityBlock(content, range) {
|
|
70
|
+
const after = content.slice(range.end);
|
|
71
|
+
const tail = after.startsWith('\n') ? after.slice(1) : after;
|
|
72
|
+
return content.slice(0, range.start) + tail;
|
|
73
|
+
}
|
|
74
|
+
function applyTraceabilityBlock(content, block) {
|
|
75
|
+
const range = findTraceRange(content);
|
|
76
|
+
if (block === null)
|
|
77
|
+
return range === null ? content : removeTraceabilityBlock(content, range);
|
|
78
|
+
if (range !== null && content.slice(range.start, range.end) === block)
|
|
79
|
+
return content;
|
|
80
|
+
const base = range === null ? content : removeTraceabilityBlock(content, range);
|
|
81
|
+
return insertTraceabilityBlock(base, block);
|
|
82
|
+
}
|
|
83
|
+
/** Write, replace, or remove both blocks; true when either file changed. */
|
|
84
|
+
export async function writeTraceabilityBlocks(projectRoot, config) {
|
|
85
|
+
let changed = false;
|
|
86
|
+
for (const file of TRACEABILITY_FILES) {
|
|
87
|
+
const filePath = path.join(projectRoot, file);
|
|
88
|
+
const existing = await fs.readFile(filePath, 'utf8').catch(() => null);
|
|
89
|
+
const block = renderTraceabilityBlock(file, config);
|
|
90
|
+
if (existing === null && block === null)
|
|
91
|
+
continue;
|
|
92
|
+
const content = existing ?? '';
|
|
93
|
+
const next = applyTraceabilityBlock(content, block);
|
|
94
|
+
if (next === content)
|
|
95
|
+
continue;
|
|
96
|
+
await fs.mkdir(projectRoot, { recursive: true });
|
|
97
|
+
await fs.writeFile(filePath, next, 'utf8');
|
|
98
|
+
changed = true;
|
|
99
|
+
}
|
|
100
|
+
return changed;
|
|
101
|
+
}
|
|
102
|
+
/** Errors for a stale, missing, or unexpected block in either managed file. */
|
|
103
|
+
export async function checkTraceabilityBlocks(projectRoot, config) {
|
|
104
|
+
const errors = [];
|
|
105
|
+
for (const file of TRACEABILITY_FILES) {
|
|
106
|
+
const expected = renderTraceabilityBlock(file, config);
|
|
107
|
+
const content = await fs.readFile(path.join(projectRoot, file), 'utf8').catch(() => '');
|
|
108
|
+
const range = findTraceRange(content);
|
|
109
|
+
const current = range === null ? null : content.slice(range.start, range.end);
|
|
110
|
+
if (current === expected)
|
|
111
|
+
continue;
|
|
112
|
+
if (current === null) {
|
|
113
|
+
errors.push(`${file} traceability block is missing; run \`osq init\``);
|
|
114
|
+
}
|
|
115
|
+
else if (expected === null) {
|
|
116
|
+
errors.push(`${file} has an unexpected traceability block; run \`osq init\``);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
errors.push(`${file} traceability block is out of date; run \`osq init\``);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return errors;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=traceability-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceability-block.js","sourceRoot":"","sources":["../../../src/core/foundation/traceability-block.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"done.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/done.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"done.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/done.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAsED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,gBAAgB,CAAC,CA8B3B"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { findSpecFolder } from '../spec/approve.js';
|
|
4
3
|
import { parseTaskList } from '../spec/parser.js';
|
|
5
|
-
import {
|
|
4
|
+
import { findChange } from '../status/change-locations.js';
|
|
6
5
|
const CHECKLIST_LINE_REGEX = /^(\s*-\s+\[)([ xX])(\]\s*)((?:(\d+)[.)]\s+)?)(.*)$/;
|
|
7
6
|
/**
|
|
8
7
|
* Tick `taskNumber`'s checkbox in `tasks.md`, supporting flat and grouped
|
|
@@ -72,8 +71,7 @@ export async function markTaskDoneManual(projectRoot, specIdOrPrefix, taskNumber
|
|
|
72
71
|
if (!trimmedReason) {
|
|
73
72
|
throw new Error('a manual completion reason is required');
|
|
74
73
|
}
|
|
75
|
-
const
|
|
76
|
-
const folderPath = await findSpecFolder(specsDir, specIdOrPrefix);
|
|
74
|
+
const { folderPath } = await findChange(projectRoot, config, specIdOrPrefix);
|
|
77
75
|
const folderName = path.basename(folderPath);
|
|
78
76
|
const specId = folderName.match(/^(\d+)/)?.[1] ?? folderName;
|
|
79
77
|
if (!(await taskExists(folderPath, taskNumber))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"done.js","sourceRoot":"","sources":["../../../src/core/lifecycle/done.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"done.js","sourceRoot":"","sources":["../../../src/core/lifecycle/done.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScopeHashResult } from '../run/scope-hash.js';
|
|
2
|
+
/**
|
|
3
|
+
* Refresh a canonical done marker in place after a passing recertification.
|
|
4
|
+
* Every existing field is kept, the first trusted hash is retained as
|
|
5
|
+
* `original_scope_hash`, the current resolver-2 hashes and timestamp are
|
|
6
|
+
* recorded, and `recertification_count` increments.
|
|
7
|
+
*/
|
|
8
|
+
export declare function refreshRecertifiedDoneMarker(runDir: string, taskNumber: string, recordedHash: string, current: ScopeHashResult): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=recertify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recertify.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/recertify.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|