@tyroneross/build-loop 0.36.0 → 0.43.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 (270) hide show
  1. package/.agents/plugins/marketplace.json +2 -2
  2. package/.claude-plugin/marketplace.json +3 -3
  3. package/.claude-plugin/plugin.json +1 -1
  4. package/.codex-plugin/plugin.json +1 -1
  5. package/.cursor/rules/build-loop-surface.mdc +12 -11
  6. package/.cursor/rules/skill-index.mdc +33 -0
  7. package/AGENTS.md +213 -34
  8. package/README.md +99 -31
  9. package/agents/advisor.md +4 -4
  10. package/agents/alignment-checker.md +2 -2
  11. package/agents/architecture-scout.md +4 -4
  12. package/agents/build-orchestrator.md +38 -36
  13. package/agents/database-assessor.md +11 -5
  14. package/agents/design-contract-specialist.md +8 -8
  15. package/agents/fact-checker.md +13 -3
  16. package/agents/fix-critique.md +2 -2
  17. package/agents/independent-auditor.md +60 -7
  18. package/agents/leak-scanner.md +82 -0
  19. package/agents/overfitting-reviewer.md +2 -2
  20. package/agents/plan-critic.md +1 -1
  21. package/agents/promotion-reviewer.md +5 -5
  22. package/agents/retrospective-synthesizer.md +138 -35
  23. package/agents/scope-auditor.md +82 -11
  24. package/agents/security-reviewer.md +56 -2
  25. package/agents/self-improvement-architect.md +17 -3
  26. package/agents/transcript-pattern-miner.md +5 -5
  27. package/agents/ui-validator.md +1 -1
  28. package/bin/build-loop-debugger.js +143 -0
  29. package/bin/build-loop-install.js +1 -4
  30. package/bin/build-loop-load-probe.js +345 -0
  31. package/codex-skills/build-loop/SKILL.md +28 -6
  32. package/commands/feedback.md +37 -0
  33. package/dist/src/interactive-verifier.d.ts +1 -14
  34. package/dist/src/interactive-verifier.d.ts.map +1 -1
  35. package/dist/src/interactive-verifier.js +6 -113
  36. package/dist/src/interactive-verifier.js.map +1 -1
  37. package/dist/src/quality.d.ts +5 -0
  38. package/dist/src/quality.d.ts.map +1 -0
  39. package/dist/src/quality.js +81 -0
  40. package/dist/src/quality.js.map +1 -0
  41. package/dist/src/storage.d.ts.map +1 -1
  42. package/dist/src/storage.js +37 -3
  43. package/dist/src/storage.js.map +1 -1
  44. package/docs/agent-surface-policy.md +35 -31
  45. package/docs/memory-setup.md +19 -0
  46. package/hooks/git/pre-push +65 -4
  47. package/hooks/hooks.json +95 -38
  48. package/hooks/pre-commit +20 -1
  49. package/hooks/pre-edit-rally-point.sh +10 -3
  50. package/hooks/session-start-codex-hook-trust.sh +30 -0
  51. package/hooks/session-start-git-hooks.sh +3 -1
  52. package/hooks/session-start-rally-point.sh +52 -4
  53. package/hooks/session-start-worktree-gc.sh +47 -94
  54. package/hooks/stop-transcript-sweep.sh +173 -0
  55. package/hooks/test_closeout.sh +14 -2
  56. package/package.json +8 -7
  57. package/scripts/README.md +1 -1
  58. package/scripts/_paths.py +65 -0
  59. package/scripts/groundwork_exchange.py +1012 -0
  60. package/scripts/install_memory.py +33 -1
  61. package/scripts/lessons_index/ingest.py +13 -2
  62. package/scripts/lessons_index/query.py +36 -13
  63. package/scripts/memory_context/__init__.py +108 -14
  64. package/scripts/memory_graph/__init__.py +5 -1
  65. package/scripts/project_resolver.py +42 -36
  66. package/scripts/sync_plugin_cache.py +37 -2
  67. package/skills/agent-rally-point/SKILL.md +46 -0
  68. package/skills/api-registry-bridge/SKILL.md +1 -1
  69. package/skills/architecture/dead/SKILL.md +1 -1
  70. package/skills/architecture/impact/SKILL.md +1 -1
  71. package/skills/architecture/review/SKILL.md +1 -1
  72. package/skills/architecture/rules/SKILL.md +3 -3
  73. package/skills/architecture/scan/SKILL.md +1 -1
  74. package/skills/architecture/trace/SKILL.md +1 -1
  75. package/skills/attribution-standard/SKILL.md +6 -6
  76. package/skills/auto-decision-capture/SKILL.md +31 -2
  77. package/skills/auto-finding-capture/SKILL.md +28 -1
  78. package/skills/build-loop/SKILL.md +131 -23
  79. package/skills/build-loop/fallbacks.md +16 -21
  80. package/skills/build-loop/phases/ui-validation.md +2 -2
  81. package/skills/build-loop/references/advisor-dispatch-ladder.md +1 -1
  82. package/skills/build-loop/references/apple-native-planning.md +1 -1
  83. package/skills/build-loop/references/autonomous-and-per-commit-modes.md +11 -5
  84. package/skills/build-loop/references/autonomy-dashboard.md +115 -0
  85. package/skills/build-loop/references/capability-routing.md +24 -2
  86. package/skills/build-loop/references/coordination.md +24 -6
  87. package/skills/build-loop/references/experiment-results-template.md +15 -3
  88. package/skills/build-loop/references/leadership.md +1 -1
  89. package/skills/build-loop/references/memory.md +14 -3
  90. package/skills/build-loop/references/modular-systems-pack.md +8 -0
  91. package/skills/build-loop/references/output-style.md +86 -0
  92. package/skills/build-loop/references/phase-1-assess.md +102 -2
  93. package/skills/build-loop/references/phase-2-plan.md +9 -1
  94. package/skills/build-loop/references/phase-3-execute.md +5 -2
  95. package/skills/build-loop/references/phase-4-review.md +85 -8
  96. package/skills/build-loop/references/phase-5-iterate.md +76 -8
  97. package/skills/build-loop/references/phase-6-learn.md +10 -17
  98. package/skills/build-loop/references/privileged-request-broker.md +254 -0
  99. package/skills/build-loop/references/resource-aware-execution.md +183 -0
  100. package/skills/build-loop/references/self-recursive-dev.md +2 -2
  101. package/skills/build-loop/references/status-output-format.md +207 -0
  102. package/skills/build-loop/references/verify-dispatch.md +56 -2
  103. package/skills/building-with-deepagents/SKILL.md +1 -1
  104. package/skills/claim-scope/SKILL.md +185 -0
  105. package/skills/color-engine/SKILL.md +103 -0
  106. package/skills/color-engine/_core.py +464 -0
  107. package/skills/color-engine/color_engine.py +175 -0
  108. package/skills/cost-rca/SKILL.md +61 -0
  109. package/skills/data-plane-worktrees/SKILL.md +139 -0
  110. package/skills/data-plane-worktrees/agents/openai.yaml +4 -0
  111. package/skills/database-practice/SKILL.md +200 -0
  112. package/skills/database-practice/references/diagnostic-queries.sql +126 -0
  113. package/skills/database-practice/references/vector-and-graph-tuning.md +208 -0
  114. package/skills/database-practice/scripts/db_table_map.py +1244 -0
  115. package/skills/database-practice/scripts/test_db_table_map.py +514 -0
  116. package/skills/debug-loop/SKILL.md +36 -6
  117. package/skills/debugging-memory/SKILL.md +32 -430
  118. package/skills/debugging-memory/references/pattern-extraction.md +4 -4
  119. package/skills/debugging-memory/references/search.md +32 -120
  120. package/skills/debugging-memory/references/store.md +32 -126
  121. package/skills/debugging-memory/references/subagent-integration.md +1 -1
  122. package/skills/decision-queue/SKILL.md +251 -0
  123. package/skills/decision-queue/assets/template.html +1242 -0
  124. package/skills/decision-queue/references/example-large-queue-batching.md +164 -0
  125. package/skills/decision-queue/scripts/regen_template_constants.py +160 -0
  126. package/skills/defenseclaw-bridge/SKILL.md +2 -2
  127. package/skills/defenseclaw-bridge/references/dc-config-mapping.md +2 -9
  128. package/skills/drain-proposals/SKILL.md +53 -0
  129. package/skills/focused-loop-builder/SKILL.md +31 -0
  130. package/skills/focused-loop-builder/references/spec-format.md +27 -0
  131. package/skills/handoff/SKILL.md +169 -8
  132. package/skills/ibr-bridge/SKILL.md +4 -1
  133. package/skills/knowledge/SKILL.md +26 -14
  134. package/skills/knowledge/references/review-mode.md +2 -3
  135. package/skills/knowledge/templates/madr-minimal.md +1 -1
  136. package/skills/mcp-builder/SKILL.md +1 -1
  137. package/skills/model-bakeoff/SKILL.md +48 -10
  138. package/skills/model-tiering/SKILL.md +92 -31
  139. package/skills/native-ax-driver/SKILL.md +38 -5
  140. package/skills/native-ax-driver/scripts/native_driver.py +278 -22
  141. package/skills/native-ax-driver/scripts/test_native_driver.py +227 -0
  142. package/skills/optimize/SKILL.md +1 -1
  143. package/skills/plugin-builder/SKILL.md +48 -1
  144. package/skills/plugin-builder/references/build-loop-phase-guidance.md +3 -4
  145. package/skills/plugin-builder/references/distribution.md +13 -2
  146. package/skills/plugin-builder/references/plugin-hygiene-lessons.md +2 -2
  147. package/skills/plugin-tests/SKILL.md +2 -2
  148. package/skills/recursive-retrospective/SKILL.md +1 -1
  149. package/skills/repo-closeout/SKILL.md +17 -0
  150. package/skills/repo-closeout/agents/openai.yaml +4 -0
  151. package/skills/repo-maintenance/SKILL.md +179 -0
  152. package/skills/repo-maintenance/agents/openai.yaml +4 -0
  153. package/skills/repo-maintenance/references/pre-public-hygiene.md +134 -0
  154. package/skills/repo-maintenance/references/repository-taxonomy.md +161 -0
  155. package/skills/repo-maintenance/references/safety-protocol.md +106 -0
  156. package/skills/repo-maintenance/references/stack-profiles.md +138 -0
  157. package/skills/repo-maintenance/scripts/audit_repo_maintenance.py +1198 -0
  158. package/skills/repo-maintenance/scripts/test_audit_repo_maintenance.py +506 -0
  159. package/skills/repository-intelligence/SKILL.md +189 -0
  160. package/skills/repository-intelligence/agents/openai.yaml +4 -0
  161. package/skills/repository-intelligence/references/assessment-rubric.md +88 -0
  162. package/skills/repository-intelligence/scripts/repository_inventory.py +347 -0
  163. package/skills/research/SKILL.md +12 -2
  164. package/skills/root-cause-analysis/SKILL.md +1 -1
  165. package/skills/runtime-parity-verification/SKILL.md +36 -1
  166. package/skills/security-methodology/SKILL.md +23 -10
  167. package/skills/security-methodology/references/agentic-handoff-templates.md +220 -0
  168. package/skills/security-methodology/references/cross-source-matrix.md +1 -1
  169. package/skills/security-methodology/references/owasp-agentic-top-10.md +1 -1
  170. package/skills/security-scan/SKILL.md +55 -15
  171. package/skills/self-improve/SKILL.md +70 -50
  172. package/skills/silent-assumptions/SKILL.md +341 -0
  173. package/skills/silent-assumptions/references/elicitation-detectors.md +342 -0
  174. package/skills/spec-writing/SKILL.md +128 -24
  175. package/skills/spec-writing/scripts/check_checklist.py +114 -15
  176. package/skills/ui-design/SKILL.md +6 -4
  177. package/skills/ui-design/references/color-engine.md +132 -0
  178. package/skills/ui-design/references/design-preferences-from-owned-apps.md +8 -8
  179. package/skills/ui-design/references/ui-guidance-sources.md +1 -1
  180. package/skills/ui-design/references/universal-design-principles.alt.md +2 -2
  181. package/plugin-artifacts/codex/.codex-plugin/plugin.json +0 -41
  182. package/plugin-artifacts/codex/AGENTS.md +0 -560
  183. package/plugin-artifacts/codex/BUILD-ARTIFACT.md +0 -5
  184. package/plugin-artifacts/codex/LICENSE +0 -202
  185. package/plugin-artifacts/codex/README.md +0 -313
  186. package/plugin-artifacts/codex/assets/build-loop-plugin-icon.png +0 -0
  187. package/plugin-artifacts/codex/docs/agent-surface-policy.md +0 -63
  188. package/plugin-artifacts/codex/references/advisor-dispatch-ladder.md +0 -62
  189. package/plugin-artifacts/codex/references/agent-role-taxonomy.md +0 -135
  190. package/plugin-artifacts/codex/references/autonomous-and-per-commit-modes.md +0 -161
  191. package/plugin-artifacts/codex/references/autonomy-config.md +0 -231
  192. package/plugin-artifacts/codex/references/backlog-system.md +0 -285
  193. package/plugin-artifacts/codex/references/capability-routing.md +0 -231
  194. package/plugin-artifacts/codex/references/codex-subagents.md +0 -106
  195. package/plugin-artifacts/codex/references/coordination-file-template.md +0 -181
  196. package/plugin-artifacts/codex/references/coordination-rules.md +0 -552
  197. package/plugin-artifacts/codex/references/dogfood-reload-checkpoint.md +0 -112
  198. package/plugin-artifacts/codex/references/halt-and-ask-protocol.md +0 -102
  199. package/plugin-artifacts/codex/references/implementer-envelope-schema.md +0 -302
  200. package/plugin-artifacts/codex/references/intent-capability-pack.md +0 -257
  201. package/plugin-artifacts/codex/references/intent-exploration-prompts.md +0 -96
  202. package/plugin-artifacts/codex/references/leadership.md +0 -72
  203. package/plugin-artifacts/codex/references/memory-systems.md +0 -261
  204. package/plugin-artifacts/codex/references/memory.md +0 -313
  205. package/plugin-artifacts/codex/references/model-tier-mapping.md +0 -296
  206. package/plugin-artifacts/codex/references/modular-systems-pack.md +0 -96
  207. package/plugin-artifacts/codex/references/phase-1-assess.md +0 -249
  208. package/plugin-artifacts/codex/references/phase-2-plan.md +0 -86
  209. package/plugin-artifacts/codex/references/phase-3-execute.md +0 -49
  210. package/plugin-artifacts/codex/references/phase-4-review.md +0 -341
  211. package/plugin-artifacts/codex/references/phase-5-iterate.md +0 -72
  212. package/plugin-artifacts/codex/references/phase-6-learn.md +0 -58
  213. package/plugin-artifacts/codex/references/recent-design-structures.md +0 -274
  214. package/plugin-artifacts/codex/references/research-trigger-policy.md +0 -140
  215. package/plugin-artifacts/codex/references/runtime-smoke-triggers.md +0 -42
  216. package/plugin-artifacts/codex/references/self-review.md +0 -234
  217. package/plugin-artifacts/codex/references/single-writer-commit-protocol.md +0 -90
  218. package/plugin-artifacts/codex/references/task-capture-policy.md +0 -68
  219. package/plugin-artifacts/codex/references/ui-io-contract.md +0 -116
  220. package/plugin-artifacts/codex/references/ui-spotcheck-protocol.md +0 -65
  221. package/plugin-artifacts/codex/references/verify-dispatch.md +0 -85
  222. package/plugin-artifacts/codex/skills/build-loop/SKILL.md +0 -381
  223. package/plugin-artifacts/codex/skills/build-loop/detect-plugins.mjs +0 -82
  224. package/plugin-artifacts/codex/skills/build-loop/eval-guide.md +0 -65
  225. package/plugin-artifacts/codex/skills/build-loop/fallbacks.md +0 -549
  226. package/plugin-artifacts/codex/skills/build-loop/phases/fact-check.md +0 -42
  227. package/plugin-artifacts/codex/skills/build-loop/phases/ui-validation.md +0 -267
  228. package/plugin-artifacts/codex/skills/build-loop/references/advisor-dispatch-ladder.md +0 -62
  229. package/plugin-artifacts/codex/skills/build-loop/references/apple-native-planning.md +0 -439
  230. package/plugin-artifacts/codex/skills/build-loop/references/autonomous-and-per-commit-modes.md +0 -161
  231. package/plugin-artifacts/codex/skills/build-loop/references/capability-routing.md +0 -231
  232. package/plugin-artifacts/codex/skills/build-loop/references/codex-subagents.md +0 -106
  233. package/plugin-artifacts/codex/skills/build-loop/references/coordination.md +0 -161
  234. package/plugin-artifacts/codex/skills/build-loop/references/correction-aware-capture.md +0 -177
  235. package/plugin-artifacts/codex/skills/build-loop/references/experiment-results-template.md +0 -101
  236. package/plugin-artifacts/codex/skills/build-loop/references/independent-auditor.md +0 -72
  237. package/plugin-artifacts/codex/skills/build-loop/references/intent-capability-pack.md +0 -257
  238. package/plugin-artifacts/codex/skills/build-loop/references/intent-exploration-prompts.md +0 -96
  239. package/plugin-artifacts/codex/skills/build-loop/references/leadership.md +0 -72
  240. package/plugin-artifacts/codex/skills/build-loop/references/memory.md +0 -313
  241. package/plugin-artifacts/codex/skills/build-loop/references/modular-systems-pack.md +0 -96
  242. package/plugin-artifacts/codex/skills/build-loop/references/output-style.md +0 -222
  243. package/plugin-artifacts/codex/skills/build-loop/references/pay-it-forward-arch.md +0 -98
  244. package/plugin-artifacts/codex/skills/build-loop/references/phase-1-assess.md +0 -249
  245. package/plugin-artifacts/codex/skills/build-loop/references/phase-2-plan.md +0 -86
  246. package/plugin-artifacts/codex/skills/build-loop/references/phase-3-execute.md +0 -49
  247. package/plugin-artifacts/codex/skills/build-loop/references/phase-4-review.md +0 -341
  248. package/plugin-artifacts/codex/skills/build-loop/references/phase-5-iterate.md +0 -72
  249. package/plugin-artifacts/codex/skills/build-loop/references/phase-6-learn.md +0 -58
  250. package/plugin-artifacts/codex/skills/build-loop/references/recent-design-structures.md +0 -274
  251. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/ASSESSMENT.md +0 -85
  252. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/STANDALONE_TEST_RUN.md +0 -149
  253. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/01-simple-bugfix.md +0 -32
  254. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/02-ui-build-with-iteration.md +0 -48
  255. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/03-multi-failure-escalation.md +0 -60
  256. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/04-ui-build-ibr-absent.md +0 -51
  257. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/05-refactor-navgator-absent.md +0 -71
  258. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/scenarios/06-recurring-bug-debugger-absent.md +0 -52
  259. package/plugin-artifacts/codex/skills/build-loop/references/refactor-history/trace-comparison.md +0 -202
  260. package/plugin-artifacts/codex/skills/build-loop/references/self-recursive-dev.md +0 -77
  261. package/plugin-artifacts/codex/skills/build-loop/references/self-review.md +0 -234
  262. package/plugin-artifacts/codex/skills/build-loop/references/ui-io-contract.md +0 -116
  263. package/plugin-artifacts/codex/skills/build-loop/references/verify-dispatch.md +0 -85
  264. package/plugin-artifacts/codex/skills/build-loop/scanners/audit-design-rules.mjs +0 -476
  265. package/plugin-artifacts/codex/skills/build-loop/scanners/require-visual-evidence.mjs +0 -239
  266. package/plugin-artifacts/codex/skills/build-loop/templates/backlog-item.md +0 -35
  267. package/plugin-artifacts/codex/skills/build-loop/templates/codex-worker-prompt.md +0 -100
  268. package/plugin-artifacts/codex/skills/build-loop/templates/ui-subagent-prompt.md +0 -179
  269. package/plugin-artifacts/codex/skills/build-loop/templates/ux-fix-plan.md +0 -40
  270. package/scripts/build_codex_plugin_artifact.py +0 -321
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: handoff
3
3
  description: "Compose a complete, durable build-loop handoff document from the current run state, and optionally launch a fresh session with it injected. Use when crossing a context boundary (context limit, planned restart, worktree GC). Triggers: 'hand off', 'handoff', 'new session', 'context limit', 'restart', 'fresh session', '/build-loop:compose-handoff'."
