session-orchestrator 5.1.0 → 5.3.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/.agents/skills/architecture/SKILL.md +3 -1
- package/.agents/skills/autopilot/SKILL.md +6 -1
- package/.agents/skills/autopilot/agents/openai.yaml +5 -0
- package/.agents/skills/bootstrap/SKILL.md +7 -1
- package/.agents/skills/bootstrap/agents/openai.yaml +5 -0
- package/.agents/skills/brainstorm/SKILL.md +8 -1
- package/.agents/skills/brainstorm/agents/openai.yaml +5 -0
- package/.agents/skills/claude-md-drift-check/SKILL.md +3 -1
- package/.agents/skills/close/SKILL.md +21 -0
- package/.agents/skills/close/agents/openai.yaml +5 -0
- package/.agents/skills/convergence-monitoring/SKILL.md +4 -2
- package/.agents/skills/debug/SKILL.md +7 -1
- package/.agents/skills/debug/agents/openai.yaml +5 -0
- package/.agents/skills/discovery/SKILL.md +7 -2
- package/.agents/skills/discovery/agents/openai.yaml +5 -0
- package/.agents/skills/dispatcher/SKILL.md +7 -1
- package/.agents/skills/dispatcher/agents/openai.yaml +5 -0
- package/.agents/skills/docs-orchestrator/SKILL.md +3 -1
- package/.agents/skills/ecosystem-health/SKILL.md +3 -1
- package/.agents/skills/eli5/SKILL.md +7 -1
- package/.agents/skills/eli5/agents/openai.yaml +5 -0
- package/.agents/skills/eval/SKILL.md +7 -2
- package/.agents/skills/eval/agents/openai.yaml +5 -0
- package/.agents/skills/evolve/SKILL.md +8 -3
- package/.agents/skills/evolve/agents/openai.yaml +5 -0
- package/.agents/skills/frontmatter-guard/SKILL.md +3 -1
- package/.agents/skills/gitlab-ops/SKILL.md +3 -1
- package/.agents/skills/gitlab-portfolio/SKILL.md +3 -1
- package/.agents/skills/go/SKILL.md +22 -0
- package/.agents/skills/go/agents/openai.yaml +5 -0
- package/.agents/skills/grill/SKILL.md +7 -1
- package/.agents/skills/grill/agents/openai.yaml +5 -0
- package/.agents/skills/harness-audit/SKILL.md +20 -0
- package/.agents/skills/harness-audit/agents/openai.yaml +5 -0
- package/.agents/skills/hook-development/SKILL.md +3 -1
- package/.agents/skills/mcp-builder/SKILL.md +3 -1
- package/.agents/skills/memory-cleanup/SKILL.md +6 -1
- package/.agents/skills/memory-cleanup/agents/openai.yaml +5 -0
- package/.agents/skills/mode-selector/SKILL.md +3 -1
- package/.agents/skills/npm-publish/SKILL.md +4 -2
- package/.agents/skills/peekaboo-driver/SKILL.md +3 -1
- package/.agents/skills/persona-panel/SKILL.md +6 -1
- package/.agents/skills/persona-panel/agents/openai.yaml +5 -0
- package/.agents/skills/plan/SKILL.md +8 -2
- package/.agents/skills/plan/agents/openai.yaml +5 -0
- package/.agents/skills/playwright-driver/SKILL.md +3 -1
- package/.agents/skills/portfolio/SKILL.md +21 -0
- package/.agents/skills/portfolio/agents/openai.yaml +5 -0
- package/.agents/skills/quality-gates/SKILL.md +3 -1
- package/.agents/skills/reconcile/SKILL.md +6 -1
- package/.agents/skills/reconcile/agents/openai.yaml +5 -0
- package/.agents/skills/release/SKILL.md +22 -0
- package/.agents/skills/release/agents/openai.yaml +5 -0
- package/.agents/skills/remote-offload/SKILL.md +3 -1
- package/.agents/skills/repo-audit/SKILL.md +6 -1
- package/.agents/skills/repo-audit/agents/openai.yaml +5 -0
- package/.agents/skills/session/SKILL.md +21 -0
- package/.agents/skills/session/agents/openai.yaml +5 -0
- package/.agents/skills/session-end/SKILL.md +3 -1
- package/.agents/skills/session-plan/SKILL.md +3 -1
- package/.agents/skills/session-start/SKILL.md +3 -1
- package/.agents/skills/spinout/SKILL.md +6 -1
- package/.agents/skills/spinout/agents/openai.yaml +5 -0
- package/.agents/skills/sunset-review/SKILL.md +7 -1
- package/.agents/skills/sunset-review/agents/openai.yaml +5 -0
- package/.agents/skills/templates-ack/SKILL.md +21 -0
- package/.agents/skills/templates-ack/agents/openai.yaml +5 -0
- package/.agents/skills/test/SKILL.md +21 -0
- package/.agents/skills/test/agents/openai.yaml +5 -0
- package/.agents/skills/test-runner/SKILL.md +3 -1
- package/.agents/skills/tmux-layout/SKILL.md +3 -1
- package/.agents/skills/using-orchestrator/SKILL.md +3 -1
- package/.agents/skills/ux-grill/SKILL.md +7 -1
- package/.agents/skills/ux-grill/agents/openai.yaml +5 -0
- package/.agents/skills/vault-mirror/SKILL.md +3 -1
- package/.agents/skills/vault-sync/SKILL.md +3 -1
- package/.agents/skills/wave-executor/SKILL.md +3 -1
- package/.agents/skills/write-executable-plan/SKILL.md +3 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +4 -4
- package/.codex-plugin/skills/autopilot/SKILL.md +5 -4
- package/.codex-plugin/skills/bootstrap/SKILL.md +8 -4
- package/.codex-plugin/skills/brainstorm/SKILL.md +11 -4
- package/.codex-plugin/skills/close/SKILL.md +3 -3
- package/.codex-plugin/skills/convergence-monitoring/SKILL.md +1 -1
- package/.codex-plugin/skills/debug/SKILL.md +11 -4
- package/.codex-plugin/skills/discovery/SKILL.md +8 -4
- package/.codex-plugin/skills/dispatcher/SKILL.md +4 -4
- package/.codex-plugin/skills/eli5/SKILL.md +9 -4
- package/.codex-plugin/skills/eval/SKILL.md +9 -4
- package/.codex-plugin/skills/evolve/SKILL.md +9 -4
- package/.codex-plugin/skills/go/SKILL.md +3 -3
- package/.codex-plugin/skills/grill/SKILL.md +11 -4
- package/.codex-plugin/skills/harness-audit/SKILL.md +4 -3
- package/.codex-plugin/skills/memory-cleanup/SKILL.md +9 -4
- package/.codex-plugin/skills/npm-publish/SKILL.md +1 -1
- package/.codex-plugin/skills/persona-panel/SKILL.md +5 -5
- package/.codex-plugin/skills/plan/SKILL.md +8 -4
- package/.codex-plugin/skills/portfolio/SKILL.md +3 -3
- package/.codex-plugin/skills/reconcile/SKILL.md +9 -4
- package/.codex-plugin/skills/release/SKILL.md +3 -3
- package/.codex-plugin/skills/repo-audit/SKILL.md +6 -4
- package/.codex-plugin/skills/session/SKILL.md +1 -1
- package/.codex-plugin/skills/spinout/SKILL.md +4 -4
- package/.codex-plugin/skills/sunset-review/SKILL.md +5 -4
- package/.codex-plugin/skills/test/SKILL.md +3 -3
- package/.codex-plugin/skills/ux-grill/SKILL.md +11 -4
- package/.cursor/commands/autopilot.md +4 -4
- package/.cursor/commands/bootstrap.md +5 -4
- package/.cursor/commands/brainstorm.md +5 -4
- package/.cursor/commands/close.md +4 -3
- package/.cursor/commands/debug.md +4 -4
- package/.cursor/commands/discovery.md +4 -4
- package/.cursor/commands/dispatcher.md +4 -4
- package/.cursor/commands/eli5.md +4 -4
- package/.cursor/commands/eval.md +4 -4
- package/.cursor/commands/evolve.md +4 -4
- package/.cursor/commands/go.md +4 -3
- package/.cursor/commands/grill.md +4 -4
- package/.cursor/commands/harness-audit.md +3 -3
- package/.cursor/commands/memory-cleanup.md +4 -4
- package/.cursor/commands/persona-panel.md +4 -4
- package/.cursor/commands/plan.md +5 -4
- package/.cursor/commands/portfolio.md +3 -3
- package/.cursor/commands/reconcile.md +4 -4
- package/.cursor/commands/release.md +4 -3
- package/.cursor/commands/repo-audit.md +4 -4
- package/.cursor/commands/session.md +1 -1
- package/.cursor/commands/spinout.md +4 -4
- package/.cursor/commands/sunset-review.md +4 -4
- package/.cursor/commands/test.md +3 -3
- package/.cursor/commands/ux-grill.md +4 -4
- package/.cursor/rules/000-session-orchestrator.mdc +0 -2
- package/.cursor/rules/010-session-workflow.mdc +2 -2
- package/.cursor/rules/050-plan.mdc +1 -1
- package/.cursor/skills/bootstrap/SKILL.md +1 -0
- package/.cursor/skills/close/SKILL.md +13 -0
- package/.cursor/skills/convergence-monitoring/SKILL.md +1 -0
- package/.cursor/skills/debug/SKILL.md +0 -1
- package/.cursor/skills/discovery/SKILL.md +0 -1
- package/.cursor/skills/dispatcher/SKILL.md +0 -1
- package/.cursor/skills/eli5/SKILL.md +0 -1
- package/.cursor/skills/eval/SKILL.md +1 -1
- package/.cursor/skills/evolve/SKILL.md +0 -1
- package/.cursor/skills/go/SKILL.md +13 -0
- package/.cursor/skills/grill/SKILL.md +0 -1
- package/.cursor/skills/harness-audit/SKILL.md +12 -0
- package/.cursor/skills/npm-publish/SKILL.md +1 -0
- package/.cursor/skills/portfolio/SKILL.md +12 -0
- package/.cursor/skills/release/SKILL.md +13 -0
- package/.cursor/skills/repo-audit/SKILL.md +0 -1
- package/.cursor/skills/sunset-review/SKILL.md +0 -1
- package/.cursor/skills/test/SKILL.md +12 -0
- package/.cursor/skills/ux-grill/SKILL.md +0 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.orchestrator/policy/blocked-commands.json +13 -4
- package/AGENTS.md +3 -2
- package/CHANGELOG.md +197 -0
- package/README.md +11 -9
- package/SECURITY.md +12 -0
- package/agents/dialectic-deriver.md +13 -10
- package/agents/eval-judge.md +67 -45
- package/agents/skill-applied-judge.md +34 -19
- package/commands/session.md +17 -3
- package/docs/baseline.md +12 -6
- package/docs/ci-setup.md +53 -0
- package/docs/codex-setup.md +15 -3
- package/docs/components.md +13 -6
- package/docs/events-schema.md +59 -9
- package/docs/install.md +16 -0
- package/docs/persona-panel.md +1 -1
- package/docs/pi-setup.md +1 -1
- package/docs/rule-authoring.md +135 -14
- package/docs/scope-collision-guard.md +2 -0
- package/docs/session-config-reference.md +106 -11
- package/docs/session-config-template.md +31 -2
- package/docs/telemetry.md +2 -0
- package/hooks/_lib/hook-import-set.json +125 -8
- package/hooks/_lib/subagent-paths.mjs +15 -0
- package/hooks/_lib/subagent-transcript.mjs +582 -31
- package/hooks/_lib/vcs-create-matcher.mjs +217 -62
- package/hooks/config-protection.mjs +11 -3
- package/hooks/cwd-change-restore.mjs +11 -3
- package/hooks/enforce-commands.mjs +70 -23
- package/hooks/enforce-scope.mjs +143 -33
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks.json +1 -1
- package/hooks/loop-guard.mjs +11 -3
- package/hooks/on-session-end.mjs +72 -25
- package/hooks/on-session-start.mjs +48 -11
- package/hooks/on-stop.mjs +211 -23
- package/hooks/operator-steer.mjs +11 -3
- package/hooks/post-bash-issue-budget-refund.mjs +18 -8
- package/hooks/post-bash-write-verify.mjs +6 -2
- package/hooks/post-edit-import-probe.mjs +17 -9
- package/hooks/post-edit-validate.mjs +13 -5
- package/hooks/post-subagent-discovery-validator.mjs +98 -13
- package/hooks/post-tool-batch-wave-signal.mjs +200 -38
- package/hooks/post-tool-failure-corrective-context.mjs +11 -5
- package/hooks/post-tooluse-frontend-slop.mjs +10 -4
- package/hooks/pre-auq-clarity.mjs +18 -2
- package/hooks/pre-bash-destructive-guard.mjs +80 -9
- package/hooks/pre-bash-issue-budget.mjs +119 -28
- package/hooks/pre-bash-memory-propose-audit.mjs +86 -54
- package/hooks/pre-bash-sessions-ledger-guard.mjs +391 -20
- package/hooks/pre-bash-staging-fence.mjs +335 -31
- package/hooks/pre-bash-templates-first.mjs +19 -14
- package/hooks/pre-task-scope-disjoint.mjs +385 -5
- package/hooks/skill-invocation-telemetry.mjs +2 -1
- package/hooks/subagent-telemetry.mjs +15 -19
- package/hooks/wave-scope-commit-guard.mjs +197 -100
- package/monitors/monitors.json +1 -1
- package/output-styles/wave-summary.md +1 -1
- package/package.json +2 -1
- package/pi/prompts/autopilot.md +3 -3
- package/pi/prompts/bootstrap.md +3 -3
- package/pi/prompts/brainstorm.md +3 -3
- package/pi/prompts/close.md +2 -2
- package/pi/prompts/debug.md +3 -3
- package/pi/prompts/discovery.md +3 -3
- package/pi/prompts/dispatcher.md +3 -3
- package/pi/prompts/eli5.md +3 -3
- package/pi/prompts/eval.md +3 -3
- package/pi/prompts/evolve.md +3 -3
- package/pi/prompts/go.md +2 -2
- package/pi/prompts/grill.md +3 -3
- package/pi/prompts/harness-audit.md +2 -3
- package/pi/prompts/memory-cleanup.md +3 -3
- package/pi/prompts/persona-panel.md +3 -3
- package/pi/prompts/plan.md +3 -3
- package/pi/prompts/portfolio.md +2 -2
- package/pi/prompts/reconcile.md +3 -3
- package/pi/prompts/release.md +3 -3
- package/pi/prompts/repo-audit.md +3 -4
- package/pi/prompts/session.md +2 -2
- package/pi/prompts/spinout.md +3 -3
- package/pi/prompts/sunset-review.md +3 -3
- package/pi/prompts/templates-ack.md +1 -1
- package/pi/prompts/test.md +3 -3
- package/pi/prompts/ux-grill.md +3 -3
- package/rules/README.md +1 -1
- package/rules/opt-in-domain/prompt-caching.md +1 -1
- package/rules/opt-in-stack/backend-data.md +1 -1
- package/rules/opt-in-stack/backend.md +3 -3
- package/rules/opt-in-stack/frontend.md +1 -1
- package/rules/opt-in-stack/security-web.md +3 -3
- package/rules/opt-in-stack/swift.md +1 -1
- package/scripts/archive-closed-prds.mjs +2 -2
- package/scripts/auq-audit.mjs +2 -3
- package/scripts/autopilot.mjs +23 -2
- package/scripts/backfill-abandoned-sessions.mjs +171 -15
- package/scripts/backfill-evidence-digest.mjs +2 -1
- package/scripts/backfill-learnings-from-vault.mjs +2 -2
- package/scripts/check-package-manager.mjs +2 -2
- package/scripts/check-sessions-integrity.mjs +300 -0
- package/scripts/ci/assert-vitest-green.mjs +2 -1
- package/scripts/dialectic-deriver.mjs +50 -13
- package/scripts/emit-session.mjs +77 -32
- package/scripts/eval-session.mjs +65 -3
- package/scripts/export-hw-learnings.mjs +2 -1
- package/scripts/express-path.mjs +1 -1
- package/scripts/gc-stale-worktrees.mjs +2 -1
- package/scripts/generate-agents-skills.mjs +102 -29
- package/scripts/generate-codex-skills.mjs +48 -4
- package/scripts/generate-cursor-adapter.mjs +220 -11
- package/scripts/generate-hook-import-set.mjs +12 -27
- package/scripts/generate-pi-prompts.mjs +183 -13
- package/scripts/github-protection-audit.mjs +2 -3
- package/scripts/lib/agent-frontmatter.mjs +23 -1
- package/scripts/lib/agent-status.mjs +2 -31
- package/scripts/lib/auq/clarity.mjs +10 -2
- package/scripts/lib/auq/parse.mjs +12 -31
- package/scripts/lib/auq/schema.mjs +56 -41
- package/scripts/lib/auto-dialectic.mjs +304 -15
- package/scripts/lib/autopilot/flags.mjs +12 -1
- package/scripts/lib/autopilot/kill-switches.mjs +6 -3
- package/scripts/lib/autopilot/loop.mjs +14 -1
- package/scripts/lib/autopilot/stall-sampler.mjs +80 -23
- package/scripts/lib/ci-status-banner.mjs +376 -16
- package/scripts/lib/claude-md-budget-lint.mjs +2 -5
- package/scripts/lib/command-blocker.mjs +408 -33
- package/scripts/lib/config/dialectic.mjs +12 -3
- package/scripts/lib/config/drift-check.mjs +19 -0
- package/scripts/lib/config/gate.mjs +74 -0
- package/scripts/lib/config/reaper.mjs +162 -0
- package/scripts/lib/config.mjs +14 -0
- package/scripts/lib/convergence-monitor.mjs +76 -13
- package/scripts/lib/cursor-hook-bridge.mjs +2 -2
- package/scripts/lib/description-surface.mjs +2 -5
- package/scripts/lib/dispatcher/cli.mjs +2 -1
- package/scripts/lib/ecosystem-health.mjs +11 -0
- package/scripts/lib/ecosystem-wizard.mjs +2 -1
- package/scripts/lib/eval/engine.mjs +421 -53
- package/scripts/lib/eval/judge.mjs +463 -40
- package/scripts/lib/eval/schema.mjs +10 -1
- package/scripts/lib/events-rotation.mjs +221 -25
- package/scripts/lib/events-schema.mjs +114 -0
- package/scripts/lib/events.mjs +524 -5
- package/scripts/lib/fetch-baseline.mjs +3 -8
- package/scripts/lib/frontmatter-guard.mjs +21 -10
- package/scripts/lib/gates/gate-baseline.mjs +27 -2
- package/scripts/lib/gates/gate-full.mjs +28 -3
- package/scripts/lib/gates/gate-helpers.mjs +243 -21
- package/scripts/lib/gates/gate-incremental.mjs +28 -3
- package/scripts/lib/gates/gate-per-file.mjs +27 -2
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +2 -1
- package/scripts/lib/gitlab-portfolio/cli.mjs +2 -1
- package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +6 -1
- package/scripts/lib/instruction-budget-guard.mjs +332 -50
- package/scripts/lib/io.mjs +42 -8
- package/scripts/lib/is-main-module.mjs +82 -0
- package/scripts/lib/issue-close-strip-labels.mjs +207 -49
- package/scripts/lib/js-mask.mjs +197 -0
- package/scripts/lib/learnings/evolve-telemetry.mjs +11 -7
- package/scripts/lib/locks/index.mjs +32 -25
- package/scripts/lib/maintenance-due-banner.mjs +122 -91
- package/scripts/lib/orphan-reaper.mjs +1588 -0
- package/scripts/lib/peer-cards/merger.mjs +48 -10
- package/scripts/lib/peer-cards/reader.mjs +78 -2
- package/scripts/lib/peer-discovery.mjs +2 -5
- package/scripts/lib/playwright-driver/runner.mjs +2 -1
- package/scripts/lib/process-group.mjs +899 -0
- package/scripts/lib/quality-gate.mjs +107 -28
- package/scripts/lib/reconcile/backlog.mjs +368 -0
- package/scripts/lib/reconcile/engine.mjs +55 -188
- package/scripts/lib/reconcile/rule-expiry-sweep.mjs +884 -0
- package/scripts/lib/reconcile/sanitize.mjs +69 -3
- package/scripts/lib/reconcile-nudge-banner.mjs +138 -45
- package/scripts/lib/resource-probe/parsers.mjs +31 -0
- package/scripts/lib/rule-loader.mjs +41 -12
- package/scripts/lib/rules-sync.mjs +2 -5
- package/scripts/lib/scope-echo.mjs +429 -7
- package/scripts/lib/scope-gate.mjs +605 -1
- package/scripts/lib/session-close-backfill.mjs +91 -12
- package/scripts/lib/session-id.mjs +9 -20
- package/scripts/lib/session-invocation.mjs +20 -0
- package/scripts/lib/session-schema/constants.mjs +30 -2
- package/scripts/lib/session-schema/normalizer.mjs +56 -4
- package/scripts/lib/session-schema.mjs +8 -3
- package/scripts/lib/session-start-probes.mjs +95 -10
- package/scripts/lib/sessions-canonical.mjs +23 -0
- package/scripts/lib/sessions-integrity-banner.mjs +7 -1
- package/scripts/lib/sessions-staleness-banner.mjs +193 -51
- package/scripts/lib/skill-evidence-window.mjs +891 -0
- package/scripts/lib/skill-evolution/candidate-intake.mjs +133 -12
- package/scripts/lib/skill-evolution/engine.mjs +18 -9
- package/scripts/lib/skill-judge.mjs +45 -3
- package/scripts/lib/state-md.mjs +84 -3
- package/scripts/lib/sunset/walker.mjs +31 -4
- package/scripts/lib/tail-window.mjs +56 -0
- package/scripts/lib/telemetry/schema.mjs +30 -0
- package/scripts/lib/telemetry/sync.mjs +61 -6
- package/scripts/lib/telemetry-flush-health-banner.mjs +4 -22
- package/scripts/lib/test-runner/issue-reconcile.mjs +48 -16
- package/scripts/lib/tests-src-ratio.mjs +2 -6
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +74 -14
- package/scripts/lib/user-invocable-skills.mjs +205 -0
- package/scripts/lib/ux-grill/reconcile.mjs +48 -22
- package/scripts/lib/validate/check-agents-skills.mjs +26 -15
- package/scripts/lib/validate/check-banner-parity.mjs +2 -2
- package/scripts/lib/validate/check-cursor-adapter.mjs +3 -2
- package/scripts/lib/validate/check-dead-bridge.mjs +2 -2
- package/scripts/lib/validate/check-doc-cli-commands.mjs +2 -2
- package/scripts/lib/validate/check-entry-guard.mjs +329 -0
- package/scripts/lib/validate/check-guard-requires-parity.mjs +2 -2
- package/scripts/lib/validate/check-hook-entry-guards.mjs +636 -0
- package/scripts/lib/validate/check-hooks-emit-event-guard.mjs +2 -2
- package/scripts/lib/validate/check-learning-provenance.mjs +2 -2
- package/scripts/lib/validate/check-pi-prompts.mjs +1 -0
- package/scripts/lib/validate/check-rules.mjs +7 -5
- package/scripts/lib/validate/check-skill-links.mjs +35 -6
- package/scripts/lib/validate/check-skill-script-paths.mjs +241 -29
- package/scripts/lib/validate/check-test-git-config-target.mjs +26 -36
- package/scripts/lib/validate/check-unicode-safety.mjs +2 -2
- package/scripts/lib/validate/check-untracked-test-deps.mjs +9 -104
- package/scripts/lib/validate/check-unwired-features.mjs +220 -33
- package/scripts/lib/validate/check-validator-registration.mjs +36 -12
- package/scripts/lib/validate/check-vcs-repo-flag.mjs +2 -2
- package/scripts/lib/validate/confidential-names.mjs +10 -0
- package/scripts/lib/validate-vendored-rules.mjs +39 -12
- package/scripts/lib/vault-mirror/namespace.mjs +46 -8
- package/scripts/lib/vault-mirror/process.mjs +10 -3
- package/scripts/lib/vault-mirror/render-sessions.mjs +12 -2
- package/scripts/lib/vault-status/narrative-mirror.mjs +31 -7
- package/scripts/lib/vault-yaml.mjs +118 -0
- package/scripts/lib/wave-transcript-tail.mjs +2 -2
- package/scripts/lib/worktree/lifecycle.mjs +153 -1
- package/scripts/lock-reaper.mjs +2 -1
- package/scripts/materialize-wave-scope.mjs +87 -4
- package/scripts/migrate-sessions-jsonl.mjs +2 -1
- package/scripts/migrate-vault-paths.mjs +2 -3
- package/scripts/release-session-lock.mjs +305 -0
- package/scripts/release.mjs +109 -39
- package/scripts/relocate-vault-corpus.mjs +2 -3
- package/scripts/repair-invalid-sessions.mjs +2 -2
- package/scripts/resolve-session-invocation.mjs +59 -0
- package/scripts/run-quality-gate.mjs +156 -17
- package/scripts/session-shape.mjs +2 -2
- package/scripts/site-numbers.mjs +35 -11
- package/scripts/sweep-expired-rules.mjs +227 -0
- package/scripts/validate-plugin.mjs +21 -0
- package/scripts/validate-wave-scope.mjs +32 -105
- package/scripts/vault-consolidate.mjs +2 -2
- package/scripts/vault-mirror.mjs +11 -4
- package/scripts/wave-scope-binding.mjs +2 -3
- package/skills/_shared/bootstrap-gate.md +1 -1
- package/skills/_shared/monitor-patterns.md +1 -1
- package/skills/_shared/platform-tools.md +23 -11
- package/skills/_shared/research-evidence.md +53 -0
- package/skills/_shared/state-ownership.md +3 -0
- package/skills/autopilot/SKILL.md +80 -11
- package/skills/bootstrap/SKILL.md +51 -1
- package/skills/brainstorm/SKILL.md +16 -0
- package/skills/claude-md-drift-check/SKILL.md +1 -1
- package/skills/claude-md-drift-check/checker.mjs +49 -11
- package/{commands/close.md → skills/close/SKILL.md} +9 -3
- package/skills/convergence-monitoring/README.md +8 -1
- package/skills/convergence-monitoring/SIGNALS.md +50 -6
- package/skills/convergence-monitoring/SKILL.md +15 -6
- package/skills/debug/SKILL.md +10 -0
- package/skills/discovery/SKILL.md +24 -1
- package/skills/discovery/probes-session.md +2 -2
- package/skills/dispatcher/SKILL.md +38 -7
- package/skills/eli5/SKILL.md +11 -0
- package/skills/eval/SKILL.md +52 -23
- package/skills/eval/rubric-v1.md +1 -0
- package/skills/eval/rubric-v2.md +457 -0
- package/skills/evolve/SKILL.md +9 -2
- package/skills/evolve/references/evolve-dialectic-mode.md +46 -25
- package/skills/gitlab-ops/SKILL.md +3 -2
- package/{commands/go.md → skills/go/SKILL.md} +9 -1
- package/skills/grill/SKILL.md +19 -0
- package/{commands/harness-audit.md → skills/harness-audit/SKILL.md} +7 -2
- package/skills/hook-development/SKILL.md +46 -41
- package/skills/memory-cleanup/SKILL.md +7 -0
- package/skills/npm-publish/SKILL.md +2 -2
- package/skills/persona-panel/SKILL.md +56 -1
- package/skills/persona-panel/persona-format.md +1 -1
- package/skills/plan/SKILL.md +28 -1
- package/{commands/portfolio.md → skills/portfolio/SKILL.md} +8 -2
- package/skills/reconcile/SKILL.md +21 -0
- package/{commands/release.md → skills/release/SKILL.md} +16 -2
- package/skills/repo-audit/SKILL.md +7 -0
- package/skills/session-end/SKILL.md +13 -16
- package/skills/session-end/discovery-scan.md +1 -1
- package/skills/session-end/phase-3-6-tail.md +55 -9
- package/skills/session-end/plan-verification.md +2 -2
- package/skills/session-end/references/phase-5-issue-cleanup.md +9 -14
- package/skills/session-end/session-metrics-write.md +10 -0
- package/skills/session-plan/SKILL.md +18 -6
- package/skills/session-plan/references/session-plan-task-classification.md +2 -2
- package/skills/session-start/SKILL.md +5 -4
- package/skills/session-start/phase-8-5-express-path.md +6 -6
- package/skills/session-start/references/phase-1-5-session-continuity.md +1 -1
- package/skills/session-start/references/phase-2-7-portfolio-snapshot.md +1 -1
- package/skills/session-start/references/phase-4-ssot-environment-check.md +6 -4
- package/skills/spinout/SKILL.md +12 -1
- package/skills/sunset-review/SKILL.md +13 -0
- package/{commands/test.md → skills/test/SKILL.md} +10 -4
- package/skills/ux-grill/SKILL.md +20 -2
- package/skills/wave-executor/SKILL.md +14 -7
- package/skills/wave-executor/circuit-breaker.md +2 -0
- package/skills/wave-executor/references/wave-executor-state-init.md +18 -4
- package/skills/wave-executor/references/wave-loop-dispatch.md +5 -2
- package/skills/wave-executor/references/wave-loop-review.md +17 -1
- package/commands/autopilot.md +0 -80
- package/commands/bootstrap.md +0 -56
- package/commands/brainstorm.md +0 -48
- package/commands/debug.md +0 -36
- package/commands/discovery.md +0 -32
- package/commands/dispatcher.md +0 -59
- package/commands/eli5.md +0 -33
- package/commands/eval.md +0 -28
- package/commands/evolve.md +0 -10
- package/commands/grill.md +0 -45
- package/commands/memory-cleanup.md +0 -26
- package/commands/persona-panel.md +0 -121
- package/commands/plan.md +0 -15
- package/commands/reconcile.md +0 -23
- package/commands/repo-audit.md +0 -24
- package/commands/spinout.md +0 -15
- package/commands/sunset-review.md +0 -27
- package/commands/ux-grill.md +0 -51
|
@@ -49,7 +49,7 @@ const SENTINEL_BEGIN_RE = new RegExp(`<!--\\s*BEGIN\\s+MANAGED:\\s*(${SECTION_NA
|
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
51
|
* @typedef {Object} Conflict
|
|
52
|
-
* @property {'duplicate-section' | 'orphan-begin'} type
|
|
52
|
+
* @property {'duplicate-section' | 'orphan-begin' | 'unmapped-preamble' | 'multi-heading-region'} type
|
|
53
53
|
* @property {string} [name] — section name (for duplicate-section and orphan-begin)
|
|
54
54
|
*/
|
|
55
55
|
|
|
@@ -317,8 +317,14 @@ function escapeRegex(s) {
|
|
|
317
317
|
// the two, so `/evolve dialectic --apply` could not complete (#1310, correcting
|
|
318
318
|
// #1303 point 3 — the signatures line up, the seam did not).
|
|
319
319
|
//
|
|
320
|
-
// The mapping is DERIVED, not invented:
|
|
321
|
-
//
|
|
320
|
+
// The mapping is DERIVED, not invented: a managed region wrapping exactly one
|
|
321
|
+
// `## ` heading makes that heading the section unit. A region wrapping SEVERAL
|
|
322
|
+
// headings cannot be addressed per heading without splitting the region (a
|
|
323
|
+
// storage-format change), so it is fail-closed (#1380): `deriveManagedUpdates`
|
|
324
|
+
// never targets it, and every proposed heading that lives inside it is skipped
|
|
325
|
+
// — neither replaced (which would delete its sibling headings' hand text) nor
|
|
326
|
+
// appended (which would duplicate the heading) — and reported as a
|
|
327
|
+
// `multi-heading-region` conflict by `mergeDerivedBody`. Existing
|
|
322
328
|
// names are read back out of the card rather than re-slugified, because the live
|
|
323
329
|
// names are NOT a pure function of their headings — measured 2026-09-11 in
|
|
324
330
|
// `.orchestrator/peers/AGENT.md`: "Guard and protocol-migration discipline" →
|
|
@@ -359,6 +365,9 @@ function slugifyHeading(heading) {
|
|
|
359
365
|
* • Text BEFORE the first `## ` heading → returned as `preamble`. It is NOT
|
|
360
366
|
* written into any section (it has no sentinel to own it); `mergeDerivedBody`
|
|
361
367
|
* surfaces it as an `unmapped-preamble` conflict so a caller cannot miss it.
|
|
368
|
+
* • Heading that lives inside an existing managed region wrapping MORE than one
|
|
369
|
+
* `## ` heading → SKIPPED (not in `managedUpdates`, not in `mapping`) and
|
|
370
|
+
* listed in `skippedRegions`; that region is never a target (#1380).
|
|
362
371
|
* • Content under `###`+ headings stays inside its parent `##` section.
|
|
363
372
|
* • A proposed body that already carries BEGIN/END sentinels keeps them inside
|
|
364
373
|
* the section content — it is the deriver's job not to emit them (see
|
|
@@ -370,7 +379,8 @@ function slugifyHeading(heading) {
|
|
|
370
379
|
* @param {string} [existingBody] — the on-disk body, for existing-name lookup
|
|
371
380
|
* @returns {{ managedUpdates: Record<string,string>,
|
|
372
381
|
* mapping: Array<{heading: string, section: string, origin: 'existing'|'new'}>,
|
|
373
|
-
* preamble: string
|
|
382
|
+
* preamble: string,
|
|
383
|
+
* skippedRegions: Array<{region: string, headings: string[], skipped: string[]}> }}
|
|
374
384
|
*/
|
|
375
385
|
export function deriveManagedUpdates(proposedBody, existingBody = '') {
|
|
376
386
|
if (typeof proposedBody !== 'string') {
|
|
@@ -383,13 +393,25 @@ export function deriveManagedUpdates(proposedBody, existingBody = '') {
|
|
|
383
393
|
// heading-key → existing section name, read out of the live card
|
|
384
394
|
const existingByHeading = new Map();
|
|
385
395
|
const existingNames = new Set();
|
|
396
|
+
// Fail-closed bookkeeping for regions wrapping more than one `## ` heading (#1380).
|
|
397
|
+
/** @type {Map<string, {region: string, headings: string[], skipped: string[]}>} */
|
|
398
|
+
const multiHeading = new Map();
|
|
399
|
+
const multiHeadingByKey = new Map();
|
|
386
400
|
if (existingBody.length > 0) {
|
|
387
401
|
for (const s of parseSections(existingBody).sections) {
|
|
388
402
|
if (s.type !== 'managed') continue;
|
|
389
403
|
existingNames.add(s.name);
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
404
|
+
H2_RE.lastIndex = 0;
|
|
405
|
+
const regionHeads = [...s.content.matchAll(H2_RE)].map(h => h[1]);
|
|
406
|
+
if (regionHeads.length > 1) {
|
|
407
|
+
const entry = multiHeading.get(s.name) ?? { region: s.name, headings: [], skipped: [] };
|
|
408
|
+
entry.headings.push(...regionHeads);
|
|
409
|
+
multiHeading.set(s.name, entry);
|
|
410
|
+
for (const h of regionHeads) multiHeadingByKey.set(headingKey(h), entry);
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
if (regionHeads.length === 1 && !existingByHeading.has(headingKey(regionHeads[0]))) {
|
|
414
|
+
existingByHeading.set(headingKey(regionHeads[0]), s.name);
|
|
393
415
|
}
|
|
394
416
|
}
|
|
395
417
|
}
|
|
@@ -409,6 +431,12 @@ export function deriveManagedUpdates(proposedBody, existingBody = '') {
|
|
|
409
431
|
const end = i + 1 < heads.length ? heads[i + 1].index : proposedBody.length;
|
|
410
432
|
const content = proposedBody.slice(start, end).trim();
|
|
411
433
|
|
|
434
|
+
const blocked = multiHeadingByKey.get(headingKey(heading));
|
|
435
|
+
if (blocked !== undefined) {
|
|
436
|
+
blocked.skipped.push(heading);
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
|
|
412
440
|
const existing = existingByHeading.get(headingKey(heading));
|
|
413
441
|
let section;
|
|
414
442
|
let origin;
|
|
@@ -419,7 +447,9 @@ export function deriveManagedUpdates(proposedBody, existingBody = '') {
|
|
|
419
447
|
const base = slugifyHeading(heading);
|
|
420
448
|
let candidate = base;
|
|
421
449
|
let n = 2;
|
|
422
|
-
|
|
450
|
+
// A multi-heading region is never a target — not even via a slug that
|
|
451
|
+
// happens to equal its name.
|
|
452
|
+
while (used.has(candidate) || multiHeading.has(candidate)) {
|
|
423
453
|
candidate = `${base}-${n++}`;
|
|
424
454
|
}
|
|
425
455
|
section = candidate;
|
|
@@ -431,7 +461,8 @@ export function deriveManagedUpdates(proposedBody, existingBody = '') {
|
|
|
431
461
|
mapping.push({ heading, section, origin });
|
|
432
462
|
}
|
|
433
463
|
|
|
434
|
-
|
|
464
|
+
const skippedRegions = [...multiHeading.values()].filter(e => e.skipped.length > 0);
|
|
465
|
+
return { managedUpdates, mapping, preamble, skippedRegions };
|
|
435
466
|
}
|
|
436
467
|
|
|
437
468
|
/**
|
|
@@ -439,13 +470,20 @@ export function deriveManagedUpdates(proposedBody, existingBody = '') {
|
|
|
439
470
|
* This is the function `/evolve dialectic --apply` calls; `mergePeerCard` stays
|
|
440
471
|
* the section-map primitive its existing callers already use.
|
|
441
472
|
*
|
|
473
|
+
* A managed region wrapping several `## ` headings is left byte-unchanged; each
|
|
474
|
+
* skipped proposed heading surfaces as a
|
|
475
|
+
* `{ type: 'multi-heading-region', region, headings, skipped }` conflict (#1380).
|
|
476
|
+
*
|
|
442
477
|
* @param {string} existingBody
|
|
443
478
|
* @param {string} proposedBody
|
|
444
479
|
* @returns {MergeResult & { mapping: Array<{heading: string, section: string, origin: 'existing'|'new'}>, preamble: string }}
|
|
445
480
|
*/
|
|
446
481
|
export function mergeDerivedBody(existingBody, proposedBody) {
|
|
447
|
-
const { managedUpdates, mapping, preamble } = deriveManagedUpdates(proposedBody, existingBody);
|
|
482
|
+
const { managedUpdates, mapping, preamble, skippedRegions } = deriveManagedUpdates(proposedBody, existingBody);
|
|
448
483
|
const result = mergePeerCard(existingBody, managedUpdates);
|
|
484
|
+
for (const { region, headings, skipped } of skippedRegions) {
|
|
485
|
+
result.conflicts.push({ type: 'multi-heading-region', region, headings, skipped });
|
|
486
|
+
}
|
|
449
487
|
if (preamble.length > 0) {
|
|
450
488
|
result.conflicts.push({ type: 'unmapped-preamble', content: preamble });
|
|
451
489
|
}
|
|
@@ -104,11 +104,11 @@ async function readOneCard(absPath, now) {
|
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
const parsed = parseStateMd(content);
|
|
107
|
+
const parsed = parseStateMd(foldMultilineLists(content));
|
|
108
108
|
if (parsed === null) {
|
|
109
109
|
return {
|
|
110
110
|
frontmatter: null,
|
|
111
|
-
body: content,
|
|
111
|
+
body: stripFrontmatterBlock(content),
|
|
112
112
|
stalenessDays: Infinity,
|
|
113
113
|
isStale: true,
|
|
114
114
|
validation: { ok: false, errors: ['no frontmatter or malformed YAML'] },
|
|
@@ -123,3 +123,79 @@ async function readOneCard(absPath, now) {
|
|
|
123
123
|
|
|
124
124
|
return { frontmatter, body, stalenessDays, isStale, validation };
|
|
125
125
|
}
|
|
126
|
+
|
|
127
|
+
// `---\n<frontmatter>\n---\n` at the very start — same shape `parseStateMd` matches.
|
|
128
|
+
const FRONTMATTER_BLOCK_RE = /^---\r?\n([\s\S]*?)\r?\n---(\r?\n|$)/;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Fold multi-line list values of top-level frontmatter keys into the one-line
|
|
132
|
+
* flow form (`key: [a, b]`) that `parseStateMd` understands. Two shapes (#1380):
|
|
133
|
+
* • a multi-line flow list — `key:\n [\n "a",\n "b",\n ]` — which is how
|
|
134
|
+
* Prettier reformats the one-line list `writer.mjs` emits;
|
|
135
|
+
* • a block list — `key:\n - a\n - b` — as a hand edit would write it.
|
|
136
|
+
* Done here, not in the shared STATE.md parser: its mutators rely on `null` for
|
|
137
|
+
* shapes it does not understand. A block list whose items are mappings
|
|
138
|
+
* (`- name: x`) is left untouched — that is the parser's own block-seq form.
|
|
139
|
+
* Content outside the frontmatter block is never modified.
|
|
140
|
+
*
|
|
141
|
+
* @param {string} content — full file content
|
|
142
|
+
* @returns {string}
|
|
143
|
+
*/
|
|
144
|
+
function foldMultilineLists(content) {
|
|
145
|
+
const m = FRONTMATTER_BLOCK_RE.exec(content);
|
|
146
|
+
if (!m) return content;
|
|
147
|
+
const lines = m[1].split(/\r?\n/);
|
|
148
|
+
const out = [];
|
|
149
|
+
for (let i = 0; i < lines.length; i++) {
|
|
150
|
+
const key = /^([\w-]+):\s*$/.exec(lines[i]);
|
|
151
|
+
const next = lines[i + 1];
|
|
152
|
+
if (!key || next === undefined || !/^\s+\S/.test(next)) {
|
|
153
|
+
out.push(lines[i]);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (next.trim().startsWith('[')) {
|
|
157
|
+
let j = i + 1;
|
|
158
|
+
const parts = [];
|
|
159
|
+
while (j < lines.length && /^\s+\S/.test(lines[j])) {
|
|
160
|
+
parts.push(lines[j].trim());
|
|
161
|
+
if (lines[j].trim().endsWith(']')) break;
|
|
162
|
+
j++;
|
|
163
|
+
}
|
|
164
|
+
if (j < lines.length && lines[j].trim().endsWith(']')) {
|
|
165
|
+
const inner = parts.join(' ').slice(1, -1).trim().replace(/,\s*$/, '');
|
|
166
|
+
out.push(`${key[1]}: [${inner.replace(/\s*,\s*/g, ', ')}]`);
|
|
167
|
+
i = j;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
} else {
|
|
171
|
+
let j = i + 1;
|
|
172
|
+
const items = [];
|
|
173
|
+
while (j < lines.length && /^\s+-\s+\S/.test(lines[j])) {
|
|
174
|
+
items.push(lines[j].trim().slice(1).trim());
|
|
175
|
+
j++;
|
|
176
|
+
}
|
|
177
|
+
const endsBlock = j >= lines.length || !/^\s/.test(lines[j]);
|
|
178
|
+
if (items.length > 0 && endsBlock && !items.some((it) => /^[\w-]+:(\s|$)/.test(it))) {
|
|
179
|
+
out.push(`${key[1]}: [${items.join(', ')}]`);
|
|
180
|
+
i = j - 1;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
out.push(lines[i]);
|
|
185
|
+
}
|
|
186
|
+
return `---\n${out.join('\n')}\n---${m[2]}${content.slice(m[0].length)}`;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Remove a leading `---…---` frontmatter block so an unparseable one never reaches
|
|
191
|
+
* a body consumer (the dialectic deriver payload) as if it were markdown (#1380).
|
|
192
|
+
*
|
|
193
|
+
* @param {string} content
|
|
194
|
+
* @returns {string}
|
|
195
|
+
*/
|
|
196
|
+
function stripFrontmatterBlock(content) {
|
|
197
|
+
const m = FRONTMATTER_BLOCK_RE.exec(content);
|
|
198
|
+
if (!m) return content;
|
|
199
|
+
const rest = content.slice(m[0].length);
|
|
200
|
+
return rest.startsWith('\n') ? rest.slice(1) : rest;
|
|
201
|
+
}
|
|
@@ -68,6 +68,7 @@ import { readLock, isLockLive, LOCK_PATH } from './session-lock.mjs';
|
|
|
68
68
|
import { checkPeerStateMd } from './state-md-peer-guard.mjs';
|
|
69
69
|
import { listWorktreesChecked } from './worktree/listing.mjs';
|
|
70
70
|
import { parseSessionId } from './session-id.mjs';
|
|
71
|
+
import { isMainModule } from './is-main-module.mjs';
|
|
71
72
|
|
|
72
73
|
/** Closed enum of provenance sources. */
|
|
73
74
|
const SOURCE_DISCOVERED = 'discovered'; // lock + registry unified (irreversibly merged upstream)
|
|
@@ -901,11 +902,7 @@ async function _cliMain(argv) {
|
|
|
901
902
|
}
|
|
902
903
|
|
|
903
904
|
const __filename = fileURLToPath(import.meta.url);
|
|
904
|
-
const _isCliMain =
|
|
905
|
-
typeof process !== 'undefined'
|
|
906
|
-
&& process.argv[1] !== null
|
|
907
|
-
&& process.argv[1] !== undefined
|
|
908
|
-
&& path.resolve(process.argv[1]) === path.resolve(__filename);
|
|
905
|
+
const _isCliMain =isMainModule(import.meta.url);
|
|
909
906
|
|
|
910
907
|
// Called WITHOUT `await` on purpose: a top-level await would make this module
|
|
911
908
|
// async for every importer, and `_cliMain` cannot reject (all paths are caught
|
|
@@ -32,6 +32,7 @@ import path from 'node:path';
|
|
|
32
32
|
import { parseArgs } from 'node:util';
|
|
33
33
|
import { getProfile, loadProfiles, validateProfile } from '../profiles/registry.mjs';
|
|
34
34
|
import { validatePathInsideProject } from '../path-utils.mjs';
|
|
35
|
+
import { isMainModule } from '../is-main-module.mjs';
|
|
35
36
|
|
|
36
37
|
// ---------------------------------------------------------------------------
|
|
37
38
|
// Path resolution helper
|
|
@@ -349,7 +350,7 @@ export default async function run(opts = {}) {
|
|
|
349
350
|
// CLI entry-point
|
|
350
351
|
// ---------------------------------------------------------------------------
|
|
351
352
|
|
|
352
|
-
if (import.meta.url
|
|
353
|
+
if (isMainModule(import.meta.url)) {
|
|
353
354
|
run().catch((err) => {
|
|
354
355
|
console.error(`runner: unhandled error — ${err.message}`);
|
|
355
356
|
process.exit(2);
|