@event4u/agent-config 8.8.0 → 8.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +139 -263
- package/README.md +5 -5
- package/dist/agent-src/commands/agent-handoff.md +39 -2
- package/dist/agent-src/commands/cost/report.md +13 -3
- package/dist/agent-src/commands/research/deep.md +8 -0
- package/dist/agent-src/commands/research/report.md +7 -0
- package/dist/agent-src/commands/roadmap/create.md +12 -0
- package/dist/agent-src/commands/roadmap/process-full.md +31 -5
- package/dist/agent-src/commands/tests/create.md +28 -6
- package/dist/agent-src/commands/work.md +33 -0
- package/dist/agent-src/commands/worktree/cleanup.md +78 -0
- package/dist/agent-src/commands/worktree/create.md +62 -0
- package/dist/agent-src/commands/worktree/status.md +63 -0
- package/dist/agent-src/commands/worktree/verify.md +70 -0
- package/dist/agent-src/commands/worktree.md +85 -0
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +30 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +60 -31
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +37 -0
- package/dist/agent-src/contexts/execution/subagent-topologies.md +34 -0
- package/dist/agent-src/contexts/execution/verification-mechanics.md +9 -9
- package/dist/agent-src/rules/agent-authority.md +1 -1
- package/dist/agent-src/rules/communication-through-line.md +1 -1
- package/dist/agent-src/rules/delegation-policy.md +5 -0
- package/dist/agent-src/rules/design-fidelity.md +40 -0
- package/dist/agent-src/rules/direct-answers.md +1 -1
- package/dist/agent-src/rules/downstream-changes.md +1 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +65 -0
- package/dist/agent-src/rules/git-history-discipline.md +18 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +6 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +58 -10
- package/dist/agent-src/rules/non-destructive-by-default.md +3 -0
- package/dist/agent-src/rules/question-not-instruction.md +76 -0
- package/dist/agent-src/rules/senior-engineering-discipline.md +1 -1
- package/dist/agent-src/rules/spreadsheet-source-quality.md +61 -0
- package/dist/agent-src/rules/think-before-action.md +1 -0
- package/dist/agent-src/rules/tool-safety.md +8 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +87 -22
- package/dist/agent-src/scripts/update_roadmap_progress.ts +2 -1
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
- package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +15 -0
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +10 -3
- package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +13 -0
- package/dist/agent-src/skills/api-testing/SKILL.md +15 -1
- package/dist/agent-src/skills/character-consistency/evals/evals.json +16 -0
- package/dist/agent-src/skills/code-review/SKILL.md +2 -0
- package/dist/agent-src/skills/command-routing/evals/evals.json +14 -0
- package/dist/agent-src/skills/command-writing/SKILL.md +53 -40
- package/dist/agent-src/skills/dashboard-design/evals/evals.json +16 -0
- package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/dcf-modeling/evals/evals.json +20 -0
- package/dist/agent-src/skills/decision-record/evals/evals.json +20 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -0
- package/dist/agent-src/skills/design-intelligence/SKILL.md +49 -12
- package/dist/agent-src/skills/design-intelligence/evals/evals.json +14 -0
- package/dist/agent-src/skills/design-review/SKILL.md +35 -15
- package/dist/agent-src/skills/design-system-capture/SKILL.md +84 -24
- package/dist/agent-src/skills/design-system-capture/evals/evals.json +15 -0
- package/dist/agent-src/skills/developer-like-execution/evals/evals.json +16 -0
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +27 -0
- package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +16 -0
- package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/editorial-calendar/evals/evals.json +16 -0
- package/dist/agent-src/skills/estimate-ticket/evals/evals.json +16 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +30 -0
- package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +47 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +36 -5
- package/dist/agent-src/skills/fe-design/evals/triggers.json +47 -0
- package/dist/agent-src/skills/forecasting/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/forecasting/evals/evals.json +20 -0
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +16 -0
- package/dist/agent-src/skills/html-deck/SKILL.md +27 -0
- package/dist/agent-src/skills/iconography/SKILL.md +24 -0
- package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/incident-commander/evals/evals.json +20 -0
- package/dist/agent-src/skills/launch-readiness/evals/evals.json +21 -0
- package/dist/agent-src/skills/logging-monitoring/evals/evals.json +16 -0
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -0
- package/dist/agent-src/skills/mcp/SKILL.md +24 -0
- package/dist/agent-src/skills/mcp-builder/SKILL.md +9 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +55 -4
- package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/messaging-architecture/evals/evals.json +16 -0
- package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +16 -0
- package/dist/agent-src/skills/pest-testing/SKILL.md +1 -1
- package/dist/agent-src/skills/playwright-testing/SKILL.md +16 -0
- package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +16 -0
- package/dist/agent-src/skills/refine-prompt/evals/evals.json +16 -0
- package/dist/agent-src/skills/refine-ticket/evals/evals.json +16 -0
- package/dist/agent-src/skills/release-comms/evals/evals.json +16 -0
- package/dist/agent-src/skills/rice-prioritization/evals/evals.json +20 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +39 -5
- package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/runway-cognition/evals/evals.json +20 -0
- package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/scenario-modeling/evals/evals.json +20 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +7 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +12 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +98 -0
- package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +47 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +27 -33
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
- package/dist/agent-src/skills/systematic-debugging/evals/evals.json +20 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +118 -0
- package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +52 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +32 -6
- package/dist/agent-src/skills/test-driven-development/evals/evals.json +16 -0
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +34 -4
- package/dist/agent-src/skills/threat-modeling/evals/evals.json +21 -0
- package/dist/agent-src/skills/typography-system/evals/evals.json +14 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -0
- package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +40 -0
- package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +24 -0
- package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +16 -0
- package/dist/agent-src/skills/vision-articulation/evals/evals.json +16 -0
- package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +16 -0
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +180 -0
- package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +52 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +36 -0
- package/dist/cli/registry.js +3 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +326 -67
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -6
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +25 -14
- package/dist/discovery/trust-report.md +4 -4
- package/dist/discovery/workspaces.json +25 -12
- package/dist/install/install.mjs +136 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/claude_builtin_names.js +145 -0
- package/dist/scripts/_lib/claude_builtin_names.js.map +1 -0
- package/dist/scripts/condense.js +14 -0
- package/dist/scripts/condense.js.map +1 -1
- package/docs/CLAIMS.md +36 -8
- package/docs/architecture.md +4 -4
- package/docs/archive/CHANGELOG-pre-8.9.0.md +306 -0
- package/docs/benchmark.md +113 -0
- package/docs/catalog.md +32 -8
- package/docs/command-flows.md +6 -1
- package/docs/contracts/CHANGELOG-conventions.md +6 -0
- package/docs/contracts/command-clusters.md +18 -0
- package/docs/contracts/design-artifact-lifecycle.md +93 -0
- package/docs/contracts/design-artifact-verification.md +153 -0
- package/docs/contracts/injected-block-authenticity-model.md +66 -0
- package/docs/contracts/mcp-tool-inventory.md +28 -28
- package/docs/contracts/release-pr-gating.md +26 -0
- package/docs/contracts/release-sizing.md +85 -0
- package/docs/contracts/surface-agent-contracts.md +153 -0
- package/docs/decisions/ADR-061-corpus-grounding-layer.md +13 -0
- package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +1 -1
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +9 -0
- package/docs/distribution/consumer-matrix.md +96 -0
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +2 -2
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +27 -0
- package/docs/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +151 -0
- package/docs/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/docs/guidelines/design-canon.md +1 -0
- package/docs/proof.md +38 -23
- package/docs/release-runbook.md +3 -0
- package/docs/second-brain-scope.md +69 -26
- package/docs/self-review-gate.md +51 -0
- package/package.json +1 -1
- package/src/agent-src/scripts/update_roadmap_progress.ts +2 -1
- package/src/scripts/_dispatch.bash +27 -0
- package/src/scripts/_lib/claude_builtin_names.ts +148 -0
- package/src/scripts/_lib/file_slicer.ts +117 -0
- package/src/scripts/_lib/lexical_index.ts +155 -0
- package/src/scripts/_lib/orchestration_record.ts +183 -0
- package/src/scripts/_lib/orchestration_savings.ts +114 -9
- package/src/scripts/_lib/retrieval_sanitize.ts +71 -0
- package/src/scripts/_lib/security_lint.ts +1 -0
- package/src/scripts/_lib/stat_index.ts +98 -0
- package/src/scripts/benchmark.ts +122 -0
- package/src/scripts/build_proof.ts +30 -17
- package/src/scripts/check_memory.ts +2 -0
- package/src/scripts/check_quality_regression.ts +51 -0
- package/src/scripts/check_release_adjacent_health.ts +121 -0
- package/src/scripts/check_roadmap_trackable.ts +3 -2
- package/src/scripts/check_rule_invariants.ts +275 -0
- package/src/scripts/condense.ts +14 -0
- package/src/scripts/consumer_matrix.ts +353 -0
- package/src/scripts/discovery_graph.ts +0 -0
- package/src/scripts/external_sources_denylist.json +4 -1
- package/src/scripts/generate_index.ts +6 -2
- package/src/scripts/install-hooks.sh +25 -0
- package/src/scripts/install.ts +35 -2
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_agent_skill_names.ts +29 -0
- package/src/scripts/lint_changelog_rollback.ts +293 -0
- package/src/scripts/lint_knowledge_scale.ts +4 -3
- package/src/scripts/lint_roadmap_complexity.ts +124 -0
- package/src/scripts/lint_versioned_cache.ts +195 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +2 -1
- package/src/scripts/mcp_server/tools.ts +24 -1
- package/src/scripts/measure_lexical_ranking.ts +173 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/orchestration_record.ts +156 -0
- package/src/scripts/orchestration_savings_report.ts +65 -8
- package/src/scripts/schemas/skill.schema.json +4 -0
- package/src/scripts/score_domain_truth.ts +192 -0
- package/src/scripts/second_brain_retrieval.ts +320 -0
- package/src/scripts/second_brain_run.ts +341 -0
- package/src/scripts/self_review_gate.test.ts +65 -0
- package/src/scripts/self_review_gate.ts +272 -0
- package/src/scripts/trigger_eval_grandfather.json +223 -224
|
@@ -23,34 +23,34 @@ keep-beta-until: 2026-08-14
|
|
|
23
23
|
|
|
24
24
|
| Tool | Side-effect | Transports | Catalog | Handler |
|
|
25
25
|
|---|---|---|---|---|
|
|
26
|
-
| `lint_skills` | `ro` | stdio | [`consumer_tool_catalog.json:7`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L7) | [`tools.ts:
|
|
27
|
-
| `chat_history_append` | `fs-write` | stdio | [`consumer_tool_catalog.json:24`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L24) | [`tools.ts:
|
|
28
|
-
| `chat_history_read` | `ro` | stdio | [`consumer_tool_catalog.json:43`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L43) | [`tools.ts:
|
|
29
|
-
| `memory_lookup` | `ro` | stdio | [`consumer_tool_catalog.json:63`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L63) | [`tools.ts:
|
|
30
|
-
| `memory_get` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
31
|
-
| `memory_signal` | `fs-write` | stdio | [`consumer_tool_catalog.json:
|
|
32
|
-
| `memory_status` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
33
|
-
| `skill_trigger_eval` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
34
|
-
| `suggest_command` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
35
|
-
| `suggest_skill_for_task` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
36
|
-
| `mine_session` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
37
|
-
| `update_form_request_messages` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
38
|
-
| `sync_gitignore` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
39
|
-
| `sync_agent_settings` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
40
|
-
| `run_tests` | `shell` | stdio | [`consumer_tool_catalog.json:
|
|
41
|
-
| `run_quality_checks` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
42
|
-
| `list_skills` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
43
|
-
| `list_commands` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
44
|
-
| `list_rules` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
45
|
-
| `compile_router` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:
|
|
46
|
-
| `read_resource_body` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
47
|
-
| `roadmap_progress` | `fs-write` | stdio | [`consumer_tool_catalog.json:
|
|
48
|
-
| `roadmap_archive` | `fs-write` | stdio | [`consumer_tool_catalog.json:
|
|
49
|
-
| `capabilities_index` | `fs-write` | stdio | [`consumer_tool_catalog.json:
|
|
50
|
-
| `doctor_report` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
51
|
-
| `conformance_check` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
52
|
-
| `telemetry_report` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
53
|
-
| `council_estimate` | `ro` | stdio | [`consumer_tool_catalog.json:
|
|
26
|
+
| `lint_skills` | `ro` | stdio | [`consumer_tool_catalog.json:7`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L7) | [`tools.ts:1200`](../../src/scripts/mcp_server/tools.ts#L1200) |
|
|
27
|
+
| `chat_history_append` | `fs-write` | stdio | [`consumer_tool_catalog.json:24`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L24) | [`tools.ts:1228`](../../src/scripts/mcp_server/tools.ts#L1228) |
|
|
28
|
+
| `chat_history_read` | `ro` | stdio | [`consumer_tool_catalog.json:43`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L43) | [`tools.ts:1289`](../../src/scripts/mcp_server/tools.ts#L1289) |
|
|
29
|
+
| `memory_lookup` | `ro` | stdio | [`consumer_tool_catalog.json:63`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L63) | [`tools.ts:1365`](../../src/scripts/mcp_server/tools.ts#L1365) |
|
|
30
|
+
| `memory_get` | `ro` | stdio | [`consumer_tool_catalog.json:81`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L81) | [`tools.ts:1432`](../../src/scripts/mcp_server/tools.ts#L1432) |
|
|
31
|
+
| `memory_signal` | `fs-write` | stdio | [`consumer_tool_catalog.json:95`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L95) | [`tools.ts:1541`](../../src/scripts/mcp_server/tools.ts#L1541) |
|
|
32
|
+
| `memory_status` | `ro` | stdio | [`consumer_tool_catalog.json:111`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L111) | [`tools.ts:1456`](../../src/scripts/mcp_server/tools.ts#L1456) |
|
|
33
|
+
| `skill_trigger_eval` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:118`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L118) | _stub-only_ |
|
|
34
|
+
| `suggest_command` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:134`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L134) | _stub-only_ |
|
|
35
|
+
| `suggest_skill_for_task` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:149`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L149) | _stub-only_ |
|
|
36
|
+
| `mine_session` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:164`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L164) | _stub-only_ |
|
|
37
|
+
| `update_form_request_messages` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:178`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L178) | _stub-only_ |
|
|
38
|
+
| `sync_gitignore` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:193`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L193) | _stub-only_ |
|
|
39
|
+
| `sync_agent_settings` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:206`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L206) | _stub-only_ |
|
|
40
|
+
| `run_tests` | `shell` | stdio | [`consumer_tool_catalog.json:220`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L220) | [`tools.ts:1716`](../../src/scripts/mcp_server/tools.ts#L1716) |
|
|
41
|
+
| `run_quality_checks` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:234`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L234) | _stub-only_ |
|
|
42
|
+
| `list_skills` | `ro` | stdio | [`consumer_tool_catalog.json:247`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L247) | [`tools.ts:1470`](../../src/scripts/mcp_server/tools.ts#L1470) |
|
|
43
|
+
| `list_commands` | `ro` | stdio | [`consumer_tool_catalog.json:254`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L254) | [`tools.ts:1485`](../../src/scripts/mcp_server/tools.ts#L1485) |
|
|
44
|
+
| `list_rules` | `ro` | stdio | [`consumer_tool_catalog.json:261`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L261) | [`tools.ts:1500`](../../src/scripts/mcp_server/tools.ts#L1500) |
|
|
45
|
+
| `compile_router` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:268`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L268) | _stub-only_ |
|
|
46
|
+
| `read_resource_body` | `ro` | stdio | [`consumer_tool_catalog.json:281`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L281) | [`tools.ts:1516`](../../src/scripts/mcp_server/tools.ts#L1516) |
|
|
47
|
+
| `roadmap_progress` | `fs-write` | stdio | [`consumer_tool_catalog.json:295`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L295) | [`tools.ts:1575`](../../src/scripts/mcp_server/tools.ts#L1575) |
|
|
48
|
+
| `roadmap_archive` | `fs-write` | stdio | [`consumer_tool_catalog.json:308`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L308) | [`tools.ts:1598`](../../src/scripts/mcp_server/tools.ts#L1598) |
|
|
49
|
+
| `capabilities_index` | `fs-write` | stdio | [`consumer_tool_catalog.json:315`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L315) | [`tools.ts:1614`](../../src/scripts/mcp_server/tools.ts#L1614) |
|
|
50
|
+
| `doctor_report` | `ro` | stdio | [`consumer_tool_catalog.json:328`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L328) | [`tools.ts:1637`](../../src/scripts/mcp_server/tools.ts#L1637) |
|
|
51
|
+
| `conformance_check` | `ro` | stdio | [`consumer_tool_catalog.json:335`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L335) | [`tools.ts:1651`](../../src/scripts/mcp_server/tools.ts#L1651) |
|
|
52
|
+
| `telemetry_report` | `ro` | stdio | [`consumer_tool_catalog.json:342`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L342) | [`tools.ts:1665`](../../src/scripts/mcp_server/tools.ts#L1665) |
|
|
53
|
+
| `council_estimate` | `ro` | stdio | [`consumer_tool_catalog.json:355`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L355) | [`tools.ts:1687`](../../src/scripts/mcp_server/tools.ts#L1687) |
|
|
54
54
|
|
|
55
55
|
## Glossary
|
|
56
56
|
|
|
@@ -80,6 +80,27 @@ the feature-PR floor by adding:
|
|
|
80
80
|
| `release-validation.yml` (Phase B) | `release-shape` | shape detector — fails closed if diff exits the allowlist |
|
|
81
81
|
| `release-validation.yml` (Phase B) | `changelog-entry` | CHANGELOG carries an entry matching the head-branch version |
|
|
82
82
|
| `release-validation.yml` (Phase B) | `version-consistency` | `package.json` / `marketplace.json` / pack manifests agree on the version |
|
|
83
|
+
| `consumer-matrix.yml` | `consumer-matrix` · `publish-dry-run` · `mcp-worker-dry-run` · `plugin-bootstrap` | pack-based consumer E2E + pre-tag dry-runs of the release-adjacent workflows — see the exemption note below |
|
|
84
|
+
|
|
85
|
+
## Consumer-matrix exemption — the tarball window
|
|
86
|
+
|
|
87
|
+
The cut surface above rests on "release PRs cannot regress install or
|
|
88
|
+
runtime behaviour by construction". That argument covers the **source
|
|
89
|
+
diff** — it is blind to the **published tarball**. Every historical
|
|
90
|
+
packaging incident (tarball missing `src/install/` across two minors,
|
|
91
|
+
`tsx` absent from the package, npm-pin drift, the MCP worker deploy red
|
|
92
|
+
across five releases) entered `main` on ordinary PRs and manifested only
|
|
93
|
+
at publish time — exactly the window between merge and tag where nothing
|
|
94
|
+
pack-based ran.
|
|
95
|
+
|
|
96
|
+
[`consumer-matrix.yml`](../../.github/workflows/consumer-matrix.yml) is
|
|
97
|
+
therefore **exempt from the release-PR skip and runs ON release PRs** (its
|
|
98
|
+
primary trigger), packing the tarball and exercising it as a consumer,
|
|
99
|
+
plus dry-running `publish-npm.yml` and `deploy-mcp-worker.yml` before the
|
|
100
|
+
tag exists. Contract + counterfactual map:
|
|
101
|
+
[`docs/distribution/consumer-matrix.md`](../distribution/consumer-matrix.md).
|
|
102
|
+
The source-level skips above stay unchanged — the exemption adds the
|
|
103
|
+
tarball dimension, it does not reopen the source matrices.
|
|
83
104
|
|
|
84
105
|
## Rollback trigger — fail-closed
|
|
85
106
|
|
|
@@ -122,3 +143,8 @@ name alone never bypasses the heavy matrix.
|
|
|
122
143
|
release-branch naming convention.
|
|
123
144
|
- [`ADR-113`](../decisions/ADR-113-ci-native-release-label-trigger.md) — the
|
|
124
145
|
CI-native (`release`-label) entry point into the same script.
|
|
146
|
+
- [`docs/distribution/consumer-matrix.md`](../distribution/consumer-matrix.md) —
|
|
147
|
+
pack-based consumer E2E; the documented exemption from the cut surface.
|
|
148
|
+
- [`release-sizing.md`](release-sizing.md) — release scope floor: one primary
|
|
149
|
+
goal per minor, `Rollback:` lines for new / reworked subsystems (gate:
|
|
150
|
+
`src/scripts/lint_changelog_rollback.ts`).
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
stability: beta
|
|
3
|
+
keep-beta-until: 2026-09-10
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Release Sizing
|
|
7
|
+
|
|
8
|
+
> **Status:** active · v0 / beta · 2026-07-10. Governs how much a
|
|
9
|
+
> minor release may carry and what every shipped subsystem owes the
|
|
10
|
+
> reader: one primary goal, a disable path, and a named rollback.
|
|
11
|
+
> No version numbers appear here as commitments — this contract
|
|
12
|
+
> shapes releases, it does not schedule them.
|
|
13
|
+
|
|
14
|
+
## One primary product goal per minor release
|
|
15
|
+
|
|
16
|
+
Every minor release names **exactly one primary product goal** — the
|
|
17
|
+
one-sentence answer to "why does this release exist?". Secondary
|
|
18
|
+
changes may ride along, but the release notes lead with the primary
|
|
19
|
+
goal, and a release that cannot name one is not ready to cut.
|
|
20
|
+
Scope discipline, not a ratio: what qualifies is a judgment call the
|
|
21
|
+
maintainer makes when labeling the release PR
|
|
22
|
+
([`release-pr-gating.md`](release-pr-gating.md)).
|
|
23
|
+
|
|
24
|
+
## Major subsystems are independently disableable where feasible
|
|
25
|
+
|
|
26
|
+
A major subsystem shipped or substantially reworked in a release is
|
|
27
|
+
**independently disableable** where feasible — a settings key in
|
|
28
|
+
`.agent-settings.yml`, a pack that can stay uninstalled, or an
|
|
29
|
+
explicit opt-in flag. The release notes **name the flag / config
|
|
30
|
+
key** so a consumer who hits a regression can switch the subsystem
|
|
31
|
+
off without downgrading the whole package. "Where feasible" is a
|
|
32
|
+
real qualifier: kernel rules and the install skeleton have no
|
|
33
|
+
sensible off-switch; everything above that floor should.
|
|
34
|
+
|
|
35
|
+
## Rollback path — the `Rollback:` line
|
|
36
|
+
|
|
37
|
+
Every CHANGELOG entry that **introduces or substantially reworks a
|
|
38
|
+
subsystem** names its rollback path in the entry itself via a
|
|
39
|
+
`Rollback:` line:
|
|
40
|
+
|
|
41
|
+
```md
|
|
42
|
+
* **workspace:** task-orchestration layer behind `/work` ([abc1234](…))
|
|
43
|
+
Rollback: set `workspace.enabled: false` in `.agent-settings.yml`.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The rollback path is the disable flag from the section above, a
|
|
47
|
+
revert instruction, or a downgrade note — whatever actually undoes
|
|
48
|
+
the subsystem for a consumer. Enforced mechanically:
|
|
49
|
+
`src/scripts/lint_changelog_rollback.ts` fails when a new minor /
|
|
50
|
+
major section (`## [X.Y.0]`) contains no `Rollback:` line. The gate
|
|
51
|
+
only fires for versions **strictly greater** than the version in
|
|
52
|
+
`package.json` at lint time, so historical sections never retro-fail;
|
|
53
|
+
entry shape stays governed by
|
|
54
|
+
[`CHANGELOG-conventions.md`](CHANGELOG-conventions.md).
|
|
55
|
+
|
|
56
|
+
## Consumer matrix is the floor for every release
|
|
57
|
+
|
|
58
|
+
The pack-based consumer matrix —
|
|
59
|
+
[`../distribution/consumer-matrix.md`](../distribution/consumer-matrix.md)
|
|
60
|
+
(authored in parallel; forward link) — is the **floor** for every
|
|
61
|
+
release: no release ships a change that knowingly breaks a supported
|
|
62
|
+
cell of that matrix without the break being declared under
|
|
63
|
+
`### BREAKING CHANGES` and reflected in the matrix in the same
|
|
64
|
+
release.
|
|
65
|
+
|
|
66
|
+
## REJECTED — consumer-facing effort ratio
|
|
67
|
+
|
|
68
|
+
The proposed meta-ratio *"≥ 2/3 of effort per release must be
|
|
69
|
+
consumer-facing"* was **CUT by council 2026-07-10**
|
|
70
|
+
(claude-sonnet-4-5 + gpt-4o, unanimous) as a **gameable vanity
|
|
71
|
+
metric**: effort is unmeasurable at review time, "consumer-facing"
|
|
72
|
+
is reclassifiable at will, and the ratio punishes necessary
|
|
73
|
+
infrastructure releases. Recorded here so it is not re-proposed;
|
|
74
|
+
re-opening it requires new evidence per the decision-revisit gate.
|
|
75
|
+
|
|
76
|
+
## Cross-references
|
|
77
|
+
|
|
78
|
+
- [`CHANGELOG-conventions.md`](CHANGELOG-conventions.md) — entry
|
|
79
|
+
shape the `Rollback:` line extends.
|
|
80
|
+
- [`release-pr-gating.md`](release-pr-gating.md) — release-PR shape
|
|
81
|
+
detection; the sizing judgment happens at labeling time.
|
|
82
|
+
- [`../release-runbook.md`](../release-runbook.md) — the cut
|
|
83
|
+
procedure this contract's pre-flight check lives in.
|
|
84
|
+
- `src/scripts/lint_changelog_rollback.ts` — the mechanized
|
|
85
|
+
`Rollback:` gate (run `--selftest` for its fixture proof).
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Surface-Agent Contracts — medium invariants, not one generic agent
|
|
2
|
+
|
|
3
|
+
Backbone for `road-to-surface-specific-agent-contracts`.
|
|
4
|
+
One generic agent does every medium badly. Each **surface** (spreadsheet, deck,
|
|
5
|
+
document, browser, mobile/chat, code, …) has non-negotiable local invariants and
|
|
6
|
+
its own verification truth source. This contract names them, maps them to owner
|
|
7
|
+
skills, and defines how the agent detects a surface, resolves conflicts, and
|
|
8
|
+
hands off between surfaces — advisory first (staged rollout below).
|
|
9
|
+
|
|
10
|
+
Capability + honest-degrade for the *verification* primitives these contracts
|
|
11
|
+
rely on is the sibling [`design-artifact-verification`](design-artifact-verification.md)
|
|
12
|
+
(browser / screenshot / pdf_render / doc_export / image_decode / static_inspect);
|
|
13
|
+
this contract adds the office/data primitives and the surface-routing layer.
|
|
14
|
+
|
|
15
|
+
## Iron Law — the medium's truth source verifies the work
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
EACH SURFACE HAS A NON-NEGOTIABLE INVARIANT AND ITS OWN TRUTH SOURCE.
|
|
19
|
+
VERIFY WITH THE MEDIUM'S TRUTH SOURCE — A FORMULA READ-BACK, A RENDERED SLIDE,
|
|
20
|
+
A FETCHED PAGE — NEVER A GENERIC "LOOKS RIGHT". WHEN THE SURFACE TOOL IS
|
|
21
|
+
ABSENT, SAY WHAT COULD NOT BE VERIFIED — NEVER PRETEND THE MEDIUM STEP RAN.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Surface detection — before applying any surface rule
|
|
25
|
+
|
|
26
|
+
Resolve the surface from these signals, in priority order:
|
|
27
|
+
|
|
28
|
+
1. **Explicit file type** — `.xlsx`/`.csv` → spreadsheet, `.pptx`/`.key` → deck, `.docx`/`.md` → document, `.ipynb` → notebook.
|
|
29
|
+
2. **Requested output format** — "as a deck", "export to PDF", "a spreadsheet".
|
|
30
|
+
3. **Named tool / plugin / connector** — a named app connector wins over generic browsing.
|
|
31
|
+
4. **User environment** — mobile/chat host vs desktop IDE vs CI.
|
|
32
|
+
5. **Data shape** — tabular/numeric → spreadsheet; slides → deck; prose → document.
|
|
33
|
+
6. **Task verb** — "chart", "model", "present", "browse", "refactor".
|
|
34
|
+
7. **Target deliverable** — what the user will actually use.
|
|
35
|
+
|
|
36
|
+
**Ambiguity handling.** When ≥2 surfaces plausibly apply and the choice changes
|
|
37
|
+
the work materially, ask ONE compact question (per
|
|
38
|
+
[`ask-when-uncertain`](../../src/rules/ask-when-uncertain.md)); when the user
|
|
39
|
+
already constrained it, proceed and state the surface assumption.
|
|
40
|
+
|
|
41
|
+
## Surface conflict rule
|
|
42
|
+
|
|
43
|
+
When the user asks for output **native to a different connected surface**,
|
|
44
|
+
delegate to (or ask to enable) that surface — do not force a local workaround.
|
|
45
|
+
A request for a spreadsheet answered with a markdown table, or a deck answered
|
|
46
|
+
with prose, is a surface violation. Prefer the connected surface; if it is
|
|
47
|
+
unavailable, say so and offer the degraded form explicitly as degraded.
|
|
48
|
+
|
|
49
|
+
## Surface taxonomy
|
|
50
|
+
|
|
51
|
+
Each surface records: **owner** skills/commands · **allowed** tools · **forbidden**
|
|
52
|
+
shortcuts · **truth source** (how the medium verifies) · **handoff** in/out ·
|
|
53
|
+
**trigger** examples · **capability** requirement · **degrade** language.
|
|
54
|
+
|
|
55
|
+
| Surface | Owner skills | Forbidden shortcut | Truth source | Capability → degrade |
|
|
56
|
+
|---|---|---|---|---|
|
|
57
|
+
| **code** | `scope-control`/`verify-before-complete` (rules), stack skills | edit unread files; broad refactor around a fix | tests + type-checker + fresh run | local exec → static-only caveat |
|
|
58
|
+
| **design** | `fe-design`, `design-review`, `existing-ui-audit` | taste before inspecting the system | rendered artifact ([design-artifact-verification](design-artifact-verification.md)) | browser/screenshot → static caveat |
|
|
59
|
+
| **spreadsheet** | `spreadsheet-authoring` (Phase 2) | hardcode a computed value; unofficial financial source unmarked | formula read-back after write | native tooling → exported-file only → "cannot verify" |
|
|
60
|
+
| **document** | `doc-coauthoring`, `markitdown` | rasterize selectable text to PDF | open/export readback | doc parser → format caveat |
|
|
61
|
+
| **deck** | `html-deck` | build slides before an outline; tiny text | export + slide render | deck export → outline-only caveat |
|
|
62
|
+
| **browser** | `browser` surface (Phase 4), MCP fetch | invent a URL; fetch when not needed | the fetched page itself | fetch → "not fetched, cannot confirm" |
|
|
63
|
+
| **mobile/chat** | interaction floor (Phase 5) | markdown tables in narrow chat; multi-question walls | the host's rendering | tappable UI → concise text choices |
|
|
64
|
+
| **research** | `research:deep`/`research:report` | claim without a retrieved source | per-part grounding + disconfirmation | — |
|
|
65
|
+
| **visualizer/diagram** | `html-deck`, image skills | decorative chart over the data's shape | the rendered diagram | render → described-structure caveat |
|
|
66
|
+
| **cowork/dispatch** | `subagent-orchestration` | one agent doing parallel-safe work serially | verified subagent returns | spawn primitive → in-session |
|
|
67
|
+
| **MCP/app connector** | `mcp` | generic web search when a connector fits | the connector's own result | connector present → suggest/opt-in |
|
|
68
|
+
|
|
69
|
+
This taxonomy table **is** the canonical work-surface map. (Note: the existing
|
|
70
|
+
`src/config/surface-matrix.yml` is a *different* concept — per-tool **install-surface**
|
|
71
|
+
de-duplication, set-equality-enforced against `install.ts::USER_SCOPE_PATHS` by
|
|
72
|
+
`lint_surface_matrix`; extending it with *work* surfaces would break that
|
|
73
|
+
linter, so the work-surface map lives here, not there.) Host verification
|
|
74
|
+
capability is `src/config/host-capabilities.yml` +
|
|
75
|
+
[`design-artifact-verification`](design-artifact-verification.md). Carrier
|
|
76
|
+
choice vs host capability vs these invariants stay aligned with the
|
|
77
|
+
artifact-routing work — do not let the three diverge.
|
|
78
|
+
|
|
79
|
+
## Staged rollout
|
|
80
|
+
|
|
81
|
+
Each surface contract: **advisory** (skills reference the invariant) →
|
|
82
|
+
**routed** (owner skills updated + eval fixtures pass) → **default-on** only
|
|
83
|
+
once the host capability/degrade behaviour is documented for that surface. A
|
|
84
|
+
contract is never default-on for a host class that cannot run the surface's
|
|
85
|
+
truth-source check — it stays advisory + caveat there.
|
|
86
|
+
|
|
87
|
+
## Cross-surface handoff envelope
|
|
88
|
+
|
|
89
|
+
When work moves between surfaces (spreadsheet → deck, research → document,
|
|
90
|
+
browser evidence → report, design prototype → production code), the source
|
|
91
|
+
surface emits a **handoff envelope** the target consumes instead of redoing
|
|
92
|
+
work:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
source_surface · target_surface · user_goal · assets/files ·
|
|
96
|
+
constraints · verification_already_done · pending_checks ·
|
|
97
|
+
capability_limits · assumptions · privacy/source_restrictions
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
- The target surface **trusts `verification_already_done`** and does not repeat
|
|
101
|
+
it; it runs only `pending_checks`.
|
|
102
|
+
- The target honours `privacy/source_restrictions` — a source-specific
|
|
103
|
+
restriction (e.g. an internal-only dataset) is never widened by the handoff.
|
|
104
|
+
- **Degrade:** if the target surface's tooling is absent, the envelope remains a
|
|
105
|
+
durable **plan** (what to do + what is verified) — never a faked generated
|
|
106
|
+
artifact.
|
|
107
|
+
|
|
108
|
+
## Mobile/chat interaction floor
|
|
109
|
+
|
|
110
|
+
Interaction style is host-sensitive, not one verbose desktop default.
|
|
111
|
+
|
|
112
|
+
- **Narrow-chat output.** Avoid markdown tables in a narrow chat host; use short
|
|
113
|
+
prose/bullets. Keep post-tool summaries short.
|
|
114
|
+
- **Ask at most one compact question**, and only when it changes the work:
|
|
115
|
+
- **No options** when the user asked for the agent's *analysis* of A vs B — give the recommendation (fixture `ssac-a-or-b-analysis`).
|
|
116
|
+
- **Offer options** when *eliciting a preference* — tappable choices where the host supports them, degrading to concise text choices otherwise (fixture `ssac-preference-elicitation`).
|
|
117
|
+
- **Proceed on stated constraints** when the prompt already fixes them — no redundant questions (fixture `ssac-enough-constraints-no-question`).
|
|
118
|
+
|
|
119
|
+
## Code surface — audit dispositions (Phase 6)
|
|
120
|
+
|
|
121
|
+
The external code-prompt mechanisms, audited against existing rules — **covered**
|
|
122
|
+
(cite the owner, do not duplicate), **tightened** (a note added), or **rejected**
|
|
123
|
+
(host-specific):
|
|
124
|
+
|
|
125
|
+
| Mechanism | Disposition | Owner / note |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| Read before proposing | **covered** | `think-before-action`, `source-discovery-gate` (fixture `ssac-edit-unread-file`) |
|
|
128
|
+
| Minimal scoped changes | **covered** | `minimal-safe-diff` (fixture `ssac-broad-refactor-around-bugfix`) |
|
|
129
|
+
| Todo/task visibility | **covered** | host task tooling + roadmap loop; no new rule |
|
|
130
|
+
| Parallel independent exploration | **tighten** | note in `subagent-orchestration` / this contract's cowork row — sequential independent reads when parallel is available is a miss |
|
|
131
|
+
| Specialized tools over shell | **covered** | `mcp` § tool-tier ladder (execution-discipline harvest) |
|
|
132
|
+
| No shell as user communication | **covered** | `output-discipline` / `direct-answers` |
|
|
133
|
+
| Line-specific references | **covered** | `file_path:line` convention in host instructions |
|
|
134
|
+
| No time estimates | **covered** | `direct-answers` § no-duration (execution-discipline harvest) |
|
|
135
|
+
| Fresh verification before "done" | **covered** | `verify-before-complete` (fixture `ssac-claim-done-without-verification`) |
|
|
136
|
+
|
|
137
|
+
No new code-surface rule is created — the deltas are already owned; the one
|
|
138
|
+
**tighten** (parallel-safe exploration) is recorded here + in the cowork row. No
|
|
139
|
+
Codex/host-specific phrasing is adopted.
|
|
140
|
+
|
|
141
|
+
## Rejected (host/vendor-specific — not adopted)
|
|
142
|
+
|
|
143
|
+
Vendor-specific tool names, per-host UI affordance details, and single-provider
|
|
144
|
+
prompt phrasings from the source family are **not** adopted here — this contract
|
|
145
|
+
encodes surface invariants, not one vendor's tooling. Per-phase rejects are
|
|
146
|
+
recorded in the roadmap.
|
|
147
|
+
|
|
148
|
+
## Related
|
|
149
|
+
|
|
150
|
+
- [`design-artifact-verification`](design-artifact-verification.md) — verification-primitive capability + honest-degrade (design surface).
|
|
151
|
+
- [`design-artifact-lifecycle`](design-artifact-lifecycle.md) — the design surface's own lifecycle.
|
|
152
|
+
- [`host-capability-manifest`](../../src/agent-src/contexts/execution/host-capability-manifest.md) — subagent primitives (cowork/dispatch surface).
|
|
153
|
+
- [`tests/surface-contracts/eval-fixtures.md`](../../tests/surface-contracts/eval-fixtures.md) — the surface-contract eval fixtures.
|
|
@@ -215,3 +215,16 @@ marking. The shared grounding engine is still attributed via
|
|
|
215
215
|
Implementing roadmap: `road-to-image-brand-typography` (Phase A–D),
|
|
216
216
|
archived 2026-06-16; live-validation + command-surface follow-on tracked in
|
|
217
217
|
its sibling follow-up roadmap.
|
|
218
|
+
|
|
219
|
+
## Resolution note — retrieval ranking at scale (2026-07-09)
|
|
220
|
+
|
|
221
|
+
The "no engine fork / no minisearch-class dependency" decision is honoured at
|
|
222
|
+
memory/knowledge retrieval scale by a **hand-rolled BM25 + trigram index**
|
|
223
|
+
(`src/scripts/_lib/lexical_index.ts`, pure Node stdlib) rather than SQLite-FTS5
|
|
224
|
+
or any embedded search engine. It activates at the `lint_knowledge_scale`
|
|
225
|
+
tripwire (>200/type or >500 total files) and replaces the coarse `_score`
|
|
226
|
+
bucket scorer's ranking; measured lift on the retrieval-precision corpus is a
|
|
227
|
+
mean top tie-set of 3.333 → 1.0 with precision@1/@5 unchanged
|
|
228
|
+
(`internal/bench/reports/lexical-ranking.json`). This closes the ADR-061 ↔
|
|
229
|
+
FTS5 open question flagged in `road-to-retrieval-substrate-hardening` (B2): the
|
|
230
|
+
BM25 core ADR-061 sanctioned is realised without an engine dependency.
|
|
@@ -85,7 +85,7 @@ not exploit: **nesting `bug-fix` as `bug/fix` keeps the invoked slug
|
|
|
85
85
|
|
|
86
86
|
- `docs/contracts/command-clusters.md` — locked table (Phase 4 rows) + the
|
|
87
87
|
new "Bare invocation" section.
|
|
88
|
-
- `agents/roadmaps/road-to-command-structure-optimization.md` — inventory,
|
|
88
|
+
- `agents/roadmaps/archive/road-to-command-structure-optimization.md` — inventory,
|
|
89
89
|
council verdicts, phases.
|
|
90
90
|
- ADR-003 (flat clusters), ADR-041 (controlled verbs), ADR-044 (path-derived
|
|
91
91
|
hyphen slugs).
|
|
@@ -38,6 +38,15 @@ apart:
|
|
|
38
38
|
The whole point of a pre-decided path is that the tripwire firing needs no
|
|
39
39
|
new debate; in this state, firing would have required one.
|
|
40
40
|
|
|
41
|
+
Additional evidence for the engine swap (2026-07-10, labelled replay of real
|
|
42
|
+
maintainer queries): `_score()`'s raw-substring match has a
|
|
43
|
+
**separator-recall gap** — hyphen/underscore query keys (`ai_council`,
|
|
44
|
+
`roadmap-progress`, `force-push`) score 0 against space-normalized stored
|
|
45
|
+
keys that spaced variants hit at 0.8. A tokenizing engine (FTS5 unicode61 /
|
|
46
|
+
BM25 tokenizer) splits on separators and closes this class structurally;
|
|
47
|
+
see `docs/second-brain-scope.md` § second named limit for the scoped-out
|
|
48
|
+
claim boundary.
|
|
49
|
+
|
|
41
50
|
## Decision
|
|
42
51
|
|
|
43
52
|
1. **One engine: SQLite FTS5 via Node's built-in `node:sqlite`.**
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Consumer Matrix — pack-based release E2E
|
|
2
|
+
|
|
3
|
+
> **Status:** active · **Owner:** maintainer · **Opened:** 2026-07-10
|
|
4
|
+
>
|
|
5
|
+
> Workflow: [`.github/workflows/consumer-matrix.yml`](../../.github/workflows/consumer-matrix.yml)
|
|
6
|
+
> · Runner: [`src/scripts/consumer_matrix.ts`](../../src/scripts/consumer_matrix.ts)
|
|
7
|
+
> · Tripwire: [`.github/workflows/release-adjacent-health.yml`](../../.github/workflows/release-adjacent-health.yml)
|
|
8
|
+
> · Source roadmap: road-to-proof-under-real-conditions (Phase 1)
|
|
9
|
+
|
|
10
|
+
The consumer matrix exercises the **published tarball** the way a consumer
|
|
11
|
+
does — pack → fresh global install into an isolated prefix → `init` into a
|
|
12
|
+
fresh project → `doctor` → `conformance` → MCP stdio handshake →
|
|
13
|
+
`hooks:doctor` → projection presence (`validate`) → uninstall — plus an
|
|
14
|
+
upgrade leg (last published minor from the registry → packed tarball →
|
|
15
|
+
`doctor` stays green) and pre-tag dry-runs of every release-adjacent
|
|
16
|
+
workflow.
|
|
17
|
+
|
|
18
|
+
## Why it exists — the tarball window
|
|
19
|
+
|
|
20
|
+
Ordinary PRs run source-level matrices; release PRs run shape checks and
|
|
21
|
+
(correctly) skip the source matrices per
|
|
22
|
+
[`release-pr-gating`](../contracts/release-pr-gating.md). That skip is sound
|
|
23
|
+
for the *diff* but blind to the *tarball*: every packaging incident below
|
|
24
|
+
entered `main` on an ordinary PR and manifested only at publish time —
|
|
25
|
+
exactly the window where nothing pack-based ran. The consumer matrix is the
|
|
26
|
+
documented exemption from the release-PR cut surface and runs **on** release
|
|
27
|
+
PRs, plus weekly against registry drift.
|
|
28
|
+
|
|
29
|
+
## Counterfactual map — five historical failures → the leg that catches each
|
|
30
|
+
|
|
31
|
+
Recorded per the roadmap's acceptance criterion 1. "Leg" names either a
|
|
32
|
+
`consumer_matrix.ts` leg or a `consumer-matrix.yml` job.
|
|
33
|
+
|
|
34
|
+
| # | Historical failure | Caught by |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| 1 | Published tarball missing `src/install/` while published code imported it (two minors; `ERR_MODULE_NOT_FOUND` in global installs of `doctor`/`conformance`) | `fresh-install` leg (`--version` + every subsequent CLI leg runs from the tarball) **and** `publish-dry-run` job's `prepack-check.mjs` import-completeness step |
|
|
37
|
+
| 2 | `tsx` absent from the published package — hooks and TS commands failed for consumers | `fresh-install` + `hooks` legs (installed binary + `hooks:doctor` run from the isolated prefix, no repo `node_modules` to lean on) |
|
|
38
|
+
| 3 | Release workflow failed on missing `go-task` in the CI environment | `publish-dry-run` job replicates the publish path pre-tag; any missing binary in a release-adjacent workflow surfaces on the release PR, not post-tag (see also the runbook note in [`release-pr-gating`](../contracts/release-pr-gating.md)) |
|
|
39
|
+
| 4 | npm publish failed on `npm@latest` → npm 12 requiring Node 22 while the job ran Node 20 | `publish-dry-run` job: asserts `publish-npm.yml` pins an npm **major** (fails on `npm@latest`), then installs that exact pin on both Node 20 and 22 and runs the publish steps sans `npm publish` |
|
|
40
|
+
| 5 | MCP worker deploy red across five consecutive releases, undetected (worker deps installed, root `tsx` missing) | `mcp-worker-dry-run` job (same pack + `wrangler deploy --dry-run` path, pre-tag, including the root `npm ci`) **and** the daily `release-adjacent-health` tripwire (fails loudly when any watched workflow's last completed run is non-success for > 48h) |
|
|
41
|
+
|
|
42
|
+
**Rule for future failures:** a release incident with no leg in this table
|
|
43
|
+
gets a new leg in the same fix PR — or a recorded reason why it is out of
|
|
44
|
+
scope. The table is the audit trail.
|
|
45
|
+
|
|
46
|
+
## Triggers
|
|
47
|
+
|
|
48
|
+
| Trigger | What runs | Why |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `pull_request` with `release/*` head | all four jobs | the pre-tag gate — release PRs are the primary trigger |
|
|
51
|
+
| weekly cron (Tue 06:00 UTC) | all four jobs | registry/upstream drift between releases — the class the 48h tripwire alone cannot see pre-release |
|
|
52
|
+
| `workflow_dispatch` | all four jobs | on-demand verification (e.g. after a packaging change) |
|
|
53
|
+
| daily cron 06:30 UTC | `release-adjacent-health` | the > 48h durably-red detector |
|
|
54
|
+
|
|
55
|
+
## Headless default-scope trap (matrix finding, 2026-07-10)
|
|
56
|
+
|
|
57
|
+
Building this matrix surfaced a live consumer trap: on a fresh machine,
|
|
58
|
+
headless `agent-config init --tools=… --yes` (no `--scope`) picks "project
|
|
59
|
+
default for backward compatibility" and then hard-fails with
|
|
60
|
+
`--scope=project is reserved for maintainers (ADR-020)` — the bare README
|
|
61
|
+
invocation is red in any non-TTY context (CI, scripts), while the TTY path
|
|
62
|
+
escapes into the browser wizard. `--scope=auto` honors detection and
|
|
63
|
+
completes the documented global-only consumer install (`~/.claude`,
|
|
64
|
+
`~/.cursor`, `~/.codeium/windsurf`, `~/.event4u` lockfile). The matrix
|
|
65
|
+
therefore runs `init --scope=auto --yes` and pins that behaviour; whether
|
|
66
|
+
the backward-compatibility default should flip to `auto` is a product
|
|
67
|
+
decision tracked outside this contract (it changes installer behaviour, not
|
|
68
|
+
the gate). Two adjacent facts the matrix also pins: standalone `doctor` is
|
|
69
|
+
project-manifest-scoped (exit 2 without a project lockfile — expected on a
|
|
70
|
+
global-only install; `conformance` embeds `doctor --ci` and is the health
|
|
71
|
+
probe the matrix asserts), and consumer uninstall is `uninstall --global`.
|
|
72
|
+
|
|
73
|
+
## Branch-protection note
|
|
74
|
+
|
|
75
|
+
Marking the four jobs as **required** checks for `release/*` PRs is a
|
|
76
|
+
repository setting (Settings → Branches), not something this repo's files
|
|
77
|
+
can enforce. Until flipped, the jobs still run and fail visibly on the
|
|
78
|
+
release PR; flipping them to required is the intended end state.
|
|
79
|
+
|
|
80
|
+
## Local run (carve-out verification)
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm ci && npm run build
|
|
84
|
+
npx tsx src/scripts/consumer_matrix.ts --json # all legs
|
|
85
|
+
npx tsx src/scripts/consumer_matrix.ts --skip-registry # offline: skips the upgrade leg
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## See also
|
|
89
|
+
|
|
90
|
+
- [`release-pr-gating`](../contracts/release-pr-gating.md) — the cut surface
|
|
91
|
+
this matrix is exempt from, and why.
|
|
92
|
+
- [`public-install-smoke`](public-install-smoke.md) — OS × Node entrypoint
|
|
93
|
+
matrix (installer correctness); the consumer matrix owns tarball shape +
|
|
94
|
+
runtime surface instead.
|
|
95
|
+
- [`release-sizing`](../contracts/release-sizing.md) — names this matrix as
|
|
96
|
+
the floor for every release.
|
package/docs/featured-skills.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Featured Skills
|
|
2
2
|
|
|
3
|
-
A curated subset of the
|
|
3
|
+
A curated subset of the 270 skills. Three tiers, one per primary audience. Full catalog lives in [`dist/agent-src/skills/`](../dist/agent-src/skills/); see also [`docs/catalog.md`](catalog.md) for the complete index and [`docs/featured-commands.md`](featured-commands.md) for command-level highlights.
|
|
4
4
|
|
|
5
5
|
> **Eval-gated messaging note.** Until `task bench --corpus non-dev` reports `selection_accuracy >= 0.60` (see `road-to-product-adoption.md` Phase 1), this page is documentation, not marketing. The entries below are the candidates the corpus tests against; their description quality is what the eval validates.
|
|
6
6
|
|
|
@@ -92,4 +92,4 @@ task lint-featured-skills
|
|
|
92
92
|
|
|
93
93
|
CI runs this in `taskfiles/ci-fast.yml`. Stale entries (renamed / removed skill or command) fail the build. See [`scripts/lint_featured_skills.py`](../src/scripts/lint_featured_skills.py) for the matcher.
|
|
94
94
|
|
|
95
|
-
→ Browse all
|
|
95
|
+
→ Browse all 270 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 177 commands: [`dist/agent-src/commands/`](../dist/agent-src/commands/)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Pick the entry that matches what you do day-to-day. Each section names the three skills you will reach for first and shows whether MCP (no terminal) or CLI (terminal) is the simpler install path for that role.
|
|
4
4
|
|
|
5
|
-
`agent-config` ships
|
|
5
|
+
`agent-config` ships 270 skills, 103 governed rules, and 177 commands. You do not need all of them. Each role below filters to the slice that pays back in week one; the rest stays available and shows up on demand when a task references it.
|
|
6
6
|
|
|
7
7
|
> **Taglines at a glance →** [`docs/role-experiences.md`](role-experiences.md) — the one-line pitch per role experience, in one table.
|
|
8
8
|
|
package/docs/getting-started.md
CHANGED
|
@@ -134,7 +134,7 @@ Your agent is now:
|
|
|
134
134
|
- **Respecting your codebase** — no conflicting patterns
|
|
135
135
|
- **Following standards** — consistent code quality
|
|
136
136
|
|
|
137
|
-
This is enforced automatically by
|
|
137
|
+
This is enforced automatically by 103 rules. No configuration needed.
|
|
138
138
|
|
|
139
139
|
---
|
|
140
140
|
|
|
@@ -174,7 +174,7 @@ Your agent now understands slash commands:
|
|
|
174
174
|
| `/fix quality` | Run and fix all quality checks |
|
|
175
175
|
| `/chat-history import` | Pull a prior session into the current chat (resume) |
|
|
176
176
|
|
|
177
|
-
→ [Browse all
|
|
177
|
+
→ [Browse all 177 active commands](../dist/agent-src/commands/)
|
|
178
178
|
|
|
179
179
|
---
|
|
180
180
|
|
|
@@ -33,7 +33,7 @@ the host lacks (a static host gives it no runtime attention guarantee, but a
|
|
|
33
33
|
runtime-only system gives it nothing at all here). A runtime-only system contributes *nothing* on these hosts.
|
|
34
34
|
|
|
35
35
|
### 2. Intent routing, not a 500-artefact dump
|
|
36
|
-
A prompt does not load all
|
|
36
|
+
A prompt does not load all 270 skills. `dist/router.json` (99 routed rules, intent →
|
|
37
37
|
skill, keyword/phrase/path triggers) carries the right skill on intent. The
|
|
38
38
|
governance value is *selection discipline* — the host gets the relevant rule
|
|
39
39
|
set, not the whole catalogue as context ballast.
|
|
@@ -106,6 +106,33 @@ that matters for the claim. When in doubt, treat it as fresh-lookup — the
|
|
|
106
106
|
cost of one extra search is far lower than a stale claim stated with
|
|
107
107
|
confidence.
|
|
108
108
|
|
|
109
|
+
### No duration estimates (Iron Law 2 family)
|
|
110
|
+
|
|
111
|
+
An LLM has no wall-clock and no latency training signal, so a duration estimate
|
|
112
|
+
is a fabricated fact wearing a number:
|
|
113
|
+
|
|
114
|
+
- Never predict how long **the agent's own work** will take ("this refactor is
|
|
115
|
+
~2 hours", "I'll have it in a few minutes").
|
|
116
|
+
- Never predict how long **the user's work** will take ("this is a 2–3 week
|
|
117
|
+
project", "should take you an afternoon").
|
|
118
|
+
- Instead: break the work into **actionable steps** and let the user judge
|
|
119
|
+
timing against their own context — they have the clock, the agent does not.
|
|
120
|
+
|
|
121
|
+
A step list is honest ("A → B → C, C depends on B"); a schedule is invention.
|
|
122
|
+
|
|
123
|
+
### Never cite the rule as the reason
|
|
124
|
+
|
|
125
|
+
When declining or constraining an action, give the **actual, substantive
|
|
126
|
+
reason** — never "my rules / guidelines / instructions require X":
|
|
127
|
+
|
|
128
|
+
- ❌ "I can't do that, my guidelines don't allow it." / "A rule requires me to ask first."
|
|
129
|
+
- ✅ "Sending this would post publicly and can't be undone, so confirm the recipient first." / "This edits a production branch — I need your go-ahead."
|
|
130
|
+
|
|
131
|
+
Appealing to a hidden rule (a) replaces real reasoning the user can evaluate,
|
|
132
|
+
and (b) widens the prompt-extraction surface (it advertises that hidden
|
|
133
|
+
instructions exist and invites probing them). State the real-world consequence,
|
|
134
|
+
not the rule's existence.
|
|
135
|
+
|
|
109
136
|
## Direct-answers — failure modes the user will call out
|
|
110
137
|
|
|
111
138
|
Companion to `direct-answers` § Failure modes. The rule lists the
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Emphasis budget
|
|
2
|
+
|
|
3
|
+
Authoring guideline. **This is a review-time discipline, NOT a merge-blocking
|
|
4
|
+
linter** — there is no CI gate; PR review owns the judgment.
|
|
5
|
+
|
|
6
|
+
## The principle
|
|
7
|
+
|
|
8
|
+
Emphasis is a currency, and inflation debases it. Reserve the loud channels —
|
|
9
|
+
ALL-CAPS, `## Iron Law` fences, spaced repetition of the same imperative — for
|
|
10
|
+
**asymmetric, irreversible harm**: data loss, credential/secret exposure, a
|
|
11
|
+
safety floor, a legal/compliance breach. When everything shouts, nothing does:
|
|
12
|
+
an over-emphasized doc trains the reader to skim past the caps, so the one caps
|
|
13
|
+
line that guards a `DROP TABLE` loses its signal.
|
|
14
|
+
|
|
15
|
+
## The discipline
|
|
16
|
+
|
|
17
|
+
When you add emphasis, be able to answer — in the artifact or the PR — two
|
|
18
|
+
questions:
|
|
19
|
+
|
|
20
|
+
1. **What specific harm does this prevent?** Name it (not "this is
|
|
21
|
+
important" — *what* goes wrong, to *whom*, how badly).
|
|
22
|
+
2. **Why is post-hoc correction insufficient?** Emphasis is justified when the
|
|
23
|
+
harm is irreversible or asymmetric (a wrong send/delete/charge can't be
|
|
24
|
+
taken back). If a normal-weight sentence + a later fix would do, use normal
|
|
25
|
+
weight.
|
|
26
|
+
|
|
27
|
+
If you cannot answer both, down-weight to plain prose.
|
|
28
|
+
|
|
29
|
+
## Why not a linter
|
|
30
|
+
|
|
31
|
+
A mechanical caps-quota is unenforceable — semantic substitution ("Critically:
|
|
32
|
+
never…", bold, block quotes) defeats a caps count while keeping the shout — and
|
|
33
|
+
it blocks ready work on a cosmetic metric. The Iron-Law *count* is also a
|
|
34
|
+
denominator artifact: most existing Iron Laws already guard data-loss /
|
|
35
|
+
credential / safety domains, so the raw number is not evidence of inflation.
|
|
36
|
+
Judgment at review time, keyed to the harm-asymmetry test above, is the control.
|
|
37
|
+
|
|
38
|
+
## Overlap (why a separate guideline)
|
|
39
|
+
|
|
40
|
+
Distinct from [`preservation-guard`](../../../src/rules/preservation-guard.md)
|
|
41
|
+
(preserve existing emphasis through a transform — this governs *adding* it),
|
|
42
|
+
[`size-enforcement`](../../../src/rules/size-enforcement.md) (line budgets, not
|
|
43
|
+
emphasis weight), and [`token-budget-discipline`](../../../src/rules/token-budget-discipline.md)
|
|
44
|
+
(load cost, not signal-to-noise). None owns the emphasis-rationing judgment;
|
|
45
|
+
this guideline does.
|