4
- user-invocable: true
4
+ user-invocable: false
5
5
  ---
6
6
 
7
7
  <!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
@@ -18,20 +18,154 @@ then (optionally) launch a fresh session in the STABLE checkout with that docume
18
18
  - A worktree about to be GC'd — extract state before the folder disappears.
19
19
  - Handing off work to a peer agent or co-developer.
20
20
 
21
+ ## The seven content classes a handoff must carry
22
+
23
+ Derived empirically (2026-07-26): a generated handoff was cold-read by fresh agents at
24
+ three model tiers, scored, repaired, and re-tested. Every failure fell into one of seven
25
+ classes. A handoff missing any one of them produces an agent that can *restate* the work
26
+ but cannot *act* on it. Ranked by how much damage the omission causes.
27
+
28
+ | # | Class | The question it answers | Failure when missing |
29
+ |---|-------|------------------------|----------------------|
30
+ | 1 | **Orientation** | What is this product, for whom, on what stack? | Reviewer inferred "Apple app" only from `xcodebuild` in a gotcha. Everything downstream is guesswork. |
31
+ | 2 | **Constraints / non-goals** | What must I NOT do? | The single most-cited gap. This is the class truncation kills first, because non-goals sit at the END of an intent file. |
32
+ | 3 | **Landmines** | What will bite me on my FIRST action? | Stale run-id markers, set push-holds, emptied state blocks. Each fires before any real work begins. |
33
+ | 4 | **Authorization** | Am I allowed to just start? | Absent this, an agent picks the most visible queue item — which may be another run's unpaid audit debt. |
34
+ | 5 | **Verification recipe** | How do I build/test, and what must I never run? | Without it an agent reaches for the obvious tool and gets a false green. |
35
+ | 6 | **Open decisions** | What is genuinely undecided, who owns it, what decides it? | A dangling "may have been wrong" with no owner and no criterion is unresolvable by the next agent. |
36
+ | 7 | **Provenance** | How trustworthy is this record itself? | A reconstructed or overridden record read as ground truth is worse than no record. |
37
+
38
+ Two cross-cutting rules learned the same way:
39
+
40
+ - **Never truncate a class-2 or class-6 section.** Both live at the end of their source
41
+ files, so any line cap removes exactly the text that carries the constraint.
42
+ - **Counts are claims.** A queue count that silently caps (or counts a derived `INDEX.md`
43
+ instead of `items/`) understates open work. Titles alone are not enough either — carry
44
+ the frontmatter fields that decide whether an item is safe to pick up
45
+ (`status`, `classify`, `judgment_verdict`, `owed_layers`, `blocked_by`).
46
+
47
+ ## Recall and confidence are different failures with different fixes
48
+
49
+ This is the finding that mattered most, and it is not obvious: **an agent can score full
50
+ marks on recall and still refuse to act.**
51
+
52
+ Measured on one document across four rounds. Haiku answered 10/10 factual questions
53
+ correctly while rating its own confidence **2/5** — it had every fact and would not touch
54
+ the repo. Adding more facts would not have helped, because facts were never the gap.
55
+
56
+ | Failure | Caused by | Symptom | Fix |
57
+ |---|---|---|---|
58
+ | **Recall** | Omission — truncation, silent caps, missing orientation | "NOT IN DOC", wrong counts, guessing the tech stack | Put the content in (classes 1–5) |
59
+ | **Confidence** | Unresolved implication — a flag with no interpretation | Correct answers, low self-rating, "I'd have to read the code first" | State what each flag *means for the reader* (classes 6–7) |
60
+
61
+ Concretely, what moved Haiku from 2/5 to 5/5 was not new information. It was:
62
+
63
+ - Queue items carrying `judgment_verdict` / `classify` / `owed_layers`, so "Judgment owed —
64
+ bl-…-codex-299759" became something a reader could triage instead of fear.
65
+ - The open decision gaining an **owner** and a **criterion for deciding**, so it read as
66
+ assigned rather than abandoned.
67
+ - The override gaining an explicit **cost** ("runs zero tests") and **bound** (what it does
68
+ and does not invalidate), so it read as disclosed rather than alarming.
69
+
70
+ **Rule: every warning in a handoff must carry its own interpretation.** A flag without a
71
+ "so what" transfers anxiety, not information — and a cautious reader responds by doing
72
+ nothing, which is the exact outcome the handoff exists to prevent.
73
+
74
+ ## How to test a handoff (the cold-read protocol)
75
+
76
+ Do not self-assess a handoff. Dispatch a fresh agent whose ONLY artifact is the document
77
+ path, tell it to open nothing else, and score it. Brief it and the test is worthless.
78
+
79
+ Run the same fixed question set at **two model tiers**, because they detect different
80
+ defects:
81
+
82
+ | Tier | Detects | Why |
83
+ |---|---|---|
84
+ | **Weakest available** (Haiku) | Unresolved implications | It will not infer past an ambiguity; low confidence with correct answers pinpoints class 6/7 gaps |
85
+ | **Strongest available** (Opus) | Internal contradictions | It cross-references sections and finds claims that cannot both be true |
86
+
87
+ Ask for `CONFIDENCE (1-5)`, `GAPS`, and `CONTRADICTIONS` explicitly, and instruct the
88
+ agent to answer "NOT IN DOC" rather than guess — otherwise general knowledge silently
89
+ fills holes and the doc scores better than it deserves. Tell it to be harsh; a comfortable
90
+ review is a useless one.
91
+
92
+ Question set that surfaced every defect found (adapt the nouns, keep the shapes): what is
93
+ this product and for whom · what platforms and storage · what was just done and is it
94
+ finished · what builds/tests it and what must you never run · what is <the largest open
95
+ item> and is it done · name three forbidden things · how many queue items and which are
96
+ audit debt · did this ship through a normal gate · what decision is owed, who owns it,
97
+ what decides it · which field proves no new run started and which must you not read · why
98
+ is this record untrustworthy · what is the trap when searching for callers · are you
99
+ authorized to start · what must you run after adding a file · who wrote this record and
100
+ when relative to the work.
101
+
102
+ **Expect the strong tier to challenge your evidence, not just your prose.** On the final
103
+ round Opus accepted every fact and still flagged that a "three platforms build clean"
104
+ claim was overstated — the third platform's target excluded the directory the changed
105
+ files lived in, so its green proved the change could not break it, not that it was
106
+ verified. That correction came from the review, not from the author.
107
+
21
108
  ## What it composes
