@event4u/agent-config 9.2.0 → 9.4.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.
Files changed (93) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +111 -0
  3. package/CONTRIBUTING.md +14 -0
  4. package/README.md +12 -4
  5. package/dist/agent-src/commands/contribution-precheck.md +100 -0
  6. package/dist/agent-src/commands/fix/route.md +49 -0
  7. package/dist/agent-src/commands/fix.md +4 -2
  8. package/dist/agent-src/commands/tdd/green.md +32 -0
  9. package/dist/agent-src/commands/tdd/red.md +33 -0
  10. package/dist/agent-src/commands/tdd/refactor.md +31 -0
  11. package/dist/agent-src/commands/tdd.md +50 -0
  12. package/dist/agent-src/commands/team.md +4 -0
  13. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  14. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +81 -2
  15. package/dist/agent-src/contexts/model-recommendations.md +6 -0
  16. package/dist/agent-src/rules/architecture.md +7 -0
  17. package/dist/agent-src/rules/token-efficiency.md +7 -0
  18. package/dist/agent-src/skills/adversarial-review/SKILL.md +5 -0
  19. package/dist/agent-src/skills/ai-council/SKILL.md +3 -0
  20. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -0
  21. package/dist/agent-src/skills/decision-record/SKILL.md +35 -1
  22. package/dist/agent-src/skills/decision-record/evals/triggers.json +82 -12
  23. package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +119 -0
  24. package/dist/agent-src/skills/evaluate-llm-feature/SKILL.md +142 -0
  25. package/dist/agent-src/skills/fe-design/SKILL.md +1 -0
  26. package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
  27. package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -0
  28. package/dist/agent-src/skills/learning-tutor/SKILL.md +215 -0
  29. package/dist/agent-src/skills/persona-improvement/SKILL.md +81 -0
  30. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +10 -0
  31. package/dist/agent-src/skills/rice-prioritization/SKILL.md +1 -0
  32. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -1
  33. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +14 -24
  34. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  35. package/dist/discovery/deprecation-report.md +1 -1
  36. package/dist/discovery/discovery-manifest.json +253 -30
  37. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  38. package/dist/discovery/discovery-manifest.summary.md +4 -4
  39. package/dist/discovery/orphan-report.md +1 -1
  40. package/dist/discovery/packs.json +19 -10
  41. package/dist/discovery/trust-report.md +3 -3
  42. package/dist/discovery/workspaces.json +15 -6
  43. package/dist/mcp/registry-manifest.json +3 -3
  44. package/docs/CLAIMS.md +16 -2
  45. package/docs/announcements/2026-07-honest-cost-sweep-launch.md +84 -0
  46. package/docs/anti-reskin-gate.md +60 -0
  47. package/docs/architecture.md +3 -3
  48. package/docs/catalog.md +303 -278
  49. package/docs/command-flows.md +10 -3
  50. package/docs/comparison.yaml +10 -0
  51. package/docs/contracts/adoption-signal-floor.md +17 -0
  52. package/docs/contracts/ai-council-config.md +25 -0
  53. package/docs/contracts/command-clusters.md +2 -1
  54. package/docs/contracts/mcp-tool-inventory.md +25 -22
  55. package/docs/contracts/tier-3-contrib-plugin.md +12 -4
  56. package/docs/decisions/ADR-122-adversarial-verification-council.md +1 -1
  57. package/docs/development.md +10 -1
  58. package/docs/featured-skills.md +2 -2
  59. package/docs/getting-started-by-role.md +1 -1
  60. package/docs/getting-started.md +1 -1
  61. package/docs/governance-advantage.md +1 -1
  62. package/docs/guidelines/component-oriented-and-oop-development.md +181 -0
  63. package/docs/proof.md +10 -6
  64. package/docs/self-review-gate.md +14 -0
  65. package/docs/setup/per-ide/antigravity.md +8 -3
  66. package/docs/us-vs-the-category.md +38 -0
  67. package/docs/wedge/production-validator/README.md +24 -0
  68. package/docs/wedge/production-validator/first-run-check.sh +42 -0
  69. package/package.json +3 -2
  70. package/src/scripts/_lib/catalog_score.ts +64 -0
  71. package/src/scripts/_lib/shingle_similarity.ts +146 -0
  72. package/src/scripts/ai_council/clients.ts +50 -1
  73. package/src/scripts/ai_council/config.ts +28 -3
  74. package/src/scripts/ai_council/low_impact.ts +16 -0
  75. package/src/scripts/ai_council/necessity.ts +11 -0
  76. package/src/scripts/ai_council/orchestrator.ts +78 -26
  77. package/src/scripts/ai_council/pricing.ts +59 -0
  78. package/src/scripts/ai_council/prompts.ts +7 -0
  79. package/src/scripts/ai_council/stance_tally.ts +42 -5
  80. package/src/scripts/build_catalog_index.ts +188 -0
  81. package/src/scripts/council_cli.ts +56 -1
  82. package/src/scripts/generate_index.ts +6 -3
  83. package/src/scripts/hook_manifest.yaml +17 -6
  84. package/src/scripts/install-hooks.sh +32 -17
  85. package/src/scripts/lint_originality.ts +464 -0
  86. package/src/scripts/mcp_server/catalog_tools.ts +114 -0
  87. package/src/scripts/mcp_server/consumer_tool_catalog.json +46 -0
  88. package/src/scripts/pr_url_reminder_hook.ts +177 -0
  89. package/src/scripts/schemas/flow.schema.json +17 -0
  90. package/src/scripts/schemas/skill.schema.json +166 -32
  91. package/src/scripts/self_review_gate.test.ts +48 -0
  92. package/src/scripts/self_review_gate.ts +73 -5
  93. package/src/scripts/validate_flow_teams.ts +127 -0
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Bootstrap shim for the event4u agent-config suite. This plugin ships ONLY the dispatcher hooks plus one install-pointer skill — ALL content (skills, rules, commands) is installed via `npx -y @event4u/agent-config init`, which writes the file projection AND registers the same hooks in ~/.claude/settings.json. DEPRECATED as a content channel; kept so the marketplace listing stays discoverable and existing installs keep working hooks.",
9
- "version": "9.2.0",
9
+ "version": "9.4.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
package/CHANGELOG.md CHANGED
@@ -166,6 +166,29 @@ gated on the telemetry from 6.0.0-C. Deferred to 6.0.0-C: a
166
166
  `skills_discoverable` field, reactive just-in-time pack activation, and the
