session-orchestrator 4.0.0 → 4.1.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 +3 -2
- package/.codex-plugin/skills/architecture/SKILL.md +20 -0
- package/.codex-plugin/skills/autopilot/SKILL.md +21 -0
- package/.codex-plugin/skills/autopilot/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/bootstrap/SKILL.md +22 -0
- package/.codex-plugin/skills/bootstrap/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/brainstorm/SKILL.md +22 -0
- package/.codex-plugin/skills/brainstorm/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/claude-md-drift-check/SKILL.md +17 -0
- package/.codex-plugin/skills/close/SKILL.md +21 -0
- package/.codex-plugin/skills/close/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/convergence-monitoring/SKILL.md +24 -0
- package/.codex-plugin/skills/debug/SKILL.md +21 -0
- package/.codex-plugin/skills/debug/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/discovery/SKILL.md +21 -0
- package/.codex-plugin/skills/discovery/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/dispatcher/SKILL.md +21 -0
- package/.codex-plugin/skills/dispatcher/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/docs-orchestrator/SKILL.md +20 -0
- package/.codex-plugin/skills/ecosystem-health/SKILL.md +22 -0
- package/.codex-plugin/skills/eli5/SKILL.md +21 -0
- package/.codex-plugin/skills/eli5/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/eval/SKILL.md +21 -0
- package/.codex-plugin/skills/eval/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/evolve/SKILL.md +21 -0
- package/.codex-plugin/skills/evolve/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/frontmatter-guard/SKILL.md +17 -0
- package/.codex-plugin/skills/gitlab-ops/SKILL.md +22 -0
- package/.codex-plugin/skills/gitlab-portfolio/SKILL.md +17 -0
- package/.codex-plugin/skills/go/SKILL.md +22 -0
- package/.codex-plugin/skills/go/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/grill/SKILL.md +21 -0
- package/.codex-plugin/skills/grill/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/harness-audit/SKILL.md +19 -0
- package/.codex-plugin/skills/harness-audit/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/hook-development/SKILL.md +17 -0
- package/.codex-plugin/skills/mcp-builder/SKILL.md +17 -0
- package/.codex-plugin/skills/memory-cleanup/SKILL.md +21 -0
- package/.codex-plugin/skills/memory-cleanup/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/mode-selector/SKILL.md +19 -0
- package/.codex-plugin/skills/npm-publish/SKILL.md +18 -0
- package/.codex-plugin/skills/peekaboo-driver/SKILL.md +20 -0
- package/.codex-plugin/skills/persona-panel/SKILL.md +22 -0
- package/.codex-plugin/skills/persona-panel/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/plan/SKILL.md +22 -0
- package/.codex-plugin/skills/plan/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/playwright-driver/SKILL.md +22 -0
- package/.codex-plugin/skills/portfolio/SKILL.md +21 -0
- package/.codex-plugin/skills/portfolio/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/quality-gates/SKILL.md +22 -0
- package/.codex-plugin/skills/reconcile/SKILL.md +21 -0
- package/.codex-plugin/skills/reconcile/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/release/SKILL.md +22 -0
- package/.codex-plugin/skills/release/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/remote-offload/SKILL.md +22 -0
- package/.codex-plugin/skills/repo-audit/SKILL.md +19 -0
- package/.codex-plugin/skills/repo-audit/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/session/SKILL.md +21 -0
- package/.codex-plugin/skills/session/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/session-end/SKILL.md +22 -0
- package/.codex-plugin/skills/session-plan/SKILL.md +22 -0
- package/.codex-plugin/skills/session-start/SKILL.md +22 -0
- package/.codex-plugin/skills/spinout/SKILL.md +21 -0
- package/.codex-plugin/skills/spinout/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/sunset-review/SKILL.md +21 -0
- package/.codex-plugin/skills/sunset-review/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/templates-ack/SKILL.md +21 -0
- package/.codex-plugin/skills/templates-ack/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/test/SKILL.md +21 -0
- package/.codex-plugin/skills/test/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/test-runner/SKILL.md +22 -0
- package/.codex-plugin/skills/tmux-layout/SKILL.md +23 -0
- package/.codex-plugin/skills/using-orchestrator/SKILL.md +19 -0
- package/.codex-plugin/skills/vault-mirror/SKILL.md +17 -0
- package/.codex-plugin/skills/vault-sync/SKILL.md +17 -0
- package/.codex-plugin/skills/wave-executor/SKILL.md +22 -0
- package/.codex-plugin/skills/write-executable-plan/SKILL.md +24 -0
- package/{plugin.json → .cursor-plugin/plugin.json} +5 -2
- package/CHANGELOG.md +213 -1
- package/README.md +70 -58
- package/commands/release.md +4 -4
- package/docs/codex-setup.md +43 -9
- package/docs/components.md +3 -2
- package/docs/instruction-delivery.md +12 -5
- package/docs/migration-v4.md +33 -9
- package/hooks/_lib/hook-import-set.json +4 -3
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks.json +1 -1
- package/hooks/on-stop.mjs +25 -4
- package/package.json +2 -2
- package/scripts/ci/assert-coverage-green.mjs +100 -0
- package/scripts/generate-codex-skills.mjs +246 -0
- package/scripts/generate-hook-import-set.mjs +51 -8
- package/scripts/lib/codex/plugin-contract.mjs +6 -0
- package/scripts/lib/config/host-paths.mjs +20 -4
- package/scripts/lib/events.mjs +3 -3
- package/scripts/lib/gates/gate-full.mjs +7 -3
- package/scripts/lib/owner-config-banner.mjs +7 -9
- package/scripts/lib/owner-yaml.mjs +8 -1
- package/scripts/lib/plugin-update-banner.mjs +10 -2
- package/scripts/lib/project-hygiene.mjs +182 -6
- package/scripts/lib/reconcile/engine.mjs +38 -7
- package/scripts/lib/session-identity/own-session.mjs +24 -13
- package/scripts/lib/session-schema/constants.mjs +38 -11
- package/scripts/lib/session-start-probes.mjs +12 -0
- package/scripts/lib/telemetry/schema.mjs +39 -18
- package/scripts/lib/telemetry-flush-health-banner.mjs +211 -0
- package/scripts/lib/validate/check-codex-skills.mjs +191 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +107 -62
- package/scripts/lib/validate/check-skill-links.mjs +37 -7
- package/scripts/lib/validate/check-test-git-config-target.mjs +192 -12
- package/scripts/lib/validate/check-unwired-features.mjs +163 -13
- package/scripts/lib/validate/confidential-names.mjs +95 -30
- package/scripts/lib/validate/repo-files.mjs +48 -14
- package/scripts/lib/vault-mirror/render-sessions.mjs +8 -1
- package/scripts/release.mjs +141 -29
- package/scripts/site-numbers.mjs +344 -8
- package/scripts/validate-plugin.mjs +3 -0
- package/skills/session-start/SKILL.md +2 -2
- package/skills/session-start/references/phase-4-ssot-environment-check.md +5 -0
- package/skills/vault-sync/SKILL.md +10 -0
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
metadata:
|
|
5
|
+
user-invocable: 'false'
|
|
6
|
+
tags: test, orchestrator, e2e, ux
|
|
7
|
+
model: sonnet
|
|
8
|
+
model-preference: sonnet
|
|
9
|
+
model-preference-codex: gpt-5.4
|
|
10
|
+
model-preference-cursor: claude-sonnet-4-6
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
14
|
+
|
|
15
|
+
# test-runner
|
|
16
|
+
|
|
17
|
+
Read [`skills/test-runner/SKILL.md`](../../../skills/test-runner/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
18
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
19
|
+
|
|
20
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
21
|
+
|
|
22
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
metadata:
|
|
5
|
+
model: inherit
|
|
6
|
+
color: cyan
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Read
|
|
9
|
+
- Bash
|
|
10
|
+
- Grep
|
|
11
|
+
- Glob
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
15
|
+
|
|
16
|
+
# tmux-layout
|
|
17
|
+
|
|
18
|
+
Read [`skills/tmux-layout/SKILL.md`](../../../skills/tmux-layout/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
19
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
20
|
+
|
|
21
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
22
|
+
|
|
23
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
metadata:
|
|
5
|
+
user-invocable: 'false'
|
|
6
|
+
tags: dispatch, meta, routing, auto-skill
|
|
7
|
+
model: haiku
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
11
|
+
|
|
12
|
+
# using-orchestrator
|
|
13
|
+
|
|
14
|
+
Read [`skills/using-orchestrator/SKILL.md`](../../../skills/using-orchestrator/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
15
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
16
|
+
|
|
17
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
18
|
+
|
|
19
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
metadata:
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
9
|
+
|
|
10
|
+
# vault-mirror
|
|
11
|
+
|
|
12
|
+
Read [`skills/vault-mirror/SKILL.md`](../../../skills/vault-mirror/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
13
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
14
|
+
|
|
15
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
16
|
+
|
|
17
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
metadata:
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
9
|
+
|
|
10
|
+
# vault-sync
|
|
11
|
+
|
|
12
|
+
Read [`skills/vault-sync/SKILL.md`](../../../skills/vault-sync/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
13
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
14
|
+
|
|
15
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
16
|
+
|
|
17
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
metadata:
|
|
5
|
+
user-invocable: 'false'
|
|
6
|
+
tags: orchestration, execution, agents, waves
|
|
7
|
+
model: inherit
|
|
8
|
+
model-preference: opus
|
|
9
|
+
model-preference-codex: gpt-5.4-mini
|
|
10
|
+
model-preference-cursor: claude-sonnet-4-6
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
14
|
+
|
|
15
|
+
# wave-executor
|
|
16
|
+
|
|
17
|
+
Read [`skills/wave-executor/SKILL.md`](../../../skills/wave-executor/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
18
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
19
|
+
|
|
20
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
21
|
+
|
|
22
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
metadata:
|
|
5
|
+
model: inherit
|
|
6
|
+
color: green
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Read
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
- Bash
|
|
12
|
+
- Write
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
16
|
+
|
|
17
|
+
# write-executable-plan
|
|
18
|
+
|
|
19
|
+
Read [`skills/write-executable-plan/SKILL.md`](../../../skills/write-executable-plan/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
20
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
21
|
+
|
|
22
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
23
|
+
|
|
24
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
2
|
"name": "session-orchestrator",
|
|
4
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.0",
|
|
5
4
|
"description": "Loop engineering for AI coding agents — turn ad-hoc sessions into a repeatable research → plan → wave-execute → close loop with verification gates. Runs on Claude Code, Codex CLI, Cursor, and Pi.",
|
|
6
5
|
"author": {
|
|
7
6
|
"name": "Bernhard Goetzendorfer"
|
|
@@ -23,5 +22,9 @@
|
|
|
23
22
|
"pi"
|
|
24
23
|
],
|
|
25
24
|
"skills": "./skills/",
|
|
25
|
+
"rules": [],
|
|
26
|
+
"agents": [],
|
|
27
|
+
"commands": [],
|
|
28
|
+
"hooks": { "hooks": {} },
|
|
26
29
|
"mcpServers": "./.mcp.json"
|
|
27
30
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,217 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [4.1.0] - 2026-09-08
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- The owner-privacy scanner accepts `--include-untracked` to check new files before staging while respecting Git ignore rules. Tracked-only remains the default (#1267).
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Privacy scanning includes MDX and preserves filenames containing Unicode or newlines. Failure output includes the scanned-file count, and the pre-commit regression verifies that an unavailable confidential-name policy blocks the commit (#1267, #1269).
|
|
19
|
+
- Native Codex `CODEX_THREAD_ID` now participates in process-confirmed session ownership and event attribution. Explicit harness selection prevents inherited IDs from proving ownership; ambiguous IDs remain unconfirmed. Test workers isolate the invoking harness's identity (#1274).
|
|
20
|
+
- GitHub release recovery prints commands with the exact repository and tag, retains failed-create notes for retry, and inspects uncertain release state before any creation (#1095).
|
|
21
|
+
- CI audit detection examines executable GitHub steps and GitLab jobs, recognizes package-manager options and supported wrappers, and excludes metadata, comments, unused templates and help-only invocations. Local GitLab references, inheritance and `spec:inputs` headers are supported; external includes and dynamic conditions remain outside this heuristic (#1040).
|
|
22
|
+
- Vault session notes render lifecycle agent counts, preserve measured zero, and label counts known only as completed or planned (#1276).
|
|
23
|
+
- Guide copy buttons stay beside their command blocks, including multiline snippets and narrow screens (#1275).
|
|
24
|
+
- Full-repository validation runs once before Vitest workers start, and its result is shared by the existing smoke assertions. This avoids four competing scans during coverage while retaining mandatory validation and failure propagation (#1278).
|
|
25
|
+
- Coverage verification now requires generated reports and compares structured measurements with the canonical Vitest thresholds before writing its verified marker. Missing artifacts and low coverage previously passed through shell conditions that did not stop the CI job (#1279).
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- README, English/German landing pages, guide and machine-readable summaries now agree on installation prerequisites, active plugin-cache selection, Codex command skills, Pi package management, platform-specific enforcement and update-cache behavior (#1275).
|
|
30
|
+
- Refreshed distribution evidence and submission drafts, corrected stable repository steering, and recorded the product-quality review with Chrome and backlog evidence (#824, #1080).
|
|
31
|
+
- Release instructions now place the fully green preflight after commit, both remote pushes and exact-commit CI, matching the executable gate's requirements (#1277).
|
|
32
|
+
|
|
33
|
+
## [4.0.1] - 2026-09-07
|
|
34
|
+
|
|
35
|
+
A PATCH release, two work streams. Codex CLI command entrypoints (closing Epic #1263 and
|
|
36
|
+
sub-issues #1264/#1265/#1266) make every `commands/*.md` and `skills/*/SKILL.md` entry
|
|
37
|
+
discoverable and selectable inside Codex. A 5-wave mechanical-fix session (7 Discovery + 12
|
|
38
|
+
Impl-Core + 5 Impl-Polish + a 4-reviewer/Codex-gpt-6-astra Quality panel with 5 fixers) closes
|
|
39
|
+
16 follow-up issues surfaced by the `4.0.0` 360° audit. The site redesign already staged in
|
|
40
|
+
`[Unreleased]` (session-orchestrator.com relaunch, closing GitLab #1237 and #1080 points
|
|
41
|
+
1/3/5/6/7) folds in unchanged below as `### Changed`.
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
- **Codex command workflows are now discoverable and selectable skills — 51 unique generated
|
|
46
|
+
entries (25 command-backed, 26 skill-backed), closing an 8-command discovery gap (`close`,
|
|
47
|
+
`go`, `harness-audit`, `portfolio`, `release`, `session`, `templates-ack`, `test`) and
|
|
48
|
+
resolving 17 same-name command/skill overlaps in the command's favor (`cf0876c3`, Refs
|
|
49
|
+
#1263/#1264/#1265/#1266).** `scripts/generate-codex-skills.mjs` builds `.codex-plugin/skills/`
|
|
50
|
+
as the union of `commands/` and `skills/` names; each generated entry links via a
|
|
51
|
+
package-relative path to its canonical `commands/<name>.md` or `skills/<name>/SKILL.md`, so it
|
|
52
|
+
resolves from the installed bundle, not only the source checkout. Command adapters read the
|
|
53
|
+
full canonical command before resolving any internal skill call directly, avoiding recursive
|
|
54
|
+
dispatch back to the public entry. Trailing prompt text passes through as `$ARGUMENTS` — no
|
|
55
|
+
shell expansion, no global substitution.
|
|
56
|
+
- **`disable-model-invocation: true` now maps to `agents/openai.yaml`
|
|
57
|
+
`policy.allow_implicit_invocation: false`, so `go`, `close`, `bootstrap`, `brainstorm`, `plan`,
|
|
58
|
+
and `release` keep requiring explicit selection under Codex too (`cf0876c3`, Refs
|
|
59
|
+
#1263/#1264).** All other commands retain their source setting.
|
|
60
|
+
- **`scripts/lib/validate/check-codex-skills.mjs` independently re-derives the expected Codex
|
|
61
|
+
surface from the emitted artifacts, not from the generator's own expected text, and is wired
|
|
62
|
+
into `scripts/validate-plugin.mjs` (`cf0876c3`, Refs #1263/#1265).** It checks source-name
|
|
63
|
+
coverage, manifest registration, frontmatter/metadata types, invocation-policy booleans, and
|
|
64
|
+
canonical-link targets; its CLI also re-runs `generate-codex-skills.mjs --check`.
|
|
65
|
+
- **Native Codex `commands: []` now suppresses the installer's automatic `commands/` migration
|
|
66
|
+
(`ae16dfcb`, Refs #1263/#1265/#1266).** Without it, a real install on Codex 0.153.3 added nine
|
|
67
|
+
`source-command-*` aliases (including `source-command-close`) beside the generated entries,
|
|
68
|
+
with no invocation policy attached. `scripts/lib/codex/plugin-contract.mjs` now requires
|
|
69
|
+
`commands` to be an empty array when present.
|
|
70
|
+
- **The root `plugin.json` (added in 4.0.0) is replaced by `.cursor-plugin/plugin.json`,
|
|
71
|
+
Cursor's native manifest format (`cf0876c3`, Refs #1263/#1264).** Read-only `plugin/read`
|
|
72
|
+
probes on Codex CLI 0.153.3 and desktop 0.153.4 found the root Agent Plugins manifest
|
|
73
|
+
overrides Codex's own declared skill path (fixing it to `./skills`) and root version —
|
|
74
|
+
silently defeating the generated `.codex-plugin/skills/` surface even though every adapter
|
|
75
|
+
unit test passed. `package.json` `files[]` and `scripts/release.mjs`'s version-surface table
|
|
76
|
+
are updated accordingly (`.cursor-plugin/` added, root `plugin.json` removed).
|
|
77
|
+
- **Installed acceptance verified end to end (`3862505c`, `a244b870`, Refs #1263/#1266).**
|
|
78
|
+
Public `codex plugin add session-orchestrator@local --json` produced enabled version
|
|
79
|
+
`4.0.0+codex.20260907174300`; Codex desktop 0.153.4 returns exactly 51 unique enabled skills
|
|
80
|
+
via both `plugin/read` and `skills/list`, no migration aliases, and all six explicit-only
|
|
81
|
+
commands retain `allow_implicit_invocation: false`. Visible-picker selection is **not yet
|
|
82
|
+
confirmed** — Computer Use cannot drive the Codex desktop app — and remains open under #1266
|
|
83
|
+
(see Notes).
|
|
84
|
+
- **Documented the Codex command entrypoints across `README.md`, `docs/codex-setup.md`,
|
|
85
|
+
`docs/components.md`, `docs/migration-v4.md`, and `docs/instruction-delivery.md` (`cf0876c3`,
|
|
86
|
+
Refs #1263/#1266).**
|
|
87
|
+
|
|
88
|
+
### Changed
|
|
89
|
+
|
|
90
|
+
- Public website redesigned (session-orchestrator.com): light-first design in the family look of the author's personal site (Bricolage Grotesque, Source Sans 3, IBM Plex Mono, all self-hosted; Archivo removed).
|
|
91
|
+
- Two reading layers on the landing page: a plain-words layer for non-developers above a developer layer with install commands, the wave schedule, and the measured-claims table.
|
|
92
|
+
- German landing page at `/de` with `hreflang` alternates (`en`, `de`, `x-default`), same section ids and census spans as the English page.
|
|
93
|
+
- three.js hero (vendored `three@0.185.1`, two files: `three.module.min.js` + `three.core.min.js`), loaded via a lazy dynamic import skipped under `prefers-reduced-motion`, which renders the static `hero-fallback.svg` instead.
|
|
94
|
+
- Six AI-generated illustrations (gpt-image-2), each captioned "AI-generated illustration (gpt-image-2)" in EN/DE.
|
|
95
|
+
- FAQ section with `FAQPage` JSON-LD on both the EN and DE landing pages.
|
|
96
|
+
- Author block linking to the personal site (root + `utm_source=session-orchestrator`), closing GitLab #1237.
|
|
97
|
+
- `scripts/site-numbers.mjs` gained `npm-downloads-30d` and `github-stars`: fetched only under `--write` (5 s timeout, snapshot kept on failure), answered from the `site/_census.json` snapshot under `--check`; `SO_SITE_NUMBERS_OFFLINE=1` skips both metrics. Marker-bounded census blocks (`<!-- census:start -->` / `<!-- census:end -->`) added to `site/llms.txt` and `site/llms-full.txt` (GitLab #1080, points 1/3/5/6/7).
|
|
98
|
+
- New tests: `tests/site/voice-gate.test.mjs` (em-dash, superlative, "we", emoji gate) and `tests/site/structure.test.mjs` (EN/DE parity, hreflang, asset presence, AI-illustration disclosure).
|
|
99
|
+
- `vercel.json` cache headers for `/assets`, `/img`, `/vendor`; ESLint now ignores `site/vendor/**` (vendored three.js) and declares browser globals for `site/assets/**`.
|
|
100
|
+
|
|
101
|
+
### Fixed
|
|
102
|
+
|
|
103
|
+
- **`CHANGELOG.md`'s `[4.0.0]` entry and `docs/migration-v4.md` corrected two overclaims found
|
|
104
|
+
by post-tag review (`a4315993`).** `package.json` `files[]` admits the whole
|
|
105
|
+
`.orchestrator/policy/` directory, not a curated file list — the packlist test, not npm, is
|
|
106
|
+
what pins the shipped set to the tracked set. `pi-install.mjs --settings-only` actually
|
|
107
|
+
**rewrites** an existing Pi settings file (upsert), unlike `cursor-install.mjs`, which skips
|
|
108
|
+
existing destinations. Note for readers of the published `v4.0.0` tag: this correction lands
|
|
109
|
+
after that tag, so the tagged CHANGELOG text still carries the two overclaims — only `main`
|
|
110
|
+
and `4.0.1` have the corrected wording.
|
|
111
|
+
- **`tests/scripts/site-numbers.test.mjs` fixtures run offline
|
|
112
|
+
(`SO_SITE_NUMBERS_OFFLINE=1`) (`4ea84d3e`).** Without it, the census-block tests fetched live
|
|
113
|
+
npm download counts and went red whenever the live count moved past the fixture snapshot
|
|
114
|
+
(measured in CI 2026-09-07: 1237 vs. 1165).
|
|
115
|
+
- **`tests/lib/validate/check-auq-clarity.test.mjs` gets a 120 s hook timeout for its
|
|
116
|
+
`validate-plugin.mjs` spawn in `beforeAll` (`19b66e6e`).** GitLab pipelines 8790 and 8791
|
|
117
|
+
(2026-09-07) failed only here: the shared runner exceeded vitest's default 30 s `hookTimeout`
|
|
118
|
+
running the full validator (~12 s locally). Aligns with the sibling
|
|
119
|
+
`tests/scripts/validate-plugin.test.mjs`.
|
|
120
|
+
|
|
121
|
+
#### 4.0.1 — mechanical-fix session (16 follow-up issues from the 4.0.0 audit)
|
|
122
|
+
|
|
123
|
+
- **Reconcile-idempotency now has a contract and a regression test, not just a claim (#1242).**
|
|
124
|
+
Discovery found the acceptance criterion already held — tracked Provenance markers already
|
|
125
|
+
dedupe re-runs, a fresh-clone simulation regenerated 0 of 30 keys — so the delivered fix is a
|
|
126
|
+
contract doc (the scan is authoritative, the sidecar is a cache) plus a mutation-proven
|
|
127
|
+
fresh-clone consolidated-shape test, not new production code.
|
|
128
|
+
- **`check-unwired-features.mjs`'s Category S4 no longer conflates "genuinely unreachable" with
|
|
129
|
+
"reachable only via coordinator dispatch" (#1239).** Discovery measured 52 raw S4 findings, 46
|
|
130
|
+
of them (88.5%) false positives — modules invoked only through a coordinator `Task`/skill
|
|
131
|
+
dispatch, never a static import. S4 now splits into 5 truly-unreachable findings and 46
|
|
132
|
+
coordinator-invoked findings reported as advisory rather than blocking, with `skills/`
|
|
133
|
+
recognised as a first-class reachability edge source; a same-wave fix-pass tightened the
|
|
134
|
+
coordinator-invoked match to token boundaries (a Codex-repro case where a bare substring match
|
|
135
|
+
over-matched) and dropped the advisory line's WARN severity per `host-resources.md` HR-101.
|
|
136
|
+
The check's exit code is unchanged.
|
|
137
|
+
- **`inspectConfidentialNames()` is a new function; `loadConfidentialNames()` keeps its 4.0.0
|
|
138
|
+
`string[] | null` public contract (#1250).** This session's own Wave-2 refactor had changed
|
|
139
|
+
`loadConfidentialNames()`'s return shape to an object — a semver-breaking change the Wave-4
|
|
140
|
+
review panel and Codex gpt-6-astra both caught before the cut, not after. The fix reinstates
|
|
141
|
+
`loadConfidentialNames()` as a thin wrapper over the richer `inspectConfidentialNames()`. A new
|
|
142
|
+
`'all-dropped'` status (every entry in the confidential-names file invalid) now fails closed
|
|
143
|
+
instead of silently returning an empty list, and the loader's WARN on a missing/malformed file
|
|
144
|
+
is redacted to the file's basename — the same fix-pass had regressed the full path into
|
|
145
|
+
stderr, reopening the class of leak `check-owner-leakage.mjs` exists to prevent; found and
|
|
146
|
+
fixed inside this session's own review cycle, before release.
|
|
147
|
+
- **`loadHostPaths()` no longer loads `owner.yaml` twice (#1251).** Health-check state now
|
|
148
|
+
passes through from the caller's single load instead of triggering a second read.
|
|
149
|
+
- **Four small fixes under #1262: an env-configured standalone confidential-names copy now fails
|
|
150
|
+
closed instead of passing through silently (point 2); `docs/migration-v4.md` gained rollback
|
|
151
|
+
prose (point 3); `OPTIONAL_OBJECT_SECTIONS` is now an exported constant with a parity test,
|
|
152
|
+
replacing a duplicated mirror list (point 4); a stale comment on the full quality-gate path was
|
|
153
|
+
corrected (point 5).** Point 1 (a Codex-surface regeneration check) was dropped — Discovery
|
|
154
|
+
measured the existing set-equality pack test as the stronger pin, so no code change was needed.
|
|
155
|
+
- **`VALID_SESSION_PROFILES` moved to a single source of truth in
|
|
156
|
+
`scripts/lib/session-schema/constants.mjs`, with `SHARED_LIST_BOUNDS`/`INGEST_LIST_BOUNDS`
|
|
157
|
+
parity enforced (#1252).** A re-export shim stayed at the old location for compatibility,
|
|
158
|
+
pinned by an identity test.
|
|
159
|
+
- **Four git-fixture files and the two largest `rmSync` call sites now route through a shared
|
|
160
|
+
tmp-fixture helper instead of ad hoc cleanup; `listRepoFiles()` now swallows only
|
|
161
|
+
`ENOENT`/`ENOTDIR`, not every error (#1253).** This is a partial pass, not a sweep: 501 bare
|
|
162
|
+
**recursive** `rmSync` call sites remain unrouted (574 claimed → 524 measured → 501 after this
|
|
163
|
+
session) and are carried forward as #1268 with a Revisit-Trigger, not silently left
|
|
164
|
+
unmentioned.
|
|
165
|
+
- **`check-skill-links.mjs` now scans `docs/` (previously skill/command files only), takes a
|
|
166
|
+
`dirs` option, and right-anchors its GitLab `-/issues` carve-out (#1258).** The carve-out was
|
|
167
|
+
previously unanchored and could match a URL fragment elsewhere in a line. Two dangling
|
|
168
|
+
documentation links were repaired, both pointing at content that had moved to the vault
|
|
169
|
+
archive.
|
|
170
|
+
- **An unknown or valueless CLI flag on `generate-hook-import-set.mjs` now exits 2 with a usage
|
|
171
|
+
message instead of triggering the write (#1249).** `--out --check` no longer writes a file
|
|
172
|
+
literally named `--check` — the argv loop had read `--check` as `--out`'s value.
|
|
173
|
+
- **A platform allowlist check now uses `Object.hasOwn()` (#1256).** Discovery's companion claim
|
|
174
|
+
in the same issue — that a related export was dead code — was checked against real call sites
|
|
175
|
+
and refuted; that half closes as "working as designed".
|
|
176
|
+
- **Desktop notifications now carry a platform-aware label (#1254).** `detectPlatform()` drives
|
|
177
|
+
the OSC notify text so a Codex CLI session's notification reads differently from a Claude Code
|
|
178
|
+
session's.
|
|
179
|
+
- **A new session-start probe, `telemetry-flush-health`, surfaces telemetry-sender problems that
|
|
180
|
+
were previously silent (#1255).** It tail-reads the last `orchestrator.telemetry.flush` event:
|
|
181
|
+
a `sandbox:*` refusal reason now renders as a WARN banner instead of nothing, and an
|
|
182
|
+
unreadable ledger renders explicitly as `ledger-unreadable` rather than falling through to
|
|
183
|
+
silence. The reason string is bounded to 120 characters with control characters stripped.
|
|
184
|
+
- **The tests:src ratio census now resolves calls made through `fixtureGit`/`fixtureGitSpawn`
|
|
185
|
+
wrappers, including the `NO_BACKGROUND_WRITER` spread pattern, and strips comments before
|
|
186
|
+
reading a wrapped call's second positional argument (#1259).** Applicable call sites rose from
|
|
187
|
+
17 to 200 (measured 2026-09-07 on the release tree with
|
|
188
|
+
`node scripts/lib/validate/check-test-git-config-target.mjs .`) — the tokenizer previously
|
|
189
|
+
couldn't see wrapper calls at all — and the reporting floor was raised from 20 to 100 to match.
|
|
190
|
+
- **Four tests now pin Node 24's `err.url` behaviour using a real spawned `node` child process,
|
|
191
|
+
not an in-process `vitest` failure (#1260).** An in-process `ERR_MODULE_NOT_FOUND` never
|
|
192
|
+
carries a `url` field, so the previous test could not observe the behaviour it claimed to pin.
|
|
193
|
+
The standalone single-file copy path is confirmed inert / fails closed for the same case.
|
|
194
|
+
- **A Discovery premise was refuted before any code changed (#1257).** `vault-sync`'s
|
|
195
|
+
sub-package dependency pins looked accidental; they are intentional, because CI already
|
|
196
|
+
installs the sub-package separately. Documented in `skills/vault-sync/SKILL.md` §
|
|
197
|
+
Dependencies instead of "fixed".
|
|
198
|
+
- **`release.mjs`'s drift sweep now judges version literals as whole tokens and skips comment
|
|
199
|
+
prose and lockfile dependency rows; its history allowlist admits nine files whose only literal
|
|
200
|
+
is prose history of the 4.0.0 major (`CLAUDE.md`, its generated twin `AGENTS.md`,
|
|
201
|
+
`CONTRIBUTING.md`, `NOTICE`, `.husky/pre-push`, `site/llms-full.txt`,
|
|
202
|
+
`skills/architecture/references/domain-model.md`, `skills/autopilot/SKILL.md`,
|
|
203
|
+
`templates/_shared/journey-manifest.md`).** Measured 2026-09-07 mid-release: `4.0.0` matched
|
|
204
|
+
inside `>=24.0.0` in package.json, 72 third-party rows in package-lock.json, and `// pre-4.0.0`
|
|
205
|
+
comments — none a version surface. The sweep's detail line now carries the total hit count
|
|
206
|
+
instead of truncating at five, which is how the last four files had stayed hidden.
|
|
207
|
+
|
|
208
|
+
### Notes
|
|
209
|
+
|
|
210
|
+
- **4.0.1 is a PATCH: no public export changed shape.** `loadConfidentialNames()` keeps its
|
|
211
|
+
`string[] | null` contract; the new exports (`inspectConfidentialNames`, `SHARED_LIST_BOUNDS`,
|
|
212
|
+
`INGEST_LIST_BOUNDS`, `OPTIONAL_OBJECT_SECTIONS`, `stripComments`, `wrapperHasCwd`,
|
|
213
|
+
`checkTelemetryFlushHealth`, `renderBanner`, `TAIL_BYTES`, and `VALID_SESSION_PROFILES` in
|
|
214
|
+
`constants.mjs`) are additive. Reviewed by a 4-reviewer panel plus Codex gpt-6-astra on the
|
|
215
|
+
packed tarball; 2 P1 + 3 P2 Codex findings were fixed before the cut, not after.
|
|
216
|
+
- **Visible Codex picker confirmation (#1266) remains an operator step; not a release gate.**
|
|
217
|
+
- **The telemetry ingest server was redeployed for this release (#1261).** Operational step, not
|
|
218
|
+
a code change — rollback tag `telemetry-ingest:1.0.0-pre401` kept in place; health confirmed
|
|
219
|
+
post-restart.
|
|
220
|
+
|
|
10
221
|
## [4.0.0] - 2026-09-06
|
|
11
222
|
|
|
12
223
|
> **A MAJOR, because public surfaces are REMOVED** (see *Removed (BREAKING)* below).
|
|
@@ -978,7 +1189,8 @@ manual cleanup steps: [`docs/migration-v4.md`](docs/migration-v4.md).
|
|
|
978
1189
|
`npm pack --dry-run`, not a mock). The release leakage gate's `.orchestrator/`
|
|
979
1190
|
exclusion is narrowed to carve THIS directory back IN (`scripts/release.mjs`
|
|
980
1191
|
around line 319) — the operator's own `metrics/`, `debug/` artefacts and live
|
|
981
|
-
`*.lock` files stay excluded
|
|
1192
|
+
`*.lock` files stay excluded. `files[]` admits the directory, not a file list — what
|
|
1193
|
+
keeps the shipped set equal to the TRACKED policy set is the packlist test below, not npm. **The
|
|
982
1194
|
Wave-4 review panel found this test asserted only a FLOOR (≥ 6 files) while
|
|
983
1195
|
`package.json`'s `files[]` admits the WHOLE `.orchestrator/policy/` directory
|
|
984
1196
|
and the carve-out above matched the path anywhere in the string, not just at
|