22
109
 
23
- The handoff doc has eight fixed sections (always the same order; absent data renders as "n/a"):
110
+ Nine fixed sections (always the same order; absent data renders as "n/a"):
24
111
 
25
112
  | # | Section | Source |
26
113
  |---|---------|--------|
27
- | 1 | North Star (intent) | `.build-loop/intent.md` |
28
- | 2 | Current Goal | `.build-loop/goal.md` |
114
+ | 1 | North Star (intent) — incl. Orientation + glossary | `.build-loop/intent.md` (inlined WHOLE) |
115
+ | 2 | Current Goal — incl. open decisions | `.build-loop/goal.md` (inlined WHOLE) |
29
116
  | 3 | Phase + Live Checklist | `.build-loop/state.json` (execution + runs[]) |
30
- | 4 | Git State | `git status` + `git log` |
117
+ | 4 | Git State | `git status` + `git log` (working-tree listing capped — see below) |
31
118
  | 5 | Queues | `followup/`, `backlog/`, `ux-queue/`, `issues/` |
32
119
  | 6 | Gotchas / Lessons | `.build-loop/feedback.md` |
33
120
  | 7 | Last Run Summary | `state.json.runs[-1]` |
34
- | 8 | Resume Instructions | generated (workdir, phase context) |
121
+ | 8 | Landmines | detected (stale `.current-run-id`, `.push-hold`, crash marker, ) |
122
+ | 9 | Resume Instructions | generated (workdir, phase context) |
123
+
124
+ ### §4 working-tree listing is capped at 40 paths
125
+
126
+ Above 40 dirty files, §4 lists the paths in the **smallest** top-level groups and
127
+ collapses the rest into a count-by-top-level-path table, then prints a
128
+ `git add -A` warning. Reproduced 2026-07-25 on atomize-ai: ~2,981 pre-existing
129
+ dirty tooling files (`.navgator/`, `.build-loop/`, `.bookmark/`, `.rally/`) made §4
130
+ 2,999 of the document's 3,214 lines — 93% — burying North Star, Goal, Landmines,
131
+ and Resume Instructions past 3,000 lines of cache paths. A handoff exists for when
132
+ context is scarce, so paying 3,000 lines for it inverts the tool's purpose.
133
+
134
+ The cap is on **enumeration only**: every dirty file is still counted in the table.
135
+ Smallest-group-first is what keeps it useful — `git status` sorts by path, so a
136
+ head-40 would have emitted 40 `.bookmark/` cache paths and cut every source edit.
137
+
138
+ `--full-git` restores the raw per-file listing when it is genuinely wanted.
139
+
140
+ ## Delivery is not the same as writing it
141
+
142
+ A handoff that exists only on disk has not been handed off. Two things are required
143
+ every time, and neither is optional because the file was committed.
144
+
145
+ **1. State the absolute path in the reply.** Not "handoff written", not a repo-relative
146
+ path. The person picking this up is in a different terminal, often a different repo, and
147
+ frequently is not a person. Print the full path:
148
+
149
+ ```
150
+ /Users/<user>/dev/git-folder/<repo>/HANDOFF.md
151
+ ```
152
+
153
+ **2. Post it to Rally Point.** A handoff invisible to the coordination substrate cannot be
154
+ picked up by a peer agent, which is the case it most exists for.
155
+
156
+ ```bash
157
+ rally say fact --tool "<your-tool-id>" \
158
+ --subject "handoff: <one line, what state the work is in>" \
159
+ --evidence "file:<absolute path>" --json
160
+ ```
161
+
162
+ The same applies to a retrospective. Those land in the memory store rather than the repo,
163
+ so they are unfindable from the working directory unless the path is stated.
164
+
165
+ **Why this is a rule and not a preference.** The seven content classes below exist so a
166
+ cold reader can resume without the author. All of that work is wasted if the reader cannot
167
+ locate the document. The most common failure is not a thin handoff; it is a good handoff
168
+ nobody found.
35
169
 
