@deftai/directive-core 0.55.0
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/dist/architecture/sor-preflight.d.ts +66 -0
- package/dist/architecture/sor-preflight.js +903 -0
- package/dist/branch/evaluate.d.ts +23 -0
- package/dist/branch/evaluate.js +136 -0
- package/dist/branch/git.d.ts +15 -0
- package/dist/branch/git.js +42 -0
- package/dist/branch/index.d.ts +3 -0
- package/dist/branch/index.js +3 -0
- package/dist/cache/cli.d.ts +3 -0
- package/dist/cache/cli.js +8 -0
- package/dist/cache/constants.d.ts +12 -0
- package/dist/cache/constants.js +14 -0
- package/dist/cache/errors.d.ts +34 -0
- package/dist/cache/errors.js +52 -0
- package/dist/cache/fetch.d.ts +101 -0
- package/dist/cache/fetch.js +413 -0
- package/dist/cache/index.d.ts +14 -0
- package/dist/cache/index.js +14 -0
- package/dist/cache/io.d.ts +15 -0
- package/dist/cache/io.js +53 -0
- package/dist/cache/json.d.ts +11 -0
- package/dist/cache/json.js +32 -0
- package/dist/cache/main.d.ts +3 -0
- package/dist/cache/main.js +319 -0
- package/dist/cache/operations.d.ts +34 -0
- package/dist/cache/operations.js +348 -0
- package/dist/cache/paths.d.ts +7 -0
- package/dist/cache/paths.js +27 -0
- package/dist/cache/quota.d.ts +56 -0
- package/dist/cache/quota.js +191 -0
- package/dist/cache/scanner.d.ts +28 -0
- package/dist/cache/scanner.js +362 -0
- package/dist/cache/test-helpers.d.ts +10 -0
- package/dist/cache/test-helpers.js +17 -0
- package/dist/cache/time.d.ts +9 -0
- package/dist/cache/time.js +20 -0
- package/dist/cache/types.d.ts +50 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/validate.d.ts +3 -0
- package/dist/cache/validate.js +118 -0
- package/dist/capacity/backfill.d.ts +52 -0
- package/dist/capacity/backfill.js +429 -0
- package/dist/capacity/index.d.ts +3 -0
- package/dist/capacity/index.js +3 -0
- package/dist/capacity/show.d.ts +73 -0
- package/dist/capacity/show.js +387 -0
- package/dist/check/index.d.ts +3 -0
- package/dist/check/index.js +2 -0
- package/dist/check/orchestrator.d.ts +51 -0
- package/dist/check/orchestrator.js +71 -0
- package/dist/codebase/constants.d.ts +2 -0
- package/dist/codebase/constants.js +2 -0
- package/dist/codebase/default-extractor.d.ts +28 -0
- package/dist/codebase/default-extractor.js +713 -0
- package/dist/codebase/index.d.ts +8 -0
- package/dist/codebase/index.js +8 -0
- package/dist/codebase/json.d.ts +14 -0
- package/dist/codebase/json.js +45 -0
- package/dist/codebase/map-fresh.d.ts +11 -0
- package/dist/codebase/map-fresh.js +125 -0
- package/dist/codebase/map.d.ts +19 -0
- package/dist/codebase/map.js +345 -0
- package/dist/codebase/projection-registry.d.ts +25 -0
- package/dist/codebase/projection-registry.js +93 -0
- package/dist/codebase/provider.d.ts +30 -0
- package/dist/codebase/provider.js +696 -0
- package/dist/content-contracts/skills/greptile-detector.d.ts +56 -0
- package/dist/content-contracts/skills/greptile-detector.js +368 -0
- package/dist/content-contracts/skills/helpers.d.ts +24 -0
- package/dist/content-contracts/skills/helpers.js +73 -0
- package/dist/content-contracts/skills/skill-frontmatter.d.ts +7 -0
- package/dist/content-contracts/skills/skill-frontmatter.js +65 -0
- package/dist/content-contracts/standards/_helpers.d.ts +49 -0
- package/dist/content-contracts/standards/_helpers.js +227 -0
- package/dist/content-contracts/standards/_shapes.d.ts +12 -0
- package/dist/content-contracts/standards/_shapes.js +45 -0
- package/dist/content-contracts/standards/_taskfile-helpers.d.ts +12 -0
- package/dist/content-contracts/standards/_taskfile-helpers.js +61 -0
- package/dist/content-root.d.ts +47 -0
- package/dist/content-root.js +89 -0
- package/dist/doctor/agents-md.d.ts +14 -0
- package/dist/doctor/agents-md.js +263 -0
- package/dist/doctor/checks.d.ts +16 -0
- package/dist/doctor/checks.js +351 -0
- package/dist/doctor/cli.d.ts +2 -0
- package/dist/doctor/cli.js +7 -0
- package/dist/doctor/constants.d.ts +15 -0
- package/dist/doctor/constants.js +40 -0
- package/dist/doctor/doctor-state.d.ts +16 -0
- package/dist/doctor/doctor-state.js +117 -0
- package/dist/doctor/flags.d.ts +5 -0
- package/dist/doctor/flags.js +63 -0
- package/dist/doctor/index.d.ts +14 -0
- package/dist/doctor/index.js +14 -0
- package/dist/doctor/json.d.ts +3 -0
- package/dist/doctor/json.js +21 -0
- package/dist/doctor/main.d.ts +3 -0
- package/dist/doctor/main.js +387 -0
- package/dist/doctor/manifest.d.ts +11 -0
- package/dist/doctor/manifest.js +114 -0
- package/dist/doctor/output.d.ts +19 -0
- package/dist/doctor/output.js +49 -0
- package/dist/doctor/paths.d.ts +16 -0
- package/dist/doctor/paths.js +106 -0
- package/dist/doctor/payload-staleness.d.ts +13 -0
- package/dist/doctor/payload-staleness.js +165 -0
- package/dist/doctor/taskfile.d.ts +6 -0
- package/dist/doctor/taskfile.js +65 -0
- package/dist/doctor/types.d.ts +76 -0
- package/dist/doctor/types.js +4 -0
- package/dist/doctor/which.d.ts +3 -0
- package/dist/doctor/which.js +17 -0
- package/dist/encoding/evaluate.d.ts +19 -0
- package/dist/encoding/evaluate.js +155 -0
- package/dist/encoding/git.d.ts +11 -0
- package/dist/encoding/git.js +36 -0
- package/dist/encoding/index.d.ts +6 -0
- package/dist/encoding/index.js +6 -0
- package/dist/encoding/patterns.d.ts +29 -0
- package/dist/encoding/patterns.js +109 -0
- package/dist/encoding/scan.d.ts +24 -0
- package/dist/encoding/scan.js +182 -0
- package/dist/encoding/text.d.ts +21 -0
- package/dist/encoding/text.js +111 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +55 -0
- package/dist/intake/candidates-log.d.ts +20 -0
- package/dist/intake/candidates-log.js +224 -0
- package/dist/intake/github-auth-modes-cli.d.ts +3 -0
- package/dist/intake/github-auth-modes-cli.js +23 -0
- package/dist/intake/github-auth-modes.d.ts +54 -0
- package/dist/intake/github-auth-modes.js +275 -0
- package/dist/intake/github-body-cli.d.ts +3 -0
- package/dist/intake/github-body-cli.js +30 -0
- package/dist/intake/github-body.d.ts +48 -0
- package/dist/intake/github-body.js +151 -0
- package/dist/intake/index.d.ts +15 -0
- package/dist/intake/index.js +15 -0
- package/dist/intake/issue-emit-cli.d.ts +3 -0
- package/dist/intake/issue-emit-cli.js +34 -0
- package/dist/intake/issue-emit.d.ts +63 -0
- package/dist/intake/issue-emit.js +351 -0
- package/dist/intake/issue-ingest-cli.d.ts +3 -0
- package/dist/intake/issue-ingest-cli.js +33 -0
- package/dist/intake/issue-ingest.d.ts +53 -0
- package/dist/intake/issue-ingest.js +477 -0
- package/dist/intake/markdown-scanners.d.ts +23 -0
- package/dist/intake/markdown-scanners.js +247 -0
- package/dist/intake/parity-scenarios.d.ts +22 -0
- package/dist/intake/parity-scenarios.js +32 -0
- package/dist/intake/platform-capabilities.d.ts +11 -0
- package/dist/intake/platform-capabilities.js +34 -0
- package/dist/intake/reconcile-issues-cli.d.ts +3 -0
- package/dist/intake/reconcile-issues-cli.js +31 -0
- package/dist/intake/reconcile-issues.d.ts +60 -0
- package/dist/intake/reconcile-issues.js +756 -0
- package/dist/integration-e2e/bootstrap-cache-module.d.ts +5 -0
- package/dist/integration-e2e/bootstrap-cache-module.js +21 -0
- package/dist/integration-e2e/helpers.d.ts +28 -0
- package/dist/integration-e2e/helpers.js +157 -0
- package/dist/lifecycle/event-detect.d.ts +32 -0
- package/dist/lifecycle/event-detect.js +172 -0
- package/dist/lifecycle/events.d.ts +45 -0
- package/dist/lifecycle/events.js +340 -0
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/lifecycle-hygiene.d.ts +59 -0
- package/dist/lifecycle/lifecycle-hygiene.js +388 -0
- package/dist/orchestration/index.d.ts +7 -0
- package/dist/orchestration/index.js +7 -0
- package/dist/orchestration/judgment-policy.d.ts +23 -0
- package/dist/orchestration/judgment-policy.js +228 -0
- package/dist/orchestration/pathspec.d.ts +11 -0
- package/dist/orchestration/pathspec.js +95 -0
- package/dist/orchestration/probe-session.d.ts +74 -0
- package/dist/orchestration/probe-session.js +478 -0
- package/dist/orchestration/subagent-monitor.d.ts +64 -0
- package/dist/orchestration/subagent-monitor.js +405 -0
- package/dist/orchestration/verify-investigation.d.ts +27 -0
- package/dist/orchestration/verify-investigation.js +314 -0
- package/dist/orchestration/verify-judgment-gates.d.ts +66 -0
- package/dist/orchestration/verify-judgment-gates.js +710 -0
- package/dist/packs/index.d.ts +4 -0
- package/dist/packs/index.js +4 -0
- package/dist/packs/pack-render.d.ts +31 -0
- package/dist/packs/pack-render.js +357 -0
- package/dist/packs/packs-slice.d.ts +58 -0
- package/dist/packs/packs-slice.js +649 -0
- package/dist/packs/quarantine-ext.d.ts +7 -0
- package/dist/packs/quarantine-ext.js +164 -0
- package/dist/platform/agents-md.d.ts +31 -0
- package/dist/platform/agents-md.js +320 -0
- package/dist/platform/changelog-cli.d.ts +3 -0
- package/dist/platform/changelog-cli.js +64 -0
- package/dist/platform/constants.d.ts +20 -0
- package/dist/platform/constants.js +27 -0
- package/dist/platform/index.d.ts +9 -0
- package/dist/platform/index.js +9 -0
- package/dist/platform/ip-risk.d.ts +10 -0
- package/dist/platform/ip-risk.js +235 -0
- package/dist/platform/linear-scan.d.ts +36 -0
- package/dist/platform/linear-scan.js +174 -0
- package/dist/platform/platform-capabilities.d.ts +45 -0
- package/dist/platform/platform-capabilities.js +190 -0
- package/dist/platform/resolve-changelog-unreleased.d.ts +24 -0
- package/dist/platform/resolve-changelog-unreleased.js +364 -0
- package/dist/platform/resolve-version.d.ts +22 -0
- package/dist/platform/resolve-version.js +303 -0
- package/dist/platform/slug-normalize.d.ts +9 -0
- package/dist/platform/slug-normalize.js +110 -0
- package/dist/policy/autonomy.d.ts +43 -0
- package/dist/policy/autonomy.js +220 -0
- package/dist/policy/capacity.d.ts +45 -0
- package/dist/policy/capacity.js +251 -0
- package/dist/policy/decisions.d.ts +26 -0
- package/dist/policy/decisions.js +114 -0
- package/dist/policy/disclosure.d.ts +4 -0
- package/dist/policy/disclosure.js +19 -0
- package/dist/policy/index.d.ts +43 -0
- package/dist/policy/index.js +298 -0
- package/dist/policy/resolve.d.ts +38 -0
- package/dist/policy/resolve.js +228 -0
- package/dist/policy/wip.d.ts +15 -0
- package/dist/policy/wip.js +81 -0
- package/dist/pr-closing-keywords/constants.d.ts +6 -0
- package/dist/pr-closing-keywords/constants.js +6 -0
- package/dist/pr-closing-keywords/detect.d.ts +5 -0
- package/dist/pr-closing-keywords/detect.js +113 -0
- package/dist/pr-closing-keywords/gh.d.ts +6 -0
- package/dist/pr-closing-keywords/gh.js +129 -0
- package/dist/pr-closing-keywords/index.d.ts +7 -0
- package/dist/pr-closing-keywords/index.js +6 -0
- package/dist/pr-closing-keywords/io.d.ts +3 -0
- package/dist/pr-closing-keywords/io.js +22 -0
- package/dist/pr-closing-keywords/main.d.ts +9 -0
- package/dist/pr-closing-keywords/main.js +246 -0
- package/dist/pr-closing-keywords/types.d.ts +23 -0
- package/dist/pr-closing-keywords/types.js +2 -0
- package/dist/pr-merge-readiness/compute.d.ts +7 -0
- package/dist/pr-merge-readiness/compute.js +210 -0
- package/dist/pr-merge-readiness/constants.d.ts +20 -0
- package/dist/pr-merge-readiness/constants.js +32 -0
- package/dist/pr-merge-readiness/evaluate.d.ts +5 -0
- package/dist/pr-merge-readiness/evaluate.js +48 -0
- package/dist/pr-merge-readiness/gh.d.ts +22 -0
- package/dist/pr-merge-readiness/gh.js +281 -0
- package/dist/pr-merge-readiness/index.d.ts +9 -0
- package/dist/pr-merge-readiness/index.js +8 -0
- package/dist/pr-merge-readiness/main.d.ts +14 -0
- package/dist/pr-merge-readiness/main.js +67 -0
- package/dist/pr-merge-readiness/output.d.ts +7 -0
- package/dist/pr-merge-readiness/output.js +98 -0
- package/dist/pr-merge-readiness/parse.d.ts +6 -0
- package/dist/pr-merge-readiness/parse.js +83 -0
- package/dist/pr-merge-readiness/types.d.ts +29 -0
- package/dist/pr-merge-readiness/types.js +2 -0
- package/dist/pr-monitor/cadence.d.ts +3 -0
- package/dist/pr-monitor/cadence.js +12 -0
- package/dist/pr-monitor/constants.d.ts +8 -0
- package/dist/pr-monitor/constants.js +12 -0
- package/dist/pr-monitor/index.d.ts +7 -0
- package/dist/pr-monitor/index.js +6 -0
- package/dist/pr-monitor/main.d.ts +17 -0
- package/dist/pr-monitor/main.js +169 -0
- package/dist/pr-monitor/monitor.d.ts +9 -0
- package/dist/pr-monitor/monitor.js +106 -0
- package/dist/pr-monitor/readiness.d.ts +6 -0
- package/dist/pr-monitor/readiness.js +64 -0
- package/dist/pr-monitor/types.d.ts +30 -0
- package/dist/pr-monitor/types.js +2 -0
- package/dist/pr-protected-issues/constants.d.ts +7 -0
- package/dist/pr-protected-issues/constants.js +7 -0
- package/dist/pr-protected-issues/gh.d.ts +9 -0
- package/dist/pr-protected-issues/gh.js +96 -0
- package/dist/pr-protected-issues/index.d.ts +6 -0
- package/dist/pr-protected-issues/index.js +5 -0
- package/dist/pr-protected-issues/main.d.ts +14 -0
- package/dist/pr-protected-issues/main.js +128 -0
- package/dist/pr-protected-issues/parse.d.ts +6 -0
- package/dist/pr-protected-issues/parse.js +21 -0
- package/dist/pr-protected-issues/types.d.ts +8 -0
- package/dist/pr-protected-issues/types.js +2 -0
- package/dist/pr-wait-mergeable/cascade.d.ts +12 -0
- package/dist/pr-wait-mergeable/cascade.js +107 -0
- package/dist/pr-wait-mergeable/classify.d.ts +5 -0
- package/dist/pr-wait-mergeable/classify.js +47 -0
- package/dist/pr-wait-mergeable/constants.d.ts +5 -0
- package/dist/pr-wait-mergeable/constants.js +5 -0
- package/dist/pr-wait-mergeable/index.d.ts +8 -0
- package/dist/pr-wait-mergeable/index.js +7 -0
- package/dist/pr-wait-mergeable/main.d.ts +18 -0
- package/dist/pr-wait-mergeable/main.js +213 -0
- package/dist/pr-wait-mergeable/result.d.ts +9 -0
- package/dist/pr-wait-mergeable/result.js +38 -0
- package/dist/pr-wait-mergeable/types.d.ts +16 -0
- package/dist/pr-wait-mergeable/types.js +2 -0
- package/dist/pr-wait-mergeable/wrappers.d.ts +26 -0
- package/dist/pr-wait-mergeable/wrappers.js +103 -0
- package/dist/preflight/evaluate.d.ts +22 -0
- package/dist/preflight/evaluate.js +137 -0
- package/dist/preflight/index.d.ts +3 -0
- package/dist/preflight/index.js +2 -0
- package/dist/preflight-cache/evaluate.d.ts +40 -0
- package/dist/preflight-cache/evaluate.js +481 -0
- package/dist/preflight-cache/index.d.ts +3 -0
- package/dist/preflight-cache/index.js +2 -0
- package/dist/preflight-gh/classifier.d.ts +56 -0
- package/dist/preflight-gh/classifier.js +415 -0
- package/dist/preflight-gh/index.d.ts +3 -0
- package/dist/preflight-gh/index.js +2 -0
- package/dist/release/changelog.d.ts +9 -0
- package/dist/release/changelog.js +105 -0
- package/dist/release/cli.d.ts +2 -0
- package/dist/release/cli.js +7 -0
- package/dist/release/constants.d.ts +22 -0
- package/dist/release/constants.js +85 -0
- package/dist/release/flags.d.ts +4 -0
- package/dist/release/flags.js +131 -0
- package/dist/release/gh.d.ts +16 -0
- package/dist/release/gh.js +210 -0
- package/dist/release/git.d.ts +11 -0
- package/dist/release/git.js +84 -0
- package/dist/release/index.d.ts +14 -0
- package/dist/release/index.js +15 -0
- package/dist/release/main.d.ts +3 -0
- package/dist/release/main.js +47 -0
- package/dist/release/paths.d.ts +6 -0
- package/dist/release/paths.js +39 -0
- package/dist/release/pipeline.d.ts +6 -0
- package/dist/release/pipeline.js +314 -0
- package/dist/release/pyproject-sync.d.ts +6 -0
- package/dist/release/pyproject-sync.js +52 -0
- package/dist/release/pyproject.d.ts +3 -0
- package/dist/release/pyproject.js +33 -0
- package/dist/release/python-bridge.d.ts +7 -0
- package/dist/release/python-bridge.js +144 -0
- package/dist/release/spawn.d.ts +8 -0
- package/dist/release/spawn.js +44 -0
- package/dist/release/types.d.ts +58 -0
- package/dist/release/types.js +2 -0
- package/dist/release/version.d.ts +11 -0
- package/dist/release/version.js +74 -0
- package/dist/release-e2e/constants.d.ts +22 -0
- package/dist/release-e2e/constants.js +43 -0
- package/dist/release-e2e/entrypoint-worker-thread.d.ts +2 -0
- package/dist/release-e2e/entrypoint-worker-thread.js +22 -0
- package/dist/release-e2e/entrypoint-worker.d.ts +13 -0
- package/dist/release-e2e/entrypoint-worker.js +50 -0
- package/dist/release-e2e/entrypoint.d.ts +40 -0
- package/dist/release-e2e/entrypoint.js +257 -0
- package/dist/release-e2e/flags.d.ts +5 -0
- package/dist/release-e2e/flags.js +80 -0
- package/dist/release-e2e/gh-ops.d.ts +5 -0
- package/dist/release-e2e/gh-ops.js +72 -0
- package/dist/release-e2e/git-ops.d.ts +6 -0
- package/dist/release-e2e/git-ops.js +47 -0
- package/dist/release-e2e/index.d.ts +10 -0
- package/dist/release-e2e/index.js +10 -0
- package/dist/release-e2e/main.d.ts +4 -0
- package/dist/release-e2e/main.js +78 -0
- package/dist/release-e2e/npm-ops.d.ts +29 -0
- package/dist/release-e2e/npm-ops.js +149 -0
- package/dist/release-e2e/rehearsal.d.ts +3 -0
- package/dist/release-e2e/rehearsal.js +51 -0
- package/dist/release-e2e/rollback-bridge.d.ts +3 -0
- package/dist/release-e2e/rollback-bridge.js +20 -0
- package/dist/release-e2e/types.d.ts +40 -0
- package/dist/release-e2e/types.js +2 -0
- package/dist/release-publish/cli.d.ts +2 -0
- package/dist/release-publish/cli.js +7 -0
- package/dist/release-publish/constants.d.ts +4 -0
- package/dist/release-publish/constants.js +24 -0
- package/dist/release-publish/flags.d.ts +5 -0
- package/dist/release-publish/flags.js +67 -0
- package/dist/release-publish/gh-api.d.ts +6 -0
- package/dist/release-publish/gh-api.js +102 -0
- package/dist/release-publish/index.d.ts +7 -0
- package/dist/release-publish/index.js +8 -0
- package/dist/release-publish/main.d.ts +3 -0
- package/dist/release-publish/main.js +38 -0
- package/dist/release-publish/pipeline.d.ts +4 -0
- package/dist/release-publish/pipeline.js +46 -0
- package/dist/release-publish/types.d.ts +25 -0
- package/dist/release-publish/types.js +2 -0
- package/dist/release-rollback/constants.d.ts +18 -0
- package/dist/release-rollback/constants.js +55 -0
- package/dist/release-rollback/flags.d.ts +4 -0
- package/dist/release-rollback/flags.js +136 -0
- package/dist/release-rollback/gh.d.ts +5 -0
- package/dist/release-rollback/gh.js +71 -0
- package/dist/release-rollback/git.d.ts +9 -0
- package/dist/release-rollback/git.js +87 -0
- package/dist/release-rollback/guard.d.ts +12 -0
- package/dist/release-rollback/guard.js +97 -0
- package/dist/release-rollback/index.d.ts +9 -0
- package/dist/release-rollback/index.js +10 -0
- package/dist/release-rollback/main.d.ts +3 -0
- package/dist/release-rollback/main.js +51 -0
- package/dist/release-rollback/pipeline.d.ts +7 -0
- package/dist/release-rollback/pipeline.js +221 -0
- package/dist/release-rollback/types.d.ts +41 -0
- package/dist/release-rollback/types.js +2 -0
- package/dist/render/constants.d.ts +16 -0
- package/dist/render/constants.js +78 -0
- package/dist/render/framework-commands.d.ts +41 -0
- package/dist/render/framework-commands.js +416 -0
- package/dist/render/index.d.ts +15 -0
- package/dist/render/index.js +15 -0
- package/dist/render/prd-render.d.ts +14 -0
- package/dist/render/prd-render.js +79 -0
- package/dist/render/project-render.d.ts +20 -0
- package/dist/render/project-render.js +169 -0
- package/dist/render/roadmap-render.d.ts +8 -0
- package/dist/render/roadmap-render.js +387 -0
- package/dist/render/spec-render.d.ts +13 -0
- package/dist/render/spec-render.js +362 -0
- package/dist/render/spec-validate.d.ts +6 -0
- package/dist/render/spec-validate.js +157 -0
- package/dist/render/text-utils.d.ts +8 -0
- package/dist/render/text-utils.js +72 -0
- package/dist/scm/argv.d.ts +7 -0
- package/dist/scm/argv.js +54 -0
- package/dist/scm/binary.d.ts +11 -0
- package/dist/scm/binary.js +35 -0
- package/dist/scm/build-command.d.ts +11 -0
- package/dist/scm/build-command.js +23 -0
- package/dist/scm/call.d.ts +25 -0
- package/dist/scm/call.js +38 -0
- package/dist/scm/cli.d.ts +3 -0
- package/dist/scm/cli.js +7 -0
- package/dist/scm/constants.d.ts +11 -0
- package/dist/scm/constants.js +11 -0
- package/dist/scm/errors.d.ts +5 -0
- package/dist/scm/errors.js +8 -0
- package/dist/scm/gh-rest.d.ts +74 -0
- package/dist/scm/gh-rest.js +326 -0
- package/dist/scm/index.d.ts +11 -0
- package/dist/scm/index.js +11 -0
- package/dist/scm/main.d.ts +12 -0
- package/dist/scm/main.js +65 -0
- package/dist/scm/py-format.d.ts +9 -0
- package/dist/scm/py-format.js +31 -0
- package/dist/scm/rest-dispatch.d.ts +14 -0
- package/dist/scm/rest-dispatch.js +175 -0
- package/dist/scope/audit-log.d.ts +14 -0
- package/dist/scope/audit-log.js +186 -0
- package/dist/scope/capacity-stamp.d.ts +3 -0
- package/dist/scope/capacity-stamp.js +45 -0
- package/dist/scope/cli.d.ts +4 -0
- package/dist/scope/cli.js +11 -0
- package/dist/scope/constants.d.ts +19 -0
- package/dist/scope/constants.js +44 -0
- package/dist/scope/decompose.d.ts +42 -0
- package/dist/scope/decompose.js +1016 -0
- package/dist/scope/decomposed-refs.d.ts +6 -0
- package/dist/scope/decomposed-refs.js +173 -0
- package/dist/scope/demote.d.ts +24 -0
- package/dist/scope/demote.js +209 -0
- package/dist/scope/index.d.ts +12 -0
- package/dist/scope/index.js +12 -0
- package/dist/scope/main.d.ts +30 -0
- package/dist/scope/main.js +365 -0
- package/dist/scope/project-context.d.ts +6 -0
- package/dist/scope/project-context.js +55 -0
- package/dist/scope/project-definition-sync.d.ts +3 -0
- package/dist/scope/project-definition-sync.js +157 -0
- package/dist/scope/transition.d.ts +10 -0
- package/dist/scope/transition.js +133 -0
- package/dist/scope/undo.d.ts +25 -0
- package/dist/scope/undo.js +334 -0
- package/dist/scope/vbrief-json.d.ts +4 -0
- package/dist/scope/vbrief-json.js +8 -0
- package/dist/scope/vbrief-ref.d.ts +11 -0
- package/dist/scope/vbrief-ref.js +100 -0
- package/dist/scope/wip-cap-check.d.ts +11 -0
- package/dist/scope/wip-cap-check.js +23 -0
- package/dist/session/git.d.ts +14 -0
- package/dist/session/git.js +49 -0
- package/dist/session/index.d.ts +9 -0
- package/dist/session/index.js +9 -0
- package/dist/session/json.d.ts +7 -0
- package/dist/session/json.js +29 -0
- package/dist/session/resume-conditions.d.ts +56 -0
- package/dist/session/resume-conditions.js +486 -0
- package/dist/session/ritual-entrypoint.d.ts +20 -0
- package/dist/session/ritual-entrypoint.js +86 -0
- package/dist/session/ritual-sentinel.d.ts +58 -0
- package/dist/session/ritual-sentinel.js +338 -0
- package/dist/session/session-start-hook.d.ts +14 -0
- package/dist/session/session-start-hook.js +53 -0
- package/dist/session/session-start.d.ts +41 -0
- package/dist/session/session-start.js +290 -0
- package/dist/session/staleness.d.ts +8 -0
- package/dist/session/staleness.js +91 -0
- package/dist/session/time.d.ts +5 -0
- package/dist/session/time.js +19 -0
- package/dist/session/verify-session-ritual.d.ts +29 -0
- package/dist/session/verify-session-ritual.js +222 -0
- package/dist/slice/cli.d.ts +21 -0
- package/dist/slice/cli.js +248 -0
- package/dist/slice/constants.d.ts +18 -0
- package/dist/slice/constants.js +30 -0
- package/dist/slice/errors.d.ts +9 -0
- package/dist/slice/errors.js +15 -0
- package/dist/slice/existing.d.ts +53 -0
- package/dist/slice/existing.js +344 -0
- package/dist/slice/index.d.ts +10 -0
- package/dist/slice/index.js +10 -0
- package/dist/slice/json.d.ts +7 -0
- package/dist/slice/json.js +25 -0
- package/dist/slice/lock.d.ts +9 -0
- package/dist/slice/lock.js +59 -0
- package/dist/slice/project-context.d.ts +15 -0
- package/dist/slice/project-context.js +87 -0
- package/dist/slice/record.d.ts +50 -0
- package/dist/slice/record.js +139 -0
- package/dist/slice/validate.d.ts +3 -0
- package/dist/slice/validate.js +86 -0
- package/dist/story-ready/allocation.d.ts +14 -0
- package/dist/story-ready/allocation.js +61 -0
- package/dist/story-ready/evaluate.d.ts +23 -0
- package/dist/story-ready/evaluate.js +161 -0
- package/dist/story-ready/git.d.ts +6 -0
- package/dist/story-ready/git.js +26 -0
- package/dist/story-ready/index.d.ts +4 -0
- package/dist/story-ready/index.js +4 -0
- package/dist/subprocess/max-buffer.d.ts +18 -0
- package/dist/subprocess/max-buffer.js +18 -0
- package/dist/swarm/complete-cohort-cli.d.ts +3 -0
- package/dist/swarm/complete-cohort-cli.js +42 -0
- package/dist/swarm/complete-cohort.d.ts +34 -0
- package/dist/swarm/complete-cohort.js +407 -0
- package/dist/swarm/constants.d.ts +18 -0
- package/dist/swarm/constants.js +24 -0
- package/dist/swarm/index.d.ts +18 -0
- package/dist/swarm/index.js +18 -0
- package/dist/swarm/launch-cli.d.ts +5 -0
- package/dist/swarm/launch-cli.js +111 -0
- package/dist/swarm/launch.d.ts +78 -0
- package/dist/swarm/launch.js +587 -0
- package/dist/swarm/readiness-cli.d.ts +3 -0
- package/dist/swarm/readiness-cli.js +25 -0
- package/dist/swarm/readiness.d.ts +24 -0
- package/dist/swarm/readiness.js +606 -0
- package/dist/swarm/routing-set-cli.d.ts +3 -0
- package/dist/swarm/routing-set-cli.js +82 -0
- package/dist/swarm/routing-verify-cli.d.ts +3 -0
- package/dist/swarm/routing-verify-cli.js +51 -0
- package/dist/swarm/routing-verify.d.ts +20 -0
- package/dist/swarm/routing-verify.js +104 -0
- package/dist/swarm/routing.d.ts +57 -0
- package/dist/swarm/routing.js +173 -0
- package/dist/swarm/subagent-backend.d.ts +22 -0
- package/dist/swarm/subagent-backend.js +162 -0
- package/dist/swarm/subprocess.d.ts +10 -0
- package/dist/swarm/subprocess.js +34 -0
- package/dist/swarm/verify-review-clean-cli.d.ts +3 -0
- package/dist/swarm/verify-review-clean-cli.js +38 -0
- package/dist/swarm/verify-review-clean.d.ts +40 -0
- package/dist/swarm/verify-review-clean.js +240 -0
- package/dist/swarm/worktrees-cli.d.ts +9 -0
- package/dist/swarm/worktrees-cli.js +57 -0
- package/dist/swarm/worktrees.d.ts +39 -0
- package/dist/swarm/worktrees.js +178 -0
- package/dist/text/redos-safe.d.ts +29 -0
- package/dist/text/redos-safe.js +338 -0
- package/dist/triage/actions/candidates-log.d.ts +8 -0
- package/dist/triage/actions/candidates-log.js +195 -0
- package/dist/triage/actions/errors.d.ts +17 -0
- package/dist/triage/actions/errors.js +29 -0
- package/dist/triage/actions/index.d.ts +19 -0
- package/dist/triage/actions/index.js +305 -0
- package/dist/triage/actions/resume-on.d.ts +3 -0
- package/dist/triage/actions/resume-on.js +65 -0
- package/dist/triage/actions/types.d.ts +57 -0
- package/dist/triage/actions/types.js +2 -0
- package/dist/triage/bootstrap/gitignore.d.ts +16 -0
- package/dist/triage/bootstrap/gitignore.js +414 -0
- package/dist/triage/bootstrap/index.d.ts +44 -0
- package/dist/triage/bootstrap/index.js +572 -0
- package/dist/triage/bootstrap/types.d.ts +60 -0
- package/dist/triage/bootstrap/types.js +2 -0
- package/dist/triage/bulk/index.d.ts +99 -0
- package/dist/triage/bulk/index.js +454 -0
- package/dist/triage/classify/index.d.ts +88 -0
- package/dist/triage/classify/index.js +738 -0
- package/dist/triage/help/index.d.ts +25 -0
- package/dist/triage/help/index.js +212 -0
- package/dist/triage/help/registry-data.d.ts +555 -0
- package/dist/triage/help/registry-data.js +841 -0
- package/dist/triage/index.d.ts +23 -0
- package/dist/triage/index.js +23 -0
- package/dist/triage/queue/audit.d.ts +12 -0
- package/dist/triage/queue/audit.js +47 -0
- package/dist/triage/queue/build-queue.d.ts +9 -0
- package/dist/triage/queue/build-queue.js +133 -0
- package/dist/triage/queue/cache.d.ts +20 -0
- package/dist/triage/queue/cache.js +169 -0
- package/dist/triage/queue/constants.d.ts +22 -0
- package/dist/triage/queue/constants.js +28 -0
- package/dist/triage/queue/derive-group.d.ts +7 -0
- package/dist/triage/queue/derive-group.js +20 -0
- package/dist/triage/queue/index.d.ts +12 -0
- package/dist/triage/queue/index.js +12 -0
- package/dist/triage/queue/project.d.ts +6 -0
- package/dist/triage/queue/project.js +18 -0
- package/dist/triage/queue/ranking-labels.d.ts +10 -0
- package/dist/triage/queue/ranking-labels.js +54 -0
- package/dist/triage/queue/render.d.ts +9 -0
- package/dist/triage/queue/render.js +35 -0
- package/dist/triage/queue/repo.d.ts +5 -0
- package/dist/triage/queue/repo.js +36 -0
- package/dist/triage/queue/scope-walk.d.ts +13 -0
- package/dist/triage/queue/scope-walk.js +170 -0
- package/dist/triage/queue/selection.d.ts +28 -0
- package/dist/triage/queue/selection.js +109 -0
- package/dist/triage/queue/types.d.ts +58 -0
- package/dist/triage/queue/types.js +2 -0
- package/dist/triage/reconcile/audit.d.ts +4 -0
- package/dist/triage/reconcile/audit.js +62 -0
- package/dist/triage/reconcile/index.d.ts +5 -0
- package/dist/triage/reconcile/index.js +5 -0
- package/dist/triage/reconcile/parse-uri.d.ts +4 -0
- package/dist/triage/reconcile/parse-uri.js +43 -0
- package/dist/triage/reconcile/reconcile.d.ts +17 -0
- package/dist/triage/reconcile/reconcile.js +163 -0
- package/dist/triage/reconcile/types.d.ts +23 -0
- package/dist/triage/reconcile/types.js +70 -0
- package/dist/triage/refresh/drift.d.ts +15 -0
- package/dist/triage/refresh/drift.js +72 -0
- package/dist/triage/refresh/extract.d.ts +3 -0
- package/dist/triage/refresh/extract.js +43 -0
- package/dist/triage/refresh/index.d.ts +5 -0
- package/dist/triage/refresh/index.js +5 -0
- package/dist/triage/refresh/refresh.d.ts +16 -0
- package/dist/triage/refresh/refresh.js +95 -0
- package/dist/triage/refresh/types.d.ts +18 -0
- package/dist/triage/refresh/types.js +7 -0
- package/dist/triage/scope/cli.d.ts +23 -0
- package/dist/triage/scope/cli.js +257 -0
- package/dist/triage/scope/constants.d.ts +16 -0
- package/dist/triage/scope/constants.js +25 -0
- package/dist/triage/scope/coverage.d.ts +24 -0
- package/dist/triage/scope/coverage.js +96 -0
- package/dist/triage/scope/duration.d.ts +6 -0
- package/dist/triage/scope/duration.js +44 -0
- package/dist/triage/scope/evaluate.d.ts +18 -0
- package/dist/triage/scope/evaluate.js +161 -0
- package/dist/triage/scope/index.d.ts +14 -0
- package/dist/triage/scope/index.js +14 -0
- package/dist/triage/scope/milestone.d.ts +13 -0
- package/dist/triage/scope/milestone.js +178 -0
- package/dist/triage/scope/mutations-core.d.ts +24 -0
- package/dist/triage/scope/mutations-core.js +216 -0
- package/dist/triage/scope/mutations.d.ts +21 -0
- package/dist/triage/scope/mutations.js +203 -0
- package/dist/triage/scope/normalize.d.ts +5 -0
- package/dist/triage/scope/normalize.js +45 -0
- package/dist/triage/scope/python-repr.d.ts +7 -0
- package/dist/triage/scope/python-repr.js +25 -0
- package/dist/triage/scope/renderers.d.ts +9 -0
- package/dist/triage/scope/renderers.js +177 -0
- package/dist/triage/scope/resolve.d.ts +15 -0
- package/dist/triage/scope/resolve.js +122 -0
- package/dist/triage/scope/time.d.ts +6 -0
- package/dist/triage/scope/time.js +18 -0
- package/dist/triage/scope/validate.d.ts +11 -0
- package/dist/triage/scope/validate.js +272 -0
- package/dist/triage/scope-drift/add-ignore.d.ts +10 -0
- package/dist/triage/scope-drift/add-ignore.js +78 -0
- package/dist/triage/scope-drift/cache-walker.d.ts +8 -0
- package/dist/triage/scope-drift/cache-walker.js +103 -0
- package/dist/triage/scope-drift/compute.d.ts +9 -0
- package/dist/triage/scope-drift/compute.js +92 -0
- package/dist/triage/scope-drift/index.d.ts +6 -0
- package/dist/triage/scope-drift/index.js +6 -0
- package/dist/triage/scope-drift/render.d.ts +4 -0
- package/dist/triage/scope-drift/render.js +45 -0
- package/dist/triage/scope-drift/scope-rules.d.ts +16 -0
- package/dist/triage/scope-drift/scope-rules.js +149 -0
- package/dist/triage/scope-drift/types.d.ts +13 -0
- package/dist/triage/scope-drift/types.js +8 -0
- package/dist/triage/smoketest/index.d.ts +81 -0
- package/dist/triage/smoketest/index.js +335 -0
- package/dist/triage/subscribe/index.d.ts +38 -0
- package/dist/triage/subscribe/index.js +303 -0
- package/dist/triage/summary/index.d.ts +70 -0
- package/dist/triage/summary/index.js +431 -0
- package/dist/triage/summary/reconcilable.d.ts +12 -0
- package/dist/triage/summary/reconcilable.js +150 -0
- package/dist/triage/summary/scope-drift.d.ts +5 -0
- package/dist/triage/summary/scope-drift.js +219 -0
- package/dist/triage/welcome/constants.d.ts +24 -0
- package/dist/triage/welcome/constants.js +34 -0
- package/dist/triage/welcome/default-mode.d.ts +21 -0
- package/dist/triage/welcome/default-mode.js +48 -0
- package/dist/triage/welcome/index.d.ts +6 -0
- package/dist/triage/welcome/index.js +6 -0
- package/dist/triage/welcome/prior-state.d.ts +17 -0
- package/dist/triage/welcome/prior-state.js +170 -0
- package/dist/triage/welcome/summary.d.ts +23 -0
- package/dist/triage/welcome/summary.js +303 -0
- package/dist/triage/welcome/writers.d.ts +17 -0
- package/dist/triage/welcome/writers.js +157 -0
- package/dist/ts-check-lane/index.d.ts +3 -0
- package/dist/ts-check-lane/index.js +2 -0
- package/dist/ts-check-lane/run-lane.d.ts +53 -0
- package/dist/ts-check-lane/run-lane.js +98 -0
- package/dist/validate-content/capacity-policy.d.ts +82 -0
- package/dist/validate-content/capacity-policy.js +399 -0
- package/dist/validate-content/capacity-show.d.ts +60 -0
- package/dist/validate-content/capacity-show.js +336 -0
- package/dist/validate-content/filename.d.ts +3 -0
- package/dist/validate-content/filename.js +54 -0
- package/dist/validate-content/index.d.ts +9 -0
- package/dist/validate-content/index.js +9 -0
- package/dist/validate-content/link-parser.d.ts +5 -0
- package/dist/validate-content/link-parser.js +42 -0
- package/dist/validate-content/types.d.ts +8 -0
- package/dist/validate-content/types.js +2 -0
- package/dist/validate-content/validate-links.d.ts +17 -0
- package/dist/validate-content/validate-links.js +114 -0
- package/dist/validate-content/validate-strategy-output.d.ts +11 -0
- package/dist/validate-content/validate-strategy-output.js +120 -0
- package/dist/validate-content/verify-capacity.d.ts +14 -0
- package/dist/validate-content/verify-capacity.js +96 -0
- package/dist/vbrief-activate/activate.d.ts +13 -0
- package/dist/vbrief-activate/activate.js +184 -0
- package/dist/vbrief-activate/constants.d.ts +9 -0
- package/dist/vbrief-activate/constants.js +11 -0
- package/dist/vbrief-activate/index.d.ts +6 -0
- package/dist/vbrief-activate/index.js +4 -0
- package/dist/vbrief-activate/main.d.ts +14 -0
- package/dist/vbrief-activate/main.js +33 -0
- package/dist/vbrief-build/build.d.ts +13 -0
- package/dist/vbrief-build/build.js +123 -0
- package/dist/vbrief-build/constants.d.ts +13 -0
- package/dist/vbrief-build/constants.js +34 -0
- package/dist/vbrief-build/index.d.ts +12 -0
- package/dist/vbrief-build/index.js +11 -0
- package/dist/vbrief-build/json.d.ts +3 -0
- package/dist/vbrief-build/json.js +5 -0
- package/dist/vbrief-build/main.d.ts +5 -0
- package/dist/vbrief-build/main.js +65 -0
- package/dist/vbrief-build/parity-scenarios.d.ts +19 -0
- package/dist/vbrief-build/parity-scenarios.js +321 -0
- package/dist/vbrief-build/project-definition-io.d.ts +13 -0
- package/dist/vbrief-build/project-definition-io.js +117 -0
- package/dist/vbrief-build/routing.d.ts +13 -0
- package/dist/vbrief-build/routing.js +110 -0
- package/dist/vbrief-build/sources.d.ts +16 -0
- package/dist/vbrief-build/sources.js +294 -0
- package/dist/vbrief-build/speckit.d.ts +23 -0
- package/dist/vbrief-build/speckit.js +212 -0
- package/dist/vbrief-build/types.d.ts +18 -0
- package/dist/vbrief-build/types.js +7 -0
- package/dist/vbrief-reconcile/graph.d.ts +11 -0
- package/dist/vbrief-reconcile/graph.js +171 -0
- package/dist/vbrief-reconcile/index.d.ts +10 -0
- package/dist/vbrief-reconcile/index.js +9 -0
- package/dist/vbrief-reconcile/labels.d.ts +22 -0
- package/dist/vbrief-reconcile/labels.js +252 -0
- package/dist/vbrief-reconcile/main.d.ts +18 -0
- package/dist/vbrief-reconcile/main.js +149 -0
- package/dist/vbrief-reconcile/parity-scenarios.d.ts +16 -0
- package/dist/vbrief-reconcile/parity-scenarios.js +385 -0
- package/dist/vbrief-reconcile/py-repr.d.ts +3 -0
- package/dist/vbrief-reconcile/py-repr.js +5 -0
- package/dist/vbrief-reconcile/reconciliation.d.ts +20 -0
- package/dist/vbrief-reconcile/reconciliation.js +542 -0
- package/dist/vbrief-reconcile/swarm-deps.d.ts +8 -0
- package/dist/vbrief-reconcile/swarm-deps.js +142 -0
- package/dist/vbrief-reconcile/types.d.ts +128 -0
- package/dist/vbrief-reconcile/types.js +2 -0
- package/dist/vbrief-reconcile/umbrellas.d.ts +48 -0
- package/dist/vbrief-reconcile/umbrellas.js +462 -0
- package/dist/vbrief-validate/conformance.d.ts +26 -0
- package/dist/vbrief-validate/conformance.js +273 -0
- package/dist/vbrief-validate/constants.d.ts +13 -0
- package/dist/vbrief-validate/constants.js +36 -0
- package/dist/vbrief-validate/decomposition.d.ts +3 -0
- package/dist/vbrief-validate/decomposition.js +38 -0
- package/dist/vbrief-validate/epic-links.d.ts +4 -0
- package/dist/vbrief-validate/epic-links.js +152 -0
- package/dist/vbrief-validate/filename.d.ts +5 -0
- package/dist/vbrief-validate/filename.js +62 -0
- package/dist/vbrief-validate/folder-status.d.ts +4 -0
- package/dist/vbrief-validate/folder-status.js +30 -0
- package/dist/vbrief-validate/index.d.ts +14 -0
- package/dist/vbrief-validate/index.js +11 -0
- package/dist/vbrief-validate/main.d.ts +17 -0
- package/dist/vbrief-validate/main.js +127 -0
- package/dist/vbrief-validate/origin.d.ts +4 -0
- package/dist/vbrief-validate/origin.js +76 -0
- package/dist/vbrief-validate/paths.d.ts +11 -0
- package/dist/vbrief-validate/paths.js +83 -0
- package/dist/vbrief-validate/placeholders.d.ts +3 -0
- package/dist/vbrief-validate/placeholders.js +33 -0
- package/dist/vbrief-validate/plan-hooks.d.ts +9 -0
- package/dist/vbrief-validate/plan-hooks.js +145 -0
- package/dist/vbrief-validate/precutover.d.ts +7 -0
- package/dist/vbrief-validate/precutover.js +30 -0
- package/dist/vbrief-validate/project-definition.d.ts +4 -0
- package/dist/vbrief-validate/project-definition.js +166 -0
- package/dist/vbrief-validate/schema.d.ts +8 -0
- package/dist/vbrief-validate/schema.js +150 -0
- package/dist/vbrief-validate/staleness.d.ts +3 -0
- package/dist/vbrief-validate/staleness.js +106 -0
- package/dist/vbrief-validate/validate-all.d.ts +17 -0
- package/dist/vbrief-validate/validate-all.js +119 -0
- package/dist/vbrief-validation/fidelity.d.ts +22 -0
- package/dist/vbrief-validation/fidelity.js +508 -0
- package/dist/vbrief-validation/index.d.ts +11 -0
- package/dist/vbrief-validation/index.js +8 -0
- package/dist/vbrief-validation/legacy-sections.d.ts +13 -0
- package/dist/vbrief-validation/legacy-sections.js +124 -0
- package/dist/vbrief-validation/main.d.ts +5 -0
- package/dist/vbrief-validation/main.js +65 -0
- package/dist/vbrief-validation/normalize.d.ts +22 -0
- package/dist/vbrief-validation/normalize.js +126 -0
- package/dist/vbrief-validation/parity-scenarios.d.ts +14 -0
- package/dist/vbrief-validation/parity-scenarios.js +523 -0
- package/dist/vbrief-validation/safety.d.ts +38 -0
- package/dist/vbrief-validation/safety.js +422 -0
- package/dist/vbrief-validation/story-quality.d.ts +29 -0
- package/dist/vbrief-validation/story-quality.js +452 -0
- package/dist/vbrief-validation/types.d.ts +58 -0
- package/dist/vbrief-validation/types.js +2 -0
- package/dist/vbrief-validation/validation.d.ts +15 -0
- package/dist/vbrief-validation/validation.js +123 -0
- package/dist/verify-env/index.d.ts +6 -0
- package/dist/verify-env/index.js +6 -0
- package/dist/verify-env/node-runtime.d.ts +6 -0
- package/dist/verify-env/node-runtime.js +11 -0
- package/dist/verify-env/toolchain-check.d.ts +28 -0
- package/dist/verify-env/toolchain-check.js +68 -0
- package/dist/verify-env/verify-hooks-installed.d.ts +21 -0
- package/dist/verify-env/verify-hooks-installed.js +162 -0
- package/dist/verify-env/verify-no-task-runtime.d.ts +20 -0
- package/dist/verify-env/verify-no-task-runtime.js +383 -0
- package/dist/verify-env/verify-tools.d.ts +59 -0
- package/dist/verify-env/verify-tools.js +354 -0
- package/dist/verify-source/code-structure-validate.d.ts +48 -0
- package/dist/verify-source/code-structure-validate.js +678 -0
- package/dist/verify-source/content-manifest.d.ts +102 -0
- package/dist/verify-source/content-manifest.js +282 -0
- package/dist/verify-source/index.d.ts +7 -0
- package/dist/verify-source/index.js +7 -0
- package/dist/verify-source/python-call-scan.d.ts +14 -0
- package/dist/verify-source/python-call-scan.js +137 -0
- package/dist/verify-source/rule-ownership-lint.d.ts +33 -0
- package/dist/verify-source/rule-ownership-lint.js +179 -0
- package/dist/verify-source/scm-boundary.d.ts +26 -0
- package/dist/verify-source/scm-boundary.js +170 -0
- package/dist/verify-source/verify-stubs.d.ts +19 -0
- package/dist/verify-source/verify-stubs.js +185 -0
- package/dist/wip-cap/evaluate.d.ts +17 -0
- package/dist/wip-cap/evaluate.js +62 -0
- package/dist/wip-cap/index.d.ts +2 -0
- package/dist/wip-cap/index.js +2 -0
- package/package.json +206 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { isDatePrefixedVbriefFilename } from "./filename.js";
|
|
4
|
+
const GENERATED_SPEC_PURPOSE = "<!-- Purpose: rendered specification -->";
|
|
5
|
+
const GENERATED_SPEC_SOURCE = "<!-- Source of truth: vbrief/specification.vbrief.json -->";
|
|
6
|
+
const LIFECYCLE_DIRS = ["proposed", "pending", "active", "completed", "cancelled"];
|
|
7
|
+
function readTextSafe(path) {
|
|
8
|
+
try {
|
|
9
|
+
return readFileSync(path, "utf8");
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function isDirSafe(path) {
|
|
16
|
+
try {
|
|
17
|
+
return statSync(path).isDirectory();
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function isDeftFrameworkRoot(projectRoot) {
|
|
24
|
+
// Post-#1875 content/ move: the strategies/ marker lives under content/ in
|
|
25
|
+
// the SOURCE repo (the C1 flatten strips that prefix in a consumer deposit,
|
|
26
|
+
// where neither location exists). Accept either layout and never throw on a
|
|
27
|
+
// missing dir -- consumers legitimately have no strategies/ at all.
|
|
28
|
+
return (existsSync(join(projectRoot, "AGENTS.md")) &&
|
|
29
|
+
existsSync(join(projectRoot, "Taskfile.yml")) &&
|
|
30
|
+
(isDirSafe(join(projectRoot, "content", "strategies")) ||
|
|
31
|
+
isDirSafe(join(projectRoot, "strategies"))));
|
|
32
|
+
}
|
|
33
|
+
function hasCompleteLifecycle(vbriefDir) {
|
|
34
|
+
return LIFECYCLE_DIRS.every((folder) => {
|
|
35
|
+
const p = join(vbriefDir, folder);
|
|
36
|
+
return existsSync(p) && statSync(p).isDirectory();
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function isPostCutoverFullSpecState(projectRoot) {
|
|
40
|
+
const vbriefDir = join(projectRoot, "vbrief");
|
|
41
|
+
const specMd = readTextSafe(join(projectRoot, "SPECIFICATION.md"));
|
|
42
|
+
return (existsSync(join(vbriefDir, "PROJECT-DEFINITION.vbrief.json")) &&
|
|
43
|
+
hasCompleteLifecycle(vbriefDir) &&
|
|
44
|
+
specMd.includes(GENERATED_SPEC_PURPOSE) &&
|
|
45
|
+
specMd.includes(GENERATED_SPEC_SOURCE));
|
|
46
|
+
}
|
|
47
|
+
/** Pure validator returning error strings (empty == pass). */
|
|
48
|
+
export function validateStrategyOutput(projectRoot, strict = false) {
|
|
49
|
+
const root = resolve(projectRoot);
|
|
50
|
+
const errors = [];
|
|
51
|
+
const vbriefDir = join(root, "vbrief");
|
|
52
|
+
if (!existsSync(vbriefDir)) {
|
|
53
|
+
if (strict) {
|
|
54
|
+
errors.push("vbrief/ directory missing entirely. v0.20 strategies must emit at least " +
|
|
55
|
+
"vbrief/proposed/ (with date-prefixed files) + PROJECT-DEFINITION.vbrief.json.");
|
|
56
|
+
}
|
|
57
|
+
return errors;
|
|
58
|
+
}
|
|
59
|
+
const projDef = join(vbriefDir, "PROJECT-DEFINITION.vbrief.json");
|
|
60
|
+
if (!existsSync(projDef)) {
|
|
61
|
+
errors.push("Missing vbrief/PROJECT-DEFINITION.vbrief.json. " +
|
|
62
|
+
"All v0.20-conformant strategy output must include a complete project definition " +
|
|
63
|
+
"(see v0-20-contract.md and task project:render).");
|
|
64
|
+
}
|
|
65
|
+
const specLegacy = join(vbriefDir, "specification.vbrief.json");
|
|
66
|
+
if (existsSync(specLegacy) && !isDeftFrameworkRoot(root) && !isPostCutoverFullSpecState(root)) {
|
|
67
|
+
errors.push("Legacy artifact vbrief/specification.vbrief.json present. " +
|
|
68
|
+
"v0.20 strategies MUST NOT dual-write the old specification.vbrief.json " +
|
|
69
|
+
"alongside scope vBRIEFs in the lifecycle folders. " +
|
|
70
|
+
"See strategies/v0-20-contract.md (contract) and issue #1166.");
|
|
71
|
+
}
|
|
72
|
+
for (const dname of LIFECYCLE_DIRS) {
|
|
73
|
+
const dpath = join(vbriefDir, dname);
|
|
74
|
+
if (!existsSync(dpath) || !statSync(dpath).isDirectory())
|
|
75
|
+
continue;
|
|
76
|
+
for (const name of readdirSync(dpath).sort()) {
|
|
77
|
+
if (!name.endsWith(".vbrief.json"))
|
|
78
|
+
continue;
|
|
79
|
+
if (!isDatePrefixedVbriefFilename(name)) {
|
|
80
|
+
errors.push(`Non-conformant filename in vbrief/${dname}/: ${name}. ` +
|
|
81
|
+
"v0.20 requires strict YYYY-MM-DD-<slug>.vbrief.json " +
|
|
82
|
+
"(date prefix from creation). Bare names (e.g. scaffold.vbrief.json) " +
|
|
83
|
+
"are pre-v0.20. See strategies/v0-20-contract.md and " +
|
|
84
|
+
"vbrief/vbrief.md filename convention.");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return errors;
|
|
89
|
+
}
|
|
90
|
+
const FAILURE_HEADER = "❌ Strategy output shape validation FAILED (v0.20 contract gate)";
|
|
91
|
+
const FAILURE_FOOTER = [
|
|
92
|
+
"",
|
|
93
|
+
"Reference: strategies/v0-20-contract.md (once landed) + " +
|
|
94
|
+
"https://github.com/deftai/directive/issues/1166 (s2-deterministic-gate)",
|
|
95
|
+
"Fix: re-run the emitting strategy after the contract migration " +
|
|
96
|
+
"stories land, or run `task migrate:vbrief` + `task project:render` " +
|
|
97
|
+
"+ `task scope:promote` as appropriate.",
|
|
98
|
+
].join("\n");
|
|
99
|
+
/** CLI-shaped evaluator mirroring `scripts/validate_strategy_output.py::main`. */
|
|
100
|
+
export function evaluate(options = {}) {
|
|
101
|
+
const projectRoot = resolve(options.projectRoot ?? ".");
|
|
102
|
+
const errors = validateStrategyOutput(projectRoot, options.strict ?? false);
|
|
103
|
+
if (errors.length > 0) {
|
|
104
|
+
const lines = [FAILURE_HEADER];
|
|
105
|
+
for (const err of errors) {
|
|
106
|
+
lines.push(` • ${err}`);
|
|
107
|
+
}
|
|
108
|
+
lines.push(FAILURE_FOOTER);
|
|
109
|
+
return { code: 1, message: lines.join("\n"), stream: "stderr" };
|
|
110
|
+
}
|
|
111
|
+
if (options.quiet) {
|
|
112
|
+
return { code: 0, message: "", stream: "none" };
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
code: 0,
|
|
116
|
+
message: "✓ Strategy output shape conforms to v0.20 contract",
|
|
117
|
+
stream: "stdout",
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=validate-strategy-output.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EvaluateResult } from "./types.js";
|
|
2
|
+
export declare const DEFICIT_TOLERANCE = 1;
|
|
3
|
+
export interface VerifyCapacityOptions {
|
|
4
|
+
readonly projectRoot?: string;
|
|
5
|
+
readonly quiet?: boolean;
|
|
6
|
+
readonly now?: Date;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Pure evaluator for verify:capacity. Faithful to `scripts/verify_capacity.py`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function evaluate(options?: VerifyCapacityOptions): EvaluateResult;
|
|
12
|
+
/** CLI-shaped runner mirroring `scripts/verify_capacity.py::main`. */
|
|
13
|
+
export declare function runMain(options?: VerifyCapacityOptions): EvaluateResult;
|
|
14
|
+
//# sourceMappingURL=verify-capacity.d.ts.map
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { statSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { pythonStringRepr, resolveCapacityAllocation } from "./capacity-policy.js";
|
|
4
|
+
import { computeReport, renderReport } from "./capacity-show.js";
|
|
5
|
+
export const DEFICIT_TOLERANCE = 1.0;
|
|
6
|
+
function worstDeficit(report) {
|
|
7
|
+
let worstId = "";
|
|
8
|
+
let worst = 0;
|
|
9
|
+
for (const tally of report.buckets) {
|
|
10
|
+
const targetWeight = tally.target * report.totalBackward;
|
|
11
|
+
const deficit = Math.round((targetWeight - tally.backwardWeight) * 10000) / 10000;
|
|
12
|
+
if (deficit > worst) {
|
|
13
|
+
worst = deficit;
|
|
14
|
+
worstId = tally.bucketId;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return { worstId, worst };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Pure evaluator for verify:capacity. Faithful to `scripts/verify_capacity.py`.
|
|
21
|
+
*/
|
|
22
|
+
export function evaluate(options = {}) {
|
|
23
|
+
const projectRoot = resolve(options.projectRoot ?? ".");
|
|
24
|
+
try {
|
|
25
|
+
if (!statSync(projectRoot).isDirectory()) {
|
|
26
|
+
return {
|
|
27
|
+
code: 2,
|
|
28
|
+
message: `verify_capacity: --project-root is not a directory: ${projectRoot}\n` +
|
|
29
|
+
" Recovery: pass an existing project root.",
|
|
30
|
+
stream: "stderr",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return {
|
|
36
|
+
code: 2,
|
|
37
|
+
message: `verify_capacity: --project-root is not a directory: ${projectRoot}\n` +
|
|
38
|
+
" Recovery: pass an existing project root.",
|
|
39
|
+
stream: "stderr",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const allocation = resolveCapacityAllocation(projectRoot);
|
|
43
|
+
const report = computeReport(projectRoot, { now: options.now, allocation });
|
|
44
|
+
const rendered = renderReport(report);
|
|
45
|
+
if (allocation.enforcement !== "enforce") {
|
|
46
|
+
return {
|
|
47
|
+
code: 0,
|
|
48
|
+
message: `${rendered}\n` +
|
|
49
|
+
"verify_capacity: OK -- advisory posture " +
|
|
50
|
+
`(enforcement=${pythonStringRepr(allocation.enforcement)}); deferring to ordering.`,
|
|
51
|
+
stream: "stdout",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (!report.configured) {
|
|
55
|
+
return {
|
|
56
|
+
code: 0,
|
|
57
|
+
message: `${rendered}\nverify_capacity: OK -- no capacityAllocation buckets configured.`,
|
|
58
|
+
stream: "stdout",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (report.advisoryMode) {
|
|
62
|
+
return {
|
|
63
|
+
code: 0,
|
|
64
|
+
message: `${rendered}\n` +
|
|
65
|
+
"verify_capacity: OK -- sample below minSampleSize " +
|
|
66
|
+
`(${report.classifiedCompletions}/${report.minSampleSize}); ` +
|
|
67
|
+
"capacity stays advisory until enough classified completions accrue.",
|
|
68
|
+
stream: "stdout",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const { worstId, worst } = worstDeficit(report);
|
|
72
|
+
if (worst > DEFICIT_TOLERANCE) {
|
|
73
|
+
return {
|
|
74
|
+
code: 1,
|
|
75
|
+
message: `${rendered}\n` +
|
|
76
|
+
`verify_capacity: DEFICIT -- bucket ${pythonStringRepr(worstId)} is starved by ` +
|
|
77
|
+
`${worst.toFixed(2)} (enforce posture; tolerance ${DEFICIT_TOLERANCE.toFixed(1)}). ` +
|
|
78
|
+
"Prioritize that bucket or relax its target.",
|
|
79
|
+
stream: "stderr",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
code: 0,
|
|
84
|
+
message: `${rendered}\nverify_capacity: OK -- all buckets within target tolerance.`,
|
|
85
|
+
stream: "stdout",
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** CLI-shaped runner mirroring `scripts/verify_capacity.py::main`. */
|
|
89
|
+
export function runMain(options = {}) {
|
|
90
|
+
const result = evaluate(options);
|
|
91
|
+
if (result.code === 0 && options.quiet) {
|
|
92
|
+
return { code: 0, message: "", stream: "none" };
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=verify-capacity.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ActivateResult {
|
|
2
|
+
readonly exitCode: 0 | 1;
|
|
3
|
+
readonly message: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ActivateOptions {
|
|
6
|
+
readonly now?: Date;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Pure activator — returns ``{ exitCode, message }``. Faithful to
|
|
10
|
+
* ``scripts/vbrief_activate.py::activate``.
|
|
11
|
+
*/
|
|
12
|
+
export declare function activate(vbriefPath: string, options?: ActivateOptions): ActivateResult;
|
|
13
|
+
//# sourceMappingURL=activate.d.ts.map
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { basename, dirname } from "node:path";
|
|
3
|
+
import { utcNowIso } from "../scope/vbrief-json.js";
|
|
4
|
+
import { pythonJsonPretty } from "../vbrief-build/json.js";
|
|
5
|
+
import { ACTIVE_FOLDER, ELIGIBLE_STATUSES_FOR_FLIP, formatEligibleStatusList, SOURCE_FOLDERS, TARGET_STATUS, } from "./constants.js";
|
|
6
|
+
/** Map Node ``JSON.parse`` errors to CPython ``json.JSONDecodeError.msg`` for parity. */
|
|
7
|
+
function nodeJsonErrorToPythonMsg(nodeMessage) {
|
|
8
|
+
if (nodeMessage.includes("Expected property name") ||
|
|
9
|
+
nodeMessage.includes("Expected double-quoted property name")) {
|
|
10
|
+
return "Expecting property name enclosed in double quotes";
|
|
11
|
+
}
|
|
12
|
+
if (nodeMessage.startsWith("Unexpected token") ||
|
|
13
|
+
nodeMessage.startsWith("Unexpected end of JSON input")) {
|
|
14
|
+
return "Expecting value";
|
|
15
|
+
}
|
|
16
|
+
if (nodeMessage.includes("Unexpected non-whitespace character after JSON")) {
|
|
17
|
+
return "Extra data";
|
|
18
|
+
}
|
|
19
|
+
const atPos = nodeMessage.indexOf(" at position ");
|
|
20
|
+
return atPos >= 0 ? nodeMessage.slice(0, atPos) : nodeMessage;
|
|
21
|
+
}
|
|
22
|
+
function loadVbrief(vbriefPath) {
|
|
23
|
+
let raw;
|
|
24
|
+
try {
|
|
25
|
+
raw = readFileSync(vbriefPath, "utf8");
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
const e = err;
|
|
29
|
+
return {
|
|
30
|
+
payload: null,
|
|
31
|
+
error: `Could not read vBRIEF at ${vbriefPath}: ${String(e.message)}.`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
let payload;
|
|
35
|
+
try {
|
|
36
|
+
payload = JSON.parse(raw);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
const e = err;
|
|
40
|
+
const lineCol = /\(line (\d+) column \d+\)/.exec(e.message);
|
|
41
|
+
const line = lineCol ? Number(lineCol[1]) : 1;
|
|
42
|
+
const pyMsg = nodeJsonErrorToPythonMsg(e.message);
|
|
43
|
+
return {
|
|
44
|
+
payload: null,
|
|
45
|
+
error: `vBRIEF at ${vbriefPath} is not valid JSON: ${pyMsg} (line ${line}).`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
|
|
49
|
+
return {
|
|
50
|
+
payload: null,
|
|
51
|
+
error: `vBRIEF at ${vbriefPath} top-level value is not a JSON object.`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return { payload: payload, error: null };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Pure activator — returns ``{ exitCode, message }``. Faithful to
|
|
58
|
+
* ``scripts/vbrief_activate.py::activate``.
|
|
59
|
+
*/
|
|
60
|
+
export function activate(vbriefPath, options = {}) {
|
|
61
|
+
const now = options.now ?? new Date();
|
|
62
|
+
if (!existsSync(vbriefPath)) {
|
|
63
|
+
return { exitCode: 1, message: `vBRIEF not found at ${vbriefPath}.` };
|
|
64
|
+
}
|
|
65
|
+
let st;
|
|
66
|
+
try {
|
|
67
|
+
st = statSync(vbriefPath);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const e = err;
|
|
71
|
+
return {
|
|
72
|
+
exitCode: 1,
|
|
73
|
+
message: `Could not read vBRIEF at ${vbriefPath}: ${String(e.message)}.`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (!st.isFile()) {
|
|
77
|
+
return { exitCode: 1, message: `vBRIEF path ${vbriefPath} is not a regular file.` };
|
|
78
|
+
}
|
|
79
|
+
const { payload, error } = loadVbrief(vbriefPath);
|
|
80
|
+
if (error !== null || payload === null) {
|
|
81
|
+
return { exitCode: 1, message: error ?? "vBRIEF could not be loaded." };
|
|
82
|
+
}
|
|
83
|
+
const plan = payload.plan;
|
|
84
|
+
if (plan === null || typeof plan !== "object" || Array.isArray(plan)) {
|
|
85
|
+
return {
|
|
86
|
+
exitCode: 1,
|
|
87
|
+
message: `vBRIEF at ${vbriefPath} lacks a \`plan\` object -- malformed.`,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const planObj = plan;
|
|
91
|
+
const status = planObj.status;
|
|
92
|
+
if (typeof status !== "string" || status.length === 0) {
|
|
93
|
+
return { exitCode: 1, message: `vBRIEF at ${vbriefPath} lacks \`plan.status\` -- malformed.` };
|
|
94
|
+
}
|
|
95
|
+
const folder = basename(dirname(vbriefPath));
|
|
96
|
+
if (folder === ACTIVE_FOLDER && status === TARGET_STATUS) {
|
|
97
|
+
return { exitCode: 0, message: `No-op: ${vbriefPath} already active.` };
|
|
98
|
+
}
|
|
99
|
+
if (folder === ACTIVE_FOLDER) {
|
|
100
|
+
return {
|
|
101
|
+
exitCode: 1,
|
|
102
|
+
message: `vBRIEF is already in active/ but plan.status is '${status}', ` +
|
|
103
|
+
`not '${TARGET_STATUS}'. Use the appropriate task (e.g. ` +
|
|
104
|
+
"`task scope:unblock`) instead of `task vbrief:activate`.",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (!SOURCE_FOLDERS.has(folder)) {
|
|
108
|
+
return {
|
|
109
|
+
exitCode: 1,
|
|
110
|
+
message: `vBRIEF is in ${folder}/ -- only pending/ vBRIEFs can be activated. ` +
|
|
111
|
+
"Use the lifecycle tasks (`task scope:promote`, etc.) to move it " +
|
|
112
|
+
"into pending/ first.",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (!ELIGIBLE_STATUSES_FOR_FLIP.has(status)) {
|
|
116
|
+
return {
|
|
117
|
+
exitCode: 1,
|
|
118
|
+
message: `plan.status is '${status}' -- only ${formatEligibleStatusList()} can be flipped to ` +
|
|
119
|
+
`'${TARGET_STATUS}'.`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
planObj.status = TARGET_STATUS;
|
|
123
|
+
let info = payload.vBRIEFInfo;
|
|
124
|
+
if (info === undefined) {
|
|
125
|
+
info = {};
|
|
126
|
+
payload.vBRIEFInfo = info;
|
|
127
|
+
}
|
|
128
|
+
if (info === null || typeof info !== "object" || Array.isArray(info)) {
|
|
129
|
+
return {
|
|
130
|
+
exitCode: 1,
|
|
131
|
+
message: `vBRIEF at ${vbriefPath} has a non-object \`vBRIEFInfo\` -- malformed.`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
info.updated = utcNowIso(now);
|
|
135
|
+
const vbriefDir = dirname(dirname(vbriefPath));
|
|
136
|
+
const activeDir = `${vbriefDir}/${ACTIVE_FOLDER}`;
|
|
137
|
+
try {
|
|
138
|
+
mkdirSync(activeDir, { recursive: true });
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
const e = err;
|
|
142
|
+
return { exitCode: 1, message: `Could not create ${activeDir}: ${String(e.message)}.` };
|
|
143
|
+
}
|
|
144
|
+
const fileName = basename(vbriefPath);
|
|
145
|
+
const dest = `${activeDir}/${fileName}`;
|
|
146
|
+
if (existsSync(dest)) {
|
|
147
|
+
return {
|
|
148
|
+
exitCode: 1,
|
|
149
|
+
message: `Refusing to overwrite existing destination ${dest}. Resolve the ` +
|
|
150
|
+
"collision manually before re-running `task vbrief:activate`.",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const tmp = `${dest}.tmp`;
|
|
154
|
+
try {
|
|
155
|
+
writeFileSync(tmp, pythonJsonPretty(payload), "utf8");
|
|
156
|
+
renameSync(tmp, dest);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
const e = err;
|
|
160
|
+
try {
|
|
161
|
+
unlinkSync(tmp);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
/* best-effort cleanup */
|
|
165
|
+
}
|
|
166
|
+
return { exitCode: 1, message: `Could not write ${dest}: ${String(e.message)}.` };
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
unlinkSync(vbriefPath);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
const e = err;
|
|
173
|
+
return {
|
|
174
|
+
exitCode: 1,
|
|
175
|
+
message: `Wrote ${dest} but could not remove source ${vbriefPath}: ${String(e.message)}. ` +
|
|
176
|
+
"Manual cleanup required.",
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
exitCode: 0,
|
|
181
|
+
message: `Activated ${fileName}: pending/ -> active/ (status: ${TARGET_STATUS}).`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=activate.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Folders the lifecycle move flows between (source allow-list). */
|
|
2
|
+
export declare const SOURCE_FOLDERS: Set<string>;
|
|
3
|
+
export declare const ACTIVE_FOLDER = "active";
|
|
4
|
+
export declare const ELIGIBLE_STATUSES_FOR_FLIP: Set<string>;
|
|
5
|
+
export declare const TARGET_STATUS = "running";
|
|
6
|
+
export declare const ELIGIBLE_STATUSES_SORTED: readonly ["approved", "pending"];
|
|
7
|
+
/** Python ``str(sorted(ELIGIBLE_STATUSES_FOR_FLIP))`` for error messages. */
|
|
8
|
+
export declare function formatEligibleStatusList(): string;
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Folders the lifecycle move flows between (source allow-list). */
|
|
2
|
+
export const SOURCE_FOLDERS = new Set(["pending"]);
|
|
3
|
+
export const ACTIVE_FOLDER = "active";
|
|
4
|
+
export const ELIGIBLE_STATUSES_FOR_FLIP = new Set(["pending", "approved"]);
|
|
5
|
+
export const TARGET_STATUS = "running";
|
|
6
|
+
export const ELIGIBLE_STATUSES_SORTED = ["approved", "pending"];
|
|
7
|
+
/** Python ``str(sorted(ELIGIBLE_STATUSES_FOR_FLIP))`` for error messages. */
|
|
8
|
+
export function formatEligibleStatusList() {
|
|
9
|
+
return `[${ELIGIBLE_STATUSES_SORTED.map((s) => `'${s}'`).join(", ")}]`;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { ActivateOptions, ActivateResult } from "./activate.js";
|
|
2
|
+
export { activate } from "./activate.js";
|
|
3
|
+
export { ACTIVE_FOLDER, ELIGIBLE_STATUSES_FOR_FLIP, formatEligibleStatusList, SOURCE_FOLDERS, TARGET_STATUS, } from "./constants.js";
|
|
4
|
+
export type { ParsedArgs, RunOptions } from "./main.js";
|
|
5
|
+
export { cmdVbriefActivate, parseArgs, run } from "./main.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { activate } from "./activate.js";
|
|
2
|
+
export { ACTIVE_FOLDER, ELIGIBLE_STATUSES_FOR_FLIP, formatEligibleStatusList, SOURCE_FOLDERS, TARGET_STATUS, } from "./constants.js";
|
|
3
|
+
export { cmdVbriefActivate, parseArgs, run } from "./main.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ParsedArgs {
|
|
2
|
+
readonly vbriefPath: string | null;
|
|
3
|
+
readonly error?: string;
|
|
4
|
+
}
|
|
5
|
+
/** Parse vbrief-activate CLI args, mirroring the Python argparse surface (#810). */
|
|
6
|
+
export declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
7
|
+
export interface RunOptions {
|
|
8
|
+
readonly now?: Date;
|
|
9
|
+
}
|
|
10
|
+
/** Run the activator and return the process exit code (parse errors -> 2). */
|
|
11
|
+
export declare function run(argv: readonly string[], options?: RunOptions): number;
|
|
12
|
+
/** CLI entry alias for task wiring. */
|
|
13
|
+
export declare function cmdVbriefActivate(argv: readonly string[], options?: RunOptions): number;
|
|
14
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { activate } from "./activate.js";
|
|
2
|
+
/** Parse vbrief-activate CLI args, mirroring the Python argparse surface (#810). */
|
|
3
|
+
export function parseArgs(argv) {
|
|
4
|
+
if (argv.length === 0) {
|
|
5
|
+
return { vbriefPath: null, error: "the following arguments are required: vbrief_path" };
|
|
6
|
+
}
|
|
7
|
+
if (argv.length > 1) {
|
|
8
|
+
return { vbriefPath: null, error: `unrecognized arguments: ${argv.slice(1).join(" ")}` };
|
|
9
|
+
}
|
|
10
|
+
return { vbriefPath: argv[0] ?? null };
|
|
11
|
+
}
|
|
12
|
+
/** Run the activator and return the process exit code (parse errors -> 2). */
|
|
13
|
+
export function run(argv, options = {}) {
|
|
14
|
+
const args = parseArgs(argv);
|
|
15
|
+
if (args.error !== undefined) {
|
|
16
|
+
process.stderr.write(`vbrief_activate.py: ${args.error}\n`);
|
|
17
|
+
return 2;
|
|
18
|
+
}
|
|
19
|
+
const vbriefPath = args.vbriefPath;
|
|
20
|
+
const result = activate(vbriefPath, options);
|
|
21
|
+
if (result.exitCode === 0) {
|
|
22
|
+
process.stdout.write(`${result.message}\n`);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
process.stderr.write(`${result.message}\n`);
|
|
26
|
+
}
|
|
27
|
+
return result.exitCode;
|
|
28
|
+
}
|
|
29
|
+
/** CLI entry alias for task wiring. */
|
|
30
|
+
export function cmdVbriefActivate(argv, options = {}) {
|
|
31
|
+
return run(argv, options);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { JsonObject } from "./types.js";
|
|
2
|
+
/** Canonical YYYY-MM-DD date used across ingestion / migration filenames. */
|
|
3
|
+
export declare let TODAY: string;
|
|
4
|
+
/** Test hook: pin the module-level TODAY constant. */
|
|
5
|
+
export declare function setTodayForTests(value: string): void;
|
|
6
|
+
/** Convert a title to a filename-safe slug. */
|
|
7
|
+
export declare function slugify(text: string): string;
|
|
8
|
+
/** Return a copied reference with the default TrustLevel filled when known. */
|
|
9
|
+
export declare function referenceWithDefaultTrust(ref: JsonObject): JsonObject;
|
|
10
|
+
export declare function referenceHasRequiredFields(ref: JsonObject | null): boolean;
|
|
11
|
+
/** Build a scope vBRIEF dict for a roadmap or issue item. */
|
|
12
|
+
export declare function createScopeVbrief(item: JsonObject, repoUrl?: string, status?: string, phaseDescription?: string): JsonObject;
|
|
13
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { EMITTED_VBRIEF_VERSION, EXTERNAL_REFERENCE_TYPES, INTERNAL_REFERENCE_TYPES, MIGRATOR_METADATA_KEY, } from "./constants.js";
|
|
2
|
+
/** Canonical YYYY-MM-DD date used across ingestion / migration filenames. */
|
|
3
|
+
export let TODAY = new Date().toISOString().slice(0, 10);
|
|
4
|
+
/** Test hook: pin the module-level TODAY constant. */
|
|
5
|
+
export function setTodayForTests(value) {
|
|
6
|
+
TODAY = value;
|
|
7
|
+
}
|
|
8
|
+
/** Convert a title to a filename-safe slug. */
|
|
9
|
+
export function slugify(text) {
|
|
10
|
+
let slug = text.toLowerCase().trim();
|
|
11
|
+
slug = slug.replace(/[^a-z0-9\s_-]/g, "");
|
|
12
|
+
slug = slug.replace(/[\s_]+/g, "-");
|
|
13
|
+
slug = slug.replace(/-+/g, "-");
|
|
14
|
+
return slug.slice(0, 60).replace(/^-+|-+$/g, "");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Strip trailing ``/`` characters, mirroring Python ``str.rstrip("/")``.
|
|
18
|
+
*
|
|
19
|
+
* A linear loop (no regex) so there is no backtracking — this replaces the
|
|
20
|
+
* polynomial ``/\/+$/`` form CodeQL flagged as ``js/polynomial-redos`` while
|
|
21
|
+
* preserving byte-identical behaviour with the frozen Python oracle.
|
|
22
|
+
*/
|
|
23
|
+
function stripTrailingSlashes(value) {
|
|
24
|
+
let result = value;
|
|
25
|
+
while (result.endsWith("/")) {
|
|
26
|
+
result = result.slice(0, -1);
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
/** Return a copied reference with the default TrustLevel filled when known. */
|
|
31
|
+
export function referenceWithDefaultTrust(ref) {
|
|
32
|
+
const normalized = structuredClone(ref);
|
|
33
|
+
if ("TrustLevel" in normalized) {
|
|
34
|
+
return normalized;
|
|
35
|
+
}
|
|
36
|
+
const refType = normalized.type;
|
|
37
|
+
if (typeof refType === "string" && INTERNAL_REFERENCE_TYPES.has(refType)) {
|
|
38
|
+
normalized.TrustLevel = "internal";
|
|
39
|
+
}
|
|
40
|
+
else if (typeof refType === "string" && EXTERNAL_REFERENCE_TYPES.has(refType)) {
|
|
41
|
+
normalized.TrustLevel = "external";
|
|
42
|
+
}
|
|
43
|
+
return normalized;
|
|
44
|
+
}
|
|
45
|
+
function githubIssueReference(params) {
|
|
46
|
+
const cleanedRepo = stripTrailingSlashes(String(params.repoUrl ?? "").trim());
|
|
47
|
+
const cleanedNumber = String(params.number ?? "")
|
|
48
|
+
.trim()
|
|
49
|
+
.replace(/^#+/, "")
|
|
50
|
+
.trim();
|
|
51
|
+
if (!cleanedRepo || !cleanedNumber) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const cleanedTitle = String(params.title ?? "").trim();
|
|
55
|
+
const refTitle = cleanedTitle && cleanedTitle !== "Untitled"
|
|
56
|
+
? `Issue #${cleanedNumber}: ${cleanedTitle}`
|
|
57
|
+
: `Issue #${cleanedNumber}`;
|
|
58
|
+
return {
|
|
59
|
+
uri: `${cleanedRepo}/issues/${cleanedNumber}`,
|
|
60
|
+
type: "x-vbrief/github-issue",
|
|
61
|
+
title: refTitle,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export function referenceHasRequiredFields(ref) {
|
|
65
|
+
if (ref === null) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
for (const key of ["uri", "type"]) {
|
|
69
|
+
const value = ref[key];
|
|
70
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
/** Build a scope vBRIEF dict for a roadmap or issue item. */
|
|
77
|
+
export function createScopeVbrief(item, repoUrl = "", status = "pending", phaseDescription = "") {
|
|
78
|
+
const number = String(item.number ?? "")
|
|
79
|
+
.trim()
|
|
80
|
+
.replace(/^#+/, "")
|
|
81
|
+
.trim();
|
|
82
|
+
const title = (String(item.title ?? "Untitled") || "Untitled").trim() || "Untitled";
|
|
83
|
+
const phase = item.phase ?? "";
|
|
84
|
+
const tier = item.tier ?? "";
|
|
85
|
+
const descLabel = number ? `#${number}: ${title}` : title;
|
|
86
|
+
const vbrief = {
|
|
87
|
+
vBRIEFInfo: {
|
|
88
|
+
version: EMITTED_VBRIEF_VERSION,
|
|
89
|
+
description: `Scope vBRIEF for ${descLabel}`,
|
|
90
|
+
},
|
|
91
|
+
plan: {
|
|
92
|
+
title,
|
|
93
|
+
status,
|
|
94
|
+
narratives: {},
|
|
95
|
+
items: [],
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
const migratorMeta = {};
|
|
99
|
+
if (phase) {
|
|
100
|
+
migratorMeta.Phase = String(phase);
|
|
101
|
+
}
|
|
102
|
+
if (tier) {
|
|
103
|
+
migratorMeta.Tier = String(tier);
|
|
104
|
+
}
|
|
105
|
+
if (phaseDescription) {
|
|
106
|
+
migratorMeta.PhaseDescription = phaseDescription;
|
|
107
|
+
}
|
|
108
|
+
if (Object.keys(migratorMeta).length > 0) {
|
|
109
|
+
const plan = vbrief.plan;
|
|
110
|
+
const metadata = (plan.metadata ?? {});
|
|
111
|
+
metadata[MIGRATOR_METADATA_KEY] = migratorMeta;
|
|
112
|
+
plan.metadata = metadata;
|
|
113
|
+
}
|
|
114
|
+
const canonicalRef = githubIssueReference({ repoUrl, number, title });
|
|
115
|
+
const trustedRef = referenceHasRequiredFields(canonicalRef) && canonicalRef !== null
|
|
116
|
+
? referenceWithDefaultTrust(canonicalRef)
|
|
117
|
+
: null;
|
|
118
|
+
if (trustedRef !== null && referenceHasRequiredFields(trustedRef)) {
|
|
119
|
+
vbrief.plan.references = [trustedRef];
|
|
120
|
+
}
|
|
121
|
+
return vbrief;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Canonical ``vBRIEFInfo.version`` emitted on scope vBRIEFs (#533). */
|
|
2
|
+
export declare const EMITTED_VBRIEF_VERSION = "0.6";
|
|
3
|
+
/** Migrator provenance namespace under ``plan.metadata`` (#616). */
|
|
4
|
+
export declare const MIGRATOR_METADATA_KEY = "x-migrator";
|
|
5
|
+
export declare const PROJECT_DEFINITION_REL_PATH = "vbrief/PROJECT-DEFINITION.vbrief.json";
|
|
6
|
+
export declare const DEPRECATION_SENTINEL = "<!-- deft:deprecated-redirect -->";
|
|
7
|
+
export declare const INTERNAL_REFERENCE_TYPES: Set<string>;
|
|
8
|
+
export declare const EXTERNAL_REFERENCE_TYPES: Set<string>;
|
|
9
|
+
export declare const FOLDER_TO_STATUSES: Readonly<Record<string, readonly string[]>>;
|
|
10
|
+
export declare const STATUS_TO_FOLDER: Readonly<Record<string, string>>;
|
|
11
|
+
export declare const LIFECYCLE_FOLDERS: string[];
|
|
12
|
+
export declare const DEFAULT_STATUS_FOR_FOLDER: Readonly<Record<string, string>>;
|
|
13
|
+
//# sourceMappingURL=constants.d.ts.map
|