@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,139 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { appendFileSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { DEFAULT_SLICES_LOG_REL_PATH } from "./constants.js";
|
|
5
|
+
import { pythonJsonStringify } from "./json.js";
|
|
6
|
+
import { withAppendLock } from "./lock.js";
|
|
7
|
+
import { validateRecord } from "./validate.js";
|
|
8
|
+
const defaultDeps = {
|
|
9
|
+
readFile: readFileSync,
|
|
10
|
+
exists: existsSync,
|
|
11
|
+
append: appendFileSync,
|
|
12
|
+
fsync: fsyncSync,
|
|
13
|
+
open: openSync,
|
|
14
|
+
close: closeSync,
|
|
15
|
+
mkdir: mkdirSync,
|
|
16
|
+
withLock: withAppendLock,
|
|
17
|
+
};
|
|
18
|
+
function resolvePath(path) {
|
|
19
|
+
return path !== undefined ? resolve(path) : resolve(DEFAULT_SLICES_LOG_REL_PATH);
|
|
20
|
+
}
|
|
21
|
+
export function newSliceId() {
|
|
22
|
+
return randomUUID();
|
|
23
|
+
}
|
|
24
|
+
/** Return the current UTC time in canonical ISO-8601 form with Z suffix (no fractional seconds). */
|
|
25
|
+
export function nowIso() {
|
|
26
|
+
return new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
27
|
+
}
|
|
28
|
+
function parseJsonlIds(logPath, deps, warn) {
|
|
29
|
+
if (!deps.exists(logPath)) {
|
|
30
|
+
return new Set();
|
|
31
|
+
}
|
|
32
|
+
const seen = new Set();
|
|
33
|
+
const raw = deps.readFile(logPath, "utf8");
|
|
34
|
+
const lines = raw.split("\n");
|
|
35
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
36
|
+
const stripped = lines[i]?.trim() ?? "";
|
|
37
|
+
if (stripped.length === 0) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const obj = JSON.parse(stripped);
|
|
42
|
+
if (obj !== null && typeof obj === "object" && !Array.isArray(obj)) {
|
|
43
|
+
const sid = obj.slice_id;
|
|
44
|
+
if (typeof sid === "string") {
|
|
45
|
+
seen.add(sid);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
warn?.(`slices.jsonl: skipping malformed JSON on line ${i + 1}: ${String(err)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return seen;
|
|
54
|
+
}
|
|
55
|
+
/** Validate + append record without acquiring the sidecar lock. */
|
|
56
|
+
export function writeSliceUnlocked(record, options = {}) {
|
|
57
|
+
const deps = { ...defaultDeps, ...options.deps };
|
|
58
|
+
validateRecord(record);
|
|
59
|
+
const logPath = resolvePath(options.path);
|
|
60
|
+
deps.mkdir(dirname(logPath), { recursive: true });
|
|
61
|
+
const resolvedId = String(record.slice_id);
|
|
62
|
+
const existing = parseJsonlIds(logPath, deps, options.warn);
|
|
63
|
+
if (existing.has(resolvedId)) {
|
|
64
|
+
return resolvedId;
|
|
65
|
+
}
|
|
66
|
+
const line = `${pythonJsonStringify(record)}\n`;
|
|
67
|
+
deps.append(logPath, line, { encoding: "utf8" });
|
|
68
|
+
const fd = deps.open(logPath, "a");
|
|
69
|
+
try {
|
|
70
|
+
deps.fsync(fd);
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
deps.close(fd);
|
|
74
|
+
}
|
|
75
|
+
return resolvedId;
|
|
76
|
+
}
|
|
77
|
+
/** Validate and atomically append a cohort record to slices.jsonl. */
|
|
78
|
+
export function writeSlice(umbrella, children, options, deps = {}) {
|
|
79
|
+
const mergedDeps = { ...defaultDeps, ...deps };
|
|
80
|
+
const resolvedId = options.sliceId ?? options.newSliceId?.() ?? newSliceId();
|
|
81
|
+
const record = {
|
|
82
|
+
slice_id: resolvedId,
|
|
83
|
+
umbrella,
|
|
84
|
+
umbrella_url: options.umbrellaUrl,
|
|
85
|
+
sliced_at: options.slicedAt ?? options.nowIso?.() ?? nowIso(),
|
|
86
|
+
actor: options.actor,
|
|
87
|
+
children: [...children].map((child) => ({ ...child })),
|
|
88
|
+
expected_close_signal: options.expectedCloseSignal ?? "all-children-merged",
|
|
89
|
+
};
|
|
90
|
+
if (options.notes !== undefined) {
|
|
91
|
+
record.notes = options.notes;
|
|
92
|
+
}
|
|
93
|
+
const logPath = resolvePath(options.path);
|
|
94
|
+
return mergedDeps.withLock(logPath, () => writeSliceUnlocked(record, { path: logPath, deps: mergedDeps }));
|
|
95
|
+
}
|
|
96
|
+
/** Return every well-formed slice record in insertion order. */
|
|
97
|
+
export function readAll(options = {}) {
|
|
98
|
+
const deps = { ...defaultDeps, ...options.deps };
|
|
99
|
+
const logPath = resolvePath(options.path);
|
|
100
|
+
if (!deps.exists(logPath)) {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
const out = [];
|
|
104
|
+
const raw = deps.readFile(logPath, "utf8");
|
|
105
|
+
const lines = raw.split("\n");
|
|
106
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
107
|
+
const stripped = lines[i]?.trim() ?? "";
|
|
108
|
+
if (stripped.length === 0) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const obj = JSON.parse(stripped);
|
|
113
|
+
if (obj === null || typeof obj !== "object" || Array.isArray(obj)) {
|
|
114
|
+
options.warn?.(`slices.jsonl: skipping non-object entry on line ${i + 1} (got ${obj === null ? "null" : typeof obj})`);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
out.push(obj);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
options.warn?.(`slices.jsonl: skipping malformed JSON on line ${i + 1}: ${String(err)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
export function findBySliceId(sliceId, options = {}) {
|
|
126
|
+
for (const record of readAll(options)) {
|
|
127
|
+
if (record.slice_id === sliceId) {
|
|
128
|
+
return record;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
export function findByUmbrella(umbrella, options = {}) {
|
|
134
|
+
return readAll(options).filter((record) => record.umbrella === umbrella);
|
|
135
|
+
}
|
|
136
|
+
export function slicesPath(projectRoot) {
|
|
137
|
+
return join(resolve(projectRoot), DEFAULT_SLICES_LOG_REL_PATH);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { ALLOWED_FIELDS, CHILD_ALLOWED_FIELDS, CHILD_REQUIRED_FIELDS, ISO8601_RE, REQUIRED_FIELDS, UUID_RE, VALID_EXPECTED_CLOSE_SIGNALS, } from "./constants.js";
|
|
2
|
+
import { SliceRecordError } from "./errors.js";
|
|
3
|
+
function validateChild(child, index) {
|
|
4
|
+
if (child === null || typeof child !== "object" || Array.isArray(child)) {
|
|
5
|
+
throw new SliceRecordError(`children[${index}] must be a dict, got ${child === null ? "null" : typeof child}`);
|
|
6
|
+
}
|
|
7
|
+
const record = child;
|
|
8
|
+
const missing = CHILD_REQUIRED_FIELDS.filter((field) => !(field in record));
|
|
9
|
+
if (missing.length > 0) {
|
|
10
|
+
throw new SliceRecordError(`children[${index}] missing required field(s): ${missing}`);
|
|
11
|
+
}
|
|
12
|
+
const extras = Object.keys(record)
|
|
13
|
+
.filter((key) => !CHILD_ALLOWED_FIELDS.has(key))
|
|
14
|
+
.sort();
|
|
15
|
+
if (extras.length > 0) {
|
|
16
|
+
throw new SliceRecordError(`children[${index}] has unknown field(s): ${extras}`);
|
|
17
|
+
}
|
|
18
|
+
const n = record.n;
|
|
19
|
+
if (typeof n !== "number" || !Number.isInteger(n) || n < 1) {
|
|
20
|
+
throw new SliceRecordError(`children[${index}].n must be a positive int, got ${String(n)}`);
|
|
21
|
+
}
|
|
22
|
+
const url = record.url;
|
|
23
|
+
if (typeof url !== "string" || url.length === 0) {
|
|
24
|
+
throw new SliceRecordError(`children[${index}].url must be a non-empty string, got ${String(url)}`);
|
|
25
|
+
}
|
|
26
|
+
const wave = record.wave;
|
|
27
|
+
if (typeof wave !== "number" || !Number.isInteger(wave) || wave < 1) {
|
|
28
|
+
throw new SliceRecordError(`children[${index}].wave must be a positive int, got ${String(wave)}`);
|
|
29
|
+
}
|
|
30
|
+
const role = record.role;
|
|
31
|
+
if (typeof role !== "string" || role.length === 0) {
|
|
32
|
+
throw new SliceRecordError(`children[${index}].role must be a non-empty string, got ${String(role)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Hand-rolled mirror of vbrief/schemas/slices.schema.json. */
|
|
36
|
+
export function validateRecord(record) {
|
|
37
|
+
if (record === null || typeof record !== "object" || Array.isArray(record)) {
|
|
38
|
+
throw new SliceRecordError(`record must be a dict, got ${record === null ? "null" : typeof record}`);
|
|
39
|
+
}
|
|
40
|
+
const obj = record;
|
|
41
|
+
const missing = REQUIRED_FIELDS.filter((field) => !(field in obj));
|
|
42
|
+
if (missing.length > 0) {
|
|
43
|
+
throw new SliceRecordError(`record missing required field(s): ${missing}`);
|
|
44
|
+
}
|
|
45
|
+
const extras = Object.keys(obj)
|
|
46
|
+
.filter((key) => !ALLOWED_FIELDS.has(key))
|
|
47
|
+
.sort();
|
|
48
|
+
if (extras.length > 0) {
|
|
49
|
+
throw new SliceRecordError(`record has unknown field(s): ${extras}`);
|
|
50
|
+
}
|
|
51
|
+
const sliceId = obj.slice_id;
|
|
52
|
+
if (typeof sliceId !== "string" || !UUID_RE.test(sliceId)) {
|
|
53
|
+
throw new SliceRecordError(`slice_id must be a UUID string, got ${String(sliceId)}`);
|
|
54
|
+
}
|
|
55
|
+
const umbrella = obj.umbrella;
|
|
56
|
+
if (typeof umbrella !== "number" || !Number.isInteger(umbrella) || umbrella < 1) {
|
|
57
|
+
throw new SliceRecordError(`umbrella must be a positive int, got ${String(umbrella)}`);
|
|
58
|
+
}
|
|
59
|
+
const umbrellaUrl = obj.umbrella_url;
|
|
60
|
+
if (typeof umbrellaUrl !== "string" || umbrellaUrl.length === 0) {
|
|
61
|
+
throw new SliceRecordError(`umbrella_url must be a non-empty string, got ${String(umbrellaUrl)}`);
|
|
62
|
+
}
|
|
63
|
+
const slicedAt = obj.sliced_at;
|
|
64
|
+
if (typeof slicedAt !== "string" || !ISO8601_RE.test(slicedAt)) {
|
|
65
|
+
throw new SliceRecordError(`sliced_at must be ISO-8601 UTC with Z suffix (e.g. 2026-05-13T18:00:00Z), got ${String(slicedAt)}`);
|
|
66
|
+
}
|
|
67
|
+
const actor = obj.actor;
|
|
68
|
+
if (typeof actor !== "string" || actor.length === 0) {
|
|
69
|
+
throw new SliceRecordError(`actor must be a non-empty string, got ${String(actor)}`);
|
|
70
|
+
}
|
|
71
|
+
const children = obj.children;
|
|
72
|
+
if (!Array.isArray(children) || children.length === 0) {
|
|
73
|
+
throw new SliceRecordError("children must be a non-empty list of child records");
|
|
74
|
+
}
|
|
75
|
+
for (let i = 0; i < children.length; i += 1) {
|
|
76
|
+
validateChild(children[i], i);
|
|
77
|
+
}
|
|
78
|
+
const expected = obj.expected_close_signal;
|
|
79
|
+
if (typeof expected !== "string" || !VALID_EXPECTED_CLOSE_SIGNALS.has(expected)) {
|
|
80
|
+
throw new SliceRecordError(`expected_close_signal must be one of ${[...VALID_EXPECTED_CLOSE_SIGNALS].sort()}, got ${String(expected)}`);
|
|
81
|
+
}
|
|
82
|
+
if ("notes" in obj && typeof obj.notes !== "string") {
|
|
83
|
+
throw new SliceRecordError(`notes must be a string, got ${typeof obj.notes}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const ALLOCATION_HEADING = "## Allocation context";
|
|
2
|
+
export declare const SOLO_KIND = "solo";
|
|
3
|
+
export declare const SWARM_COHORT_KIND = "swarm-cohort";
|
|
4
|
+
export declare const VALID_DISPATCH_KINDS: Set<string>;
|
|
5
|
+
/** Strip a parsed field value; return null for null-equivalent tokens. */
|
|
6
|
+
export declare function normaliseValue(raw: string): string | null;
|
|
7
|
+
export type AllocationFields = Record<string, string | null>;
|
|
8
|
+
export type ParsedAllocation = readonly [found: boolean, fields: AllocationFields];
|
|
9
|
+
/**
|
|
10
|
+
* Parse the `## Allocation context` section from a dispatch envelope.
|
|
11
|
+
* Pure — no I/O. Never throws.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseAllocationSection(text: string | null | undefined): ParsedAllocation;
|
|
14
|
+
//# sourceMappingURL=allocation.d.ts.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export const ALLOCATION_HEADING = "## Allocation context";
|
|
2
|
+
export const SOLO_KIND = "solo";
|
|
3
|
+
export const SWARM_COHORT_KIND = "swarm-cohort";
|
|
4
|
+
export const VALID_DISPATCH_KINDS = new Set([SOLO_KIND, SWARM_COHORT_KIND]);
|
|
5
|
+
const NULL_TOKENS = new Set(["", "null", "none", "n/a"]);
|
|
6
|
+
/** Strip a parsed field value; return null for null-equivalent tokens. */
|
|
7
|
+
export function normaliseValue(raw) {
|
|
8
|
+
let value = raw.trim();
|
|
9
|
+
for (const pair of ["``", "`", '"', "'"]) {
|
|
10
|
+
if (value.length >= 2 * pair.length && value.startsWith(pair) && value.endsWith(pair)) {
|
|
11
|
+
value = value.slice(pair.length, value.length - pair.length).trim();
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
if (NULL_TOKENS.has(value.toLowerCase())) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse the `## Allocation context` section from a dispatch envelope.
|
|
22
|
+
* Pure — no I/O. Never throws.
|
|
23
|
+
*/
|
|
24
|
+
export function parseAllocationSection(text) {
|
|
25
|
+
if (text === null || text === undefined) {
|
|
26
|
+
return [false, {}];
|
|
27
|
+
}
|
|
28
|
+
const lines = text.split(/\r?\n/);
|
|
29
|
+
let headingIdx = null;
|
|
30
|
+
for (let idx = 0; idx < lines.length; idx += 1) {
|
|
31
|
+
if (lines[idx]?.trim() === ALLOCATION_HEADING) {
|
|
32
|
+
headingIdx = idx;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (headingIdx === null) {
|
|
37
|
+
return [false, {}];
|
|
38
|
+
}
|
|
39
|
+
const fields = {};
|
|
40
|
+
for (const line of lines.slice(headingIdx + 1)) {
|
|
41
|
+
const stripped = line.trim();
|
|
42
|
+
if (stripped.startsWith("#")) {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
if (!stripped.startsWith("- ") && !stripped.startsWith("* ")) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const body = stripped.slice(2);
|
|
49
|
+
const colonIdx = body.indexOf(":");
|
|
50
|
+
if (colonIdx === -1) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const key = body.slice(0, colonIdx).trim().replace(/`/g, "").trim();
|
|
54
|
+
const value = body.slice(colonIdx + 1);
|
|
55
|
+
if (key.length > 0) {
|
|
56
|
+
fields[key] = normaliseValue(value);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return [true, fields];
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=allocation.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type PathLike } from "node:fs";
|
|
2
|
+
import { type ParsedAllocation, parseAllocationSection, SOLO_KIND, SWARM_COHORT_KIND } from "./allocation.js";
|
|
3
|
+
export declare const ACTIVE_FOLDER = "active";
|
|
4
|
+
export declare const ELIGIBLE_STATUS = "running";
|
|
5
|
+
/** Result of story-start Gate 0 evaluation; mirrors the Python `(exit_code, message)` tuple. */
|
|
6
|
+
export interface EvaluateResult {
|
|
7
|
+
readonly exitCode: 0 | 1 | 2;
|
|
8
|
+
readonly message: string;
|
|
9
|
+
readonly dispatchKind: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface EvaluateOptions {
|
|
12
|
+
readonly gitStatus?: string | null;
|
|
13
|
+
readonly allocationContext?: string | null;
|
|
14
|
+
readonly allowDirty?: boolean;
|
|
15
|
+
readonly parsed?: ParsedAllocation;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Pure evaluator — returns exit code + human message. Faithful to
|
|
19
|
+
* `scripts/preflight_story_start.evaluate`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function evaluate(vbriefPath: PathLike, options?: EvaluateOptions): EvaluateResult;
|
|
22
|
+
export { parseAllocationSection, SOLO_KIND, SWARM_COHORT_KIND };
|
|
23
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { parseAllocationSection, SOLO_KIND, SWARM_COHORT_KIND, VALID_DISPATCH_KINDS, } from "./allocation.js";
|
|
4
|
+
export const ACTIVE_FOLDER = "active";
|
|
5
|
+
export const ELIGIBLE_STATUS = "running";
|
|
6
|
+
function checkVbrief(vbriefPath) {
|
|
7
|
+
let path;
|
|
8
|
+
try {
|
|
9
|
+
path = resolve(String(vbriefPath));
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
return {
|
|
13
|
+
ok: false,
|
|
14
|
+
reason: `could not interpret vBRIEF path '${String(vbriefPath)}': ${String(err)}`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
let raw;
|
|
18
|
+
try {
|
|
19
|
+
raw = readFileSync(path, "utf8");
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const e = err;
|
|
23
|
+
if (e.code === "ENOENT") {
|
|
24
|
+
return { ok: false, reason: `target vBRIEF not found at ${path}` };
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
reason: `could not read target vBRIEF at ${path}: ${String(e.message ?? err)}`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
let payload;
|
|
32
|
+
try {
|
|
33
|
+
payload = JSON.parse(raw);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
const e = err;
|
|
37
|
+
const line = typeof e.lineNumber === "number" ? e.lineNumber : "?";
|
|
38
|
+
return {
|
|
39
|
+
ok: false,
|
|
40
|
+
reason: `target vBRIEF at ${path} is not valid JSON: ${e.message} (line ${line})`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (typeof payload !== "object" || payload === null || Array.isArray(payload)) {
|
|
44
|
+
return { ok: false, reason: `target vBRIEF at ${path} top-level value is not a JSON object` };
|
|
45
|
+
}
|
|
46
|
+
const folder = path.split(/[/\\]/).slice(-2, -1)[0] ?? "";
|
|
47
|
+
if (folder !== ACTIVE_FOLDER) {
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
reason: `target vBRIEF is in ${folder}/ -- only vbrief/active/ is eligible ` +
|
|
51
|
+
`for a story start (activate it via \`task scope:activate -- ${path}\`)`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const plan = payload.plan;
|
|
55
|
+
if (typeof plan !== "object" || plan === null || Array.isArray(plan)) {
|
|
56
|
+
return { ok: false, reason: `target vBRIEF at ${path} lacks a \`plan\` object -- malformed` };
|
|
57
|
+
}
|
|
58
|
+
const status = plan.status;
|
|
59
|
+
if (typeof status !== "string" || status.length === 0) {
|
|
60
|
+
return { ok: false, reason: `target vBRIEF at ${path} lacks \`plan.status\` -- malformed` };
|
|
61
|
+
}
|
|
62
|
+
if (status !== ELIGIBLE_STATUS) {
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
reason: `target vBRIEF plan.status is '${status}' -- only '${ELIGIBLE_STATUS}' ` +
|
|
66
|
+
"is eligible for a story start",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return { ok: true };
|
|
70
|
+
}
|
|
71
|
+
function readyMessage(treeNote, suffix) {
|
|
72
|
+
return `OK: ready to start -- ${treeNote}, vBRIEF active+running, ${suffix}`;
|
|
73
|
+
}
|
|
74
|
+
function classifyAllocation(fields, treeNote) {
|
|
75
|
+
const dispatchKind = fields.dispatch_kind ?? null;
|
|
76
|
+
if (!("dispatch_kind" in fields) || dispatchKind === null) {
|
|
77
|
+
return {
|
|
78
|
+
exitCode: 2,
|
|
79
|
+
dispatchKind: null,
|
|
80
|
+
message: "config error: `## Allocation context` section is present but has no " +
|
|
81
|
+
"`dispatch_kind` field -- cannot classify the dispatch (Story A schema " +
|
|
82
|
+
"requires dispatch_kind: solo | swarm-cohort).",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (!VALID_DISPATCH_KINDS.has(dispatchKind)) {
|
|
86
|
+
return {
|
|
87
|
+
exitCode: 2,
|
|
88
|
+
dispatchKind,
|
|
89
|
+
message: `config error: unrecognised dispatch_kind '${dispatchKind}' -- ` +
|
|
90
|
+
`expected one of ${[...VALID_DISPATCH_KINDS].sort().join(", ")}.`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (dispatchKind === SOLO_KIND) {
|
|
94
|
+
return {
|
|
95
|
+
exitCode: 0,
|
|
96
|
+
dispatchKind,
|
|
97
|
+
message: readyMessage(treeNote, "dispatch_kind: solo."),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const incomplete = ["allocation_plan_id", "batching_rationale"].filter((name) => fields[name] === null || fields[name] === undefined);
|
|
101
|
+
if (incomplete.length > 0) {
|
|
102
|
+
return {
|
|
103
|
+
exitCode: 1,
|
|
104
|
+
dispatchKind,
|
|
105
|
+
message: "not ready: swarm-cohort dispatch has an incomplete consent token -- " +
|
|
106
|
+
`null or missing ${incomplete.join(", ")}. A swarm-cohort start gate ` +
|
|
107
|
+
"requires a non-null allocation_plan_id AND batching_rationale (#1371 carve-out).",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
exitCode: 0,
|
|
112
|
+
dispatchKind,
|
|
113
|
+
message: readyMessage(treeNote, "swarm-cohort consent token satisfied (allocation_plan_id + batching_rationale present)."),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Pure evaluator — returns exit code + human message. Faithful to
|
|
118
|
+
* `scripts/preflight_story_start.evaluate`.
|
|
119
|
+
*/
|
|
120
|
+
export function evaluate(vbriefPath, options = {}) {
|
|
121
|
+
const gitStatus = options.gitStatus ?? null;
|
|
122
|
+
const allowDirty = options.allowDirty ?? false;
|
|
123
|
+
if (gitStatus === null) {
|
|
124
|
+
return {
|
|
125
|
+
exitCode: 2,
|
|
126
|
+
dispatchKind: null,
|
|
127
|
+
message: "config error: could not determine working-tree state -- is this a " +
|
|
128
|
+
"git work tree and is git on PATH? (Gate 0 fails closed.)",
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const dirty = gitStatus.trim().length > 0;
|
|
132
|
+
if (dirty && !allowDirty) {
|
|
133
|
+
return {
|
|
134
|
+
exitCode: 1,
|
|
135
|
+
dispatchKind: null,
|
|
136
|
+
message: "not ready: working tree is dirty. Commit, stash, or include the " +
|
|
137
|
+
"existing work (re-run with --allow-dirty after operator approval) " +
|
|
138
|
+
"before starting the story.",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const treeNote = dirty ? "dirty tree allowed (--allow-dirty)" : "tree clean";
|
|
142
|
+
const vbriefCheck = checkVbrief(vbriefPath);
|
|
143
|
+
if (!vbriefCheck.ok) {
|
|
144
|
+
return {
|
|
145
|
+
exitCode: 1,
|
|
146
|
+
dispatchKind: null,
|
|
147
|
+
message: `not ready: ${vbriefCheck.reason}.`,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const [found, fields] = options.parsed ?? parseAllocationSection(options.allocationContext ?? null);
|
|
151
|
+
if (!found) {
|
|
152
|
+
return {
|
|
153
|
+
exitCode: 0,
|
|
154
|
+
dispatchKind: null,
|
|
155
|
+
message: readyMessage(treeNote, "no `## Allocation context` section (solo path, #1371 carve-out)."),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return classifyAllocation(fields, treeNote);
|
|
159
|
+
}
|
|
160
|
+
export { parseAllocationSection, SOLO_KIND, SWARM_COHORT_KIND };
|
|
161
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return raw `git status --porcelain` output, or `null` when undeterminable.
|
|
3
|
+
* Maps to config error (exit 2) at the evaluator — fail closed, never assume clean.
|
|
4
|
+
*/
|
|
5
|
+
export declare function gitPorcelain(projectRoot: string): string | null;
|
|
6
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
/**
|
|
3
|
+
* Return raw `git status --porcelain` output, or `null` when undeterminable.
|
|
4
|
+
* Maps to config error (exit 2) at the evaluator — fail closed, never assume clean.
|
|
5
|
+
*/
|
|
6
|
+
export function gitPorcelain(projectRoot) {
|
|
7
|
+
try {
|
|
8
|
+
const proc = execFileSync("git", ["status", "--porcelain"], {
|
|
9
|
+
cwd: projectRoot,
|
|
10
|
+
encoding: "utf8",
|
|
11
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
12
|
+
});
|
|
13
|
+
return proc;
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
const e = err;
|
|
17
|
+
if (e.code === "ENOENT") {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
if (typeof e.status === "number" && e.status !== 0) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared stdout ceiling for subprocess captures whose output can be large.
|
|
3
|
+
*
|
|
4
|
+
* Node's `spawnSync` / `execFileSync` default to a 1 MB stdout buffer. A
|
|
5
|
+
* `gh api --paginate` response that concatenates every page (e.g. a repo's
|
|
6
|
+
* full release or issue list), and other potentially large captures (a
|
|
7
|
+
* `uv run python` gate, a spawned Node helper), routinely exceed 1 MB. When
|
|
8
|
+
* they do, the capture aborts with `error.code === "ENOBUFS"`, a `null`
|
|
9
|
+
* status, truncated stdout, and an EMPTY stderr -- surfacing downstream as a
|
|
10
|
+
* failure with no detail (#1867: `task release:publish` / `release:rollback`
|
|
11
|
+
* and consumer `task triage:scope -- --diff-from-upstream`).
|
|
12
|
+
*
|
|
13
|
+
* Every subprocess capture site that may produce a large response MUST pass
|
|
14
|
+
* this ceiling, and MUST surface `result.error.message` when stderr is empty
|
|
15
|
+
* so an overflow is never silent again.
|
|
16
|
+
*/
|
|
17
|
+
export declare const SUBPROCESS_MAX_BUFFER: number;
|
|
18
|
+
//# sourceMappingURL=max-buffer.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared stdout ceiling for subprocess captures whose output can be large.
|
|
3
|
+
*
|
|
4
|
+
* Node's `spawnSync` / `execFileSync` default to a 1 MB stdout buffer. A
|
|
5
|
+
* `gh api --paginate` response that concatenates every page (e.g. a repo's
|
|
6
|
+
* full release or issue list), and other potentially large captures (a
|
|
7
|
+
* `uv run python` gate, a spawned Node helper), routinely exceed 1 MB. When
|
|
8
|
+
* they do, the capture aborts with `error.code === "ENOBUFS"`, a `null`
|
|
9
|
+
* status, truncated stdout, and an EMPTY stderr -- surfacing downstream as a
|
|
10
|
+
* failure with no detail (#1867: `task release:publish` / `release:rollback`
|
|
11
|
+
* and consumer `task triage:scope -- --diff-from-upstream`).
|
|
12
|
+
*
|
|
13
|
+
* Every subprocess capture site that may produce a large response MUST pass
|
|
14
|
+
* this ceiling, and MUST surface `result.error.message` when stderr is empty
|
|
15
|
+
* so an overflow is never silent again.
|
|
16
|
+
*/
|
|
17
|
+
export const SUBPROCESS_MAX_BUFFER = 64 * 1024 * 1024;
|
|
18
|
+
//# sourceMappingURL=max-buffer.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { completeCohort } from "./complete-cohort.js";
|
|
4
|
+
export function completeCohortMain(argv = process.argv.slice(2)) {
|
|
5
|
+
const stories = [];
|
|
6
|
+
const cohortGlobs = [];
|
|
7
|
+
let projectRoot = ".";
|
|
8
|
+
let dryRun = false;
|
|
9
|
+
let emitJson = false;
|
|
10
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
11
|
+
const arg = argv[i];
|
|
12
|
+
if (arg === "--cohort" && argv[i + 1] !== undefined) {
|
|
13
|
+
cohortGlobs.push(argv[i + 1] ?? "");
|
|
14
|
+
i += 1;
|
|
15
|
+
}
|
|
16
|
+
else if (arg === "--project-root" && argv[i + 1] !== undefined) {
|
|
17
|
+
projectRoot = argv[i + 1] ?? ".";
|
|
18
|
+
i += 1;
|
|
19
|
+
}
|
|
20
|
+
else if (arg === "--dry-run") {
|
|
21
|
+
dryRun = true;
|
|
22
|
+
}
|
|
23
|
+
else if (arg === "--json") {
|
|
24
|
+
emitJson = true;
|
|
25
|
+
}
|
|
26
|
+
else if (arg !== undefined && !arg.startsWith("-")) {
|
|
27
|
+
stories.push(arg);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const result = completeCohort({ stories, cohortGlobs, projectRoot, dryRun, emitJson });
|
|
31
|
+
if (result.stdout.length > 0) {
|
|
32
|
+
process.stdout.write(result.stdout);
|
|
33
|
+
}
|
|
34
|
+
if (result.stderr.length > 0) {
|
|
35
|
+
process.stderr.write(result.stderr);
|
|
36
|
+
}
|
|
37
|
+
return result.exitCode;
|
|
38
|
+
}
|
|
39
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
40
|
+
process.exit(completeCohortMain());
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=complete-cohort-cli.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface TransitionRecord {
|
|
2
|
+
kind: "story" | "epic";
|
|
3
|
+
path: string;
|
|
4
|
+
action: string;
|
|
5
|
+
ok: boolean;
|
|
6
|
+
detail: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SweepResult {
|
|
9
|
+
project_root: string;
|
|
10
|
+
dry_run: boolean;
|
|
11
|
+
stories: TransitionRecord[];
|
|
12
|
+
parents: TransitionRecord[];
|
|
13
|
+
errors: string[];
|
|
14
|
+
ok: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveCohortPaths(positional: readonly string[], cohortGlobs: readonly string[], projectRoot: string): {
|
|
17
|
+
paths: string[];
|
|
18
|
+
errors: string[];
|
|
19
|
+
};
|
|
20
|
+
export declare function sweepCohort(storyPaths: readonly string[], projectRoot: string, dryRun: boolean): SweepResult;
|
|
21
|
+
export declare function sweepResultToDict(result: SweepResult): Record<string, unknown>;
|
|
22
|
+
export declare function renderSweepText(result: SweepResult): string;
|
|
23
|
+
export declare function completeCohort(args: {
|
|
24
|
+
stories?: readonly string[];
|
|
25
|
+
cohortGlobs?: readonly string[];
|
|
26
|
+
projectRoot: string;
|
|
27
|
+
dryRun?: boolean;
|
|
28
|
+
emitJson?: boolean;
|
|
29
|
+
}): {
|
|
30
|
+
exitCode: number;
|
|
31
|
+
stdout: string;
|
|
32
|
+
stderr: string;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=complete-cohort.d.ts.map
|