session-orchestrator 3.22.0 → 3.23.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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor/commands/autopilot-multi.md +14 -0
- package/.cursor/commands/autopilot.md +14 -0
- package/.cursor/commands/bootstrap.md +14 -0
- package/.cursor/commands/brainstorm.md +14 -0
- package/.cursor/commands/close.md +13 -0
- package/.cursor/commands/contract-version-bump.md +14 -0
- package/.cursor/commands/debug.md +14 -0
- package/.cursor/commands/discovery.md +14 -0
- package/.cursor/commands/dispatcher.md +14 -0
- package/.cursor/commands/eli5.md +14 -0
- package/.cursor/commands/eval.md +14 -0
- package/.cursor/commands/evolve.md +14 -0
- package/.cursor/commands/go.md +14 -0
- package/.cursor/commands/grill.md +14 -0
- package/.cursor/commands/harness-audit.md +13 -0
- package/.cursor/commands/journey-audit.md +14 -0
- package/.cursor/commands/memory-cleanup.md +14 -0
- package/.cursor/commands/persona-panel.md +14 -0
- package/.cursor/commands/plan.md +14 -0
- package/.cursor/commands/portfolio.md +14 -0
- package/.cursor/commands/reconcile.md +14 -0
- package/.cursor/commands/release.md +14 -0
- package/.cursor/commands/repo-audit.md +13 -0
- package/.cursor/commands/session.md +14 -0
- package/.cursor/commands/spinout.md +14 -0
- package/.cursor/commands/sunset-review.md +14 -0
- package/.cursor/commands/templates-ack.md +14 -0
- package/.cursor/commands/test.md +14 -0
- package/.cursor/hooks.json +60 -0
- package/.cursor/rules/000-session-orchestrator.mdc +8 -0
- package/.cursor/rules/010-session-workflow.mdc +9 -1
- package/.cursor/rules/020-quality-gates.mdc +1 -1
- package/.cursor/rules/030-wave-execution.mdc +1 -1
- package/.cursor/rules/050-plan.mdc +2 -2
- package/.cursor/rules/070-gitlab-ops.mdc +73 -57
- package/.cursor/rules/080-ecosystem-health.mdc +7 -7
- package/.cursor/skills/architecture/SKILL.md +13 -0
- package/.cursor/skills/autopilot/SKILL.md +12 -0
- package/.cursor/skills/bootstrap/SKILL.md +12 -0
- package/.cursor/skills/brainstorm/SKILL.md +13 -0
- package/.cursor/skills/claude-md-drift-check/SKILL.md +13 -0
- package/.cursor/skills/contract-version-bump/SKILL.md +12 -0
- package/.cursor/skills/convergence-monitoring/SKILL.md +12 -0
- package/.cursor/skills/daily/SKILL.md +12 -0
- package/.cursor/skills/debug/SKILL.md +13 -0
- package/.cursor/skills/discovery/SKILL.md +13 -0
- package/.cursor/skills/dispatcher/SKILL.md +13 -0
- package/.cursor/skills/docs-orchestrator/SKILL.md +13 -0
- package/.cursor/skills/domain-model/SKILL.md +13 -0
- package/.cursor/skills/ecosystem-health/SKILL.md +13 -0
- package/.cursor/skills/eli5/SKILL.md +13 -0
- package/.cursor/skills/eval/SKILL.md +12 -0
- package/.cursor/skills/evolve/SKILL.md +13 -0
- package/.cursor/skills/frontmatter-guard/SKILL.md +13 -0
- package/.cursor/skills/gitlab-ops/SKILL.md +13 -0
- package/.cursor/skills/gitlab-portfolio/SKILL.md +13 -0
- package/.cursor/skills/grill/SKILL.md +13 -0
- package/.cursor/skills/hook-development/SKILL.md +13 -0
- package/.cursor/skills/journey-audit/SKILL.md +13 -0
- package/.cursor/skills/mcp-builder/SKILL.md +13 -0
- package/.cursor/skills/memory-cleanup/SKILL.md +12 -0
- package/.cursor/skills/mode-selector/SKILL.md +13 -0
- package/.cursor/skills/npm-publish/SKILL.md +12 -0
- package/.cursor/skills/peekaboo-driver/SKILL.md +13 -0
- package/.cursor/skills/persona-panel/SKILL.md +12 -0
- package/.cursor/skills/plan/SKILL.md +13 -0
- package/.cursor/skills/playwright-driver/SKILL.md +13 -0
- package/.cursor/skills/quality-gates/SKILL.md +13 -0
- package/.cursor/skills/reconcile/SKILL.md +12 -0
- package/.cursor/skills/repo-audit/SKILL.md +13 -0
- package/.cursor/skills/session-end/SKILL.md +13 -0
- package/.cursor/skills/session-plan/SKILL.md +13 -0
- package/.cursor/skills/session-start/SKILL.md +13 -0
- package/.cursor/skills/skill-creator/SKILL.md +13 -0
- package/.cursor/skills/spinout/SKILL.md +12 -0
- package/.cursor/skills/sunset-review/SKILL.md +13 -0
- package/.cursor/skills/test-runner/SKILL.md +13 -0
- package/.cursor/skills/tmux-layout/SKILL.md +13 -0
- package/.cursor/skills/ubiquitous-language/SKILL.md +13 -0
- package/.cursor/skills/using-orchestrator/SKILL.md +13 -0
- package/.cursor/skills/vault-mirror/SKILL.md +13 -0
- package/.cursor/skills/vault-sync/SKILL.md +13 -0
- package/.cursor/skills/wave-executor/SKILL.md +13 -0
- package/.cursor/skills/write-executable-plan/SKILL.md +13 -0
- package/.mcp.json +4 -1
- package/CHANGELOG.md +168 -0
- package/README.md +18 -15
- package/agents/AGENTS.md +23 -4
- package/agents/code-implementer.md +2 -1
- package/agents/db-specialist.md +2 -1
- package/agents/docs-writer.md +3 -1
- package/agents/eval-judge.md +1 -1
- package/agents/session-reviewer.md +7 -1
- package/agents/test-writer.md +2 -1
- package/agents/ui-developer.md +2 -1
- package/commands/bootstrap.md +2 -2
- package/commands/close.md +3 -1
- package/commands/go.md +1 -1
- package/commands/journey-audit.md +43 -0
- package/docs/USER-GUIDE.md +2 -2
- package/docs/ci-setup.md +14 -0
- package/docs/codex-setup.md +64 -0
- package/docs/components.md +6 -6
- package/docs/cursor-setup.md +26 -47
- package/docs/events-schema.md +76 -4
- package/docs/github-mirror-protection.md +197 -0
- package/docs/pi-setup.md +2 -0
- package/docs/rule-authoring.md +3 -1
- package/docs/scope-collision-guard.md +49 -2
- package/docs/session-config-reference.md +26 -4
- package/docs/session-config-template.md +4 -3
- package/docs/telemetry.md +22 -0
- package/hooks/_lib/lock-bootstrap.mjs +8 -4
- package/hooks/_lib/vcs-create-matcher.mjs +397 -38
- package/hooks/enforce-scope.mjs +64 -0
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks-cursor.json +201 -20
- package/hooks/hooks-pi.json +1 -1
- package/hooks/hooks.json +2 -2
- package/hooks/on-session-end.mjs +211 -10
- package/hooks/on-session-start.mjs +214 -11
- package/hooks/on-stop.mjs +48 -9
- package/hooks/post-subagent-discovery-validator.mjs +34 -3
- package/hooks/post-tool-batch-wave-signal.mjs +11 -2
- package/hooks/pre-bash-issue-budget.mjs +117 -4
- package/hooks/pre-bash-sessions-ledger-guard.mjs +159 -0
- package/hooks/pre-bash-staging-fence.mjs +4 -0
- package/hooks/pre-task-scope-disjoint.mjs +368 -35
- package/hooks/skill-invocation-telemetry.mjs +21 -10
- package/monitors/monitors.json +6 -0
- package/package.json +1 -1
- package/pi/prompts/journey-audit.md +12 -0
- package/rules/_index.md +9 -1
- package/rules/always-on/ask-via-tool.md +62 -0
- package/rules/always-on/bash-harness-pitfalls.md +168 -0
- package/rules/always-on/build-value.md +47 -0
- package/rules/always-on/cross-session-messaging.md +59 -0
- package/rules/always-on/loop-and-monitor.md +221 -0
- package/rules/always-on/parallel-sessions.md +142 -12
- package/rules/always-on/receiving-review.md +108 -0
- package/rules/always-on/test-value.md +40 -0
- package/rules/always-on/verification-before-completion.md +77 -0
- package/scripts/archive-closed-prds.mjs +258 -18
- package/scripts/autopilot.mjs +5 -0
- package/scripts/backfill-evidence-digest.mjs +376 -0
- package/scripts/cursor-install.mjs +89 -48
- package/scripts/export-hw-learnings.mjs +143 -2
- package/scripts/express-path.mjs +299 -0
- package/scripts/generate-cursor-adapter.mjs +253 -0
- package/scripts/github-protection-audit.mjs +358 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +240 -16
- package/scripts/lib/build-live-signals.mjs +24 -5
- package/scripts/lib/ci-status-banner.mjs +158 -11
- package/scripts/lib/command-blocker.mjs +70 -0
- package/scripts/lib/config/reconcile.mjs +79 -4
- package/scripts/lib/config/section-extractor.mjs +235 -36
- package/scripts/lib/config-schema.mjs +9 -1
- package/scripts/lib/config.mjs +57 -6
- package/scripts/lib/convergence-monitor.mjs +13 -2
- package/scripts/lib/cursor-hook-bridge.mjs +443 -0
- package/scripts/lib/dispatcher/cli.mjs +2 -2
- package/scripts/lib/express-path.mjs +327 -0
- package/scripts/lib/file-lock.mjs +22 -4
- package/scripts/lib/gates/gate-full.mjs +81 -8
- package/scripts/lib/gates/gate-helpers.mjs +76 -15
- package/scripts/lib/git-config-drift.mjs +134 -5
- package/scripts/lib/host-identity.mjs +247 -2
- package/scripts/lib/instruction-budget-guard.mjs +31 -1
- package/scripts/lib/issue-budget.mjs +229 -30
- package/scripts/lib/learnings/io.mjs +55 -10
- package/scripts/lib/learnings/schema.mjs +95 -28
- package/scripts/lib/lock-reaper.mjs +7 -1
- package/scripts/lib/locks/staging-fence-lock.mjs +5 -1
- package/scripts/lib/locks/state-md-lock.mjs +8 -1
- package/scripts/lib/memory-banner.mjs +5 -2
- package/scripts/lib/memory-paths.mjs +15 -6
- package/scripts/lib/mode-selector/scoring.mjs +53 -6
- package/scripts/lib/platform.mjs +72 -9
- package/scripts/lib/plugin-root.mjs +143 -19
- package/scripts/lib/project-hygiene.mjs +43 -3
- package/scripts/lib/quality-gate.mjs +271 -13
- package/scripts/lib/reconcile/emitter.mjs +87 -19
- package/scripts/lib/reconcile/engine.mjs +281 -13
- package/scripts/lib/reconcile/idempotency.mjs +102 -1
- package/scripts/lib/reconcile/renderer.mjs +148 -3
- package/scripts/lib/reconcile/sanitize.mjs +40 -17
- package/scripts/lib/reconcile/writer.mjs +415 -84
- package/scripts/lib/rule-loader.mjs +37 -2
- package/scripts/lib/rules-sync.mjs +51 -8
- package/scripts/lib/scope-gate.mjs +90 -0
- package/scripts/lib/session-close-backfill.mjs +369 -28
- package/scripts/lib/session-discovery.mjs +13 -3
- package/scripts/lib/session-end/phase-skip.mjs +37 -4
- package/scripts/lib/session-end/worktree-cleanup.mjs +154 -7
- package/scripts/lib/session-id.mjs +30 -14
- package/scripts/lib/session-identity/own-session.mjs +159 -0
- package/scripts/lib/session-lock.mjs +85 -30
- package/scripts/lib/session-schema/normalizer.mjs +70 -3
- package/scripts/lib/session-schema/validator.mjs +40 -0
- package/scripts/lib/session-start-probes.mjs +608 -0
- package/scripts/lib/session-transition.mjs +277 -0
- package/scripts/lib/sessions-staleness-banner.mjs +124 -57
- package/scripts/lib/spiral-carryover.mjs +90 -9
- package/scripts/lib/state-md/frontmatter-mutators.mjs +41 -8
- package/scripts/lib/state-md/mission-status.mjs +350 -52
- package/scripts/lib/state-md/yaml-parser.mjs +145 -16
- package/scripts/lib/state-md.mjs +12 -2
- package/scripts/lib/telemetry/sync.mjs +46 -8
- package/scripts/lib/validate/check-agents.mjs +66 -0
- package/scripts/lib/validate/check-cursor-adapter.mjs +102 -0
- package/scripts/lib/validate/check-dead-bridge.mjs +24 -2
- package/scripts/lib/validate/check-doc-cli-commands.mjs +16 -32
- package/scripts/lib/validate/check-hooks-symmetry.mjs +29 -63
- package/scripts/lib/validate/check-playwright-mcp-canary.mjs +13 -22
- package/scripts/lib/validate/check-plugin-monitors.mjs +10 -4
- package/scripts/lib/validate/check-test-value-bans.mjs +165 -17
- package/scripts/lib/validate/check-unwired-features.mjs +340 -32
- package/scripts/lib/validate/repo-files.mjs +275 -0
- package/scripts/lib/validate-vendored-rules.mjs +229 -7
- package/scripts/lib/vault-mirror/process.mjs +99 -43
- package/scripts/lib/vault-mirror/telemetry.mjs +210 -0
- package/scripts/lib/vault-staleness-banner.mjs +76 -6
- package/scripts/lib/vault-status/board-writer.mjs +211 -10
- package/scripts/lib/vault-status/narrative-mirror.mjs +188 -8
- package/scripts/lib/wave-executor/foreign-dispatch.mjs +832 -0
- package/scripts/lib/wave-transcript-tail.mjs +869 -0
- package/scripts/materialize-wave-scope.mjs +209 -12
- package/scripts/mcp-server.sh +11 -2
- package/scripts/parse-config.mjs +65 -0
- package/scripts/token-audit.sh +9 -2
- package/scripts/validate-plugin.mjs +3 -0
- package/scripts/validate-wave-scope.mjs +67 -0
- package/scripts/vault-mirror.mjs +203 -34
- package/skills/_shared/monitor-patterns.md +31 -5
- package/skills/_shared/parallel-aware-auq.md +1 -1
- package/skills/_shared/parallel-aware-preamble.md +4 -2
- package/skills/_shared/platform-tools.md +11 -5
- package/skills/_shared/state-ownership.md +29 -2
- package/skills/autopilot/SKILL.md +5 -1
- package/skills/bootstrap/SKILL.md +3 -3
- package/skills/bootstrap/_shared-template.md +18 -10
- package/skills/bootstrap/deep-template.md +10 -6
- package/skills/bootstrap/fast-template.md +15 -8
- package/skills/bootstrap/standard-template.md +10 -6
- package/skills/claude-md-drift-check/checker.mjs +39 -11
- package/skills/dispatcher/SKILL.md +1 -1
- package/skills/journey-audit/SKILL.md +269 -0
- package/skills/peekaboo-driver/SKILL.md +15 -3
- package/skills/persona-panel/SKILL.md +1 -1
- package/skills/reconcile/SKILL.md +41 -1
- package/skills/session-end/SKILL.md +17 -4
- package/skills/session-end/metrics-collection.md +7 -4
- package/skills/session-end/phase-3-6-tail.md +11 -3
- package/skills/session-end/phase-3-7a-recommendations.md +16 -2
- package/skills/session-plan/SKILL.md +6 -1
- package/skills/session-plan/wave-template.md +1 -0
- package/skills/session-start/SKILL.md +30 -16
- package/skills/session-start/phase-7-5-mode-selector.md +15 -3
- package/skills/session-start/phase-8-5-express-path.md +77 -12
- package/skills/vault-sync/validator.mjs +31 -0
- package/skills/wave-executor/SKILL.md +4 -2
- package/skills/wave-executor/circuit-breaker.md +34 -9
- package/skills/wave-executor/wave-loop.md +102 -19
- package/templates/_shared/journey-manifest.md +110 -0
- package/templates/_shared/rules/parallel-sessions.md +0 -77
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: npm-publish
|
|
3
|
+
description: "Use when publishing this package to npm — a version release (npm publish), verifying the registry/pi.dev listing, or diagnosing npm auth failures (E403 2FA/token errors). Token-based flow via NPM_TOKEN in .env.local with a temp userconfig, the leakage gate before every publish, post-publish verification and marker/badge upkeep. Trigger on \"publish to npm\", \"npm release\", \"E403 publish error\"."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# npm-publish
|
|
7
|
+
|
|
8
|
+
Canonical skill: `skills/npm-publish/SKILL.md`
|
|
9
|
+
|
|
10
|
+
Read that file and follow it exactly. Resolve relative links against `skills/npm-publish/`, not this wrapper.
|
|
11
|
+
|
|
12
|
+
Cursor has no Skill tool. Treat "invoke the npm-publish skill" as: Read `skills/npm-publish/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: peekaboo-driver
|
|
3
|
+
description: "Use this skill when driving native-UI AX-tree snapshots and screenshots via steipete/peekaboo (MIT, macOS-only). Dispatched by `skills/test-runner/` to capture native-UI AX-tree snapshots + screenshots on macOS 15+ targets, and exits with deterministic JSON output the orchestrator can parse."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# peekaboo-driver
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/peekaboo-driver/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/peekaboo-driver/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the peekaboo-driver skill" as: Read `skills/peekaboo-driver/SKILL.md`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: persona-panel
|
|
3
|
+
description: "Use this skill when you need multi-persona parallel content review — domain experts, buyer personas, compliance reviewers, or custom catalog entries reviewing a target file or output. Dispatches N persona agents in parallel, consolidates verdicts via a configurable mode (voting-quorum, hard-gate-threshold, or coordinator-summary), and writes a timestamped sidecar to .orchestrator/persona-panel/. Invoked via /persona-panel <target-path>."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# persona-panel
|
|
7
|
+
|
|
8
|
+
Canonical skill: `skills/persona-panel/SKILL.md`
|
|
9
|
+
|
|
10
|
+
Read that file and follow it exactly. Resolve relative links against `skills/persona-panel/`, not this wrapper.
|
|
11
|
+
|
|
12
|
+
Cursor has no Skill tool. Treat "invoke the persona-panel skill" as: Read `skills/persona-panel/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan
|
|
3
|
+
description: "Use this skill when performing structured project planning and PRD generation with three modes: new (project kickoff with repo scaffolding), feature (compact feature PRD), retro (data-driven retrospective). All modes share a researched Q&A engine that dispatches parallel Explore agents before each question wave, presents options via AskUserQuestion with recommendations, and produces documents with prioritized issue creation."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# plan
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/plan/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/plan/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the plan skill" as: Read `skills/plan/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-driver
|
|
3
|
+
description: "Use this skill when executing web tests via the canonical `playwright` npm package (Microsoft, Apache-2.0). Dispatched by `skills/test-runner/` to execute web tests against a target, captures token-frugal AX-tree snapshots + screenshots + console output under `.orchestrator/metrics/test-runs/<run-id>/`, and exits with deterministic JSON output the orchestrator can parse."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# playwright-driver
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/playwright-driver/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/playwright-driver/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the playwright-driver skill" as: Read `skills/playwright-driver/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: quality-gates
|
|
3
|
+
description: Use this skill when referencing canonical quality check commands for typecheck, test, and lint. Defines 4 variants (Baseline, Incremental, Full Gate, Per-File) used by session-start, wave-executor, session-end, and session-reviewer. Reference skill — not invoked directly.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# quality-gates
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/quality-gates/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/quality-gates/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the quality-gates skill" as: Read `skills/quality-gates/SKILL.md`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reconcile
|
|
3
|
+
description: Use this skill when the user wants to reconcile learnings into rules, run /reconcile, propose rules from learnings, turn learnings into .claude/rules/ entries, or review what rules would be generated from current session learnings. On-demand version of session-end Phase 3.6.8.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# reconcile
|
|
7
|
+
|
|
8
|
+
Canonical skill: `skills/reconcile/SKILL.md`
|
|
9
|
+
|
|
10
|
+
Read that file and follow it exactly. Resolve relative links against `skills/reconcile/`, not this wrapper.
|
|
11
|
+
|
|
12
|
+
Cursor has no Skill tool. Treat "invoke the reconcile skill" as: Read `skills/reconcile/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: repo-audit
|
|
3
|
+
description: "Use this skill when the user wants to audit a repository for baseline compliance, check code quality, security posture, CI/CD setup, testing, documentation, and ecosystem configuration. Runs 9 checklist categories and emits a Markdown report plus JSON sidecar at .orchestrator/metrics/repo-audit-<timestamp>.json. <example>Context: User is in a project repo and wants a baseline compliance check. user: \"/repo-audit\" assistant: \"Running repo-audit across 9 categories — Configuration, Code Quality, Git Hygiene, CI/CD, Testing, Security, Documentation, Clank Integration (optional), and MCP Configuration. Will produce a Markdown checklist report and JSON sidecar.\" <commentary>The user wants a compliance check; this skill is appropriate because it runs all 9 categories with pass/fail/warn/skipped statuses and writes structured output.</commentary></example>"
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# repo-audit
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/repo-audit/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/repo-audit/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the repo-audit skill" as: Read `skills/repo-audit/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-end
|
|
3
|
+
description: "Use this skill when performing a full session close-out: verifies all planned work against the agreed plan, creates issues for gaps, runs quality gates, commits cleanly, mirrors to GitHub, and produces a session summary. Triggered by /close command."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# session-end
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/session-end/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/session-end/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the session-end skill" as: Read `skills/session-end/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-plan
|
|
3
|
+
description: "Creates a structured wave execution plan with role-based assignment after user alignment. Decomposes agreed tasks into configurable waves (default 5) with optimal agent assignment, dependency ordering, and inter-wave checkpoints. Activated by session-start after Q&A phase completes."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# session-plan
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/session-plan/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/session-plan/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the session-plan skill" as: Read `skills/session-plan/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-start
|
|
3
|
+
description: "Use this skill when initializing a session for any project repo. Autonomously analyzes git state, VCS issues, SSOT files, branches, environment, and cross-repo status. Then presents structured findings with recommendations for user alignment before creating a wave plan. Triggered by /session [housekeeping|feature|deep] command."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# session-start
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/session-start/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/session-start/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the session-start skill" as: Read `skills/session-start/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-creator
|
|
3
|
+
description: "Use when creating a new skill from scratch, modifying an existing skill, or optimizing a skill's triggering description. Guides intent capture, structure, writing patterns, and progressive-disclosure organization so skills reliably trigger and stay maintainable. Trigger on phrases like \"turn this into a skill\", \"write a skill for X\", \"improve this skill\", \"my skill isn't triggering\"."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# skill-creator
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/skill-creator/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/skill-creator/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the skill-creator skill" as: Read `skills/skill-creator/SKILL.md`.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spinout
|
|
3
|
+
description: "Use when extracting a project into its own repo — a venture spinout (e.g. a product leaving its incubator repo) or a sanitized content-snapshot fork. Guided 5-step runbook: target sphere + path, confidentiality/sanitize check, copy + fresh git init, SNAPSHOT-FREEZE marker in the source repo, remotes + registration. Trigger on 'spin out X', 'extract this into its own repo', 'fork X sanitized'."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# spinout
|
|
7
|
+
|
|
8
|
+
Canonical skill: `skills/spinout/SKILL.md`
|
|
9
|
+
|
|
10
|
+
Read that file and follow it exactly. Resolve relative links against `skills/spinout/`, not this wrapper.
|
|
11
|
+
|
|
12
|
+
Cursor has no Skill tool. Treat "invoke the spinout skill" as: Read `skills/spinout/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sunset-review
|
|
3
|
+
description: "Use this skill when the user wants to identify unused, near-zero-use, or stale skills/agents/commands in the plugin surface so they can be demoted or retired. Combines agent-dispatch telemetry (start-events only) with static reference scanning, classifies every surface item into Active / Investigate / Demote / Retire, and emits a Markdown report plus JSON sidecar. NEVER auto-deletes — surfaces candidates for human decision. Quarterly cadence. <example>Context: The plugin surface has grown and the maintainer wants to prune dead weight. user: \"/sunset-review\" assistant: \"Running the sunset walk — classifying skills, agents, and commands by usage telemetry + static refs, grouped by Retire / Demote / Investigate / Active. No item is deleted automatically; I'll surface Retire/Demote candidates for your decision.\" <commentary>The user wants a usage-driven prune candidate list; this skill runs the read-only walker, presents grouped verdicts, and writes a sidecar — it never deletes.</commentary></example>"
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# sunset-review
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/sunset-review/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/sunset-review/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the sunset-review skill" as: Read `skills/sunset-review/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-runner
|
|
3
|
+
description: "Use this skill when orchestrating agentic end-to-end tests. Resolves target + profile, dispatches the right driver(s) (playwright for web today, peekaboo for macOS (issue #381)), invokes the ux-evaluator agent (opus, read-only) against driver artifacts, reconciles findings with the open issue tracker via scripts/lib/test-runner/issue-reconcile.mjs, and writes report.md + JSONL roll-up. Wraps upstream tools (no forks). Hard-gates Playwright MCP for browser drive (4× token cost vs CLI per Microsoft's own benchmark)."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# test-runner
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/test-runner/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/test-runner/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the test-runner skill" as: Read `skills/test-runner/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tmux-layout
|
|
3
|
+
description: "Use this skill when the operator wants a prepared tmux visualization layout for the session's side-channels (STATE.md tail, CI-watch, events.jsonl tail). Renders a 4-pane default layout or debug layout. Read-only side-channel observability — the coordinator chat stays in the operator's original terminal. Trigger phrases: \"tmux layout\", \"split panes for ci watch\", \"visualize session side-channels\", \"show me state-md tail and ci\"."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# tmux-layout
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/tmux-layout/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/tmux-layout/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the tmux-layout skill" as: Read `skills/tmux-layout/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ubiquitous-language
|
|
3
|
+
description: "Use when the user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions \"domain model\" or \"DDD\". Extracts a DDD-style glossary from the current conversation into UBIQUITOUS_LANGUAGE.md, flags ambiguities and synonyms, and proposes opinionated canonical terms."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ubiquitous-language
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/ubiquitous-language/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/ubiquitous-language/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the ubiquitous-language skill" as: Read `skills/ubiquitous-language/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: using-orchestrator
|
|
3
|
+
description: "Use this skill when dispatching implicit slash-command intent from the user's first message. Inspects the user's first message for implicit slash-command intent and dispatches to the highest-confidence matching entry-point skill via the Skill tool. Only active when `auto-skill-dispatch: true` in Session Config. Silent no-op otherwise."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# using-orchestrator
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/using-orchestrator/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/using-orchestrator/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the using-orchestrator skill" as: Read `skills/using-orchestrator/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vault-mirror
|
|
3
|
+
description: "Use when you need to populate the Meta-Vault with machine-generated notes derived from session-orchestrator JSONL records. Converts entries from `.orchestrator/metrics/sessions.jsonl` and `.orchestrator/metrics/learnings.jsonl` into vault-conformant Markdown under `50-sessions/` and `40-learnings/`. Called automatically at session-end Phase 3.7 and after evolve Phase 3.5 — only when `vault-integration.enabled=true` and `vault-integration.mode != \"off\"`. Idempotent: re-runs safely; skips hand-authored notes. Triggers: \"mirror to vault\", \"sync session notes to vault\", \"write learning notes to vault\", \"vault-mirror failed at session close\". <example>Context: session-end is finalizing, vault-integration.mode is \"warn\". user: \"/close\" assistant: \"Running vault-mirror to write 50-sessions/session-2026-05-17.md from the closing session record — 1 created, 0 skipped.\"</example>"
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vault-mirror
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/vault-mirror/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/vault-mirror/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the vault-mirror skill" as: Read `skills/vault-mirror/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vault-sync
|
|
3
|
+
description: "Use when you need to validate the Meta-Vault's Markdown frontmatter and wiki-link integrity before closing a session or after vault edits. Runs as a hard gate at session-end Phase 1 — blocks close if any `.md` file fails the Zod frontmatter schema or has dangling `[[wiki-links]]`. Supports three modes: `hard` (blocks on errors), `warn` (reports without blocking), `off` (skip). Reads `vault-sync.*` from Session Config; respects per-vault exclude globs from `CLAUDE.md`. Triggers: \"vault validation failed at session close\", \"fix vault frontmatter errors\", \"check vault wiki-links\", \"why is session-end blocked by vault-sync\". <example>Context: session-end Phase 1 quality gate, vault-sync.enabled=true, vault-sync.mode=\"hard\". user: \"/close\" assistant: \"vault-sync found 2 frontmatter errors in vault/40-learnings/ml-notes.md — missing required `id` field. Fixing before close.\"</example>"
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vault-sync
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/vault-sync/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/vault-sync/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the vault-sync skill" as: Read `skills/vault-sync/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wave-executor
|
|
3
|
+
description: Use this skill when executing the agreed session plan in waves with role-based execution and parallel subagents. Handles inter-wave quality checks, plan adaptation, and progress tracking. Core orchestration engine for feature and deep sessions. Triggered by /go command.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# wave-executor
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/wave-executor/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/wave-executor/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the wave-executor skill" as: Read `skills/wave-executor/SKILL.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-executable-plan
|
|
3
|
+
description: "Use when you have a PRD or design spec and need a bite-sized, executable implementation plan that any agent can follow without re-deriving structure. Produces `docs/plans/YYYY-MM-DD-<feature>.md` with per-task Files block, complete code per step (no placeholders), and exact verification commands. Rejects \"TBD\", \"TODO\", \"add error handling\", \"similar to Task N\"."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# write-executable-plan
|
|
8
|
+
|
|
9
|
+
Canonical skill: `skills/write-executable-plan/SKILL.md`
|
|
10
|
+
|
|
11
|
+
Read that file and follow it exactly. Resolve relative links against `skills/write-executable-plan/`, not this wrapper.
|
|
12
|
+
|
|
13
|
+
Cursor has no Skill tool. Treat "invoke the write-executable-plan skill" as: Read `skills/write-executable-plan/SKILL.md`.
|
package/.mcp.json
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"session-orchestrator": {
|
|
4
4
|
"command": "bash",
|
|
5
|
-
"args": [
|
|
5
|
+
"args": [
|
|
6
|
+
"-c",
|
|
7
|
+
"# Tier order MIRRORS resolvePluginRoot() — see scripts/lib/plugin-root.mjs § TIER ORDER (the single source of truth). That list is the original, this is the mirror: change both together. The env list, the CODEX_HOME trim, the package.json{name} test and the newest-wins-by-mtime tiebreak are all mirrored EXACTLY; only tier 6 (walk up from import.meta.url) has no shell analogue.\nr=\"\"; ch=\"$CODEX_HOME\"; ch=\"${ch#\"${ch%%[![:space:]]*}\"}\"; ch=\"${ch%\"${ch##*[![:space:]]}\"}\"; [ -n \"$ch\" ] || ch=\"$HOME/.codex\"; for c in \"$PLUGIN_ROOT\" \"$CLAUDE_PLUGIN_ROOT\" \"$CODEX_PLUGIN_ROOT\" \"$CURSOR_RULES_DIR\" \"$PI_PLUGIN_ROOT\" \"$(git rev-parse --show-toplevel 2>/dev/null)\"; do if [ -n \"$c\" ] && [ -f \"$c/scripts/mcp-server.sh\" ]; then r=\"$c\"; break; fi; done; if [ -z \"$r\" ]; then r=\"$(NODE_PATH=\"$(npm root -g 2>/dev/null)\" node -e 'import(require(`node:url`).pathToFileURL(require.resolve(`session-orchestrator/scripts/lib/plugin-root.mjs`))).then(m=>process.stdout.write(m.resolvePluginRoot()))' 2>/dev/null)\"; fi; if [ -z \"$r\" ]; then for b in \"$ch\" \"$HOME/.claude\"; do for c in \"$b\"/plugins/cache/*/session-orchestrator/*; do if [ -f \"$c/scripts/mcp-server.sh\" ] && node -e 'process.exit(JSON.parse(require(\"fs\").readFileSync(process.argv[1],\"utf8\")).name===\"session-orchestrator\"?0:1)' \"$c/package.json\" 2>/dev/null && { [ -z \"$r\" ] || [ \"$c\" -nt \"$r\" ]; }; then r=\"$c\"; fi; done; done; fi; if [ -n \"$r\" ] && [ -f \"$r/scripts/mcp-server.sh\" ]; then exec bash \"$r/scripts/mcp-server.sh\"; fi; { echo \"session-orchestrator: cannot locate the plugin root — the MCP server did not start.\"; echo \" Tried: PLUGIN_ROOT=${PLUGIN_ROOT:-(unset)}, CLAUDE_PLUGIN_ROOT=${CLAUDE_PLUGIN_ROOT:-(unset)}, CODEX_PLUGIN_ROOT=${CODEX_PLUGIN_ROOT:-(unset)}, CURSOR_RULES_DIR=${CURSOR_RULES_DIR:-(unset)}, PI_PLUGIN_ROOT=${PI_PLUGIN_ROOT:-(unset)}, git rev-parse --show-toplevel (cwd=$PWD), node resolve of session-orchestrator/scripts/lib/plugin-root.mjs, plugin caches $ch/plugins/cache/*/session-orchestrator/* and $HOME/.claude/plugins/cache/*/session-orchestrator/*.\"; echo \" Fix: reinstall the plugin so its cached copy is refreshed (codex plugin marketplace add Kanevry/session-orchestrator), or set CLAUDE_PLUGIN_ROOT / CODEX_PLUGIN_ROOT to the plugin directory in this server's env block.\"; echo \" Note: CODEX_PLUGIN_ROOT is session-orchestrator's own compatibility export, not a variable Codex provides. See docs/codex-setup.md § Troubleshooting.\"; } >&2; exit 1"
|
|
8
|
+
]
|
|
6
9
|
}
|
|
7
10
|
}
|
|
8
11
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,174 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [3.23.0] - 2026-08-28
|
|
11
|
+
|
|
12
|
+
Two commits today (1 `feat`, 1 `fix`; 64 files, +4,971/−184) close Waves 3 and 4 of the
|
|
13
|
+
resumed session, plus eight items carried forward from Wave 2 (`36aa605`, 2026-08-26,
|
|
14
|
+
never previously changelogged). No `BREAKING CHANGE:` footer and no `!` subject. The
|
|
15
|
+
pattern repeats across both waves: a guard, sanitizer, or census that already existed but
|
|
16
|
+
checked the wrong population or stopped short of the surface it needed to reach — a parity
|
|
17
|
+
guard sampling five rule files by name instead of reading the directory, a sanitizer whose
|
|
18
|
+
findings never reached stderr, a byte-count drifting 338 lines from the line it cited, a
|
|
19
|
+
tracked directory hiding an untracked hook beside it.
|
|
20
|
+
|
|
21
|
+
One `feat` commit (session-2, `30940cb`, 2026-08-28; 39 files, +2,475/−405) closes Wave 2
|
|
22
|
+
with three GitHub-mirror fixes and a session-identity cluster at the process boundary. No
|
|
23
|
+
`BREAKING CHANGE:` footer and no `!` subject. The through-line: identifiers the platforms
|
|
24
|
+
mint (UUIDv7, semantic session ids) were rejected or dropped by readers built for UUIDv4
|
|
25
|
+
only — every resume looked foreign — and call sites that needed a repo root passed
|
|
26
|
+
`undefined` instead, so fail-open paths ran on every invocation.
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- **Eight core rules ship as sanitized copies, with a report-only leak scanner (#1098).**
|
|
31
|
+
`rules/always-on/` holds sanitized copies of `ask-via-tool`, `build-value`,
|
|
32
|
+
`loop-and-monitor` and five more; `scanVendoringLeaks()` now reaches stderr as one line
|
|
33
|
+
per finding in both CLIs, folded into `validate-vendored-rules` with a rule-ID census.
|
|
34
|
+
- **Session Config fails loud on an unparsable line (#1097).** `collectUnparsableLines`
|
|
35
|
+
gates warn/strict via one `htmlCommentSkipper` shared by extractor and classifier — a
|
|
36
|
+
commented-out `enforcement: strict` had been reading as live config.
|
|
37
|
+
- **A read-only protection-audit CLI, with a runbook naming the order (#1079).** States
|
|
38
|
+
the required sequence; never flips a setting itself.
|
|
39
|
+
- **The scope guard now emits `orchestrator.wave_dispatch.scope_checked` (#1092).** Closes
|
|
40
|
+
the ledger half that never recorded a signal-free ALLOW.
|
|
41
|
+
- **`/journey-audit` — a user-facing product audit as a repeatable skill (#1161).** Skill,
|
|
42
|
+
command and manifest template; skill/command counts measured at 48/28.
|
|
43
|
+
- **A Cursor `.mdc` parity guard that reads the directory, not a fixed list (#1093).**
|
|
44
|
+
Catches bare `PID=`/`${VAR}` IDs a name-sampling guard had missed; `priority::` swept
|
|
45
|
+
across all 5 files.
|
|
46
|
+
- **The old root now formally leaves before the new one claims it, wired at all four
|
|
47
|
+
promotion sites (#1069).** `scripts/lib/session-transition.mjs` → `leaveSourceRoot()`:
|
|
48
|
+
`deregisterSelf()` → lock-release (reusing `on-session-end`'s ownership rules) →
|
|
49
|
+
`orchestrator.session.root_left` (carries `source_root_hash`/`source_root_basename`,
|
|
50
|
+
never an absolute path — the payload also travels over the optional webhook). Review
|
|
51
|
+
found the Phase-1.2.1 promotion site had been missing the call; it is now wired at
|
|
52
|
+
session-start Phase 0.5, Phase 1.2.1, and both `parallel-aware-*` docs. A real
|
|
53
|
+
`git worktree` two-root integration test goes phantom-peer red → green.
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- **Six onboarding contradictions + a `cursor-install` TARGET guard (#1078).** First
|
|
58
|
+
production diff authored by a foreign model (composer-2.5) under mandatory Claude review.
|
|
59
|
+
- **Amber is now a documented normal state (#1062).** `docs/ci-setup.md` names it instead
|
|
60
|
+
of leaving it an unexplained CI color.
|
|
61
|
+
- **A tracked directory no longer hides an untracked hook beside it (#1158).**
|
|
62
|
+
`hooksPathIsTracked` now requires a GIT-tracked file directly under `core.hooksPath`.
|
|
63
|
+
- **`probe-stale` collapses to one vocabulary term (#1159).** A record older than 7 days
|
|
64
|
+
is `probe-stale`, severity `warn`, never a live finding; the registry remap is gone.
|
|
65
|
+
- **The scope-cap saw operators, not shell keywords (#1145).** `splitSegments` now splits
|
|
66
|
+
on keywords too, so `for t in a b c; do glab issue create; done` no longer slips a
|
|
67
|
+
compound-statement head past the cap.
|
|
68
|
+
- **A missing `.claude/rules/` was misdiagnosed as a loop (#1132).** `err.code` now
|
|
69
|
+
separates silent `ENOENT`/`ENOTDIR` from loud `EACCES`; the repeat was caller fan-out.
|
|
70
|
+
- **Two probes measured the wrong population (#1143/#1148).** One counted a whole file and
|
|
71
|
+
cited a line that had already drifted 338 lines from the finding; both scanners read the
|
|
72
|
+
filesystem instead of the git index, censoring 5 gitignored files as documentation.
|
|
73
|
+
- **Generated rules now self-verify offline (#1101).** Each carries a sha256 seal over its
|
|
74
|
+
own Evidence block instead of a learning-key into a gitignored file; 23 rules sealed,
|
|
75
|
+
fresh-clone warnings 23 → 0.
|
|
76
|
+
- **`reconcile.targets` had zero consumers (#1099).** Now wired through with a closed enum,
|
|
77
|
+
visible rejection of unknowns, and per-target path confinement.
|
|
78
|
+
- **Orphaned wave-scope files survived re-materialization (#1103).** Reconciled by
|
|
79
|
+
ownership proof now, never a blind directory wipe — two parallel sessions can share one
|
|
80
|
+
wave-N directory (PSA-003).
|
|
81
|
+
- **Two rival vendoring paths wrote the same rule file (#1060).** `rules/` is now sole SSOT
|
|
82
|
+
for PSA-001..007; `templates/_shared/rules/` is deleted.
|
|
83
|
+
- **`parseSessionId` accepted only UUIDv4; Codex mints v7 (#66/#1091).**
|
|
84
|
+
`scripts/lib/session-id.mjs` now accepts RFC-9562 v1–8 (`UUID_RE`, additive `version`
|
|
85
|
+
field — see `### Removed` below for the alias this superseded). Every SessionStart had
|
|
86
|
+
minted a fresh v4; a
|
|
87
|
+
resumed/compacted thread read its own lock as a foreign session. `hooks/on-stop.mjs` and
|
|
88
|
+
`hooks/on-session-end.mjs` now apply the writer's acceptance rule, closing a lock-leak via
|
|
89
|
+
non-UUID stdin ids.
|
|
90
|
+
- **phase-3-7a called `updateFrontmatterFieldsOnDisk(undefined, …)` (#65/#1036).**
|
|
91
|
+
`skills/session-end/phase-3-7a-recommendations.md` requires a repo root; every `/close`
|
|
92
|
+
took the fail-open path — 0 of 5 recommendation fields were ever written. The snippet now
|
|
93
|
+
binds `repoRoot` via `git rev-parse --show-toplevel`; the catch logs the cause.
|
|
94
|
+
- **Codex MCP launch resolved to `/scripts/mcp-server.sh` from non-git cwd (#64).** Codex
|
|
95
|
+
copies a marketplace plugin to
|
|
96
|
+
`~/.codex/plugins/cache/<marketplace>/session-orchestrator/<version>/` and starts the MCP
|
|
97
|
+
child with no plugin-root env var. `.mcp.json` and `scripts/lib/plugin-root.mjs` gained a
|
|
98
|
+
plugin-cache scan tier (name-matched `package.json`, newest by mtime). Codex snapshots
|
|
99
|
+
`.mcp.json` at install time — existing installs need a reinstall.
|
|
100
|
+
- **`scoring.mjs` read a flat `completion_rate` 0 of 281 records carry (#1071).** The value
|
|
101
|
+
lives under `effectiveness`, so the high-completion bonus was unreachable.
|
|
102
|
+
`resolveMemoryDir`/`buildLiveSignals` now take an explicit `repoRoot` instead of
|
|
103
|
+
`process.cwd()`.
|
|
104
|
+
- **mission-status recovery aborted on the first non-canonical body line (#1104).**
|
|
105
|
+
`scripts/lib/state-md/mission-status.mjs` now skips per line, reports skipped lines
|
|
106
|
+
(`recoverFrontmatterMissionStatusDetailed`). `setMissionStatus` refuses ids outside the
|
|
107
|
+
grammar with a stderr WARN from the on-disk wrapper.
|
|
108
|
+
- **`enterWorktree` failed with `already used by worktree` when the source branch was
|
|
109
|
+
checked out (#1067).** `scripts/lib/autopilot/worktree-pipeline.mjs` now creates
|
|
110
|
+
`so/<sessionId>` from that branch and returns `branch`/`promotedFrom`.
|
|
111
|
+
- **Phase 4a auto-promoted-worktree cleanup was dead under the #1069 process boundary.**
|
|
112
|
+
Since the promoted worktree runs as a brand-new session with its own id,
|
|
113
|
+
`detectAutoPromotedWorktree()`'s basename match against the CURRENT session id could
|
|
114
|
+
never fire post-#1069. `enterWorktree()` now writes `.orchestrator/promoted-from.json`
|
|
115
|
+
(source-root hash + basename, source session id, branch) at creation time;
|
|
116
|
+
`detectAutoPromotedWorktree()` tries this marker FIRST (`source: 'marker'`), falling back
|
|
117
|
+
to the legacy basename match (`source: 'basename'`) for pre-marker worktrees.
|
|
118
|
+
`isWorktreeClean()` discounts exactly the marker's own untracked line so the marker never
|
|
119
|
+
reads as dirty by itself. Re-promoting onto an existing `so/<sessionId>` branch now reuses
|
|
120
|
+
it (`reusedBranch: true`) or reports a typed refusal, instead of failing outright. See
|
|
121
|
+
ADR-0013.
|
|
122
|
+
- **`.mcp.json`'s bash bootstrap had silently drifted from `resolvePluginRoot()`'s tier
|
|
123
|
+
order.** The shell mirror now matches the same five env tiers in the same order, tests
|
|
124
|
+
`package.json`'s `name` field via `node -e JSON.parse(...)` instead of a substring `grep`
|
|
125
|
+
(which had matched `session-orchestrator-fork`), and ties the newest-by-mtime cache scan
|
|
126
|
+
to the same strict `-nt` comparison as the JS side. Two drift tests pin JS and shell
|
|
127
|
+
staying in sync.
|
|
128
|
+
- **`ci-status-banner.mjs` escaped control bytes in the JSON preview but not in the
|
|
129
|
+
parse-error message.** `JSON.stringify()` alone is not enough — V8 quotes the raw
|
|
130
|
+
offending input inside `SyntaxError.message`, carrying control bytes straight to the
|
|
131
|
+
terminal. `escapeControlBytes()` now covers both the preview AND `err.message`;
|
|
132
|
+
`parseCliJson()` also gained a shape-gate against `null`/`[]`/a bare `"ok"` string, all of
|
|
133
|
+
which parse as valid JSON but are not the object/array shape callers expect.
|
|
134
|
+
- **A refused mission-status write warned on only 1 of 5 call paths.**
|
|
135
|
+
`setMissionStatusDetailed()` now reports the refusal reason (e.g. `id-grammar`) to every
|
|
136
|
+
caller, and the on-disk wrapper emits the stderr WARN on all 5 paths instead of the one it
|
|
137
|
+
happened to cover before.
|
|
138
|
+
- **`check-unwired-features` exempted itself from its own edge census via its allowlist
|
|
139
|
+
string, hiding a real orphan behind it.** The `SELF_REL` self-reference correctly
|
|
140
|
+
contributes zero edges by design, but the same code path was masking that
|
|
141
|
+
`scripts/lib/webhook-url.mjs` has zero callers repo-wide — genuinely unreachable, not a
|
|
142
|
+
false positive. Follow-up issue pending to wire it in or remove it.
|
|
143
|
+
- **Three load-sensitive tests hardened with margin instead of being disabled.**
|
|
144
|
+
`tests/scripts/validate-plugin.test.mjs`'s child-process timeout moved from 30s to 120s (a
|
|
145
|
+
killed child returns `status: null`, which had read as a different failure than a real
|
|
146
|
+
one) plus a matching `hookTimeout` bump, and two further spawn-timeout assertions gained
|
|
147
|
+
the same discriminating margin between contention and a genuine failure.
|
|
148
|
+
|
|
149
|
+
### Changed
|
|
150
|
+
|
|
151
|
+
- **Host-registry census counts `semantic_session_id` (#1066).** `hooks/on-session-start.mjs`
|
|
152
|
+
falls back to `session_id` only when it is itself semantic. Before, only UUIDs were
|
|
153
|
+
projected — the n-increment discards them — so the registry contributed nothing to
|
|
154
|
+
numbering.
|
|
155
|
+
- **Session end events carry `semantic_session_id`; backfill event + supersede (#1068).**
|
|
156
|
+
`orchestrator.session.ended` / `.stopped` carry `semantic_session_id` (omitted when
|
|
157
|
+
unknown). A new `orchestrator.session.backfill_completed` event records each backfill outcome. A
|
|
158
|
+
completed record may now supersede an `abandoned` stub (append-only, `supersedes` marker).
|
|
159
|
+
Readers preferring the newest record are a follow-up.
|
|
160
|
+
- **`.semgrep.yml` regains two taint-mode rules (#1129).** `json-parse-untrusted-input` and
|
|
161
|
+
`prototype-pollution-object-assign` aimed at this repo's real trust boundary (hook stdin,
|
|
162
|
+
child-process stdout); 27 rules total. `unsafe-llm-output-rendering` stays excluded with a
|
|
163
|
+
measured reason (no DOM code).
|
|
164
|
+
|
|
165
|
+
### Removed
|
|
166
|
+
|
|
167
|
+
- **`UUID_V4_RE` removed** from `scripts/lib/session-id.mjs` — deprecated alias of
|
|
168
|
+
`UUID_RE` with zero importers repo-wide (measured @ 7daa3d2; hits in
|
|
169
|
+
`tests/telemetry/anon-id.test.mjs` and `server/ingest/validate.mjs` are unrelated local
|
|
170
|
+
constants of the same name). Use `UUID_RE`, any RFC 9562 version 1–8.
|
|
171
|
+
|
|
172
|
+
### Notes
|
|
173
|
+
|
|
174
|
+
Two of this session's diffs were authored by foreign models under the #1150 adapter —
|
|
175
|
+
#1078 by composer-2.5, #1093 by grok-4.6 — each passing mandatory Claude review before
|
|
176
|
+
landing. First production use of the foreign-dispatch path.
|
|
177
|
+
|
|
10
178
|
## [3.22.0] - 2026-08-22
|
|
11
179
|
|
|
12
180
|
Twenty commits (12 `fix`, 5 `docs`, 2 `feat`, 1 `chore`; 150 files, +17,312/−2,575), no
|