167
167
  per-pack budget lint.
168
168
 
169
+ ### Added — team mode: governed cross-model review (default-off, `road-to-team-mode`)
170
+
171
+ A new default-off `/team` command family (`review`, `adversarial`, `delegate`,
172
+ `status`) that governs the official `openai/codex-plugin-cc` as the Claude-Code
173
+ transport — a second strong model reviewing the real working-tree diff (depth),
174
+ the complement to the council's neutral-artefact breadth.
175
+
176
+ - **Default-off + fail-closed.** With `ai_team.enabled: false` (default) no
177
+ command is suggested and invocation prints an enable pointer — byte-identical
178
+ to pre-roadmap behaviour. On Claude-Code hosts the wrappers are thin
179
+ delegations to `/codex:*`; absent the plugin they fail closed with the
180
+ `agent-config doctor --check team` remediation, never a silent no-op.
181
+ - **Multi-host fallback (review lens only).** On non-Claude-Code hosts
182
+ `/team:review` sends a size-capped repo-diff bundle through the existing
183
+ subscription `OpenAICliClient`, with an honest capability-delta header.
184
+ - **Governed, not rebuilt.** Nothing upstream-maintained is reimplemented; the
185
+ Review-Gate stays upstream's (we add an opt-in loop-bound + ledger line), and
186
+ `/team:delegate` (write access) sits behind a second opt-in
187
+ `ai_team.allow_delegate: false`. Config: `docs/contracts/ai-team-config.md`.
188
+ - **No quality claim yet.** Cross-model defect-finding lift is unproven until
189
+ the Phase 5 benchmark runs (spend-gated); the docs describe workflow value
190
+ only, never a lift claim.
191
+
169
192
  ### Breaking — v4.0.0 unified setup (`road-to-unified-setup`)
170
193
 
171
194
  `v4.0.0` is a **hard-cut** release. The legacy Python installer at
@@ -1033,6 +1056,94 @@ our recommendation order, not its support status.
1033
1056
  > that forces a new era split (`# Era: 9.3.x`, etc.) — see
1034
1057
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
1035
1058
 
