session-orchestrator 3.16.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 +29 -0
- package/.claude-plugin/plugin.json +18 -0
- package/.codex-plugin/agents/explorer.toml +14 -0
- package/.codex-plugin/agents/session-reviewer.toml +23 -0
- package/.codex-plugin/agents/wave-worker.toml +15 -0
- package/.codex-plugin/config.toml +20 -0
- package/.codex-plugin/plugin.json +37 -0
- package/.cursor/rules/000-session-orchestrator.mdc +73 -0
- package/.cursor/rules/010-session-workflow.mdc +170 -0
- package/.cursor/rules/020-quality-gates.mdc +128 -0
- package/.cursor/rules/030-wave-execution.mdc +216 -0
- package/.cursor/rules/040-discovery.mdc +242 -0
- package/.cursor/rules/050-plan.mdc +235 -0
- package/.cursor/rules/060-evolve.mdc +232 -0
- package/.cursor/rules/070-gitlab-ops.mdc +246 -0
- package/.cursor/rules/080-ecosystem-health.mdc +145 -0
- package/.mcp.json +8 -0
- package/CHANGELOG.md +1544 -0
- package/LICENSE +21 -0
- package/NOTICE +64 -0
- package/README.md +242 -0
- package/SECURITY.md +90 -0
- package/agents/AGENTS.md +136 -0
- package/agents/analyst.md +99 -0
- package/agents/architect-reviewer.md +93 -0
- package/agents/code-implementer.md +106 -0
- package/agents/db-specialist.md +104 -0
- package/agents/dialectic-deriver.md +139 -0
- package/agents/docs-writer.md +113 -0
- package/agents/eval-judge.md +146 -0
- package/agents/memory-proposal-collector.md +297 -0
- package/agents/qa-strategist.md +102 -0
- package/agents/schemas/analyst.schema.json +46 -0
- package/agents/schemas/architect-reviewer.schema.json +50 -0
- package/agents/schemas/code-implementer.schema.json +61 -0
- package/agents/schemas/db-specialist.schema.json +80 -0
- package/agents/schemas/docs-writer.schema.json +56 -0
- package/agents/schemas/persona-panel-sidecar.schema.json +245 -0
- package/agents/schemas/qa-strategist.schema.json +46 -0
- package/agents/schemas/security-reviewer.schema.json +86 -0
- package/agents/schemas/session-reviewer.schema.json +69 -0
- package/agents/schemas/test-writer.schema.json +69 -0
- package/agents/schemas/ui-developer.schema.json +90 -0
- package/agents/schemas/ux-evaluator.schema.json +51 -0
- package/agents/security-reviewer.md +236 -0
- package/agents/session-reviewer.md +201 -0
- package/agents/skill-applied-judge.md +122 -0
- package/agents/test-writer.md +123 -0
- package/agents/ui-developer.md +109 -0
- package/agents/ux-evaluator.md +161 -0
- package/assets/icon.svg +11 -0
- package/assets/og-card.png +0 -0
- package/assets/og-card.svg +47 -0
- package/commands/autopilot-multi.md +74 -0
- package/commands/autopilot.md +80 -0
- package/commands/bootstrap.md +56 -0
- package/commands/brainstorm.md +48 -0
- package/commands/close.md +24 -0
- package/commands/debug.md +36 -0
- package/commands/discovery.md +32 -0
- package/commands/dispatcher.md +59 -0
- package/commands/eval.md +28 -0
- package/commands/evolve.md +10 -0
- package/commands/go.md +41 -0
- package/commands/grill.md +45 -0
- package/commands/harness-audit.md +26 -0
- package/commands/memory-cleanup.md +25 -0
- package/commands/persona-panel.md +121 -0
- package/commands/plan.md +15 -0
- package/commands/portfolio.md +97 -0
- package/commands/reconcile.md +23 -0
- package/commands/repo-audit.md +24 -0
- package/commands/session.md +30 -0
- package/commands/spinout.md +15 -0
- package/commands/sunset-review.md +27 -0
- package/commands/templates-ack.md +96 -0
- package/commands/test.md +97 -0
- package/docs/README.md +105 -0
- package/docs/USER-GUIDE.md +1403 -0
- package/docs/ci-setup.md +81 -0
- package/docs/codex-setup.md +142 -0
- package/docs/components.md +74 -0
- package/docs/cursor-setup.md +104 -0
- package/docs/events-schema.md +81 -0
- package/docs/migration-v3.md +148 -0
- package/docs/owner-config-schema.md +154 -0
- package/docs/persona-panel.md +433 -0
- package/docs/pi-setup.md +115 -0
- package/docs/plugin-architecture-v3.md +296 -0
- package/docs/pm-skills-marketplace.md +114 -0
- package/docs/policy-cache-validation-2026-04-28.md +118 -0
- package/docs/rule-authoring.md +316 -0
- package/docs/session-config-reference.md +1439 -0
- package/docs/session-config-template.md +961 -0
- package/docs/vault-docs-architecture.md +297 -0
- package/hooks/_lib/lock-bootstrap.mjs +272 -0
- package/hooks/_lib/lock-reconcile.mjs +93 -0
- package/hooks/_lib/profile-gate.mjs +95 -0
- package/hooks/_lib/transcript-history.mjs +211 -0
- package/hooks/agent-teams-h3-test.sh +362 -0
- package/hooks/config-protection.mjs +0 -0
- package/hooks/cwd-change-restore.mjs +131 -0
- package/hooks/enforce-commands.mjs +179 -0
- package/hooks/enforce-scope.mjs +273 -0
- package/hooks/hooks-codex.json +60 -0
- package/hooks/hooks-cursor.json +15 -0
- package/hooks/hooks-pi.json +115 -0
- package/hooks/hooks.json +215 -0
- package/hooks/loop-guard.mjs +260 -0
- package/hooks/on-session-end.mjs +217 -0
- package/hooks/on-session-start.mjs +660 -0
- package/hooks/on-stop.mjs +294 -0
- package/hooks/operator-steer.mjs +64 -0
- package/hooks/post-edit-validate.mjs +225 -0
- package/hooks/post-subagent-discovery-validator.mjs +398 -0
- package/hooks/post-tool-batch-wave-signal.mjs +328 -0
- package/hooks/post-tool-failure-corrective-context.mjs +248 -0
- package/hooks/post-tooluse-frontend-slop.mjs +184 -0
- package/hooks/pre-bash-destructive-guard.mjs +515 -0
- package/hooks/pre-bash-memory-propose-audit.mjs +206 -0
- package/hooks/pre-bash-staging-fence.mjs +223 -0
- package/hooks/pre-bash-templates-first.mjs +404 -0
- package/hooks/run-node.sh +72 -0
- package/hooks/skill-invocation-telemetry.mjs +99 -0
- package/hooks/subagent-telemetry.mjs +249 -0
- package/hooks/wave-scope-commit-guard.mjs +191 -0
- package/monitors/monitors.json +14 -0
- package/output-styles/finding-report.md +48 -0
- package/output-styles/session-report.md +53 -0
- package/output-styles/wave-summary.md +38 -0
- package/package.json +94 -0
- package/pi/extensions/session-orchestrator.ts +25 -0
- package/pi/prompts/autopilot-multi.md +12 -0
- package/pi/prompts/autopilot.md +12 -0
- package/pi/prompts/bootstrap.md +12 -0
- package/pi/prompts/brainstorm.md +12 -0
- package/pi/prompts/close.md +11 -0
- package/pi/prompts/debug.md +12 -0
- package/pi/prompts/discovery.md +12 -0
- package/pi/prompts/dispatcher.md +12 -0
- package/pi/prompts/eval.md +12 -0
- package/pi/prompts/evolve.md +12 -0
- package/pi/prompts/go.md +12 -0
- package/pi/prompts/grill.md +12 -0
- package/pi/prompts/harness-audit.md +12 -0
- package/pi/prompts/memory-cleanup.md +12 -0
- package/pi/prompts/persona-panel.md +12 -0
- package/pi/prompts/plan.md +12 -0
- package/pi/prompts/portfolio.md +12 -0
- package/pi/prompts/reconcile.md +12 -0
- package/pi/prompts/repo-audit.md +12 -0
- package/pi/prompts/session.md +12 -0
- package/pi/prompts/spinout.md +12 -0
- package/pi/prompts/sunset-review.md +12 -0
- package/pi/prompts/templates-ack.md +12 -0
- package/pi/prompts/test.md +12 -0
- package/rules/_index.md +51 -0
- package/rules/always-on/commit-discipline.md +26 -0
- package/rules/always-on/npm-quality-gates.md +26 -0
- package/rules/always-on/parallel-sessions.md +43 -0
- package/rules/opt-in-domain/prompt-caching.md +270 -0
- package/rules/opt-in-stack/backend-data.md +188 -0
- package/rules/opt-in-stack/backend.md +390 -0
- package/rules/opt-in-stack/frontend.md +98 -0
- package/rules/opt-in-stack/security-web.md +194 -0
- package/rules/opt-in-stack/swift.md +65 -0
- package/scripts/archive-closed-prds.mjs +416 -0
- package/scripts/autopilot-multi.mjs +802 -0
- package/scripts/autopilot.mjs +383 -0
- package/scripts/backfill-abandoned-sessions.mjs +265 -0
- package/scripts/backfill-learnings-expires.mjs +196 -0
- package/scripts/backfill-learnings.mjs +203 -0
- package/scripts/backfill-sessions.mjs +282 -0
- package/scripts/check-doc-consistency.sh +279 -0
- package/scripts/check-package-manager.mjs +445 -0
- package/scripts/ci/assert-vitest-green.mjs +267 -0
- package/scripts/codex-install.mjs +435 -0
- package/scripts/compute-grounding-injection.sh +186 -0
- package/scripts/cursor-install.mjs +113 -0
- package/scripts/dialectic-deriver.mjs +573 -0
- package/scripts/emit-event.mjs +160 -0
- package/scripts/emit-session.mjs +212 -0
- package/scripts/eval-session.mjs +262 -0
- package/scripts/export-hw-learnings.mjs +437 -0
- package/scripts/gc-stale-worktrees.mjs +666 -0
- package/scripts/generate-pi-prompts.mjs +127 -0
- package/scripts/harness-audit.mjs +287 -0
- package/scripts/lib/agent-frontmatter.mjs +266 -0
- package/scripts/lib/agent-output-schema.mjs +166 -0
- package/scripts/lib/agent-status.mjs +303 -0
- package/scripts/lib/ajv-loader.mjs +34 -0
- package/scripts/lib/auto-dialectic.mjs +382 -0
- package/scripts/lib/auto-dream.mjs +471 -0
- package/scripts/lib/autonomy/suitability.mjs +212 -0
- package/scripts/lib/autopilot/dep-graph.mjs +417 -0
- package/scripts/lib/autopilot/durable-telemetry.mjs +121 -0
- package/scripts/lib/autopilot/flags.mjs +104 -0
- package/scripts/lib/autopilot/kill-switches.mjs +174 -0
- package/scripts/lib/autopilot/loop.mjs +320 -0
- package/scripts/lib/autopilot/mr-draft.mjs +520 -0
- package/scripts/lib/autopilot/multi-killswitch.mjs +184 -0
- package/scripts/lib/autopilot/recent-runs.mjs +106 -0
- package/scripts/lib/autopilot/stall-sampler.mjs +97 -0
- package/scripts/lib/autopilot/telemetry.mjs +224 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +605 -0
- package/scripts/lib/autopilot-telemetry.mjs +11 -0
- package/scripts/lib/autopilot.mjs +39 -0
- package/scripts/lib/backlog-scan.mjs +179 -0
- package/scripts/lib/bootstrap-lock-freshness.mjs +260 -0
- package/scripts/lib/bootstrap-lock-refresh.mjs +186 -0
- package/scripts/lib/build-live-signals.mjs +150 -0
- package/scripts/lib/ci-status-banner.mjs +425 -0
- package/scripts/lib/claude-md-budget-lint.mjs +246 -0
- package/scripts/lib/cli-flags.mjs +158 -0
- package/scripts/lib/codex/plugin-contract.mjs +610 -0
- package/scripts/lib/cold-start-detector.mjs +240 -0
- package/scripts/lib/command-blocker.mjs +458 -0
- package/scripts/lib/common.mjs +333 -0
- package/scripts/lib/config/auto-dream.mjs +77 -0
- package/scripts/lib/config/block-header.mjs +94 -0
- package/scripts/lib/config/broken-window.mjs +114 -0
- package/scripts/lib/config/coercers.mjs +248 -0
- package/scripts/lib/config/cold-start.mjs +92 -0
- package/scripts/lib/config/config-protection.mjs +120 -0
- package/scripts/lib/config/cross-repo.mjs +104 -0
- package/scripts/lib/config/custom-phases.mjs +213 -0
- package/scripts/lib/config/dialectic.mjs +92 -0
- package/scripts/lib/config/discovery-validator.mjs +75 -0
- package/scripts/lib/config/dispatcher-autonomy-capture.mjs +240 -0
- package/scripts/lib/config/dispatcher-autonomy.mjs +152 -0
- package/scripts/lib/config/docs-orchestrator.mjs +90 -0
- package/scripts/lib/config/docs-staleness.mjs +96 -0
- package/scripts/lib/config/drift-check.mjs +155 -0
- package/scripts/lib/config/eval.mjs +130 -0
- package/scripts/lib/config/events-rotation.mjs +74 -0
- package/scripts/lib/config/evolve.mjs +308 -0
- package/scripts/lib/config/frontend-slop-hook.mjs +104 -0
- package/scripts/lib/config/gitlab-portfolio.mjs +150 -0
- package/scripts/lib/config/handover-gate.mjs +106 -0
- package/scripts/lib/config/host-paths.mjs +76 -0
- package/scripts/lib/config/io.mjs +54 -0
- package/scripts/lib/config/loop-guard.mjs +117 -0
- package/scripts/lib/config/memory.mjs +150 -0
- package/scripts/lib/config/persona-gate-wave.mjs +258 -0
- package/scripts/lib/config/reconcile.mjs +205 -0
- package/scripts/lib/config/section-extractor.mjs +100 -0
- package/scripts/lib/config/skill-evolution.mjs +112 -0
- package/scripts/lib/config/slopcheck.mjs +99 -0
- package/scripts/lib/config/state-md-lock.mjs +83 -0
- package/scripts/lib/config/templates-first.mjs +94 -0
- package/scripts/lib/config/test.mjs +113 -0
- package/scripts/lib/config/vault-integration.mjs +201 -0
- package/scripts/lib/config/vault-mirror-quality.mjs +99 -0
- package/scripts/lib/config/vault-staleness.mjs +84 -0
- package/scripts/lib/config/vault-sync.mjs +96 -0
- package/scripts/lib/config/verification-auto-fix.mjs +84 -0
- package/scripts/lib/config/wave-reviewers.mjs +133 -0
- package/scripts/lib/config-schema.mjs +345 -0
- package/scripts/lib/config.mjs +474 -0
- package/scripts/lib/convergence-monitor.mjs +389 -0
- package/scripts/lib/coordinator-snapshot.mjs +371 -0
- package/scripts/lib/crypto-digest-utils.mjs +91 -0
- package/scripts/lib/discovery/helpers.mjs +127 -0
- package/scripts/lib/discovery/triage-state.mjs +279 -0
- package/scripts/lib/dispatcher/cli.mjs +257 -0
- package/scripts/lib/dispatcher/enumerate.mjs +243 -0
- package/scripts/lib/dispatcher/rank.mjs +363 -0
- package/scripts/lib/ecosystem-health.mjs +224 -0
- package/scripts/lib/ecosystem-wizard/ci-detector.mjs +18 -0
- package/scripts/lib/ecosystem-wizard/config-parser.mjs +54 -0
- package/scripts/lib/ecosystem-wizard/config-writer.mjs +287 -0
- package/scripts/lib/ecosystem-wizard/package-manager-detector.mjs +42 -0
- package/scripts/lib/ecosystem-wizard/wizard-prompt.mjs +246 -0
- package/scripts/lib/ecosystem-wizard.mjs +48 -0
- package/scripts/lib/env-check.mjs +89 -0
- package/scripts/lib/eval/engine.mjs +605 -0
- package/scripts/lib/eval/judge.mjs +433 -0
- package/scripts/lib/eval/report.mjs +367 -0
- package/scripts/lib/eval/schema.mjs +618 -0
- package/scripts/lib/eval/session-resolve.mjs +137 -0
- package/scripts/lib/eval/sink.mjs +77 -0
- package/scripts/lib/events-rotation.mjs +86 -0
- package/scripts/lib/events-schema.mjs +81 -0
- package/scripts/lib/events.mjs +80 -0
- package/scripts/lib/evolve/autonomy-verdict.mjs +461 -0
- package/scripts/lib/evolve/autopilot-effectiveness.mjs +293 -0
- package/scripts/lib/exclusivity-matrix.mjs +68 -0
- package/scripts/lib/fetch-baseline.mjs +311 -0
- package/scripts/lib/file-lock.mjs +512 -0
- package/scripts/lib/frontend-detect/detect.mjs +138 -0
- package/scripts/lib/frontend-detect/rules.mjs +295 -0
- package/scripts/lib/frontmatter-guard.mjs +241 -0
- package/scripts/lib/gates/echo-stub-detect.mjs +39 -0
- package/scripts/lib/gates/gate-baseline.mjs +42 -0
- package/scripts/lib/gates/gate-full.mjs +85 -0
- package/scripts/lib/gates/gate-helpers.mjs +231 -0
- package/scripts/lib/gates/gate-incremental.mjs +76 -0
- package/scripts/lib/gates/gate-per-file.mjs +55 -0
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +447 -0
- package/scripts/lib/gitlab-portfolio/aggregator.mjs +383 -0
- package/scripts/lib/gitlab-portfolio/cli.mjs +428 -0
- package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +289 -0
- package/scripts/lib/gitlab-portfolio/vcs-detect.mjs +182 -0
- package/scripts/lib/handover-gate.mjs +222 -0
- package/scripts/lib/hardening.mjs +43 -0
- package/scripts/lib/hardware-pattern-detector.mjs +238 -0
- package/scripts/lib/harness-audit/categories/category1.mjs +123 -0
- package/scripts/lib/harness-audit/categories/category2.mjs +145 -0
- package/scripts/lib/harness-audit/categories/category3.mjs +143 -0
- package/scripts/lib/harness-audit/categories/category4.mjs +202 -0
- package/scripts/lib/harness-audit/categories/category5.mjs +152 -0
- package/scripts/lib/harness-audit/categories/category6.mjs +211 -0
- package/scripts/lib/harness-audit/categories/category7.mjs +125 -0
- package/scripts/lib/harness-audit/categories/category8.mjs +328 -0
- package/scripts/lib/harness-audit/categories/category9.mjs +294 -0
- package/scripts/lib/harness-audit/categories/helpers.mjs +165 -0
- package/scripts/lib/harness-audit/categories.mjs +19 -0
- package/scripts/lib/historical-guard.mjs +15 -0
- package/scripts/lib/host-identity.mjs +262 -0
- package/scripts/lib/instruction-budget-guard.mjs +332 -0
- package/scripts/lib/io.mjs +304 -0
- package/scripts/lib/issue-close-strip-labels.mjs +161 -0
- package/scripts/lib/language-mappers/README.md +57 -0
- package/scripts/lib/language-mappers/index.mjs +165 -0
- package/scripts/lib/language-mappers/markdown.mjs +149 -0
- package/scripts/lib/language-mappers/python.mjs +249 -0
- package/scripts/lib/language-mappers/swift.mjs +201 -0
- package/scripts/lib/language-mappers/typescript.mjs +433 -0
- package/scripts/lib/learnings/expiry-sweep.mjs +164 -0
- package/scripts/lib/learnings/filters.mjs +43 -0
- package/scripts/lib/learnings/io.mjs +255 -0
- package/scripts/lib/learnings/schema.mjs +518 -0
- package/scripts/lib/learnings/surface.mjs +207 -0
- package/scripts/lib/learnings.mjs +42 -0
- package/scripts/lib/lock-reaper.mjs +648 -0
- package/scripts/lib/locks/index.mjs +31 -0
- package/scripts/lib/locks/lock-body.mjs +62 -0
- package/scripts/lib/locks/staging-fence-lock.mjs +267 -0
- package/scripts/lib/locks/state-md-lock.mjs +351 -0
- package/scripts/lib/loop-readiness-banner.mjs +144 -0
- package/scripts/lib/memory-banner.mjs +478 -0
- package/scripts/lib/memory-cleanup/worktree-sweep.mjs +108 -0
- package/scripts/lib/memory-cleanup-stamp.mjs +56 -0
- package/scripts/lib/memory-paths.mjs +31 -0
- package/scripts/lib/memory-proposals/collector.mjs +334 -0
- package/scripts/lib/memory-proposals/schema.mjs +289 -0
- package/scripts/lib/memory-proposals/sink.mjs +507 -0
- package/scripts/lib/memory-proposals/store.mjs +441 -0
- package/scripts/lib/mission-status-schema.mjs +114 -0
- package/scripts/lib/mode-selector/alternatives.mjs +64 -0
- package/scripts/lib/mode-selector/constants.mjs +29 -0
- package/scripts/lib/mode-selector/context-pressure.mjs +157 -0
- package/scripts/lib/mode-selector/rationale.mjs +55 -0
- package/scripts/lib/mode-selector/scoring.mjs +221 -0
- package/scripts/lib/mode-selector-accuracy.mjs +121 -0
- package/scripts/lib/mode-selector.mjs +160 -0
- package/scripts/lib/multi-provider-build/providers.mjs +64 -0
- package/scripts/lib/multi-provider-build/templating.mjs +130 -0
- package/scripts/lib/named-baseline-resolver.mjs +233 -0
- package/scripts/lib/named-vault-resolver.mjs +433 -0
- package/scripts/lib/owner-config/coerce.mjs +29 -0
- package/scripts/lib/owner-config/constants.mjs +21 -0
- package/scripts/lib/owner-config/defaults.mjs +50 -0
- package/scripts/lib/owner-config/error.mjs +19 -0
- package/scripts/lib/owner-config/index.mjs +13 -0
- package/scripts/lib/owner-config/merge.mjs +52 -0
- package/scripts/lib/owner-config/validate.mjs +259 -0
- package/scripts/lib/owner-config-banner.mjs +126 -0
- package/scripts/lib/owner-config-loader.mjs +159 -0
- package/scripts/lib/owner-config.example.yaml +72 -0
- package/scripts/lib/owner-config.mjs +28 -0
- package/scripts/lib/owner-interview.mjs +243 -0
- package/scripts/lib/owner-yaml.mjs +571 -0
- package/scripts/lib/package-manager.mjs +160 -0
- package/scripts/lib/path-utils.mjs +217 -0
- package/scripts/lib/peer-cards/merger.mjs +310 -0
- package/scripts/lib/peer-cards/reader.mjs +125 -0
- package/scripts/lib/peer-cards/schema.mjs +230 -0
- package/scripts/lib/peer-cards/staleness-banner.mjs +86 -0
- package/scripts/lib/peer-cards/writer.mjs +138 -0
- package/scripts/lib/peer-discovery.mjs +200 -0
- package/scripts/lib/persona-panel/catalog-loader.mjs +577 -0
- package/scripts/lib/persona-panel/consolidator.mjs +370 -0
- package/scripts/lib/persona-panel/persona-runner.mjs +375 -0
- package/scripts/lib/persona-panel/threshold.mjs +130 -0
- package/scripts/lib/pi-hook-bridge.mjs +328 -0
- package/scripts/lib/platform.mjs +266 -0
- package/scripts/lib/playwright-driver/runner.mjs +297 -0
- package/scripts/lib/plugin-root.mjs +210 -0
- package/scripts/lib/pre-dispatch-check.mjs +126 -0
- package/scripts/lib/product-repo-detect.mjs +121 -0
- package/scripts/lib/profiles/registry.mjs +176 -0
- package/scripts/lib/profiles/schema.mjs +209 -0
- package/scripts/lib/qg-command-drift-banner.mjs +88 -0
- package/scripts/lib/quality-gate/diagnostics.mjs +92 -0
- package/scripts/lib/quality-gate.mjs +536 -0
- package/scripts/lib/quality-gates-cache.mjs +228 -0
- package/scripts/lib/quality-gates-policy.mjs +95 -0
- package/scripts/lib/recommendations-v0.mjs +156 -0
- package/scripts/lib/reconcile/eligibility.mjs +203 -0
- package/scripts/lib/reconcile/emitter.mjs +244 -0
- package/scripts/lib/reconcile/engine.mjs +412 -0
- package/scripts/lib/reconcile/idempotency.mjs +239 -0
- package/scripts/lib/reconcile/renderer.mjs +211 -0
- package/scripts/lib/reconcile/writer.mjs +293 -0
- package/scripts/lib/reconcile-nudge-banner.mjs +284 -0
- package/scripts/lib/resource-probe/evaluate.mjs +190 -0
- package/scripts/lib/resource-probe/parsers.mjs +181 -0
- package/scripts/lib/resource-probe/probe-platform.mjs +300 -0
- package/scripts/lib/resource-probe.mjs +95 -0
- package/scripts/lib/rule-loader.mjs +552 -0
- package/scripts/lib/rules-sync.mjs +439 -0
- package/scripts/lib/scope-gate.mjs +496 -0
- package/scripts/lib/session-close-backfill.mjs +539 -0
- package/scripts/lib/session-discovery.mjs +256 -0
- package/scripts/lib/session-end/phase-skip.mjs +357 -0
- package/scripts/lib/session-end/worktree-cleanup.mjs +112 -0
- package/scripts/lib/session-id.mjs +362 -0
- package/scripts/lib/session-lock.mjs +703 -0
- package/scripts/lib/session-registry.mjs +355 -0
- package/scripts/lib/session-schema/aliases.mjs +71 -0
- package/scripts/lib/session-schema/constants.mjs +115 -0
- package/scripts/lib/session-schema/normalizer.mjs +66 -0
- package/scripts/lib/session-schema/timestamps.mjs +64 -0
- package/scripts/lib/session-schema/validator.mjs +453 -0
- package/scripts/lib/session-schema.mjs +71 -0
- package/scripts/lib/session-token-rollup.mjs +137 -0
- package/scripts/lib/sessions-staleness-banner.mjs +247 -0
- package/scripts/lib/skill-evolution/blast-radius-classifier.mjs +114 -0
- package/scripts/lib/skill-evolution/candidate-intake.mjs +270 -0
- package/scripts/lib/skill-evolution/config-validation-gate.mjs +279 -0
- package/scripts/lib/skill-evolution/engine.mjs +719 -0
- package/scripts/lib/skill-evolution/idempotency.mjs +279 -0
- package/scripts/lib/skill-evolution/mr-opener.mjs +507 -0
- package/scripts/lib/skill-health/join.mjs +181 -0
- package/scripts/lib/skill-health/score.mjs +123 -0
- package/scripts/lib/skill-invocations-schema.mjs +214 -0
- package/scripts/lib/skill-judge.mjs +348 -0
- package/scripts/lib/skill-judgments-schema.mjs +264 -0
- package/scripts/lib/slopcheck.mjs +501 -0
- package/scripts/lib/soul-resolve.mjs +118 -0
- package/scripts/lib/spiral-carryover.mjs +495 -0
- package/scripts/lib/state-md/body-sections.mjs +851 -0
- package/scripts/lib/state-md/frontmatter-mutators.mjs +453 -0
- package/scripts/lib/state-md/mission-status.mjs +247 -0
- package/scripts/lib/state-md/recommendations.mjs +57 -0
- package/scripts/lib/state-md/yaml-parser.mjs +234 -0
- package/scripts/lib/state-md-peer-guard.mjs +232 -0
- package/scripts/lib/state-md.mjs +53 -0
- package/scripts/lib/subagents-schema.mjs +309 -0
- package/scripts/lib/sunset/walker.mjs +1192 -0
- package/scripts/lib/test-runner/artifact-paths.mjs +94 -0
- package/scripts/lib/test-runner/fingerprint.mjs +33 -0
- package/scripts/lib/test-runner/issue-reconcile.mjs +770 -0
- package/scripts/lib/tmux-layout/layouts.mjs +224 -0
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +100 -0
- package/scripts/lib/tmux-layout/telemetry.mjs +88 -0
- package/scripts/lib/tmux-layout/tmux-shell.mjs +82 -0
- package/scripts/lib/tmux-layout/vcs-detector.mjs +88 -0
- package/scripts/lib/validate/check-agents.mjs +457 -0
- package/scripts/lib/validate/check-codex-plugin.mjs +37 -0
- package/scripts/lib/validate/check-commands.mjs +148 -0
- package/scripts/lib/validate/check-component-paths.mjs +112 -0
- package/scripts/lib/validate/check-dead-bridge.mjs +180 -0
- package/scripts/lib/validate/check-hooks-symmetry.mjs +258 -0
- package/scripts/lib/validate/check-json-files.mjs +116 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +1011 -0
- package/scripts/lib/validate/check-path-utils-canary.mjs +175 -0
- package/scripts/lib/validate/check-peekaboo-driver-canary.mjs +201 -0
- package/scripts/lib/validate/check-pi-package.mjs +110 -0
- package/scripts/lib/validate/check-pi-prompts.mjs +43 -0
- package/scripts/lib/validate/check-playwright-mcp-canary.mjs +154 -0
- package/scripts/lib/validate/check-plugin-json.mjs +96 -0
- package/scripts/lib/validate/check-plugin-monitors.mjs +206 -0
- package/scripts/lib/validate/check-plugin-schema.mjs +137 -0
- package/scripts/lib/validate/check-rules.mjs +143 -0
- package/scripts/lib/validate/check-session-plan-routing.mjs +154 -0
- package/scripts/lib/validate/check-test-fixture-shapes.mjs +280 -0
- package/scripts/lib/validate/check-unicode-safety.mjs +533 -0
- package/scripts/lib/validate/confidential-names.mjs +169 -0
- package/scripts/lib/validate/dead-bridge-corpus.mjs +141 -0
- package/scripts/lib/validate/dead-bridge-detectors.mjs +568 -0
- package/scripts/lib/validate/tier-inference.mjs +100 -0
- package/scripts/lib/validate-vendored-rules.mjs +519 -0
- package/scripts/lib/vault-archive.mjs +404 -0
- package/scripts/lib/vault-backfill/glab.mjs +164 -0
- package/scripts/lib/vault-backfill/manifest.mjs +75 -0
- package/scripts/lib/vault-backfill/template.mjs +130 -0
- package/scripts/lib/vault-consolidate-fs.mjs +331 -0
- package/scripts/lib/vault-migration-rules.mjs +155 -0
- package/scripts/lib/vault-mirror/auto-commit.mjs +203 -0
- package/scripts/lib/vault-mirror/namespace.mjs +152 -0
- package/scripts/lib/vault-mirror/process.mjs +567 -0
- package/scripts/lib/vault-mirror/pseudonym-map.mjs +164 -0
- package/scripts/lib/vault-mirror/render-learnings.mjs +201 -0
- package/scripts/lib/vault-mirror/render-sessions.mjs +367 -0
- package/scripts/lib/vault-mirror/render.mjs +8 -0
- package/scripts/lib/vault-mirror/utils.mjs +217 -0
- package/scripts/lib/vault-relocation-rules.mjs +555 -0
- package/scripts/lib/vault-repo-backfill.mjs +235 -0
- package/scripts/lib/vault-staleness-banner.mjs +142 -0
- package/scripts/lib/vault-status/board-writer.mjs +769 -0
- package/scripts/lib/vault-status/narrative-mirror.mjs +544 -0
- package/scripts/lib/vault-sync-baseline.mjs +152 -0
- package/scripts/lib/wave-context.mjs +29 -0
- package/scripts/lib/wave-executor/pool.mjs +248 -0
- package/scripts/lib/wave-resource-gate.mjs +204 -0
- package/scripts/lib/wave-sizing.mjs +75 -0
- package/scripts/lib/webhook-url.mjs +105 -0
- package/scripts/lib/workspace.mjs +198 -0
- package/scripts/lib/worktree/constants.mjs +35 -0
- package/scripts/lib/worktree/index.mjs +17 -0
- package/scripts/lib/worktree/lifecycle.mjs +287 -0
- package/scripts/lib/worktree/listing.mjs +118 -0
- package/scripts/lib/worktree/meta.mjs +64 -0
- package/scripts/lib/worktree-freshness.mjs +313 -0
- package/scripts/lib/worktree.mjs +15 -0
- package/scripts/lifecycle-sim-v6.mjs +347 -0
- package/scripts/lock-reaper.mjs +185 -0
- package/scripts/mcp-server.sh +241 -0
- package/scripts/measure-policy-cache-effectiveness.mjs +427 -0
- package/scripts/memory-propose.mjs +464 -0
- package/scripts/migrate-cold-start-seed.mjs +404 -0
- package/scripts/migrate-learnings-jsonl.mjs +189 -0
- package/scripts/migrate-legacy-learnings.sh +61 -0
- package/scripts/migrate-sessions-jsonl.mjs +448 -0
- package/scripts/migrate-subagents-jsonl.mjs +196 -0
- package/scripts/migrate-vault-paths.mjs +796 -0
- package/scripts/parse-config.mjs +149 -0
- package/scripts/pi-install.mjs +117 -0
- package/scripts/print-applicable-rules.mjs +247 -0
- package/scripts/promote-vault-strict.mjs +496 -0
- package/scripts/relocate-vault-corpus.mjs +1178 -0
- package/scripts/run-migrate-v2-cross-repo.mjs +385 -0
- package/scripts/run-quality-gate.mjs +216 -0
- package/scripts/spikes/h3-agent-teams/preflight.sh +53 -0
- package/scripts/spikes/h3-agent-teams/run-h3.sh +112 -0
- package/scripts/spikes/h3-agent-teams/setup.sh +137 -0
- package/scripts/spikes/h3-agent-teams/toggle.sh +38 -0
- package/scripts/sweep-expired-learnings.mjs +135 -0
- package/scripts/sync-vault-schema.mjs +376 -0
- package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +8 -0
- package/scripts/tmux-layout.mjs +245 -0
- package/scripts/token-audit.sh +191 -0
- package/scripts/typecheck.mjs +42 -0
- package/scripts/upload-social-preview.mjs +316 -0
- package/scripts/validate-config.mjs +46 -0
- package/scripts/validate-plugin-manifests.mjs +163 -0
- package/scripts/validate-plugin.mjs +264 -0
- package/scripts/validate-wave-scope.mjs +289 -0
- package/scripts/vault-backfill.mjs +404 -0
- package/scripts/vault-consolidate.mjs +596 -0
- package/scripts/vault-integration-watcher.mjs +394 -0
- package/scripts/vault-mirror.mjs +430 -0
- package/skills/_shared/bootstrap-gate.md +111 -0
- package/skills/_shared/config-reading.md +226 -0
- package/skills/_shared/instruction-file-resolution.md +79 -0
- package/skills/_shared/model-selection.md +64 -0
- package/skills/_shared/monitor-patterns.md +300 -0
- package/skills/_shared/parallel-aware-auq.md +121 -0
- package/skills/_shared/parallel-aware-preamble.md +185 -0
- package/skills/_shared/platform-tools.md +96 -0
- package/skills/_shared/state-ownership.md +221 -0
- package/skills/architecture/DEEPENING.md +37 -0
- package/skills/architecture/INTERFACE-DESIGN.md +44 -0
- package/skills/architecture/LANGUAGE.md +53 -0
- package/skills/architecture/SKILL.md +92 -0
- package/skills/autopilot/SKILL.md +419 -0
- package/skills/bootstrap/SKILL.md +592 -0
- package/skills/bootstrap/STATE.md.template +24 -0
- package/skills/bootstrap/_shared-template.md +243 -0
- package/skills/bootstrap/deep-template.md +659 -0
- package/skills/bootstrap/fast-template.md +251 -0
- package/skills/bootstrap/intensity-heuristic.md +80 -0
- package/skills/bootstrap/public-fallback.md +342 -0
- package/skills/bootstrap/standard-template.md +736 -0
- package/skills/bootstrap/templates/agents/project-code-review.md +18 -0
- package/skills/bootstrap/templates/agents/project-discovery.md +18 -0
- package/skills/bootstrap/templates/agents/project-quality-gate.md +18 -0
- package/skills/brainstorm/SKILL.md +268 -0
- package/skills/brainstorm/soul.md +49 -0
- package/skills/claude-md-drift-check/SKILL.md +186 -0
- package/skills/claude-md-drift-check/checker.mjs +1380 -0
- package/skills/claude-md-drift-check/checker.sh +37 -0
- package/skills/claude-md-drift-check/package.json +16 -0
- package/skills/convergence-monitoring/README.md +39 -0
- package/skills/convergence-monitoring/SIGNALS.md +246 -0
- package/skills/convergence-monitoring/SKILL.md +285 -0
- package/skills/daily/SKILL.md +222 -0
- package/skills/daily/generate.sh +92 -0
- package/skills/daily/templates/daily.md.tpl +36 -0
- package/skills/debug/SKILL.md +188 -0
- package/skills/debug/soul.md +35 -0
- package/skills/discovery/SKILL.md +567 -0
- package/skills/discovery/issue-templates.md +237 -0
- package/skills/discovery/probes/docs-staleness.mjs +195 -0
- package/skills/discovery/probes/frontend-slop.mjs +186 -0
- package/skills/discovery/probes/ssot-code-diff.mjs +310 -0
- package/skills/discovery/probes/supply-chain-slopcheck.mjs +440 -0
- package/skills/discovery/probes/vault-narrative-staleness.mjs +355 -0
- package/skills/discovery/probes/vault-staleness.mjs +272 -0
- package/skills/discovery/probes-arch.md +252 -0
- package/skills/discovery/probes-audit.md +95 -0
- package/skills/discovery/probes-code.md +329 -0
- package/skills/discovery/probes-docs.md +76 -0
- package/skills/discovery/probes-feature.md +150 -0
- package/skills/discovery/probes-infra.md +138 -0
- package/skills/discovery/probes-intro.md +25 -0
- package/skills/discovery/probes-session.md +495 -0
- package/skills/discovery/probes-supply-chain.md +94 -0
- package/skills/discovery/probes-ui.md +147 -0
- package/skills/discovery/probes-vault.md +64 -0
- package/skills/discovery/slop-patterns.md +115 -0
- package/skills/dispatcher/SKILL.md +173 -0
- package/skills/docs-orchestrator/SKILL.md +362 -0
- package/skills/docs-orchestrator/audience-mapping.md +140 -0
- package/skills/domain-model/ADR-FORMAT.md +47 -0
- package/skills/domain-model/CONTEXT-FORMAT.md +77 -0
- package/skills/domain-model/SKILL.md +85 -0
- package/skills/ecosystem-health/SKILL.md +119 -0
- package/skills/ecosystem-health/wizard.md +193 -0
- package/skills/eval/SKILL.md +293 -0
- package/skills/eval/rubric-v1.md +218 -0
- package/skills/evolve/SKILL.md +546 -0
- package/skills/frontmatter-guard/SKILL.md +126 -0
- package/skills/gitlab-ops/SKILL.md +368 -0
- package/skills/gitlab-portfolio/SKILL.md +196 -0
- package/skills/grill/SKILL.md +185 -0
- package/skills/grill/soul.md +55 -0
- package/skills/hook-development/SKILL.md +413 -0
- package/skills/mcp-builder/SKILL.md +260 -0
- package/skills/memory-cleanup/SKILL.md +310 -0
- package/skills/mode-selector/SKILL.md +226 -0
- package/skills/peekaboo-driver/SKILL.md +237 -0
- package/skills/peekaboo-driver/soul.md +32 -0
- package/skills/persona-panel/SKILL.md +365 -0
- package/skills/persona-panel/persona-format.md +205 -0
- package/skills/persona-panel/presets/designer-lens.md +87 -0
- package/skills/persona-panel/presets/engineer-lens.md +88 -0
- package/skills/persona-panel/presets/pm-lens.md +86 -0
- package/skills/plan/SKILL.md +496 -0
- package/skills/plan/mode-feature.md +141 -0
- package/skills/plan/mode-new.md +297 -0
- package/skills/plan/mode-retro.md +271 -0
- package/skills/plan/prd-feature-template.md +132 -0
- package/skills/plan/prd-full-template.md +151 -0
- package/skills/plan/prd-reviewer-prompt.md +103 -0
- package/skills/plan/retro-template.md +75 -0
- package/skills/plan/soul.md +62 -0
- package/skills/playwright-driver/SKILL.md +226 -0
- package/skills/playwright-driver/soul.md +30 -0
- package/skills/quality-gates/SKILL.md +212 -0
- package/skills/reconcile/SKILL.md +324 -0
- package/skills/repo-audit/SKILL.md +272 -0
- package/skills/session-end/SKILL.md +1044 -0
- package/skills/session-end/discovery-scan.md +37 -0
- package/skills/session-end/drift-operations.md +97 -0
- package/skills/session-end/learning-patterns.md +78 -0
- package/skills/session-end/metrics-collection.md +175 -0
- package/skills/session-end/phase-3-2-docs-verification.md +148 -0
- package/skills/session-end/phase-3-6-tail.md +344 -0
- package/skills/session-end/phase-3-7a-recommendations.md +86 -0
- package/skills/session-end/plan-verification.md +288 -0
- package/skills/session-end/session-metrics-write.md +223 -0
- package/skills/session-end/vault-operations.md +50 -0
- package/skills/session-end/verification-checklist.md +20 -0
- package/skills/session-plan/SKILL.md +554 -0
- package/skills/session-plan/wave-template.md +37 -0
- package/skills/session-start/SKILL.md +1043 -0
- package/skills/session-start/phase-2-5-docs-planning.md +119 -0
- package/skills/session-start/phase-4-5-resource-health.md +49 -0
- package/skills/session-start/phase-7-1-premise-check.md +47 -0
- package/skills/session-start/phase-7-5-mode-selector.md +237 -0
- package/skills/session-start/phase-8-5-express-path.md +61 -0
- package/skills/session-start/presentation-format.md +81 -0
- package/skills/session-start/soul.md +57 -0
- package/skills/skill-creator/SKILL.md +168 -0
- package/skills/spinout/SKILL.md +76 -0
- package/skills/sunset-review/SKILL.md +96 -0
- package/skills/test-runner/SKILL.md +362 -0
- package/skills/test-runner/rubric-v1.md +388 -0
- package/skills/test-runner/soul.md +46 -0
- package/skills/tmux-layout/SKILL.md +104 -0
- package/skills/ubiquitous-language/SKILL.md +97 -0
- package/skills/using-orchestrator/SKILL.md +144 -0
- package/skills/vault-mirror/SKILL.md +234 -0
- package/skills/vault-sync/SKILL.md +319 -0
- package/skills/vault-sync/package-lock.json +40 -0
- package/skills/vault-sync/package.json +11 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +8 -0
- 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 +8 -0
- 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 +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +10 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +11 -0
- 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 +9 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +8 -0
- 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 +7 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +9 -0
- 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 +11 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +11 -0
- 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 +11 -0
- package/skills/vault-sync/tests/schema-drift.test.mjs +133 -0
- package/skills/vault-sync/validator.mjs +658 -0
- package/skills/vault-sync/validator.sh +55 -0
- package/skills/wave-executor/SKILL.md +496 -0
- package/skills/wave-executor/circuit-breaker.md +169 -0
- package/skills/wave-executor/wave-loop.md +1043 -0
- package/skills/write-executable-plan/SKILL.md +237 -0
- package/skills/write-executable-plan/plan-template.md +154 -0
- package/templates/_minimal/CLAUDE.md.tmpl +41 -0
- package/templates/_minimal/README.md.tmpl +15 -0
- package/templates/_minimal/gitignore.tmpl +47 -0
- package/templates/_shared/harte-regeln.md +16 -0
- package/templates/_shared/loop.md +90 -0
- package/templates/_shared/rules/parallel-sessions.md +77 -0
- package/templates/nextjs-minimal/README.md +30 -0
- package/templates/nextjs-minimal/app/layout.tsx +18 -0
- package/templates/nextjs-minimal/app/page.tsx +7 -0
- package/templates/nextjs-minimal/eslint.config.mjs +16 -0
- package/templates/nextjs-minimal/next.config.mjs +4 -0
- package/templates/nextjs-minimal/package.json +27 -0
- package/templates/nextjs-minimal/tsconfig.json +23 -0
- package/templates/node-minimal/README.md +33 -0
- package/templates/node-minimal/eslint.config.mjs +10 -0
- package/templates/node-minimal/package.json +21 -0
- package/templates/node-minimal/src/index.ts +1 -0
- package/templates/node-minimal/tests/sanity.test.ts +5 -0
- package/templates/node-minimal/tsconfig.json +17 -0
- package/templates/personas/README.md +150 -0
- package/templates/personas/accounting-compliance.v1.md +120 -0
- package/templates/personas/accounting-tax-advisor.v1.md +116 -0
- package/templates/personas/buyer-p1-cto.v1.md +125 -0
- package/templates/personas/buyer-p2-kanzlei.v1.md +134 -0
- package/templates/personas/buyer-p3-build.v1.md +130 -0
- package/templates/personas/buyer-p4-tech-veto.v1.md +130 -0
- package/templates/personas/buyer-p5-solo.v1.md +132 -0
- package/templates/personas/buyer-p6-ld.v1.md +130 -0
- package/templates/personas/klima-ai-expert.v1.md +114 -0
- package/templates/personas/klima-physicist.v1.md +117 -0
- package/templates/python-uv/README.md +28 -0
- package/templates/python-uv/pyproject.toml +32 -0
- package/templates/python-uv/src/__PROJECT_NAME__/__init__.py +0 -0
- package/templates/python-uv/src/__PROJECT_NAME__/main.py +6 -0
- package/templates/python-uv/tests/test_sanity.py +2 -0
- package/templates/static-html/README.md +19 -0
- package/templates/static-html/index.html +15 -0
- package/templates/static-html/script.js +1 -0
- package/templates/static-html/styles.css +26 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: domain-model
|
|
3
|
+
description: Use when the user wants to stress-test a plan against the existing domain model and documented decisions. Grilling session that interviews the user one question at a time, sharpens fuzzy terminology inline, updates CONTEXT.md lazily, and offers ADRs sparingly under a 3-criteria gate. Reads docs/adr/ and CONTEXT.md if present.
|
|
4
|
+
model: inherit
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
derived-from: mattpocock/skills@90ea8ee
|
|
7
|
+
license: MIT
|
|
8
|
+
upstream-url: https://github.com/mattpocock/skills/tree/main/domain-model
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
|
|
12
|
+
|
|
13
|
+
Ask the questions one at a time, waiting for feedback on each question before continuing.
|
|
14
|
+
|
|
15
|
+
If a question can be answered by exploring the codebase, explore the codebase instead.
|
|
16
|
+
|
|
17
|
+
## Domain awareness
|
|
18
|
+
|
|
19
|
+
During codebase exploration, also look for existing documentation:
|
|
20
|
+
|
|
21
|
+
### File structure
|
|
22
|
+
|
|
23
|
+
Most repos have a single context:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/
|
|
27
|
+
├── CONTEXT.md
|
|
28
|
+
├── docs/
|
|
29
|
+
│ └── adr/
|
|
30
|
+
│ ├── 0001-event-sourced-orders.md
|
|
31
|
+
│ └── 0002-postgres-for-write-model.md
|
|
32
|
+
└── src/
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
/
|
|
39
|
+
├── CONTEXT-MAP.md
|
|
40
|
+
├── docs/
|
|
41
|
+
│ └── adr/ ← system-wide decisions
|
|
42
|
+
├── src/
|
|
43
|
+
│ ├── ordering/
|
|
44
|
+
│ │ ├── CONTEXT.md
|
|
45
|
+
│ │ └── docs/adr/ ← context-specific decisions
|
|
46
|
+
│ └── billing/
|
|
47
|
+
│ ├── CONTEXT.md
|
|
48
|
+
│ └── docs/adr/
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.
|
|
52
|
+
|
|
53
|
+
## During the session
|
|
54
|
+
|
|
55
|
+
### Challenge against the glossary
|
|
56
|
+
|
|
57
|
+
When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
|
|
58
|
+
|
|
59
|
+
### Sharpen fuzzy language
|
|
60
|
+
|
|
61
|
+
When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."
|
|
62
|
+
|
|
63
|
+
### Discuss concrete scenarios
|
|
64
|
+
|
|
65
|
+
When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
|
|
66
|
+
|
|
67
|
+
### Cross-reference with code
|
|
68
|
+
|
|
69
|
+
When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"
|
|
70
|
+
|
|
71
|
+
### Update CONTEXT.md inline
|
|
72
|
+
|
|
73
|
+
When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
|
|
74
|
+
|
|
75
|
+
Don't couple `CONTEXT.md` to implementation details. Only include terms that are meaningful to domain experts.
|
|
76
|
+
|
|
77
|
+
### Offer ADRs sparingly
|
|
78
|
+
|
|
79
|
+
Only offer to create an ADR when all three are true:
|
|
80
|
+
|
|
81
|
+
1. **Hard to reverse** — the cost of changing your mind later is meaningful
|
|
82
|
+
2. **Surprising without context** — a future reader will wonder "why did they do it this way?"
|
|
83
|
+
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons
|
|
84
|
+
|
|
85
|
+
If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ecosystem-health
|
|
3
|
+
user-invocable: false
|
|
4
|
+
tags: [reference, health, monitoring, ci, endpoints]
|
|
5
|
+
model: haiku
|
|
6
|
+
model-preference: sonnet
|
|
7
|
+
model-preference-codex: gpt-5.4-mini
|
|
8
|
+
model-preference-cursor: claude-sonnet-4-6
|
|
9
|
+
description: >
|
|
10
|
+
Monitor health across configured service endpoints, CI pipelines, and critical
|
|
11
|
+
issues. Automatically invoked during session-start when ecosystem-health is
|
|
12
|
+
enabled in Session Config.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Ecosystem Health Check
|
|
16
|
+
|
|
17
|
+
## Platform-native (CC 2.1.105+)
|
|
18
|
+
|
|
19
|
+
This skill's watcher is registered as a plugin monitor via `.claude-plugin/plugin.json`'s `experimental.monitors` reference to `monitors/monitors.json`. Each session that loads this plugin auto-starts the watcher in the background (see `scripts/lib/ecosystem-health.mjs`). Each NDJSON stdout line from the watcher becomes a `<task_notification>` event Claude sees mid-session.
|
|
20
|
+
|
|
21
|
+
For harness < 2.1.105 (no monitor support), the skill's manual probes documented below serve as the fallback path.
|
|
22
|
+
|
|
23
|
+
## Session Config Fields Used
|
|
24
|
+
|
|
25
|
+
This skill reads from the project's `## Session Config` section in the platform instruction file:
|
|
26
|
+
|
|
27
|
+
- **`health-endpoints`** — list of `{name, url}` objects for service health checks
|
|
28
|
+
- **`cross-repos`** — list of related repositories for critical issue scanning
|
|
29
|
+
|
|
30
|
+
Both fields are optional. The skill degrades gracefully when either is missing. On Codex this means `AGENTS.md`; on Claude/Cursor it means `CLAUDE.md`.
|
|
31
|
+
|
|
32
|
+
## Service Health
|
|
33
|
+
|
|
34
|
+
Read the `health-endpoints` field from Session Config. If not configured or empty, print:
|
|
35
|
+
|
|
36
|
+
> No health endpoints configured in Session Config. Add `health-endpoints` to enable service monitoring.
|
|
37
|
+
|
|
38
|
+
and skip this section.
|
|
39
|
+
|
|
40
|
+
Otherwise, for each configured endpoint, run a health check:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Example health-endpoints config:
|
|
44
|
+
# health-endpoints:
|
|
45
|
+
# - name: API
|
|
46
|
+
# url: https://api.example.com/health
|
|
47
|
+
# - name: Worker
|
|
48
|
+
# url: http://worker:8080/healthz
|
|
49
|
+
# - name: Dashboard
|
|
50
|
+
# url: http://localhost:3000/api/health
|
|
51
|
+
|
|
52
|
+
# For EACH endpoint in health-endpoints, run:
|
|
53
|
+
# NAME=<name> URL=<url>
|
|
54
|
+
curl -s --max-time 6 -w '\nHTTP_STATUS:%{http_code}' "$URL" 2>/dev/null \
|
|
55
|
+
| python3 -c "
|
|
56
|
+
import sys, json
|
|
57
|
+
raw = sys.stdin.read()
|
|
58
|
+
body, _, status_line = raw.rpartition('\nHTTP_STATUS:')
|
|
59
|
+
http_code = int(status_line.strip() or '0')
|
|
60
|
+
status = None
|
|
61
|
+
try:
|
|
62
|
+
d = json.loads(body)
|
|
63
|
+
if isinstance(d, dict) and 'status' in d:
|
|
64
|
+
bs = str(d['status']).lower()
|
|
65
|
+
status = 'DEGRADED' if bs == 'degraded' else ('OK' if bs in ('ok', 'healthy', 'up') else 'DOWN')
|
|
66
|
+
except Exception:
|
|
67
|
+
pass
|
|
68
|
+
if status is None:
|
|
69
|
+
status = 'OK' if 200 <= http_code < 400 else 'DOWN'
|
|
70
|
+
print(f'\$NAME: {status}')
|
|
71
|
+
" 2>/dev/null || echo "\$NAME: unreachable"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Generate the check commands dynamically from the config — do not hardcode any service names or URLs.
|
|
75
|
+
|
|
76
|
+
## Critical Issues Across Projects
|
|
77
|
+
|
|
78
|
+
Read the `cross-repos` field from Session Config. If not configured or empty, print:
|
|
79
|
+
|
|
80
|
+
> No cross-repos configured in Session Config. Add `cross-repos` to enable cross-project issue scanning.
|
|
81
|
+
|
|
82
|
+
and skip this section.
|
|
83
|
+
|
|
84
|
+
### Detect VCS
|
|
85
|
+
|
|
86
|
+
> **VCS Reference:** Detect the VCS platform per the "VCS Auto-Detection" section of the gitlab-ops skill.
|
|
87
|
+
> Use CLI commands per the "Common CLI Commands" section. For cross-project queries, see "Dynamic Project Resolution."
|
|
88
|
+
|
|
89
|
+
### For each cross-repo, query critical issues
|
|
90
|
+
|
|
91
|
+
Using the detected VCS CLI (per gitlab-ops "Common CLI Commands" and "Dynamic Project Resolution" sections):
|
|
92
|
+
|
|
93
|
+
1. Resolve the project ID or owner/repo slug for each cross-repo
|
|
94
|
+
2. Query open issues with `priority:critical` or `priority:high` labels (limit 5 per repo)
|
|
95
|
+
3. Collect results across all configured repos
|
|
96
|
+
|
|
97
|
+
## CI Pipeline Status
|
|
98
|
+
|
|
99
|
+
Query the latest pipeline/workflow runs for the current repo using the detected VCS CLI (per gitlab-ops "Common CLI Commands" section). Report the 3 most recent runs.
|
|
100
|
+
|
|
101
|
+
## Report Format
|
|
102
|
+
|
|
103
|
+
Present as a compact health dashboard. Build the table dynamically from whichever endpoints are configured:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
## Ecosystem Health
|
|
107
|
+
| Service | Status |
|
|
108
|
+
|---------------|-------------------|
|
|
109
|
+
| <name> | [OK/DEGRADED/DOWN/unreachable] |
|
|
110
|
+
| ... | ... |
|
|
111
|
+
|
|
112
|
+
Critical issues: [N total across cross-repos]
|
|
113
|
+
CI: [green/red/pending]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
If no health endpoints are configured, omit the service table entirely.
|
|
117
|
+
If no cross-repos are configured, omit the critical issues line.
|
|
118
|
+
|
|
119
|
+
Flag any service that is DOWN or DEGRADED, or any critical issue count > 0 as requiring attention.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ecosystem-health-wizard
|
|
3
|
+
user-invocable: false
|
|
4
|
+
tags: [bootstrap, ecosystem-health, wizard, config]
|
|
5
|
+
description: >
|
|
6
|
+
Wizard prompt spec for /bootstrap --ecosystem-health. Detects CI provider
|
|
7
|
+
and package manager, prompts for service endpoints, CI pipelines, and
|
|
8
|
+
critical issue labels, then writes Session Config + policy file.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Ecosystem-Health Wizard Spec
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
Populate the fields consumed by `skills/ecosystem-health/SKILL.md` interactively.
|
|
16
|
+
Without this wizard, `health-endpoints`, `cross-repos`, and CI pipeline config in
|
|
17
|
+
Session Config must be hand-written. This wizard detects what it can automatically,
|
|
18
|
+
then asks the user only for values that cannot be inferred.
|
|
19
|
+
|
|
20
|
+
**Local-only.** No network calls. The wizard reads the filesystem and writes two
|
|
21
|
+
files. The user reviews `git status` and commits manually.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 1: Detection
|
|
26
|
+
|
|
27
|
+
Run silently before prompting.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
node "$PLUGIN_ROOT/scripts/lib/ecosystem-wizard.mjs" --repo-root "$(pwd)" [--dry-run]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The detection phase reads:
|
|
34
|
+
|
|
35
|
+
| Signal | Command |
|
|
36
|
+
|---|---|
|
|
37
|
+
| CI provider | `[[ -f .gitlab-ci.yml ]] && echo gitlab` / `[[ -d .github/workflows ]] && echo github` |
|
|
38
|
+
| Package manager | Lockfile probe: `pnpm-lock.yaml` → pnpm, `yarn.lock` → yarn, `bun.lockb` → bun, `package-lock.json` → npm |
|
|
39
|
+
| Available scripts | `node -e "const p=require('./package.json'); console.log(Object.keys(p.scripts||{}).join(','))"` |
|
|
40
|
+
|
|
41
|
+
Detected values are shown to the user as context before prompting:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Ecosystem-Health Wizard
|
|
45
|
+
Detected: CI=gitlab, package-manager=pnpm
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Step 2: Prompt Sequence
|
|
51
|
+
|
|
52
|
+
Three sequential prompts. Each accepts a blank answer to skip that field.
|
|
53
|
+
|
|
54
|
+
### Prompt 2a — Health Endpoints
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Health endpoints (format "Name|URL", comma-separated, blank to skip):
|
|
58
|
+
> API|https://api.example.com/health, Worker|http://worker:8080/healthz
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- Format per entry: `<display-name>|<url>` (pipe separator).
|
|
62
|
+
- Comma-separated for multiple entries.
|
|
63
|
+
- URL must be non-empty when name is provided; malformed entries are skipped with a warning.
|
|
64
|
+
- Produces `health-endpoints` list in Session Config.
|
|
65
|
+
|
|
66
|
+
### Prompt 2b — CI Pipeline Identifiers
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
CI pipeline identifiers (format "id" or "id:label", comma-separated, blank to skip):
|
|
70
|
+
> main, deploy-production:Deploy
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
- Format per entry: `<id>` or `<id>:<display-label>`.
|
|
74
|
+
- For GitLab: branch name or numeric pipeline ID.
|
|
75
|
+
- For GitHub: workflow file name (e.g. `ci.yml`).
|
|
76
|
+
- Produces `pipelines` list in policy file.
|
|
77
|
+
|
|
78
|
+
### Prompt 2c — Critical Issue Labels
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
Critical issue labels (comma-separated, e.g. "priority:critical,severity:blocker", blank to skip):
|
|
82
|
+
> priority:critical, severity:blocker
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- Raw label strings as they appear in the VCS issue tracker.
|
|
86
|
+
- Produces `criticalIssueLabels` list in policy file.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Step 3: Validation
|
|
91
|
+
|
|
92
|
+
Before writing, the collected data is shape-validated using the plain-JS
|
|
93
|
+
validator in `scripts/lib/ecosystem-wizard.mjs` (`validateEcosystemPolicy`).
|
|
94
|
+
|
|
95
|
+
Validation rules (no Zod, no Ajv — plain JS):
|
|
96
|
+
|
|
97
|
+
- `version` must equal `1`
|
|
98
|
+
- `endpoints[]`: each item must have non-empty `name` and `url` strings
|
|
99
|
+
- `pipelines[]`: each item must have non-empty `id` string
|
|
100
|
+
- `criticalIssueLabels[]`: each item must be a non-empty string
|
|
101
|
+
|
|
102
|
+
When validation fails, no files are written and the errors are reported.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Step 4: Output
|
|
107
|
+
|
|
108
|
+
Two files are written (or confirmed skipped if already present):
|
|
109
|
+
|
|
110
|
+
### 4a — Session Config block in CLAUDE.md (or AGENTS.md)
|
|
111
|
+
|
|
112
|
+
Appended inside the `## Session Config` section:
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
ecosystem-health:
|
|
116
|
+
health-endpoints:
|
|
117
|
+
- name: API
|
|
118
|
+
url: https://api.example.com/health
|
|
119
|
+
- name: Worker
|
|
120
|
+
url: http://worker:8080/healthz
|
|
121
|
+
pipelines:
|
|
122
|
+
- id: main
|
|
123
|
+
- id: deploy-production # Deploy
|
|
124
|
+
critical-issue-labels: ["priority:critical", "severity:blocker"]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Idempotency:** If an `ecosystem-health:` key already exists in Session Config,
|
|
128
|
+
the block is NOT overwritten. The wizard prints "Skipped (already present)" and
|
|
129
|
+
exits 0. Re-run to edit: remove the existing block first, then re-run.
|
|
130
|
+
|
|
131
|
+
### 4b — `.orchestrator/policy/ecosystem.json`
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"version": 1,
|
|
136
|
+
"rationale": "Ecosystem health configuration. Generated by /bootstrap --ecosystem-health.",
|
|
137
|
+
"endpoints": [
|
|
138
|
+
{ "name": "API", "url": "https://api.example.com/health" }
|
|
139
|
+
],
|
|
140
|
+
"pipelines": [
|
|
141
|
+
{ "id": "main" },
|
|
142
|
+
{ "id": "deploy-production", "label": "Deploy" }
|
|
143
|
+
],
|
|
144
|
+
"criticalIssueLabels": ["priority:critical", "severity:blocker"]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Schema: `.orchestrator/policy/ecosystem.schema.json`.
|
|
149
|
+
|
|
150
|
+
**Idempotency:** If the file already exists and the JSON contents are identical
|
|
151
|
+
to the proposed write, the file is skipped. If the file exists with different
|
|
152
|
+
contents, it is overwritten (re-run semantics).
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Step 5: Report
|
|
157
|
+
|
|
158
|
+
The wizard prints what it wrote and instructs the user to review before committing:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Ecosystem-Health Wizard complete.
|
|
162
|
+
Written: .orchestrator/policy/ecosystem.json, CLAUDE.md
|
|
163
|
+
Skipped (already present): (none)
|
|
164
|
+
|
|
165
|
+
Review changes with: git status && git diff
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
No auto-commit. The user stages and commits manually (or via the session coordinator).
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Idempotent Re-Run
|
|
173
|
+
|
|
174
|
+
The wizard is safe to re-run:
|
|
175
|
+
|
|
176
|
+
1. If `.orchestrator/policy/ecosystem.json` exists with identical contents → **skipped**.
|
|
177
|
+
2. If `ecosystem-health:` key already exists in Session Config → **skipped**.
|
|
178
|
+
3. If both are present and identical → both skipped, wizard exits 0 with "Nothing to do."
|
|
179
|
+
|
|
180
|
+
To update configuration: remove `ecosystem-health:` from Session Config and
|
|
181
|
+
delete `.orchestrator/policy/ecosystem.json`, then re-run.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Error Handling
|
|
186
|
+
|
|
187
|
+
| Condition | Behaviour |
|
|
188
|
+
|---|---|
|
|
189
|
+
| `repoRoot` not provided | Exits with error: `repoRoot is required` |
|
|
190
|
+
| No `CLAUDE.md` or `AGENTS.md` found | Policy file is still written; Session Config skipped with warning |
|
|
191
|
+
| Malformed endpoint entry (missing pipe) | Entry skipped with a warning; remaining entries are processed |
|
|
192
|
+
| Validation failure | No files written; errors reported; exit code 1 |
|
|
193
|
+
| File write failure | `errors[]` entry added; partial success reported |
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eval
|
|
3
|
+
user-invocable: true
|
|
4
|
+
tags: [eval, measurement, quality, meta, standard]
|
|
5
|
+
model: sonnet
|
|
6
|
+
model-preference: sonnet
|
|
7
|
+
model-preference-codex: gpt-5.4-mini
|
|
8
|
+
model-preference-cursor: claude-sonnet-4-6
|
|
9
|
+
args-schema:
|
|
10
|
+
- flag: --session
|
|
11
|
+
description: "session_id to evaluate (default: last completed session via the resolution cascade)"
|
|
12
|
+
- flag: --no-write
|
|
13
|
+
description: "Evaluate + report without appending to the eval journal (.orchestrator/metrics/eval.jsonl)"
|
|
14
|
+
- flag: --verify
|
|
15
|
+
description: "Re-evaluate a stored run-id and diff per-dimension for scoring drift (exit 1 on drift)"
|
|
16
|
+
description: >
|
|
17
|
+
Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v1 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score.
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
> **Platform Note:** State files use the platform's native directory: `.claude/` (Claude Code), `.codex/` (Codex CLI), or `.cursor/` (Cursor IDE). Shared metrics + the eval journal live in `.orchestrator/metrics/`. See `skills/_shared/platform-tools.md`.
|
|
21
|
+
|
|
22
|
+
# Eval Skill — Session-Process Evaluation (aiat-llm-eval/1.0)
|
|
23
|
+
|
|
24
|
+
On-demand, honest measurement of ONE completed orchestrator session against the
|
|
25
|
+
pre-registered **rubric-v1** check set. The deterministic engine
|
|
26
|
+
(`scripts/eval-session.mjs` → `scripts/lib/eval/engine.mjs`) reads only local
|
|
27
|
+
metrics files (`sessions.jsonl` + `events.jsonl`), scores the five deterministic
|
|
28
|
+
dimensions, appends a `session-eval` record to the journal, and optionally
|
|
29
|
+
renders an HTML report. An opt-in LLM judge overlays two advisory dimensions.
|
|
30
|
+
|
|
31
|
+
The standard this skill implements is [`docs/eval/aiat-llm-eval-v1.md`](../../docs/eval/aiat-llm-eval-v1.md);
|
|
32
|
+
the frozen, content-hashed check set is [`skills/eval/rubric-v1.md`](./rubric-v1.md).
|
|
33
|
+
|
|
34
|
+
## Posture Contract (load-bearing — read before executing)
|
|
35
|
+
|
|
36
|
+
- **No global score, by construction.** The record has no overall/total/mean
|
|
37
|
+
field, and this skill never derives one. Report per-dimension verdicts only.
|
|
38
|
+
- **Never guess.** Missing source data yields `cannot-determine` (a first-class,
|
|
39
|
+
non-error verdict) with an honest reason — never a fabricated `pass`/`fail`.
|
|
40
|
+
Do NOT "fill in" a missing KPI or infer a gate result the events do not show.
|
|
41
|
+
- **Deterministic before judge.** The five deterministic dimensions are complete
|
|
42
|
+
on their own. The judge (Phase 3) is opt-in, ADVISORY, and `uncalibrated` in
|
|
43
|
+
v1 — never blend a judge verdict into the deterministic tally.
|
|
44
|
+
- **Journal is SSOT; the report is a derived view.** The append-only
|
|
45
|
+
`.orchestrator/metrics/eval.jsonl` is authoritative. The HTML report is
|
|
46
|
+
rebuildable from any stored record and is never authoritative over the journal.
|
|
47
|
+
- **`--verify` is the reproducibility proof.** Re-scoring stored source data
|
|
48
|
+
reproduces the stored dimensions byte-for-byte (exit 0) or reports drift
|
|
49
|
+
(exit 1). This proves the SCORING replays — NOT that the model is deterministic.
|
|
50
|
+
- **Self-evaluation is labelled as such.** The orchestrator scoring its own
|
|
51
|
+
session is a self-evaluation, not an independent audit.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Phase 0: Bootstrap Gate
|
|
56
|
+
|
|
57
|
+
Read `skills/_shared/bootstrap-gate.md` and execute the gate check. If the gate is
|
|
58
|
+
CLOSED, invoke `skills/bootstrap/SKILL.md` and wait for completion before
|
|
59
|
+
proceeding. If the gate is OPEN, continue to Phase 1.
|
|
60
|
+
|
|
61
|
+
<HARD-GATE>
|
|
62
|
+
Do NOT proceed past Phase 0 if GATE_CLOSED. There is no bypass. Refer to
|
|
63
|
+
`skills/_shared/bootstrap-gate.md` for the full HARD-GATE constraints.
|
|
64
|
+
</HARD-GATE>
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Phase 1: Config & Argument Loading
|
|
69
|
+
|
|
70
|
+
### 1.1 Read Session Config
|
|
71
|
+
|
|
72
|
+
Read and parse Session Config per `skills/_shared/config-reading.md`. Extract the
|
|
73
|
+
`eval` block (`scripts/lib/config.mjs` returns it as `config.eval`, parsed by
|
|
74
|
+
`scripts/lib/config/eval.mjs`):
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
enabled: boolean (default false)
|
|
78
|
+
mode: 'warn' | 'off' (default 'warn')
|
|
79
|
+
judge: 'off' | 'haiku' | 'sonnet' (default 'off')
|
|
80
|
+
report: 'html' | 'none' (default 'html')
|
|
81
|
+
handle: string | null (default null)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**On-demand `/eval` runs regardless of `eval.enabled`.** The `enabled` flag gates
|
|
85
|
+
the AUTOMATIC session-end eval phase only — it does NOT gate this command (same
|
|
86
|
+
posture as `/reconcile` vs `reconcile.enabled`). `mode: off` is honoured as a
|
|
87
|
+
kill-switch only for the automatic phase; on-demand invocation still runs. If
|
|
88
|
+
`eval.judge` is `off`, skip Phase 3 entirely.
|
|
89
|
+
|
|
90
|
+
> **Parser gotcha:** the `eval:` key-line itself MUST NOT carry an inline comment
|
|
91
|
+
> (strict `/^eval:\s*$/`); a trailing `# comment` on that exact line makes the
|
|
92
|
+
> parser skip the whole block and silently apply ALL defaults. Sub-key lines
|
|
93
|
+
> tolerate inline comments.
|
|
94
|
+
|
|
95
|
+
### 1.2 Parse Arguments
|
|
96
|
+
|
|
97
|
+
Inspect `$ARGUMENTS`:
|
|
98
|
+
|
|
99
|
+
- `--session <id>` → pass through to `--session`.
|
|
100
|
+
- `--no-write` → evaluate without appending to the journal (dry-run).
|
|
101
|
+
- `--verify <run-id>` → **verification mode**: skip Phases 2–4, run the CLI
|
|
102
|
+
`--verify` path (see Phase 6), report MATCH/DRIFT, done.
|
|
103
|
+
|
|
104
|
+
### 1.3 Capture the Model Id (honest provenance)
|
|
105
|
+
|
|
106
|
+
The record's `model.source` records HOW the model id was captured, precisely
|
|
107
|
+
because self-report is unreliable:
|
|
108
|
+
|
|
109
|
+
- If `$ANTHROPIC_MODEL` is set in the environment, the engine reads it
|
|
110
|
+
automatically with `source: env` — **env wins over the flag** (precedence
|
|
111
|
+
`env > flag`). Do not pass `--model-id` in that case; let the engine resolve it.
|
|
112
|
+
- Otherwise the coordinator passes its own self-reported model id:
|
|
113
|
+
`--model-id <self-reported-model-id> --model-source self-report`.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Phase 2: Deterministic Run
|
|
118
|
+
|
|
119
|
+
Run the deterministic engine via its CLI. Default target is the last completed
|
|
120
|
+
session (resolution cascade); `--session` overrides.
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
node scripts/eval-session.mjs [--session <id>] --json \
|
|
124
|
+
[--model-id <self-reported-id> --model-source self-report] \
|
|
125
|
+
[--no-write]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- **Do NOT pass `--metrics-dir`** for a real run — the engine defaults to the
|
|
129
|
+
live `.orchestrator/metrics`, the session being evaluated.
|
|
130
|
+
- The CLI captures the eval `timestamp` (the one sanctioned clock read) and hands
|
|
131
|
+
it to the engine as a parameter, so the scoring path stays clock-free and
|
|
132
|
+
`--verify`-reproducible.
|
|
133
|
+
- Exit codes: `0` success · `1` user error (session not found) · `2` system error.
|
|
134
|
+
On exit `1` (e.g. "no completed session found"), surface the message and stop —
|
|
135
|
+
do not retry with fabricated inputs.
|
|
136
|
+
|
|
137
|
+
Parse the emitted JSON record. It carries `dimensions[]` (5 deterministic
|
|
138
|
+
entries), `kpis{}`, `provenance.rubric_sha256` (non-null once `rubric-v1.md`
|
|
139
|
+
exists), `model`, `harness`, and `run_id`. Unless `--no-write` was passed, the
|
|
140
|
+
record is already appended to `.orchestrator/metrics/eval.jsonl` by the CLI.
|
|
141
|
+
|
|
142
|
+
**Contamination check:** if the human-render/summary reports a peer-overlapped
|
|
143
|
+
window, note it — `verification-evidence` and `gate-health` will read
|
|
144
|
+
`cannot-determine` for that reason (attribution is unsafe), which is correct, not
|
|
145
|
+
a defect.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Phase 3: Judge Overlay (ONLY when `eval.judge != off`)
|
|
150
|
+
|
|
151
|
+
The judge runs **coordinator-side** — `AskUserQuestion` and the `Agent` tool are
|
|
152
|
+
not available inside a dispatched subagent, so the judge is dispatched from the
|
|
153
|
+
coordinator thread using the read-only agent `session-orchestrator:eval-judge`
|
|
154
|
+
(model = `eval.judge`). Reference the API; do not reimplement scoring here:
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
import { runEvalJudge, mergeJudgeDimensions } from '$PLUGIN_ROOT/scripts/lib/eval/judge.mjs';
|
|
158
|
+
import { appendEvalRecord } from '$PLUGIN_ROOT/scripts/lib/eval/sink.mjs';
|
|
159
|
+
|
|
160
|
+
// dispatchAgent = the coordinator's Agent-tool dispatch closure targeting
|
|
161
|
+
// subagent_type 'session-orchestrator:eval-judge'.
|
|
162
|
+
const { status, dimensions } = await runEvalJudge({
|
|
163
|
+
dispatchAgent,
|
|
164
|
+
record, // the deterministic record from Phase 2
|
|
165
|
+
model: EVAL_JUDGE_MODEL, // eval.judge ('haiku' | 'sonnet')
|
|
166
|
+
budget: JUDGE_BUDGET_TOKENS, // optional
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
// mergeJudgeDimensions appends the advisory judge dimensions to the record.
|
|
170
|
+
const merged = mergeJudgeDimensions(record, dimensions);
|
|
171
|
+
|
|
172
|
+
// The COORDINATOR appends the enriched record (subagents never write the journal).
|
|
173
|
+
appendEvalRecord(merged, { path: '.orchestrator/metrics/eval.jsonl' });
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
- Every judge dimension arrives `advisory: true` + `calibration_status:
|
|
177
|
+
"uncalibrated"` (the schema firewall rejects any other shape). Keep them
|
|
178
|
+
visibly separated from the deterministic five in the summary.
|
|
179
|
+
- If `runEvalJudge` returns a non-ok `status` (e.g. dispatch failed), keep the
|
|
180
|
+
deterministic record as-is and note the judge was unavailable — the
|
|
181
|
+
deterministic evaluation is complete without it.
|
|
182
|
+
- When `--no-write` was passed in Phase 2, do NOT append the merged record either.
|
|
183
|
+
|
|
184
|
+
> The judge merge re-writes the record with the SAME `run_id`/`timestamp`, so a
|
|
185
|
+
> later `--verify <run-id>` re-scores the deterministic dimensions from source
|
|
186
|
+
> and diffs them; judge dimensions are advisory and excluded from the drift diff.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Phase 4: Report (ONLY when `eval.report == html`)
|
|
191
|
+
|
|
192
|
+
Render the derived HTML view from the record:
|
|
193
|
+
|
|
194
|
+
```javascript
|
|
195
|
+
import { writeEvalReport } from '$PLUGIN_ROOT/scripts/lib/eval/report.mjs';
|
|
196
|
+
|
|
197
|
+
const res = writeEvalReport(record, { generatedAt: new Date().toISOString() });
|
|
198
|
+
// res.ok === true → res.path === .orchestrator/eval/reports/<run_id>.html
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
- Output path: `.orchestrator/eval/reports/<run_id>.html` (gitignored — a derived
|
|
202
|
+
view, rebuildable from the journal).
|
|
203
|
+
- `writeEvalReport` NEVER throws; on `res.ok === false` surface the WARN reason
|
|
204
|
+
and continue (the journal record is unaffected — the report is derived).
|
|
205
|
+
- **Name the report path in the chat** so the operator can open it.
|
|
206
|
+
- When `eval.report == none`, skip this phase.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Phase 5: Chat Summary
|
|
211
|
+
|
|
212
|
+
Emit a compact, honest per-dimension summary. Status lines only — no global score.
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
## /eval — <session_id> (self-evaluation, aiat-llm-eval/1.0 · rubric-v1 · n=1, no CI)
|
|
216
|
+
|
|
217
|
+
Deterministic:
|
|
218
|
+
verification-evidence PASS <one-line evidence>
|
|
219
|
+
plan-fidelity PASS completion_rate=1.0 (score)
|
|
220
|
+
gate-health PASS <one-line evidence>
|
|
221
|
+
process-safety PASS <one-line evidence + guard-emission disclosure>
|
|
222
|
+
efficiency-kpis N/A (reported: duration=…s waves=… agents=… tok_in=… tok_out=… carryover=…)
|
|
223
|
+
|
|
224
|
+
Judge (advisory, uncalibrated) [only when eval.judge != off]:
|
|
225
|
+
instruction-adherence <verdict> advisory
|
|
226
|
+
report-quality <verdict> advisory
|
|
227
|
+
|
|
228
|
+
cannot-determine: <k> of 5 deterministic dimensions (<reasons>)
|
|
229
|
+
Report: .orchestrator/eval/reports/<run_id>.html
|
|
230
|
+
Journal: .orchestrator/metrics/eval.jsonl (appended: <yes|--no-write>)
|
|
231
|
+
Re-verify: node scripts/eval-session.mjs --verify <run_id>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Always report the `cannot-determine` share explicitly — a high abstention count
|
|
235
|
+
is an honest signal about missing telemetry, not a failure to hide. Always print
|
|
236
|
+
the `--verify` command as the reproducibility handle.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Phase 6: Verification Mode (`--verify <run-id>`)
|
|
241
|
+
|
|
242
|
+
When Phase 1.2 detected `--verify`, run ONLY:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
node scripts/eval-session.mjs --verify <run-id> --json
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
- Exit `0` + `{ match: true }` → the stored record re-scores identically across
|
|
249
|
+
all deterministic dimensions. Report MATCH with the dimension count.
|
|
250
|
+
- Exit `1` + `{ match: false, diffs }` → scoring drift. Report the per-dimension
|
|
251
|
+
diff (`id.field: stored=… fresh=…`). Drift means the source data or the engine
|
|
252
|
+
changed since the record was written — investigate, do not overwrite.
|
|
253
|
+
- `--verify` reproduces the stored model + timestamp verbatim (no env override),
|
|
254
|
+
so a MATCH is a real reproducibility proof of the scoring, not of model output.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Cross-Platform (Codex CLI / Cursor / Pi) — FA4
|
|
259
|
+
|
|
260
|
+
The deterministic core is pure Node CLIs (`scripts/eval-session.mjs`) plus Node
|
|
261
|
+
library modules (`report.mjs`, `sink.mjs`) — they run identically on every
|
|
262
|
+
platform. Only the judge phase needs harness-specific tooling.
|
|
263
|
+
|
|
264
|
+
- **Codex CLI / Cursor / Pi:** the `Agent` tool (and `AskUserQuestion`) are
|
|
265
|
+
unavailable, so **Phase 3 (judge) is SKIPPED with a one-line note**
|
|
266
|
+
("judge phase skipped: requires the Agent tool, unavailable on `<platform>`").
|
|
267
|
+
Phases 2, 4, 5, 6 run unchanged — they are Node-only. See
|
|
268
|
+
`skills/_shared/platform-tools.md` § Agent Dispatch Pattern.
|
|
269
|
+
- **`harness.platform`** on the record is resolved from `$SO_PLATFORM`
|
|
270
|
+
(falls back to `claude-code`) inside the engine — no skill action needed.
|
|
271
|
+
- The deterministic five dimensions + the HTML report + `--verify` are fully
|
|
272
|
+
available on all platforms; the judge overlay is a Claude-Code-only enrichment
|
|
273
|
+
in v1.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Anti-Patterns
|
|
278
|
+
|
|
279
|
+
- **DO NOT** derive, print, or imply a global/overall/aggregate score — the record
|
|
280
|
+
forbids one by construction and so does every report.
|
|
281
|
+
- **DO NOT** guess or "fill in" missing data — a missing gate result, KPI, or
|
|
282
|
+
completion_rate is `cannot-determine`/`null`, never a fabricated pass or `0`.
|
|
283
|
+
- **DO NOT** present the judge's advisory verdict as a measurement — it is
|
|
284
|
+
`uncalibrated` in v1 and must stay visibly separated from the deterministic
|
|
285
|
+
tally.
|
|
286
|
+
- **DO NOT** treat the HTML report as authoritative — the journal is the SSOT; the
|
|
287
|
+
report is a rebuildable derived view.
|
|
288
|
+
- **DO NOT** skip `--verify` when reproducibility is in question — it is the
|
|
289
|
+
executable proof, and its MATCH/DRIFT exit code is the source of truth.
|
|
290
|
+
- **DO NOT** pass `--metrics-dir` for a real run — that points the engine at
|
|
291
|
+
fixture data instead of the live session metrics.
|
|
292
|
+
- **DO NOT** call `runReconcile`-style writes from a subagent — the coordinator
|
|
293
|
+
owns every `eval.jsonl` append (PSA-007).
|