session-orchestrator 3.16.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/.claude-plugin/marketplace.json +29 -0
- package/.claude-plugin/plugin.json +18 -0
- package/.codex-plugin/agents/explorer.toml +14 -0
- package/.codex-plugin/agents/session-reviewer.toml +23 -0
- package/.codex-plugin/agents/wave-worker.toml +15 -0
- package/.codex-plugin/config.toml +20 -0
- package/.codex-plugin/plugin.json +37 -0
- package/.cursor/rules/000-session-orchestrator.mdc +73 -0
- package/.cursor/rules/010-session-workflow.mdc +170 -0
- package/.cursor/rules/020-quality-gates.mdc +128 -0
- package/.cursor/rules/030-wave-execution.mdc +216 -0
- package/.cursor/rules/040-discovery.mdc +242 -0
- package/.cursor/rules/050-plan.mdc +235 -0
- package/.cursor/rules/060-evolve.mdc +232 -0
- package/.cursor/rules/070-gitlab-ops.mdc +246 -0
- package/.cursor/rules/080-ecosystem-health.mdc +145 -0
- package/.mcp.json +8 -0
- package/CHANGELOG.md +1544 -0
- package/LICENSE +21 -0
- package/NOTICE +64 -0
- package/README.md +242 -0
- package/SECURITY.md +90 -0
- package/agents/AGENTS.md +136 -0
- package/agents/analyst.md +99 -0
- package/agents/architect-reviewer.md +93 -0
- package/agents/code-implementer.md +106 -0
- package/agents/db-specialist.md +104 -0
- package/agents/dialectic-deriver.md +139 -0
- package/agents/docs-writer.md +113 -0
- package/agents/eval-judge.md +146 -0
- package/agents/memory-proposal-collector.md +297 -0
- package/agents/qa-strategist.md +102 -0
- package/agents/schemas/analyst.schema.json +46 -0
- package/agents/schemas/architect-reviewer.schema.json +50 -0
- package/agents/schemas/code-implementer.schema.json +61 -0
- package/agents/schemas/db-specialist.schema.json +80 -0
- package/agents/schemas/docs-writer.schema.json +56 -0
- package/agents/schemas/persona-panel-sidecar.schema.json +245 -0
- package/agents/schemas/qa-strategist.schema.json +46 -0
- package/agents/schemas/security-reviewer.schema.json +86 -0
- package/agents/schemas/session-reviewer.schema.json +69 -0
- package/agents/schemas/test-writer.schema.json +69 -0
- package/agents/schemas/ui-developer.schema.json +90 -0
- package/agents/schemas/ux-evaluator.schema.json +51 -0
- package/agents/security-reviewer.md +236 -0
- package/agents/session-reviewer.md +201 -0
- package/agents/skill-applied-judge.md +122 -0
- package/agents/test-writer.md +123 -0
- package/agents/ui-developer.md +109 -0
- package/agents/ux-evaluator.md +161 -0
- package/assets/icon.svg +11 -0
- package/assets/og-card.png +0 -0
- package/assets/og-card.svg +47 -0
- package/commands/autopilot-multi.md +74 -0
- package/commands/autopilot.md +80 -0
- package/commands/bootstrap.md +56 -0
- package/commands/brainstorm.md +48 -0
- package/commands/close.md +24 -0
- package/commands/debug.md +36 -0
- package/commands/discovery.md +32 -0
- package/commands/dispatcher.md +59 -0
- package/commands/eval.md +28 -0
- package/commands/evolve.md +10 -0
- package/commands/go.md +41 -0
- package/commands/grill.md +45 -0
- package/commands/harness-audit.md +26 -0
- package/commands/memory-cleanup.md +25 -0
- package/commands/persona-panel.md +121 -0
- package/commands/plan.md +15 -0
- package/commands/portfolio.md +97 -0
- package/commands/reconcile.md +23 -0
- package/commands/repo-audit.md +24 -0
- package/commands/session.md +30 -0
- package/commands/spinout.md +15 -0
- package/commands/sunset-review.md +27 -0
- package/commands/templates-ack.md +96 -0
- package/commands/test.md +97 -0
- package/docs/README.md +105 -0
- package/docs/USER-GUIDE.md +1403 -0
- package/docs/ci-setup.md +81 -0
- package/docs/codex-setup.md +142 -0
- package/docs/components.md +74 -0
- package/docs/cursor-setup.md +104 -0
- package/docs/events-schema.md +81 -0
- package/docs/migration-v3.md +148 -0
- package/docs/owner-config-schema.md +154 -0
- package/docs/persona-panel.md +433 -0
- package/docs/pi-setup.md +115 -0
- package/docs/plugin-architecture-v3.md +296 -0
- package/docs/pm-skills-marketplace.md +114 -0
- package/docs/policy-cache-validation-2026-04-28.md +118 -0
- package/docs/rule-authoring.md +316 -0
- package/docs/session-config-reference.md +1439 -0
- package/docs/session-config-template.md +961 -0
- package/docs/vault-docs-architecture.md +297 -0
- package/hooks/_lib/lock-bootstrap.mjs +272 -0
- package/hooks/_lib/lock-reconcile.mjs +93 -0
- package/hooks/_lib/profile-gate.mjs +95 -0
- package/hooks/_lib/transcript-history.mjs +211 -0
- package/hooks/agent-teams-h3-test.sh +362 -0
- package/hooks/config-protection.mjs +0 -0
- package/hooks/cwd-change-restore.mjs +131 -0
- package/hooks/enforce-commands.mjs +179 -0
- package/hooks/enforce-scope.mjs +273 -0
- package/hooks/hooks-codex.json +60 -0
- package/hooks/hooks-cursor.json +15 -0
- package/hooks/hooks-pi.json +115 -0
- package/hooks/hooks.json +215 -0
- package/hooks/loop-guard.mjs +260 -0
- package/hooks/on-session-end.mjs +217 -0
- package/hooks/on-session-start.mjs +660 -0
- package/hooks/on-stop.mjs +294 -0
- package/hooks/operator-steer.mjs +64 -0
- package/hooks/post-edit-validate.mjs +225 -0
- package/hooks/post-subagent-discovery-validator.mjs +398 -0
- package/hooks/post-tool-batch-wave-signal.mjs +328 -0
- package/hooks/post-tool-failure-corrective-context.mjs +248 -0
- package/hooks/post-tooluse-frontend-slop.mjs +184 -0
- package/hooks/pre-bash-destructive-guard.mjs +515 -0
- package/hooks/pre-bash-memory-propose-audit.mjs +206 -0
- package/hooks/pre-bash-staging-fence.mjs +223 -0
- package/hooks/pre-bash-templates-first.mjs +404 -0
- package/hooks/run-node.sh +72 -0
- package/hooks/skill-invocation-telemetry.mjs +99 -0
- package/hooks/subagent-telemetry.mjs +249 -0
- package/hooks/wave-scope-commit-guard.mjs +191 -0
- package/monitors/monitors.json +14 -0
- package/output-styles/finding-report.md +48 -0
- package/output-styles/session-report.md +53 -0
- package/output-styles/wave-summary.md +38 -0
- package/package.json +94 -0
- package/pi/extensions/session-orchestrator.ts +25 -0
- package/pi/prompts/autopilot-multi.md +12 -0
- package/pi/prompts/autopilot.md +12 -0
- package/pi/prompts/bootstrap.md +12 -0
- package/pi/prompts/brainstorm.md +12 -0
- package/pi/prompts/close.md +11 -0
- package/pi/prompts/debug.md +12 -0
- package/pi/prompts/discovery.md +12 -0
- package/pi/prompts/dispatcher.md +12 -0
- package/pi/prompts/eval.md +12 -0
- package/pi/prompts/evolve.md +12 -0
- package/pi/prompts/go.md +12 -0
- package/pi/prompts/grill.md +12 -0
- package/pi/prompts/harness-audit.md +12 -0
- package/pi/prompts/memory-cleanup.md +12 -0
- package/pi/prompts/persona-panel.md +12 -0
- package/pi/prompts/plan.md +12 -0
- package/pi/prompts/portfolio.md +12 -0
- package/pi/prompts/reconcile.md +12 -0
- package/pi/prompts/repo-audit.md +12 -0
- package/pi/prompts/session.md +12 -0
- package/pi/prompts/spinout.md +12 -0
- package/pi/prompts/sunset-review.md +12 -0
- package/pi/prompts/templates-ack.md +12 -0
- package/pi/prompts/test.md +12 -0
- package/rules/_index.md +51 -0
- package/rules/always-on/commit-discipline.md +26 -0
- package/rules/always-on/npm-quality-gates.md +26 -0
- package/rules/always-on/parallel-sessions.md +43 -0
- package/rules/opt-in-domain/prompt-caching.md +270 -0
- package/rules/opt-in-stack/backend-data.md +188 -0
- package/rules/opt-in-stack/backend.md +390 -0
- package/rules/opt-in-stack/frontend.md +98 -0
- package/rules/opt-in-stack/security-web.md +194 -0
- package/rules/opt-in-stack/swift.md +65 -0
- package/scripts/archive-closed-prds.mjs +416 -0
- package/scripts/autopilot-multi.mjs +802 -0
- package/scripts/autopilot.mjs +383 -0
- package/scripts/backfill-abandoned-sessions.mjs +265 -0
- package/scripts/backfill-learnings-expires.mjs +196 -0
- package/scripts/backfill-learnings.mjs +203 -0
- package/scripts/backfill-sessions.mjs +282 -0
- package/scripts/check-doc-consistency.sh +279 -0
- package/scripts/check-package-manager.mjs +445 -0
- package/scripts/ci/assert-vitest-green.mjs +267 -0
- package/scripts/codex-install.mjs +435 -0
- package/scripts/compute-grounding-injection.sh +186 -0
- package/scripts/cursor-install.mjs +113 -0
- package/scripts/dialectic-deriver.mjs +573 -0
- package/scripts/emit-event.mjs +160 -0
- package/scripts/emit-session.mjs +212 -0
- package/scripts/eval-session.mjs +262 -0
- package/scripts/export-hw-learnings.mjs +437 -0
- package/scripts/gc-stale-worktrees.mjs +666 -0
- package/scripts/generate-pi-prompts.mjs +127 -0
- package/scripts/harness-audit.mjs +287 -0
- package/scripts/lib/agent-frontmatter.mjs +266 -0
- package/scripts/lib/agent-output-schema.mjs +166 -0
- package/scripts/lib/agent-status.mjs +303 -0
- package/scripts/lib/ajv-loader.mjs +34 -0
- package/scripts/lib/auto-dialectic.mjs +382 -0
- package/scripts/lib/auto-dream.mjs +471 -0
- package/scripts/lib/autonomy/suitability.mjs +212 -0
- package/scripts/lib/autopilot/dep-graph.mjs +417 -0
- package/scripts/lib/autopilot/durable-telemetry.mjs +121 -0
- package/scripts/lib/autopilot/flags.mjs +104 -0
- package/scripts/lib/autopilot/kill-switches.mjs +174 -0
- package/scripts/lib/autopilot/loop.mjs +320 -0
- package/scripts/lib/autopilot/mr-draft.mjs +520 -0
- package/scripts/lib/autopilot/multi-killswitch.mjs +184 -0
- package/scripts/lib/autopilot/recent-runs.mjs +106 -0
- package/scripts/lib/autopilot/stall-sampler.mjs +97 -0
- package/scripts/lib/autopilot/telemetry.mjs +224 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +605 -0
- package/scripts/lib/autopilot-telemetry.mjs +11 -0
- package/scripts/lib/autopilot.mjs +39 -0
- package/scripts/lib/backlog-scan.mjs +179 -0
- package/scripts/lib/bootstrap-lock-freshness.mjs +260 -0
- package/scripts/lib/bootstrap-lock-refresh.mjs +186 -0
- package/scripts/lib/build-live-signals.mjs +150 -0
- package/scripts/lib/ci-status-banner.mjs +425 -0
- package/scripts/lib/claude-md-budget-lint.mjs +246 -0
- package/scripts/lib/cli-flags.mjs +158 -0
- package/scripts/lib/codex/plugin-contract.mjs +610 -0
- package/scripts/lib/cold-start-detector.mjs +240 -0
- package/scripts/lib/command-blocker.mjs +458 -0
- package/scripts/lib/common.mjs +333 -0
- package/scripts/lib/config/auto-dream.mjs +77 -0
- package/scripts/lib/config/block-header.mjs +94 -0
- package/scripts/lib/config/broken-window.mjs +114 -0
- package/scripts/lib/config/coercers.mjs +248 -0
- package/scripts/lib/config/cold-start.mjs +92 -0
- package/scripts/lib/config/config-protection.mjs +120 -0
- package/scripts/lib/config/cross-repo.mjs +104 -0
- package/scripts/lib/config/custom-phases.mjs +213 -0
- package/scripts/lib/config/dialectic.mjs +92 -0
- package/scripts/lib/config/discovery-validator.mjs +75 -0
- package/scripts/lib/config/dispatcher-autonomy-capture.mjs +240 -0
- package/scripts/lib/config/dispatcher-autonomy.mjs +152 -0
- package/scripts/lib/config/docs-orchestrator.mjs +90 -0
- package/scripts/lib/config/docs-staleness.mjs +96 -0
- package/scripts/lib/config/drift-check.mjs +155 -0
- package/scripts/lib/config/eval.mjs +130 -0
- package/scripts/lib/config/events-rotation.mjs +74 -0
- package/scripts/lib/config/evolve.mjs +308 -0
- package/scripts/lib/config/frontend-slop-hook.mjs +104 -0
- package/scripts/lib/config/gitlab-portfolio.mjs +150 -0
- package/scripts/lib/config/handover-gate.mjs +106 -0
- package/scripts/lib/config/host-paths.mjs +76 -0
- package/scripts/lib/config/io.mjs +54 -0
- package/scripts/lib/config/loop-guard.mjs +117 -0
- package/scripts/lib/config/memory.mjs +150 -0
- package/scripts/lib/config/persona-gate-wave.mjs +258 -0
- package/scripts/lib/config/reconcile.mjs +205 -0
- package/scripts/lib/config/section-extractor.mjs +100 -0
- package/scripts/lib/config/skill-evolution.mjs +112 -0
- package/scripts/lib/config/slopcheck.mjs +99 -0
- package/scripts/lib/config/state-md-lock.mjs +83 -0
- package/scripts/lib/config/templates-first.mjs +94 -0
- package/scripts/lib/config/test.mjs +113 -0
- package/scripts/lib/config/vault-integration.mjs +201 -0
- package/scripts/lib/config/vault-mirror-quality.mjs +99 -0
- package/scripts/lib/config/vault-staleness.mjs +84 -0
- package/scripts/lib/config/vault-sync.mjs +96 -0
- package/scripts/lib/config/verification-auto-fix.mjs +84 -0
- package/scripts/lib/config/wave-reviewers.mjs +133 -0
- package/scripts/lib/config-schema.mjs +345 -0
- package/scripts/lib/config.mjs +474 -0
- package/scripts/lib/convergence-monitor.mjs +389 -0
- package/scripts/lib/coordinator-snapshot.mjs +371 -0
- package/scripts/lib/crypto-digest-utils.mjs +91 -0
- package/scripts/lib/discovery/helpers.mjs +127 -0
- package/scripts/lib/discovery/triage-state.mjs +279 -0
- package/scripts/lib/dispatcher/cli.mjs +257 -0
- package/scripts/lib/dispatcher/enumerate.mjs +243 -0
- package/scripts/lib/dispatcher/rank.mjs +363 -0
- package/scripts/lib/ecosystem-health.mjs +224 -0
- package/scripts/lib/ecosystem-wizard/ci-detector.mjs +18 -0
- package/scripts/lib/ecosystem-wizard/config-parser.mjs +54 -0
- package/scripts/lib/ecosystem-wizard/config-writer.mjs +287 -0
- package/scripts/lib/ecosystem-wizard/package-manager-detector.mjs +42 -0
- package/scripts/lib/ecosystem-wizard/wizard-prompt.mjs +246 -0
- package/scripts/lib/ecosystem-wizard.mjs +48 -0
- package/scripts/lib/env-check.mjs +89 -0
- package/scripts/lib/eval/engine.mjs +605 -0
- package/scripts/lib/eval/judge.mjs +433 -0
- package/scripts/lib/eval/report.mjs +367 -0
- package/scripts/lib/eval/schema.mjs +618 -0
- package/scripts/lib/eval/session-resolve.mjs +137 -0
- package/scripts/lib/eval/sink.mjs +77 -0
- package/scripts/lib/events-rotation.mjs +86 -0
- package/scripts/lib/events-schema.mjs +81 -0
- package/scripts/lib/events.mjs +80 -0
- package/scripts/lib/evolve/autonomy-verdict.mjs +461 -0
- package/scripts/lib/evolve/autopilot-effectiveness.mjs +293 -0
- package/scripts/lib/exclusivity-matrix.mjs +68 -0
- package/scripts/lib/fetch-baseline.mjs +311 -0
- package/scripts/lib/file-lock.mjs +512 -0
- package/scripts/lib/frontend-detect/detect.mjs +138 -0
- package/scripts/lib/frontend-detect/rules.mjs +295 -0
- package/scripts/lib/frontmatter-guard.mjs +241 -0
- package/scripts/lib/gates/echo-stub-detect.mjs +39 -0
- package/scripts/lib/gates/gate-baseline.mjs +42 -0
- package/scripts/lib/gates/gate-full.mjs +85 -0
- package/scripts/lib/gates/gate-helpers.mjs +231 -0
- package/scripts/lib/gates/gate-incremental.mjs +76 -0
- package/scripts/lib/gates/gate-per-file.mjs +55 -0
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +447 -0
- package/scripts/lib/gitlab-portfolio/aggregator.mjs +383 -0
- package/scripts/lib/gitlab-portfolio/cli.mjs +428 -0
- package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +289 -0
- package/scripts/lib/gitlab-portfolio/vcs-detect.mjs +182 -0
- package/scripts/lib/handover-gate.mjs +222 -0
- package/scripts/lib/hardening.mjs +43 -0
- package/scripts/lib/hardware-pattern-detector.mjs +238 -0
- package/scripts/lib/harness-audit/categories/category1.mjs +123 -0
- package/scripts/lib/harness-audit/categories/category2.mjs +145 -0
- package/scripts/lib/harness-audit/categories/category3.mjs +143 -0
- package/scripts/lib/harness-audit/categories/category4.mjs +202 -0
- package/scripts/lib/harness-audit/categories/category5.mjs +152 -0
- package/scripts/lib/harness-audit/categories/category6.mjs +211 -0
- package/scripts/lib/harness-audit/categories/category7.mjs +125 -0
- package/scripts/lib/harness-audit/categories/category8.mjs +328 -0
- package/scripts/lib/harness-audit/categories/category9.mjs +294 -0
- package/scripts/lib/harness-audit/categories/helpers.mjs +165 -0
- package/scripts/lib/harness-audit/categories.mjs +19 -0
- package/scripts/lib/historical-guard.mjs +15 -0
- package/scripts/lib/host-identity.mjs +262 -0
- package/scripts/lib/instruction-budget-guard.mjs +332 -0
- package/scripts/lib/io.mjs +304 -0
- package/scripts/lib/issue-close-strip-labels.mjs +161 -0
- package/scripts/lib/language-mappers/README.md +57 -0
- package/scripts/lib/language-mappers/index.mjs +165 -0
- package/scripts/lib/language-mappers/markdown.mjs +149 -0
- package/scripts/lib/language-mappers/python.mjs +249 -0
- package/scripts/lib/language-mappers/swift.mjs +201 -0
- package/scripts/lib/language-mappers/typescript.mjs +433 -0
- package/scripts/lib/learnings/expiry-sweep.mjs +164 -0
- package/scripts/lib/learnings/filters.mjs +43 -0
- package/scripts/lib/learnings/io.mjs +255 -0
- package/scripts/lib/learnings/schema.mjs +518 -0
- package/scripts/lib/learnings/surface.mjs +207 -0
- package/scripts/lib/learnings.mjs +42 -0
- package/scripts/lib/lock-reaper.mjs +648 -0
- package/scripts/lib/locks/index.mjs +31 -0
- package/scripts/lib/locks/lock-body.mjs +62 -0
- package/scripts/lib/locks/staging-fence-lock.mjs +267 -0
- package/scripts/lib/locks/state-md-lock.mjs +351 -0
- package/scripts/lib/loop-readiness-banner.mjs +144 -0
- package/scripts/lib/memory-banner.mjs +478 -0
- package/scripts/lib/memory-cleanup/worktree-sweep.mjs +108 -0
- package/scripts/lib/memory-cleanup-stamp.mjs +56 -0
- package/scripts/lib/memory-paths.mjs +31 -0
- package/scripts/lib/memory-proposals/collector.mjs +334 -0
- package/scripts/lib/memory-proposals/schema.mjs +289 -0
- package/scripts/lib/memory-proposals/sink.mjs +507 -0
- package/scripts/lib/memory-proposals/store.mjs +441 -0
- package/scripts/lib/mission-status-schema.mjs +114 -0
- package/scripts/lib/mode-selector/alternatives.mjs +64 -0
- package/scripts/lib/mode-selector/constants.mjs +29 -0
- package/scripts/lib/mode-selector/context-pressure.mjs +157 -0
- package/scripts/lib/mode-selector/rationale.mjs +55 -0
- package/scripts/lib/mode-selector/scoring.mjs +221 -0
- package/scripts/lib/mode-selector-accuracy.mjs +121 -0
- package/scripts/lib/mode-selector.mjs +160 -0
- package/scripts/lib/multi-provider-build/providers.mjs +64 -0
- package/scripts/lib/multi-provider-build/templating.mjs +130 -0
- package/scripts/lib/named-baseline-resolver.mjs +233 -0
- package/scripts/lib/named-vault-resolver.mjs +433 -0
- package/scripts/lib/owner-config/coerce.mjs +29 -0
- package/scripts/lib/owner-config/constants.mjs +21 -0
- package/scripts/lib/owner-config/defaults.mjs +50 -0
- package/scripts/lib/owner-config/error.mjs +19 -0
- package/scripts/lib/owner-config/index.mjs +13 -0
- package/scripts/lib/owner-config/merge.mjs +52 -0
- package/scripts/lib/owner-config/validate.mjs +259 -0
- package/scripts/lib/owner-config-banner.mjs +126 -0
- package/scripts/lib/owner-config-loader.mjs +159 -0
- package/scripts/lib/owner-config.example.yaml +72 -0
- package/scripts/lib/owner-config.mjs +28 -0
- package/scripts/lib/owner-interview.mjs +243 -0
- package/scripts/lib/owner-yaml.mjs +571 -0
- package/scripts/lib/package-manager.mjs +160 -0
- package/scripts/lib/path-utils.mjs +217 -0
- package/scripts/lib/peer-cards/merger.mjs +310 -0
- package/scripts/lib/peer-cards/reader.mjs +125 -0
- package/scripts/lib/peer-cards/schema.mjs +230 -0
- package/scripts/lib/peer-cards/staleness-banner.mjs +86 -0
- package/scripts/lib/peer-cards/writer.mjs +138 -0
- package/scripts/lib/peer-discovery.mjs +200 -0
- package/scripts/lib/persona-panel/catalog-loader.mjs +577 -0
- package/scripts/lib/persona-panel/consolidator.mjs +370 -0
- package/scripts/lib/persona-panel/persona-runner.mjs +375 -0
- package/scripts/lib/persona-panel/threshold.mjs +130 -0
- package/scripts/lib/pi-hook-bridge.mjs +328 -0
- package/scripts/lib/platform.mjs +266 -0
- package/scripts/lib/playwright-driver/runner.mjs +297 -0
- package/scripts/lib/plugin-root.mjs +210 -0
- package/scripts/lib/pre-dispatch-check.mjs +126 -0
- package/scripts/lib/product-repo-detect.mjs +121 -0
- package/scripts/lib/profiles/registry.mjs +176 -0
- package/scripts/lib/profiles/schema.mjs +209 -0
- package/scripts/lib/qg-command-drift-banner.mjs +88 -0
- package/scripts/lib/quality-gate/diagnostics.mjs +92 -0
- package/scripts/lib/quality-gate.mjs +536 -0
- package/scripts/lib/quality-gates-cache.mjs +228 -0
- package/scripts/lib/quality-gates-policy.mjs +95 -0
- package/scripts/lib/recommendations-v0.mjs +156 -0
- package/scripts/lib/reconcile/eligibility.mjs +203 -0
- package/scripts/lib/reconcile/emitter.mjs +244 -0
- package/scripts/lib/reconcile/engine.mjs +412 -0
- package/scripts/lib/reconcile/idempotency.mjs +239 -0
- package/scripts/lib/reconcile/renderer.mjs +211 -0
- package/scripts/lib/reconcile/writer.mjs +293 -0
- package/scripts/lib/reconcile-nudge-banner.mjs +284 -0
- package/scripts/lib/resource-probe/evaluate.mjs +190 -0
- package/scripts/lib/resource-probe/parsers.mjs +181 -0
- package/scripts/lib/resource-probe/probe-platform.mjs +300 -0
- package/scripts/lib/resource-probe.mjs +95 -0
- package/scripts/lib/rule-loader.mjs +552 -0
- package/scripts/lib/rules-sync.mjs +439 -0
- package/scripts/lib/scope-gate.mjs +496 -0
- package/scripts/lib/session-close-backfill.mjs +539 -0
- package/scripts/lib/session-discovery.mjs +256 -0
- package/scripts/lib/session-end/phase-skip.mjs +357 -0
- package/scripts/lib/session-end/worktree-cleanup.mjs +112 -0
- package/scripts/lib/session-id.mjs +362 -0
- package/scripts/lib/session-lock.mjs +703 -0
- package/scripts/lib/session-registry.mjs +355 -0
- package/scripts/lib/session-schema/aliases.mjs +71 -0
- package/scripts/lib/session-schema/constants.mjs +115 -0
- package/scripts/lib/session-schema/normalizer.mjs +66 -0
- package/scripts/lib/session-schema/timestamps.mjs +64 -0
- package/scripts/lib/session-schema/validator.mjs +453 -0
- package/scripts/lib/session-schema.mjs +71 -0
- package/scripts/lib/session-token-rollup.mjs +137 -0
- package/scripts/lib/sessions-staleness-banner.mjs +247 -0
- package/scripts/lib/skill-evolution/blast-radius-classifier.mjs +114 -0
- package/scripts/lib/skill-evolution/candidate-intake.mjs +270 -0
- package/scripts/lib/skill-evolution/config-validation-gate.mjs +279 -0
- package/scripts/lib/skill-evolution/engine.mjs +719 -0
- package/scripts/lib/skill-evolution/idempotency.mjs +279 -0
- package/scripts/lib/skill-evolution/mr-opener.mjs +507 -0
- package/scripts/lib/skill-health/join.mjs +181 -0
- package/scripts/lib/skill-health/score.mjs +123 -0
- package/scripts/lib/skill-invocations-schema.mjs +214 -0
- package/scripts/lib/skill-judge.mjs +348 -0
- package/scripts/lib/skill-judgments-schema.mjs +264 -0
- package/scripts/lib/slopcheck.mjs +501 -0
- package/scripts/lib/soul-resolve.mjs +118 -0
- package/scripts/lib/spiral-carryover.mjs +495 -0
- package/scripts/lib/state-md/body-sections.mjs +851 -0
- package/scripts/lib/state-md/frontmatter-mutators.mjs +453 -0
- package/scripts/lib/state-md/mission-status.mjs +247 -0
- package/scripts/lib/state-md/recommendations.mjs +57 -0
- package/scripts/lib/state-md/yaml-parser.mjs +234 -0
- package/scripts/lib/state-md-peer-guard.mjs +232 -0
- package/scripts/lib/state-md.mjs +53 -0
- package/scripts/lib/subagents-schema.mjs +309 -0
- package/scripts/lib/sunset/walker.mjs +1192 -0
- package/scripts/lib/test-runner/artifact-paths.mjs +94 -0
- package/scripts/lib/test-runner/fingerprint.mjs +33 -0
- package/scripts/lib/test-runner/issue-reconcile.mjs +770 -0
- package/scripts/lib/tmux-layout/layouts.mjs +224 -0
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +100 -0
- package/scripts/lib/tmux-layout/telemetry.mjs +88 -0
- package/scripts/lib/tmux-layout/tmux-shell.mjs +82 -0
- package/scripts/lib/tmux-layout/vcs-detector.mjs +88 -0
- package/scripts/lib/validate/check-agents.mjs +457 -0
- package/scripts/lib/validate/check-codex-plugin.mjs +37 -0
- package/scripts/lib/validate/check-commands.mjs +148 -0
- package/scripts/lib/validate/check-component-paths.mjs +112 -0
- package/scripts/lib/validate/check-dead-bridge.mjs +180 -0
- package/scripts/lib/validate/check-hooks-symmetry.mjs +258 -0
- package/scripts/lib/validate/check-json-files.mjs +116 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +1011 -0
- package/scripts/lib/validate/check-path-utils-canary.mjs +175 -0
- package/scripts/lib/validate/check-peekaboo-driver-canary.mjs +201 -0
- package/scripts/lib/validate/check-pi-package.mjs +110 -0
- package/scripts/lib/validate/check-pi-prompts.mjs +43 -0
- package/scripts/lib/validate/check-playwright-mcp-canary.mjs +154 -0
- package/scripts/lib/validate/check-plugin-json.mjs +96 -0
- package/scripts/lib/validate/check-plugin-monitors.mjs +206 -0
- package/scripts/lib/validate/check-plugin-schema.mjs +137 -0
- package/scripts/lib/validate/check-rules.mjs +143 -0
- package/scripts/lib/validate/check-session-plan-routing.mjs +154 -0
- package/scripts/lib/validate/check-test-fixture-shapes.mjs +280 -0
- package/scripts/lib/validate/check-unicode-safety.mjs +533 -0
- package/scripts/lib/validate/confidential-names.mjs +169 -0
- package/scripts/lib/validate/dead-bridge-corpus.mjs +141 -0
- package/scripts/lib/validate/dead-bridge-detectors.mjs +568 -0
- package/scripts/lib/validate/tier-inference.mjs +100 -0
- package/scripts/lib/validate-vendored-rules.mjs +519 -0
- package/scripts/lib/vault-archive.mjs +404 -0
- package/scripts/lib/vault-backfill/glab.mjs +164 -0
- package/scripts/lib/vault-backfill/manifest.mjs +75 -0
- package/scripts/lib/vault-backfill/template.mjs +130 -0
- package/scripts/lib/vault-consolidate-fs.mjs +331 -0
- package/scripts/lib/vault-migration-rules.mjs +155 -0
- package/scripts/lib/vault-mirror/auto-commit.mjs +203 -0
- package/scripts/lib/vault-mirror/namespace.mjs +152 -0
- package/scripts/lib/vault-mirror/process.mjs +567 -0
- package/scripts/lib/vault-mirror/pseudonym-map.mjs +164 -0
- package/scripts/lib/vault-mirror/render-learnings.mjs +201 -0
- package/scripts/lib/vault-mirror/render-sessions.mjs +367 -0
- package/scripts/lib/vault-mirror/render.mjs +8 -0
- package/scripts/lib/vault-mirror/utils.mjs +217 -0
- package/scripts/lib/vault-relocation-rules.mjs +555 -0
- package/scripts/lib/vault-repo-backfill.mjs +235 -0
- package/scripts/lib/vault-staleness-banner.mjs +142 -0
- package/scripts/lib/vault-status/board-writer.mjs +769 -0
- package/scripts/lib/vault-status/narrative-mirror.mjs +544 -0
- package/scripts/lib/vault-sync-baseline.mjs +152 -0
- package/scripts/lib/wave-context.mjs +29 -0
- package/scripts/lib/wave-executor/pool.mjs +248 -0
- package/scripts/lib/wave-resource-gate.mjs +204 -0
- package/scripts/lib/wave-sizing.mjs +75 -0
- package/scripts/lib/webhook-url.mjs +105 -0
- package/scripts/lib/workspace.mjs +198 -0
- package/scripts/lib/worktree/constants.mjs +35 -0
- package/scripts/lib/worktree/index.mjs +17 -0
- package/scripts/lib/worktree/lifecycle.mjs +287 -0
- package/scripts/lib/worktree/listing.mjs +118 -0
- package/scripts/lib/worktree/meta.mjs +64 -0
- package/scripts/lib/worktree-freshness.mjs +313 -0
- package/scripts/lib/worktree.mjs +15 -0
- package/scripts/lifecycle-sim-v6.mjs +347 -0
- package/scripts/lock-reaper.mjs +185 -0
- package/scripts/mcp-server.sh +241 -0
- package/scripts/measure-policy-cache-effectiveness.mjs +427 -0
- package/scripts/memory-propose.mjs +464 -0
- package/scripts/migrate-cold-start-seed.mjs +404 -0
- package/scripts/migrate-learnings-jsonl.mjs +189 -0
- package/scripts/migrate-legacy-learnings.sh +61 -0
- package/scripts/migrate-sessions-jsonl.mjs +448 -0
- package/scripts/migrate-subagents-jsonl.mjs +196 -0
- package/scripts/migrate-vault-paths.mjs +796 -0
- package/scripts/parse-config.mjs +149 -0
- package/scripts/pi-install.mjs +117 -0
- package/scripts/print-applicable-rules.mjs +247 -0
- package/scripts/promote-vault-strict.mjs +496 -0
- package/scripts/relocate-vault-corpus.mjs +1178 -0
- package/scripts/run-migrate-v2-cross-repo.mjs +385 -0
- package/scripts/run-quality-gate.mjs +216 -0
- package/scripts/spikes/h3-agent-teams/preflight.sh +53 -0
- package/scripts/spikes/h3-agent-teams/run-h3.sh +112 -0
- package/scripts/spikes/h3-agent-teams/setup.sh +137 -0
- package/scripts/spikes/h3-agent-teams/toggle.sh +38 -0
- package/scripts/sweep-expired-learnings.mjs +135 -0
- package/scripts/sync-vault-schema.mjs +376 -0
- package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +8 -0
- package/scripts/tmux-layout.mjs +245 -0
- package/scripts/token-audit.sh +191 -0
- package/scripts/typecheck.mjs +42 -0
- package/scripts/upload-social-preview.mjs +316 -0
- package/scripts/validate-config.mjs +46 -0
- package/scripts/validate-plugin-manifests.mjs +163 -0
- package/scripts/validate-plugin.mjs +264 -0
- package/scripts/validate-wave-scope.mjs +289 -0
- package/scripts/vault-backfill.mjs +404 -0
- package/scripts/vault-consolidate.mjs +596 -0
- package/scripts/vault-integration-watcher.mjs +394 -0
- package/scripts/vault-mirror.mjs +430 -0
- package/skills/_shared/bootstrap-gate.md +111 -0
- package/skills/_shared/config-reading.md +226 -0
- package/skills/_shared/instruction-file-resolution.md +79 -0
- package/skills/_shared/model-selection.md +64 -0
- package/skills/_shared/monitor-patterns.md +300 -0
- package/skills/_shared/parallel-aware-auq.md +121 -0
- package/skills/_shared/parallel-aware-preamble.md +185 -0
- package/skills/_shared/platform-tools.md +96 -0
- package/skills/_shared/state-ownership.md +221 -0
- package/skills/architecture/DEEPENING.md +37 -0
- package/skills/architecture/INTERFACE-DESIGN.md +44 -0
- package/skills/architecture/LANGUAGE.md +53 -0
- package/skills/architecture/SKILL.md +92 -0
- package/skills/autopilot/SKILL.md +419 -0
- package/skills/bootstrap/SKILL.md +592 -0
- package/skills/bootstrap/STATE.md.template +24 -0
- package/skills/bootstrap/_shared-template.md +243 -0
- package/skills/bootstrap/deep-template.md +659 -0
- package/skills/bootstrap/fast-template.md +251 -0
- package/skills/bootstrap/intensity-heuristic.md +80 -0
- package/skills/bootstrap/public-fallback.md +342 -0
- package/skills/bootstrap/standard-template.md +736 -0
- package/skills/bootstrap/templates/agents/project-code-review.md +18 -0
- package/skills/bootstrap/templates/agents/project-discovery.md +18 -0
- package/skills/bootstrap/templates/agents/project-quality-gate.md +18 -0
- package/skills/brainstorm/SKILL.md +268 -0
- package/skills/brainstorm/soul.md +49 -0
- package/skills/claude-md-drift-check/SKILL.md +186 -0
- package/skills/claude-md-drift-check/checker.mjs +1380 -0
- package/skills/claude-md-drift-check/checker.sh +37 -0
- package/skills/claude-md-drift-check/package.json +16 -0
- package/skills/convergence-monitoring/README.md +39 -0
- package/skills/convergence-monitoring/SIGNALS.md +246 -0
- package/skills/convergence-monitoring/SKILL.md +285 -0
- package/skills/daily/SKILL.md +222 -0
- package/skills/daily/generate.sh +92 -0
- package/skills/daily/templates/daily.md.tpl +36 -0
- package/skills/debug/SKILL.md +188 -0
- package/skills/debug/soul.md +35 -0
- package/skills/discovery/SKILL.md +567 -0
- package/skills/discovery/issue-templates.md +237 -0
- package/skills/discovery/probes/docs-staleness.mjs +195 -0
- package/skills/discovery/probes/frontend-slop.mjs +186 -0
- package/skills/discovery/probes/ssot-code-diff.mjs +310 -0
- package/skills/discovery/probes/supply-chain-slopcheck.mjs +440 -0
- package/skills/discovery/probes/vault-narrative-staleness.mjs +355 -0
- package/skills/discovery/probes/vault-staleness.mjs +272 -0
- package/skills/discovery/probes-arch.md +252 -0
- package/skills/discovery/probes-audit.md +95 -0
- package/skills/discovery/probes-code.md +329 -0
- package/skills/discovery/probes-docs.md +76 -0
- package/skills/discovery/probes-feature.md +150 -0
- package/skills/discovery/probes-infra.md +138 -0
- package/skills/discovery/probes-intro.md +25 -0
- package/skills/discovery/probes-session.md +495 -0
- package/skills/discovery/probes-supply-chain.md +94 -0
- package/skills/discovery/probes-ui.md +147 -0
- package/skills/discovery/probes-vault.md +64 -0
- package/skills/discovery/slop-patterns.md +115 -0
- package/skills/dispatcher/SKILL.md +173 -0
- package/skills/docs-orchestrator/SKILL.md +362 -0
- package/skills/docs-orchestrator/audience-mapping.md +140 -0
- package/skills/domain-model/ADR-FORMAT.md +47 -0
- package/skills/domain-model/CONTEXT-FORMAT.md +77 -0
- package/skills/domain-model/SKILL.md +85 -0
- package/skills/ecosystem-health/SKILL.md +119 -0
- package/skills/ecosystem-health/wizard.md +193 -0
- package/skills/eval/SKILL.md +293 -0
- package/skills/eval/rubric-v1.md +218 -0
- package/skills/evolve/SKILL.md +546 -0
- package/skills/frontmatter-guard/SKILL.md +126 -0
- package/skills/gitlab-ops/SKILL.md +368 -0
- package/skills/gitlab-portfolio/SKILL.md +196 -0
- package/skills/grill/SKILL.md +185 -0
- package/skills/grill/soul.md +55 -0
- package/skills/hook-development/SKILL.md +413 -0
- package/skills/mcp-builder/SKILL.md +260 -0
- package/skills/memory-cleanup/SKILL.md +310 -0
- package/skills/mode-selector/SKILL.md +226 -0
- package/skills/peekaboo-driver/SKILL.md +237 -0
- package/skills/peekaboo-driver/soul.md +32 -0
- package/skills/persona-panel/SKILL.md +365 -0
- package/skills/persona-panel/persona-format.md +205 -0
- package/skills/persona-panel/presets/designer-lens.md +87 -0
- package/skills/persona-panel/presets/engineer-lens.md +88 -0
- package/skills/persona-panel/presets/pm-lens.md +86 -0
- package/skills/plan/SKILL.md +496 -0
- package/skills/plan/mode-feature.md +141 -0
- package/skills/plan/mode-new.md +297 -0
- package/skills/plan/mode-retro.md +271 -0
- package/skills/plan/prd-feature-template.md +132 -0
- package/skills/plan/prd-full-template.md +151 -0
- package/skills/plan/prd-reviewer-prompt.md +103 -0
- package/skills/plan/retro-template.md +75 -0
- package/skills/plan/soul.md +62 -0
- package/skills/playwright-driver/SKILL.md +226 -0
- package/skills/playwright-driver/soul.md +30 -0
- package/skills/quality-gates/SKILL.md +212 -0
- package/skills/reconcile/SKILL.md +324 -0
- package/skills/repo-audit/SKILL.md +272 -0
- package/skills/session-end/SKILL.md +1044 -0
- package/skills/session-end/discovery-scan.md +37 -0
- package/skills/session-end/drift-operations.md +97 -0
- package/skills/session-end/learning-patterns.md +78 -0
- package/skills/session-end/metrics-collection.md +175 -0
- package/skills/session-end/phase-3-2-docs-verification.md +148 -0
- package/skills/session-end/phase-3-6-tail.md +344 -0
- package/skills/session-end/phase-3-7a-recommendations.md +86 -0
- package/skills/session-end/plan-verification.md +288 -0
- package/skills/session-end/session-metrics-write.md +223 -0
- package/skills/session-end/vault-operations.md +50 -0
- package/skills/session-end/verification-checklist.md +20 -0
- package/skills/session-plan/SKILL.md +554 -0
- package/skills/session-plan/wave-template.md +37 -0
- package/skills/session-start/SKILL.md +1043 -0
- package/skills/session-start/phase-2-5-docs-planning.md +119 -0
- package/skills/session-start/phase-4-5-resource-health.md +49 -0
- package/skills/session-start/phase-7-1-premise-check.md +47 -0
- package/skills/session-start/phase-7-5-mode-selector.md +237 -0
- package/skills/session-start/phase-8-5-express-path.md +61 -0
- package/skills/session-start/presentation-format.md +81 -0
- package/skills/session-start/soul.md +57 -0
- package/skills/skill-creator/SKILL.md +168 -0
- package/skills/spinout/SKILL.md +76 -0
- package/skills/sunset-review/SKILL.md +96 -0
- package/skills/test-runner/SKILL.md +362 -0
- package/skills/test-runner/rubric-v1.md +388 -0
- package/skills/test-runner/soul.md +46 -0
- package/skills/tmux-layout/SKILL.md +104 -0
- package/skills/ubiquitous-language/SKILL.md +97 -0
- package/skills/using-orchestrator/SKILL.md +144 -0
- package/skills/vault-mirror/SKILL.md +234 -0
- package/skills/vault-sync/SKILL.md +319 -0
- package/skills/vault-sync/package-lock.json +40 -0
- package/skills/vault-sync/package.json +11 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +8 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +10 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +9 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +8 -0
- package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +7 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +9 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +11 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +11 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/schema-drift.test.mjs +133 -0
- package/skills/vault-sync/validator.mjs +658 -0
- package/skills/vault-sync/validator.sh +55 -0
- package/skills/wave-executor/SKILL.md +496 -0
- package/skills/wave-executor/circuit-breaker.md +169 -0
- package/skills/wave-executor/wave-loop.md +1043 -0
- package/skills/write-executable-plan/SKILL.md +237 -0
- package/skills/write-executable-plan/plan-template.md +154 -0
- package/templates/_minimal/CLAUDE.md.tmpl +41 -0
- package/templates/_minimal/README.md.tmpl +15 -0
- package/templates/_minimal/gitignore.tmpl +47 -0
- package/templates/_shared/harte-regeln.md +16 -0
- package/templates/_shared/loop.md +90 -0
- package/templates/_shared/rules/parallel-sessions.md +77 -0
- package/templates/nextjs-minimal/README.md +30 -0
- package/templates/nextjs-minimal/app/layout.tsx +18 -0
- package/templates/nextjs-minimal/app/page.tsx +7 -0
- package/templates/nextjs-minimal/eslint.config.mjs +16 -0
- package/templates/nextjs-minimal/next.config.mjs +4 -0
- package/templates/nextjs-minimal/package.json +27 -0
- package/templates/nextjs-minimal/tsconfig.json +23 -0
- package/templates/node-minimal/README.md +33 -0
- package/templates/node-minimal/eslint.config.mjs +10 -0
- package/templates/node-minimal/package.json +21 -0
- package/templates/node-minimal/src/index.ts +1 -0
- package/templates/node-minimal/tests/sanity.test.ts +5 -0
- package/templates/node-minimal/tsconfig.json +17 -0
- package/templates/personas/README.md +150 -0
- package/templates/personas/accounting-compliance.v1.md +120 -0
- package/templates/personas/accounting-tax-advisor.v1.md +116 -0
- package/templates/personas/buyer-p1-cto.v1.md +125 -0
- package/templates/personas/buyer-p2-kanzlei.v1.md +134 -0
- package/templates/personas/buyer-p3-build.v1.md +130 -0
- package/templates/personas/buyer-p4-tech-veto.v1.md +130 -0
- package/templates/personas/buyer-p5-solo.v1.md +132 -0
- package/templates/personas/buyer-p6-ld.v1.md +130 -0
- package/templates/personas/klima-ai-expert.v1.md +114 -0
- package/templates/personas/klima-physicist.v1.md +117 -0
- package/templates/python-uv/README.md +28 -0
- package/templates/python-uv/pyproject.toml +32 -0
- package/templates/python-uv/src/__PROJECT_NAME__/__init__.py +0 -0
- package/templates/python-uv/src/__PROJECT_NAME__/main.py +6 -0
- package/templates/python-uv/tests/test_sanity.py +2 -0
- package/templates/static-html/README.md +19 -0
- package/templates/static-html/index.html +15 -0
- package/templates/static-html/script.js +1 -0
- package/templates/static-html/styles.css +26 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
> See probes-intro.md for confidence scoring reference.
|
|
2
|
+
|
|
3
|
+
## Category: `arch`
|
|
4
|
+
|
|
5
|
+
### Probe: circular-dependencies
|
|
6
|
+
|
|
7
|
+
**Activation:** Any project with import/require statements.
|
|
8
|
+
|
|
9
|
+
**Detection Method:**
|
|
10
|
+
|
|
11
|
+
**Preferred (language-mapper-supported projects):**
|
|
12
|
+
|
|
13
|
+
Call `extractSemanticSlices(filePath, { type: 'imports' })` from `scripts/lib/language-mappers/index.mjs` for each source file to obtain a typed list of import edges. The mapper handles TypeScript, JavaScript, and Markdown files natively; unsupported file types return an empty array (graceful degradation). Feed the resulting `{source_file -> [imported_file]}` adjacency map directly into the cycle-detection loop below.
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
// Pseudocode — wire once per probe run
|
|
17
|
+
import { extractSemanticSlices } from '$PLUGIN_ROOT/scripts/lib/language-mappers/index.mjs';
|
|
18
|
+
|
|
19
|
+
for (const filePath of sourceFiles) {
|
|
20
|
+
const imports = await extractSemanticSlices(filePath, { type: 'imports' });
|
|
21
|
+
for (const { resolved } of imports) {
|
|
22
|
+
adjacency.get(filePath).push(resolved);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Fallback (when language-mapper returns empty or for unsupported file types):**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Build import graph from source files
|
|
31
|
+
# Step 1: Extract all import relationships
|
|
32
|
+
Grep pattern: (import\s+.*from\s+["']([^"']+)["']|require\s*\(\s*["']([^"']+)["']\s*\))
|
|
33
|
+
--glob "*.{ts,tsx,js,jsx}" --glob "!**/node_modules/**"
|
|
34
|
+
|
|
35
|
+
# Step 2: Resolve relative paths to absolute
|
|
36
|
+
# Step 3: Build adjacency list
|
|
37
|
+
|
|
38
|
+
# Alternative for Node.js projects with madge installed:
|
|
39
|
+
npx madge --circular --extensions ts,tsx,js,jsx src/ 2>/dev/null
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Algorithm (cycle detection — same for both paths above):
|
|
43
|
+
1. Build `{source_file -> [imported_file]}` adjacency map
|
|
44
|
+
2. Resolve relative imports to absolute paths
|
|
45
|
+
3. For each file, BFS through imports with depth limit of 10
|
|
46
|
+
4. If BFS revisits the starting file, record the cycle path
|
|
47
|
+
|
|
48
|
+
**Evidence Format:**
|
|
49
|
+
```
|
|
50
|
+
Cycle: <file_a> -> <file_b> -> ... -> <file_a>
|
|
51
|
+
Length: <number of files in cycle>
|
|
52
|
+
Files Involved:
|
|
53
|
+
- <file_path_1>
|
|
54
|
+
- <file_path_2>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Default Severity:** High.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### Probe: complexity-hotspots
|
|
62
|
+
|
|
63
|
+
**Activation:** Any project with source files.
|
|
64
|
+
|
|
65
|
+
**Detection Method:**
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Long functions (>50 lines)
|
|
69
|
+
# Count lines between function declarations and closing braces
|
|
70
|
+
# Heuristic: find function starts and measure to next function or file end
|
|
71
|
+
Grep pattern: (function\s+\w+|const\s+\w+\s*=\s*(async\s+)?\([^)]*\)\s*=>|def\s+\w+|func\s+\w+)
|
|
72
|
+
--glob "*.{ts,tsx,js,jsx,py,go,rs}"
|
|
73
|
+
|
|
74
|
+
# Deep nesting (>4 levels)
|
|
75
|
+
# Count leading whitespace indicating nesting depth
|
|
76
|
+
# For standard 2-space indent: >8 spaces = >4 levels
|
|
77
|
+
# For standard 4-space indent: >16 spaces = >4 levels
|
|
78
|
+
Grep pattern: ^(\s{16,}|\t{4,})\S
|
|
79
|
+
--glob "*.{ts,tsx,js,jsx,py,go,rs}"
|
|
80
|
+
|
|
81
|
+
# Large files (>500 lines)
|
|
82
|
+
wc -l src/**/*.{ts,tsx,js,jsx,py,go,rs} 2>/dev/null | awk '$1 > 500 {print $0}'
|
|
83
|
+
|
|
84
|
+
# Functions with >5 parameters
|
|
85
|
+
Grep pattern: (function\s+\w+|def\s+\w+|func\s+\w+)\s*\([^)]*,[^)]*,[^)]*,[^)]*,[^)]*,
|
|
86
|
+
--glob "*.{ts,tsx,js,jsx,py,go,rs}"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Evidence Format:**
|
|
90
|
+
```
|
|
91
|
+
File: <path> Line: <n>
|
|
92
|
+
Hotspot: long-function | deep-nesting | large-file | many-parameters
|
|
93
|
+
Metric: <measured_value> (e.g., "73 lines", "6 levels", "612 lines", "8 params")
|
|
94
|
+
Threshold: <threshold_value>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Default Severity:** Medium.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### Probe: dependency-security
|
|
102
|
+
|
|
103
|
+
**Activation:** Package manager detected (`package.json`, `requirements.txt`, `Pipfile`, `Cargo.toml`, `go.mod`).
|
|
104
|
+
|
|
105
|
+
**Detection Method:**
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Node.js
|
|
109
|
+
npm audit --json 2>/dev/null
|
|
110
|
+
|
|
111
|
+
# Python
|
|
112
|
+
pip-audit --format json 2>/dev/null
|
|
113
|
+
|
|
114
|
+
# Rust
|
|
115
|
+
cargo audit --json 2>/dev/null
|
|
116
|
+
|
|
117
|
+
# Go
|
|
118
|
+
govulncheck ./... 2>/dev/null
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Parse JSON output for vulnerabilities. Focus on:
|
|
122
|
+
- Critical severity CVEs
|
|
123
|
+
- High severity CVEs
|
|
124
|
+
- Vulnerabilities with known exploits
|
|
125
|
+
|
|
126
|
+
**Evidence Format:**
|
|
127
|
+
```
|
|
128
|
+
Package: <name>
|
|
129
|
+
Version: <installed_version>
|
|
130
|
+
CVE: <CVE-ID>
|
|
131
|
+
Severity: critical | high | medium | low
|
|
132
|
+
Title: <vulnerability title>
|
|
133
|
+
Fix Available: <fixed_version or NONE>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Default Severity:** Critical (critical CVEs), High (high CVEs).
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### Probe: architectural-friction
|
|
141
|
+
|
|
142
|
+
**Activation:** Any project with TypeScript, JavaScript, Python, Go, or Rust source files. Targets structural design issues — shallow modules, pass-through adapters, and hypothetical seams — that indicate low leverage and poor locality in the codebase's interface design.
|
|
143
|
+
|
|
144
|
+
**Detection Method:**
|
|
145
|
+
|
|
146
|
+
Three heuristics are applied independently. Each produces its own findings.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
**Heuristic A: shallow-module**
|
|
151
|
+
|
|
152
|
+
A module exposes a large interface relative to its implementation size — it is a pass-through with little leverage. Callers pay the full interface cost but get minimal depth in return.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Step 1: Count exported symbols per file (TypeScript/JavaScript)
|
|
156
|
+
Grep pattern: ^\s*export\s+(default\s+)?(function|const|class|interface|type|enum)\s+\w+
|
|
157
|
+
--glob "*.{ts,tsx,js,jsx}"
|
|
158
|
+
|
|
159
|
+
# Step 1b: Count exported symbols (Python)
|
|
160
|
+
Grep pattern: ^def\s+\w+
|
|
161
|
+
--glob "*.py"
|
|
162
|
+
|
|
163
|
+
# Step 1c: Count exported symbols (Go)
|
|
164
|
+
Grep pattern: ^func\s+[A-Z]\w+
|
|
165
|
+
--glob "*.go"
|
|
166
|
+
|
|
167
|
+
# Step 1d: Count exported symbols (Rust)
|
|
168
|
+
Grep pattern: ^pub fn\s+\w+|^pub struct\s+\w+|^pub enum\s+\w+|^pub trait\s+\w+
|
|
169
|
+
--glob "*.rs"
|
|
170
|
+
|
|
171
|
+
# Step 2: Count non-comment, non-blank implementation lines (LOC approximation)
|
|
172
|
+
grep -cvE '^\s*(//|#|/\*|\*|$)' <file>
|
|
173
|
+
|
|
174
|
+
# Flag condition: (exported_symbols / LOC) >= 0.5 AND exported_symbols >= 3
|
|
175
|
+
# The exported_symbols >= 3 guard avoids false positives on single-export utility files.
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
**Heuristic B: pass-through-adapter**
|
|
181
|
+
|
|
182
|
+
A class or module where most methods are 1–2 line delegations to a single dependency — it adds no leverage. The deletion test (LANGUAGE.md) reveals the module hides nothing; complexity would be identical across callers if it were removed.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Detect single-line delegation methods in TypeScript/JavaScript classes
|
|
186
|
+
Grep pattern: ^\s+\w+\s*\([^)]*\)\s*\{\s*return\s+this\.\w+\.\w+\(.*\)\s*;?\s*\}
|
|
187
|
+
--glob "*.{ts,tsx,js,jsx}"
|
|
188
|
+
|
|
189
|
+
# Detect single-line delegation methods in Python classes (two-line form)
|
|
190
|
+
# Match def line followed by a return self.<dep>.<method>(...) line
|
|
191
|
+
Grep pattern: ^\s+def\s+\w+\(self[^)]*\):\s*$
|
|
192
|
+
--glob "*.py"
|
|
193
|
+
# Then verify next non-blank line matches: ^\s+return\s+self\.\w+\.\w+\(.*\)$
|
|
194
|
+
|
|
195
|
+
# Flag condition: (delegation_methods / total_methods) >= 0.7 AND total_methods >= 3
|
|
196
|
+
# Count total_methods per file with:
|
|
197
|
+
Grep pattern: ^\s+(public\s+|private\s+|protected\s+|async\s+)*\w+\s*\([^)]*\)\s*\{
|
|
198
|
+
--glob "*.{ts,tsx,js,jsx}"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
**Heuristic C: one-adapter-seam**
|
|
204
|
+
|
|
205
|
+
A TypeScript `interface` or `abstract class` with exactly one concrete implementation — a hypothetical seam, not a real one (Ousterhout, LANGUAGE.md: "One adapter means a hypothetical seam. Two adapters means a real one."). The seam pays an interface-learning cost that no second adapter ever amortises.
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Step 1: Enumerate all interface and abstract class names in the codebase
|
|
209
|
+
Grep pattern: ^(export\s+)?(interface|abstract\s+class)\s+(\w+)
|
|
210
|
+
--glob "*.{ts,tsx}"
|
|
211
|
+
|
|
212
|
+
# Step 2: For each name <N> found, count concrete implementations
|
|
213
|
+
grep -rE 'implements\s+\b<N>\b|extends\s+\b<N>\b' src/ --include="*.ts" --include="*.tsx" \
|
|
214
|
+
| grep -v 'abstract class'
|
|
215
|
+
|
|
216
|
+
# Step 3: Count method signatures within the interface/abstract class body
|
|
217
|
+
Grep pattern: ^\s+\w+\s*\([^)]*\)\s*[:;]
|
|
218
|
+
within the block following the interface/abstract class declaration
|
|
219
|
+
|
|
220
|
+
# Flag condition: implementation_count == 1 AND method_signature_count >= 2
|
|
221
|
+
# The method_signature_count >= 2 guard avoids flagging trivial marker interfaces.
|
|
222
|
+
|
|
223
|
+
# Batch approximation when AST tooling is unavailable:
|
|
224
|
+
# Enumerate all interface names first, then:
|
|
225
|
+
grep -rE 'implements\s+(InterfaceName1|InterfaceName2|...)' src/ \
|
|
226
|
+
--include="*.{ts,tsx}" | sort | uniq -c | awk '$1 == 1 {print $0}'
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Evidence Format:**
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
File: <file_path> Line: <line_number>
|
|
233
|
+
Probe: architectural-friction
|
|
234
|
+
Category: arch
|
|
235
|
+
Severity: medium
|
|
236
|
+
Pattern: shallow-module | pass-through-adapter | one-adapter-seam
|
|
237
|
+
Matched text: <relevant snippet>
|
|
238
|
+
Title: <short description — e.g. "Shallow module exposes 8 symbols across 16 LOC">
|
|
239
|
+
Description: <2-3 lines on why this is friction, using LANGUAGE.md vocabulary —
|
|
240
|
+
reference depth, leverage, locality, seam, adapter as appropriate>
|
|
241
|
+
Recommended fix: invoke the `architecture` skill on this cluster (see skills/architecture/SKILL.md)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
For `shallow-module`: describe the interface-to-depth ratio and what leverage is missing.
|
|
245
|
+
For `pass-through-adapter`: describe which dependency is being delegated to and what the module fails to hide.
|
|
246
|
+
For `one-adapter-seam`: name the interface and its single implementation; note that the seam cost has no second adapter to amortise it.
|
|
247
|
+
|
|
248
|
+
Severity may be raised to **High** when: a shallow module has `exported_symbols >= 10`; a pass-through adapter wraps a high-fan-out dependency (>5 dependents); or a one-adapter seam sits on a hot import path (imported by ≥10 files). Note the raise condition in the Description field — do not auto-promote.
|
|
249
|
+
|
|
250
|
+
**Default Severity:** Medium.
|
|
251
|
+
|
|
252
|
+
---
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
> See probes-intro.md for confidence scoring reference.
|
|
2
|
+
|
|
3
|
+
## Category: `audit`
|
|
4
|
+
|
|
5
|
+
### Probe: harness-audit
|
|
6
|
+
|
|
7
|
+
**Activation:** `.orchestrator/bootstrap.lock` exists (always-on for session-orchestrator-integrated repos).
|
|
8
|
+
|
|
9
|
+
**Detection Method:**
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Step 1: Verify the script exists; skip if missing
|
|
13
|
+
test -f scripts/harness-audit.mjs || { echo "SKIPPED: harness-audit -- scripts/harness-audit.mjs not found"; exit 0; }
|
|
14
|
+
|
|
15
|
+
# Step 2: Run the audit. Capture stdout (JSON) and stderr (human summary) separately;
|
|
16
|
+
# the script writes the human summary to stderr and the JSON record to stdout.
|
|
17
|
+
AUDIT_OUTPUT="$(node scripts/harness-audit.mjs 2>/tmp/audit_summary_stderr)"
|
|
18
|
+
EXIT_CODE=$?
|
|
19
|
+
|
|
20
|
+
# Step 3: Validate the output is parseable JSON
|
|
21
|
+
echo "$AUDIT_OUTPUT" | node -e "
|
|
22
|
+
try {
|
|
23
|
+
const data = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
|
|
24
|
+
process.stdout.write(JSON.stringify(data));
|
|
25
|
+
} catch(e) {
|
|
26
|
+
process.stderr.write('PARSE_ERROR: ' + e.message);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}" 2>/tmp/audit_parse_err
|
|
29
|
+
|
|
30
|
+
# If parse fails, report FAILED and stop
|
|
31
|
+
# If EXIT_CODE != 0, report FAILED with stderr content and stop
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The script writes the same record to `.orchestrator/metrics/audit.jsonl` automatically. The probe reads from stdout only; no additional persistence step is needed.
|
|
35
|
+
|
|
36
|
+
**Severity Mapping (category-level):**
|
|
37
|
+
|
|
38
|
+
Evaluate `score_0_10` for each entry in the `categories` array of the JSON output:
|
|
39
|
+
|
|
40
|
+
| `score_0_10` range | Action |
|
|
41
|
+
|---------------------|--------|
|
|
42
|
+
| `>= 7` | Info only — record in `audit.jsonl`, **do NOT emit a discovery finding** |
|
|
43
|
+
| `>= 5` and `< 7` | Emit finding with severity `medium` |
|
|
44
|
+
| `< 5` | Emit finding with severity `high` |
|
|
45
|
+
|
|
46
|
+
Apply this mapping **per category**, not per individual check.
|
|
47
|
+
|
|
48
|
+
**Finding Emission (one finding per low-scoring category):**
|
|
49
|
+
|
|
50
|
+
For each category whose `score_0_10 < 7`, emit one finding using the following field values:
|
|
51
|
+
|
|
52
|
+
| Finding Field | Value |
|
|
53
|
+
|------------------|-------|
|
|
54
|
+
| `probe` | `harness-audit` |
|
|
55
|
+
| `category` | `audit` |
|
|
56
|
+
| `severity` | `high` if `score_0_10 < 5`, `medium` if `5 <= score_0_10 < 7` |
|
|
57
|
+
| `title` | `harness-audit: <category name> below threshold (<score_0_10>/10)` |
|
|
58
|
+
| `file_path` | `.orchestrator/metrics/audit.jsonl` |
|
|
59
|
+
| `line_number` | `0` (category-level finding — not tied to a single line) |
|
|
60
|
+
| `matched_text` | Composed from the category's failed checks — one line per failed check: `[<check_id>] <message>` |
|
|
61
|
+
| `description` | `Harness audit category "<category name>" scored <score_0_10>/10 (earned <earned_points>/<max_points> points). See failed checks for details.` |
|
|
62
|
+
| `recommended_fix`| List each failed check with its `path` and `evidence` context: `<check_id>: <path> — <evidence>` |
|
|
63
|
+
| `confidence` | `90` |
|
|
64
|
+
|
|
65
|
+
**Evidence Format:**
|
|
66
|
+
```
|
|
67
|
+
Audit Run: session_id=<session_id> rubric_version=<rubric_version> started_at=<started_at>
|
|
68
|
+
Overall: score=<overall_mean_0_10>/10 band=<overall_band> checks=<checks_passed>/<checks_total>
|
|
69
|
+
Repository: branch=<branch> sha=<head_sha>
|
|
70
|
+
|
|
71
|
+
Category: <name>
|
|
72
|
+
Score: <score_0_10>/10 earned=<earned_points>/<max_points> weight=<weight>
|
|
73
|
+
Failed checks:
|
|
74
|
+
- <check_id> status=fail points=<points> path=<path>
|
|
75
|
+
evidence: <evidence>
|
|
76
|
+
message: <message>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Default Severity:** High if `score_0_10 < 5`; Medium if `5 <= score_0_10 < 7`.
|
|
80
|
+
|
|
81
|
+
**Labels for auto-created issues:** `type:discovery`, `area:harness` (new label — add to VCS label set if absent), `priority:high` or `priority:medium` per severity, `status:ready`.
|
|
82
|
+
|
|
83
|
+
**Skip Conditions:**
|
|
84
|
+
|
|
85
|
+
- If `scripts/harness-audit.mjs` is missing → `SKIPPED: harness-audit -- scripts/harness-audit.mjs not found`
|
|
86
|
+
- If the script exits with a non-zero code → `FAILED: harness-audit -- script exited <code>: <stderr excerpt>`
|
|
87
|
+
- If stdout is not valid JSON → `FAILED: harness-audit -- invalid JSON in script output: <parse error>`
|
|
88
|
+
|
|
89
|
+
A skip or failure here does NOT abort the rest of the discovery run. Continue with other probes.
|
|
90
|
+
|
|
91
|
+
**Out of Scope:**
|
|
92
|
+
|
|
93
|
+
This probe reports findings only. It does not attempt remediation or auto-fix. Issue creation follows the standard `/discovery` Phase 5/6 triage flow.
|
|
94
|
+
|
|
95
|
+
---
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
> See probes-intro.md for confidence scoring reference.
|
|
2
|
+
|
|
3
|
+
## Category: `code`
|
|
4
|
+
|
|
5
|
+
### Probe: hardcoded-values
|
|
6
|
+
|
|
7
|
+
**Activation:** Any project with source files.
|
|
8
|
+
|
|
9
|
+
**Detection Method:**
|
|
10
|
+
|
|
11
|
+
1. Hardcoded secrets:
|
|
12
|
+
```bash
|
|
13
|
+
# Grep for hardcoded secrets in source files (exclude tests, .env, config examples)
|
|
14
|
+
Grep pattern: (password|api_key|secret|token|api_secret)\s*[:=]\s*["'][^"']+["']
|
|
15
|
+
--glob "!*.test.*" --glob "!*.spec.*" --glob "!.env*" --glob "!*.example"
|
|
16
|
+
--glob "!*.sample" --glob "!**/test/**" --glob "!**/tests/**"
|
|
17
|
+
--glob "!**/fixtures/**" --glob "!**/mocks/**"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
2. Hardcoded URLs:
|
|
21
|
+
```bash
|
|
22
|
+
# Grep for hardcoded URLs in source files (exclude docs, configs, tests)
|
|
23
|
+
Grep pattern: https?://
|
|
24
|
+
--glob "*.{ts,tsx,js,jsx,py,go,rs,java}" --glob "!**/test/**" --glob "!**/tests/**"
|
|
25
|
+
--glob "!README*" --glob "!*.md" --glob "!*.config.*"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
3. Magic numbers:
|
|
29
|
+
```bash
|
|
30
|
+
# Grep for magic numbers (numeric literals outside obvious contexts)
|
|
31
|
+
Grep pattern: [^a-zA-Z_]\b\d{4,}\b(?!\s*[;,\])}])
|
|
32
|
+
--glob "*.{ts,tsx,js,jsx,py,go,rs,java}" --glob "!**/test/**"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Evidence Format:**
|
|
36
|
+
```
|
|
37
|
+
File: <path> Line: <n>
|
|
38
|
+
Match: <matched_text>
|
|
39
|
+
Classification: secret | url | magic-number
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Default Severity:** Critical (secrets), High (URLs), Medium (magic numbers).
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### Probe: orphaned-annotations
|
|
47
|
+
|
|
48
|
+
**Activation:** Any project with source files.
|
|
49
|
+
|
|
50
|
+
**Detection Method:**
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Grep for TODO/FIXME/HACK/XXX/TEMP/WORKAROUND annotations
|
|
54
|
+
Grep pattern: (TODO|FIXME|HACK|XXX|TEMP|WORKAROUND)[\s:()\-]
|
|
55
|
+
--glob "*.{ts,tsx,js,jsx,py,go,rs,java,rb,swift,kt}"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
For each match, check whether a corresponding VCS issue exists:
|
|
59
|
+
```bash
|
|
60
|
+
# Search for issue referencing the annotation text
|
|
61
|
+
gh issue list --search "<annotation text>" --limit 5
|
|
62
|
+
# or
|
|
63
|
+
glab issue list --search "<annotation text>" --per-page 5
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Flag annotations with no corresponding issue.
|
|
67
|
+
|
|
68
|
+
**Evidence Format:**
|
|
69
|
+
```
|
|
70
|
+
File: <path> Line: <n>
|
|
71
|
+
Annotation: <TODO|FIXME|HACK|...>
|
|
72
|
+
Text: <annotation text>
|
|
73
|
+
Linked Issue: <#IID or NONE>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Default Severity:** Low (TODO), Medium (FIXME/HACK/XXX/TEMP/WORKAROUND).
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### Probe: dead-code
|
|
81
|
+
|
|
82
|
+
**Activation:** `package.json` exists (JS/TS projects).
|
|
83
|
+
|
|
84
|
+
**Detection Method:**
|
|
85
|
+
|
|
86
|
+
1. Unused exports:
|
|
87
|
+
```bash
|
|
88
|
+
# Find all export statements
|
|
89
|
+
Grep pattern: export\s+(default\s+)?(function|class|const|let|var|type|interface|enum)\s+(\w+)
|
|
90
|
+
--glob "*.{ts,tsx,js,jsx}" --glob "!**/node_modules/**"
|
|
91
|
+
|
|
92
|
+
# For each exported name, check for importers
|
|
93
|
+
Grep pattern: import.*<exported_name>
|
|
94
|
+
--glob "*.{ts,tsx,js,jsx}" --glob "!**/node_modules/**"
|
|
95
|
+
|
|
96
|
+
# Flag exports with 0 importers (exclude index files and entry points)
|
|
97
|
+
# Exclude: index.ts, index.js, main.ts, main.js, app.ts, app.js
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
2. Unused dependencies:
|
|
101
|
+
```bash
|
|
102
|
+
# List all dependencies from package.json
|
|
103
|
+
cat package.json | python3 -c "import json,sys; deps=json.load(sys.stdin).get('dependencies',{}); [print(d) for d in deps]"
|
|
104
|
+
|
|
105
|
+
# For each dependency, check if it is imported anywhere
|
|
106
|
+
Grep pattern: (import|require).*['"]<dependency_name>
|
|
107
|
+
--glob "*.{ts,tsx,js,jsx}" --glob "!**/node_modules/**"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Evidence Format:**
|
|
111
|
+
```
|
|
112
|
+
Type: unused-export | unused-dependency
|
|
113
|
+
Name: <export_name or dependency_name>
|
|
114
|
+
Defined In: <file_path>:<line>
|
|
115
|
+
Importers Found: 0
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Default Severity:** Low.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### Probe: ai-slop
|
|
123
|
+
|
|
124
|
+
**Activation:** Any project with source files.
|
|
125
|
+
|
|
126
|
+
**Detection Method:**
|
|
127
|
+
|
|
128
|
+
1. Slop patterns (reference `slop-patterns.md` for full pattern list):
|
|
129
|
+
```bash
|
|
130
|
+
# Filler phrases in comments
|
|
131
|
+
Grep pattern: (as you can see|it's worth noting|needless to say|it should be noted|obviously|of course|basically|essentially|simply|let's go ahead|let's proceed|moving on to)
|
|
132
|
+
--glob "*.{ts,tsx,js,jsx,py,go,rs,java}"
|
|
133
|
+
|
|
134
|
+
# Over-documented trivial code (param docs repeating param name)
|
|
135
|
+
Grep pattern: @param\s+(\w+)\s+[-—]\s*(the\s+)?\1
|
|
136
|
+
--glob "*.{ts,tsx,js,jsx}"
|
|
137
|
+
|
|
138
|
+
# Generic error messages
|
|
139
|
+
Grep pattern: catch.*throw new Error\(["'].*error occurred
|
|
140
|
+
--glob "*.{ts,tsx,js,jsx,py}"
|
|
141
|
+
|
|
142
|
+
# Redundant type assertions
|
|
143
|
+
Grep pattern: as string(?=\s*[;,)\]])
|
|
144
|
+
--glob "*.{ts,tsx}"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
2. Hallucinated imports (verify every import resolves):
|
|
148
|
+
```bash
|
|
149
|
+
# Extract all relative imports and check they exist on disk
|
|
150
|
+
Grep pattern: from\s+["'](\.\.?/[^"']+)["']
|
|
151
|
+
--glob "*.{ts,tsx,js,jsx}"
|
|
152
|
+
|
|
153
|
+
# For each match, verify the file exists:
|
|
154
|
+
# test -f <resolved_path>.ts || test -f <resolved_path>.tsx || test -f <resolved_path>/index.ts
|
|
155
|
+
|
|
156
|
+
# Extract package imports and verify against package.json
|
|
157
|
+
Grep pattern: from\s+["']([^./][^"']*)["']
|
|
158
|
+
--glob "*.{ts,tsx,js,jsx}"
|
|
159
|
+
# Verify each package is in dependencies or devDependencies
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Evidence Format:**
|
|
163
|
+
```
|
|
164
|
+
Type: slop-pattern | hallucinated-import
|
|
165
|
+
File: <path> Line: <n>
|
|
166
|
+
Pattern: <matched_text>
|
|
167
|
+
Category: filler | over-doc | generic-error | redundant | hallucinated
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Default Severity:** Medium (slop patterns), High (hallucinated imports).
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### Probe: type-safety-gaps
|
|
175
|
+
|
|
176
|
+
**Activation:** `tsconfig.json` exists.
|
|
177
|
+
|
|
178
|
+
**Detection Method:**
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# any type usage
|
|
182
|
+
Grep pattern: :\s*any\b
|
|
183
|
+
--glob "*.{ts,tsx}" --glob "!*.test.*" --glob "!*.spec.*" --glob "!**/test/**"
|
|
184
|
+
|
|
185
|
+
# Type assertion to any
|
|
186
|
+
Grep pattern: as\s+any\b
|
|
187
|
+
--glob "*.{ts,tsx}" --glob "!*.test.*" --glob "!*.spec.*"
|
|
188
|
+
|
|
189
|
+
# TypeScript directive suppressions
|
|
190
|
+
Grep pattern: @ts-ignore|@ts-expect-error
|
|
191
|
+
--glob "*.{ts,tsx}"
|
|
192
|
+
|
|
193
|
+
# Non-null assertions
|
|
194
|
+
Grep pattern: \w+!\.
|
|
195
|
+
--glob "*.{ts,tsx}" --glob "!*.test.*" --glob "!*.spec.*"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Evidence Format:**
|
|
199
|
+
```
|
|
200
|
+
File: <path> Line: <n>
|
|
201
|
+
Pattern: any-type | as-any | ts-ignore | ts-expect-error | non-null-assertion
|
|
202
|
+
Code: <matched_text>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Default Severity:** Medium.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### Probe: test-coverage-gaps
|
|
210
|
+
|
|
211
|
+
**Activation:** Test infrastructure exists (test directory, test config, or test files present).
|
|
212
|
+
|
|
213
|
+
**Detection Method:**
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Find all source files
|
|
217
|
+
Glob pattern: src/**/*.{ts,tsx,js,jsx,py,go,rs}
|
|
218
|
+
--glob "!*.test.*" --glob "!*.spec.*" --glob "!**/test/**" --glob "!**/tests/**"
|
|
219
|
+
--glob "!**/fixtures/**" --glob "!**/mocks/**" --glob "!**/__mocks__/**"
|
|
220
|
+
|
|
221
|
+
# For each source file, check if a corresponding test file exists:
|
|
222
|
+
# JS/TS: <name>.test.ts, <name>.spec.ts, <name>.test.tsx, <name>.spec.tsx
|
|
223
|
+
# Python: test_<name>.py, <name>_test.py
|
|
224
|
+
# Go: <name>_test.go
|
|
225
|
+
# Rust: tests/<name>.rs or #[cfg(test)] in same file
|
|
226
|
+
|
|
227
|
+
# List source files with no test counterpart
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Evidence Format:**
|
|
231
|
+
```
|
|
232
|
+
File: <path>
|
|
233
|
+
Test File Expected: <expected_test_path>
|
|
234
|
+
Status: MISSING
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Default Severity:** Medium.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
### Probe: test-anti-patterns
|
|
242
|
+
|
|
243
|
+
**Activation:** Test files exist.
|
|
244
|
+
|
|
245
|
+
**Detection Method:**
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
# Tests with no assertions (assert-nothing)
|
|
249
|
+
# Find test functions/blocks, check for expect/assert within them
|
|
250
|
+
Grep pattern: (it|test)\s*\(
|
|
251
|
+
--glob "*.{test,spec}.{ts,tsx,js,jsx}"
|
|
252
|
+
# Then verify each test block contains at least one:
|
|
253
|
+
Grep pattern: (expect|assert|should|toBe|toEqual|toMatch|toThrow|toHaveBeenCalled)
|
|
254
|
+
# If absent in the same test block, flag as assert-nothing
|
|
255
|
+
|
|
256
|
+
# Excessive mocking (test-the-mock)
|
|
257
|
+
Grep pattern: (jest\.mock|vi\.mock|sinon\.stub|mock\()
|
|
258
|
+
--glob "*.{test,spec}.{ts,tsx,js,jsx}"
|
|
259
|
+
# Flag files with >5 mock statements
|
|
260
|
+
|
|
261
|
+
# Flaky test indicators
|
|
262
|
+
Grep pattern: (setTimeout|sleep|delay|waitFor)\s*\(
|
|
263
|
+
--glob "*.{test,spec}.{ts,tsx,js,jsx}"
|
|
264
|
+
|
|
265
|
+
# Snapshot abuse
|
|
266
|
+
Grep pattern: toMatchSnapshot|toMatchInlineSnapshot
|
|
267
|
+
--glob "*.{test,spec}.{ts,tsx,js,jsx}"
|
|
268
|
+
# Flag files with >10 snapshot assertions
|
|
269
|
+
|
|
270
|
+
# Swallowed errors in tests
|
|
271
|
+
Grep pattern: catch\s*\([^)]*\)\s*\{\s*\}
|
|
272
|
+
--glob "*.{test,spec}.{ts,tsx,js,jsx}"
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Evidence Format:**
|
|
276
|
+
```
|
|
277
|
+
File: <path> Line: <n>
|
|
278
|
+
Anti-Pattern: assert-nothing | test-the-mock | flaky-indicator | snapshot-abuse | swallowed-error
|
|
279
|
+
Code: <matched_text>
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**Default Severity:** High.
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
### Probe: security-basics
|
|
287
|
+
|
|
288
|
+
**Activation:** Any project with source files.
|
|
289
|
+
|
|
290
|
+
**Detection Method:**
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# eval usage
|
|
294
|
+
Grep pattern: \beval\s*\(
|
|
295
|
+
--glob "*.{ts,tsx,js,jsx,py}" --glob "!**/node_modules/**"
|
|
296
|
+
|
|
297
|
+
# Dangerous HTML injection (React)
|
|
298
|
+
Grep pattern: dangerouslySetInnerHTML
|
|
299
|
+
--glob "*.{tsx,jsx}"
|
|
300
|
+
|
|
301
|
+
# innerHTML assignment
|
|
302
|
+
Grep pattern: innerHTML\s*=
|
|
303
|
+
--glob "*.{ts,tsx,js,jsx}"
|
|
304
|
+
|
|
305
|
+
# SQL injection via template literals
|
|
306
|
+
Grep pattern: `[^`]*SELECT[^`]*\$\{
|
|
307
|
+
--glob "*.{ts,tsx,js,jsx}" --glob "!**/test/**" --glob "!**/tests/**"
|
|
308
|
+
|
|
309
|
+
# Permissive CORS
|
|
310
|
+
Grep pattern: cors.*\*|Access-Control-Allow-Origin.*\*
|
|
311
|
+
--glob "*.{ts,tsx,js,jsx,py,go,java}" --glob "!**/test/**"
|
|
312
|
+
|
|
313
|
+
# Insecure randomness in security contexts
|
|
314
|
+
Grep pattern: Math\.random\(\)
|
|
315
|
+
--glob "*.{ts,tsx,js,jsx}" --glob "!**/test/**"
|
|
316
|
+
# Cross-reference with nearby security-related terms (token, secret, key, auth, session)
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**Evidence Format:**
|
|
320
|
+
```
|
|
321
|
+
File: <path> Line: <n>
|
|
322
|
+
Vulnerability: eval | xss-dangerous | xss-innerhtml | sql-injection | cors-wildcard | insecure-random
|
|
323
|
+
Code: <matched_text>
|
|
324
|
+
Context: <surrounding lines>
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**Default Severity:** High. Critical for SQL injection and XSS patterns.
|
|
328
|
+
|
|
329
|
+
---
|