36
170
  ## Usage — no flag (emit doc)
37
171
 
@@ -45,7 +179,27 @@ Prints the handoff doc to stdout. Pipe to a file or share directly.
45
179
  python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --output handoff.md
46
180
  ```
47
181
 
48
- Writes to a file instead.
182
+ Writes to a file instead, and prints where it landed **plus a browsable URL**:
183
+
184
+ ```
185
+ Handoff written to /path/projects/<proj>/handoffs/2026-08-25-lane.md
186
+ url: https://github.com/<owner>/<repo>/blob/main/projects/<proj>/handoffs/2026-08-25-lane.md
187
+ (live)
188
+ ```
189
+
190
+ A handoff is written so someone ELSE can pick the work up, and an absolute local
191
+ path names a file on one machine — useless to a peer session, a ticket, or
192
+ another host. The URL is the part that travels.
193
+
194
+ Two states are distinguished, because a link to unpushed content is worse than
195
+ no link: `(live)` means the upstream holds this exact content; `(NOT PUSHED YET
196
+ — commit and push before sharing)` means it does not. An untracked file reports
197
+ NOT PUSHED, not live — `git diff @{u} -- <path>` exits 0 for a path git has
198
+ never seen, so the check confirms the upstream actually has the path first.
199
+
200
+ When no github/gitlab origin resolves for that path, it prints the `file://` URI
201
+ and says the doc is local-only. It never guesses a URL: a wrong link sends the
202
+ reader to a 404 or to a stale copy of a different file.
49
203
 
