@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,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* content-manifest.ts -- deterministic gate for the content manifest (#1821 / #1875).
|
|
3
|
+
*
|
|
4
|
+
* Since the #1875 content/ move this gate enforces a LOCATION INVARIANT over
|
|
5
|
+
* conventions/content-manifest.json rather than a "classify every top-level
|
|
6
|
+
* entry" completeness check:
|
|
7
|
+
*
|
|
8
|
+
* 1. Every manifest entry with `bucket: content` MUST have a path under
|
|
9
|
+
* `content/` -- EXCEPT the named harness-entry exceptions
|
|
10
|
+
* (`harnessEntry: true`, e.g. AGENTS.md / main.md / SKILL.md) which are
|
|
11
|
+
* content-classified but root-resident per #1669 Wave-1 D2.
|
|
12
|
+
* 2. No entry with a non-`content` bucket may live under `content/`.
|
|
13
|
+
* 3. Every git-tracked path directly under `content/` MUST correspond to a
|
|
14
|
+
* `content` manifest entry (no unclassified content; no stale content
|
|
15
|
+
* entry pointing at a path that is no longer a content/ child).
|
|
16
|
+
*
|
|
17
|
+
* The manifest now physically lives at content/conventions/content-manifest.json
|
|
18
|
+
* (the conventions/ directory moved under content/ in #1875). The C1 flatten
|
|
19
|
+
* deposits `content/<x>` to `.deft/core/<x>`, so the consumer-facing layout is
|
|
20
|
+
* unchanged; this gate guards the SOURCE-repo invariant.
|
|
21
|
+
*
|
|
22
|
+
* Authored TS-native (no Python oracle): the #1828 parity discipline applies to
|
|
23
|
+
* PORTED gates; this is a net-new gate created after the migration, so the TS
|
|
24
|
+
* engine is the single source of truth (the #1669 direction phases Python out).
|
|
25
|
+
*
|
|
26
|
+
* Exit codes (three-state, mirrors rule-ownership-lint):
|
|
27
|
+
* 0 -- clean: the location invariant holds.
|
|
28
|
+
* 1 -- drift: a content entry not under content/, a non-content entry under
|
|
29
|
+
* content/, an unclassified content/ child, or a stale content entry.
|
|
30
|
+
* 2 -- config error: manifest missing / malformed / structurally invalid, or
|
|
31
|
+
* `git ls-files` could not be run.
|
|
32
|
+
*/
|
|
33
|
+
export declare const DEFAULT_MANIFEST_PATH = "content/conventions/content-manifest.json";
|
|
34
|
+
export declare const CONTENT_ROOT = "content";
|
|
35
|
+
export declare const CONTENT_PREFIX = "content/";
|
|
36
|
+
export declare const REQUIRED_ENTRY_FIELDS: readonly ["path", "bucket", "note"];
|
|
37
|
+
export declare const REQUIRED_BUCKET_FIELDS: readonly ["id", "label", "description"];
|
|
38
|
+
export interface ManifestBucket {
|
|
39
|
+
readonly id: string;
|
|
40
|
+
readonly label: string;
|
|
41
|
+
readonly description: string;
|
|
42
|
+
}
|
|
43
|
+
export interface ManifestEntry {
|
|
44
|
+
readonly path: string;
|
|
45
|
+
readonly bucket: string;
|
|
46
|
+
readonly note: string;
|
|
47
|
+
readonly straddle?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* When true, a `content`-bucket entry is a named harness-entry exception that
|
|
50
|
+
* is content-classified but intentionally root-resident (AGENTS.md / main.md /
|
|
51
|
+
* SKILL.md per #1669 Wave-1 D2). The location invariant exempts these from the
|
|
52
|
+
* "must live under content/" rule (#1875).
|
|
53
|
+
*/
|
|
54
|
+
readonly harnessEntry?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface ContentManifest {
|
|
57
|
+
readonly version: number;
|
|
58
|
+
readonly buckets: ManifestBucket[];
|
|
59
|
+
readonly entries: ManifestEntry[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Load + structurally validate the content manifest.
|
|
63
|
+
*
|
|
64
|
+
* Throws on any structural problem (missing file, malformed JSON, missing
|
|
65
|
+
* required fields, invalid bucket reference, duplicate bucket id, duplicate
|
|
66
|
+
* entry path, non-boolean `straddle`/`harnessEntry`) -- the caller maps a throw
|
|
67
|
+
* to exit 2 (config error). The location invariant is NOT checked here; that is
|
|
68
|
+
* :func:`lintManifest` (drift).
|
|
69
|
+
*/
|
|
70
|
+
export declare function loadManifest(manifestPath: string): ContentManifest;
|
|
71
|
+
/**
|
|
72
|
+
* Return the sorted, de-duplicated set of git-tracked immediate children of
|
|
73
|
+
* `content/` (e.g. `content/skills`, `content/LICENSE.md`).
|
|
74
|
+
*
|
|
75
|
+
* Uses `git ls-files content` (tracked truth), so untracked caches are excluded
|
|
76
|
+
* automatically. Throws on git failure (caller maps to exit 2). An empty result
|
|
77
|
+
* (no content/ tree yet) is returned as `[]`, not an error.
|
|
78
|
+
*/
|
|
79
|
+
export declare function listTrackedContentChildren(root: string): string[];
|
|
80
|
+
/**
|
|
81
|
+
* Enforce the #1875 location invariant against the actual content/ tree.
|
|
82
|
+
*
|
|
83
|
+
* Returns drift diagnostics (one per divergence). An empty array means clean.
|
|
84
|
+
*/
|
|
85
|
+
export declare function lintManifest(manifest: ContentManifest, contentChildren: readonly string[], manifestLabel?: string): string[];
|
|
86
|
+
export interface ContentManifestResult {
|
|
87
|
+
readonly code: 0 | 1 | 2;
|
|
88
|
+
readonly message: string;
|
|
89
|
+
readonly stream: "stdout" | "stderr";
|
|
90
|
+
}
|
|
91
|
+
export interface ContentManifestOptions {
|
|
92
|
+
readonly manifestPath?: string;
|
|
93
|
+
readonly root?: string;
|
|
94
|
+
/** Test seam: inject the content/ child set instead of running `git ls-files`. */
|
|
95
|
+
readonly contentChildren?: readonly string[];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Evaluate the content-manifest gate. Pure-ish: side effects limited to reading
|
|
99
|
+
* the manifest and (unless `contentChildren` is injected) spawning `git ls-files`.
|
|
100
|
+
*/
|
|
101
|
+
export declare function evaluateContentManifest(projectRoot: string, options?: ContentManifestOptions): ContentManifestResult;
|
|
102
|
+
//# sourceMappingURL=content-manifest.d.ts.map
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* content-manifest.ts -- deterministic gate for the content manifest (#1821 / #1875).
|
|
3
|
+
*
|
|
4
|
+
* Since the #1875 content/ move this gate enforces a LOCATION INVARIANT over
|
|
5
|
+
* conventions/content-manifest.json rather than a "classify every top-level
|
|
6
|
+
* entry" completeness check:
|
|
7
|
+
*
|
|
8
|
+
* 1. Every manifest entry with `bucket: content` MUST have a path under
|
|
9
|
+
* `content/` -- EXCEPT the named harness-entry exceptions
|
|
10
|
+
* (`harnessEntry: true`, e.g. AGENTS.md / main.md / SKILL.md) which are
|
|
11
|
+
* content-classified but root-resident per #1669 Wave-1 D2.
|
|
12
|
+
* 2. No entry with a non-`content` bucket may live under `content/`.
|
|
13
|
+
* 3. Every git-tracked path directly under `content/` MUST correspond to a
|
|
14
|
+
* `content` manifest entry (no unclassified content; no stale content
|
|
15
|
+
* entry pointing at a path that is no longer a content/ child).
|
|
16
|
+
*
|
|
17
|
+
* The manifest now physically lives at content/conventions/content-manifest.json
|
|
18
|
+
* (the conventions/ directory moved under content/ in #1875). The C1 flatten
|
|
19
|
+
* deposits `content/<x>` to `.deft/core/<x>`, so the consumer-facing layout is
|
|
20
|
+
* unchanged; this gate guards the SOURCE-repo invariant.
|
|
21
|
+
*
|
|
22
|
+
* Authored TS-native (no Python oracle): the #1828 parity discipline applies to
|
|
23
|
+
* PORTED gates; this is a net-new gate created after the migration, so the TS
|
|
24
|
+
* engine is the single source of truth (the #1669 direction phases Python out).
|
|
25
|
+
*
|
|
26
|
+
* Exit codes (three-state, mirrors rule-ownership-lint):
|
|
27
|
+
* 0 -- clean: the location invariant holds.
|
|
28
|
+
* 1 -- drift: a content entry not under content/, a non-content entry under
|
|
29
|
+
* content/, an unclassified content/ child, or a stale content entry.
|
|
30
|
+
* 2 -- config error: manifest missing / malformed / structurally invalid, or
|
|
31
|
+
* `git ls-files` could not be run.
|
|
32
|
+
*/
|
|
33
|
+
import { execFileSync } from "node:child_process";
|
|
34
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
35
|
+
import { join, relative, resolve } from "node:path";
|
|
36
|
+
const EXIT_OK = 0;
|
|
37
|
+
const EXIT_DRIFT = 1;
|
|
38
|
+
const EXIT_CONFIG_ERROR = 2;
|
|
39
|
+
export const DEFAULT_MANIFEST_PATH = "content/conventions/content-manifest.json";
|
|
40
|
+
export const CONTENT_ROOT = "content";
|
|
41
|
+
export const CONTENT_PREFIX = "content/";
|
|
42
|
+
export const REQUIRED_ENTRY_FIELDS = ["path", "bucket", "note"];
|
|
43
|
+
export const REQUIRED_BUCKET_FIELDS = ["id", "label", "description"];
|
|
44
|
+
/**
|
|
45
|
+
* Load + structurally validate the content manifest.
|
|
46
|
+
*
|
|
47
|
+
* Throws on any structural problem (missing file, malformed JSON, missing
|
|
48
|
+
* required fields, invalid bucket reference, duplicate bucket id, duplicate
|
|
49
|
+
* entry path, non-boolean `straddle`/`harnessEntry`) -- the caller maps a throw
|
|
50
|
+
* to exit 2 (config error). The location invariant is NOT checked here; that is
|
|
51
|
+
* :func:`lintManifest` (drift).
|
|
52
|
+
*/
|
|
53
|
+
export function loadManifest(manifestPath) {
|
|
54
|
+
if (!existsSync(manifestPath)) {
|
|
55
|
+
throw new Error(`content manifest not found: ${manifestPath}`);
|
|
56
|
+
}
|
|
57
|
+
let raw;
|
|
58
|
+
try {
|
|
59
|
+
raw = readFileSync(manifestPath, { encoding: "utf8" });
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
63
|
+
throw new Error(`Failed to read content manifest ${manifestPath}: ${msg}`);
|
|
64
|
+
}
|
|
65
|
+
let payload;
|
|
66
|
+
try {
|
|
67
|
+
payload = JSON.parse(raw);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
71
|
+
throw new Error(`Malformed JSON in content manifest ${manifestPath}: ${msg}`);
|
|
72
|
+
}
|
|
73
|
+
if (typeof payload !== "object" || payload === null) {
|
|
74
|
+
throw new Error(`Content manifest ${manifestPath} must contain a JSON object at the top level (got ${typeof payload}).`);
|
|
75
|
+
}
|
|
76
|
+
const obj = payload;
|
|
77
|
+
if (typeof obj.version !== "number") {
|
|
78
|
+
throw new Error(`Content manifest ${manifestPath} must have a numeric 'version' field.`);
|
|
79
|
+
}
|
|
80
|
+
const buckets = obj.buckets;
|
|
81
|
+
if (!Array.isArray(buckets)) {
|
|
82
|
+
throw new Error(`Content manifest ${manifestPath} must contain a 'buckets' array.`);
|
|
83
|
+
}
|
|
84
|
+
const bucketIds = new Set();
|
|
85
|
+
for (let index = 0; index < buckets.length; index += 1) {
|
|
86
|
+
const bucket = buckets[index];
|
|
87
|
+
if (typeof bucket !== "object" || bucket === null) {
|
|
88
|
+
throw new Error(`Content manifest bucket at index ${index} must be a JSON object.`);
|
|
89
|
+
}
|
|
90
|
+
const rec = bucket;
|
|
91
|
+
for (const field of REQUIRED_BUCKET_FIELDS) {
|
|
92
|
+
const val = rec[field];
|
|
93
|
+
if (typeof val !== "string" || val.length === 0) {
|
|
94
|
+
throw new Error(`Content manifest bucket at index ${index} field '${field}' must be a non-empty string.`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const bucketId = rec.id;
|
|
98
|
+
if (bucketIds.has(bucketId)) {
|
|
99
|
+
throw new Error(`Duplicate content manifest bucket id: '${bucketId}'`);
|
|
100
|
+
}
|
|
101
|
+
bucketIds.add(bucketId);
|
|
102
|
+
}
|
|
103
|
+
if (bucketIds.size === 0) {
|
|
104
|
+
throw new Error(`Content manifest ${manifestPath} must declare at least one bucket.`);
|
|
105
|
+
}
|
|
106
|
+
const entries = obj.entries;
|
|
107
|
+
if (!Array.isArray(entries)) {
|
|
108
|
+
throw new Error(`Content manifest ${manifestPath} must contain an 'entries' array.`);
|
|
109
|
+
}
|
|
110
|
+
const seenPaths = new Set();
|
|
111
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
112
|
+
const entry = entries[index];
|
|
113
|
+
if (typeof entry !== "object" || entry === null) {
|
|
114
|
+
throw new Error(`Content manifest entry at index ${index} must be a JSON object.`);
|
|
115
|
+
}
|
|
116
|
+
const rec = entry;
|
|
117
|
+
for (const field of REQUIRED_ENTRY_FIELDS) {
|
|
118
|
+
const val = rec[field];
|
|
119
|
+
if (typeof val !== "string" || val.length === 0) {
|
|
120
|
+
throw new Error(`Content manifest entry at index ${index} field '${field}' must be a non-empty string.`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if ("straddle" in rec && typeof rec.straddle !== "boolean") {
|
|
124
|
+
throw new Error(`Content manifest entry '${String(rec.path)}' field 'straddle' must be a boolean when present.`);
|
|
125
|
+
}
|
|
126
|
+
if ("harnessEntry" in rec && typeof rec.harnessEntry !== "boolean") {
|
|
127
|
+
throw new Error(`Content manifest entry '${String(rec.path)}' field 'harnessEntry' must be a boolean when present.`);
|
|
128
|
+
}
|
|
129
|
+
const entryPath = rec.path;
|
|
130
|
+
const entryBucket = rec.bucket;
|
|
131
|
+
if (!bucketIds.has(entryBucket)) {
|
|
132
|
+
const sorted = [...bucketIds].sort();
|
|
133
|
+
throw new Error(`Content manifest entry '${entryPath}' references unknown bucket '${entryBucket}'; expected one of ${JSON.stringify(sorted)}.`);
|
|
134
|
+
}
|
|
135
|
+
if (rec.harnessEntry === true && entryBucket !== "content") {
|
|
136
|
+
throw new Error(`Content manifest entry '${entryPath}' sets harnessEntry:true but bucket is '${entryBucket}'; only 'content' entries may be harness-entry exceptions.`);
|
|
137
|
+
}
|
|
138
|
+
if (seenPaths.has(entryPath)) {
|
|
139
|
+
throw new Error(`Duplicate content manifest entry path: '${entryPath}'`);
|
|
140
|
+
}
|
|
141
|
+
seenPaths.add(entryPath);
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
version: obj.version,
|
|
145
|
+
buckets: buckets,
|
|
146
|
+
entries: entries,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Reduce a git-tracked path under content/ to its immediate content/ child.
|
|
151
|
+
* `content/skills/foo.md` -> `content/skills`; `content/LICENSE.md` ->
|
|
152
|
+
* `content/LICENSE.md`. Returns null for paths not under content/.
|
|
153
|
+
*/
|
|
154
|
+
function toContentChild(trackedPath) {
|
|
155
|
+
if (!trackedPath.startsWith(CONTENT_PREFIX)) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
const rest = trackedPath.slice(CONTENT_PREFIX.length);
|
|
159
|
+
const first = rest.split("/")[0];
|
|
160
|
+
if (first === undefined || first.length === 0) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
return `${CONTENT_PREFIX}${first}`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Return the sorted, de-duplicated set of git-tracked immediate children of
|
|
167
|
+
* `content/` (e.g. `content/skills`, `content/LICENSE.md`).
|
|
168
|
+
*
|
|
169
|
+
* Uses `git ls-files content` (tracked truth), so untracked caches are excluded
|
|
170
|
+
* automatically. Throws on git failure (caller maps to exit 2). An empty result
|
|
171
|
+
* (no content/ tree yet) is returned as `[]`, not an error.
|
|
172
|
+
*/
|
|
173
|
+
export function listTrackedContentChildren(root) {
|
|
174
|
+
let stdout;
|
|
175
|
+
try {
|
|
176
|
+
stdout = execFileSync("git", ["ls-files", "--", CONTENT_ROOT], {
|
|
177
|
+
cwd: root,
|
|
178
|
+
encoding: "utf8",
|
|
179
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
184
|
+
throw new Error(`git ls-files failed in ${root}: ${msg}`);
|
|
185
|
+
}
|
|
186
|
+
const set = new Set();
|
|
187
|
+
for (const line of stdout.split("\n")) {
|
|
188
|
+
const trimmed = line.trim();
|
|
189
|
+
if (trimmed.length === 0) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const child = toContentChild(trimmed);
|
|
193
|
+
if (child !== null) {
|
|
194
|
+
set.add(child);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return [...set].sort();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Enforce the #1875 location invariant against the actual content/ tree.
|
|
201
|
+
*
|
|
202
|
+
* Returns drift diagnostics (one per divergence). An empty array means clean.
|
|
203
|
+
*/
|
|
204
|
+
export function lintManifest(manifest, contentChildren, manifestLabel = DEFAULT_MANIFEST_PATH) {
|
|
205
|
+
const diagnostics = [];
|
|
206
|
+
const tracked = new Set(contentChildren);
|
|
207
|
+
// Rule 1 + 2: per-entry location checks.
|
|
208
|
+
const classifiedChildren = new Set();
|
|
209
|
+
for (const entry of manifest.entries) {
|
|
210
|
+
const underContent = entry.path === CONTENT_ROOT || entry.path.startsWith(CONTENT_PREFIX);
|
|
211
|
+
if (entry.bucket === "content") {
|
|
212
|
+
if (entry.harnessEntry === true) {
|
|
213
|
+
// Harness-entry exception: must stay at the repo root, not under content/.
|
|
214
|
+
if (underContent) {
|
|
215
|
+
diagnostics.push(`harness-entry exception '${entry.path}' must stay at the repo root, not under content/ -- drop the content/ prefix or unset harnessEntry.`);
|
|
216
|
+
}
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (!entry.path.startsWith(CONTENT_PREFIX)) {
|
|
220
|
+
diagnostics.push(`content entry '${entry.path}' must live under content/ (or be marked harnessEntry:true if it is a named root harness-entry) -- move it under content/ or fix the manifest path.`);
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
// Track the immediate content/ child this entry classifies.
|
|
224
|
+
const child = toContentChild(entry.path);
|
|
225
|
+
if (child !== null && child === entry.path) {
|
|
226
|
+
classifiedChildren.add(entry.path);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (underContent) {
|
|
230
|
+
diagnostics.push(`non-content entry '${entry.path}' (bucket '${entry.bucket}') must not live under content/ -- only content-bucket entries belong under content/.`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Rule 3a: every git-tracked content/ child has a content entry.
|
|
234
|
+
for (const child of contentChildren) {
|
|
235
|
+
if (!classifiedChildren.has(child)) {
|
|
236
|
+
diagnostics.push(`unclassified content/ child '${child}' -- add a content-bucket row to ${manifestLabel} for it.`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Rule 3b: no stale content entry pointing at a non-existent content/ child.
|
|
240
|
+
for (const entry of classifiedChildren) {
|
|
241
|
+
if (!tracked.has(entry)) {
|
|
242
|
+
diagnostics.push(`stale content entry '${entry}' -- it is no longer a git-tracked content/ child; remove the row or fix the path.`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return diagnostics;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Evaluate the content-manifest gate. Pure-ish: side effects limited to reading
|
|
249
|
+
* the manifest and (unless `contentChildren` is injected) spawning `git ls-files`.
|
|
250
|
+
*/
|
|
251
|
+
export function evaluateContentManifest(projectRoot, options = {}) {
|
|
252
|
+
const root = resolve(options.root ?? projectRoot);
|
|
253
|
+
const manifestPath = resolve(options.manifestPath ?? join(root, DEFAULT_MANIFEST_PATH));
|
|
254
|
+
try {
|
|
255
|
+
const manifest = loadManifest(manifestPath);
|
|
256
|
+
const contentChildren = options.contentChildren ?? listTrackedContentChildren(root);
|
|
257
|
+
// Forward the resolved manifest location so drift diagnostics point at the
|
|
258
|
+
// manifest actually in use, not the hardcoded default (a custom manifestPath
|
|
259
|
+
// would otherwise be mis-reported in CI output).
|
|
260
|
+
const relLabel = relative(root, manifestPath);
|
|
261
|
+
const manifestLabel = relLabel && !relLabel.startsWith("..") ? relLabel : manifestPath;
|
|
262
|
+
const diagnostics = lintManifest(manifest, [...contentChildren], manifestLabel);
|
|
263
|
+
if (diagnostics.length > 0) {
|
|
264
|
+
const lines = [
|
|
265
|
+
`FAIL: content manifest drift detected in ${diagnostics.length} entr(y/ies):`,
|
|
266
|
+
...diagnostics.map((d) => ` - ${d}`),
|
|
267
|
+
];
|
|
268
|
+
return { code: EXIT_DRIFT, message: lines.join("\n"), stream: "stderr" };
|
|
269
|
+
}
|
|
270
|
+
const contentEntries = manifest.entries.filter((e) => e.bucket === "content").length;
|
|
271
|
+
return {
|
|
272
|
+
code: EXIT_OK,
|
|
273
|
+
message: `OK: content manifest location invariant holds -- ${contentChildren.length} content/ child(ren) classified, ${contentEntries} content entr(y/ies) total (root=${root}).`,
|
|
274
|
+
stream: "stdout",
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
279
|
+
return { code: EXIT_CONFIG_ERROR, message: `Error: ${msg}`, stream: "stderr" };
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=content-manifest.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./code-structure-validate.js";
|
|
2
|
+
export * from "./content-manifest.js";
|
|
3
|
+
export * from "./python-call-scan.js";
|
|
4
|
+
export * from "./rule-ownership-lint.js";
|
|
5
|
+
export * from "./scm-boundary.js";
|
|
6
|
+
export * from "./verify-stubs.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./code-structure-validate.js";
|
|
2
|
+
export * from "./content-manifest.js";
|
|
3
|
+
export * from "./python-call-scan.js";
|
|
4
|
+
export * from "./rule-ownership-lint.js";
|
|
5
|
+
export * from "./scm-boundary.js";
|
|
6
|
+
export * from "./verify-stubs.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Python call-site scanner for subprocess / os.system shapes used by
|
|
3
|
+
* verify_scm_boundary. Matches CPython ast.walk visit order for the
|
|
4
|
+
* call patterns the gate cares about (sequential statement-level calls).
|
|
5
|
+
*/
|
|
6
|
+
export interface CallSite {
|
|
7
|
+
readonly line: number;
|
|
8
|
+
readonly col: number;
|
|
9
|
+
readonly helper: string;
|
|
10
|
+
readonly context: string;
|
|
11
|
+
}
|
|
12
|
+
/** Scan Python source for raw gh/ghx subprocess call sites. */
|
|
13
|
+
export declare function scanPythonGhCalls(source: string): CallSite[];
|
|
14
|
+
//# sourceMappingURL=python-call-scan.d.ts.map
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Python call-site scanner for subprocess / os.system shapes used by
|
|
3
|
+
* verify_scm_boundary. Matches CPython ast.walk visit order for the
|
|
4
|
+
* call patterns the gate cares about (sequential statement-level calls).
|
|
5
|
+
*/
|
|
6
|
+
const GH_BINARIES = new Set(["gh", "ghx"]);
|
|
7
|
+
function lineColAt(source, index) {
|
|
8
|
+
let line = 1;
|
|
9
|
+
let col = 1;
|
|
10
|
+
for (let i = 0; i < index; i += 1) {
|
|
11
|
+
if (source.charAt(i) === "\n") {
|
|
12
|
+
line += 1;
|
|
13
|
+
col = 1;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
col += 1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return { line, col };
|
|
20
|
+
}
|
|
21
|
+
function sliceSourceLine(sourceLines, lineno) {
|
|
22
|
+
if (lineno >= 1 && lineno <= sourceLines.length) {
|
|
23
|
+
return sourceLines[lineno - 1]?.replace(/\r$/, "") ?? "";
|
|
24
|
+
}
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
function skipWs(source, i) {
|
|
28
|
+
while (i < source.length && /\s/.test(source.charAt(i))) {
|
|
29
|
+
i += 1;
|
|
30
|
+
}
|
|
31
|
+
return i;
|
|
32
|
+
}
|
|
33
|
+
function readStringLiteral(source, start) {
|
|
34
|
+
const quote = source.charAt(start);
|
|
35
|
+
if (quote !== '"' && quote !== "'") {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
let i = start + 1;
|
|
39
|
+
const triple = source.slice(start, start + 3) === `${quote}${quote}${quote}`;
|
|
40
|
+
if (triple) {
|
|
41
|
+
i = start + 3;
|
|
42
|
+
const close = `${quote}${quote}${quote}`;
|
|
43
|
+
const end = source.indexOf(close, i);
|
|
44
|
+
if (end < 0) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return { value: source.slice(i, end), end: end + 3 };
|
|
48
|
+
}
|
|
49
|
+
let value = "";
|
|
50
|
+
while (i < source.length) {
|
|
51
|
+
const ch = source.charAt(i);
|
|
52
|
+
if (ch === "\\") {
|
|
53
|
+
if (i + 1 < source.length) {
|
|
54
|
+
value += source.charAt(i + 1);
|
|
55
|
+
i += 2;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
if (ch === quote) {
|
|
61
|
+
return { value, end: i + 1 };
|
|
62
|
+
}
|
|
63
|
+
value += ch;
|
|
64
|
+
i += 1;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
function firstArgvFromList(source, start) {
|
|
69
|
+
const i = skipWs(source, start + 1);
|
|
70
|
+
if (source.charAt(i) === "]") {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const lit = readStringLiteral(source, i);
|
|
74
|
+
if (lit !== null) {
|
|
75
|
+
return lit.value;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
function firstTokenFromShellString(value) {
|
|
80
|
+
const tokens = value.trim().split(/\s+/);
|
|
81
|
+
return tokens.length > 0 ? (tokens[0] ?? null) : null;
|
|
82
|
+
}
|
|
83
|
+
function extractFirstArgv(source, openParen, helper) {
|
|
84
|
+
const i = skipWs(source, openParen + 1);
|
|
85
|
+
if (i >= source.length || source.charAt(i) === ")") {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
if (helper === "os.system") {
|
|
89
|
+
const lit = readStringLiteral(source, i);
|
|
90
|
+
if (lit === null) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return firstTokenFromShellString(lit.value);
|
|
94
|
+
}
|
|
95
|
+
if (source.charAt(i) === "[" || source.charAt(i) === "(") {
|
|
96
|
+
return firstArgvFromList(source, i);
|
|
97
|
+
}
|
|
98
|
+
const lit = readStringLiteral(source, i);
|
|
99
|
+
if (lit !== null) {
|
|
100
|
+
return firstTokenFromShellString(lit.value);
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const CALL_PATTERNS = [
|
|
105
|
+
{ helper: "subprocess.run", needle: "subprocess.run(" },
|
|
106
|
+
{ helper: "subprocess.check_output", needle: "subprocess.check_output(" },
|
|
107
|
+
{ helper: "subprocess.check_call", needle: "subprocess.check_call(" },
|
|
108
|
+
{ helper: "subprocess.call", needle: "subprocess.call(" },
|
|
109
|
+
{ helper: "subprocess.Popen", needle: "subprocess.Popen(" },
|
|
110
|
+
{ helper: "os.system", needle: "os.system(" },
|
|
111
|
+
{ helper: "Popen", needle: "Popen(" },
|
|
112
|
+
];
|
|
113
|
+
/** Scan Python source for raw gh/ghx subprocess call sites. */
|
|
114
|
+
export function scanPythonGhCalls(source) {
|
|
115
|
+
const sourceLines = source.split("\n");
|
|
116
|
+
const sites = [];
|
|
117
|
+
for (const { helper, needle } of CALL_PATTERNS) {
|
|
118
|
+
let from = 0;
|
|
119
|
+
while (from < source.length) {
|
|
120
|
+
const idx = source.indexOf(needle, from);
|
|
121
|
+
if (idx < 0) {
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
const openParen = idx + needle.length - 1;
|
|
125
|
+
const firstArgv = extractFirstArgv(source, openParen, helper);
|
|
126
|
+
if (firstArgv !== null && GH_BINARIES.has(firstArgv)) {
|
|
127
|
+
const { line, col } = lineColAt(source, idx);
|
|
128
|
+
const ctx = sliceSourceLine(sourceLines, line).trim() || `${helper}(...)`;
|
|
129
|
+
sites.push({ line, col, helper, context: ctx });
|
|
130
|
+
}
|
|
131
|
+
from = idx + needle.length;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
sites.sort((a, b) => (a.line !== b.line ? a.line - b.line : a.col - b.col));
|
|
135
|
+
return sites;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=python-call-scan.js.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const EXIT_OK = 0;
|
|
2
|
+
export declare const EXIT_DRIFT = 1;
|
|
3
|
+
export declare const EXIT_CONFIG_ERROR = 2;
|
|
4
|
+
export declare const DEFAULT_MAP_PATH = "content/conventions/rule-ownership.json";
|
|
5
|
+
export declare const VALID_AUTHORITIES: Set<string>;
|
|
6
|
+
export declare const REQUIRED_FIELDS: readonly ["id", "text", "owner_file", "owner_section", "authority", "last_verified"];
|
|
7
|
+
export interface RomRule {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly text: string;
|
|
10
|
+
readonly owner_file: string;
|
|
11
|
+
readonly owner_section: string;
|
|
12
|
+
readonly authority: string;
|
|
13
|
+
readonly last_verified: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RomPayload {
|
|
16
|
+
readonly rules: RomRule[];
|
|
17
|
+
}
|
|
18
|
+
/** Parse markdown ATX heading: returns [level, text] or null. Linear scan, no backtracking regex. */
|
|
19
|
+
export declare function parseHeading(line: string): [number, string] | null;
|
|
20
|
+
export declare function extractSectionBody(content: string, ownerSection: string): string | null;
|
|
21
|
+
export declare function loadMap(mapPath: string): RomPayload;
|
|
22
|
+
export declare function lintRules(payload: RomPayload, root: string): string[];
|
|
23
|
+
export interface RuleOwnershipResult {
|
|
24
|
+
readonly code: 0 | 1 | 2;
|
|
25
|
+
readonly message: string;
|
|
26
|
+
readonly stream: "stdout" | "stderr";
|
|
27
|
+
}
|
|
28
|
+
export interface RuleOwnershipOptions {
|
|
29
|
+
readonly mapPath?: string;
|
|
30
|
+
readonly root?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function evaluateRuleOwnership(projectRoot: string, options?: RuleOwnershipOptions): RuleOwnershipResult;
|
|
33
|
+
//# sourceMappingURL=rule-ownership-lint.d.ts.map
|