session-orchestrator 3.20.0 → 3.22.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/rules/000-session-orchestrator.mdc +3 -2
- package/.cursor/rules/030-wave-execution.mdc +10 -8
- package/.cursor/rules/040-discovery.mdc +6 -6
- package/.cursor/rules/050-plan.mdc +8 -8
- package/CHANGELOG.md +515 -0
- package/README.md +16 -11
- package/agents/analyst.md +1 -1
- package/agents/architect-reviewer.md +1 -1
- package/agents/code-implementer.md +4 -2
- package/agents/db-specialist.md +1 -1
- package/agents/dialectic-deriver.md +1 -1
- package/agents/docs-writer.md +1 -1
- package/agents/memory-proposal-collector.md +7 -5
- package/agents/qa-strategist.md +1 -1
- package/agents/security-reviewer.md +1 -1
- package/agents/session-reviewer.md +42 -1
- package/agents/skill-applied-judge.md +1 -1
- package/agents/test-writer.md +1 -1
- package/agents/ui-developer.md +1 -1
- package/agents/ux-evaluator.md +1 -1
- package/commands/eli5.md +33 -0
- package/commands/release.md +62 -0
- package/commands/test.md +2 -2
- package/docs/components.md +6 -5
- package/docs/migration-v3.md +9 -6
- package/docs/persona-panel.md +3 -1
- package/docs/scope-collision-guard.md +167 -0
- package/docs/session-config-reference.md +31 -8
- package/hooks/_lib/lock-bootstrap.mjs +19 -13
- package/hooks/enforce-scope.mjs +103 -3
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks.json +21 -1
- package/hooks/on-session-end.mjs +76 -97
- package/hooks/on-session-start.mjs +195 -104
- package/hooks/on-stop.mjs +127 -12
- package/hooks/post-bash-write-verify.mjs +8 -32
- package/hooks/pre-auq-clarity.mjs +787 -0
- package/hooks/pre-bash-issue-budget.mjs +17 -18
- package/hooks/pre-task-scope-disjoint.mjs +1042 -0
- package/package.json +3 -1
- package/pi/prompts/eli5.md +12 -0
- package/pi/prompts/release.md +12 -0
- package/scripts/auq-audit.mjs +825 -0
- package/scripts/autopilot.mjs +10 -9
- package/scripts/emit-session.mjs +42 -0
- package/scripts/export-hw-learnings.mjs +61 -2
- package/scripts/lib/auq/clarity.mjs +1314 -0
- package/scripts/lib/auq/parse.mjs +1006 -0
- package/scripts/lib/auq/schema.mjs +1457 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +5 -5
- package/scripts/lib/backlog-scan.mjs +106 -15
- package/scripts/lib/build-live-signals.mjs +7 -3
- package/scripts/lib/ci-status-banner.mjs +267 -77
- package/scripts/lib/config/dispatcher-autonomy-capture.mjs +32 -9
- package/scripts/lib/config/vault-integration.mjs +12 -1
- package/scripts/lib/dispatcher/rank.mjs +4 -7
- package/scripts/lib/gates/gate-full.mjs +3 -3
- package/scripts/lib/gates/gate-helpers.mjs +17 -6
- package/scripts/lib/git-config-drift.mjs +471 -0
- package/scripts/lib/harness-audit/categories/category6.mjs +65 -12
- package/scripts/lib/io.mjs +432 -7
- package/scripts/lib/issue-budget.mjs +63 -9
- package/scripts/lib/learnings/select.mjs +157 -3
- package/scripts/lib/memory-cleanup-stamp.mjs +132 -8
- package/scripts/lib/mirror-issues-banner.mjs +266 -0
- package/scripts/lib/named-vault-resolver.mjs +105 -16
- package/scripts/lib/owner-interview.mjs +78 -32
- package/scripts/lib/peer-cards/schema.mjs +6 -2
- package/scripts/lib/peer-discovery.mjs +73 -22
- package/scripts/lib/project-hygiene.mjs +64 -4
- package/scripts/lib/reconcile/renderer.mjs +17 -4
- package/scripts/lib/reconcile/writer.mjs +69 -30
- package/scripts/lib/redact-spans.mjs +89 -0
- package/scripts/lib/resource-probe/evaluate.mjs +330 -149
- package/scripts/lib/resource-probe/probe-platform.mjs +35 -0
- package/scripts/lib/resource-probe.mjs +18 -2
- package/scripts/lib/scope-baseline.mjs +77 -17
- package/scripts/lib/scope-gate.mjs +658 -0
- package/scripts/lib/secret-masker.mjs +262 -0
- package/scripts/lib/session-lock.mjs +34 -10
- package/scripts/lib/session-registry.mjs +9 -1
- package/scripts/lib/spiral-carryover.mjs +23 -2
- package/scripts/lib/state-md/mission-status.mjs +164 -58
- package/scripts/lib/tmux-layout/vcs-detector.mjs +108 -4
- package/scripts/lib/validate/check-agents.mjs +77 -5
- package/scripts/lib/validate/check-auq-clarity.mjs +274 -0
- package/scripts/lib/validate/check-commands.mjs +2 -20
- package/scripts/lib/validate/check-doc-cli-commands.mjs +514 -0
- package/scripts/lib/validate/check-hooks-symmetry.mjs +48 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +185 -17
- package/scripts/lib/validate/check-rules.mjs +153 -9
- package/scripts/lib/validate/check-skills.mjs +191 -0
- package/scripts/lib/validate/check-test-git-config-target.mjs +665 -0
- package/scripts/lib/validate/check-unicode-safety.mjs +22 -2
- package/scripts/lib/validate/check-untracked-test-deps.mjs +925 -0
- package/scripts/lib/validate/check-unwired-features.mjs +219 -11
- package/scripts/lib/validate/check-vcs-repo-flag.mjs +965 -0
- package/scripts/lib/validate/frontmatter-block.mjs +61 -0
- package/scripts/lib/validate/tier-inference.mjs +46 -8
- package/scripts/lib/vault-backfill/glab.mjs +91 -58
- package/scripts/lib/vault-backfill/manifest.mjs +28 -8
- package/scripts/lib/vault-mirror/namespace.mjs +146 -1
- package/scripts/lib/vault-mirror/process.mjs +264 -31
- package/scripts/lib/vault-mirror/render-sessions.mjs +115 -4
- package/scripts/lib/vault-status/board-writer.mjs +300 -56
- package/scripts/lib/vault-status/narrative-mirror.mjs +119 -5
- package/scripts/lib/vcs-repo-spec.mjs +680 -30
- package/scripts/lib/wave-resource-gate.mjs +67 -73
- package/scripts/materialize-wave-scope.mjs +281 -0
- package/scripts/print-learnings-index.mjs +30 -3
- package/scripts/release.mjs +983 -107
- package/scripts/run-quality-gate.mjs +14 -0
- package/scripts/site-numbers.mjs +1049 -0
- package/scripts/validate-plugin.mjs +64 -0
- package/scripts/validate-wave-scope.mjs +286 -12
- package/scripts/vault-backfill.mjs +32 -5
- package/scripts/vault-mirror.mjs +26 -1
- package/skills/_shared/monitor-patterns.md +24 -4
- package/skills/_shared/parallel-aware-auq.md +30 -24
- package/skills/_shared/parallel-aware-preamble.md +31 -2
- package/skills/_shared/state-ownership.md +49 -6
- package/skills/bootstrap/SKILL.md +2 -1
- package/skills/brainstorm/SKILL.md +18 -18
- package/skills/brainstorm/soul.md +12 -0
- package/skills/claude-md-drift-check/SKILL.md +9 -1
- package/skills/debug/SKILL.md +4 -1
- package/skills/discovery/SKILL.md +28 -24
- package/skills/discovery/issue-templates.md +4 -4
- package/skills/discovery/probes-code.md +2 -2
- package/skills/discovery/probes-feature.md +6 -6
- package/skills/discovery/probes-infra.md +2 -2
- package/skills/discovery/probes-session.md +5 -5
- package/skills/dispatcher/SKILL.md +10 -1
- package/skills/eli5/SKILL.md +43 -0
- package/skills/evolve/SKILL.md +8 -9
- package/skills/frontmatter-guard/SKILL.md +9 -1
- package/skills/gitlab-ops/SKILL.md +73 -59
- package/skills/gitlab-portfolio/SKILL.md +10 -1
- package/skills/grill/SKILL.md +6 -6
- package/skills/grill/soul.md +16 -0
- package/skills/memory-cleanup/SKILL.md +20 -7
- package/skills/npm-publish/SKILL.md +23 -51
- package/skills/peekaboo-driver/SKILL.md +3 -3
- package/skills/persona-panel/SKILL.md +3 -1
- package/skills/plan/SKILL.md +18 -16
- package/skills/plan/mode-feature.md +1 -1
- package/skills/plan/mode-new.md +42 -12
- package/skills/plan/soul.md +12 -0
- package/skills/reconcile/SKILL.md +3 -3
- package/skills/repo-audit/SKILL.md +10 -1
- package/skills/session-end/SKILL.md +97 -22
- package/skills/session-end/metrics-collection.md +1 -1
- package/skills/session-end/phase-3-6-tail.md +37 -2
- package/skills/session-end/session-metrics-write.md +4 -10
- package/skills/session-plan/SKILL.md +2 -2
- package/skills/session-plan/wave-template.md +1 -1
- package/skills/session-start/SKILL.md +82 -36
- package/skills/session-start/phase-2-5-docs-planning.md +8 -8
- package/skills/session-start/phase-4-5-resource-health.md +82 -19
- package/skills/session-start/soul.md +110 -0
- package/skills/spinout/SKILL.md +5 -1
- package/skills/sunset-review/SKILL.md +11 -1
- package/skills/test-runner/SKILL.md +2 -2
- package/skills/tmux-layout/SKILL.md +7 -2
- package/skills/using-orchestrator/SKILL.md +1 -1
- package/skills/vault-mirror/SKILL.md +10 -1
- package/skills/vault-sync/SKILL.md +10 -1
- package/skills/vault-sync/validator.mjs +55 -6
- package/skills/wave-executor/wave-loop.md +64 -12
- package/skills/write-executable-plan/SKILL.md +6 -6
- package/scripts/lib/mission-status-schema.mjs +0 -114
- package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +0 -8
- package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +0 -8
- package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +0 -8
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +0 -8
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +0 -8
- package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +0 -8
- package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +0 -10
- package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +0 -8
- package/skills/vault-sync/tests/fixtures/clean-vault/README.md +0 -3
- package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +0 -11
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +0 -9
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +0 -8
- package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +0 -7
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +0 -9
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +0 -11
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +0 -3
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +0 -3
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +0 -11
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +0 -11
- package/skills/vault-sync/tests/schema-drift.test.mjs +0 -133
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Map of Content
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Map of Content
|
|
6
|
-
|
|
7
|
-
This is an index file that intentionally lacks the full note frontmatter
|
|
8
|
-
(no `id`, `type`, `created`, or `updated`). Validator should report errors
|
|
9
|
-
unless this file is excluded via `--exclude "**/_MOC.md"`.
|
|
10
|
-
|
|
11
|
-
- [[hello-world]]
|
|
File without changes
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* schema-drift.test.mjs — Integration tests for sync-vault-schema.mjs
|
|
3
|
-
*
|
|
4
|
-
* Verifies that the vendored schema block in validator.mjs stays in lockstep
|
|
5
|
-
* with the canonical TypeScript source. Tests run the actual script against
|
|
6
|
-
* actual files — no mocks.
|
|
7
|
-
*
|
|
8
|
-
* Run from session-orchestrator root:
|
|
9
|
-
* pnpm exec vitest run skills/vault-sync/tests/schema-drift.test.mjs
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { describe, it, expect } from 'vitest';
|
|
13
|
-
import { execFileSync } from 'node:child_process';
|
|
14
|
-
import { readFileSync, writeFileSync, mkdirSync, rmSync, existsSync } from 'node:fs';
|
|
15
|
-
import { join, dirname } from 'node:path';
|
|
16
|
-
import { fileURLToPath } from 'node:url';
|
|
17
|
-
import { tmpdir } from 'node:os';
|
|
18
|
-
|
|
19
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
20
|
-
|
|
21
|
-
// Paths relative to this test file
|
|
22
|
-
const SYNC_SCRIPT = join(__dirname, '../../../scripts/sync-vault-schema.mjs');
|
|
23
|
-
const VALIDATOR_MJS = join(__dirname, '../validator.mjs');
|
|
24
|
-
const CANONICAL = join(
|
|
25
|
-
__dirname,
|
|
26
|
-
'../../../../projects-baseline/packages/zod-schemas/src/vault-frontmatter.ts',
|
|
27
|
-
);
|
|
28
|
-
// Tests below shell out to sync-vault-schema.mjs, which by default reads
|
|
29
|
-
// the canonical schema from a sibling projects-baseline checkout. In CI
|
|
30
|
-
// (and on any contributor machine without that checkout) the canonical
|
|
31
|
-
// file is absent, so we skip these integration tests. The schema-drift
|
|
32
|
-
// CI stage runs the script directly against a freshly cloned canonical.
|
|
33
|
-
const HAS_CANONICAL = existsSync(CANONICAL);
|
|
34
|
-
|
|
35
|
-
const SENTINEL_BEGIN = 'BEGIN GENERATED SCHEMA';
|
|
36
|
-
const SENTINEL_END = 'END GENERATED SCHEMA';
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Run sync-vault-schema.mjs with given args.
|
|
40
|
-
* Returns { status, stdout, stderr }.
|
|
41
|
-
* Never throws — captures non-zero exits via try/catch.
|
|
42
|
-
*/
|
|
43
|
-
function runScript(args = []) {
|
|
44
|
-
try {
|
|
45
|
-
const stdout = execFileSync(process.execPath, [SYNC_SCRIPT, ...args], {
|
|
46
|
-
encoding: 'utf-8',
|
|
47
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
48
|
-
});
|
|
49
|
-
return { status: 0, stdout, stderr: '' };
|
|
50
|
-
} catch (err) {
|
|
51
|
-
return {
|
|
52
|
-
status: err.status ?? 1,
|
|
53
|
-
stdout: err.stdout ?? '',
|
|
54
|
-
stderr: err.stderr ?? '',
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
describe.skipIf(!HAS_CANONICAL)('sync-vault-schema.mjs', () => {
|
|
60
|
-
it('idempotency — running --write twice produces no diff between runs', () => {
|
|
61
|
-
// Read validator.mjs before any writes
|
|
62
|
-
const before = readFileSync(VALIDATOR_MJS, 'utf-8');
|
|
63
|
-
|
|
64
|
-
// First --write
|
|
65
|
-
const first = runScript(['--write']);
|
|
66
|
-
expect(first.status, `first --write failed: ${first.stderr}`).toBe(0);
|
|
67
|
-
|
|
68
|
-
// Read after first write
|
|
69
|
-
const afterFirst = readFileSync(VALIDATOR_MJS, 'utf-8');
|
|
70
|
-
expect(afterFirst).toBe(before);
|
|
71
|
-
|
|
72
|
-
// Second --write
|
|
73
|
-
const second = runScript(['--write']);
|
|
74
|
-
expect(second.status, `second --write failed: ${second.stderr}`).toBe(0);
|
|
75
|
-
|
|
76
|
-
// Read after second write
|
|
77
|
-
const afterSecond = readFileSync(VALIDATOR_MJS, 'utf-8');
|
|
78
|
-
expect(afterSecond).toBe(before);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('check-mode-clean — --check exits 0 when canonical and vendored are in sync', () => {
|
|
82
|
-
const result = runScript(['--check']);
|
|
83
|
-
expect(result.status, `--check failed unexpectedly: ${result.stderr}`).toBe(0);
|
|
84
|
-
expect(result.stdout).toContain('no drift');
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('check-mode-detects-drift — --check exits 1 with diff when canonical differs', () => {
|
|
88
|
-
// Build a temporary fake canonical with a different max for the id field
|
|
89
|
-
const rand = Math.random().toString(36).slice(2);
|
|
90
|
-
const tmpDir = join(tmpdir(), `sync-vault-schema-test-${rand}`);
|
|
91
|
-
mkdirSync(tmpDir, { recursive: true });
|
|
92
|
-
const fakeCanonical = join(tmpDir, 'vault-frontmatter.ts');
|
|
93
|
-
|
|
94
|
-
// Read the real canonical and alter it: change .max(128) to .max(256) for id
|
|
95
|
-
const realCanonical = readFileSync(CANONICAL, 'utf-8');
|
|
96
|
-
const altered = realCanonical.replace('.max(128)', '.max(256)');
|
|
97
|
-
writeFileSync(fakeCanonical, altered, 'utf-8');
|
|
98
|
-
|
|
99
|
-
try {
|
|
100
|
-
const result = runScript(['--check', '--canonical', fakeCanonical]);
|
|
101
|
-
expect(result.status, 'expected exit 1 for drift').toBe(1);
|
|
102
|
-
// Diff should mention the changed value
|
|
103
|
-
expect(result.stderr).toMatch(/256|drift/);
|
|
104
|
-
} finally {
|
|
105
|
-
rmSync(tmpDir, { recursive: true, force: true });
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('failure-mode-missing-canonical — exits 2 with clear message when canonical not found', () => {
|
|
110
|
-
const rand = Math.random().toString(36).slice(2);
|
|
111
|
-
const fakePath = join(tmpdir(), `does-not-exist-${rand}.ts`);
|
|
112
|
-
|
|
113
|
-
const result = runScript(['--check', '--canonical', fakePath]);
|
|
114
|
-
expect(result.status, 'expected exit 2 for missing file').toBe(2);
|
|
115
|
-
expect(result.stderr).toContain(fakePath);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it('sentinel-presence — validator.mjs contains both sentinel markers exactly once in correct order', () => {
|
|
119
|
-
const content = readFileSync(VALIDATOR_MJS, 'utf-8');
|
|
120
|
-
|
|
121
|
-
// Count occurrences
|
|
122
|
-
const beginCount = (content.match(/BEGIN GENERATED SCHEMA/g) ?? []).length;
|
|
123
|
-
const endCount = (content.match(/END GENERATED SCHEMA/g) ?? []).length;
|
|
124
|
-
|
|
125
|
-
expect(beginCount, 'BEGIN GENERATED SCHEMA must appear exactly once').toBe(1);
|
|
126
|
-
expect(endCount, 'END GENERATED SCHEMA must appear exactly once').toBe(1);
|
|
127
|
-
|
|
128
|
-
// BEGIN must appear before END
|
|
129
|
-
const beginPos = content.indexOf(SENTINEL_BEGIN);
|
|
130
|
-
const endPos = content.indexOf(SENTINEL_END);
|
|
131
|
-
expect(beginPos, 'BEGIN sentinel must appear before END sentinel').toBeLessThan(endPos);
|
|
132
|
-
});
|
|
133
|
-
});
|