@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,452 @@
|
|
|
1
|
+
import { stripEdgeChars, stripTrailingChar, stripTrailingWhitespace } from "./normalize.js";
|
|
2
|
+
export const BROAD_FILE_SCOPE_ROOTS = new Set(["backend", "frontend", "docs", "vbrief"]);
|
|
3
|
+
export const CODE_PATH_TERMS = [
|
|
4
|
+
"api",
|
|
5
|
+
"cli",
|
|
6
|
+
"component",
|
|
7
|
+
"config",
|
|
8
|
+
"database",
|
|
9
|
+
"endpoint",
|
|
10
|
+
"file",
|
|
11
|
+
"handler",
|
|
12
|
+
"model",
|
|
13
|
+
"module",
|
|
14
|
+
"repository",
|
|
15
|
+
"route",
|
|
16
|
+
"schema",
|
|
17
|
+
"script",
|
|
18
|
+
"service",
|
|
19
|
+
"source",
|
|
20
|
+
"src/",
|
|
21
|
+
];
|
|
22
|
+
export const VERIFY_EVIDENCE_TERMS = [
|
|
23
|
+
"assert",
|
|
24
|
+
"evidence",
|
|
25
|
+
"fixture",
|
|
26
|
+
"report",
|
|
27
|
+
"spec",
|
|
28
|
+
"test",
|
|
29
|
+
"tests/",
|
|
30
|
+
"verify",
|
|
31
|
+
];
|
|
32
|
+
export const GENERIC_VERIFY_COMMANDS = new Set([
|
|
33
|
+
"cargo test",
|
|
34
|
+
"go test ./...",
|
|
35
|
+
"npm run test",
|
|
36
|
+
"npm test",
|
|
37
|
+
"pytest",
|
|
38
|
+
"task check",
|
|
39
|
+
]);
|
|
40
|
+
export const PLACEHOLDER_ACCEPTANCE_PATTERNS = [
|
|
41
|
+
"acceptance criteria for",
|
|
42
|
+
"copy from parent",
|
|
43
|
+
"copy from specification",
|
|
44
|
+
"placeholder",
|
|
45
|
+
"refine from parent",
|
|
46
|
+
"tbd",
|
|
47
|
+
"to be defined",
|
|
48
|
+
"to refine",
|
|
49
|
+
"to refine from parent scope",
|
|
50
|
+
"todo",
|
|
51
|
+
];
|
|
52
|
+
export const DOCS_ONLY_ACCEPTANCE_PATTERNS = [
|
|
53
|
+
"docs updated",
|
|
54
|
+
"documentation updated",
|
|
55
|
+
"readme updated",
|
|
56
|
+
"update docs",
|
|
57
|
+
"update documentation",
|
|
58
|
+
"update readme",
|
|
59
|
+
];
|
|
60
|
+
export const GENERIC_IMPLEMENTATION_PATTERNS = [
|
|
61
|
+
"add tests so it works",
|
|
62
|
+
"change the code",
|
|
63
|
+
"implement the feature",
|
|
64
|
+
"make it work",
|
|
65
|
+
"update the code",
|
|
66
|
+
"works as expected",
|
|
67
|
+
];
|
|
68
|
+
export const VAGUE_ACCEPTANCE_PATTERNS = [
|
|
69
|
+
"displays a message",
|
|
70
|
+
"handles errors",
|
|
71
|
+
"is implemented",
|
|
72
|
+
"is updated",
|
|
73
|
+
"passes tests",
|
|
74
|
+
"shows a message",
|
|
75
|
+
"the system displays a message",
|
|
76
|
+
"updates the ui",
|
|
77
|
+
"works as expected",
|
|
78
|
+
];
|
|
79
|
+
export const OBSERVABLE_TERMS = [
|
|
80
|
+
"blocks",
|
|
81
|
+
"creates",
|
|
82
|
+
"deletes",
|
|
83
|
+
"displays",
|
|
84
|
+
"emits",
|
|
85
|
+
"fails",
|
|
86
|
+
"persists",
|
|
87
|
+
"records",
|
|
88
|
+
"redirects",
|
|
89
|
+
"rejects",
|
|
90
|
+
"renders",
|
|
91
|
+
"returns",
|
|
92
|
+
"saves",
|
|
93
|
+
"shows",
|
|
94
|
+
"stores",
|
|
95
|
+
"updates",
|
|
96
|
+
"validates",
|
|
97
|
+
"when ",
|
|
98
|
+
"given ",
|
|
99
|
+
"then ",
|
|
100
|
+
];
|
|
101
|
+
// Linear, ReDoS-free recognizer for the Python USER_STORY_RE:
|
|
102
|
+
// ^\s*As\s+a[n]?\s+[^,]+,\s*I\s+want\s+.+,\s*so\s+that\s+.+\.\s*$ (IGNORECASE | DOTALL)
|
|
103
|
+
// The two greedy ``.+`` segments under DOTALL are the polynomial-backtracking
|
|
104
|
+
// source (CodeQL js/polynomial-redos). They are only ever consumed by a boolean
|
|
105
|
+
// ``.test()`` (no capture groups), so we replace the regex with an existence
|
|
106
|
+
// check that accepts EXACTLY the same language:
|
|
107
|
+
// * The bounded, unambiguous prefix (``As a/an <role>, I want``) is matched by a
|
|
108
|
+
// linear regex -- ``[^,]+`` is followed by ``,`` (excluded from the class) and
|
|
109
|
+
// every quantified ``\s`` sits next to a literal, so there is no overlapping
|
|
110
|
+
// adjacent-quantifier backtracking.
|
|
111
|
+
// * The ``.+,...,.+\.`` tail is verified by scanning for the literal connective
|
|
112
|
+
// ``, so that`` and a trailing literal period via string ops -- no backtracking.
|
|
113
|
+
// A single mandatory ``\s`` is enough wherever Python wrote ``\s+`` because the
|
|
114
|
+
// following greedy class (``[^,]+`` or DOTALL ``.+``) also matches whitespace, so
|
|
115
|
+
// the extra whitespace folds into it -- the accepted set is identical.
|
|
116
|
+
const USER_STORY_PREFIX_RE = /^\s*As\s+a[n]?\s[^,]+,\s*I\s+want\s/i;
|
|
117
|
+
const SO_THAT_PREFIX_RE = /^\s*so\s+that\s/i;
|
|
118
|
+
// Equivalent of ``^\s*so\s+that\s+.+\.\s*$`` (DOTALL) on the post-comma remainder.
|
|
119
|
+
function matchesSoThatClause(text) {
|
|
120
|
+
const prefix = SO_THAT_PREFIX_RE.exec(text);
|
|
121
|
+
if (prefix === null) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
// outcome ``.+`` then literal ``\.`` then ``\s*$``: after stripping trailing
|
|
125
|
+
// whitespace the remainder must end with ``.`` and carry >=1 outcome char.
|
|
126
|
+
const outcome = stripTrailingWhitespace(text.slice(prefix[0].length));
|
|
127
|
+
return outcome.length >= 2 && outcome.endsWith(".");
|
|
128
|
+
}
|
|
129
|
+
// Equivalent of ``.+,\s*so\s+that\s+.+\.\s*$`` (DOTALL): the capability ``.+`` is
|
|
130
|
+
// >=1 char, so try every comma at index >=1 and verify the so-that tail.
|
|
131
|
+
function matchesCapabilityAndOutcome(text) {
|
|
132
|
+
for (let i = 1; i < text.length; i += 1) {
|
|
133
|
+
if (text[i] === "," && matchesSoThatClause(text.slice(i + 1))) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
function matchesUserStory(text) {
|
|
140
|
+
const prefix = USER_STORY_PREFIX_RE.exec(text);
|
|
141
|
+
if (prefix === null) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return matchesCapabilityAndOutcome(text.slice(prefix[0].length));
|
|
145
|
+
}
|
|
146
|
+
export function asStrList(value) {
|
|
147
|
+
if (value === null || value === undefined) {
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
if (typeof value === "string") {
|
|
151
|
+
const trimmed = value.trim();
|
|
152
|
+
return trimmed ? [trimmed] : [];
|
|
153
|
+
}
|
|
154
|
+
if (Array.isArray(value)) {
|
|
155
|
+
return value.map((item) => String(item).trim()).filter((item) => item.length > 0);
|
|
156
|
+
}
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
export function acceptanceTextsFromItems(items) {
|
|
160
|
+
const texts = [];
|
|
161
|
+
if (!Array.isArray(items)) {
|
|
162
|
+
return texts;
|
|
163
|
+
}
|
|
164
|
+
for (const item of items) {
|
|
165
|
+
if (typeof item !== "object" || item === null) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const obj = item;
|
|
169
|
+
const narrative = obj.narrative;
|
|
170
|
+
if (typeof narrative === "object" && narrative !== null && !Array.isArray(narrative)) {
|
|
171
|
+
const acceptance = narrative.Acceptance;
|
|
172
|
+
if (typeof acceptance === "string" && acceptance.trim()) {
|
|
173
|
+
texts.push(acceptance.trim());
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
for (const childKey of ["items", "subItems"]) {
|
|
177
|
+
texts.push(...acceptanceTextsFromItems(obj[childKey]));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return texts;
|
|
181
|
+
}
|
|
182
|
+
export function itemHasAcceptance(item) {
|
|
183
|
+
const narrative = item.narrative;
|
|
184
|
+
if (typeof narrative === "object" && narrative !== null && !Array.isArray(narrative)) {
|
|
185
|
+
const value = narrative.Acceptance;
|
|
186
|
+
if (typeof value === "string" && value.trim()) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
for (const childKey of ["items", "subItems"]) {
|
|
191
|
+
const children = item[childKey];
|
|
192
|
+
if (Array.isArray(children)) {
|
|
193
|
+
for (const child of children) {
|
|
194
|
+
if (typeof child === "object" && child !== null && itemHasAcceptance(child)) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
export function itemsHaveAcceptance(items) {
|
|
203
|
+
if (!Array.isArray(items)) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
return items.some((item) => typeof item === "object" && item !== null && itemHasAcceptance(item));
|
|
207
|
+
}
|
|
208
|
+
export function itemHasTraces(item) {
|
|
209
|
+
const narrative = item.narrative;
|
|
210
|
+
if (typeof narrative === "object" && narrative !== null && !Array.isArray(narrative)) {
|
|
211
|
+
const value = narrative.Traces;
|
|
212
|
+
if (typeof value === "string" && value.trim()) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
for (const childKey of ["items", "subItems"]) {
|
|
217
|
+
const children = item[childKey];
|
|
218
|
+
if (Array.isArray(children)) {
|
|
219
|
+
for (const child of children) {
|
|
220
|
+
if (typeof child === "object" && child !== null && itemHasTraces(child)) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
export function missingRequiredSwarmFields(swarm) {
|
|
229
|
+
const missing = [];
|
|
230
|
+
for (const key of ["file_scope", "verify_commands", "expected_outputs"]) {
|
|
231
|
+
if (asStrList(swarm[key]).length === 0) {
|
|
232
|
+
missing.push(`plan.metadata.swarm.${key}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (!("depends_on" in swarm)) {
|
|
236
|
+
missing.push("plan.metadata.swarm.depends_on");
|
|
237
|
+
}
|
|
238
|
+
for (const key of ["conflict_group", "size", "file_scope_confidence", "model_tier"]) {
|
|
239
|
+
const value = swarm[key];
|
|
240
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
241
|
+
missing.push(`plan.metadata.swarm.${key}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return missing;
|
|
245
|
+
}
|
|
246
|
+
export function deprecatedSubitemsIssues(items, prefix = "plan.items") {
|
|
247
|
+
const issues = [];
|
|
248
|
+
const visit = (children, path) => {
|
|
249
|
+
if (!Array.isArray(children)) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
for (let index = 0; index < children.length; index += 1) {
|
|
253
|
+
const item = children[index];
|
|
254
|
+
if (typeof item !== "object" || item === null) {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const obj = item;
|
|
258
|
+
const itemPath = `${path}[${index}]`;
|
|
259
|
+
if ("subItems" in obj) {
|
|
260
|
+
issues.push(`${itemPath}.subItems is deprecated; use items`);
|
|
261
|
+
}
|
|
262
|
+
visit(obj.items, `${itemPath}.items`);
|
|
263
|
+
visit(obj.subItems, `${itemPath}.subItems`);
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
visit(items, prefix);
|
|
267
|
+
return issues;
|
|
268
|
+
}
|
|
269
|
+
export function storyQualityIssues(params) {
|
|
270
|
+
const issues = [];
|
|
271
|
+
const concurrentReady = params.concurrentReady ?? true;
|
|
272
|
+
if (!matchesUserStory(params.userStory ?? "")) {
|
|
273
|
+
issues.push("UserStory must match 'As a <role>, I want <capability>, so that <outcome>.'");
|
|
274
|
+
}
|
|
275
|
+
issues.push(...descriptionIssues(params.description));
|
|
276
|
+
issues.push(...implementationPlanIssues(params.implementationPlan));
|
|
277
|
+
if (!(params.acceptanceTexts.length >= 2 && params.acceptanceTexts.length <= 5) &&
|
|
278
|
+
!params.acceptanceCountJustification.trim()) {
|
|
279
|
+
issues.push("2-5 acceptance criteria required unless justified");
|
|
280
|
+
}
|
|
281
|
+
const normalizedTitle = normalize(params.title);
|
|
282
|
+
const normalizedDescription = normalize(params.description);
|
|
283
|
+
for (const criterion of params.acceptanceTexts) {
|
|
284
|
+
const normalized = normalize(criterion);
|
|
285
|
+
const lower = criterion.toLowerCase();
|
|
286
|
+
if (PLACEHOLDER_ACCEPTANCE_PATTERNS.some((pattern) => lower.includes(pattern))) {
|
|
287
|
+
issues.push("placeholder acceptance criterion");
|
|
288
|
+
}
|
|
289
|
+
if (normalized && (normalized === normalizedTitle || normalized === normalizedDescription)) {
|
|
290
|
+
issues.push("acceptance criterion duplicates title or description");
|
|
291
|
+
}
|
|
292
|
+
if (DOCS_ONLY_ACCEPTANCE_PATTERNS.some((pattern) => lower.includes(pattern))) {
|
|
293
|
+
issues.push("vague docs-only acceptance criterion");
|
|
294
|
+
}
|
|
295
|
+
if (wordCount(criterion) < 8 ||
|
|
296
|
+
VAGUE_ACCEPTANCE_PATTERNS.some((pattern) => lower.includes(pattern))) {
|
|
297
|
+
issues.push("acceptance criterion must describe specific observable behavior");
|
|
298
|
+
}
|
|
299
|
+
if (!looksObservable(lower)) {
|
|
300
|
+
issues.push("acceptance criterion must describe observable behavior");
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (concurrentReady) {
|
|
304
|
+
issues.push(...fileScopeIssues(params.swarm));
|
|
305
|
+
issues.push(...verifyCommandIssues(params.swarm));
|
|
306
|
+
if (params.swarm.parallel_safe === false) {
|
|
307
|
+
issues.push("readiness=ready requires parallel_safe=true; use readiness=sequential or needs_refinement for non-concurrent work");
|
|
308
|
+
}
|
|
309
|
+
if (params.swarm.file_scope_confidence === "low") {
|
|
310
|
+
issues.push("readiness=ready requires file_scope_confidence above low");
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return dedupe(issues);
|
|
314
|
+
}
|
|
315
|
+
function fileScopeIssues(swarm) {
|
|
316
|
+
const issues = [];
|
|
317
|
+
for (const filePath of asStrList(swarm.file_scope)) {
|
|
318
|
+
const normalized = stripEdgeChars(filePath.trim(), "/");
|
|
319
|
+
const root = normalized.split("/", 1)[0] ?? "";
|
|
320
|
+
if (/[*?[]/.test(normalized) ||
|
|
321
|
+
BROAD_FILE_SCOPE_ROOTS.has(normalized) ||
|
|
322
|
+
BROAD_FILE_SCOPE_ROOTS.has(stripTrailingChar(filePath, "/")) ||
|
|
323
|
+
(BROAD_FILE_SCOPE_ROOTS.has(root) && (normalized === root || normalized === `${root}/*`))) {
|
|
324
|
+
issues.push(`broad file_scope is not swarm-ready: ${filePath}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return issues;
|
|
328
|
+
}
|
|
329
|
+
function verifyCommandIssues(swarm) {
|
|
330
|
+
const commands = asStrList(swarm.verify_commands).map((command) => command.toLowerCase());
|
|
331
|
+
if (commands.length === 1 && GENERIC_VERIFY_COMMANDS.has(normalizeCommand(commands[0] ?? ""))) {
|
|
332
|
+
return [`generic verify command is not swarm-ready: ${commands[0]}`];
|
|
333
|
+
}
|
|
334
|
+
return [];
|
|
335
|
+
}
|
|
336
|
+
function descriptionIssues(description) {
|
|
337
|
+
if (!description.trim()) {
|
|
338
|
+
return ["plan.narratives.Description is required"];
|
|
339
|
+
}
|
|
340
|
+
if (sentenceCount(description) < 2 || wordCount(description) < 20) {
|
|
341
|
+
return ["plan.narratives.Description must contain at least two concrete sentences"];
|
|
342
|
+
}
|
|
343
|
+
return [];
|
|
344
|
+
}
|
|
345
|
+
function implementationPlanIssues(implementationPlan) {
|
|
346
|
+
if (!implementationPlan.trim()) {
|
|
347
|
+
return ["plan.narratives.ImplementationPlan is required"];
|
|
348
|
+
}
|
|
349
|
+
const issues = [];
|
|
350
|
+
if (stepCount(implementationPlan) < 2 || wordCount(implementationPlan) < 20) {
|
|
351
|
+
issues.push("plan.narratives.ImplementationPlan must contain at least two concrete steps");
|
|
352
|
+
}
|
|
353
|
+
const lower = implementationPlan.toLowerCase();
|
|
354
|
+
if (PLACEHOLDER_ACCEPTANCE_PATTERNS.some((pattern) => lower.includes(pattern))) {
|
|
355
|
+
issues.push("plan.narratives.ImplementationPlan must not be placeholder text");
|
|
356
|
+
}
|
|
357
|
+
if (GENERIC_IMPLEMENTATION_PATTERNS.some((pattern) => lower.includes(pattern)) ||
|
|
358
|
+
!(CODE_PATH_TERMS.some((term) => lower.includes(term)) &&
|
|
359
|
+
VERIFY_EVIDENCE_TERMS.some((term) => lower.includes(term)))) {
|
|
360
|
+
issues.push("plan.narratives.ImplementationPlan must identify concrete code paths and verification evidence");
|
|
361
|
+
}
|
|
362
|
+
return issues;
|
|
363
|
+
}
|
|
364
|
+
function looksObservable(lower) {
|
|
365
|
+
return OBSERVABLE_TERMS.some((term) => lower.includes(term));
|
|
366
|
+
}
|
|
367
|
+
function sentenceCount(value) {
|
|
368
|
+
// Equivalent of ``value.trim().split(/[.!?]+(?:\s+|$)/).filter(non-empty-trim).length``
|
|
369
|
+
// implemented as a linear scan to avoid the ReDoS-prone ``[.!?]+(?:\s+|$)``
|
|
370
|
+
// (CodeQL js/polynomial-redos). A segment boundary is a maximal run of
|
|
371
|
+
// ``[.!?]`` immediately followed by whitespace or end-of-string.
|
|
372
|
+
const trimmed = value.trim();
|
|
373
|
+
let count = 0;
|
|
374
|
+
let segmentHasContent = false;
|
|
375
|
+
let i = 0;
|
|
376
|
+
while (i < trimmed.length) {
|
|
377
|
+
const ch = trimmed[i];
|
|
378
|
+
if (ch === "." || ch === "!" || ch === "?") {
|
|
379
|
+
let j = i + 1;
|
|
380
|
+
while (j < trimmed.length) {
|
|
381
|
+
const next = trimmed[j];
|
|
382
|
+
if (next === "." || next === "!" || next === "?") {
|
|
383
|
+
j += 1;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
const boundary = j >= trimmed.length || /\s/.test(trimmed[j]);
|
|
390
|
+
if (boundary) {
|
|
391
|
+
if (segmentHasContent) {
|
|
392
|
+
count += 1;
|
|
393
|
+
}
|
|
394
|
+
segmentHasContent = false;
|
|
395
|
+
i = j;
|
|
396
|
+
while (i < trimmed.length && /\s/.test(trimmed[i])) {
|
|
397
|
+
i += 1;
|
|
398
|
+
}
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
// Terminators not followed by whitespace/end are ordinary segment content.
|
|
402
|
+
segmentHasContent = true;
|
|
403
|
+
i = j;
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
if (!/\s/.test(ch)) {
|
|
407
|
+
segmentHasContent = true;
|
|
408
|
+
}
|
|
409
|
+
i += 1;
|
|
410
|
+
}
|
|
411
|
+
if (segmentHasContent) {
|
|
412
|
+
count += 1;
|
|
413
|
+
}
|
|
414
|
+
return count;
|
|
415
|
+
}
|
|
416
|
+
function stepCount(value) {
|
|
417
|
+
const lines = value
|
|
418
|
+
.split("\n")
|
|
419
|
+
.map((line) => line.trim())
|
|
420
|
+
.filter((line) => line.length > 0);
|
|
421
|
+
const bulletLines = lines.filter((line) => /^([-*]|\d+[.)])\s+/.test(line));
|
|
422
|
+
if (bulletLines.length >= 2) {
|
|
423
|
+
return bulletLines.length;
|
|
424
|
+
}
|
|
425
|
+
return sentenceCount(value);
|
|
426
|
+
}
|
|
427
|
+
function wordCount(value) {
|
|
428
|
+
const matches = value.match(/\b\w+\b/g);
|
|
429
|
+
return matches?.length ?? 0;
|
|
430
|
+
}
|
|
431
|
+
function normalize(value) {
|
|
432
|
+
return value
|
|
433
|
+
.toLowerCase()
|
|
434
|
+
.replace(/[^a-z0-9]+/g, " ")
|
|
435
|
+
.trim();
|
|
436
|
+
}
|
|
437
|
+
function normalizeCommand(value) {
|
|
438
|
+
return value.trim().toLowerCase().replace(/\s+/g, " ");
|
|
439
|
+
}
|
|
440
|
+
function dedupe(values) {
|
|
441
|
+
const out = [];
|
|
442
|
+
const seen = new Set();
|
|
443
|
+
for (const value of values) {
|
|
444
|
+
if (seen.has(value)) {
|
|
445
|
+
continue;
|
|
446
|
+
}
|
|
447
|
+
seen.add(value);
|
|
448
|
+
out.push(value);
|
|
449
|
+
}
|
|
450
|
+
return out;
|
|
451
|
+
}
|
|
452
|
+
//# sourceMappingURL=story-quality.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type JsonObject = Record<string, unknown>;
|
|
2
|
+
export type SectionTuple = readonly [title: string, body: string, start: number, end: number];
|
|
3
|
+
export interface SpecTask {
|
|
4
|
+
task_id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
status: string;
|
|
7
|
+
body: string;
|
|
8
|
+
depends_on: string[];
|
|
9
|
+
traces: string[];
|
|
10
|
+
acceptance: string[];
|
|
11
|
+
start_line: number;
|
|
12
|
+
end_line: number;
|
|
13
|
+
}
|
|
14
|
+
export interface MigrationLogEntry {
|
|
15
|
+
source: string;
|
|
16
|
+
section_title: string;
|
|
17
|
+
line_range: string;
|
|
18
|
+
target_key: string;
|
|
19
|
+
target_file: string;
|
|
20
|
+
}
|
|
21
|
+
export interface BackupRecord {
|
|
22
|
+
source: string;
|
|
23
|
+
backup: string;
|
|
24
|
+
source_sha256: string;
|
|
25
|
+
size_bytes: number;
|
|
26
|
+
}
|
|
27
|
+
export interface FileModification {
|
|
28
|
+
path: string;
|
|
29
|
+
operation: string;
|
|
30
|
+
pre_hash: string;
|
|
31
|
+
post_hash: string;
|
|
32
|
+
appended_content: string;
|
|
33
|
+
}
|
|
34
|
+
export interface RenameRecord {
|
|
35
|
+
original: string;
|
|
36
|
+
current: string;
|
|
37
|
+
renamed_by: string;
|
|
38
|
+
renamed_at: string;
|
|
39
|
+
}
|
|
40
|
+
export interface SafetyManifestData {
|
|
41
|
+
version: string;
|
|
42
|
+
migration_timestamp: string;
|
|
43
|
+
backups: BackupRecord[];
|
|
44
|
+
created_files: string[];
|
|
45
|
+
created_dirs: string[];
|
|
46
|
+
post_migration_stub_hashes: Record<string, string>;
|
|
47
|
+
renames: RenameRecord[];
|
|
48
|
+
file_modifications: FileModification[];
|
|
49
|
+
}
|
|
50
|
+
export interface FinalizeMigrationOptions {
|
|
51
|
+
readonly stderrWriter?: (chunk: string) => void;
|
|
52
|
+
readonly isolateInvalid?: typeof import("./validation.js").isolateInvalidOutput;
|
|
53
|
+
}
|
|
54
|
+
export interface RollbackOptions {
|
|
55
|
+
readonly force?: boolean;
|
|
56
|
+
readonly confirmFn?: (prompt: string) => boolean;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FinalizeMigrationOptions, JsonObject } from "./types.js";
|
|
2
|
+
export declare const RECOVERY_HINT = "Restore with: task migrate:vbrief -- --rollback";
|
|
3
|
+
export declare const ID_MAX_LENGTH = 80;
|
|
4
|
+
export declare const HASH_SUFFIX_LENGTH = 6;
|
|
5
|
+
/** Return a slug-safe id for filenames and in-JSON id fields (#498). */
|
|
6
|
+
export declare function slugifyId(raw: string | null | undefined, existing?: Set<string>): string;
|
|
7
|
+
/** Return the logical identifier source for a scope item dict. */
|
|
8
|
+
export declare function slugFallbackId(item: JsonObject): string;
|
|
9
|
+
/** Validate every file emitted by the migrator under ``vbriefDir``. */
|
|
10
|
+
export declare function validateMigrationOutput(vbriefDir: string): readonly [string[], string[]];
|
|
11
|
+
/** Move the emitted ``vbrief/`` tree to ``vbrief.invalid/`` on failure. */
|
|
12
|
+
export declare function isolateInvalidOutput(projectRoot: string, vbriefDir: string): string | null;
|
|
13
|
+
/** Run validation + isolation as the migrator's terminal gate (#498). */
|
|
14
|
+
export declare function finalizeMigration(projectRoot: string, vbriefDir: string, actions: string[], options?: FinalizeMigrationOptions): readonly [boolean, string[]];
|
|
15
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, renameSync, statSync } from "node:fs";
|
|
3
|
+
import { join, relative } from "node:path";
|
|
4
|
+
import { validateAllMigration } from "../vbrief-validate/validate-all.js";
|
|
5
|
+
import { stripEdgeChars, stripTrailingChar } from "./normalize.js";
|
|
6
|
+
export const RECOVERY_HINT = "Restore with: task migrate:vbrief -- --rollback";
|
|
7
|
+
export const ID_MAX_LENGTH = 80;
|
|
8
|
+
export const HASH_SUFFIX_LENGTH = 6;
|
|
9
|
+
/** Return a slug-safe id for filenames and in-JSON id fields (#498). */
|
|
10
|
+
export function slugifyId(raw, existing) {
|
|
11
|
+
const text = (raw ?? "").trim();
|
|
12
|
+
let slug = text.toLowerCase().replace(/[^a-z0-9]+/g, "-");
|
|
13
|
+
slug = stripEdgeChars(slug, "-");
|
|
14
|
+
if (!slug) {
|
|
15
|
+
slug = "untitled";
|
|
16
|
+
}
|
|
17
|
+
if (slug.length > ID_MAX_LENGTH) {
|
|
18
|
+
slug = stripTrailingChar(slug.slice(0, ID_MAX_LENGTH), "-") || slug.slice(0, ID_MAX_LENGTH);
|
|
19
|
+
}
|
|
20
|
+
if (existing === undefined) {
|
|
21
|
+
return slug;
|
|
22
|
+
}
|
|
23
|
+
if (!existing.has(slug)) {
|
|
24
|
+
existing.add(slug);
|
|
25
|
+
return slug;
|
|
26
|
+
}
|
|
27
|
+
const digestSeed = text || slug;
|
|
28
|
+
const baseMax = ID_MAX_LENGTH - 1 - HASH_SUFFIX_LENGTH;
|
|
29
|
+
const base = slug.slice(0, baseMax).replace(/-+$/, "") || slug.slice(0, baseMax) || "id";
|
|
30
|
+
let h = createHash("sha1").update(digestSeed, "utf8").digest("hex").slice(0, HASH_SUFFIX_LENGTH);
|
|
31
|
+
let candidate = `${base}-${h}`;
|
|
32
|
+
let attempt = 0;
|
|
33
|
+
while (existing.has(candidate) && attempt < 1000) {
|
|
34
|
+
attempt += 1;
|
|
35
|
+
h = createHash("sha1")
|
|
36
|
+
.update(`${digestSeed}|${attempt}`, "utf8")
|
|
37
|
+
.digest("hex")
|
|
38
|
+
.slice(0, HASH_SUFFIX_LENGTH);
|
|
39
|
+
candidate = `${base}-${h}`;
|
|
40
|
+
}
|
|
41
|
+
existing.add(candidate);
|
|
42
|
+
return candidate;
|
|
43
|
+
}
|
|
44
|
+
/** Return the logical identifier source for a scope item dict. */
|
|
45
|
+
export function slugFallbackId(item) {
|
|
46
|
+
const number = String(item.number ?? "").trim();
|
|
47
|
+
if (number) {
|
|
48
|
+
return number;
|
|
49
|
+
}
|
|
50
|
+
const taskId = String(item.task_id ?? "").trim();
|
|
51
|
+
if (taskId) {
|
|
52
|
+
return taskId;
|
|
53
|
+
}
|
|
54
|
+
const synthetic = String(item.synthetic_id ?? "").trim();
|
|
55
|
+
if (synthetic) {
|
|
56
|
+
return synthetic;
|
|
57
|
+
}
|
|
58
|
+
return String(item.title ?? "").trim() || "untitled";
|
|
59
|
+
}
|
|
60
|
+
/** Validate every file emitted by the migrator under ``vbriefDir``. */
|
|
61
|
+
export function validateMigrationOutput(vbriefDir) {
|
|
62
|
+
try {
|
|
63
|
+
if (!statSync(vbriefDir).isDirectory()) {
|
|
64
|
+
return [[`${vbriefDir}: expected vbrief directory does not exist`], []];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [[`${vbriefDir}: expected vbrief directory does not exist`], []];
|
|
69
|
+
}
|
|
70
|
+
const [errors, warnings] = validateAllMigration(vbriefDir);
|
|
71
|
+
return [[...errors], [...warnings]];
|
|
72
|
+
}
|
|
73
|
+
/** Move the emitted ``vbrief/`` tree to ``vbrief.invalid/`` on failure. */
|
|
74
|
+
export function isolateInvalidOutput(projectRoot, vbriefDir) {
|
|
75
|
+
if (!existsSync(vbriefDir)) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
let target = join(projectRoot, "vbrief.invalid");
|
|
79
|
+
let idx = 1;
|
|
80
|
+
while (existsSync(target)) {
|
|
81
|
+
idx += 1;
|
|
82
|
+
target = join(projectRoot, `vbrief.invalid.${idx}`);
|
|
83
|
+
}
|
|
84
|
+
renameSync(vbriefDir, target);
|
|
85
|
+
return target;
|
|
86
|
+
}
|
|
87
|
+
/** Run validation + isolation as the migrator's terminal gate (#498). */
|
|
88
|
+
export function finalizeMigration(projectRoot, vbriefDir, actions, options = {}) {
|
|
89
|
+
const stderrWriter = options.stderrWriter ?? ((chunk) => process.stderr.write(chunk));
|
|
90
|
+
const isolateFn = options.isolateInvalid ?? isolateInvalidOutput;
|
|
91
|
+
const [errors, warnings] = validateMigrationOutput(vbriefDir);
|
|
92
|
+
if (errors.length === 0) {
|
|
93
|
+
for (const w of warnings) {
|
|
94
|
+
stderrWriter(`WARNING: ${w}\n`);
|
|
95
|
+
}
|
|
96
|
+
return [true, actions];
|
|
97
|
+
}
|
|
98
|
+
stderrWriter(`ERROR: Migration produced invalid output (${errors.length} file-level error(s)):\n`);
|
|
99
|
+
for (const err of errors) {
|
|
100
|
+
stderrWriter(` ${err}\n`);
|
|
101
|
+
}
|
|
102
|
+
const invalidDir = isolateFn(projectRoot, vbriefDir);
|
|
103
|
+
const failureActions = [...actions];
|
|
104
|
+
failureActions.push(`FAIL migration produced ${errors.length} schema validation error(s)`);
|
|
105
|
+
for (const err of errors) {
|
|
106
|
+
failureActions.push(` ${err}`);
|
|
107
|
+
}
|
|
108
|
+
if (invalidDir !== null) {
|
|
109
|
+
let relInvalid;
|
|
110
|
+
try {
|
|
111
|
+
relInvalid = relative(projectRoot, invalidDir).split("\\").join("/");
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
relInvalid = invalidDir;
|
|
115
|
+
}
|
|
116
|
+
failureActions.push(`MOVE vbrief/ -> ${relInvalid}/ (isolated from vbrief/)`);
|
|
117
|
+
stderrWriter(`Isolated partial output to: ${relInvalid}\n`);
|
|
118
|
+
}
|
|
119
|
+
failureActions.push(RECOVERY_HINT);
|
|
120
|
+
stderrWriter(`${RECOVERY_HINT}\n`);
|
|
121
|
+
return [false, failureActions];
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Node/pnpm presence contract for TS-backed consumer gates (#1828 / #1530). */
|
|
2
|
+
export declare const NODE_RUNTIME_TOOL_NAMES: readonly ["node", "pnpm"];
|
|
3
|
+
export declare const NODE_RUNTIME_REMEDIATION = "Node.js and pnpm are required for TS-backed deft gates. Install Node 20+ (see .nvmrc), then run: corepack enable && corepack prepare pnpm@latest --activate. See UPGRADING.md \u00A7 Node runtime.";
|
|
4
|
+
/** Append remediation lines when node or pnpm is among the missing tools. */
|
|
5
|
+
export declare function nodeRuntimeRemediationLines(failed: readonly string[]): readonly string[];
|
|
6
|
+
//# sourceMappingURL=node-runtime.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Node/pnpm presence contract for TS-backed consumer gates (#1828 / #1530). */
|
|
2
|
+
export const NODE_RUNTIME_TOOL_NAMES = ["node", "pnpm"];
|
|
3
|
+
export const NODE_RUNTIME_REMEDIATION = "Node.js and pnpm are required for TS-backed deft gates. Install Node 20+ (see .nvmrc), then run: corepack enable && corepack prepare pnpm@latest --activate. See UPGRADING.md § Node runtime.";
|
|
4
|
+
/** Append remediation lines when node or pnpm is among the missing tools. */
|
|
5
|
+
export function nodeRuntimeRemediationLines(failed) {
|
|
6
|
+
if (failed.some((name) => NODE_RUNTIME_TOOL_NAMES.includes(name))) {
|
|
7
|
+
return [NODE_RUNTIME_REMEDIATION];
|
|
8
|
+
}
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=node-runtime.js.map
|