50
204
  ```bash
51
205
  python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --json
@@ -53,6 +207,13 @@ python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --json
53
207
 
54
208
  Emits a JSON envelope `{document, sources, errors, ts}` for programmatic use.
55
209
 
210
+ ```bash
211
+ python3 ${CLAUDE_PLUGIN_ROOT}/scripts/handoff --workdir "$PWD" --full-git
212
+ ```
213
+
214
+ Lists every dirty path in §4 instead of capping at 40 and summarizing the rest.
215
+ Combines with any of the flags above.
216
+
56
217
  ## Usage — `--launch` (fresh session)
57
218
 
58
219
  The command surface (`/build-loop:compose-handoff --launch`) handles this. The skill provides
@@ -84,7 +245,7 @@ new session starts.
84
245
  `scripts/handoff/__main__.py` reads `.build-loop/` using only `json`, `pathlib`,
85
246
  and `subprocess` from the standard library — no new dependencies. It does NOT
86
247
  re-implement state parsing; it reads `state.json` directly at the same paths the
87
- orchestrator already writes. Tests: `scripts/handoff/test_handoff.py` (13 tests).
248
+ orchestrator already writes. Tests: `scripts/handoff/test_handoff.py`.
88
249
 
89
250
  ## Host-agnostic design
90
251
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: build-loop:ibr-bridge
3
- description: Routing bridge to the IBR plugin for UI visual verification. Build-loop prefers IBR `scan` / `scan_macos` when the IBR plugin is installed; otherwise falls back to build-loop's own `native-ax-driver` / `ui-validator`. Never falls back to nm/strings. NOT for API registration (use `api-registry-bridge`) or PRD grounding (use `prd-bridge`).
3
+ description: Route rendered UI design updates, comparisons, and audits to the IBR plugin when installed, falling back to build-loop's own driver otherwise. Use when a build changes, compares, or audits a rendered UI and that change needs visual evidence before it can close. Not for registering a new API (use `api-registry-bridge`) or PRD grounding (use `prd-bridge`).
4
4
  version: 0.3.0
5
5
  user-invocable: false
6
6
  ---
@@ -19,6 +19,7 @@ At Phase 1 Assess, the orchestrator reads `state.json.availablePlugins.ibr` (pop
19
19
 
20
20
  | Build-loop need | Primary (when `availablePlugins.ibr == true`) | Fallback (when IBR absent) |
21
21
  |---|---|---|
22
+ | UI design update / comparison / audit | IBR `snapshot` + `compare`, `match`, or the narrowest platform `scan` | `ui-validator` / native AX / simulator or browser screenshots + static scanner |
22
23
  | Web UI verify | IBR `scan` against the dev-server route | `ui-validator` agent + browser/screenshot tooling |
23
24
  | macOS UI verify | IBR `scan_macos` against the running `.app` | `native-ax-driver` (`skills/native-ax-driver/`) pid-anchored AX-tree + screenshot |
24
25
  | iOS sim UI verify | IBR `scan` against the booted sim (when supported) | `xcrun simctl io booted screenshot` + `idb ui` for interaction |
@@ -61,6 +62,8 @@ The bridge returns results in the same envelope shape regardless of which route
61
62
 
62
63
  The orchestrator forwards `verification` and `artifacts` to the BL-1 gate envelope as the chunk's `verification` and `evidence_paths` fields.
63
64
 
65
+ The binding automatic trigger and viewer boundary are defined once in `../../references/ibr-ui-verification-policy.md`.
66
+
64
67
  ## Status: 0.3.0 (2026-06-04)
65
68
 
66
69
  - Reversed the explicit-only default. IBR is now the preferred primary when present; build-loop-owned `native-ax-driver` / `ui-validator` is the always-available fallback.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: knowledge
3
- description: Canonical build-loop-memory framework. Use when the user asks to "record a decision", "log an ADR", "write an MADR", "capture this choice", "regenerate the decisions index", "validate knowledge", "migrate feedback to decisions", or "recall <topic>". ALSO the read-only review surface (review mode): "review my decisions", "show review queue", "check decision rot", "list open conflicts", "find stale procedures", or `/knowledge:review`. Active durable writes go to `~/dev/git-folder/build-loop-memory`; legacy `.episodic/` paths are migration/archive inputs only.
4
- user-invocable: true
3
+ description: Canonical build-loop-memory framework. Use when the user asks to "record a decision", "log an ADR", "write an MADR", "capture this choice", "regenerate the decisions index", "validate knowledge", "migrate feedback to decisions", or "recall <topic>". ALSO the read-only review surface (review mode): "review my decisions", "show review queue", "check decision rot", "list open conflicts", "find stale procedures", or `/knowledge:review`. Active durable writes go to the resolved build-loop-memory root (override via `$BUILD_LOOP_MEMORY_ROOT`; per-user default otherwise — see `scripts/_paths.py:memory_store_root()`); legacy `.episodic/` paths are migration/archive inputs only.
4
+ user-invocable: false
5
5
  when_to_use: |
6
6
  - User wants to record a substantive choice with rationale
7
7
  - User asks to regenerate canonical decision indexes or validate decision files
@@ -12,7 +12,7 @@ when_to_use: |
12
12
  - Auto-capture (Phase 3) and consolidation (Phase 4) are NOT yet
13
13
  implemented; this skill covers Phase 1 (manual + scripted) and
14
14
  Phase 2 (Postgres + pgvector retrieval) only.
15
- namespace: ~/dev/git-folder/build-loop-memory/ (canonical), .build-loop/events.jsonl (repo-local runtime), legacy .episodic/ (migration/archive only)
15
+ namespace: resolved build-loop-memory root ($BUILD_LOOP_MEMORY_ROOT override, else per-user default — canonical), .build-loop/events.jsonl (repo-local runtime), legacy .episodic/ (migration/archive only)
16
16
  ---
17
17
 
18
18
  <!-- SPDX-FileCopyrightText: 2025-2026 Tyrone Ross, Jr <46267523+tyroneross@users.noreply.github.com> | SPDX-License-Identifier: Apache-2.0 -->
@@ -20,15 +20,16 @@ namespace: ~/dev/git-folder/build-loop-memory/ (canonical), .build-loop/events.j
20
20
  # Knowledge — Canonical Build-Loop Memory (Phases 1 + 2)
21
21
 
22
22
  This skill is the entrypoint for the four-memory-types framework. The
23
- full design lives at
24
- `~/dev/research/topics/repo-episodic-memory-framework/repo-episodic-memory-framework.md`
25
- (see §11–§14 for the four-memory-type taxonomy, extraction pipeline,
26
- and Postgres schema). Read it before making structural changes.
23
+ full design lives in "Repo Episodic Memory Framework" (private research
24
+ note — substance summarized here; see §11–§14 for the four-memory-type
25
+ taxonomy, extraction pipeline, and Postgres schema). This skill's
26
+ `scripts/` are the executable source of truth for structural changes;
27
+ the research note is background reading, not a required dependency.
27
28
 
28
29
  ## What lives where
29
30
 
30
31
  ```
