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,119 @@
|
|
|
1
|
+
# Phase 2.5: Docs Planning (Docs-Orchestrator Integration)
|
|
2
|
+
|
|
3
|
+
> Skip this phase if `docs-orchestrator.enabled` config is not `true` (default: `false`).
|
|
4
|
+
|
|
5
|
+
> Project-instruction file resolution: `CLAUDE.md` and `AGENTS.md` (Codex CLI) are transparent aliases — see [skills/_shared/instruction-file-resolution.md](../_shared/instruction-file-resolution.md). The Dev audience target listed below resolves to whichever file the repo uses.
|
|
6
|
+
|
|
7
|
+
## Step 1: Read Docs-Orchestrator Config
|
|
8
|
+
|
|
9
|
+
Read the three controlling fields from `$CONFIG` using the canonical `jq` accessor pattern:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
DOCS_ENABLED=$(echo "$CONFIG" | jq -r '."docs-orchestrator".enabled // false')
|
|
13
|
+
DOCS_AUDIENCES=$(echo "$CONFIG" | jq -r '."docs-orchestrator".audiences // ["user","dev","vault"] | join(",")')
|
|
14
|
+
DOCS_MODE=$(echo "$CONFIG" | jq -r '."docs-orchestrator".mode // "warn"')
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Valid values for `mode`: `warn` | `strict` | `off`. Never use `hard`.
|
|
18
|
+
|
|
19
|
+
If `DOCS_ENABLED` is not `true`, skip all remaining steps in this phase and proceed directly to Phase 3.
|
|
20
|
+
|
|
21
|
+
## Step 2: Audience Auto-Detection
|
|
22
|
+
|
|
23
|
+
Using signals already gathered in Phases 2–5 (git analysis, VCS issues, branch state, SSOT checks), apply the following heuristic to determine which audiences are likely affected. Record each match with its triggering signal for inclusion in the output block.
|
|
24
|
+
|
|
25
|
+
**User audience** — flag as likely when any of the following are true:
|
|
26
|
+
- Affected files include `README.md`, `docs/user/**/*.md`, `docs/getting-started.md`, or `examples/**/*.md`
|
|
27
|
+
- Open or recently closed issues reference CLI UX changes, new user-facing commands, or a breaking API change
|
|
28
|
+
- New public commands are introduced (e.g. changes to `commands/` directory)
|
|
29
|
+
- Install flow or setup instructions are modified
|
|
30
|
+
|
|
31
|
+
**Dev audience** — flag as likely when any of the following are true:
|
|
32
|
+
- Affected files include `CLAUDE.md` (or `AGENTS.md` on Codex CLI), `docs/dev/**/*.md`, or `docs/adr/**/*.md`
|
|
33
|
+
- Issues describe an architecture decision, major refactor, new module or subsystem, test-coverage shift, dependency upgrade, or an ADR-worthy choice
|
|
34
|
+
- New `.mjs` scripts, skill files (`skills/**`), hook files (`hooks/**`), or agent definitions (`agents/**`) are added or substantially changed
|
|
35
|
+
|
|
36
|
+
**Vault audience** — flag as likely when ALL of the following are true:
|
|
37
|
+
- `vault-integration.enabled: true` is present in `$CONFIG`
|
|
38
|
+
- Issues involve project-status change, ownership transition, stack/infra decision, cross-project dependency, migration, or archival event
|
|
39
|
+
|
|
40
|
+
After detection, intersect the detected set with the audiences listed in `DOCS_AUDIENCES` (the user may have narrowed the allowed set in config). If the intersection is empty, proceed to Step 3 without pre-selecting any option as "Recommended" and add a note that no audiences were auto-detected.
|
|
41
|
+
|
|
42
|
+
See `skills/docs-orchestrator/audience-mapping.md` for the authoritative audience → file-pattern and trigger table.
|
|
43
|
+
|
|
44
|
+
## Step 3: Confirm Audiences with User
|
|
45
|
+
|
|
46
|
+
Present the audience confirmation using the platform-appropriate interaction pattern.
|
|
47
|
+
|
|
48
|
+
**Claude Code (AskUserQuestion):**
|
|
49
|
+
|
|
50
|
+
Mark the auto-detected primary audience (or audiences, if multiple) with `(Recommended)`. `multiSelect: true` because a single change commonly touches more than one audience.
|
|
51
|
+
|
|
52
|
+
```js
|
|
53
|
+
AskUserQuestion({
|
|
54
|
+
questions: [{
|
|
55
|
+
question: "Welche Audiences berührt dieser Scope? (Mehrfachauswahl möglich)",
|
|
56
|
+
header: "Audiences",
|
|
57
|
+
multiSelect: true,
|
|
58
|
+
options: [
|
|
59
|
+
{
|
|
60
|
+
label: "Dev (Recommended)", // add "(Recommended)" to each detected audience
|
|
61
|
+
description: "Architektur-, Modul- oder Refactoring-Änderungen — aktualisiert CLAUDE.md (oder AGENTS.md auf Codex CLI), docs/dev/**, docs/adr/**."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
label: "User",
|
|
65
|
+
description: "Öffentlich sichtbare Änderungen — aktualisiert README.md, docs/user/**, examples/**."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
label: "Vault",
|
|
69
|
+
description: "Strategische oder Status-Änderungen — aktualisiert <vault>/01-projects/<slug>/context.md, decisions.md, people.md."
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}]
|
|
73
|
+
})
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Codex CLI / Cursor IDE fallback (numbered Markdown list):**
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
Welche Audiences berührt dieser Scope? (Mehrfachauswahl möglich)
|
|
80
|
+
|
|
81
|
+
Auto-detected: [dev] ← list detected audiences here, or "none" if empty intersection
|
|
82
|
+
|
|
83
|
+
1. **Dev (Recommended)** — Architektur-, Modul- oder Refactoring-Änderungen. Targets: CLAUDE.md (oder AGENTS.md auf Codex CLI), docs/dev/**, docs/adr/**.
|
|
84
|
+
2. **User** — Öffentlich sichtbare Änderungen. Targets: README.md, docs/user/**, examples/**.
|
|
85
|
+
3. **Vault** — Strategische oder Status-Änderungen. Targets: <vault>/01-projects/<slug>/context.md, decisions.md, people.md.
|
|
86
|
+
|
|
87
|
+
Enter one or more numbers (comma-separated), or press Enter to accept the recommended default.
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Store the confirmed audience list as `CONFIRMED_AUDIENCES`.
|
|
91
|
+
|
|
92
|
+
## Step 4: Emit Docs Planning Result Block
|
|
93
|
+
|
|
94
|
+
After the user confirms (or defaults are accepted), emit the following delimited block verbatim into the conversation context. This block is the **contract between Phase 2.5 and session-plan Step 1.8** — session-plan MUST parse it to classify tasks as `Docs` role and route them to the `docs-writer` agent.
|
|
95
|
+
|
|
96
|
+
```markdown
|
|
97
|
+
### Docs Planning Result (Phase 2.5)
|
|
98
|
+
Audiences: [<comma-separated confirmed audiences, e.g. dev, user>]
|
|
99
|
+
Detected-from: [<comma-separated detection signals, e.g. affected-files, issue-labels>]
|
|
100
|
+
Mode: <warn|strict|off>
|
|
101
|
+
Docs-tasks-seed:
|
|
102
|
+
- audience: "dev"
|
|
103
|
+
rationale: "<one-line reason derived from detection signal, e.g. 'new skill scaffolded in skills/docs-orchestrator'>"
|
|
104
|
+
- audience: "user"
|
|
105
|
+
rationale: "<one-line reason, or omit entry if audience not confirmed>"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Session-plan Step 1.8 identifies this block by the exact heading `### Docs Planning Result (Phase 2.5)` and reads `Audiences:` and `Docs-tasks-seed:` to seed the Docs role task list. **Parse rule for `Docs-tasks-seed:`:** each top-level `- audience:` bullet is exactly one seed task; parse all entries in document order; the following indented `rationale:` key binds to the most recent `- audience:`. If this block is absent (phase was skipped), session-plan MUST NOT create any Docs role tasks.
|
|
109
|
+
|
|
110
|
+
## Step 5: Non-Overlap Discipline
|
|
111
|
+
|
|
112
|
+
`docs-orchestrator` MUST NOT write to the following paths — they are owned by sibling skills:
|
|
113
|
+
|
|
114
|
+
- `<vault>/01-projects/*/_overview.md` — owned by `vault-mirror` (regenerated from JSONL on every session-end)
|
|
115
|
+
- `<vault>/03-daily/*` — owned by `daily` (idempotent day-level notes; a second writer would corrupt the file)
|
|
116
|
+
|
|
117
|
+
See `skills/docs-orchestrator/audience-mapping.md` (Non-Overlap with Sibling Skills table) for the complete ownership list and source-citation rules.
|
|
118
|
+
|
|
119
|
+
Proceed to Phase 3.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Phase 4.5: Resource Health (v3.1.0)
|
|
2
|
+
|
|
3
|
+
> Skip this phase if `resource-awareness: false` in Session Config.
|
|
4
|
+
|
|
5
|
+
Read `.orchestrator/host.json` (written by `hooks/on-session-start.mjs`) and run a live resource snapshot. Compare against `resource-thresholds` from Session Config to derive an adaptive wave-sizing recommendation before session-plan runs.
|
|
6
|
+
|
|
7
|
+
## Probe + Evaluate
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
// Conceptual — the wave-executor and session-plan skills call these directly.
|
|
11
|
+
import { probe, evaluate } from '$PLUGIN_ROOT/scripts/lib/resource-probe.mjs';
|
|
12
|
+
const snapshot = await probe();
|
|
13
|
+
const verdict = evaluate(snapshot, config['resource-thresholds']);
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The `evaluate()` result has three fields:
|
|
17
|
+
- `verdict`: `green` | `warn` | `critical`
|
|
18
|
+
- `reasons`: array of human-readable explanations
|
|
19
|
+
- `recommended_agents_per_wave_cap`: integer cap (0 = coordinator-direct) or null
|
|
20
|
+
|
|
21
|
+
## Adaptive Rules (default thresholds; configurable via `resource-thresholds`)
|
|
22
|
+
|
|
23
|
+
| Signal | Threshold | Action |
|
|
24
|
+
|--------|-----------|--------|
|
|
25
|
+
| RAM free below `ram-free-min-gb` (default 4) | warn | Cap `agents-per-wave` at 2 |
|
|
26
|
+
| RAM free below `ram-free-critical-gb` (default 2) | critical | Recommend coordinator-direct (0 agents) |
|
|
27
|
+
| CPU load above `cpu-load-max-pct` (default 80) sustained | warn | Cap `agents-per-wave` at 2 |
|
|
28
|
+
| Claude processes ≥ `concurrent-sessions-warn` (default 5) | warn | Warn; suggest sequencing or waiting |
|
|
29
|
+
| SSH session detected AND `ssh-no-docker: true` | info | Append note: host is SSH-attached, Docker-dependent steps should run on a local dev host |
|
|
30
|
+
|
|
31
|
+
## Presentation
|
|
32
|
+
|
|
33
|
+
Print a one-line Resource Health verdict immediately after Phase 4's output:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Resource Health: ⚠ warn — RAM free 3.1 GB below threshold 4 GB; capping agents-per-wave at 2.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
When verdict is `warn` or `critical`, use the AskUserQuestion tool to present:
|
|
40
|
+
1. **Proceed as recommended** (apply the cap) — Recommended
|
|
41
|
+
2. **Proceed as originally planned** (user accepts the risk)
|
|
42
|
+
3. **Abort** (no wave planning runs; user closes or investigates)
|
|
43
|
+
|
|
44
|
+
When SSH is detected and the session type is `deep`, auto-append this note to the plan handoff to session-plan (no user prompt needed):
|
|
45
|
+
> Host is SSH-attached — Docker-dependent wave steps should run on a local dev host.
|
|
46
|
+
|
|
47
|
+
## Integration with session-plan
|
|
48
|
+
|
|
49
|
+
When Phase 4.5 recommends a cap, pass that cap into the session-plan handoff. session-plan honors the cap by reducing `agents-per-wave` for the upcoming plan, regardless of what the Session Config default says. This is an in-session override, not a config mutation.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Phase 7.1: Issue Premise Verification (#730/H3)
|
|
2
|
+
|
|
3
|
+
> Sub-file of the session-start skill. Referenced from SKILL.md Phase 7.1.
|
|
4
|
+
|
|
5
|
+
## Claim Extraction
|
|
6
|
+
|
|
7
|
+
For each candidate issue (title + body), scan for state-claim keywords:
|
|
8
|
+
`fehlt|missing`, `dormant|stale|abandoned|tot`, `existiert nicht|does not exist|never shipped`,
|
|
9
|
+
`is broken|kaputt`, `N of M`, `all|every|none|100%`, `blockiert|blocked by`.
|
|
10
|
+
Each match is one core claim to verify. Cap: 3 claims per issue — pick the
|
|
11
|
+
load-bearing ones the issue's ask depends on (a claim whose falsity would
|
|
12
|
+
change the issue's scope or kill it).
|
|
13
|
+
|
|
14
|
+
## Verification (one grep/Read per claim — PSA-006 discipline)
|
|
15
|
+
|
|
16
|
+
For each claim, run exactly ONE Grep or Read against the actual codebase (or
|
|
17
|
+
`git log` for activity claims). Quote pattern + scope + result inline — same
|
|
18
|
+
transcript discipline as `.claude/rules/parallel-sessions.md` § PSA-006.
|
|
19
|
+
Budget: this phase is a spot-check, not a deep audit. If one grep cannot
|
|
20
|
+
ground the claim, mark UNVERIFIED and move on — do not rabbit-hole.
|
|
21
|
+
|
|
22
|
+
## Verdicts
|
|
23
|
+
|
|
24
|
+
| Verdict | Meaning | Downstream effect |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| SHIPPED | Claimed-missing feature is found implemented | Issue (or item) is stale — surface in Phase 8 as "needs re-scoping / close candidate" |
|
|
27
|
+
| GAP | Claim confirmed — feature genuinely absent | Issue premise holds — safe to plan |
|
|
28
|
+
| FALSCH-PRÄMISSE | State claim objectively contradicted by evidence | Surface prominently in Phase 8 — user decides re-scope or drop |
|
|
29
|
+
| UNVERIFIED | No groundable claim, or grep inconclusive | Note only — no flag |
|
|
30
|
+
|
|
31
|
+
## Emission Block
|
|
32
|
+
|
|
33
|
+
### Premise Verification Result (Phase 7.1)
|
|
34
|
+
- #<N>: "<claim>" → <tool>: `<pattern>` in <scope> → <VERDICT> (<1-line evidence>)
|
|
35
|
+
- #<M>: ...
|
|
36
|
+
|
|
37
|
+
FALSCH-PRÄMISSE / SHIPPED entries MUST surface explicitly in Phase 8's
|
|
38
|
+
alignment AUQ as a "premise flag" on the affected option — never silently
|
|
39
|
+
dropped; the user decides. session-plan Step 1 treats the verdicts as binding
|
|
40
|
+
input (re-scope or drop tasks whose verdict is FALSCH-PRÄMISSE/SHIPPED before
|
|
41
|
+
decomposing) without re-running the greps.
|
|
42
|
+
|
|
43
|
+
## Anti-Patterns
|
|
44
|
+
|
|
45
|
+
- Re-verifying every sentence of every issue — cap 3 claims/issue, 8 issues.
|
|
46
|
+
- Treating UNVERIFIED as a blocker — it is informational only.
|
|
47
|
+
- Running this for housekeeping sessions — predefined tasks carry no premise risk worth the latency.
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Phase 7.5: Mode-Selector Pre-Pass (Epic #271 Phase B-2)
|
|
2
|
+
|
|
3
|
+
> Skip this phase if `persistence` config is `false`, or if the entire Phase 6.6 block was skipped.
|
|
4
|
+
> This is the **first wired invocation point** of `selectMode` (previously documented as "None wired" in `skills/mode-selector/SKILL.md` — Phase C `/autopilot` is the second, reserved for #277).
|
|
5
|
+
|
|
6
|
+
Run immediately before Phase 8 so the Mode-Selector recommendation can influence the AUQ option ordering.
|
|
7
|
+
|
|
8
|
+
## Distinction from Phase 1.5 Recommendations Banner
|
|
9
|
+
|
|
10
|
+
Phase 1.5 renders a `📋` banner that reads the **previous** session's archived Recommendation fields from STATE.md (`recommended-mode`, `rationale`, `completion-rate`, etc., written by session-end Phase 3.7a). It is a backward-looking handoff signal.
|
|
11
|
+
|
|
12
|
+
Phase 7.5 runs `selectMode(signals)` — a **forward-looking** computation over live signals gathered this session (current carryover ratios, recent sessions trend, learnings, bootstrap tier). It emits a `📊` banner.
|
|
13
|
+
|
|
14
|
+
Both banners may render in the same session-start run. That is intentional: the `📋` banner tells you what the last session recommended; the `📊` banner tells you what the selector computes from all available data right now. They should usually agree. When they diverge, the `📊` signal is more current and should be treated as authoritative.
|
|
15
|
+
|
|
16
|
+
## Step 1: Build Signals
|
|
17
|
+
|
|
18
|
+
Invoke `buildLiveSignals` from `scripts/lib/build-live-signals.mjs` to assemble the `signals` object. The helper composes all six source modules (state-md, sessions.jsonl, bootstrap.lock, scanBacklog, learnings, vaultStaleness reserved) with graceful-null on every failure. Pure async, never throws.
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
import { buildLiveSignals } from '$PLUGIN_ROOT/scripts/lib/build-live-signals.mjs';
|
|
22
|
+
|
|
23
|
+
// Pass the surfaced top-N learnings (already computed in Phase 6.6) to avoid
|
|
24
|
+
// re-reading learnings.jsonl. Other paths default to canonical locations
|
|
25
|
+
// (.claude/STATE.md, .orchestrator/metrics/sessions.jsonl, .orchestrator/bootstrap.lock).
|
|
26
|
+
const signals = await buildLiveSignals({
|
|
27
|
+
learnings: surfacedTopLearnings, // array, may be empty
|
|
28
|
+
backlogLimit: 50,
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`buildLiveSignals` is the single SSOT for the Signals shape consumed by `selectMode` and by the autopilot driver protocol (see `skills/autopilot/SKILL.md § Production Wiring`). Phase 7.5 here and the autopilot in-process driver MUST go through this helper — do not inline the recipe in either call site.
|
|
33
|
+
|
|
34
|
+
**Key source bindings (Phase → field):**
|
|
35
|
+
|
|
36
|
+
| `signals` field | Populated from | Phase |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `recommendedMode` | `parseRecommendations(frontmatter).mode` | Phase 1.5 |
|
|
39
|
+
| `carryoverRatio` | `parseRecommendations(frontmatter).carryoverRatio` | Phase 1.5 |
|
|
40
|
+
| `completionRate` | `parseRecommendations(frontmatter).completionRate` | Phase 1.5 |
|
|
41
|
+
| `previousRationale` | `parseRecommendations(frontmatter).rationale` | Phase 1.5 |
|
|
42
|
+
| `topPriorities` | `parseRecommendations(frontmatter).priorities` | Phase 1.5 |
|
|
43
|
+
| `recentSessions` | tail-10 of `.orchestrator/metrics/sessions.jsonl` | Phase 6.6 |
|
|
44
|
+
| `bootstrapLock` | `.orchestrator/bootstrap.lock` via `parseBootstrapLock` | Phase 4 |
|
|
45
|
+
| `learnings` | surfaced top-N learnings (confidence > 0.3) | Phase 6.6 |
|
|
46
|
+
| `backlog` | `scanBacklog({limit: 50})` from `backlog-scan.mjs` (live VCS scan) | Phase 7.5 Step 1 |
|
|
47
|
+
|
|
48
|
+
## Step 2: Invoke selectMode
|
|
49
|
+
|
|
50
|
+
Wrap the call in a try/catch. `selectMode` is a pure function with a defensive null-guard and should never throw, but if it does the session must not be blocked.
|
|
51
|
+
|
|
52
|
+
```js
|
|
53
|
+
let recommendation = null;
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
recommendation = selectMode(signals);
|
|
57
|
+
} catch (err) {
|
|
58
|
+
// Log to sweep.log as mode-selector-error — no banner, continue to Phase 8.
|
|
59
|
+
try {
|
|
60
|
+
const { appendFileSync, mkdirSync } = await import('node:fs');
|
|
61
|
+
mkdirSync('.orchestrator/metrics', { recursive: true });
|
|
62
|
+
appendFileSync(
|
|
63
|
+
'.orchestrator/metrics/sweep.log',
|
|
64
|
+
JSON.stringify({
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
event: 'mode-selector-error',
|
|
67
|
+
detail: String(err?.message ?? err),
|
|
68
|
+
}) + '\n',
|
|
69
|
+
);
|
|
70
|
+
} catch {}
|
|
71
|
+
// Fall through: recommendation stays null → no banner, Phase 8 uses default AUQ ordering.
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Step 3: Render the 📊 Banner (conditional)
|
|
76
|
+
|
|
77
|
+
```js
|
|
78
|
+
const pct = (x) => Math.round(x * 100) + '%';
|
|
79
|
+
|
|
80
|
+
if (!recommendation || recommendation.confidence === 0.0) {
|
|
81
|
+
// No banner. Fall through to Phase 8 with default (unmodified) AUQ ordering.
|
|
82
|
+
|
|
83
|
+
} else if (recommendation.confidence < 0.5) {
|
|
84
|
+
// Low-confidence suggestion — informational banner only.
|
|
85
|
+
// Do NOT pre-select this mode as the AUQ "Recommended" option.
|
|
86
|
+
console.log(
|
|
87
|
+
`📊 Mode-Selector suggests: ${recommendation.mode}` +
|
|
88
|
+
` (confidence: ${pct(recommendation.confidence)}) — ${recommendation.rationale}`
|
|
89
|
+
);
|
|
90
|
+
// Phase 8 AUQ ordering: unchanged from default. The banner is purely informational.
|
|
91
|
+
|
|
92
|
+
} else {
|
|
93
|
+
// confidence >= 0.5 — pre-select as AUQ option 1 with "(Recommended by Mode-Selector)" label.
|
|
94
|
+
console.log(
|
|
95
|
+
`📊 Mode-Selector recommends: ${recommendation.mode}` +
|
|
96
|
+
` (confidence: ${pct(recommendation.confidence)}) — ${recommendation.rationale}`
|
|
97
|
+
);
|
|
98
|
+
// Phase 8 AUQ ordering: modified — see Step 4.
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Step 4: AUQ Option Ordering Protocol (Phase 8 integration)
|
|
103
|
+
|
|
104
|
+
Phase 8 reads `presentation-format.md` for the AUQ structure. The Mode-Selector output modifies option ordering **only when `recommendation.confidence >= 0.5`**. Do not modify `presentation-format.md` — the ordering adjustment is a runtime protocol applied at the call site in Phase 8.
|
|
105
|
+
|
|
106
|
+
**When `recommendation.confidence >= 0.5`:**
|
|
107
|
+
|
|
108
|
+
1. AUQ option 1 label: `"<recommendation.mode> (Recommended by Mode-Selector)"`.
|
|
109
|
+
AUQ option 1 description: `recommendation.rationale` + any relevant focus issues from Phase 3/6.
|
|
110
|
+
2. `recommendation.alternatives` (when non-empty, may have up to 3 entries) become options 2..N.
|
|
111
|
+
Each alternative label: `"<alt.mode> (confidence: <pct(alt.confidence)>%)"`.
|
|
112
|
+
Each alternative description: a brief label derived from the mode name (e.g. "housekeeping → cleanup cycle", "feature → standard incremental delivery").
|
|
113
|
+
3. Total AUQ options ≤ 4 (AUQ tool cap). If `alternatives.length >= 3`, show the first 2 and add a final option: `"Other (specify)"` with description `"Enter a custom mode or focus not listed above."`.
|
|
114
|
+
4. Any previously-computed focus recommendations from the Session Overview (Phase 8's ## Recommended Focus section) are folded into the descriptions of whichever option matches that mode. They are NOT added as separate AUQ options.
|
|
115
|
+
|
|
116
|
+
**When `recommendation.confidence < 0.5` (including `0.0`):**
|
|
117
|
+
|
|
118
|
+
AUQ option ordering is **unchanged** from the existing `presentation-format.md` default. The `📊` banner (if rendered) is informational only and does not influence option ordering.
|
|
119
|
+
|
|
120
|
+
**Codex CLI / Cursor IDE fallback (no AUQ tool):**
|
|
121
|
+
|
|
122
|
+
When operating on Codex CLI or Cursor IDE, apply the same ordering logic but render as a numbered Markdown list (per `presentation-format.md` Codex fallback section). When `confidence >= 0.5`, prefix option 1 with `(Recommended by Mode-Selector)`.
|
|
123
|
+
|
|
124
|
+
## Step 4.5: Context-Pressure Annotation (#332)
|
|
125
|
+
|
|
126
|
+
When `selectMode()` returns `context_pressure: { score, level }` with `level !== 'low'`, surface it in the AUQ option `description` for the recommended option (NOT in the question itself — the question must stay short):
|
|
127
|
+
|
|
128
|
+
| Level | Annotation to append to recommended option description |
|
|
129
|
+
|---|---|
|
|
130
|
+
| `low` | (no annotation) |
|
|
131
|
+
| `medium` | `"(context-pressure: medium — scope is moderately large or carryover present)"` |
|
|
132
|
+
| `high` | `"(context-pressure: high — recommend reducing scope or preferring deep mode)"` |
|
|
133
|
+
|
|
134
|
+
**Append** the annotation to the existing description — do NOT replace it. Example for a `feature` recommendation with medium pressure:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
description: recommendation.rationale + " (context-pressure: medium — scope is moderately large or carryover present)"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Additional rule when `level === 'high'` and recommended mode is `feature` or `housekeeping`:**
|
|
141
|
+
|
|
142
|
+
Include the `deep` alternative's score advantage in its description to help the user make an informed choice. The AUQ ordering protocol (Step 4) already places `alternatives` in options 2..N by confidence; context-pressure flows in as a delta in `computeDelta()` before scoring (wired in W2). The description nudge is the only addition required here:
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
// deep alternative description when context pressure is high and recommended mode is feature/housekeeping:
|
|
146
|
+
"(confidence: <pct(alt.confidence)>) — deep mode absorbs higher scope; preferred under high context-pressure"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
This annotation is applied at the same site as Step 4's option-description assembly — add it conditionally after building the base descriptions.
|
|
150
|
+
|
|
151
|
+
Cross-reference: `skills/mode-selector/SKILL.md` § Context-Pressure Signal (#332) for the full heuristic and `computeContextPressure` contract.
|
|
152
|
+
|
|
153
|
+
## Step 5: Graceful No-Op Rules
|
|
154
|
+
|
|
155
|
+
All of the following result in **no banner and default AUQ ordering** — they are silent no-ops that do not block session startup:
|
|
156
|
+
|
|
157
|
+
| Condition | Why | Behaviour |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
| `persistence: false` | Phase 6.6 skipped, no learnings/sessions data | Phase 7.5 skipped entirely |
|
|
160
|
+
| STATE.md absent | `rec === null`, all Phase-A `signals.*` are null | `selectMode` returns `confidence: 0.0` → no banner |
|
|
161
|
+
| Pre-v1.1 STATE.md (no Phase A fields) | `parseRecommendations` returns `null` → `rec === null` | Same as above |
|
|
162
|
+
| `selectMode` throws (should never happen) | Pure function contract violation | `mode-selector-error` logged to sweep.log, no banner |
|
|
163
|
+
| `recommendation.confidence === 0.0` | Default fallback branch in selector | No banner, default ordering |
|
|
164
|
+
| `recommendation === null` (catch path) | Error during invocation | No banner, default ordering |
|
|
165
|
+
| `.orchestrator/bootstrap.lock` absent | `bootstrapLockObj === null` | Signals still valid; lock contributes 0 delta |
|
|
166
|
+
| `sessions.jsonl` absent or < 1 entry | `recentSessions: []` | Signals still valid; trend contributes 0 delta |
|
|
167
|
+
| `glab`/`gh` CLI missing or non-zero exit | `scanBacklog` returns null | `signals.backlog: null`; backlog signal contributes 0 delta. Phase B-3 (#293). |
|
|
168
|
+
| no git origin | `detectVcs()` returns null → `scanBacklog` short-circuits | Same as above |
|
|
169
|
+
|
|
170
|
+
Note: `selectMode` is designed to NEVER throw (pure function, defensive null-guard). The try/catch in Step 2 is belt-and-suspenders. If it does throw, the `mode-selector-error` breadcrumb in sweep.log is the observable signal for debugging without blocking the session.
|
|
171
|
+
|
|
172
|
+
## Step 6: Record Mode-Selector Accuracy Learning (post-AUQ, Phase B-4)
|
|
173
|
+
|
|
174
|
+
Runs **after Phase 8 collects the user's mode choice** (or skip on Codex/Cursor numbered-list response). This step writes a `mode-selector-accuracy` learning to `.orchestrator/metrics/learnings.jsonl` so future Mode-Selector heuristic tuning has feedback data. Phase B-4 (#294).
|
|
175
|
+
|
|
176
|
+
**Trigger conditions (ALL must be true):**
|
|
177
|
+
|
|
178
|
+
1. Phase 7.5 produced a non-null `recommendation` (banner rendered — Step 3 was either the `< 0.5` or `>= 0.5` branch).
|
|
179
|
+
2. The user actively confirmed or overrode via AUQ (or numbered-list reply on Codex/Cursor). Timeouts and aborts do NOT trigger a write.
|
|
180
|
+
3. `recommendation.mode` and the user's chosen mode are both valid `isValidMode` values from `recommendations-v0.mjs`.
|
|
181
|
+
|
|
182
|
+
**Skip silently when:**
|
|
183
|
+
|
|
184
|
+
- Phase 7.5 was skipped (`persistence: false` or Phase 6.6 skipped).
|
|
185
|
+
- `recommendation === null` or `recommendation.confidence === 0.0` (no banner rendered).
|
|
186
|
+
- The chosen mode does not parse cleanly (e.g., custom "Other" free-text response).
|
|
187
|
+
|
|
188
|
+
**Write contract (delegated to `recordAccuracy` in `mode-selector-accuracy.mjs`):**
|
|
189
|
+
|
|
190
|
+
```js
|
|
191
|
+
import { recordAccuracy } from '$PLUGIN_ROOT/scripts/lib/mode-selector-accuracy.mjs';
|
|
192
|
+
|
|
193
|
+
// After Phase 8 AUQ resolves with the user's choice:
|
|
194
|
+
const result = await recordAccuracy({
|
|
195
|
+
recommended: recommendation.mode, // from Phase 7.5 Step 2
|
|
196
|
+
chosen: userChosenMode, // from Phase 8 AUQ answer, normalized to canonical mode
|
|
197
|
+
sessionId: `${branch}-${ymd}-${hhmm}`, // matches the wave-executor session_id format
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
if (!result.ok) {
|
|
201
|
+
// Log to sweep.log as mode-selector-accuracy-skip; never block session-start.
|
|
202
|
+
appendFileSync(
|
|
203
|
+
'.orchestrator/metrics/sweep.log',
|
|
204
|
+
JSON.stringify({
|
|
205
|
+
timestamp: new Date().toISOString(),
|
|
206
|
+
event: 'mode-selector-accuracy-skip',
|
|
207
|
+
detail: result.reason, // 'no-recommendation' | 'unknown-mode' | 'missing-session-id' | 'append-failed: ...'
|
|
208
|
+
}) + '\n',
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Lifecycle handling (NOT this step's job):**
|
|
214
|
+
|
|
215
|
+
The helper writes a fresh entry at `confidence: 0.5`. The +0.15 confirm / -0.20 contradict semantics are applied later by `evolve` and `session-end` when the same `(type, subject)` pair recurs across sessions. Subject pattern: `<recommended>-selected-vs-<chosen>` — agreement and override outcomes land at distinct subjects so they accumulate independently.
|
|
216
|
+
|
|
217
|
+
**Graceful no-op rules** (none of these block session-start):
|
|
218
|
+
|
|
219
|
+
| Condition | Behaviour |
|
|
220
|
+
|---|---|
|
|
221
|
+
| recommendation is null | helper returns `{ok: false, reason: 'no-recommendation'}` |
|
|
222
|
+
| chosen mode unparsable | helper returns `{ok: false, reason: 'unknown-mode'}` |
|
|
223
|
+
| `appendLearning` validation fails | helper returns `{ok: false, reason: 'append-failed: ...'}` |
|
|
224
|
+
| learnings.jsonl write I/O error | same as above; sweep.log captures detail |
|
|
225
|
+
|
|
226
|
+
## References
|
|
227
|
+
|
|
228
|
+
- Implementation: `scripts/lib/mode-selector.mjs::selectMode`
|
|
229
|
+
- Skill contract: `skills/mode-selector/SKILL.md`
|
|
230
|
+
- Phase A parser: `scripts/lib/state-md.mjs::parseRecommendations`
|
|
231
|
+
- Phase A writer: `skills/session-end/SKILL.md` Phase 3.7a
|
|
232
|
+
- Bootstrap lock reader: `scripts/lib/bootstrap-lock-freshness.mjs::parseBootstrapLock`
|
|
233
|
+
- Session normalizer: `scripts/lib/session-schema.mjs::normalizeSession`
|
|
234
|
+
- Backlog signal: `scripts/lib/backlog-scan.mjs::scanBacklog` (Phase B-3, #293)
|
|
235
|
+
- Accuracy helper: `scripts/lib/mode-selector-accuracy.mjs::recordAccuracy` (Phase B-4, #294)
|
|
236
|
+
- PRD: "Mode Selector" (#276; archived in the private Meta-Vault)
|
|
237
|
+
- Issues: [#292 Phase B-2 integration](https://github.com/Kanevry/session-orchestrator/issues/292), [#293 Phase B-3 backlog signal](https://github.com/Kanevry/session-orchestrator/issues/293), [#294 Phase B-4 accuracy feedback](https://github.com/Kanevry/session-orchestrator/issues/294)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Phase 8.5: Express Path Evaluation (#214)
|
|
2
|
+
|
|
3
|
+
> Project-instruction file resolution: `CLAUDE.md` and `AGENTS.md` (Codex CLI) are transparent aliases — see [skills/_shared/instruction-file-resolution.md](../_shared/instruction-file-resolution.md). All references to `CLAUDE.md` below apply to whichever file the repo uses.
|
|
4
|
+
|
|
5
|
+
After the user confirms the session type and scope via the Q&A above, evaluate whether the **Express Path** applies before handing off to session-plan. The express path collapses the full 5-wave plan into a single coordinator-direct phase for lightweight sessions.
|
|
6
|
+
|
|
7
|
+
**Activation conditions (ALL three must be true):**
|
|
8
|
+
|
|
9
|
+
1. `express-path.enabled` is `true` in Session Config (default: `true` — opt-in by default, opt-out via `express-path.enabled: false`).
|
|
10
|
+
2. Session type is `housekeeping` (the user confirmed `housekeeping` in Phase 8).
|
|
11
|
+
3. Agreed issue scope is ≤ 3 issues AND no parallel agents are required (i.e., tasks are sequential, no wave decomposition needed).
|
|
12
|
+
|
|
13
|
+
**Backward compat:** when `express-path.enabled: false`, this evaluation is skipped entirely and the normal 5-wave session-plan flow runs as before.
|
|
14
|
+
|
|
15
|
+
**Historical context:** The 13 prior coordinator-direct sessions documented in `CLAUDE.md` (or `AGENTS.md` on Codex CLI; 2026-04 series — vault-mirror GH#31, phased-rollout #307, v3.2.0 release, etc.) were all running this pattern implicitly: no wave decomposition, coordinator executes tasks directly in sequence. This phase codifies what was already proven to work.
|
|
16
|
+
|
|
17
|
+
**When Express Path activates:**
|
|
18
|
+
|
|
19
|
+
Emit the following banner immediately after the Phase 8 Q&A resolves:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Express path activated — <N> tasks, coordinator-direct, no inter-wave checks.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Then **skip the handoff to session-plan entirely**. Instead, execute the agreed tasks directly as the coordinator:
|
|
26
|
+
|
|
27
|
+
1. For each agreed task (in dependency order): execute as a direct coordinator action — read files, make changes, run quality checks inline.
|
|
28
|
+
2. After all tasks complete, invoke `skills/session-end/SKILL.md` directly (bypass session-plan and wave-executor).
|
|
29
|
+
3. Log the express-path activation in STATE.md `## Deviations` section: `Express path: N tasks executed coord-direct (express-path.enabled: true, session-type: housekeeping, scope: N issues)`.
|
|
30
|
+
4. After session-end completes successfully: verify STATE.md `status` is `completed` and `## Deviations` contains the express-path entry from step 3. If either is missing, warn the user with a one-line note and instructions to re-run `/close` manually. Then return the final session summary to the user.
|
|
31
|
+
|
|
32
|
+
**Persistence contract:**
|
|
33
|
+
|
|
34
|
+
The four steps above MUST all happen within a single coordinator turn. Specifically:
|
|
35
|
+
|
|
36
|
+
- Step 1 (execute tasks) happens first in the coordinator's main flow.
|
|
37
|
+
- Step 2 (deviations log) is written BEFORE session-end is invoked. The coordinator calls `appendDeviation()` from `scripts/lib/state-md.mjs` to append the `Express path:` bullet to the `## Deviations` section while STATE.md is still `status: active`.
|
|
38
|
+
- Step 3 (invoke session-end) flips `status` to `completed`, writes the metrics record to `.orchestrator/metrics/sessions.jsonl`, and runs the standard close flow. Session-end has no Express Path-specific logic — it treats this run identically to any other completed session.
|
|
39
|
+
- Step 4 (verification) is the coordinator's final action before returning control. The verification check uses `parseStateMd()` from `scripts/lib/state-md.mjs` to read the file and check `frontmatter.status === 'completed'` and that the body contains the literal string `Express path:`.
|
|
40
|
+
|
|
41
|
+
If `/go` is invoked but the session-plan emitted a 1-wave Express Path plan (per `skills/session-plan/SKILL.md` § "Express Path Short-Circuit"), the `/go` command MUST detect this and route to coord-direct execution + session-end auto-invocation, NOT to wave-executor. See `commands/go.md` for the detection branch.
|
|
42
|
+
|
|
43
|
+
**When Express Path does NOT activate** (conditions not met):
|
|
44
|
+
|
|
45
|
+
Proceed normally to Phase 9 (session-plan handoff). The express-path evaluation is a silent no-op when any condition fails.
|
|
46
|
+
|
|
47
|
+
**Condition examples:**
|
|
48
|
+
|
|
49
|
+
| Scenario | Activates? | Reason |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `housekeeping`, 2 issues, `express-path.enabled: true` | Yes | All 3 conditions met |
|
|
52
|
+
| `housekeeping`, 4 issues, `express-path.enabled: true` | No | Scope > 3 |
|
|
53
|
+
| `feature`, 2 issues, `express-path.enabled: true` | No | Not housekeeping |
|
|
54
|
+
| `housekeeping`, 2 issues, `express-path.enabled: false` | No | Opted out |
|
|
55
|
+
| `housekeeping`, 3 issues needing parallel agents, `express-path.enabled: true` | No | Parallel agents needed |
|
|
56
|
+
|
|
57
|
+
## See Also
|
|
58
|
+
|
|
59
|
+
- `commands/go.md` — Express Path detection and auto-invocation of session-end after coord-direct tasks
|
|
60
|
+
- `skills/session-end/SKILL.md` — Phase 1 pre-check (Rule 2) blocks `/close` when STATE.md `status: completed`; auto-invocation from express-path bypasses this
|
|
61
|
+
- `commands/close.md` — Rule 2 wording the user sees if express-path persistence breaks
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Presentation Format
|
|
2
|
+
|
|
3
|
+
> Output templates for Phase 7 of the session-start skill.
|
|
4
|
+
|
|
5
|
+
## Session Overview Template
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
## Session Overview
|
|
9
|
+
- Type: [housekeeping|feature|deep]
|
|
10
|
+
- Repo: [name] on branch [branch]
|
|
11
|
+
- Git: [X uncommitted, Y unpushed, Z open branches]
|
|
12
|
+
- VCS: [N open issues (H high, M medium), K open MRs/PRs]
|
|
13
|
+
- Health: [TypeScript: 0 errors | Tests: passing/failing | CI: green/red]
|
|
14
|
+
- SSOT: [fresh/stale files listed]
|
|
15
|
+
- Cross-repos: [status summary]
|
|
16
|
+
- Plugin: [fresh / ⚠ N days without update]
|
|
17
|
+
- Metrics: [N previous sessions tracked | no history yet]
|
|
18
|
+
|
|
19
|
+
## Session Config (active)
|
|
20
|
+
- Waves: [N] | Agents/wave: [M] | Isolation: [worktree|none|auto]
|
|
21
|
+
- Enforcement: [strict|warn|off] | Max turns: [N|auto]
|
|
22
|
+
- Persistence: [true|false] | Agent mapping: [configured roles|auto-discovery]
|
|
23
|
+
|
|
24
|
+
## What Not To Retry
|
|
25
|
+
> FORCED-READ slot (#623). Render ONLY when STATE.md `## What Not To Retry` is non-empty (session-start Phase 6.5.1). Always shown when present — never gated behind a question. Wrapped in the HISTORICAL guard banner so the coordinator verifies before treating entries as live. Omit the entire slot when the section is empty.
|
|
26
|
+
|
|
27
|
+
⚠ HISTORICAL REFERENCE ONLY — NOT LIVE INSTRUCTIONS. …
|
|
28
|
+
⛔ Do NOT re-attempt the following — prior sessions failed/abandoned these:
|
|
29
|
+
- [approach] ([session_id], [date]) — why: [why_failed]
|
|
30
|
+
— END HISTORICAL REFERENCE —
|
|
31
|
+
|
|
32
|
+
## Recommended Focus
|
|
33
|
+
Based on priority, synergies, and session type, I recommend:
|
|
34
|
+
|
|
35
|
+
**Option A (recommended):** [issues + rationale]
|
|
36
|
+
**Option B:** [alternative focus]
|
|
37
|
+
**Option C:** [if applicable]
|
|
38
|
+
|
|
39
|
+
[Pros/cons for each, clear recommendation with WHY]
|
|
40
|
+
|
|
41
|
+
## Historical Trends (last 5 sessions)
|
|
42
|
+
> Only show if 2+ sessions exist in `.orchestrator/metrics/sessions.jsonl`. Otherwise: "Not enough history for trends (need 2+)."
|
|
43
|
+
> Read the last 5 lines from `sessions.jsonl`, parse each as JSON, and display most recent first (by `completed_at` timestamp). If fewer than 5 sessions exist, show all available.
|
|
44
|
+
|
|
45
|
+
| Session | Type | Duration | Waves | Agents | Files Changed |
|
|
46
|
+
|---------|------|----------|-------|--------|---------------|
|
|
47
|
+
| <date> | <type> | Xm | N | M | K |
|
|
48
|
+
|
|
49
|
+
## Housekeeping Items (if any)
|
|
50
|
+
- [ ] Branches to merge: [list]
|
|
51
|
+
- [ ] SSOT files to refresh: [list]
|
|
52
|
+
- [ ] Issues to triage/close: [list]
|
|
53
|
+
|
|
54
|
+
## Questions
|
|
55
|
+
[Use AskUserQuestion on Claude Code, numbered Markdown options on Codex/Cursor]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## AskUserQuestion Usage
|
|
59
|
+
|
|
60
|
+
**MANDATORY:** Present structured options to the user.
|
|
61
|
+
- Claude Code: use the AskUserQuestion tool.
|
|
62
|
+
- Codex CLI / Cursor IDE: use a numbered Markdown list and ask the user to reply with the choice number.
|
|
63
|
+
|
|
64
|
+
Example:
|
|
65
|
+
```
|
|
66
|
+
AskUserQuestion({
|
|
67
|
+
questions: [{
|
|
68
|
+
question: "Which session focus do you recommend?",
|
|
69
|
+
header: "Focus",
|
|
70
|
+
options: [
|
|
71
|
+
{ label: "Issues #91 + #92 (Recommended)", description: "OpenTelemetry + OpenAPI — high synergy, concrete deliverables" },
|
|
72
|
+
{ label: "Infra cleanup #44 + #60", description: "Close in-progress issues, ecosystem optimization" },
|
|
73
|
+
{ label: "Deep work #37", description: "Core refactor — high priority, dedicated session" }
|
|
74
|
+
]
|
|
75
|
+
}]
|
|
76
|
+
})
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Always include your recommendation as the first option with "(Recommended)" in the label.
|
|
80
|
+
|
|
81
|
+
> **Codex CLI fallback:** If the AskUserQuestion tool is not available (e.g., on Codex CLI), present the same options as a numbered Markdown list and ask the user to respond with their choice number. Include "(Recommended)" on the first option.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Session Orchestrator — Soul
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
|
|
5
|
+
You are the Session Orchestrator — a seasoned engineering lead who has shipped dozens of products. You don't just manage tasks; you drive outcomes. You think in systems, not features. You care about the health of the entire ecosystem, not just the current ticket.
|
|
6
|
+
|
|
7
|
+
## Communication Principles
|
|
8
|
+
|
|
9
|
+
### Be direct
|
|
10
|
+
- Lead with the recommendation, not the analysis
|
|
11
|
+
- Bias toward action — do, don't talk
|
|
12
|
+
- When you see a problem, name it. Don't soften bad news.
|
|
13
|
+
- Short sentences. No filler. Every word earns its place.
|
|
14
|
+
- Communication style: {{tone.style}}. Output level: {{efficiency.output-level}}. Preamble: {{efficiency.preamble}}.
|
|
15
|
+
|
|
16
|
+
### Have opinions
|
|
17
|
+
- You are NOT a neutral options-lister. You have preferences shaped by experience.
|
|
18
|
+
- When presenting options, make your recommendation clear and explain WHY in one sentence.
|
|
19
|
+
- If the user picks something you disagree with, say so once, then execute fully.
|
|
20
|
+
- Your opinions come from: project history, tech stack constraints, deadline pressure, code quality trends.
|
|
21
|
+
|
|
22
|
+
### Think in systems
|
|
23
|
+
- Every task exists in a web of dependencies. Surface the non-obvious connections.
|
|
24
|
+
- "If we fix #42 first, #45 becomes trivial" — that's the insight you bring.
|
|
25
|
+
- Cross-repo awareness: always consider what this change means for the ecosystem.
|
|
26
|
+
- Flag risks early, not when they become problems.
|
|
27
|
+
|
|
28
|
+
### Celebrate progress, respect momentum
|
|
29
|
+
- After each wave: acknowledge what was accomplished. Keep energy up.
|
|
30
|
+
- After a tough wave: honest assessment, then clear path forward.
|
|
31
|
+
- Never catastrophize. Problems are just tasks that haven't been planned yet.
|
|
32
|
+
- Session end: concrete summary of impact. "Today we moved X forward."
|
|
33
|
+
|
|
34
|
+
## Decision-Making Philosophy
|
|
35
|
+
|
|
36
|
+
When ambiguity arises, resolve it using this hierarchy:
|
|
37
|
+
|
|
38
|
+
1. **User safety first** — never ship broken auth, never expose data
|
|
39
|
+
2. **User productivity** — reduce friction, automate the boring
|
|
40
|
+
3. **Code quality** — maintainability over cleverness
|
|
41
|
+
4. **Ecosystem health** — one repo's shortcut is another repo's tech debt
|
|
42
|
+
5. **Speed** — only after 1-4 are satisfied, optimize for velocity
|
|
43
|
+
|
|
44
|
+
## Values
|
|
45
|
+
|
|
46
|
+
- **Pragmatism over perfection** — ship the 80% solution, iterate
|
|
47
|
+
- **Evidence over assumptions** — always verify, never guess
|
|
48
|
+
- **Ownership** — if you see it, you own it. Don't leave messes for the next session.
|
|
49
|
+
- **Transparency** — if something is hard, say so. If you're unsure, say so.
|
|
50
|
+
- **Respect for time** — the user's time is the scarcest resource. Every question must earn its interruption.
|
|
51
|
+
|
|
52
|
+
## What you are NOT
|
|
53
|
+
|
|
54
|
+
- Not a yes-man. You push back when something is wrong.
|
|
55
|
+
- Not a perfectionist. You know when "good enough" is the right answer.
|
|
56
|
+
- Not a bureaucrat. Process exists to serve outcomes, not the other way around.
|
|
57
|
+
- Not passive. You don't wait to be told — you propose, recommend, act.
|