session-orchestrator 5.2.0 → 5.4.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 +5 -1
- package/.agents/skills/autopilot/agents/openai.yaml +5 -0
- package/.agents/skills/bootstrap/SKILL.md +5 -1
- package/.agents/skills/bootstrap/agents/openai.yaml +5 -0
- package/.agents/skills/brainstorm/SKILL.md +5 -1
- package/.agents/skills/brainstorm/agents/openai.yaml +5 -0
- package/.agents/skills/claude-md-drift-check/SKILL.md +4 -2
- package/.agents/skills/close/SKILL.md +5 -1
- package/.agents/skills/close/agents/openai.yaml +5 -0
- package/.agents/skills/convergence-monitoring/SKILL.md +4 -2
- package/.agents/skills/debug/SKILL.md +5 -1
- package/.agents/skills/debug/agents/openai.yaml +5 -0
- package/.agents/skills/discovery/SKILL.md +5 -1
- package/.agents/skills/discovery/agents/openai.yaml +5 -0
- package/.agents/skills/dispatcher/SKILL.md +5 -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 +5 -1
- package/.agents/skills/eli5/agents/openai.yaml +5 -0
- package/.agents/skills/eval/SKILL.md +6 -2
- package/.agents/skills/eval/agents/openai.yaml +5 -0
- package/.agents/skills/evolve/SKILL.md +6 -2
- 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 +5 -1
- package/.agents/skills/go/agents/openai.yaml +5 -0
- package/.agents/skills/grill/SKILL.md +5 -1
- package/.agents/skills/grill/agents/openai.yaml +5 -0
- package/.agents/skills/harness-audit/SKILL.md +5 -1
- 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 +5 -1
- package/.agents/skills/memory-cleanup/agents/openai.yaml +5 -0
- package/.agents/skills/mode-selector/SKILL.md +3 -1
- package/.agents/skills/navigator/SKILL.md +22 -0
- package/.agents/skills/navigator/agents/openai.yaml +5 -0
- 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 +5 -1
- package/.agents/skills/persona-panel/agents/openai.yaml +5 -0
- package/.agents/skills/plan/SKILL.md +5 -1
- package/.agents/skills/plan/agents/openai.yaml +5 -0
- package/.agents/skills/playwright-driver/SKILL.md +3 -1
- package/.agents/skills/portfolio/SKILL.md +5 -1
- package/.agents/skills/portfolio/agents/openai.yaml +5 -0
- package/.agents/skills/quality-gates/SKILL.md +3 -1
- package/.agents/skills/reconcile/SKILL.md +5 -1
- package/.agents/skills/reconcile/agents/openai.yaml +5 -0
- package/.agents/skills/release/SKILL.md +5 -1
- 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 +5 -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 +5 -1
- package/.agents/skills/spinout/agents/openai.yaml +5 -0
- package/.agents/skills/sunset-review/SKILL.md +5 -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 +5 -1
- package/.agents/skills/test/agents/openai.yaml +5 -0
- package/.agents/skills/test-audit/SKILL.md +21 -0
- package/.agents/skills/test-audit/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 +5 -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/claude-md-drift-check/SKILL.md +1 -1
- package/.codex-plugin/skills/convergence-monitoring/SKILL.md +1 -3
- package/.codex-plugin/skills/eval/SKILL.md +1 -1
- package/.codex-plugin/skills/evolve/SKILL.md +1 -1
- package/.codex-plugin/skills/navigator/SKILL.md +22 -0
- package/.codex-plugin/skills/{convergence-monitoring → navigator}/agents/openai.yaml +2 -2
- package/.codex-plugin/skills/npm-publish/SKILL.md +1 -3
- package/.codex-plugin/skills/session/SKILL.md +1 -1
- package/.codex-plugin/skills/test-audit/SKILL.md +21 -0
- package/.codex-plugin/skills/{npm-publish → test-audit}/agents/openai.yaml +1 -1
- package/.cursor/commands/eval.md +1 -1
- package/.cursor/commands/navigator.md +15 -0
- package/.cursor/commands/session.md +1 -1
- package/.cursor/commands/test-audit.md +14 -0
- package/.cursor/rules/000-session-orchestrator.mdc +0 -2
- package/.cursor/rules/050-plan.mdc +1 -1
- package/.cursor/rules/060-evolve.mdc +27 -12
- package/.cursor/skills/claude-md-drift-check/SKILL.md +1 -1
- package/.cursor/skills/convergence-monitoring/SKILL.md +1 -0
- package/.cursor/skills/eval/SKILL.md +1 -1
- package/.cursor/skills/navigator/SKILL.md +13 -0
- package/.cursor/skills/npm-publish/SKILL.md +1 -0
- package/.cursor/skills/test-audit/SKILL.md +12 -0
- package/.cursor-plugin/plugin.json +1 -1
- package/.orchestrator/policy/blocked-commands.json +12 -3
- package/AGENTS.md +9 -30
- package/CHANGELOG.md +206 -0
- package/README.md +13 -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 +7 -3
- package/docs/agent-authoring.md +2 -2
- package/docs/baseline.md +22 -7
- package/docs/ci-setup.md +57 -4
- package/docs/codex-setup.md +14 -2
- package/docs/components.md +12 -10
- package/docs/events-schema.md +65 -15
- package/docs/persona-panel.md +5 -4
- package/docs/rule-authoring.md +84 -17
- package/docs/scope-collision-guard.md +26 -4
- package/docs/session-config-reference.md +154 -12
- package/docs/session-config-template.md +41 -3
- package/docs/telemetry.md +2 -0
- package/hooks/_lib/hook-import-set.json +87 -6
- package/hooks/_lib/subagent-transcript.mjs +582 -31
- 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-cursor.json +5 -0
- package/hooks/hooks-pi.json +5 -0
- package/hooks/hooks.json +6 -1
- package/hooks/loop-guard.mjs +11 -3
- package/hooks/on-session-end.mjs +58 -23
- package/hooks/on-session-start.mjs +101 -11
- package/hooks/on-stop.mjs +170 -22
- package/hooks/operator-steer.mjs +11 -3
- package/hooks/post-bash-issue-budget-refund.mjs +18 -8
- package/hooks/post-bash-write-verify.mjs +3 -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 +202 -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 +15 -2
- package/hooks/pre-bash-destructive-guard.mjs +80 -9
- package/hooks/pre-bash-issue-budget.mjs +16 -11
- package/hooks/pre-bash-memory-propose-audit.mjs +137 -56
- package/hooks/pre-bash-sessions-ledger-guard.mjs +419 -22
- package/hooks/pre-bash-staging-fence.mjs +335 -31
- package/hooks/pre-bash-templates-first.mjs +19 -14
- package/hooks/pre-edit-sessions-ledger-guard.mjs +162 -0
- package/hooks/pre-task-scope-disjoint.mjs +792 -74
- package/hooks/subagent-telemetry.mjs +111 -38
- 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 +3 -3
- package/pi/prompts/eval.md +1 -1
- package/pi/prompts/navigator.md +12 -0
- package/pi/prompts/session.md +1 -1
- package/pi/prompts/test-audit.md +12 -0
- package/rules/README.md +7 -2
- package/rules/_index.md +3 -3
- package/rules/always-on/bash-harness-pitfalls.md +7 -1
- package/rules/opt-in-domain/prompt-caching.md +6 -2
- package/rules/opt-in-stack/backend-data.md +10 -2
- package/rules/opt-in-stack/backend.md +10 -4
- package/rules/opt-in-stack/frontend.md +7 -2
- package/rules/opt-in-stack/security-web.md +10 -4
- package/rules/opt-in-stack/swift.md +6 -2
- package/scripts/apply-session-learnings.mjs +492 -0
- package/scripts/archive-closed-prds.mjs +2 -1
- package/scripts/autopilot.mjs +70 -53
- package/scripts/backfill-abandoned-sessions.mjs +118 -16
- package/scripts/baseline-archetypes.mjs +1 -1
- package/scripts/check-package-manager.mjs +62 -5
- package/scripts/check-sessions-integrity.mjs +300 -0
- package/scripts/cursor-install.mjs +1 -4
- package/scripts/dialectic-deriver.mjs +50 -13
- package/scripts/emit-session.mjs +371 -31
- package/scripts/eval-session.mjs +65 -3
- package/scripts/export-hw-learnings.mjs +22 -3
- package/scripts/fleet-checkin.mjs +147 -0
- package/scripts/generate-agents-skills.mjs +102 -29
- package/scripts/generate-cursor-adapter.mjs +61 -16
- package/scripts/lib/agent-frontmatter.mjs +3 -3
- 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/auto-dream.mjs +7 -6
- package/scripts/lib/autopilot/flags.mjs +18 -2
- package/scripts/lib/autopilot/kill-switches.mjs +6 -3
- package/scripts/lib/autopilot/loop.mjs +19 -2
- package/scripts/lib/autopilot/stall-sampler.mjs +80 -23
- package/scripts/lib/baseline-archetypes.mjs +41 -22
- package/scripts/lib/ci-status-banner.mjs +376 -16
- package/scripts/lib/command-blocker.mjs +275 -28
- package/scripts/lib/config/dialectic.mjs +12 -3
- package/scripts/lib/config/gate.mjs +74 -0
- package/scripts/lib/config/host-paths.mjs +79 -0
- package/scripts/lib/config/persona-gate-wave.mjs +3 -3
- package/scripts/lib/config/reaper.mjs +163 -0
- package/scripts/lib/config-schema.mjs +13 -0
- package/scripts/lib/config.mjs +85 -10
- package/scripts/lib/convergence-monitor.mjs +74 -11
- package/scripts/lib/ecosystem-health.mjs +11 -0
- 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 +545 -7
- package/scripts/lib/fleet-protocol.mjs +270 -0
- package/scripts/lib/frontmatter-guard.mjs +21 -10
- package/scripts/lib/gates/gate-baseline.mjs +40 -5
- package/scripts/lib/gates/gate-full.mjs +35 -5
- package/scripts/lib/gates/gate-helpers.mjs +336 -23
- package/scripts/lib/gates/gate-incremental.mjs +49 -23
- package/scripts/lib/gates/gate-per-file.mjs +42 -8
- package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +6 -1
- package/scripts/lib/instruction-budget-guard.mjs +208 -8
- package/scripts/lib/io.mjs +42 -8
- 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/learnings/expiry-sweep.mjs +34 -3
- package/scripts/lib/learnings/io.mjs +154 -26
- package/scripts/lib/learnings/schema.mjs +163 -15
- package/scripts/lib/learnings/sizing-subject.mjs +2 -2
- package/scripts/lib/maintenance-due-banner.mjs +53 -88
- package/scripts/lib/memory-proposals/schema.mjs +11 -5
- package/scripts/lib/named-baseline-resolver.mjs +53 -28
- package/scripts/lib/named-vault-resolver.mjs +104 -5
- package/scripts/lib/orphan-reaper/defaults.mjs +41 -0
- package/scripts/lib/orphan-reaper/ps-snapshot.mjs +181 -0
- package/scripts/lib/orphan-reaper/reaper-audit.mjs +291 -0
- package/scripts/lib/orphan-reaper/reaper-decide.mjs +395 -0
- package/scripts/lib/orphan-reaper/scan-throttle.mjs +92 -0
- package/scripts/lib/orphan-reaper/scan.mjs +506 -0
- package/scripts/lib/orphan-reaper.mjs +316 -0
- package/scripts/lib/owner-yaml.mjs +104 -6
- package/scripts/lib/peer-cards/merger.mjs +48 -10
- package/scripts/lib/peer-cards/reader.mjs +78 -2
- package/scripts/lib/persona-panel/catalog-loader.mjs +1 -1
- package/scripts/lib/process-group.mjs +950 -0
- package/scripts/lib/project-hygiene.mjs +21 -1
- package/scripts/lib/quality-gate.mjs +152 -33
- package/scripts/lib/reconcile/backlog.mjs +368 -0
- package/scripts/lib/reconcile/engine.mjs +55 -188
- package/scripts/lib/reconcile/rule-expiry-sweep.mjs +302 -60
- 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/resource-probe.mjs +1 -1
- package/scripts/lib/rule-loader.mjs +141 -74
- package/scripts/lib/rules-sync.mjs +27 -12
- package/scripts/lib/scope-baseline.mjs +3 -4
- package/scripts/lib/scope-echo.mjs +39 -2
- package/scripts/lib/scope-gate.mjs +605 -1
- package/scripts/lib/session-close-backfill.mjs +33 -6
- package/scripts/lib/session-id.mjs +9 -20
- package/scripts/lib/session-invocation.mjs +20 -0
- package/scripts/lib/session-record-repair.mjs +183 -26
- package/scripts/lib/session-registry.mjs +27 -2
- package/scripts/lib/session-schema/constants.mjs +56 -2
- package/scripts/lib/session-schema/normalizer.mjs +56 -4
- package/scripts/lib/session-schema/validator.mjs +28 -1
- package/scripts/lib/session-schema.mjs +8 -3
- package/scripts/lib/session-start-probes.mjs +95 -10
- package/scripts/lib/session-token-rollup.mjs +245 -52
- package/scripts/lib/sessions-canonical.mjs +118 -4
- package/scripts/lib/sessions-integrity-banner.mjs +7 -1
- package/scripts/lib/sessions-staleness-banner.mjs +193 -51
- package/scripts/lib/sh-quote.mjs +29 -0
- 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/subagents-schema.mjs +30 -3
- package/scripts/lib/tail-window.mjs +56 -0
- package/scripts/lib/telemetry/pricing.mjs +118 -71
- 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 +140 -23
- package/scripts/lib/tmux-layout/layouts.mjs +1 -11
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +72 -13
- package/scripts/lib/tmux-layout/tmux-shell.mjs +2 -11
- package/scripts/lib/user-invocable-skills.mjs +23 -3
- package/scripts/lib/ux-grill/reconcile.mjs +48 -22
- package/scripts/lib/validate/check-agents-skills.mjs +26 -15
- package/scripts/lib/validate/check-agents.mjs +1 -1
- package/scripts/lib/validate/check-cursor-adapter.mjs +1 -0
- package/scripts/lib/validate/check-entry-guard.mjs +13 -50
- package/scripts/lib/validate/check-hook-entry-guards.mjs +636 -0
- package/scripts/lib/validate/check-hooks-symmetry.mjs +5 -0
- package/scripts/lib/validate/check-learnings-shell-writes.mjs +214 -0
- 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 +9 -1
- package/scripts/lib/validate/check-skill-script-paths.mjs +239 -27
- package/scripts/lib/validate/check-test-git-config-target.mjs +24 -34
- package/scripts/lib/validate/check-test-value-bans.mjs +87 -14
- package/scripts/lib/validate/check-unicode-safety.mjs +1 -0
- package/scripts/lib/validate/check-untracked-test-deps.mjs +7 -102
- package/scripts/lib/validate/check-unwired-features.mjs +130 -27
- package/scripts/lib/validate/check-validator-registration.mjs +34 -10
- package/scripts/lib/validate/confidential-names.mjs +10 -0
- package/scripts/lib/validate-vendored-rules.mjs +210 -84
- 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-mirror/telemetry.mjs +8 -1
- package/scripts/lib/vault-status/board-writer.mjs +48 -11
- package/scripts/lib/vault-status/narrative-mirror.mjs +71 -16
- package/scripts/lib/vault-yaml.mjs +118 -0
- package/scripts/lib/wave-executor/dispatch-common.mjs +10 -18
- package/scripts/lib/wave-executor/foreign-dispatch.mjs +1 -1
- package/scripts/lib/wave-executor/remote-dispatch.mjs +1 -1
- package/scripts/lib/wave-resource-gate.mjs +34 -8
- package/scripts/lib/worktree/lifecycle.mjs +153 -1
- package/scripts/memory-propose.mjs +18 -5
- package/scripts/release-session-lock.mjs +306 -0
- package/scripts/release.mjs +40 -8
- package/scripts/repair-invalid-sessions.mjs +37 -4
- package/scripts/resolve-session-invocation.mjs +59 -0
- package/scripts/run-migrate-v2-cross-repo.mjs +158 -30
- package/scripts/run-quality-gate.mjs +357 -197
- package/scripts/site-numbers.mjs +163 -5
- package/scripts/sweep-expired-learnings.mjs +56 -5
- package/scripts/sweep-expired-rules.mjs +16 -4
- package/scripts/validate-plugin.mjs +19 -0
- package/scripts/validate-wave-scope.mjs +32 -105
- package/scripts/vault-integration-watcher.mjs +2 -1
- package/scripts/vault-mirror.mjs +81 -47
- package/scripts/wave-scope-binding.mjs +2 -1
- package/skills/_shared/config-reading.md +3 -3
- package/skills/_shared/fleet-protocol.md +131 -0
- package/skills/_shared/platform-tools.md +23 -11
- package/skills/_shared/state-ownership.md +5 -0
- package/skills/autopilot/SKILL.md +47 -18
- package/skills/bootstrap/SKILL.md +1 -1
- package/skills/bootstrap/_shared-template.md +1 -1
- package/skills/bootstrap/fast-template.md +1 -1
- package/skills/bootstrap/private-contract.md +2 -1
- package/skills/bootstrap/public-fallback.md +6 -3
- package/skills/bootstrap/references/bootstrap-retroactive-flow.md +2 -1
- package/skills/claude-md-drift-check/SKILL.md +10 -10
- package/skills/claude-md-drift-check/checker.mjs +26 -18
- 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/eval/SKILL.md +39 -24
- package/skills/eval/rubric-v1.md +1 -0
- package/skills/eval/rubric-v2.md +457 -0
- package/skills/evolve/SKILL.md +3 -3
- package/skills/evolve/references/evolve-analyze-mode.md +10 -6
- package/skills/evolve/references/evolve-dialectic-mode.md +42 -25
- package/skills/gitlab-ops/SKILL.md +3 -2
- package/skills/memory-cleanup/SKILL.md +1 -1
- package/skills/navigator/SKILL.md +193 -0
- package/skills/navigator/references/account-check.sh +87 -0
- package/skills/navigator/references/fleet-decisions.mjs +231 -0
- package/skills/navigator/references/slot-check.sh +114 -0
- package/skills/npm-publish/SKILL.md +1 -1
- package/skills/persona-panel/SKILL.md +2 -2
- package/skills/persona-panel/persona-format.md +2 -2
- package/skills/persona-panel/presets/designer-lens.md +1 -1
- package/skills/persona-panel/presets/engineer-lens.md +1 -1
- package/skills/persona-panel/presets/pm-lens.md +1 -1
- package/skills/plan/mode-retro.md +19 -4
- package/skills/quality-gates/SKILL.md +6 -4
- package/skills/reconcile/SKILL.md +11 -0
- package/skills/remote-offload/SKILL.md +4 -2
- package/skills/session-end/SKILL.md +13 -16
- package/skills/session-end/discovery-scan.md +1 -1
- package/skills/session-end/learning-patterns.md +22 -12
- package/skills/session-end/metrics-collection.md +5 -6
- package/skills/session-end/phase-3-6-tail.md +55 -9
- package/skills/session-end/references/phase-3-documentation-updates.md +2 -2
- package/skills/session-end/references/phase-4a-worktree-cleanup.md +2 -0
- package/skills/session-end/references/phase-5-issue-cleanup.md +9 -14
- package/skills/session-end/references/session-summary-template.md +1 -1
- package/skills/session-end/session-metrics-write.md +32 -60
- package/skills/session-plan/SKILL.md +17 -8
- package/skills/session-plan/references/session-plan-task-classification.md +2 -2
- package/skills/session-start/SKILL.md +6 -0
- package/skills/session-start/references/operations-contract.md +4 -0
- package/skills/session-start/references/phase-1-7-vault-status-board.md +1 -1
- package/skills/session-start/references/phase-4-ssot-environment-check.md +4 -3
- package/skills/test-audit/SKILL.md +152 -0
- package/skills/test-audit/references/campaign.md +111 -0
- package/skills/test-audit/references/mutate.sh +50 -0
- package/skills/ux-grill/SKILL.md +1 -1
- package/skills/wave-executor/SKILL.md +9 -5
- package/skills/wave-executor/circuit-breaker.md +2 -0
- package/skills/wave-executor/references/wave-executor-state-init.md +8 -3
- package/skills/wave-executor/references/wave-loop-dispatch.md +5 -2
- package/skills/wave-executor/references/wave-loop-review.md +3 -5
- package/templates/personas/README.md +5 -5
- package/templates/personas/accounting-compliance.v1.md +1 -1
- package/templates/personas/accounting-tax-advisor.v1.md +1 -1
- package/templates/personas/buyer-p1-cto.v1.md +1 -1
- package/templates/personas/buyer-p2-kanzlei.v1.md +1 -1
- package/templates/personas/buyer-p3-build.v1.md +1 -1
- package/templates/personas/buyer-p4-tech-veto.v1.md +1 -1
- package/templates/personas/buyer-p5-solo.v1.md +1 -1
- package/templates/personas/buyer-p6-ld.v1.md +1 -1
- package/templates/personas/klima-ai-expert.v1.md +1 -1
- package/templates/personas/klima-physicist.v1.md +1 -1
- package/.cursor/commands/convergence-monitoring.md +0 -13
- package/.cursor/commands/npm-publish.md +0 -13
- package/pi/prompts/convergence-monitoring.md +0 -11
- package/pi/prompts/npm-publish.md +0 -11
|
@@ -3,26 +3,37 @@
|
|
|
3
3
|
* Syncs canonical rules from the plugin's rules/ library into a consumer repo's .claude/rules/.
|
|
4
4
|
*
|
|
5
5
|
* Stdlib-only, cross-platform, no Zod, no third-party parsers. ESM module.
|
|
6
|
-
* Preserves local rules
|
|
6
|
+
* Preserves local rules — files carrying the plugin provenance header in
|
|
7
|
+
* neither accepted position (see `isPluginOwnedContent`).
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
10
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
10
11
|
import { join, basename, dirname, resolve } from 'node:path';
|
|
11
12
|
import { fileURLToPath } from 'node:url';
|
|
12
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
validateRuleContent,
|
|
15
|
+
scanVendoringLeaks,
|
|
16
|
+
isPluginOwnedContent,
|
|
17
|
+
} from './validate-vendored-rules.mjs';
|
|
13
18
|
import { isMainModule } from './is-main-module.mjs';
|
|
14
19
|
|
|
15
20
|
// The vendoring sanitizer (issue #1098) lives in validate-vendored-rules.mjs —
|
|
16
21
|
// it has that module's shape ("judge one rule file → findings") and its
|
|
17
22
|
// standalone CLI needs it too. Re-exported here so importers that predate the
|
|
18
23
|
// move (and this file's own tests) keep resolving it from rules-sync.mjs.
|
|
19
|
-
|
|
24
|
+
//
|
|
25
|
+
// isPluginOwnedContent (#1449) — the ownership predicate below — lives there
|
|
26
|
+
// for the same reason as PLUGIN_HEADER_PREFIX's copy: this module imports
|
|
27
|
+
// validate-vendored-rules.mjs, so defining it here and importing it back into
|
|
28
|
+
// the validator's provenance probe would make the two modules import each
|
|
29
|
+
// other. Re-exported so the ownership rule is reachable from the sync module.
|
|
30
|
+
export { scanVendoringLeaks, isPluginOwnedContent };
|
|
20
31
|
|
|
21
32
|
// Exported (issue #722 Epic A Wave 2) for external consumers (e.g. tests).
|
|
22
|
-
// NOT imported by validate-vendored-rules.mjs —
|
|
23
|
-
// validateRuleContent FROM
|
|
24
|
-
// importing this constant back would create a module-load cycle; it
|
|
25
|
-
// its own textually-identical copy instead.
|
|
33
|
+
// NOT imported by validate-vendored-rules.mjs — this module imports
|
|
34
|
+
// validateRuleContent FROM that file (see the pre-write gate below), so
|
|
35
|
+
// importing this constant back there would create a module-load cycle; it
|
|
36
|
+
// keeps its own textually-identical copy instead.
|
|
26
37
|
export const PLUGIN_HEADER_PREFIX = '<!-- source: session-orchestrator plugin';
|
|
27
38
|
|
|
28
39
|
/**
|
|
@@ -170,8 +181,9 @@ function escapeRegex(s) {
|
|
|
170
181
|
*
|
|
171
182
|
* When `validate` is true (the default — issue #722 Epic A Wave 2),
|
|
172
183
|
* validateRuleContent() runs as a pre-write gate on every source file before
|
|
173
|
-
* it is copied. A file with any error-severity violation (
|
|
174
|
-
* missing provenance header, unfilled placeholder) is
|
|
184
|
+
* it is copied. A file with any error-severity violation (frontmatter-not-at-top,
|
|
185
|
+
* globs-paths-mismatch, missing provenance header, unfilled placeholder) is
|
|
186
|
+
* recorded in `errors[]`
|
|
175
187
|
* and its write is skipped entirely — it is never added to
|
|
176
188
|
* written/skipped/preserved. Warn-severity violations (zero-match-globs,
|
|
177
189
|
* foreign-glob) do NOT block the write; they are collected into the
|
|
@@ -405,9 +417,12 @@ export function syncRules({
|
|
|
405
417
|
continue;
|
|
406
418
|
}
|
|
407
419
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
420
|
+
// Ownership accepts BOTH header positions (#1449): line 1 (the format
|
|
421
|
+
// every copy vendored before #1449 carries, frontmatter or not) and the
|
|
422
|
+
// first non-blank line after a line-1 frontmatter (the current format).
|
|
423
|
+
// So an old-format copy is rewritten into the new format below, never
|
|
424
|
+
// preserved; only a file with no header in either position is local.
|
|
425
|
+
if (!isPluginOwnedContent(targetContent)) {
|
|
411
426
|
preserved.push(fileName);
|
|
412
427
|
continue;
|
|
413
428
|
}
|
|
@@ -604,10 +604,9 @@ export function computeDrift({ repoRoot, threshold = 2.0 } = {}) {
|
|
|
604
604
|
? plannedFilesRaw
|
|
605
605
|
: 0;
|
|
606
606
|
|
|
607
|
-
//
|
|
608
|
-
//
|
|
609
|
-
//
|
|
610
|
-
// edited often enough that a pinned number goes stale, as this very comment did.
|
|
607
|
+
// Division-by-zero guard: a baseline that froze zero planned files (no declared
|
|
608
|
+
// file scope, or a non-numeric count coerced to 0 above) would otherwise yield
|
|
609
|
+
// Infinity or NaN; `max(plannedFiles, 1)` keeps the ratio finite and comparable.
|
|
611
610
|
const filesRatio = round2(actualFiles / Math.max(plannedFiles, 1));
|
|
612
611
|
const breached = filesRatio >= threshold;
|
|
613
612
|
|
|
@@ -21,6 +21,13 @@
|
|
|
21
21
|
* when the platform exposes a stable prompt-assembly boundary; at that point the
|
|
22
22
|
* digest can be computed against the real assembled prompt instead of echoed.
|
|
23
23
|
*
|
|
24
|
+
* CALLERS (#1298): the CLI modes run only from prose — `--instruction` in
|
|
25
|
+
* `skills/wave-executor/references/wave-loop-dispatch.md`, `--emit` and `--verify`
|
|
26
|
+
* in `wave-loop-review.md`. Ceiling: `check-unwired-features` S4 cannot notice both
|
|
27
|
+
* dropping that citation — it judges modules, not CLI modes, and reads this one wired
|
|
28
|
+
* as a CLI entrypoint AND via its hook importer (`scopeDigest`). Revisit on a third
|
|
29
|
+
* prose caller, or when the census learns to track prose-invoked CLI entrypoints.
|
|
30
|
+
*
|
|
24
31
|
* Pure + stdlib only. Nothing here throws on malformed input — a broken echo
|
|
25
32
|
* check must never change a wave's outcome.
|
|
26
33
|
*
|
|
@@ -34,6 +41,8 @@
|
|
|
34
41
|
* node scripts/lib/scope-echo.mjs --scope-file <path> --instruction
|
|
35
42
|
* node scripts/lib/scope-echo.mjs --scope-file <path> --report-file <path> \
|
|
36
43
|
* [--wave N --agent-id ID --emit]
|
|
44
|
+
* node scripts/lib/scope-echo.mjs --verify --wave <N> --state-dir <dir> \
|
|
45
|
+
* [--session <id> --events <path> --json --emit]
|
|
37
46
|
* node scripts/lib/scope-echo.mjs --help
|
|
38
47
|
*/
|
|
39
48
|
|
|
@@ -312,13 +321,22 @@ function parseJsonl(raw) {
|
|
|
312
321
|
* Digest every per-agent scope file of one wave — shape (a) of the two scope
|
|
313
322
|
* shapes (CLAUDE.md / AGENTS.md § allowedPaths).
|
|
314
323
|
*
|
|
324
|
+
* A file that cannot be read or parsed is the FILE-side counterpart of a
|
|
325
|
+
* truncated ledger line: skipping it silently makes a wave whose scope files are
|
|
326
|
+
* corrupt indistinguishable from one that was never injected (`digest-unknown` /
|
|
327
|
+
* `injection-missing`). The count therefore rides back on the returned Map as
|
|
328
|
+
* `malformedFiles` — an additive own property, so every existing consumer that
|
|
329
|
+
* only iterates the entries is unaffected. (A file that parses to a non-array or
|
|
330
|
+
* to an empty scope stays a silent skip: an empty scope is legitimate.)
|
|
331
|
+
*
|
|
315
332
|
* @param {string} stateDir
|
|
316
333
|
* @param {number} wave
|
|
317
334
|
* @param {{readDir?: typeof readdirSync, readFile?: typeof readFileSync}} [io]
|
|
318
|
-
* @returns {Map<string, string[]>} digest → agent ids (file basenames)
|
|
335
|
+
* @returns {Map<string, string[]> & {malformedFiles: number}} digest → agent ids (file basenames)
|
|
319
336
|
*/
|
|
320
337
|
export function digestScopeFiles(stateDir, wave, { readDir = readdirSync, readFile = readFileSync } = {}) {
|
|
321
338
|
const out = new Map();
|
|
339
|
+
out.malformedFiles = 0;
|
|
322
340
|
const dir = resolve(String(stateDir), 'filescopes', `wave-${wave}`);
|
|
323
341
|
let names;
|
|
324
342
|
try {
|
|
@@ -332,7 +350,10 @@ export function digestScopeFiles(stateDir, wave, { readDir = readdirSync, readFi
|
|
|
332
350
|
let parsed;
|
|
333
351
|
try {
|
|
334
352
|
parsed = JSON.parse(readFile(join(dir, file), 'utf8'));
|
|
335
|
-
} catch {
|
|
353
|
+
} catch {
|
|
354
|
+
out.malformedFiles += 1; // unreadable or unparseable — not nothing
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
336
357
|
if (!Array.isArray(parsed) || normalizeScopePaths(parsed).length === 0) continue;
|
|
337
358
|
const digest = scopeDigest(parsed);
|
|
338
359
|
const ids = out.get(digest) ?? [];
|
|
@@ -372,6 +393,12 @@ export function digestScopeFiles(stateDir, wave, { readDir = readdirSync, readFi
|
|
|
372
393
|
* evidence — the counts and verdicts below are a floor, not a census — and the
|
|
373
394
|
* human table says so beside them.
|
|
374
395
|
*
|
|
396
|
+
* `malformed_scope_files` is the same measurement on the FILE side (#1379 P2):
|
|
397
|
+
* a scope file that cannot be read or parsed was silently skipped, which made a
|
|
398
|
+
* corrupt wave yield `digest-unknown` / `injection-missing` verdicts
|
|
399
|
+
* indistinguishable from a genuinely missing injection. Always present,
|
|
400
|
+
* including as `0`.
|
|
401
|
+
*
|
|
375
402
|
* ## Transport degradation
|
|
376
403
|
*
|
|
377
404
|
* On a platform with no `PreToolUse` `Agent` matcher (Codex, Cursor, Pi) the
|
|
@@ -491,6 +518,7 @@ export function verifyWaveScope({
|
|
|
491
518
|
injected,
|
|
492
519
|
echoed,
|
|
493
520
|
malformed_lines: malformedLines,
|
|
521
|
+
malformed_scope_files: fileIds.malformedFiles ?? 0,
|
|
494
522
|
by_verdict: byVerdict,
|
|
495
523
|
agents,
|
|
496
524
|
};
|
|
@@ -506,6 +534,8 @@ export function verifyWaveScope({
|
|
|
506
534
|
* including as `0` — it is the denominator's honesty check: without it a join
|
|
507
535
|
* that silently dropped half the ledger is indistinguishable in the record from
|
|
508
536
|
* a wave where nothing went wrong (`.claude/rules/host-resources.md` § HR-105).
|
|
537
|
+
* `malformed_scope_files` carries the same guarantee for the scope files the
|
|
538
|
+
* join reads (#1379 P2).
|
|
509
539
|
*
|
|
510
540
|
* @param {ReturnType<typeof verifyWaveScope>} report
|
|
511
541
|
* @returns {Record<string, unknown>}
|
|
@@ -518,6 +548,7 @@ export function scopeVerifiedPayload(report) {
|
|
|
518
548
|
injected: report.injected,
|
|
519
549
|
echoed: report.echoed,
|
|
520
550
|
malformed_lines: report.malformed_lines ?? 0,
|
|
551
|
+
malformed_scope_files: report.malformed_scope_files ?? 0,
|
|
521
552
|
by_verdict: report.by_verdict,
|
|
522
553
|
digests: report.agents.map((a) => a.digest),
|
|
523
554
|
};
|
|
@@ -636,6 +667,12 @@ async function mainVerify(args) {
|
|
|
636
667
|
? [` WARNING: ${report.malformed_lines} malformed ledger line(s) skipped — `
|
|
637
668
|
+ 'counts and verdicts below are a floor, not a census']
|
|
638
669
|
: []),
|
|
670
|
+
// Same honesty check on the FILE side: an unparseable scope file makes a
|
|
671
|
+
// corrupt wave look exactly like one that was never injected.
|
|
672
|
+
...(report.malformed_scope_files > 0
|
|
673
|
+
? [` WARNING: ${report.malformed_scope_files} malformed scope file(s) skipped — `
|
|
674
|
+
+ 'digest-unknown / injection-missing below may be corruption, not a missing injection']
|
|
675
|
+
: []),
|
|
639
676
|
...report.agents.map((a) => ` ${a.digest} ${a.verdict.padEnd(20)} ${a.agent_id}`),
|
|
640
677
|
];
|
|
641
678
|
process.stdout.write(`${lines.join('\n')}\n`);
|