31
- ~/dev/git-folder/build-loop-memory/
32
+ <build-loop-memory root>/ # resolved by scripts/_paths.py:memory_store_root()
32
33
  ├── projects/<project>/decisions/ # canonical MADR decisions + INDEX.md
33
34
  ├── projects/<project>/lessons/ # project-specific lessons
34
35
  ├── lessons/ # cross-project lessons
@@ -72,7 +73,7 @@ relevant prior memory rather than reading INDEX.md wholesale. See
72
73
  2. Run `write_decision.py` with the required flags. The script:
73
74
  - Allocates the next sequential ID (zero-padded 4-digit).
74
75
  - Writes the MADR to
75
- `~/dev/git-folder/build-loop-memory/projects/<project>/decisions/<canonical-id>.md` using
76
+ `<build-loop-memory root>/projects/<project>/decisions/<canonical-id>.md` (root resolved per `scripts/_paths.py:memory_store_root()`) using
76
77
  `skills/knowledge/templates/madr-minimal.md` as the body
77
78
  scaffold (filled from CLI flags).
78
79
  - Regenerates the canonical decisions `INDEX.md`.
@@ -106,12 +107,23 @@ the current version.
106
107
  `write_decision.py` calls the validator as a pre-write gate; you can
107
108
  also run it standalone over the whole tree.
108
109
 
109
- ## Postgres connection
110
+ ## Postgres connection (optional — Phase 2 only)
110
111
 