1059
+ ## [9.4.0](https://github.com/event4u-app/agent-config/compare/9.3.0...9.4.0) (2026-07-20)
1060
+
1061
+ ### Features
1062
+
1063
+ * **self-review:** large-diff / claim-affecting ai-council escalation (detect + recommend) ([1308e22](https://github.com/event4u-app/agent-config/commit/1308e220179600424d4ac590ae9295b522f3f22c))
1064
+ * **council:** cross-round prompt-cache read unlock ([5faf32b](https://github.com/event4u-app/agent-config/commit/5faf32bc3b0522e7e0af3b28a108ce808133a56e))
1065
+ * **council:** auto model-tiering gated on the A1<->A3 cache coupling ([1a693bf](https://github.com/event4u-app/agent-config/commit/1a693bffe79addde715becc9a366c5185e9545b9))
1066
+ * **council:** stance repair fires only on genuinely unparseable STANCE ([40196bd](https://github.com/event4u-app/agent-config/commit/40196bdac2489dc50ac1213976e776d94f3f89c7))
1067
+ * **adoption:** wedge promise, opt-in first-run instrument, honest positioning surface ([c93e314](https://github.com/event4u-app/agent-config/commit/c93e314b102ba437afcbef994306a5f0c42d2476))
1068
+ * **routing:** reciprocal cluster routing for the weighted-matrix mode ([6be7bc5](https://github.com/event4u-app/agent-config/commit/6be7bc5b7d042bdfc000c5a51270a7c9da5a2f28))
1069
+ * **skill:** weighted-matrix mode in decision-record ([7eaf4db](https://github.com/event4u-app/agent-config/commit/7eaf4db125eebe19cb0d57ac32f15f917530b206))
1070
+ * **command:** /contribution-precheck — contributor self-service gate subset ([5e7de9b](https://github.com/event4u-app/agent-config/commit/5e7de9b6b828653bb0e49e1711f42ee56c18e4cd))
1071
+ * **catalog:** provenance source column + CREDITS.md ([10cca8a](https://github.com/event4u-app/agent-config/commit/10cca8af8a244aa30d0ee036126e24c506c82e48))
1072
+ * **ci:** wire lint_originality --changed as the originality-gate PR job ([00c3754](https://github.com/event4u-app/agent-config/commit/00c3754df8d9a95c30a84c294bfb3ab9cfbbe509))
1073
+ * **skills:** add learning-tutor skill — six structured tutoring modes ([8ed343d](https://github.com/event4u-app/agent-config/commit/8ed343d282ad669489866cda84a6a214f1943ca6))
1074
+ * **skill:** evaluate-llm-feature — black-box LLM-feature evaluator ([b94249f](https://github.com/event4u-app/agent-config/commit/b94249fb067c39d8fa5c8f4fa6cfe2b1290e336b))
1075
+ * **flows:** optional team annotation + resolver ([7b14ed5](https://github.com/event4u-app/agent-config/commit/7b14ed5cbba5bec6b4e5500fb68c6770ad7d5f87))
1076
+ * **mcp:** lazy catalog router — index, scoring, stub tools ([d17b9e0](https://github.com/event4u-app/agent-config/commit/d17b9e05fc5742f922177febab086c4723796029))
1077
+ * **originality:** anti-reskin shingle-overlap gate ([dae4760](https://github.com/event4u-app/agent-config/commit/dae4760c7b041844bde10fa3e2eb6ae5f34a9fa6))
1078
+
1079
+ ### Bug Fixes
1080
+
1081
+ * **skill:** keep subagent-orchestration under the 400-line size gate ([c419da9](https://github.com/event4u-app/agent-config/commit/c419da949db135c6c1723d85e78906669ee881a2))
1082
+ * **portability:** drop task-ci literals from the shipped precheck command ([a0d83d3](https://github.com/event4u-app/agent-config/commit/a0d83d33984847143749131fe0e01509c72edbbb))
1083
+ * **ci:** CAPABILITIES 277 count + defang injection-probe examples ([c1d4036](https://github.com/event4u-app/agent-config/commit/c1d4036dd615fa2bcbd670e66583f8eac15fbb6a))
1084
+ * **originality:** close the adversarial DF batch-masking hole ([dd84403](https://github.com/event4u-app/agent-config/commit/dd8440363a7ecda67934cca27cb0df4b69ba34e6))
1085
+ * **mcp:** version the catalog-index cache filename ([93d980a](https://github.com/event4u-app/agent-config/commit/93d980aff254ceb9d31bf290f36a249377e81eea))
1086
+
1087
+ ### Documentation
1088
+
1089
+ * **team:** CHANGELOG entry + close-out (Phase 6 + prereqs); upstream re-verified ([a6405c5](https://github.com/event4u-app/agent-config/commit/a6405c5ade5e4e1a22c7cb60eaf0d31f7f212b9e))
1090
+ * **team:** three-way router disambiguation cross-links (council / team / subagents) ([f82ed16](https://github.com/event4u-app/agent-config/commit/f82ed168f81c48ef98b0e561f44bc13c8691ce77))
1091
+ * **self-review:** document the escalation path; flip Phase 1 step (part c) ([9f26716](https://github.com/event4u-app/agent-config/commit/9f267166b1305f9833f89ae8119638105ecd42c1))
1092
+ * **roadmap:** archive road-to-api-cost-optimization — A3 executed, fully closed ([94e2044](https://github.com/event4u-app/agent-config/commit/94e20444f215491d6f5350b09910d37a928a090e))
1093
+ * **cost:** B2 index-branch pointers (deferred follow-up closed) ([7d68245](https://github.com/event4u-app/agent-config/commit/7d68245ebc013b5fa05f0790473e910e45227a5e))
1094
+ * **roadmap:** adoption roadmap — second autonomous slice landed ([0febec6](https://github.com/event4u-app/agent-config/commit/0febec66d629dc2cca6410bfaa07c841711e1966))
1095
+ * **announcements:** draft the honest-launch story (drafted, not posted) ([8e1b757](https://github.com/event4u-app/agent-config/commit/8e1b757f53f367c1fdc7d7150eed4ff8edc1e426))
1096
+ * **roadmap:** archive road-to-weighted-decision-matrix — fully executed ([4586dcd](https://github.com/event4u-app/agent-config/commit/4586dcd5432c618ffd007af2f0977a24249945aa))
1097
+ * **roadmap:** originality-gate + contributor-funnel roadmap, executed and parked ([4d0e73b](https://github.com/event4u-app/agent-config/commit/4d0e73b67298cd78b509778514ab170fcc75e930))
1098
+ * **probe:** anti-reskin-gate demand probe + extraction floor ([b849580](https://github.com/event4u-app/agent-config/commit/b8495802f93a966bcf5808e01b15b93e4017fd9a))
1099
+ * **roadmap:** complete + archive the ecosystem-harvest index hub ([e1752d1](https://github.com/event4u-app/agent-config/commit/e1752d176fbf948aff364fb1271532164bb2b755))
1100
+ * regenerate proof page for the new skill count (277) ([2476284](https://github.com/event4u-app/agent-config/commit/247628404098690ba2f68fa1bef6fdba1753ee13))
1101
+ * **roadmap:** complete + archive ecosystem-harvest domain-watch ([d07e81e](https://github.com/event4u-app/agent-config/commit/d07e81e017a90e92863d9bcffd1818b232fefaeb))
1102
+ * **domain-watch:** watch-notes for the two gated verticals ([26bb9dd](https://github.com/event4u-app/agent-config/commit/26bb9dd77c7c6adb1bebc9677f5096d8e66ef999))
1103
+ * **roadmap:** correct the flip-gate checkbox and tighten the flow-team criterion ([89a2d26](https://github.com/event4u-app/agent-config/commit/89a2d26721090cc7545a19ef73877689a445420f))
1104
+ * **roadmap:** persona-library harvest — executed and archived ([1c6940a](https://github.com/event4u-app/agent-config/commit/1c6940a2693c94ad366ddc31f791d13870da6d07))
1105
+ * correct outdated Antigravity host claims ([fca90e2](https://github.com/event4u-app/agent-config/commit/fca90e2c3413465e0a4bfbfd65d1da01ea15bef7))
1106
+
1107
+ ### Chores
1108
+
1109
+ * **meta:** sync pack README with shortened precheck description ([601fdc1](https://github.com/event4u-app/agent-config/commit/601fdc111553d8d4c55796d43c3203d938b5c179))
1110
+ * **ci:** wire lint-originality and validate-flow-teams into the pipeline ([48bc88a](https://github.com/event4u-app/agent-config/commit/48bc88a2ce24bfffd1f98e4194163986b3adf245))
1111
+
1112
+ Tests: 7833 (+63 since 9.3.0)
1113
+
1114
+ ## [9.3.0](https://github.com/event4u-app/agent-config/compare/9.2.0...9.3.0) (2026-07-16)
1115
+
1116
+ ### Features
1117
+
1118
+ * **ergonomics:** harvest ergonomics plate — tdd cluster, fix:route, persona-improvement, hand-off examples ([e8be16f](https://github.com/event4u-app/agent-config/commit/e8be16f2a0194a6b6cb3b2ed4a9899db31067d1d))
1119
+ * **review:** wire reuse + OOP-shape lens into the review/orchestration surfaces ([067175a](https://github.com/event4u-app/agent-config/commit/067175a04c1d49c356bf8e42c4cb0f23b3d91473))
1120
+ * **hooks:** PostToolUse PR-URL reminder — reply-shape backstop for direct-answers ([1bf82a1](https://github.com/event4u-app/agent-config/commit/1bf82a1f23fd2fac7ae86fe1fae3cc6b3e0da657))
1121
+
1122
+ ### Bug Fixes
1123
+
1124
+ * **counts:** regenerate command-flows.md (+5 commands) + map explain-run orphan into surface-map ([a6254e4](https://github.com/event4u-app/agent-config/commit/a6254e434e966eaca9e697093980dfc3cc04a8d8))
1125
+ * **hooks:** pre-push gate mirrors the full CI consistency check locally ([ebd706f](https://github.com/event4u-app/agent-config/commit/ebd706fb1e978189954ca838bc41bd3f536ee560))
1126
+
1127
+ ### Documentation
1128
+
1129
+ * refresh guideline counts (100 -> 101) after the new dev-standard guideline ([02ac1a5](https://github.com/event4u-app/agent-config/commit/02ac1a53214b5cd22eecee873e2b81286c01a6b2))
1130
+ * **standards:** apply council findings — paradigm-appropriate + minimal-diff precedence ([474b1c6](https://github.com/event4u-app/agent-config/commit/474b1c68b8a28dd1f5302b135fbe69876696ea6f))
1131
+ * **standards:** component-oriented + OOP-first development standard ([5bd62bd](https://github.com/event4u-app/agent-config/commit/5bd62bdf14208f65ae166b954a5c7b4e49211ffa))
1132
+ * **roadmaps:** council-review + apply findings to feedback-9.2.0 followups ([dc187d4](https://github.com/event4u-app/agent-config/commit/dc187d4b83debda1c4f8c551acfc6400149da520))
1133
+ * **roadmaps:** draft feedback-9.2.0 follow-ups roadmap ([69d363d](https://github.com/event4u-app/agent-config/commit/69d363df10f5e9dd6605ba6af370ac1d477a5a92))
1134
+ * **roadmaps:** spawn adversarial-council benchmark follow-up; mark deferred arm moved ([36a69d9](https://github.com/event4u-app/agent-config/commit/36a69d9f00b4a236535ea01bf8dd36a4d82f1293))
1135
+
1136
+ ### Refactoring
1137
+
1138
+ * **subagent-orchestration:** relocate worker-prompt contract to spawn-contract context ([de38ce1](https://github.com/event4u-app/agent-config/commit/de38ce12ff167eafe7a0631f1088ed244e2b85bf))
1139
+
1140
+ ### Chores
1141
+
1142
+ * **harvest:** close second-sweep coverage plate — all folds verified, proposals parked, archived ([7af8a75](https://github.com/event4u-app/agent-config/commit/7af8a75305289bd1f2d36498bea362b789b0f610))
1143
+ * **roadmaps:** archive completed adversarial-verification-council roadmap ([fc34874](https://github.com/event4u-app/agent-config/commit/fc34874a608644d89ab12aa0147d5f6237a4f9ca))
1144
+
1145
+ Tests: 7770 (+6 since 9.2.0)
1146
+
1036
1147
  ## [9.2.0](https://github.com/event4u-app/agent-config/compare/9.1.0...9.2.0) (2026-07-14)
1037
1148
 
1038
1149
  ### Features
package/CONTRIBUTING.md CHANGED
@@ -127,6 +127,20 @@ the review floor, not around it.
127
127
  specific consumer project, domain, or stack. The
128
128
  [`augment-portability`](dist/agent-src/rules/augment-portability.md) rule and
129
129
  `scripts/check_portability.py` enforce this in CI.
130
+ - **External contributions get credited.** A merged community skill carries
131
+ `provenance: community` in its frontmatter — the public catalog
132
+ ([`docs/catalog.md`](docs/catalog.md)) renders it as `community` in the
133
+ `source` column — and gets a row in [`CREDITS.md`](CREDITS.md)
134
+ (§ Community contributions). Maintainers add both on merge; if you were
135
+ missed, open an issue — attribution gaps are treated as bugs.
136
+ - **Originality is CI-gated.** Every PR touching skills, personas, or domain
137
+ commands runs `lint_originality --changed` (the anti-reskin gate, see the
138
+ `originality-gate` job in `.github/workflows/skill-lint.yml`). Run it
139
+ locally before pushing:
140
+ `./scripts-run src/scripts/lint_originality --changed <changed files>` —
141
+ or run the whole contributor precheck in one pass via the
142
+ [`/contribution-precheck`](src/domains/meta/contribution-precheck/command.md)
143
+ command (frontmatter schema + skill lint + originality, Node-only).
130
144
 
131
145
  ## Agent-assisted contribution workflow
132
146
 
package/README.md CHANGED
@@ -4,11 +4,13 @@
4
4
 
5
5
  [![Smoke](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [![Public install smoke (3 OS × 2 Node)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [![npm](https://img.shields.io/npm/v/@event4u/agent-config?style=flat-square&label=npm&color=orange)](https://www.npmjs.com/package/@event4u/agent-config) [![agent-config MCP server](https://glama.ai/mcp/servers/event4u-app/agent-config/badges/score.svg)](https://glama.ai/mcp/servers/event4u-app/agent-config)
6
6
 
7
- [![Skills](https://img.shields.io/badge/Skills-275-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-105-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-184-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-100-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
7
+ [![Skills](https://img.shields.io/badge/Skills-278-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-105-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-190-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-101-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
8
8
 
9
9
  > **Choose your experience — developer · founder · content · agency · finance · ops. Add packs. Get a focused command set, not a 500-artefact dump.** Bring your own AI provider.
10
10
 
11
- **Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Full docs: **[event4u-app.github.io/agent-config](https://event4u-app.github.io/agent-config)**.
11
+ **Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
12
+
13
+ ![The trust surface running green — every "verify it yourself" command from a real, CI-re-executed run](docs/media/proof-demo.gif)
12
14
 
13
15
  **Every public claim in this README is machine-checked — [verify it yourself](docs/proof.md).** In a market that runs on unbacked headline numbers, this one binds each claim to resolvable evidence or fails its own build.
14
16
 
@@ -120,8 +122,14 @@ is generated from source: a claim→evidence table (every public claim binds to
120
122
  resolvable pointer, or CI fails), honest-null benchmarks *including the runs where
121
123
  the package changed nothing*, and a "verify it yourself" block you run on a fresh
122
124
  checkout. The proof page fails CI if it drifts from its sources — reproducibility
123
- is the proof. Browse it on the deployed docs site:
124
- [event4u-app.github.io/agent-config](https://event4u-app.github.io/agent-config).
125
+ is the proof. Browse it on the deployed docs site — the proof page is the primary entry:
126
+ [event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/).
127
+ The honest comparison frame lives at
128
+ [`docs/us-vs-the-category.md`](docs/us-vs-the-category.md).
129
+
130
+ Maintaining a skills catalog yourself? The **anti-reskin gate** that blocks
131
+ find-replace re-skin PRs here runs on your catalog too —
132
+ [`docs/anti-reskin-gate.md`](docs/anti-reskin-gate.md).
125
133
 
126
134
  Audit-disciplined by construction — every memory consult, decision
127
135
  key, and hook concern lands in `agents/runtime/state/` so you can replay it.
@@ -0,0 +1,100 @@
1
+ ---
2
+ model_tier: medium
3
+ name: contribution-precheck
4
+ pack: meta
5
+ tier: 2
6
+ visibility: internal
7
+ skills: [lint-skills, check-refs]
8
+ description: "Contributor self-service precheck: run the PR-relevant lint subset (skill linter, originality gate, frontmatter schema) on changed files locally — a verdict with fix hints before opening a PR."
9
+ suggestion:
10
+ eligible: false
11
+ rationale: "Package-internal — contributors to event4u/agent-config invoke it explicitly before opening a PR."
12
+ workspaces:
13
+ - agent-config-maintainer
14
+ packs:
15
+ - meta
16
+ ---
17
+
18
+ # contribution-precheck
19
+
20
+ Run the same gates a PR will hit — locally, Node-only, before pushing. Mirrors
21
+ the CI enforcement path (`originality-gate` + skill-lint jobs in
22
+ `.github/workflows/skill-lint.yml`) so a contributor never learns about a
23
+ failure from remote CI first.
24
+
25
+ Requires only Node + installed `node_modules` (the `./scripts-run` shim invokes
26
+ `tsx` directly — no task runner, no full CI toolchain).
27
+
28
+ ## Instructions
29
+
30
+ ### 1. Compute the changed set
31
+
32
+ ```bash
33
+ BASE=$(git merge-base origin/main HEAD 2>/dev/null || echo HEAD)
34
+ CHANGED=$(git diff --name-only --diff-filter=ACMR "$BASE" -- \
35
+ 'src/skills/*/SKILL.md' \
36
+ 'src/agent-src/personas/*.md' \
37
+ 'src/domains/**/command.md' \
38
+ | grep -v '^src/agent-src/personas/_' || true)
39
+ ```
40
+
41
+ Uncommitted work counts: append `git diff --name-only` + `git diff --cached
42
+ --name-only` output filtered to the same patterns. Empty set → report
43
+ "nothing to precheck — no changed skills / personas / domain commands" and
44
+ stop (that is an honest no-op, not a pass).
45
+
46
+ ### 2. Run the three gates, in order
47
+
48
+ | Gate | Command | Mirrors |
49
+ |---|---|---|
50
+ | Frontmatter schema | `./scripts-run src/scripts/validate_frontmatter --root src` | CI schema validation |
51
+ | Skill lint | `./scripts-run src/scripts/skill_linter <changed SKILL.md files>` | `skill-lint` job (`--changed`) |
52
+ | Originality (anti-reskin) | `./scripts-run src/scripts/lint_originality --changed $CHANGED` | `originality-gate` job |
53
+
54
+ Notes:
55
+
56
+ - `skill_linter` takes positional paths — pass the changed `SKILL.md` files
57
+ explicitly (its own `--changed` derivation filters to the projected trees,
58
+ not `src/`, and would silently check nothing on authored edits).
59
+ - `lint_originality --changed` needs the explicit file list from step 1 — it
60
+ does not self-derive.
61
+
62
+ ### 3. Emit the verdict
63
+
64
+ One compact block, worst gate first:
65
+
66
+ ```
67
+ Precheck: <N> changed file(s)
68
+ ✅|❌ frontmatter — <0 failing | list failing files + first error each>
69
+ ✅|❌ skill lint — <pass/warn/fail counts | per-file errors>
70
+ ✅|❌ originality — <no overlap ≥ WARN | offending pair + overlap %>
71
+ Verdict: READY | FIX FIRST (<n> blocking finding(s))
72
+ ```
73
+
74
+ For every ❌ add one fix hint: the failing file, the rule/pair it tripped, and
75
+ the smallest change that clears it (e.g. "overlap 72% with `<skill>` — rewrite
76
+ the shared procedure sections in your own words; find-replace re-skins score
77
+ ~100% because entities are neutralized").
78
+
79
+ ### 4. Degraded mode (no git remote / shallow clone)
80
+
81
+ `origin/main` missing → fall back to `git diff --name-only HEAD` (working
82
+ tree) for step 1 and say so in the verdict header. Never claim the CI result
83
+ will match exactly in degraded mode — the PR gate diffs against the real base.
84
+
85
+ ## Gotcha
86
+
87
+ - A clean precheck is **necessary, not sufficient** — remote CI additionally
88
+ runs the per-pack matrix, security linters and reference checks. The
89
+ precheck covers the gates that most commonly fail external contributions.
90
+ - Do not "fix" an originality failure by shuffling words until the score dips
91
+ under the threshold — the entity-neutralized shingle gate is calibrated for
92
+ find-replace re-skins; a borderline score means the artifact needs its own
93
+ substance, not better camouflage.
94
+
95
+ ## Do NOT
96
+
97
+ - Do NOT run the full local CI pipeline as a substitute — this command exists precisely so a
98
+ contributor without the full toolchain gets a verdict.
99
+ - Do NOT skip step 1's empty-set report — "0 files checked" is INCONCLUSIVE,
100
+ never a pass (same guard as CI).
@@ -0,0 +1,49 @@
1
+ ---
2
+ model_tier: medium
3
+ name: fix-route
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ sub: route
8
+ cluster: fix
9
+ description: Classify a vaguely-described problem and dispatch to the right fix sub-command (or name the specialist skill when it is not a fix task)
10
+ argument-hint: "[free-text problem description]"
11
+ suggestion:
12
+ eligible: true
13
+ trigger_description: "something's broken but I'm not sure which fixer — throw me a problem and route it"
14
+ trigger_context: "user describes a problem without naming a specific fix sub-command"
15
+ workspaces:
16
+ - agent-config-maintainer
17
+ packs:
18
+ - meta
19
+ ---
20
+
21
+ # /fix route
22
+
23
+ The classify-and-dispatch front door for the `/fix` family. Adapted from the
24
+ ecosystem source's `/smart-fix` — folded into the `fix` verb (ADR-041
25
+ controlled-verb vocabulary) rather than a new top-level verb. It runs the
26
+ `/fix` auto-detection over a free-text problem and routes; when the problem is
27
+ not a fix task, it names the right specialist instead of forcing a fix sub.
28
+
29
+ ## Instructions
30
+
31
+ 1. Read the free-text problem.
32
+ 2. Run the `/fix` cluster's detection table (see the cluster head) over it:
33
+ CI failure → `fix ci`; broken cross-refs → `fix refs`; PR review threads →
34
+ `fix pr-comments`; code-comment noise → `fix comments`; seeder/FK →
35
+ `fix seeder`; type/lint/format errors → `fix quality`; project-leak in the
36
+ shared package → `fix portability`.
37
+ 3. **HIGH confidence** → route to that sub-command and follow its instructions.
38
+ 4. **Not a fix task** (a new feature, an analysis, a design question) → do NOT
39
+ force a fix sub; name the correct surface instead (`/feature`, a
40
+ `project-analysis-*` skill, `improve-before-implement`, etc.) and stop.
41
+ 5. **LOW confidence / ≥ 2 conflict** → print the fix menu and ask; in
42
+ non-interactive mode emit `ambiguous_routing` and stop (per the
43
+ non-interactive-contract). Never guess past LOW.
44
+
45
+ ## Rules
46
+
47
+ - **Dispatch only — no fixing here.** This sub classifies and hands off; the routed sub-command does the work under its own rules.
48
+ - **One route per turn.** Do NOT chain.
49
+ - **Do NOT commit or push** — the routed sub-command's rules govern that.
@@ -2,10 +2,10 @@
2
2
  model_tier: medium
3
3
  name: fix
4
4
  disable-model-invocation: true
5
- argument-hint: "[ci|refs|portability|seeder|pr-comments|comments|quality] [args]"
5
+ argument-hint: "[ci|refs|portability|seeder|pr-comments|comments|quality|route] [args]"
6
6
  pack: engineering-base
7
7
  intent: "Fix-workflow dispatcher — ci, pr-comments, refs, seeder, portability, comments, quality"
8
- routes_to: [fix-ci, fix-pr-comments, fix-refs, fix-seeder, fix-portability, fix-comments, fix-quality]
8
+ routes_to: [fix-ci, fix-pr-comments, fix-refs, fix-seeder, fix-portability, fix-comments, fix-quality, fix-route]
9
9
  replaces: []
10
10
  tier: 1
11
11
  visibility: advanced
@@ -39,6 +39,7 @@ with a single entry point + sub-command dispatch.
39
39
  | `/fix pr-comments` | `commands/fix/pr-comments.md` | Fix and reply to all open review comments — **bot + human, classified per comment**; dedupes by comment id + reply marker |
40
40
  | `/fix comments` | `commands/fix/comments.md` | Review the **code comments** in the current branch's diff and simplify, shorten, or remove each one (≠ `pr-comments`, which targets GitHub review threads) |
41
41
  | `/fix quality` | `commands/fix/quality.md` | Run the quality pipeline (type-checker / linter / formatter, PHP and/or JS/TS) and fix every error — auto-detects language from changed files |
42
+ | `/fix route` | `commands/fix/route.md` | Classify a vaguely-described problem and dispatch to the right fix sub (or name the specialist when it is not a fix task) — the `/smart-fix` front door, folded into the `fix` verb |
42
43
 
43
44
  Sub-command names match the locked contract in
44
45
  [`docs/contracts/command-clusters.md`](../docs/contracts/command-clusters.md).
@@ -84,6 +85,7 @@ into it and removed.
84
85
  > 5. pr-comments — address open review comments (bot / human / both)
85
86
  > 6. comments — simplify / shorten / remove code comments in the branch diff
86
87
  > 7. quality — run the quality pipeline and fix every error
88
+ > 8. route — describe the problem; I classify and dispatch
87
89
 
88
90
  ## Rules
89
91
 
@@ -0,0 +1,32 @@
1
+ ---
2
+ model_tier: medium
3
+ name: tdd-green
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: tdd
8
+ sub: green
9
+ skills: [test-driven-development]
10
+ description: TDD green phase — write the minimum production code to make the failing test pass; no test edits
11
+ argument-hint: "[failing test | context]"
12
+ suggestion:
13
+ eligible: true
14
+ trigger_description: "make the failing test pass"
15
+ trigger_context: "a failing test exists, ready to implement"
16
+ workspaces:
17
+ - agent-config-maintainer
18
+ packs:
19
+ - meta
20
+ ---
21
+
22
+ # /tdd green
23
+
24
+ Drives the **Implement** phase of
25
+ [`test-driven-development`](../../../skills/test-driven-development/SKILL.md).
26
+
27
+ ## Instructions
28
+
29
+ 1. Write the **minimum** production code to make the failing test pass — no scope beyond the one case.
30
+ 2. Honor the Implement Forbidden block: **no `tests/**` edits** — changing the assertion to fit the code is the canonical violation; a genuinely-wrong test → STOP and ask, never silently edit.
31
+ 3. Run the test; confirm green.
32
+ 4. Output: the green run. Hand to `/tdd refactor` (or `/tdd red` for the next case).
@@ -0,0 +1,33 @@
1
+ ---
2
+ model_tier: medium
3
+ name: tdd-red
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: tdd
8
+ sub: red
9
+ skills: [test-driven-development]
10
+ description: TDD red phase — enumerate cases, write ONE failing test, watch it fail at an assertion (not an import error)
11
+ argument-hint: "[behavior to test]"
12
+ suggestion:
13
+ eligible: true
14
+ trigger_description: "write the failing test first"
15
+ trigger_context: "starting a new behavior test-first"
16
+ workspaces:
17
+ - agent-config-maintainer
18
+ packs:
19
+ - meta
20
+ ---
21
+
22
+ # /tdd red
23
+
24
+ Drives the **Design → Test-Red** phases of
25
+ [`test-driven-development`](../../../skills/test-driven-development/SKILL.md).
26
+
27
+ ## Instructions
28
+
29
+ 1. State the behavior in one sentence; enumerate the cases (happy / boundary / error).
30
+ 2. Write ONE failing test for the first case.
31
+ 3. Run it; confirm it fails at an **assertion**, not an import/collection error.
32
+ 4. Honor the Test-Red Forbidden block: **no production edits** (diff = `tests/**` only).
33
+ 5. Output: the failing test + its observed failure reason. Hand to `/tdd green`.
@@ -0,0 +1,31 @@
1
+ ---
2
+ model_tier: medium
3
+ name: tdd-refactor
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: tdd
8
+ sub: refactor
9
+ skills: [test-driven-development]
10
+ description: TDD refactor phase — clean up (rename, deduplicate) while keeping the test green
11
+ argument-hint: "[target | context]"
12
+ suggestion:
13
+ eligible: true
14
+ trigger_description: "refactor while the test stays green"
15
+ trigger_context: "test is green, ready to clean up"
16
+ workspaces:
17
+ - agent-config-maintainer
18
+ packs:
19
+ - meta
20
+ ---
21
+
22
+ # /tdd refactor
23
+
24
+ Drives the **Refactor** step of
25
+ [`test-driven-development`](../../../skills/test-driven-development/SKILL.md).
26
+
27
+ ## Instructions
28
+
29
+ 1. Refactor (rename, deduplicate, extract) ONLY while the test stays green — re-run after each change.
30
+ 2. If a change reddens the test, revert it; refactoring never changes behavior.
31
+ 3. Output: the cleaned diff + a final green run. Loop back to `/tdd red` for the next behavior.
@@ -0,0 +1,50 @@
1
+ ---
2
+ model_tier: medium
3
+ name: tdd
4
+ disable-model-invocation: true
5
+ argument-hint: "[red|green|refactor] [behavior | args]"
6
+ pack: engineering-base
7
+ tier: 2
8
+ visibility: internal
9
+ description: TDD orchestrator — routes to red (failing test), green (minimum code), refactor (clean while green)
10
+ cluster: tdd
11
+ type: orchestrator
12
+ auto_detect: true
13
+ suggestion:
14
+ eligible: true
15
+ trigger_description: "write the failing test first, make the test pass, refactor while green"
16
+ trigger_context: "user is driving a change test-first and names a TDD phase"
17
+ workspaces:
18
+ - agent-config-maintainer
19
+ packs:
20
+ - meta
21
+ ---
22
+
23
+ # /tdd
24
+
25
+ Thin ergonomic split over the [`test-driven-development`](../../skills/test-driven-development/SKILL.md)
26
+ skill — one sub-command per phase of that skill's mode contract. **No logic
27
+ lives here**; each sub loads the skill and drives its named phase.
28
+
29
+ ## Sub-commands
30
+
31
+ | Sub-command | Routes to | Purpose |
32
+ |---|---|---|
33
+ | `/tdd red` | `commands/tdd/red.md` | Design → Test-Red: enumerate cases, write ONE failing test, watch it fail at an assertion |
34
+ | `/tdd green` | `commands/tdd/green.md` | Implement: write the minimum code to pass; no test edits |
35
+ | `/tdd refactor` | `commands/tdd/refactor.md` | Refactor: clean up while the test stays green |
36
+
37
+ ## Dispatch
38
+
39
+ 1. Parse `/tdd <sub> [args]`. Explicit sub → route. Otherwise infer the phase
40
+ from observable state via the skill's mode-inference table (no test yet →
41
+ red; test failing at an assertion → green; green + defect → red again).
42
+ 2. Load [`test-driven-development`](../../skills/test-driven-development/SKILL.md)
43
+ and drive ONLY the named phase, honoring that phase's Forbidden block.
44
+ 3. LOW confidence / bare `/tdd` → show the three-row menu and ask.
45
+
46
+ ## Rules
47
+
48
+ - **One phase per turn.** Do NOT chain red→green→refactor silently — each sub is one turn.
49
+ - **No logic duplication.** The behavior is the skill's; these commands only select the phase.
50
+ - **Do NOT commit or push.**
@@ -146,6 +146,10 @@ measured improvement.
146
146
 
147
147
  - `/council` — breadth under a neutrality contract; the complement, not the
148
148
  competitor.
149
+ - `subagent-orchestration` skill — the in-session, same-weights variant (no
150
+ network, no spend); team is cross-model with repo access. The three-way
151
+ router split: council = independent breadth, team = collaborative depth,
152
+ subagents = in-session same-weights.
149
153
  - `adversarial-review` skill — the free single-model first rung below
150
154
  `/team adversarial`.
151
155
  - `docs/contracts/ai-team-config.md` — the `ai_team` settings block
@@ -10,6 +10,7 @@ before writing or reviewing code); this file is the catalog.
10
10
  | File | Topic |
11
11
  |---|---|
12
12
  | `code-clarity.md` | Cross-language clarity rules — inline single-use values, carve-outs (side effects, loops, type narrowing, debugger) |
13
+ | `component-oriented-and-oop-development.md` | Reuse-first components (FE) + OOP-where-it-reduces-complexity (backend); carve-out index; bounded by the anti-over-engineering anchors |
13
14
 
14
15
  ## PHP (`docs/guidelines/php/`)
15
16
 
@@ -41,11 +41,90 @@ private-data leg stays narrow: the composer rejects inline bodies (multi-line /
41
41
  oversized entries), accepts only ref-like tokens, and caps the count. Anything
42
42
  dropped is recorded in `warnings` and surfaced — never silently widened.
43
43
 
44
+ ## Bundle resolver — bind to the existing surfaces
45
+
46
+ The brief is **resolved**, not hand-built. `resolveBundle(slice)` maps a task
47
+ slice to a concrete bundle by selecting from what the package already ships — no
48
+ parallel registry:
49
+
50
+ - **Role-profile via reused `judge-*` lenses** — a review slice → `judge-code-quality`,
51
+ security → `judge-security-auditor`, tests → `judge-test-coverage`, bug-hunt →
52
+ `judge-bug-hunter`. The lens rides as the leading persona so the subagent loads it.
53
+ - **Role-mode** per slice kind (review → `reviewer`, tests → `tester`, plan → `planner`, …).
54
+ - **Tier** per slice kind (`lite|medium|high`), consumed by `subagent-routing`.
55
+ - **Knowledge refs** filtered by the **ADR-100 guard** (`filterKnowledgeByPolicy`):
56
+ a cross-project bundle drops `proprietary` refs; the drop is recorded.
57
+
58
+ Every resolved bundle emits an auditable `(role_mode, judge_lens, tier,
59
+ knowledge_ref_count, dropped_proprietary)` signature (`bundleAuditLine`) into the
60
+ [`orchestration-telemetry`](orchestration-telemetry.md) object — counts + ids
61
+ only, never bodies.
62
+
44
63
  ## Reference implementation
45
64
 
46
65
  [`src/scripts/_lib/subagent_spawn.ts`](../../../../src/scripts/_lib/subagent_spawn.ts)
47
- (`composeSpawnBrief`), covered by
48
- [`tests/scripts/_lib_subagent_spawn.test.ts`](../../../../tests/scripts/_lib_subagent_spawn.test.ts).
66
+ (`composeSpawnBrief`) + [`src/scripts/_lib/subagent_bundle.ts`](../../../../src/scripts/_lib/subagent_bundle.ts)
67
+ (`resolveBundle`, `filterKnowledgeByPolicy`, `bundleAuditLine`), covered by
68
+ [`tests/scripts/_lib_subagent_spawn.test.ts`](../../../../tests/scripts/_lib_subagent_spawn.test.ts)
69
+ + [`tests/scripts/_lib_subagent_bundle.test.ts`](../../../../tests/scripts/_lib_subagent_bundle.test.ts).
70
+
71
+ ## Worker-prompt rules — verbatim at spawn
72
+
73
+ Relocated from the `subagent-orchestration` skill body (road-to-feedback-9.2.0
74
+ Phase 2, size-budget split). Every dispatched worker prompt obeys these rules —
75
+ they prevent the two classic handoff failures: lossy re-summarization dropping
76
+ the user's requirements, and over-scripted prompts that break on first
77
+ contingency.
78
+
79
+ - **(a) User constraints verbatim.** Pass the user's
80
+ constraints/exclusions/preferences into the worker prompt **verbatim** — never
81
+ a paraphrase (a paraphrase silently drops requirements).
82
+ - **(b) Describe the goal, don't script the approach.** State the outcome and
83
+ let the worker choose the path; over-scripting breaks on contingencies.
84
+ - **(c) Translate environment paths.** Orchestrator-local paths do not exist in
85
+ the worker's sandbox — resolve/translate them at spawn.
86
+ - **(d) Pre-declared check-in conditions.** The worker names, at spawn time, the
87
+ conditions under which it will halt and ask ("if login required", "if
88
+ multiple candidates found") — so interrupts are predictable, not surprises.
89
+ - **(e) Attach relevant knowledge — read-only (road-to-opt-subagent-harvest
90
+ P3).** Before dispatch, look up the slice's key identifiers via
91
+ `memory_lookup` / the knowledge cards and attach the top hits to the
92
+ worker prompt AS LEADS — labelled per the source-discovery discipline
93
+ (negative facts + pointers durable; positive structure = hypothesis to
94
+ re-confirm, never a build input). The WRITE half stays forbidden: a
95
+ subagent's output is never auto-persisted into memory — promotion is
96
+ always the human-gated flow (ADR-098 floor). Auto-surface, never
97
+ auto-write.
98
+
99
+ ## Hand-off worked examples — step N output feeds step N+1
100
+
101
+ Relocated from the `subagent-orchestration` skill (ecosystem-harvest ergonomics
102
+ U4, size-budget split). Ordered modes (`do-in-steps`) pass each step's return
103
+ as the next step's context; the failure this prevents is re-deriving state the
104
+ previous step established, or dropping a decision it made.
105
+
106
+ **Ordered chain (do-in-steps).** Step 1 returns a structured result; step 2's
107
+ worker prompt embeds it verbatim as "context from step 1", never a paraphrase:
108
+
109
+ ```
110
+ Step 1 (analyze) → returns: { entrypoints: [...], risk_notes: "..." }
111
+ Step 2 (implement) worker prompt:
112
+ "Context from step 1 (verbatim, do not re-derive):
113
+ entrypoints = [...]; risk_notes = '...'
114
+ Your task: <goal>. Use the entrypoints above; do not re-scan."
115
+ Step 3 (verify) worker prompt:
116
+ "Context: step 2 changed <files>. Assert <invariant>."
117
+ ```
118
+
119
+ **Fan-out → synthesis (do-in-parallel + a synthesis step).** Each parallel
120
+ worker returns one envelope; the synthesis step receives ALL of them as an
121
+ ordered list and is told what to reconcile ("merge the N findings; a finding
122
+ present in ≥2 returns is high-confidence"). The synthesis prompt names the
123
+ cross-item comparison — it does not just concatenate.
124
+
125
+ The rule both encode: **the receiving prompt embeds the prior return verbatim
126
+ and states what to do with it** — the same verbatim-first discipline as the
127
+ worker-prompt rules above, applied across a step boundary.
49
128
 
50
129
  ## Related
51
130