session-orchestrator 5.0.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/autopilot/SKILL.md +1 -0
- package/.agents/skills/bootstrap/SKILL.md +2 -0
- package/.agents/skills/brainstorm/SKILL.md +3 -0
- package/.agents/skills/close/SKILL.md +17 -0
- package/.agents/skills/debug/SKILL.md +2 -0
- package/.agents/skills/discovery/SKILL.md +2 -1
- package/.agents/skills/dispatcher/SKILL.md +2 -0
- package/.agents/skills/eli5/SKILL.md +2 -0
- package/.agents/skills/eval/SKILL.md +1 -0
- package/.agents/skills/evolve/SKILL.md +2 -1
- package/.agents/skills/go/SKILL.md +18 -0
- package/.agents/skills/grill/SKILL.md +2 -0
- package/.agents/skills/harness-audit/SKILL.md +16 -0
- package/.agents/skills/memory-cleanup/SKILL.md +1 -0
- package/.agents/skills/persona-panel/SKILL.md +1 -0
- package/.agents/skills/plan/SKILL.md +3 -1
- package/.agents/skills/portfolio/SKILL.md +17 -0
- package/.agents/skills/reconcile/SKILL.md +1 -0
- package/.agents/skills/release/SKILL.md +18 -0
- package/.agents/skills/repo-audit/SKILL.md +1 -0
- package/.agents/skills/spinout/SKILL.md +1 -0
- package/.agents/skills/sunset-review/SKILL.md +2 -0
- package/.agents/skills/test/SKILL.md +17 -0
- package/.agents/skills/ux-grill/SKILL.md +2 -0
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +2 -2
- package/.codex-plugin/skills/autopilot/SKILL.md +5 -4
- package/.codex-plugin/skills/bootstrap/SKILL.md +8 -4
- package/.codex-plugin/skills/brainstorm/SKILL.md +11 -4
- package/.codex-plugin/skills/close/SKILL.md +3 -3
- package/.codex-plugin/skills/convergence-monitoring/SKILL.md +2 -0
- package/.codex-plugin/skills/convergence-monitoring/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/debug/SKILL.md +11 -4
- package/.codex-plugin/skills/discovery/SKILL.md +8 -4
- package/.codex-plugin/skills/dispatcher/SKILL.md +4 -4
- package/.codex-plugin/skills/eli5/SKILL.md +9 -4
- package/.codex-plugin/skills/eval/SKILL.md +9 -4
- package/.codex-plugin/skills/evolve/SKILL.md +9 -4
- package/.codex-plugin/skills/go/SKILL.md +3 -3
- package/.codex-plugin/skills/grill/SKILL.md +11 -4
- package/.codex-plugin/skills/harness-audit/SKILL.md +4 -3
- package/.codex-plugin/skills/memory-cleanup/SKILL.md +9 -4
- package/.codex-plugin/skills/npm-publish/SKILL.md +2 -0
- package/.codex-plugin/skills/npm-publish/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/persona-panel/SKILL.md +5 -5
- package/.codex-plugin/skills/plan/SKILL.md +8 -4
- package/.codex-plugin/skills/portfolio/SKILL.md +3 -3
- package/.codex-plugin/skills/reconcile/SKILL.md +9 -4
- package/.codex-plugin/skills/release/SKILL.md +3 -3
- package/.codex-plugin/skills/repo-audit/SKILL.md +6 -4
- package/.codex-plugin/skills/spinout/SKILL.md +4 -4
- package/.codex-plugin/skills/sunset-review/SKILL.md +5 -4
- package/.codex-plugin/skills/test/SKILL.md +3 -3
- package/.codex-plugin/skills/ux-grill/SKILL.md +11 -4
- package/.cursor/commands/autopilot.md +4 -4
- package/.cursor/commands/bootstrap.md +5 -4
- package/.cursor/commands/brainstorm.md +5 -4
- package/.cursor/commands/close.md +4 -3
- package/.cursor/commands/convergence-monitoring.md +13 -0
- package/.cursor/commands/debug.md +4 -4
- package/.cursor/commands/discovery.md +4 -4
- package/.cursor/commands/dispatcher.md +4 -4
- package/.cursor/commands/eli5.md +4 -4
- package/.cursor/commands/eval.md +4 -4
- package/.cursor/commands/evolve.md +4 -4
- package/.cursor/commands/go.md +4 -3
- package/.cursor/commands/grill.md +4 -4
- package/.cursor/commands/harness-audit.md +3 -3
- package/.cursor/commands/memory-cleanup.md +4 -4
- package/.cursor/commands/npm-publish.md +13 -0
- package/.cursor/commands/persona-panel.md +4 -4
- package/.cursor/commands/plan.md +5 -4
- package/.cursor/commands/portfolio.md +3 -3
- package/.cursor/commands/reconcile.md +4 -4
- package/.cursor/commands/release.md +4 -3
- package/.cursor/commands/repo-audit.md +4 -4
- package/.cursor/commands/spinout.md +4 -4
- package/.cursor/commands/sunset-review.md +4 -4
- package/.cursor/commands/test.md +3 -3
- package/.cursor/commands/ux-grill.md +4 -4
- package/.cursor/rules/010-session-workflow.mdc +2 -2
- package/.cursor/skills/bootstrap/SKILL.md +1 -0
- package/.cursor/skills/close/SKILL.md +13 -0
- package/.cursor/skills/debug/SKILL.md +0 -1
- package/.cursor/skills/discovery/SKILL.md +0 -1
- package/.cursor/skills/dispatcher/SKILL.md +0 -1
- package/.cursor/skills/eli5/SKILL.md +0 -1
- package/.cursor/skills/evolve/SKILL.md +0 -1
- package/.cursor/skills/go/SKILL.md +13 -0
- package/.cursor/skills/grill/SKILL.md +0 -1
- package/.cursor/skills/harness-audit/SKILL.md +12 -0
- package/.cursor/skills/portfolio/SKILL.md +12 -0
- package/.cursor/skills/release/SKILL.md +13 -0
- package/.cursor/skills/repo-audit/SKILL.md +0 -1
- package/.cursor/skills/sunset-review/SKILL.md +0 -1
- package/.cursor/skills/test/SKILL.md +12 -0
- package/.cursor/skills/ux-grill/SKILL.md +0 -1
- package/.cursor-plugin/plugin.json +2 -2
- package/.orchestrator/policy/blocked-commands.json +10 -0
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +80 -0
- package/README.md +74 -235
- package/commands/session.md +10 -0
- package/docs/USER-GUIDE.md +24 -0
- package/docs/ci-setup.md +53 -0
- package/docs/codex-setup.md +1 -1
- package/docs/components.md +12 -5
- package/docs/events-schema.md +5 -1
- package/docs/install.md +128 -0
- package/docs/persona-panel.md +1 -1
- package/docs/pi-setup.md +1 -1
- package/docs/rule-authoring.md +83 -14
- package/docs/scope-collision-guard.md +2 -0
- package/docs/session-config-reference.md +6 -4
- package/docs/session-config-template.md +38 -0
- package/docs/telemetry.md +15 -0
- package/hooks/_lib/hook-import-set.json +46 -6
- package/hooks/_lib/subagent-paths.mjs +15 -0
- package/hooks/_lib/vcs-create-matcher.mjs +217 -62
- package/hooks/enforce-scope.mjs +42 -1
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks.json +1 -1
- package/hooks/on-session-end.mjs +14 -2
- package/hooks/on-stop.mjs +43 -1
- package/hooks/post-bash-write-verify.mjs +3 -0
- package/hooks/pre-auq-clarity.mjs +3 -0
- package/hooks/pre-bash-issue-budget.mjs +103 -17
- package/hooks/pre-task-scope-disjoint.mjs +152 -3
- package/hooks/skill-invocation-telemetry.mjs +2 -1
- package/package.json +3 -2
- package/pi/prompts/autopilot.md +3 -3
- package/pi/prompts/bootstrap.md +3 -3
- package/pi/prompts/brainstorm.md +3 -3
- package/pi/prompts/close.md +2 -2
- package/pi/prompts/convergence-monitoring.md +11 -0
- package/pi/prompts/debug.md +3 -3
- package/pi/prompts/discovery.md +3 -3
- package/pi/prompts/dispatcher.md +3 -3
- package/pi/prompts/eli5.md +3 -3
- package/pi/prompts/eval.md +3 -3
- package/pi/prompts/evolve.md +3 -3
- package/pi/prompts/go.md +2 -2
- package/pi/prompts/grill.md +3 -3
- package/pi/prompts/harness-audit.md +2 -3
- package/pi/prompts/memory-cleanup.md +3 -3
- package/pi/prompts/npm-publish.md +11 -0
- package/pi/prompts/persona-panel.md +3 -3
- package/pi/prompts/plan.md +3 -3
- package/pi/prompts/portfolio.md +2 -2
- package/pi/prompts/reconcile.md +3 -3
- package/pi/prompts/release.md +3 -3
- package/pi/prompts/repo-audit.md +3 -4
- package/pi/prompts/session.md +1 -1
- package/pi/prompts/spinout.md +3 -3
- package/pi/prompts/sunset-review.md +3 -3
- package/pi/prompts/templates-ack.md +1 -1
- package/pi/prompts/test.md +3 -3
- package/pi/prompts/ux-grill.md +3 -3
- package/scripts/archive-closed-prds.mjs +2 -2
- package/scripts/auq-audit.mjs +2 -3
- package/scripts/backfill-abandoned-sessions.mjs +57 -3
- package/scripts/backfill-evidence-digest.mjs +2 -1
- package/scripts/backfill-learnings-from-vault.mjs +2 -2
- package/scripts/check-package-manager.mjs +2 -2
- package/scripts/ci/assert-vitest-green.mjs +2 -1
- package/scripts/emit-session.mjs +2 -3
- package/scripts/export-hw-learnings.mjs +2 -1
- package/scripts/express-path.mjs +1 -1
- package/scripts/gc-stale-worktrees.mjs +2 -1
- package/scripts/generate-codex-skills.mjs +48 -4
- package/scripts/generate-cursor-adapter.mjs +173 -9
- package/scripts/generate-hook-import-set.mjs +12 -27
- package/scripts/generate-pi-prompts.mjs +183 -13
- package/scripts/github-protection-audit.mjs +2 -3
- package/scripts/lib/agent-frontmatter.mjs +23 -1
- package/scripts/lib/claude-md-budget-lint.mjs +2 -5
- package/scripts/lib/command-blocker.mjs +209 -9
- package/scripts/lib/config/drift-check.mjs +19 -0
- package/scripts/lib/convergence-monitor.mjs +2 -2
- package/scripts/lib/cursor-hook-bridge.mjs +2 -2
- package/scripts/lib/description-surface.mjs +2 -5
- package/scripts/lib/dispatcher/cli.mjs +2 -1
- package/scripts/lib/ecosystem-wizard.mjs +2 -1
- package/scripts/lib/fetch-baseline.mjs +3 -8
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +2 -1
- package/scripts/lib/gitlab-portfolio/cli.mjs +2 -1
- package/scripts/lib/instruction-budget-guard.mjs +186 -46
- package/scripts/lib/is-main-module.mjs +82 -0
- package/scripts/lib/locks/index.mjs +32 -25
- package/scripts/lib/maintenance-due-banner.mjs +69 -3
- package/scripts/lib/peer-discovery.mjs +2 -5
- package/scripts/lib/playwright-driver/runner.mjs +63 -2
- package/scripts/lib/reconcile/rule-expiry-sweep.mjs +642 -0
- package/scripts/lib/rules-sync.mjs +2 -5
- package/scripts/lib/scope-echo.mjs +392 -7
- package/scripts/lib/session-close-backfill.mjs +58 -6
- package/scripts/lib/state-md.mjs +84 -3
- package/scripts/lib/sunset/walker.mjs +31 -4
- package/scripts/lib/tests-src-ratio.mjs +2 -6
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +2 -1
- package/scripts/lib/user-invocable-skills.mjs +185 -0
- package/scripts/lib/validate/check-banner-parity.mjs +2 -2
- package/scripts/lib/validate/check-cursor-adapter.mjs +2 -2
- package/scripts/lib/validate/check-dead-bridge.mjs +2 -2
- package/scripts/lib/validate/check-doc-cli-commands.mjs +2 -2
- package/scripts/lib/validate/check-entry-guard.mjs +366 -0
- package/scripts/lib/validate/check-guard-requires-parity.mjs +2 -2
- package/scripts/lib/validate/check-hooks-emit-event-guard.mjs +2 -2
- package/scripts/lib/validate/check-learning-provenance.mjs +2 -2
- package/scripts/lib/validate/check-skill-links.mjs +27 -6
- package/scripts/lib/validate/check-skill-script-paths.mjs +2 -2
- package/scripts/lib/validate/check-test-git-config-target.mjs +2 -2
- package/scripts/lib/validate/check-unicode-safety.mjs +2 -2
- package/scripts/lib/validate/check-untracked-test-deps.mjs +2 -2
- package/scripts/lib/validate/check-unwired-features.mjs +266 -11
- package/scripts/lib/validate/check-validator-registration.mjs +2 -2
- package/scripts/lib/validate/check-vcs-repo-flag.mjs +2 -2
- package/scripts/lib/validate-vendored-rules.mjs +35 -9
- package/scripts/lib/wave-transcript-tail.mjs +2 -2
- package/scripts/lock-reaper.mjs +2 -1
- package/scripts/materialize-wave-scope.mjs +87 -4
- package/scripts/migrate-sessions-jsonl.mjs +2 -1
- package/scripts/migrate-vault-paths.mjs +2 -3
- package/scripts/release.mjs +124 -35
- package/scripts/relocate-vault-corpus.mjs +2 -3
- package/scripts/repair-invalid-sessions.mjs +2 -2
- package/scripts/session-shape.mjs +2 -2
- package/scripts/site-numbers.mjs +35 -11
- package/scripts/sweep-expired-rules.mjs +216 -0
- package/scripts/validate-plugin.mjs +9 -0
- package/scripts/vault-consolidate.mjs +2 -2
- package/scripts/vault-mirror.mjs +2 -3
- package/scripts/wave-scope-binding.mjs +2 -3
- package/skills/_shared/bootstrap-gate.md +1 -1
- package/skills/_shared/monitor-patterns.md +1 -1
- package/skills/_shared/research-evidence.md +53 -0
- package/skills/_shared/state-ownership.md +3 -0
- package/skills/autopilot/SKILL.md +58 -4
- package/skills/bootstrap/SKILL.md +51 -1
- package/skills/brainstorm/SKILL.md +16 -0
- package/skills/claude-md-drift-check/checker.mjs +49 -11
- package/{commands/close.md → skills/close/SKILL.md} +9 -3
- package/skills/debug/SKILL.md +10 -0
- package/skills/discovery/SKILL.md +24 -1
- package/skills/discovery/probes-session.md +2 -2
- package/skills/dispatcher/SKILL.md +38 -7
- package/skills/eli5/SKILL.md +11 -0
- package/skills/eval/SKILL.md +14 -0
- package/skills/evolve/SKILL.md +8 -1
- package/skills/evolve/references/evolve-dialectic-mode.md +6 -2
- package/{commands/go.md → skills/go/SKILL.md} +9 -1
- package/skills/grill/SKILL.md +19 -0
- package/{commands/harness-audit.md → skills/harness-audit/SKILL.md} +7 -2
- package/skills/hook-development/SKILL.md +46 -41
- package/skills/memory-cleanup/SKILL.md +7 -0
- package/skills/npm-publish/SKILL.md +1 -1
- package/skills/persona-panel/SKILL.md +56 -1
- package/skills/persona-panel/persona-format.md +1 -1
- package/skills/plan/SKILL.md +28 -1
- package/skills/playwright-driver/SKILL.md +7 -10
- package/{commands/portfolio.md → skills/portfolio/SKILL.md} +8 -2
- package/skills/reconcile/SKILL.md +10 -0
- package/{commands/release.md → skills/release/SKILL.md} +16 -2
- package/skills/repo-audit/SKILL.md +7 -0
- package/skills/session-end/plan-verification.md +2 -2
- package/skills/session-plan/SKILL.md +1 -1
- package/skills/session-start/SKILL.md +5 -4
- package/skills/session-start/phase-8-5-express-path.md +6 -6
- package/skills/session-start/references/phase-1-5-session-continuity.md +1 -1
- package/skills/session-start/references/phase-2-7-portfolio-snapshot.md +1 -1
- package/skills/session-start/references/phase-4-ssot-environment-check.md +4 -3
- package/skills/spinout/SKILL.md +12 -1
- package/skills/sunset-review/SKILL.md +13 -0
- package/{commands/test.md → skills/test/SKILL.md} +10 -4
- package/skills/ux-grill/SKILL.md +19 -1
- package/skills/wave-executor/SKILL.md +7 -4
- package/skills/wave-executor/references/wave-executor-state-init.md +13 -1
- package/skills/wave-executor/references/wave-loop-dispatch.md +3 -1
- package/skills/wave-executor/references/wave-loop-review.md +17 -1
- package/commands/autopilot.md +0 -80
- package/commands/bootstrap.md +0 -56
- package/commands/brainstorm.md +0 -48
- package/commands/debug.md +0 -36
- package/commands/discovery.md +0 -32
- package/commands/dispatcher.md +0 -59
- package/commands/eli5.md +0 -33
- package/commands/eval.md +0 -28
- package/commands/evolve.md +0 -10
- package/commands/grill.md +0 -45
- package/commands/memory-cleanup.md +0 -26
- package/commands/persona-panel.md +0 -121
- package/commands/plan.md +0 -15
- package/commands/reconcile.md +0 -23
- package/commands/repo-audit.md +0 -24
- package/commands/spinout.md +0 -15
- package/commands/sunset-review.md +0 -27
- package/commands/ux-grill.md +0 -51
|
@@ -38,6 +38,7 @@ import { _parseDriftCheck } from '../../scripts/lib/config/drift-check.mjs';
|
|
|
38
38
|
import { isSessionConfigHeading } from '../../scripts/lib/config/section-extractor.mjs';
|
|
39
39
|
import { parseGlobsFrontmatter } from '../../scripts/lib/rule-loader.mjs';
|
|
40
40
|
import { resolveRepoSpec } from '../../scripts/lib/vcs-repo-spec.mjs';
|
|
41
|
+
import { userInvocableSkills } from '../../scripts/lib/user-invocable-skills.mjs';
|
|
41
42
|
|
|
42
43
|
const FORWARD_HEADING_RE =
|
|
43
44
|
/(?:^|\b)(what'?s?\s+next|backlog|open\s+issues?|offene\s+(?:issues?|themen)|todo|next\s+steps?|roadmap)(?:$|\b)/i;
|
|
@@ -412,6 +413,45 @@ function countTestFiles(vaultDir) {
|
|
|
412
413
|
return n;
|
|
413
414
|
}
|
|
414
415
|
|
|
416
|
+
/**
|
|
417
|
+
* The product's slash-command count: `commands/*.md` ∪ skills carrying an
|
|
418
|
+
* explicit `user-invocable: true`, deduplicated by name — the same union
|
|
419
|
+
* `scripts/site-numbers.mjs` and
|
|
420
|
+
* `tests/commands/headless-bare-command-availability.test.mjs` use. In a
|
|
421
|
+
* consumer repo without `skills/` (or without `commands/`) the union
|
|
422
|
+
* collapses to whichever side is present, so nothing changes there.
|
|
423
|
+
*
|
|
424
|
+
* ONE implementation shared by the `command-count` surface (Check 5) and the
|
|
425
|
+
* `docs-parity` sub-check (a) `commands` actual (Check 10) — the two counters
|
|
426
|
+
* drifted independently before this extraction (#1370 fold left the
|
|
427
|
+
* docs-parity side on a raw `commands/` `readdirSync`, undercounting after 24
|
|
428
|
+
* `commands/*.md` files were folded into skills).
|
|
429
|
+
*
|
|
430
|
+
* Returns `null` when NEITHER `commands/` NOR `skills/` exists — the caller's
|
|
431
|
+
* "artifact absent" skip path. A `skills/` directory that exists but contains
|
|
432
|
+
* zero `user-invocable: true` skills is a measured `0`, not a skip — matching
|
|
433
|
+
* `scripts/site-numbers.mjs` `countCommands`, whose gate is
|
|
434
|
+
* `isDir(commands) || isDir(skills)` (#1370 follow-up: the old gate skipped on
|
|
435
|
+
* `fromSkills.length === 0`, which conflated "no skills/ dir" with "skills/
|
|
436
|
+
* dir present, nothing user-invocable yet").
|
|
437
|
+
*
|
|
438
|
+
* @param {string} vaultDir
|
|
439
|
+
* @param {string|null} [commandsDir] `--commands-dir` override
|
|
440
|
+
* @returns {number|null}
|
|
441
|
+
*/
|
|
442
|
+
function countSlashCommands(vaultDir, commandsDir) {
|
|
443
|
+
const dir = commandsDir || join(vaultDir, 'commands');
|
|
444
|
+
const dirExists = existsSync(dir) && statSync(dir).isDirectory();
|
|
445
|
+
const fromDir = dirExists
|
|
446
|
+
? readdirSync(dir).filter((f) => f.endsWith('.md') && !f.startsWith('.')).map((f) => f.replace(/\.md$/, ''))
|
|
447
|
+
: [];
|
|
448
|
+
const fromSkills = userInvocableSkills(vaultDir);
|
|
449
|
+
const skillsDir = join(vaultDir, 'skills');
|
|
450
|
+
const skillsDirExists = existsSync(skillsDir) && statSync(skillsDir).isDirectory();
|
|
451
|
+
if (!dirExists && !skillsDirExists) return null;
|
|
452
|
+
return new Set([...fromDir, ...fromSkills]).size;
|
|
453
|
+
}
|
|
454
|
+
|
|
415
455
|
/**
|
|
416
456
|
* Build the surface-count descriptor table for the given vault. `hookCounts`
|
|
417
457
|
* is computed once and shared by the two hook surfaces. Each descriptor's
|
|
@@ -427,14 +467,13 @@ function buildSurfaceDescriptors(vaultDir, commandsDir) {
|
|
|
427
467
|
{
|
|
428
468
|
id: 'command-count',
|
|
429
469
|
noun: 'commands',
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
})(),
|
|
470
|
+
// A slash command is a `commands/*.md` file OR a skill whose frontmatter
|
|
471
|
+
// says `user-invocable: true` — see countSlashCommands() for the shared
|
|
472
|
+
// union derivation (also used by docs-parity sub-check (a) below).
|
|
473
|
+
actual: countSlashCommands(vaultDir, commandsDir),
|
|
435
474
|
// "8 commands", "8 /commands", "8 slash commands"
|
|
436
475
|
claimRe: /\b(\d+)\s+(?:\/)?commands?\b/gi,
|
|
437
|
-
skipMsg: 'command-count: no commands/ directory found (use --commands-dir to override)',
|
|
476
|
+
skipMsg: 'command-count: no commands/ or skills/ directory found (use --commands-dir to override)',
|
|
438
477
|
},
|
|
439
478
|
{
|
|
440
479
|
id: 'skill-count',
|
|
@@ -1485,11 +1524,10 @@ function main() {
|
|
|
1485
1524
|
},
|
|
1486
1525
|
{
|
|
1487
1526
|
noun: 'commands',
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
})(),
|
|
1527
|
+
// Shared with the command-count surface (Check 5) — see
|
|
1528
|
+
// countSlashCommands() doc-comment for why this must be ONE
|
|
1529
|
+
// implementation, not a second `commands/` readdirSync.
|
|
1530
|
+
actual: countSlashCommands(vaultDir, commandsDir),
|
|
1493
1531
|
re: /^##\s+Commands\s+\((\d+)\)/i,
|
|
1494
1532
|
},
|
|
1495
1533
|
{
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: close
|
|
2
3
|
description: End session with verification, commits, and documentation
|
|
4
|
+
user-invocable: true
|
|
3
5
|
disable-model-invocation: true
|
|
6
|
+
model: inherit
|
|
4
7
|
---
|
|
5
|
-
|
|
6
8
|
# Close Session
|
|
7
9
|
|
|
10
|
+
## Invocation
|
|
11
|
+
|
|
12
|
+
The user invokes `/close` (arguments: **$ARGUMENTS** — none are interpreted; anything passed is context only) to end the current session. Run the STATE.md pre-check below, then hand off to `skills/session-end/SKILL.md`. Do NOT skip any verification step — evidence before assertions.
|
|
13
|
+
|
|
8
14
|
The user wants to end the current session.
|
|
9
15
|
|
|
10
16
|
**Pre-check before invoking session-end:** Determine `<state-dir>` from the current platform (`.claude/`, `.codex/`, `.cursor/`, or `.pi/`). Check if `<state-dir>/STATE.md` exists and read its `status` field. Three exit conditions:
|
|
11
17
|
|
|
12
18
|
1. **STATE.md does not exist:** Read Session Config to check `persistence`. If `persistence: false`, inform the user: "Session completed (persistence is off — STATE.md was never created). Use `/session` to start a new session." If `persistence: true` (or Session Config unavailable), inform the user: "No active session found. Use `/session` to start a session first." Either way, stop.
|
|
13
|
-
2. **STATE.md exists and `status: completed`:** `status: completed` alone is NOT proof that session-end's Phase 3.7 writer ever ran (#429) — the field can be set by hand, or by any path that stops short of that write. Parse STATE.md with `parseStateMd` and parse `.orchestrator/metrics/sessions.jsonl` as JSONL. Import `findRecordedSession` from the plugin's `scripts/lib/session-close-backfill.mjs` and call it with the parsed records and `{ sessionId: frontmatter['session-id'], semanticSessionId: frontmatter.session, startedAt: frontmatter.started_at }
|
|
14
|
-
- **A matching completed record exists (including a legacy authoritative record without a `status` field):** Inform the user: "Previous session was already finalized by session-end. Start a new session with `/session`, or inspect `<state-dir>/STATE.md` to review the prior close. (Note: if this is unexpected after an Express Path session, `
|
|
19
|
+
2. **STATE.md exists and `status: completed`:** `status: completed` alone is NOT proof that session-end's Phase 3.7 writer ever ran (#429) — the field can be set by hand, or by any path that stops short of that write. Parse STATE.md with `parseStateMd` and parse `.orchestrator/metrics/sessions.jsonl` as JSONL. Import `findRecordedSession` from the plugin's `scripts/lib/session-close-backfill.mjs` and call it with the parsed records and `{ sessionId: frontmatter['session-id'] ?? readLock({ repoRoot })?.session_id ?? null, semanticSessionId: frontmatter.session, startedAt: frontmatter.started_at }` (`readLock` from `scripts/lib/session-lock.mjs`). The lock fallback is sound here and ONLY here: `/close` runs inside the very session whose STATE.md it is reading, so the live lock names that same session — it is never a peer's id. STATE.md files written before #1368 carry no `session-id` key at all, and without the fallback every one of them misses the native fast path. This is the shared backfill identity reader: native UUIDs take precedence, conflicting native IDs never match through a label, and legacy semantic records remain readable. Do not substitute a text grep or compare the semantic label only against `session_id`. A missing ledger means no record; an unreadable or malformed ledger is inconclusive — report the read/parse failure and stop before repeating close side effects.
|
|
20
|
+
- **A matching completed record exists (including a legacy authoritative record without a `status` field):** Inform the user: "Previous session was already finalized by session-end. Start a new session with `/session`, or inspect `<state-dir>/STATE.md` to review the prior close. (Note: if this is unexpected after an Express Path session, `skills/go/SKILL.md` should have auto-invoked /close — check that STATE.md `## Deviations` contains an `Express path:` entry.)" and stop.
|
|
15
21
|
- **No matching completed record exists:** Warn the user: "STATE.md completed ohne passenden Abschluss im Ledger — session-end wird zur Vervollständigung ausgeführt (#429)." An abandoned backfill stub does not prove finalization. Do NOT stop — proceed to invoke the session-end skill exactly as in exit condition 3, so the missing completion gets written this time. (The SessionEnd hook's `backfillCompletedFromStateMd` independently self-heals this same gap on a later session's teardown; this Pre-Check branch covers the case where /close is re-run before that hook has had a chance to fire.)
|
|
16
22
|
3. **STATE.md exists and `status: active` or `status: paused`:** Proceed to invoke the session-end skill.
|
|
17
23
|
|
package/skills/debug/SKILL.md
CHANGED
|
@@ -6,6 +6,8 @@ description: >
|
|
|
6
6
|
INVESTIGATION FIRST. Produces a `.orchestrator/debug/` artifact the fixer agent must reference.
|
|
7
7
|
model: inherit
|
|
8
8
|
color: red
|
|
9
|
+
user-invocable: true
|
|
10
|
+
argument-hint: "[bug-description-or-issue-ref]"
|
|
9
11
|
tools: Read, Grep, Glob, Bash, Write
|
|
10
12
|
---
|
|
11
13
|
|
|
@@ -13,6 +15,14 @@ tools: Read, Grep, Glob, Bash, Write
|
|
|
13
15
|
|
|
14
16
|
> 4-phase root-cause investigation. Iron Law: no fix without root cause.
|
|
15
17
|
|
|
18
|
+
## Invocation
|
|
19
|
+
|
|
20
|
+
The user invokes `/debug` with arguments: **$ARGUMENTS**.
|
|
21
|
+
|
|
22
|
+
The optional argument is a short bug description or issue reference (e.g. `"test timeout in CI"` or `#408`). If absent, inspect recent errors and `git log` to surface the most likely candidate, then confirm it with the user before starting Phase 1.
|
|
23
|
+
|
|
24
|
+
The four phases (Root Cause → Pattern → Impact → Solution) run in order, and the Phase-1 artifact at `.orchestrator/debug/<session-id>-<sequence>.md` is written before any fix code exists — it is a prerequisite for Phase 4, not optional documentation.
|
|
25
|
+
|
|
16
26
|
## When to use
|
|
17
27
|
|
|
18
28
|
- Any test failure (unit, integration, E2E)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: discovery
|
|
3
|
-
user-invocable:
|
|
3
|
+
user-invocable: true
|
|
4
|
+
argument-hint: "[all|code|infra|ui|arch|session|audit|vault|feature] [--since <git-ref>] [--full]"
|
|
4
5
|
tags: [quality, discovery, probes, issues]
|
|
5
6
|
model: sonnet
|
|
6
7
|
model-preference: sonnet
|
|
@@ -15,6 +16,28 @@ description: >
|
|
|
15
16
|
|
|
16
17
|
# Discovery Skill
|
|
17
18
|
|
|
19
|
+
## Invocation
|
|
20
|
+
|
|
21
|
+
The user invokes `/discovery` with scope: **$ARGUMENTS** (if empty, default to `all`).
|
|
22
|
+
|
|
23
|
+
Parse `$ARGUMENTS` before doing anything else. Extract the following flags and tokens in any order:
|
|
24
|
+
|
|
25
|
+
- `--since <git-ref>` — restrict discovery to files changed since the given git ref (e.g. `HEAD~5`, `main`, a commit hash). Sets `since_ref = <git-ref>`, which is passed into Phase 3 plumbing.
|
|
26
|
+
- `--full` — explicit full-repo scan. Sets `full_scan = true`.
|
|
27
|
+
- Any remaining tokens are treated as scope specifiers (see the scope enum in § Invocation Modes).
|
|
28
|
+
|
|
29
|
+
**Conflict check:** If BOTH `--since` and `--full` are present, stop immediately and report:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Error: Cannot use --since with --full. Provide one, not both.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Do NOT proceed with discovery when this conflict is present.
|
|
36
|
+
|
|
37
|
+
**Argument validation:** Valid scopes: `all`, `code`, `infra`, `ui`, `arch`, `session`, `audit`, `vault`, `feature` (comma-separated for multiple). If any scope is invalid, inform the user: "Invalid scope '[token]'. Valid scopes: all, code, infra, ui, arch, session, audit, vault, feature." and default that token to `all`.
|
|
38
|
+
|
|
39
|
+
Scan the codebase for quality issues, technical debt, and improvement opportunities within the requested scope. Do NOT skip the interactive triage phase — every finding must be confirmed by the user before issue creation. Evidence before assertions.
|
|
40
|
+
|
|
18
41
|
## Invocation Modes
|
|
19
42
|
|
|
20
43
|
Two modes of operation:
|
|
@@ -506,11 +506,11 @@ Violations:
|
|
|
506
506
|
- tools (no-json-array): tools must be a comma-separated string, not a JSON array
|
|
507
507
|
- description (no-block-scalar): description must be inline, not a block scalar
|
|
508
508
|
- color (enum): color must be one of "blue"|"cyan"|"green"|"yellow"|"magenta"|"red"
|
|
509
|
-
Recommendation: Run /
|
|
509
|
+
Recommendation: Run node scripts/validate-plugin.mjs to surface every violation, or manually fix per CLAUDE.md Agent Authoring Rules.
|
|
510
510
|
```
|
|
511
511
|
|
|
512
512
|
**Default Severity:** High — broken agents fail at runtime silently.
|
|
513
513
|
|
|
514
|
-
**Remediation:** Run `/bootstrap --retroactive`
|
|
514
|
+
**Remediation:** Run `node scripts/validate-plugin.mjs` (the agent-frontmatter validator lists every violation; `/bootstrap --retroactive` only writes a missing lock, it does not validate) or manually fix per CLAUDE.md Agent Authoring Rules.
|
|
515
515
|
|
|
516
516
|
**Dependencies:** Requires `${PLUGIN_ROOT}/scripts/lib/agent-frontmatter.mjs` (issue #189). Degrades gracefully when the helper is absent — skip with a note, do not fabricate findings.
|
|
@@ -10,6 +10,8 @@ description: >
|
|
|
10
10
|
portfolio. user: "/dispatcher" assistant: "Ranked 18 free repos — top recommendation: Pencil-Designs
|
|
11
11
|
(score 4.50, 90d stale). Confirm via the picker, I'll claim its lease atomically, then route you to
|
|
12
12
|
/session deep."</example>
|
|
13
|
+
user-invocable: true
|
|
14
|
+
argument-hint: "[--dry-run] [--repo <name>]"
|
|
13
15
|
model: sonnet
|
|
14
16
|
---
|
|
15
17
|
|
|
@@ -17,6 +19,25 @@ model: sonnet
|
|
|
17
19
|
|
|
18
20
|
> Cross-repo autopilot front-door — enumerate → rank → owner-AUQ → atomic claim → route. Read-only until the operator confirms; the only mutating step is the atomic `session.lock` claim, and it happens BEFORE any launch.
|
|
19
21
|
|
|
22
|
+
## Invocation
|
|
23
|
+
|
|
24
|
+
Invoked as `/dispatcher [--dry-run] [--repo <name>]` with arguments: **$ARGUMENTS**.
|
|
25
|
+
|
|
26
|
+
Parse `$ARGUMENTS` before doing anything else. The recognized flags are exactly those of the CLI table below and are passed straight through to `scripts/lib/dispatcher/cli.mjs`:
|
|
27
|
+
|
|
28
|
+
- `--dry-run` — run the non-mutating rank only; print the recommendation and the free-candidate table; do NOT claim any lease (skip Phase 3).
|
|
29
|
+
- `--repo <name>` — limit the human-readable output to a single `repoName` (informational; does not change ranking).
|
|
30
|
+
- `--start-dir <path>` — override the scan root (defaults to the confinement root).
|
|
31
|
+
- `--json` — emit the full `{ candidates, free, ranked, warnings, recommended }` object to stdout.
|
|
32
|
+
|
|
33
|
+
If `$ARGUMENTS` contains an unrecognized flag (starts with `--` but is not one of the above), inform the user:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Unknown flag '<flag>'. Recognized flags: --dry-run, --repo <name>, --start-dir <path>, --json.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Then continue with the remaining valid arguments.
|
|
40
|
+
|
|
20
41
|
## Soul
|
|
21
42
|
|
|
22
43
|
The dispatcher answers one question: *"of all my repos, which is the most worthwhile to work on right now, and is it free?"* It scans the confinement-root children, resolves each repo's free/busy status from its `session.lock` v2 lease (same lease semantics as the vault-status board), ranks only the FREE ones by `priority × staleness × readiness`, and recommends the single best one. You confirm via a picker, it claims the lease atomically (winning the race or excluding-and-re-ranking on a loss), then routes you to the entry command for that repo. Busy repos are listed-as-such, never selected.
|
|
@@ -119,13 +140,23 @@ Do NOT reinvent the claim — always go through `claimRepo`/`acquire`. The `ok:f
|
|
|
119
140
|
|
|
120
141
|
## Phase 4: Route
|
|
121
142
|
|
|
122
|
-
With the lease held,
|
|
123
|
-
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
143
|
+
With the lease held, routing splits on whether the chosen entry is model-invocable:
|
|
144
|
+
|
|
145
|
+
- **`/session housekeeping` or `/session deep`** (execution modes) and **`/plan`** (read-only
|
|
146
|
+
planning precursor) are NOT something the coordinator can invoke itself. `commands/session.md`
|
|
147
|
+
documents `session` and `plan` as **reserved terminal-only built-in names** — under
|
|
148
|
+
non-interactive (`claude -p`) invocation the bare form answers `"isn't available in this
|
|
149
|
+
environment"` — and `skills/plan/SKILL.md` additionally carries
|
|
150
|
+
`disable-model-invocation: true`, which blocks the `Skill` tool from invoking it regardless of
|
|
151
|
+
interactivity. The coordinator therefore **hands the operator the exact command to type**, one
|
|
152
|
+
line per option — `/session-orchestrator:session <mode>` or `/session-orchestrator:plan
|
|
153
|
+
[new|feature|retro]` — rather than attempting to invoke either itself.
|
|
154
|
+
- **`/discovery`** — read-only investigation precursor (maps scope; does not execute).
|
|
155
|
+
`skills/discovery/SKILL.md` carries no `disable-model-invocation` flag, so the coordinator MAY
|
|
156
|
+
invoke it directly via the `Skill` tool when the operator picks this option — no hand-off line
|
|
157
|
+
needed.
|
|
158
|
+
|
|
159
|
+
`/plan` and `/discovery` remain **read-only precursors**, NOT execution modes — the menu may route to them, but they only produce artifacts for a later execution session. The full mode taxonomy lives in the mode-selector surface (P2 of this epic); the dispatcher only routes to the entry command the operator picked.
|
|
129
160
|
|
|
130
161
|
## Phase 5: Edge cases
|
|
131
162
|
|
package/skills/eli5/SKILL.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eli5
|
|
3
3
|
description: Explain a topic like I'm a 5 year old — restate my last output, or a named topic, in plain words without dropping a single fact. Use when the user types /eli5 [topic], or says an answer was too technical, too long, or unclear about what he now has to do.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
argument-hint: "[topic]"
|
|
4
6
|
model: inherit
|
|
5
7
|
tools: Read, Grep, Glob, Bash
|
|
6
8
|
---
|
|
@@ -9,6 +11,15 @@ tools: Read, Grep, Glob, Bash
|
|
|
9
11
|
|
|
10
12
|
Say it again in plain words. Same facts, in the order he needs them.
|
|
11
13
|
|
|
14
|
+
## Invocation
|
|
15
|
+
|
|
16
|
+
Invoked as `/eli5 [topic]` with arguments: **$ARGUMENTS**.
|
|
17
|
+
|
|
18
|
+
The argument is optional and is a topic, in prose. If `$ARGUMENTS` is empty, the target is my own last substantial output in this conversation; if there is none yet, say so rather than picking a topic for him.
|
|
19
|
+
|
|
20
|
+
- `/eli5` — restate what I just said.
|
|
21
|
+
- `/eli5 warum ist der Regel-Korpus voll?` — explain that, grounded in what this session measured.
|
|
22
|
+
|
|
12
23
|
## The frame
|
|
13
24
|
|
|
14
25
|
**Write for someone who knows this project but has not seen what you just saw.**
|
package/skills/eval/SKILL.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eval
|
|
3
3
|
user-invocable: true
|
|
4
|
+
argument-hint: "[--session <id>] [--no-write] [--verify <run-id>]"
|
|
4
5
|
tags: [eval, measurement, quality, meta, standard]
|
|
5
6
|
model: sonnet
|
|
6
7
|
model-preference: sonnet
|
|
@@ -31,6 +32,19 @@ renders an HTML report. An opt-in LLM judge overlays two advisory dimensions.
|
|
|
31
32
|
The standard this skill implements is [`docs/eval/aiat-llm-eval-v1.md`](../../docs/eval/aiat-llm-eval-v1.md);
|
|
32
33
|
the frozen, content-hashed check set is [`skills/eval/rubric-v1.md`](./rubric-v1.md).
|
|
33
34
|
|
|
35
|
+
## Invocation
|
|
36
|
+
|
|
37
|
+
Invoked as `/eval [--session <id>] [--no-write] [--verify <run-id>]` with arguments: **$ARGUMENTS** (parsed in Phase 1.2).
|
|
38
|
+
|
|
39
|
+
- `/eval` — evaluate the last completed session (resolution cascade), append the record, render the report.
|
|
40
|
+
- `/eval --session <id>` — evaluate a specific `session_id`.
|
|
41
|
+
- `/eval --no-write` — evaluate + report without appending to the journal (dry-run).
|
|
42
|
+
- `/eval --verify <run-id>` — re-score a stored run and diff for drift (the reproducibility proof; exit 1 on drift).
|
|
43
|
+
|
|
44
|
+
**On-demand `/eval` runs regardless of `eval.enabled`** — that flag gates only the automatic session-end eval phase (see Phase 1.1).
|
|
45
|
+
|
|
46
|
+
**Seams used:** `scripts/eval-session.mjs` (deterministic CLI) · `runEvalJudge` / `mergeJudgeDimensions` (`scripts/lib/eval/judge.mjs`, opt-in) · `writeEvalReport` (`scripts/lib/eval/report.mjs`) · `appendEvalRecord` (`scripts/lib/eval/sink.mjs`) · the `eval` config block · [`skills/eval/rubric-v1.md`](./rubric-v1.md) (frozen check set).
|
|
47
|
+
|
|
34
48
|
## Posture Contract (load-bearing — read before executing)
|
|
35
49
|
|
|
36
50
|
- **No global score, by construction.** The record has no overall/total/mean
|
package/skills/evolve/SKILL.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: evolve
|
|
3
|
-
user-invocable:
|
|
3
|
+
user-invocable: true
|
|
4
|
+
argument-hint: "[analyze|review|list|dialectic [--apply]]"
|
|
4
5
|
tags: [learning, intelligence, meta]
|
|
5
6
|
model: sonnet
|
|
6
7
|
model-preference: sonnet
|
|
@@ -24,6 +25,12 @@ description: >
|
|
|
24
25
|
|
|
25
26
|
# Evolve Skill
|
|
26
27
|
|
|
28
|
+
## Invocation
|
|
29
|
+
|
|
30
|
+
Invoked as `/evolve [analyze|review|list|dialectic [--apply]]` with mode: **$ARGUMENTS** (if empty, default to `analyze` — parsed in Step 1.3).
|
|
31
|
+
|
|
32
|
+
Analyze session history for patterns, review existing learnings, list active intelligence, or derive USER.md/AGENT.md peer-card updates via the dialectic mode. Every learning must be confirmed by the user before persisting. Evidence before assertions.
|
|
33
|
+
|
|
27
34
|
## Phase 0: Bootstrap Gate
|
|
28
35
|
|
|
29
36
|
Read `skills/_shared/bootstrap-gate.md` and execute the gate check. If the gate is CLOSED, invoke `skills/bootstrap/SKILL.md` and wait for completion before proceeding. If the gate is OPEN, continue to Phase 1.
|
|
@@ -67,9 +67,11 @@ const result = await runDialecticDeriver({
|
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
### Step 6.4: Diff Output & Apply Gate
|
|
70
|
-
- If dry-run (default): present diff inline; write to `.orchestrator/dialectic-pending.md` (atomic tmp+rename)
|
|
70
|
+
- If dry-run (default): present diff inline; write to `.orchestrator/dialectic-pending.md` via `writeDialecticPending({ repoRoot, diff })` from `scripts/lib/auto-dialectic.mjs` (path constant `DIALECTIC_PENDING_PATH`; atomic tmp+rename). `runDialecticDeriver()` does NOT write this file itself — the dry-run branch returns the diff and the caller persists it. The body parameter is named `diff`, not `body`: a non-string or empty value throws `TypeError`, as does a missing `repoRoot`. EXIT. Suggestion: "Re-run with `/evolve --dialectic --apply` to apply." <!-- path-check: example -->
|
|
71
71
|
- If `--apply`: call **`mergeDerivedBody(existingBody, result.diff[target])`** from `scripts/lib/peer-cards/merger.mjs` for each card target, then `writePeerCard(repoRoot, 'user', mergedUserCard)` and `writePeerCard(repoRoot, 'agent', mergedAgentCard)` from `scripts/lib/peer-cards/writer.mjs`. Update the `updated:` frontmatter.
|
|
72
72
|
|
|
73
|
+
**`writePeerCard` shape (#1303).** `writePeerCard(repoRoot, target, card)` takes `card = { frontmatter, body }`. `frontmatter.id` (kebab-case slug, 2..128 chars) is **required and never auto-filled**; `type: 'peer-card'`, `target`, `updated` (defaults to `new Date().toISOString()`) and `created` (defaults to `updated`) are filled by the writer. ISO timestamps may carry optional milliseconds (`scripts/lib/peer-cards/schema.mjs` `ISO_DATETIME_REGEX`). A missing `id` returns `{ ok: false, errors: [...] }` and leaves the target file untouched — it does **not** throw; branch on `result.ok`.
|
|
74
|
+
|
|
73
75
|
**Why `mergeDerivedBody` and not `mergePeerCard` directly (#1310):** the deriver emits a FULL BODY STRING per target (`agents/dialectic-deriver.md` § Output format); `mergePeerCard` consumes a SECTION MAP keyed by sentinel name. `mergeDerivedBody` is the adapter between the two — it splits the proposed body at `## ` headings and maps each heading to a sentinel section. `mergePeerCard` stays available as the section-map primitive. Handling per heading class, all of it in `mergeDerivedBody`'s return value:
|
|
74
76
|
|
|
75
77
|
| Heading in the proposed body | Section name | Merge effect | Surfaced as |
|
|
@@ -77,6 +79,7 @@ const result = await runDialecticDeriver({
|
|
|
77
79
|
| Matches an existing managed section's own `## ` heading | that section's EXISTING name (read from the card, NOT re-slugified) | REPLACE | `mapping[].origin === 'existing'` |
|
|
78
80
|
| No existing section | slugified heading (`[a-z0-9-]+`, collisions suffixed `-2`) | APPEND | `mapping[].origin === 'new'` |
|
|
79
81
|
| Existing managed section the proposal omits | — | KEPT (no auto-delete, per `mergePeerCard` semantics) | — |
|
|
82
|
+
| Section name outside `[A-Za-z0-9_-]+` | — | `mergePeerCard` **throws** `invalid section name` | fix the name before merging |
|
|
80
83
|
| Text before the first `## ` heading | — | NOT applied | `preamble` + a `{ type: 'unmapped-preamble' }` entry in `conflicts[]` |
|
|
81
84
|
|
|
82
85
|
Existing names are read back out of the card rather than re-derived because the live names are not a pure function of their headings — measured 2026-09-11 in `.orchestrator/peers/AGENT.md`: `## Guard and protocol-migration discipline` → `guard-and-protocol-migration`. Re-slugifying would APPEND a duplicate section instead of replacing one.
|
|
@@ -113,7 +116,8 @@ await recordDialecticRun({
|
|
|
113
116
|
|
|
114
117
|
### Step 6.5: Error Handling
|
|
115
118
|
- `status: 'unknown-model'` → fail with clear error (already thrown by validateModel)
|
|
116
|
-
- `status: 'budget-exceeded'` → emit `{status:'budget-exceeded', used:N, budget:M}`, do NOT truncate
|
|
119
|
+
- `status: 'budget-exceeded'` → emit `{status:'budget-exceeded', used:N, budget:M}`, do NOT truncate.
|
|
120
|
+
Measured in a consumer repo (S119, 2026-09-10): 12 learnings + 127 sessions estimated at 11 158 input tokens against the 8000 default. Raise with `--budget-tokens 16000` or `dialectic.budget-tokens` in Session Config rather than trimming inputs.
|
|
117
121
|
- `status: 'would-empty-card'` → warn + require `--allow-emptying` flag
|
|
118
122
|
- `status: 'empty-input'` → exit clean with message "dialectic: skipped (no input)"
|
|
119
123
|
- subagent crash → log ⚠, exit cleanly (do NOT write to `.orchestrator/dialectic-pending.md`) <!-- path-check: example -->
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: go
|
|
2
3
|
description: Approve session plan and begin wave execution
|
|
4
|
+
user-invocable: true
|
|
3
5
|
disable-model-invocation: true
|
|
4
6
|
argument-hint: "[optional instructions]"
|
|
7
|
+
model: inherit
|
|
5
8
|
---
|
|
6
|
-
|
|
7
9
|
# Execute Session Plan
|
|
8
10
|
|
|
9
11
|
The user has approved the session plan. Begin execution immediately.
|
|
10
12
|
|
|
13
|
+
## Invocation
|
|
14
|
+
|
|
15
|
+
Invoked as `/go [optional instructions]` with arguments: **$ARGUMENTS**. The user has approved the session plan; begin execution immediately.
|
|
16
|
+
|
|
17
|
+
`$ARGUMENTS` is optional priority guidance, forwarded verbatim to `skills/wave-executor/SKILL.md` for agent prompts (see "Standard Execution" below). It never re-opens the plan: do NOT re-plan, do NOT re-analyze — execute the agreed plan NOW with maximum efficiency.
|
|
18
|
+
|
|
11
19
|
## Express Path Detection
|
|
12
20
|
|
|
13
21
|
Before invoking the wave-executor, check the conversation context for the Express Path activation banner — printed by `node scripts/express-path.mjs` in session-start Phase 8.5, and carried through session-plan's Short-Circuit (#1146):
|
package/skills/grill/SKILL.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: grill
|
|
3
3
|
description: Use when the user wants a plan, design, or PRD stress-tested before any build — relentlessly interrogates one decision at a time, grounds every question in the codebase, hunts contradictions against the domain language and the code, and challenges the load-bearing assumptions. Triggered by "grill me", "stress-test this plan", "poke holes in my design". Composable — run standalone or as an adversarial pass before /plan feature.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
argument-hint: "[file-path-or-topic]"
|
|
4
6
|
model: inherit
|
|
5
7
|
color: red
|
|
6
8
|
tools: Read, Grep, Glob, Bash, Write
|
|
@@ -10,6 +12,23 @@ tools: Read, Grep, Glob, Bash, Write
|
|
|
10
12
|
|
|
11
13
|
> Adversarial pressure-test for a plan, design, or PRD the user already believes in. The complement to `/brainstorm`: brainstorm *narrows* an ambiguous design space cooperatively; grill *attacks* a settled-feeling plan to find what's wrong before it's built. Optionally writes `docs/specs/YYYY-MM-DD-<slug>-grill.md`. No HARD-GATE — composable by design.
|
|
12
14
|
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
Invoked as `/grill [file-path-or-topic]` with arguments: **$ARGUMENTS** (resolved in Phase 0).
|
|
18
|
+
|
|
19
|
+
The argument is optional and is either a file path to grill (a PRD, spec, `STATE.md`) or a topic/slug. If absent, grill the plan already present in the current conversation; if there is none, ask the user — via AUQ — to state it first.
|
|
20
|
+
|
|
21
|
+
- `/grill` — grills the plan in the current conversation context.
|
|
22
|
+
- `/grill docs/prd/2026-06-09-export.md` — grills a specific PRD file. <!-- path-check: example -->
|
|
23
|
+
- `/grill "partial order cancellation"` — grills the named idea, slug pre-set.
|
|
24
|
+
|
|
25
|
+
| Situation | Use |
|
|
26
|
+
|-----------|-----|
|
|
27
|
+
| A settled-feeling plan needs stress-testing before build | `/grill` |
|
|
28
|
+
| The design is still ambiguous and needs narrowing | `/brainstorm` |
|
|
29
|
+
| Scope is clear, need a formal PRD + issues | `/plan feature` |
|
|
30
|
+
| Adversarial pass before formalizing | `/grill` → `/plan feature` |
|
|
31
|
+
|
|
13
32
|
## Soul Reference
|
|
14
33
|
|
|
15
34
|
Read `soul.md` in this skill directory before anything else. It defines WHO you are — the Interrogator, a staff engineer playing devil's advocate. The Six Tactics in soul.md (glossary conflict, sharpen fuzzy language, code contradiction, edge-case scenario, assumption audit, pre-mortem) are the substance of every grill; internalize them before Phase 0.
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: harness-audit
|
|
2
3
|
description: Run the harness audit and report the rubric score for this repository
|
|
3
|
-
|
|
4
|
+
user-invocable: true
|
|
5
|
+
model: inherit
|
|
4
6
|
---
|
|
5
|
-
|
|
6
7
|
# Harness Audit
|
|
7
8
|
|
|
9
|
+
## Invocation
|
|
10
|
+
|
|
11
|
+
`/harness-audit` takes no arguments — `$ARGUMENTS` is always ignored; anything passed is discarded without a warning. Run the audit exactly as described below and report the rubric score.
|
|
12
|
+
|
|
8
13
|
The user wants to audit this repository against the session-orchestrator harness rubric. There are no arguments.
|
|
9
14
|
|
|
10
15
|
Run the audit script and surface the results:
|