111
- DB-side scripts read connection from
112
- `~/.config/agent-memory/connection.env` (DATABASE_URL=
113
- postgresql://tyroneross@localhost:5432/agent_memory). Per-project schema:
114
- this repo uses `build_loop_memory`. The schema name is configurable via
112
+ The entire Postgres/pgvector/Ollama-embedding stack is **optional**. Phase 1
113
+ (file-only decisions) works with zero DB configuration; `write_decision.py`'s
114
+ DB write is best-effort and never fails the file write (see "DB errors do NOT
115
+ fail the file write" above). Skip this section entirely if you only want
116
+ Phase 1.
117
+
118
+ When you do want Phase 2 retrieval, DB-side scripts resolve a connection
119
+ string via `scripts/_db_url.py:resolve_db_url()`, in order:
120
+
121
+ 1. `$BUILD_LOOP_DATABASE_URL`
122
+ 2. `$DATABASE_URL`
123
+ 3. `~/.config/agent-memory/connection.env` (`DATABASE_URL=postgresql://$USER@localhost:5432/agent_memory` is a reasonable local default to put there)
124
+
125
+ Per-project schema defaults to `$AGENT_MEMORY_SCHEMA` or `personal_memory`;
126
+ this repo uses `build_loop_memory`. The schema name is also configurable via
115
127
  the `--schema` flag on each DB-aware script.
116
128
 
117
129
  ## Review mode (read-only)
@@ -7,9 +7,8 @@
7
7
  framework (Working / Episodic / Semantic / Procedural). It does NOT modify
8
8
  any data; it lists what humans need to decide on.
9
9
 
10
- The full design lives at
11
- `~/dev/research/topics/repo-episodic-memory-framework/repo-episodic-memory-framework.md`
12
- (see §11–§14).
10
+ The full design lives in "Repo Episodic Memory Framework" (private
11
+ research note — substance summarized here; see §11–§14).
13
12
 
14
13
  Companion scripts: `scripts/knowledge_review.py` (aggregates all four sections into a
15
14
  markdown report), `scripts/detect_decision_rot.py` (rot section),
@@ -15,7 +15,7 @@ project: project-name
15
15
  tool: claude-code
16
16
  model: claude-opus-4-7
17
17
  task_category: feature
18
- author: tyroneross
18
+ author: your-username
19
19
  source: manual
20
20
  related_runs: []
21
21
  related_decisions: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mcp-builder
3
- description: Use when building, packaging, or debugging an MCP server, adding MCP tools to a plugin, or working on .mcp.json, transport, or bundling. Pair with plugin-builder when the plugin exposes MCP tools.
3
+ description: Build, package, or debug an MCP server and its tools. Use when the user is adding MCP tools, or working on `.mcp.json`, transport, or bundling. Not for scaffolding the plugin around it (use `plugin-builder`; pair the two when a plugin exposes MCP tools).
4
4
  user-invocable: false
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: model-bakeoff
3
- description: Use to run a controlled multi-model bake-off — have N models (e.g. Opus 4.8, Sonnet 5.0, GPT-5.5) each independently diagnose→plan→execute the SAME bounded change in isolated git worktrees, then deterministically re-score their committed code on a fresh server, merge the best-of (grafting distinct wins from the others), and repeat per change. Triggers on "bake-off", "compare models on this task", "which model is best at", "run the same change across models and score them". NOT for choosing a model tier/segment for one agent use `model-tiering`.
3
+ description: Run the same bounded change across multiple models in parallel, then deterministically score and merge the best result. Use when the user says "bake-off", "compare models on this task", "which model is best at", or "A/B test these models". Not for picking a single model tier for one agent (use `model-tiering`).
4
4
  user-invocable: false
5
5
  ---
6
6
 
@@ -8,22 +8,51 @@ user-invocable: false
8
8
 
9
9
  Run a fair, evidence-based competition where several models each solve the *same* change end-to-end, then merge the best result. One orchestrator (this session) coordinates; contestants are single agents (measure the model, not a multi-agent loop). Repeat per change, accumulating merges on one experiment branch.
10
10
 
11
+ ## Validation contract (define BEFORE any dispatch)
12
+
13
+ Fix the grading before running — a metric invented after seeing outputs bends to them.
14
+
15
+ 1. **Metric + rubric + judge, up front.** Write the exact success metric, the rubric, and the pass/fail threshold BEFORE dispatch. Name the **independent judge** (a non-contestant model, e.g. Fable) for subjective dims. No post-hoc scoring.
16
+ 2. **Reproduce the baseline FAILURE first.** To prove an intervention (profile/scaffold/fix) makes a model succeed, first REPRODUCE the failure deterministically. n=1 anecdotal failures don't generalize — a task where the control already passes has no fix to validate. (2026-07-09: "kimi fails multi-crate Rust" did NOT reproduce on synthetic 2-crate tasks — the control passed both a 3-file crate and a 2-crate cross-crate task via the default profile; the original sandbox-dogfood failure was task-specific, not a general ceiling.)
17
+ 3. **Task at the failure boundary.** If every arm passes, the task is too easy → no signal to separate arms. Calibrate difficulty until the control fails.
18
+ 4. **A control arm.** Always include the default-profile / no-intervention (and, for harness work, the no-harness one-shot) arm to isolate the intervention's marginal value.
19
+
20
+ ## Model + thinking identity (mandatory data contract)
21
+
22
+ A benchmark measures a **model at a thinking level and mode**, not a model name alone. Use Benchmark Lab's existing `abc-comparison/v2` artifact; do not create a Build Loop-only benchmark schema. Every arm adds:
23
+
24
+ - `model`: exact provider model/version, separate from the host or harness.
25
+ - `effort`: exact effective provider/runtime label, or `unknown`.
26
+ - `effort_normalized`: `none|minimal|low|medium|high|xhigh|max|ultra|unknown`.
27
+ - `effort_provenance`: `source_document|experiment_config|runtime_log|unknown`.
28
+ - `effort_evidence`: source page/table/footnote for published data, or exact config/command/log evidence for our test.
29
+ - `mode`: `single_agent|multi_agent|adaptive|unknown`.
30
+
31
+ These are additive arm fields on the canonical artifact, following the existing field-observation contract. Benchmark Lab owns validation, normalization, and aggregation, but its current converter does not retain these additive fields. Preserve the raw artifact as source evidence until that Lab-owned extension lands; ingest acceptance alone is not proof of retention. Never infer effort from a model default or translate provider labels without evidence. If a source omits row-level effort, record `unknown`, cite the omission, and mark the comparison effort-confounded/directional. `ultra` or another multi-agent mode is a distinct treatment arm, never a higher single-agent score.
32
+
33
+ ## When scoring: check the CODE and the OUTPUT, and distrust the rig
34
+
35
+ - **Check the produced code AND its oracle output — never "it ran."** Read the code; run the oracle; parse the RIGHT signal. (2026-07-09: an auto-grep matched the lib unit-test line "0 passed" and mislabeled a 2/5-passing control as FAIL; multi-binary `cargo test` needs pass/fail SUMMED across binaries, not first-match. Always confirm the specific test binary that carries the assertions.)
36
+ - **Separate the measurement apparatus from the thing measured.** The **rig** = everything that is NOT the model or the code under test: the grading script, the exact command + flags you invoke, the tooling environment (installed binaries, language toolchain, PATH), and the fixtures/scaffold. A **rig bug** is a defect in that apparatus that yields a false pass or a false fail wrongly blamed on the model. Before trusting any `0` or any FAIL, confirm the rig produced a *valid run*: the command parsed, the tools were present, the oracle actually executed against real output. Three rig bugs on 2026-07-08, each first mis-scored as a model failure: (a) `pytest` absent from the grading env → a contestant looped on a false-negative it could never clear; (b) `harness swarm --segments` expects a manifest FILE, not an integer count → the treatment arm produced 0 files twice on a malformed command; (c) an auto-grep read the wrong `cargo test` binary's summary line → a 2-of-5-passing run was labeled FAIL. None were the model; all were the rig.
37
+
11
38
  ## Roster & dispatch (verified handles)
12
39
  - Opus 4.8 → `Agent(model: "opus")`; Sonnet 5.0 → `Agent(model: "sonnet")` (`sonnet` = latest, NOT 4.x — older Sonnets have no clean subagent handle).
13
- - GPT-5.5Codex MCP `mcp__codex__codex` with `model: "gpt-5.5"`, `config: {model_reasoning_effort: "xhigh", sandbox_workspace_write:{network_access:true}}`, `approval-policy: "never"`, `sandbox: "workspace-write"`. (Check `~/.codex/config.toml` for the exact model id; `-codex` suffixes fail on ChatGPT-account Codex.)
40
+ - Codex/OpenAIread the exact model id and requested effort from the experiment manifest; pass both explicitly (for example `model: "gpt-5.6-terra"`, `config: {model_reasoning_effort: "high"}`). Capture the effective runtime config in the arm log; do not rely on `~/.codex/config.toml` defaults or guess `-codex` suffixes.
41
+ - Claude effort → use a host surface that can set the requested effort. If the available dispatch primitive cannot set it, record the effective value as `unknown`; do not label the arm `xhigh` from intent alone.
14
42
  - Independent judge: prefer a NON-contestant model (e.g. Fable). If unavailable, the orchestrator scores subjective dims with over-cited evidence + a stated caveat, and leans on deterministic dims.
15
43
 
16
44
  ## Per-change protocol
17
45
  1. **Baseline:** branch the experiment off clean `origin/main` (not a dirty/active branch). Confirm no concurrent session collides.
18
- 2. **Scaffold** one worktree per contestant off the experiment branch HEAD: `git worktree add -b bakeoff/<Cn>-<model> <path> <branch>`; `npm ci` (or lockfile-equiv) per worktree; copy `.env.local`.
19
- 3. **Brief** (IDENTICAL for all): give the *symptom* + acceptance criteria + a fair equal entrypoint pointer WITHHOLD the diagnosis (that's what's scored). Add repo guardrails (see below).
20
- 4. **Dispatch** all contestants in parallel (Agent arms `run_in_background: true`; Codex arm blocks the turnfine, the others run concurrently).
21
- 5. **Commit stranded Codex work:** Codex's sandbox usually cannot write an external worktree's `.git` (`index.lock: Operation not permitted`). The orchestrator commits it: `git -C <worktree> add -A && git commit`. (RESULT.md is often gitignored `git add -f`.)
22
- 6. **Score deterministically** (don't trust self-reports re-run each contestant's committed code):
46
+ 2. **Manifest:** pre-register each arm's exact model/version, requested thinking level, mode, dispatch surface, and evidence path in the run manifest. Pre-create the `abc-comparison/v2` arm fields above; update `effort` and `effort_evidence` from effective runtime evidence before scoring.
47
+ 3. **Scaffold** one worktree per contestant off the experiment branch HEAD: `git worktree add -b bakeoff/<Cn>-<model> <path> <branch>`; `npm ci` (or lockfile-equiv) per worktree; copy `.env.local`.
48
+ 4. **Brief** (IDENTICAL for all): give the *symptom* + acceptance criteria + a fair equal entrypoint pointerWITHHOLD the diagnosis (that's what's scored). Add repo guardrails (see below).
49
+ 5. **Dispatch** all contestants in parallel (Agent arms `run_in_background: true`; Codex arm blocks the turn fine, the others run concurrently). Write the effective thinking setting and its runtime evidence back to the run manifest and observation arm before scoring.
50
+ 6. **Commit stranded Codex work:** Codex's sandbox usually cannot write an external worktree's `.git` (`index.lock: Operation not permitted`). The orchestrator commits it: `git -C <worktree> add -A && git commit`. (RESULT.md is often gitignored → `git add -f`.)
51
+ 7. **Score deterministically** (don't trust self-reports — re-run each contestant's committed code):
23
52
  - Objective dims computed in code: typecheck, build, test, betterer, + the change-specific success criterion run on a fresh server. Weight these highest.
24
53
  - Subjective dims (diagnosis depth, plan, code quality, intent fidelity) by the judge reading diffs + captured outputs.
25
- 7. **Scorecard** (rubric below) → **merge** best base onto the experiment branch, **grafting** distinct wins from the others (each graft: fixes a real gap the winner has, is isolable from the loser's *harmful* parts, verified by re-running). Document graft rationale.
26
- 8. **Re-verify the merged result**, regenerate coverage, commit. Then next change.
54
+ 8. **Scorecard** (rubric below) → **merge** best base onto the experiment branch, **grafting** distinct wins from the others (each graft: fixes a real gap the winner has, is isolable from the loser's *harmful* parts, verified by re-running). Document graft rationale.
55
+ 9. **Re-verify the merged result**, regenerate coverage, validate the canonical observation through Benchmark Lab when available, commit. Then next change.
27
56
 
28
57
  ## Rubric (max 50; tune weights per task)
29
58
  success-criteria attainment ×3 (objective) · build/typecheck/test/betterer ×2 (objective) · diagnosis accuracy ×2 · plan quality ×1 · code quality+scope ×1 · intent fidelity ×1. Objective dims dominate; the LLM judge is confined to subjective dims.
@@ -41,4 +70,13 @@ success-criteria attainment ×3 (objective) · build/typecheck/test/betterer ×2
41
70
  Work ONLY in your worktree; no edits outside it; no deploy/push; no `--no-verify`; no DDL against the shared DB; unique per-model test-user id + id-scoped cleanup; verify by RUNNING (name the exact verification mechanism: curl the endpoint, CDP virtual authenticator for WebAuthn, function-level test for cleaners, screenshots for UI).
42
71
 
43
72
  ## Output
44
- Per stage: a `SCORECARD.md` (rubric table + verdict + merge/graft rationale). At the end: a consolidated `RESULTS.md` (cross-stage scoreboard, per-model performance pattern, where multi-model merge beat any single model, scoring-integrity caveats).
73
+ Per stage: a `SCORECARD.md` (rubric table + verdict + merge/graft rationale). At the end:
74
+
75
+ - `RESULTS.md`: cross-stage scoreboard, each arm labeled `model_id @ thinking level/mode`, per-model performance pattern, where multi-model merge beat any single model, and scoring-integrity caveats.
76
+ - `OBSERVATION.json`: canonical `abc-comparison/v2` rounds with each arm's exact model,
77
+ thinking fields, result metrics, and provenance. This is the machine-readable source of
78
+ truth; Benchmark Lab is the sole normalization and aggregation owner.
79
+
80
+ Preserve the raw JSON whether or not Benchmark Lab ingestion is available. Until the Lab
81
+ converter and storage retain these fields, do not use successful ingest as evidence that
82
+ thinking provenance survived, and do not aggregate results across thinking settings.