@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,415 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* preflight-gh/classifier.ts -- Detection-bound gate for destructive gh verbs (#1019).
|
|
3
|
+
*
|
|
4
|
+
* TypeScript port of scripts/preflight_gh.py. Faithfully mirrors the Python
|
|
5
|
+
* classifier: classify_command, evaluate_command, run_self_test, and the
|
|
6
|
+
* self-test fixture table. Three-state exit:
|
|
7
|
+
* 0 -- command is allowed (not destructive) or bypass is active
|
|
8
|
+
* 1 -- command is destructive and no bypass
|
|
9
|
+
* 2 -- config error / self-test disagreement
|
|
10
|
+
*/
|
|
11
|
+
import * as os from "node:os";
|
|
12
|
+
/** Environment variable that enables the per-shell bypass (mirrors Python). */
|
|
13
|
+
export const ENV_BYPASS = "DEFT_ALLOW_DESTRUCTIVE_GH_VERBS";
|
|
14
|
+
/** Default branch refs treated as protected against force-push. */
|
|
15
|
+
export const DEFAULT_BRANCHES = new Set(["master", "main"]);
|
|
16
|
+
const OK_VERDICT = {
|
|
17
|
+
allowed: true,
|
|
18
|
+
category: null,
|
|
19
|
+
detail: "not destructive",
|
|
20
|
+
recovery: "",
|
|
21
|
+
};
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Tokeniser
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/**
|
|
26
|
+
* Split a command string into argv-like tokens (POSIX shlex-equivalent).
|
|
27
|
+
*
|
|
28
|
+
* Mirrors Python's `shlex.split(command, posix=True)` but falls back to
|
|
29
|
+
* whitespace splitting on malformed quotes, same as the Python version.
|
|
30
|
+
*/
|
|
31
|
+
export function tokensFromString(command) {
|
|
32
|
+
const tokens = [];
|
|
33
|
+
let current = "";
|
|
34
|
+
let inSingle = false;
|
|
35
|
+
let inDouble = false;
|
|
36
|
+
for (let i = 0; i < command.length; i++) {
|
|
37
|
+
const ch = command[i] ?? "";
|
|
38
|
+
if (inSingle) {
|
|
39
|
+
if (ch === "'") {
|
|
40
|
+
inSingle = false;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
current += ch;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (inDouble) {
|
|
47
|
+
if (ch === '"') {
|
|
48
|
+
inDouble = false;
|
|
49
|
+
}
|
|
50
|
+
else if (ch === "\\") {
|
|
51
|
+
const next = command[i + 1];
|
|
52
|
+
if (next !== undefined && (next === '"' || next === "\\")) {
|
|
53
|
+
current += next;
|
|
54
|
+
i++;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
current += ch;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
current += ch;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (ch === "'") {
|
|
65
|
+
inSingle = true;
|
|
66
|
+
}
|
|
67
|
+
else if (ch === '"') {
|
|
68
|
+
inDouble = true;
|
|
69
|
+
}
|
|
70
|
+
else if (/\s/.test(ch)) {
|
|
71
|
+
if (current.length > 0) {
|
|
72
|
+
tokens.push(current);
|
|
73
|
+
current = "";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
current += ch;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (current.length > 0) {
|
|
81
|
+
tokens.push(current);
|
|
82
|
+
}
|
|
83
|
+
return tokens;
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Classifier helpers
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
function envBypassActive() {
|
|
89
|
+
const raw = (process.env[ENV_BYPASS] ?? "").trim().toLowerCase();
|
|
90
|
+
return ["1", "true", "yes", "on"].includes(raw);
|
|
91
|
+
}
|
|
92
|
+
function isGhHead(token) {
|
|
93
|
+
return token.toLowerCase() === "gh" || token.toLowerCase() === "ghx";
|
|
94
|
+
}
|
|
95
|
+
function apiInvocationIsDelete(tokens) {
|
|
96
|
+
const valueTaking = new Set([
|
|
97
|
+
"-x",
|
|
98
|
+
"--method",
|
|
99
|
+
"-h",
|
|
100
|
+
"--header",
|
|
101
|
+
"-f",
|
|
102
|
+
"--field",
|
|
103
|
+
"-F",
|
|
104
|
+
"--raw-field",
|
|
105
|
+
"--input",
|
|
106
|
+
"--jq",
|
|
107
|
+
"-q",
|
|
108
|
+
"--template",
|
|
109
|
+
"-t",
|
|
110
|
+
"--hostname",
|
|
111
|
+
"--cache",
|
|
112
|
+
]);
|
|
113
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
114
|
+
const tok = tokens[i] ?? "";
|
|
115
|
+
const low = tok.toLowerCase();
|
|
116
|
+
if ((low === "-x" || low === "--method") &&
|
|
117
|
+
i + 1 < tokens.length &&
|
|
118
|
+
tokens[i + 1]?.toUpperCase() === "DELETE") {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
if (low.startsWith("-x=") || low.startsWith("--method=")) {
|
|
122
|
+
const value = tok.split("=", 2)[1] ?? "";
|
|
123
|
+
if (value.toUpperCase() === "DELETE")
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
// -XDELETE combined form
|
|
127
|
+
if (low.startsWith("-x") && low.length > 2 && low.slice(2).toUpperCase() === "DELETE") {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
// Skip value-taking flags (skip the value token that follows)
|
|
131
|
+
if (valueTaking.has(low) && !tok.includes("=")) {
|
|
132
|
+
i++; // skip value
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
function apiEndpoint(tokens) {
|
|
138
|
+
const valueTaking = new Set([
|
|
139
|
+
"-x",
|
|
140
|
+
"--method",
|
|
141
|
+
"-h",
|
|
142
|
+
"--header",
|
|
143
|
+
"-f",
|
|
144
|
+
"--field",
|
|
145
|
+
"-F",
|
|
146
|
+
"--raw-field",
|
|
147
|
+
"--input",
|
|
148
|
+
"--jq",
|
|
149
|
+
"-q",
|
|
150
|
+
"--template",
|
|
151
|
+
"-t",
|
|
152
|
+
"--hostname",
|
|
153
|
+
"--cache",
|
|
154
|
+
]);
|
|
155
|
+
let i = 0;
|
|
156
|
+
while (i < tokens.length) {
|
|
157
|
+
const tok = tokens[i] ?? "";
|
|
158
|
+
if (!tok.startsWith("-")) {
|
|
159
|
+
return tok;
|
|
160
|
+
}
|
|
161
|
+
if (tok.includes("=")) {
|
|
162
|
+
i++;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// -XDELETE combined
|
|
166
|
+
if (tok.toLowerCase().startsWith("-x") && tok.length > 2) {
|
|
167
|
+
i++;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (valueTaking.has(tok.toLowerCase()) && i + 1 < tokens.length) {
|
|
171
|
+
i += 2;
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
i++;
|
|
175
|
+
}
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
function endpointIsRepoRoot(endpoint) {
|
|
179
|
+
const lower = endpoint.toLowerCase();
|
|
180
|
+
// repos/<owner>/<repo> -- but not repos/.../issues/... etc.
|
|
181
|
+
// Matches: repos/owner/repo or repos/owner/repo/contents/...
|
|
182
|
+
// The Python checks: endpoint matches `repos/<owner>/<repo>` (allow sub-paths too)
|
|
183
|
+
if (!lower.startsWith("repos/"))
|
|
184
|
+
return false;
|
|
185
|
+
const parts = endpoint.split("/");
|
|
186
|
+
// repos / owner / repo [/ ...]
|
|
187
|
+
return parts.length >= 3 && (parts[1]?.length ?? 0) > 0 && (parts[2]?.length ?? 0) > 0;
|
|
188
|
+
}
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// Destructive category detectors
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
function detectDeleteRepo(tokens) {
|
|
193
|
+
if (tokens.length < 2)
|
|
194
|
+
return null;
|
|
195
|
+
const head = tokens[0] ?? "";
|
|
196
|
+
if (!isGhHead(head))
|
|
197
|
+
return null;
|
|
198
|
+
// gh repo delete <target>
|
|
199
|
+
if (tokens[1]?.toLowerCase() === "repo" &&
|
|
200
|
+
tokens.length >= 3 &&
|
|
201
|
+
tokens[2]?.toLowerCase() === "delete") {
|
|
202
|
+
const target = tokens[3] ?? "<unspecified>";
|
|
203
|
+
return {
|
|
204
|
+
allowed: false,
|
|
205
|
+
category: "delete_repo",
|
|
206
|
+
detail: `gh repo delete ${target}`,
|
|
207
|
+
recovery: [
|
|
208
|
+
" Repo deletion is irreversible. If this is intentional:",
|
|
209
|
+
` • set the env-var bypass for this shell: ${ENV_BYPASS}=1`,
|
|
210
|
+
" • or run the deletion via the GitHub web UI so the",
|
|
211
|
+
" reversible-archive prompt fires (preferred).",
|
|
212
|
+
].join(os.EOL),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// gh api ... DELETE repos/<owner>/<repo>...
|
|
216
|
+
if (tokens[1]?.toLowerCase() === "api" && apiInvocationIsDelete(tokens.slice(2))) {
|
|
217
|
+
const endpoint = apiEndpoint(tokens.slice(2));
|
|
218
|
+
if (endpoint !== null && endpointIsRepoRoot(endpoint)) {
|
|
219
|
+
return {
|
|
220
|
+
allowed: false,
|
|
221
|
+
category: "delete_repo",
|
|
222
|
+
detail: `gh api -X DELETE ${endpoint}`,
|
|
223
|
+
recovery: [
|
|
224
|
+
" Repo / repo-subresource deletion via the API is",
|
|
225
|
+
" irreversible. If this is intentional:",
|
|
226
|
+
` • set the env-var bypass for this shell: ${ENV_BYPASS}=1`,
|
|
227
|
+
].join(os.EOL),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
function detectAdminMerge(tokens) {
|
|
234
|
+
if (tokens.length < 2)
|
|
235
|
+
return null;
|
|
236
|
+
const head = tokens[0] ?? "";
|
|
237
|
+
if (!isGhHead(head))
|
|
238
|
+
return null;
|
|
239
|
+
if (tokens[1]?.toLowerCase() !== "pr")
|
|
240
|
+
return null;
|
|
241
|
+
const hasAdmin = tokens.some((t) => t.toLowerCase() === "--admin");
|
|
242
|
+
const hasMerge = tokens.some((t) => t.toLowerCase() === "merge");
|
|
243
|
+
if (!hasMerge || !hasAdmin)
|
|
244
|
+
return null;
|
|
245
|
+
return {
|
|
246
|
+
allowed: false,
|
|
247
|
+
category: "admin_merge",
|
|
248
|
+
detail: "gh pr merge --admin",
|
|
249
|
+
recovery: [
|
|
250
|
+
" `gh pr merge --admin` bypasses required branch-protection reviews.",
|
|
251
|
+
" Document the rationale before using. If genuinely required:",
|
|
252
|
+
` • set the env-var bypass for this shell: ${ENV_BYPASS}=1`,
|
|
253
|
+
].join(os.EOL),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function detectForcePushDefault(tokens, defaultBranches = DEFAULT_BRANCHES) {
|
|
257
|
+
if (tokens.length < 2)
|
|
258
|
+
return null;
|
|
259
|
+
const head = tokens[0] ?? "";
|
|
260
|
+
if (head.toLowerCase() !== "git")
|
|
261
|
+
return null;
|
|
262
|
+
const allTokens = tokens.slice(1);
|
|
263
|
+
// detect push sub-command
|
|
264
|
+
if (!allTokens.some((t) => t.toLowerCase() === "push"))
|
|
265
|
+
return null;
|
|
266
|
+
// detect force flags or refspec shorthand (+branch)
|
|
267
|
+
const hasForce = allTokens.some((t) => t === "--force" || t === "-f") ||
|
|
268
|
+
allTokens.some((t) => t === "--force-with-lease");
|
|
269
|
+
const hasPlus = allTokens.some((t) => t.startsWith("+") && !t.startsWith("+-"));
|
|
270
|
+
if (!hasForce && !hasPlus)
|
|
271
|
+
return null;
|
|
272
|
+
// check if targeting a default branch
|
|
273
|
+
const branchesLower = new Set([...defaultBranches].map((b) => b.toLowerCase()));
|
|
274
|
+
const targetsBranch = allTokens.some((t) => {
|
|
275
|
+
if (t.startsWith("-"))
|
|
276
|
+
return false;
|
|
277
|
+
if (t.startsWith("+")) {
|
|
278
|
+
// +master or +refs/heads/master or HEAD:master
|
|
279
|
+
const ref = t.slice(1);
|
|
280
|
+
const parts = ref.split(":");
|
|
281
|
+
const dest = parts[parts.length - 1] ?? "";
|
|
282
|
+
return (branchesLower.has(dest.toLowerCase()) ||
|
|
283
|
+
branchesLower.has(dest.replace(/^refs\/heads\//, "").toLowerCase()));
|
|
284
|
+
}
|
|
285
|
+
// HEAD:master or origin/master notation
|
|
286
|
+
if (t.includes(":")) {
|
|
287
|
+
const dest = t.split(":")[1] ?? "";
|
|
288
|
+
return (branchesLower.has(dest.toLowerCase()) ||
|
|
289
|
+
branchesLower.has(dest.replace(/^refs\/heads\//, "").toLowerCase()));
|
|
290
|
+
}
|
|
291
|
+
return (branchesLower.has(t.toLowerCase()) ||
|
|
292
|
+
branchesLower.has(t.replace(/^refs\/heads\//, "").toLowerCase()));
|
|
293
|
+
});
|
|
294
|
+
if (!targetsBranch)
|
|
295
|
+
return null;
|
|
296
|
+
const forceKind = allTokens.some((t) => t === "--force-with-lease")
|
|
297
|
+
? "--force-with-lease"
|
|
298
|
+
: allTokens.some((t) => t.startsWith("+") && !t.startsWith("+-"))
|
|
299
|
+
? "refspec +"
|
|
300
|
+
: "--force";
|
|
301
|
+
return {
|
|
302
|
+
allowed: false,
|
|
303
|
+
category: "force_push_default",
|
|
304
|
+
detail: `git push ${forceKind} to default branch`,
|
|
305
|
+
recovery: [
|
|
306
|
+
" Force-pushing to the default branch is irreversible and rewrites",
|
|
307
|
+
" public history. If genuinely required:",
|
|
308
|
+
` • set the env-var bypass for this shell: ${ENV_BYPASS}=1`,
|
|
309
|
+
" • or push to a feature branch and use a PR.",
|
|
310
|
+
].join(os.EOL),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
// ---------------------------------------------------------------------------
|
|
314
|
+
// Public classifier
|
|
315
|
+
// ---------------------------------------------------------------------------
|
|
316
|
+
/**
|
|
317
|
+
* Classify a candidate command string.
|
|
318
|
+
*
|
|
319
|
+
* Mirrors `preflight_gh.py::classify_command`. Returns a Verdict with
|
|
320
|
+
* `allowed=false` and a destructive category name, or `{allowed:true,
|
|
321
|
+
* category:null}` when the command is benign.
|
|
322
|
+
*/
|
|
323
|
+
export function classifyCommand(command, defaultBranches = DEFAULT_BRANCHES) {
|
|
324
|
+
const tokens = tokensFromString(command);
|
|
325
|
+
return (detectDeleteRepo(tokens) ??
|
|
326
|
+
detectAdminMerge(tokens) ??
|
|
327
|
+
detectForcePushDefault(tokens, defaultBranches) ??
|
|
328
|
+
OK_VERDICT);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Evaluate a single candidate command; respects the env-var bypass.
|
|
332
|
+
*
|
|
333
|
+
* Returns `[exitCode, message]` -- mirrors `preflight_gh.py::evaluate_command`.
|
|
334
|
+
*/
|
|
335
|
+
export function evaluateCommand(command, defaultBranches = DEFAULT_BRANCHES) {
|
|
336
|
+
if (envBypassActive()) {
|
|
337
|
+
return [
|
|
338
|
+
0,
|
|
339
|
+
`⚠ deft destructive-gh-verb gate: ${ENV_BYPASS}=1 is set -- policy bypassed for this invocation.`,
|
|
340
|
+
];
|
|
341
|
+
}
|
|
342
|
+
const verdict = classifyCommand(command, defaultBranches);
|
|
343
|
+
if (verdict.allowed) {
|
|
344
|
+
return [0, `✓ deft destructive-gh-verb gate: '${command}' -- not destructive.`];
|
|
345
|
+
}
|
|
346
|
+
const msg = [
|
|
347
|
+
`❌ deft destructive-gh-verb gate: refusing '${command}'.`,
|
|
348
|
+
` Category: ${verdict.category}`,
|
|
349
|
+
` Detail: ${verdict.detail}`,
|
|
350
|
+
verdict.recovery,
|
|
351
|
+
]
|
|
352
|
+
.filter((l) => l.length > 0)
|
|
353
|
+
.join(os.EOL);
|
|
354
|
+
return [1, msg];
|
|
355
|
+
}
|
|
356
|
+
export const SELF_TEST_CASES = [
|
|
357
|
+
// delete_repo positives
|
|
358
|
+
["gh repo delete deftai/directive", "delete_repo"],
|
|
359
|
+
["gh repo delete deftai/directive --yes", "delete_repo"],
|
|
360
|
+
["gh api -X DELETE repos/deftai/directive", "delete_repo"],
|
|
361
|
+
["gh api --method DELETE repos/deftai/directive/contents/README.md", "delete_repo"],
|
|
362
|
+
["gh api -XDELETE repos/deftai/directive", "delete_repo"],
|
|
363
|
+
// admin_merge positives
|
|
364
|
+
["gh pr merge 123 --admin", "admin_merge"],
|
|
365
|
+
["gh pr merge --admin --squash 123", "admin_merge"],
|
|
366
|
+
// force_push_default positives
|
|
367
|
+
["git push --force origin master", "force_push_default"],
|
|
368
|
+
["git push origin --force-with-lease main", "force_push_default"],
|
|
369
|
+
["git push origin +master", "force_push_default"],
|
|
370
|
+
["git push --force origin HEAD:master", "force_push_default"],
|
|
371
|
+
// Negatives -- benign commands MUST classify as allowed.
|
|
372
|
+
["gh pr merge 123 --squash", null],
|
|
373
|
+
["gh repo view deftai/directive", null],
|
|
374
|
+
["gh api repos/deftai/directive", null],
|
|
375
|
+
["gh api -X PATCH repos/deftai/directive/issues/1", null],
|
|
376
|
+
["git push origin feat/my-branch", null],
|
|
377
|
+
["git push --force origin feat/my-branch", null],
|
|
378
|
+
["git push --force-with-lease origin feat/my-branch", null],
|
|
379
|
+
["git push", null],
|
|
380
|
+
["gh pr create --title Test --body foo", null],
|
|
381
|
+
];
|
|
382
|
+
/**
|
|
383
|
+
* Run every self-test fixture through the classifier.
|
|
384
|
+
*
|
|
385
|
+
* @param fixtures - Optional override fixture table (defaults to SELF_TEST_CASES).
|
|
386
|
+
* Inject a contrived table in tests to exercise the failure-path branch.
|
|
387
|
+
*
|
|
388
|
+
* Returns `[exitCode, message]`. Exit 0 = all pass; exit 2 = disagreement
|
|
389
|
+
* (config error / classifier drift) -- mirrors `preflight_gh.py::run_self_test`.
|
|
390
|
+
*/
|
|
391
|
+
export function runSelfTest(fixtures) {
|
|
392
|
+
const cases = fixtures ?? SELF_TEST_CASES;
|
|
393
|
+
const failures = [];
|
|
394
|
+
for (const [command, expected] of cases) {
|
|
395
|
+
const verdict = classifyCommand(command);
|
|
396
|
+
const observed = verdict.allowed ? null : verdict.category;
|
|
397
|
+
if (observed !== expected) {
|
|
398
|
+
failures.push(` ✗ ${JSON.stringify(command)} -- expected category=${JSON.stringify(expected)} but got category=${JSON.stringify(observed)} (detail=${JSON.stringify(verdict.detail)})`);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
if (failures.length > 0) {
|
|
402
|
+
return [
|
|
403
|
+
2,
|
|
404
|
+
[
|
|
405
|
+
`❌ deft destructive-gh-verb gate (self-test): classifier disagreement on ${failures.length}/${cases.length} fixture(s).`,
|
|
406
|
+
...failures,
|
|
407
|
+
].join(os.EOL),
|
|
408
|
+
];
|
|
409
|
+
}
|
|
410
|
+
return [
|
|
411
|
+
0,
|
|
412
|
+
`✓ deft destructive-gh-verb gate (self-test): ${cases.length}/${cases.length} fixtures classified as expected.`,
|
|
413
|
+
];
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=classifier.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Split CHANGELOG content into (body, link-footer). */
|
|
2
|
+
export declare function splitBodyAndLinks(text: string): [string, string];
|
|
3
|
+
/** Promote [Unreleased] to [<version>] - <today> and refresh the link footer. */
|
|
4
|
+
export declare function promoteChangelog(text: string, version: string, repo: string, today: string, summary?: string | null): string;
|
|
5
|
+
/** Extract the body of ## [<version>] - <date> for use as release notes. */
|
|
6
|
+
export declare function sectionForVersion(text: string, version: string): string;
|
|
7
|
+
/** Lead maintainer-mode GitHub release notes with the upgrade banner (#1413). */
|
|
8
|
+
export declare function prependUpgradeBanner(notes: string, repo: string, projectRoot: string, readText: (path: string) => string | null): string;
|
|
9
|
+
//# sourceMappingURL=changelog.d.ts.map
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { DEFAULT_REPO, FRESH_UNRELEASED_BLOCK, UNRELEASED_LINK_RE, UNRELEASED_RE, UPGRADE_BANNER_RELPATH, } from "./constants.js";
|
|
2
|
+
/** Split CHANGELOG content into (body, link-footer). */
|
|
3
|
+
export function splitBodyAndLinks(text) {
|
|
4
|
+
const lines = text.split(/(?<=\n)/);
|
|
5
|
+
let firstLinkIdx = null;
|
|
6
|
+
for (let idx = 0; idx < lines.length; idx += 1) {
|
|
7
|
+
const line = lines[idx] ?? "";
|
|
8
|
+
if (line.startsWith("[Unreleased]:") || /^\[\d+\.\d+\.\d+\]:/.test(line)) {
|
|
9
|
+
firstLinkIdx = idx;
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
if (firstLinkIdx === null) {
|
|
14
|
+
return [text, ""];
|
|
15
|
+
}
|
|
16
|
+
return [lines.slice(0, firstLinkIdx).join(""), lines.slice(firstLinkIdx).join("")];
|
|
17
|
+
}
|
|
18
|
+
function extractPreviousVersion(footer) {
|
|
19
|
+
const match = UNRELEASED_LINK_RE.exec(footer);
|
|
20
|
+
return match?.groups?.prev ?? null;
|
|
21
|
+
}
|
|
22
|
+
/** Promote [Unreleased] to [<version>] - <today> and refresh the link footer. */
|
|
23
|
+
export function promoteChangelog(text, version, repo, today, summary = null) {
|
|
24
|
+
if (!UNRELEASED_RE.test(text)) {
|
|
25
|
+
throw new Error("CHANGELOG.md does not contain a '## [Unreleased]' heading.");
|
|
26
|
+
}
|
|
27
|
+
if (summary !== null && (summary.includes("\n") || summary.includes("\r"))) {
|
|
28
|
+
throw new Error("--summary is single-line; got embedded newline. " +
|
|
29
|
+
"Author the blockquote on a single line.");
|
|
30
|
+
}
|
|
31
|
+
const [body, footer] = splitBodyAndLinks(text);
|
|
32
|
+
let promotedHeading = `## [${version}] - ${today}`;
|
|
33
|
+
if (summary) {
|
|
34
|
+
promotedHeading = `${promotedHeading}\n\n> ${summary}\n`;
|
|
35
|
+
}
|
|
36
|
+
const freshBlock = `${FRESH_UNRELEASED_BLOCK.trimEnd()}\n\n`;
|
|
37
|
+
const replacement = freshBlock + promotedHeading;
|
|
38
|
+
const newBody = body.replace(UNRELEASED_RE, () => replacement);
|
|
39
|
+
if (newBody === body) {
|
|
40
|
+
throw new Error("Failed to locate exactly one '## [Unreleased]' heading.");
|
|
41
|
+
}
|
|
42
|
+
const prev = extractPreviousVersion(footer);
|
|
43
|
+
const newUnreleasedLink = `[Unreleased]: https://github.com/${repo}/compare/v${version}...HEAD`;
|
|
44
|
+
const versionLink = prev
|
|
45
|
+
? `[${version}]: https://github.com/${repo}/compare/v${prev}...v${version}`
|
|
46
|
+
: `[${version}]: https://github.com/${repo}/releases/tag/v${version}`;
|
|
47
|
+
let newFooter;
|
|
48
|
+
if (footer) {
|
|
49
|
+
const footerLines = footer.split(/(?<=\n)/);
|
|
50
|
+
let replaced = false;
|
|
51
|
+
const newFooterLines = [];
|
|
52
|
+
for (const line of footerLines) {
|
|
53
|
+
if (!replaced && line.startsWith("[Unreleased]:")) {
|
|
54
|
+
newFooterLines.push(`${newUnreleasedLink}\n`);
|
|
55
|
+
newFooterLines.push(`${versionLink}\n`);
|
|
56
|
+
replaced = true;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
newFooterLines.push(line);
|
|
60
|
+
}
|
|
61
|
+
if (!replaced) {
|
|
62
|
+
newFooterLines.unshift(`${versionLink}\n`);
|
|
63
|
+
newFooterLines.unshift(`${newUnreleasedLink}\n`);
|
|
64
|
+
}
|
|
65
|
+
newFooter = newFooterLines.join("");
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
newFooter = `${newUnreleasedLink}\n${versionLink}\n`;
|
|
69
|
+
}
|
|
70
|
+
return newBody + newFooter;
|
|
71
|
+
}
|
|
72
|
+
/** Extract the body of ## [<version>] - <date> for use as release notes. */
|
|
73
|
+
export function sectionForVersion(text, version) {
|
|
74
|
+
const escaped = version.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
75
|
+
// Avoid /m on $ — JS $ with multiline matches every line end, not only EOF (Python \\Z).
|
|
76
|
+
const pattern = new RegExp(`(?:^|\\n)##\\s+\\[${escaped}\\][^\\n]*\\n([\\s\\S]*?)(?=(?:\\n##\\s+\\[)|$)`);
|
|
77
|
+
const match = pattern.exec(text);
|
|
78
|
+
if (!match?.[1]) {
|
|
79
|
+
return "";
|
|
80
|
+
}
|
|
81
|
+
return match[1].trim();
|
|
82
|
+
}
|
|
83
|
+
/** Lead maintainer-mode GitHub release notes with the upgrade banner (#1413). */
|
|
84
|
+
export function prependUpgradeBanner(notes, repo, projectRoot, readText) {
|
|
85
|
+
if (repo !== DEFAULT_REPO) {
|
|
86
|
+
return notes;
|
|
87
|
+
}
|
|
88
|
+
const bannerPath = `${projectRoot}/${UPGRADE_BANNER_RELPATH}`;
|
|
89
|
+
let banner;
|
|
90
|
+
try {
|
|
91
|
+
banner = readText(bannerPath);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return notes;
|
|
95
|
+
}
|
|
96
|
+
if (banner === null) {
|
|
97
|
+
return notes;
|
|
98
|
+
}
|
|
99
|
+
const normalized = banner.replace(/\r\n/g, "\n").trim();
|
|
100
|
+
if (!normalized) {
|
|
101
|
+
return notes;
|
|
102
|
+
}
|
|
103
|
+
return `${normalized}\n\n${notes}`;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=changelog.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* v8 ignore file -- thin shebang entry; covered via main.ts tests */
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { cmdRelease } from "./main.js";
|
|
4
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
5
|
+
process.exit(cmdRelease(process.argv.slice(2)));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Exit codes mirroring scripts/release.py. */
|
|
2
|
+
export declare const EXIT_OK = 0;
|
|
3
|
+
export declare const EXIT_VIOLATION = 1;
|
|
4
|
+
export declare const EXIT_CONFIG_ERROR = 2;
|
|
5
|
+
export declare const DEFAULT_REPO = "deftai/directive";
|
|
6
|
+
export declare const DEFAULT_BASE_BRANCH = "master";
|
|
7
|
+
export declare const UPGRADE_BANNER_RELPATH = ".github/release-notes/upgrade-banner.md";
|
|
8
|
+
export declare const VERSION_RE: RegExp;
|
|
9
|
+
export declare const TAG_RE: RegExp;
|
|
10
|
+
export declare const UNRELEASED_RE: RegExp;
|
|
11
|
+
export declare const UNRELEASED_LINK_RE: RegExp;
|
|
12
|
+
export declare const FRESH_UNRELEASED_BLOCK: string;
|
|
13
|
+
export declare const TOTAL_STEPS = 13;
|
|
14
|
+
export declare const VERIFY_DRAFT_MAX_ATTEMPTS = 5;
|
|
15
|
+
export declare const VERIFY_DRAFT_INTERVAL_SECONDS = 1;
|
|
16
|
+
export declare const RELEASE_ARTIFACTS: readonly ["CHANGELOG.md", "ROADMAP.md", "pyproject.toml", "uv.lock"];
|
|
17
|
+
export declare const BRANCH_GATE_BYPASS_ENV = "DEFT_ALLOW_DEFAULT_BRANCH_COMMIT";
|
|
18
|
+
export declare const DESTRUCTIVE_GH_GATE_BYPASS_ENV = "DEFT_ALLOW_DESTRUCTIVE_GH_VERBS";
|
|
19
|
+
export declare const PYPROJECT_VERSION_LINE_RE: RegExp;
|
|
20
|
+
/** Byte-identical argparse --help from scripts/release.py (Python 3.12). */
|
|
21
|
+
export declare const RELEASE_HELP: string;
|
|
22
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/** Exit codes mirroring scripts/release.py. */
|
|
2
|
+
export const EXIT_OK = 0;
|
|
3
|
+
export const EXIT_VIOLATION = 1;
|
|
4
|
+
export const EXIT_CONFIG_ERROR = 2;
|
|
5
|
+
export const DEFAULT_REPO = "deftai/directive";
|
|
6
|
+
export const DEFAULT_BASE_BRANCH = "master";
|
|
7
|
+
export const UPGRADE_BANNER_RELPATH = ".github/release-notes/upgrade-banner.md";
|
|
8
|
+
export const VERSION_RE = /^\d+\.\d+\.\d+$/;
|
|
9
|
+
export const TAG_RE = /^v(\d+\.\d+\.\d+)$/;
|
|
10
|
+
export const UNRELEASED_RE = /^##\s+\[Unreleased\]\s*$/m;
|
|
11
|
+
export const UNRELEASED_LINK_RE = /^\[Unreleased\]:\s+https?:\/\/github\.com\/[^/]+\/[^/]+\/compare\/v(?<prev>\d+\.\d+\.\d+)\.\.\.HEAD\s*$/m;
|
|
12
|
+
export const FRESH_UNRELEASED_BLOCK = "## [Unreleased]\n" +
|
|
13
|
+
"\n" +
|
|
14
|
+
"### Added\n" +
|
|
15
|
+
"\n" +
|
|
16
|
+
"### Changed\n" +
|
|
17
|
+
"\n" +
|
|
18
|
+
"### Fixed\n" +
|
|
19
|
+
"\n" +
|
|
20
|
+
"### Removed\n";
|
|
21
|
+
export const TOTAL_STEPS = 13;
|
|
22
|
+
export const VERIFY_DRAFT_MAX_ATTEMPTS = 5;
|
|
23
|
+
export const VERIFY_DRAFT_INTERVAL_SECONDS = 1.0;
|
|
24
|
+
export const RELEASE_ARTIFACTS = [
|
|
25
|
+
"CHANGELOG.md",
|
|
26
|
+
"ROADMAP.md",
|
|
27
|
+
"pyproject.toml",
|
|
28
|
+
"uv.lock",
|
|
29
|
+
];
|
|
30
|
+
export const BRANCH_GATE_BYPASS_ENV = "DEFT_ALLOW_DEFAULT_BRANCH_COMMIT";
|
|
31
|
+
export const DESTRUCTIVE_GH_GATE_BYPASS_ENV = "DEFT_ALLOW_DESTRUCTIVE_GH_VERBS";
|
|
32
|
+
export const PYPROJECT_VERSION_LINE_RE = /version\s*=\s*"[^"]*"/;
|
|
33
|
+
/** Byte-identical argparse --help from scripts/release.py (Python 3.12). */
|
|
34
|
+
export const RELEASE_HELP = "usage: release [-h] [--dry-run] [--skip-tag] [--skip-release] [--allow-dirty]\n" +
|
|
35
|
+
" [--allow-vbrief-drift] [--skip-ci] [--skip-build] [--no-draft]\n" +
|
|
36
|
+
" [--repo OWNER/REPO] [--base-branch BRANCH]\n" +
|
|
37
|
+
" [--project-root PATH] [--summary TEXT]\n" +
|
|
38
|
+
" version\n" +
|
|
39
|
+
"\n" +
|
|
40
|
+
"Automate the v0.X.Y release flow (#74): pre-flight, CI, CHANGELOG promote,\n" +
|
|
41
|
+
"ROADMAP refresh, build, tag, push, gh release. Halt-friendly: supports --dry-\n" +
|
|
42
|
+
"run / --skip-tag / --skip-release for safe rehearsals.\n" +
|
|
43
|
+
"\n" +
|
|
44
|
+
"positional arguments:\n" +
|
|
45
|
+
" version Release version, e.g. 0.21.0 (no leading 'v', strict\n" +
|
|
46
|
+
" X.Y.Z).\n" +
|
|
47
|
+
"\n" +
|
|
48
|
+
"options:\n" +
|
|
49
|
+
" -h, --help show this help message and exit\n" +
|
|
50
|
+
" --dry-run Print the full release plan without writing files or\n" +
|
|
51
|
+
" invoking external commands.\n" +
|
|
52
|
+
" --skip-tag Do not invoke git tag / git push origin <tag> (still\n" +
|
|
53
|
+
" updates CHANGELOG).\n" +
|
|
54
|
+
" --skip-release Do not invoke gh release create.\n" +
|
|
55
|
+
" --allow-dirty Bypass the dirty-tree pre-flight (use only for\n" +
|
|
56
|
+
" rehearsals).\n" +
|
|
57
|
+
" --allow-vbrief-drift Bypass the vBRIEF-lifecycle sync pre-flight gate\n" +
|
|
58
|
+
" (#734). Use only when the operator has reviewed the\n" +
|
|
59
|
+
" drift and explicitly accepts that closed-issue vBRIEFs\n" +
|
|
60
|
+
" may still live in non-terminal folders. The clean path\n" +
|
|
61
|
+
" is to run `task reconcile:issues -- --apply-lifecycle-\n" +
|
|
62
|
+
" fixes` first.\n" +
|
|
63
|
+
" --skip-ci Skip Step 3 (task ci:local / task check fallback).\n" +
|
|
64
|
+
" Used by `task release:e2e` to keep wall-clock\n" +
|
|
65
|
+
" manageable inside the auto-created temp repo (CI\n" +
|
|
66
|
+
" semantics are covered by the unit-test suite, not the\n" +
|
|
67
|
+
" e2e rehearsal).\n" +
|
|
68
|
+
" --skip-build Skip Step 6 (task build). Used by `task release:e2e`\n" +
|
|
69
|
+
" to keep wall-clock manageable; build artefacts are not\n" +
|
|
70
|
+
" needed for the draft-release verification step.\n" +
|
|
71
|
+
" --no-draft Publish the GitHub release immediately instead of\n" +
|
|
72
|
+
" creating a draft (default: --draft, paired with `task\n" +
|
|
73
|
+
" release:publish -- <version>`).\n" +
|
|
74
|
+
" --repo OWNER/REPO Override the GitHub repository (default: resolved from\n" +
|
|
75
|
+
" `git remote get-url origin`, falling back to\n" +
|
|
76
|
+
" 'deftai/directive').\n" +
|
|
77
|
+
" --base-branch BRANCH Expected base branch for releases (default: master).\n" +
|
|
78
|
+
" --project-root PATH Repository root (default: $DEFT_PROJECT_ROOT or the\n" +
|
|
79
|
+
" parent of the scripts/ directory).\n" +
|
|
80
|
+
" --summary TEXT Optional one-line summary to inject as a Markdown\n" +
|
|
81
|
+
" blockquote at the top of the promoted CHANGELOG\n" +
|
|
82
|
+
" section. Flows through to the GitHub release body and\n" +
|
|
83
|
+
" the Slack announcement template (Phase 8). Recommended\n" +
|
|
84
|
+
" length 80-160 chars.\n";
|
|
85
|
+
//# sourceMappingURL=constants.js.map
|