@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,6 +1,6 @@
1
1
  ---
2
2
  name: build-loop:architecture-review
3
- description: Use when Phase 4 Review covers a build that crosses 2+ layers, or the user asks for an "architectural review" or "full integrity check". Covers system flow, component connections, documentation drift, and lessons; heavy-weight, native copy from NavGator.
3
+ description: Full architectural integrity pass system flow, connections, documentation drift, and lessons in one report. Use when the user asks for "an architectural review" or "full integrity check" on a build crossing 2+ layers. Not for a single violation/orphan pass (use `architecture-rules`) this is the heavier superset.
4
4
  version: 0.1.0
5
5
  user-invocable: false
6
6
  source: NavGator/skills/code-review/SKILL.md
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: build-loop:architecture-rules
3
- description: Use when Phase 4 Review checks architectural integrity, the user asks to "check for violations" or "find circular deps", or before a release. Detects orphans, layer violations, circular dependencies, and hotspots; build-loop's native rules engine from NavGator.
3
+ description: Detect structural rule violations layer violations, circular dependencies, and connection hotspots. Use when the user asks to "check for violations" or "find circular deps". Not for code with zero callers (use `architecture-dead`) or a full narrative review (use `architecture-review`).
4
4
  version: 0.1.0
5
5
  user-invocable: false
6
6
  source: NavGator/commands/test.md
@@ -11,7 +11,7 @@ source_hash: 4a967c08ff3d7cddd408e7caefcd07b09e8931bcaccf9ea70c0f5aa94349e0d1
11
11
 
12
12
  # Architecture Rules / Violation Check
13
13
 
14
- Run NavGator's rules engine to detect architectural violations using the `mcp__plugin_navgator__rules` MCP tool. Classifies findings as blocking (circular dependency, layer violation, database isolation breach, frontend-direct-DB at error level) vs warning (hotspot, high-fan-out, orphan).
14
+ Run NavGator's rules engine to detect architectural violations using the `mcp__plugin_navgator__rules` MCP tool. Classifies findings as blocking (circular dependency, layer violation, database isolation breach, frontend-direct-DB at error level) vs warning (hotspot, high-fan-out, orphan, shallow-module).
15
15
 
16
16
  > **Divergence note**: NavGator has no discrete SKILL.md for rules. The canonical wrapper is `commands/test.md`, which orchestrates `navgator rules` + `navgator dead` + pipeline traces. This skill extracts the rules-only workflow.
17
17
 
@@ -34,7 +34,7 @@ Run NavGator's rules engine to detect architectural violations using the `mcp__p
34
34
  | Severity | Categories |
35
35
  |----------|-----------|
36
36
  | **Blocking** | `circular-dependency`, `layer-violation`, `database-isolation`, `frontend-direct-db` (error level) |
37
- | **Warning** | `hotspot`, `high-fan-out`, `orphan` |
37
+ | **Warning** | `hotspot`, `high-fan-out`, `orphan`, `shallow-module` (thin pass-through: high fan-out, low fan-in — advisory design guidance, never blocks) |
38
38
 
39
39
  3. Diff against the Phase 1 baseline if present in `.build-loop/state.json.architecture.rules.baseline`
40
40
  4. Flag recurrences against `.navgator/lessons/lessons.json` (lessons with matching `signature`)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: build-loop:architecture-scan
3
- description: Use when Phase 1 Assess detects stale architecture state, the user asks for an "architecture scan", or before blast-radius analysis. Refreshes Build Loop's native component and connection data in `.build-loop/architecture/`, with NavGator reserved for escalation-only capabilities.
3
+ description: Refresh build-loop's native component/connection data before any other architecture check runs. Use when the user asks for "an architecture scan" or Phase 1 Assess finds the data stale. Not for finding violations or dead code `architecture-rules`/`architecture-dead` need this data first.
4
4
  version: 0.1.0
5
5
  user-invocable: false
6
6
  source: NavGator/skills/architecture-scan/SKILL.md
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: build-loop:architecture-trace
3
- description: Use when the user asks to "trace data flow", "follow this request end-to-end", or "show how X reaches Y". Follows a component's connections from input to output across the architecture; build-loop's native trace copied from NavGator's CLI.
3
+ description: Follow one component's connections end-to-end, input to output. Use when the user asks to "trace data flow", "follow this request end-to-end", or "show how X reaches Y".
4
4
  version: 0.1.0
5
5
  user-invocable: false
6
6
  source: NavGator/commands/trace.md
@@ -8,7 +8,7 @@ user-invocable: false
8
8
 
9
9
  # Attribution Standard
10
10
 
11
- Four overlapping mechanisms make stripping attribution either illegal, mechanically tedious, or detectable. Each survives a different removal pattern. The research backing this skill is at `~/dev/research/apache-2.0-attribution-watermarking-2026-05-22.md`.
11
+ Four overlapping mechanisms make stripping attribution either illegal, mechanically tedious, or detectable. Each survives a different removal pattern. The research backing this skill is "Apache-2.0 Attribution & Watermarking" (private research note, 2026-05-22 — substance summarized here).
12
12
 
13
13
  ## The four layers
14
14
 
@@ -21,9 +21,9 @@ Four overlapping mechanisms make stripping attribution either illegal, mechanica
21
21
 
22
22
  ## Canonical strings
23
23
 
24
- Apply identically wherever they appear. Memorise these — do not paraphrase.
24
+ **These are build-loop's own values** (this repo's actual copyright holder) — use them verbatim only when stamping attribution onto build-loop itself. **Applying this skill to any OTHER repo requires the target repo's own name/email/years**, not these: derive from `git config user.name` / `user.email` in that repo, an existing LICENSE/NOTICE holder if one is already present, or ask the user. The `attribution_stamp.py` script's `--name`/`--email`/`--years` flags default to the build-loop values below if omitted **always pass all three explicitly for a non-build-loop repo**; never invoke the script bare against someone else's repo.
25
25
 
26
- | Field | Value |
26
+ | Field | Value (build-loop's own) |
27
27
  |---|---|
28
28
  | Copyright holder | `Tyrone Ross, Jr` |
29
29
  | SPDX email tail | `<46267523+tyroneross@users.noreply.github.com>` |
@@ -57,9 +57,9 @@ For Python-heavy repos with no `src/` directory (like agent-rally-point), pass t
57
57
  ```bash
58
58
  python scripts/attribution_stamp.py \
59
59
  --repo <path-to-repo> \
60
- --name "Tyrone Ross, Jr" \
61
- --email "46267523+tyroneross@users.noreply.github.com" \
62
- --years 2025-2026 \
60
+ --name "<target repo's copyright holder — NOT build-loop's, unless stamping build-loop itself>" \
61
+ --email "<target repo owner's email/SPDX tail>" \
62
+ --years <target repo's applicable year range> \
63
63
  --canary-files <path1> <path2> \
64
64
  [--paths <override-paths...>] \
65
65
  [--restamp]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: auto-decision-capture
3
- description: Project-scoped skill for proactive in-session decision capture. Provides Claude the signal taxonomy, confidence ladder, overwrite rules, and the three extraction prompts (SPO triplet / MADR-aligned / batch consolidation) so substantive decisions land in build-loop-memory without manual triggering. Use when the user makes a substantive choice, confirms a proposal, or implies a constraint with textual evidence.
3
+ description: Passively capture a substantive decision the user just made, in real time, into build-loop-memory. Fires automatically when the user confirms a choice or states a constraint not user-invoked. Not for findings/issues (use `auto-finding-capture`), after-the-fact review (use `recursive-retrospective`), or surfacing an unstated call the user never saw so he can reverse it (use `silent-assumptions`).
4
4
  user-invocable: false
5
5
  when_to_use: |
6
6
  - User issues a direct verbal marker ("let's go with X", "ship it", "use Y")
@@ -231,7 +231,9 @@ python3 scripts/recall.py --query "test framework"
231
231
  ## Extraction prompts (inline reference)
232
232
 
233
233
  These three prompts are the canonical extraction templates from
234
- `~/dev/research/topics/repo-episodic-memory-framework/repo-episodic-memory-framework.md` §12.
234
+ "Repo Episodic Memory Framework" (private research note — substance
235
+ summarized here; see §12), reproduced in full below so this skill has
236
+ no dependency on the note being present.
235
237
  Use them whenever you need to extract structured decisions from
236
238
  unstructured conversation. Keep temperature low (0.1–0.3).
237
239
 
@@ -418,3 +420,30 @@ candidate, and promotes via `scripts/memory_writer.py --type lesson|feedback`
418
420
  complementary: this skill catches what you can see during the turn; the
419
421
  companion catches what the deterministic scanner can find at the end of
420
422
  the session.
423
+
424
+ ## The decision-surface family — one core, several variants
425
+
426
+ Four skills share one job: put a set of calls in front of the user and capture a
427
+ ruling. They differ only in the KIND of call, so they share a core rather than
428
+ forking one — the variant registry (`scripts/decision_surface.py`), the
429
+ interactive page and its save/self-publish plumbing
430
+ (`skills/decision-queue/assets/template.html`), and the durable writer
431
+ (`scripts/write_decision/__main__.py`). **Adding a variant is a registry entry,
432
+ never a fork of the core.**
433
+
434
+ **Choose by the question the user is actually asking, never by name.** An agent
435
+ that picks on name alone reaches for the one it already knows and rebuilds
436
+ something that exists.
437
+
438
+ | Member | Answers | Layer | Does work stop? |
439
+ |---|---|---|---|
440
+ | [`silent-assumptions`](../silent-assumptions/SKILL.md) | "What did you decide without me?" | surface | No — work continued under your default |
441
+ | [`decision-queue`](../decision-queue/SKILL.md) | "What is waiting on me?" | surface | Yes — work has stopped |
442
+ | [`auto-decision-capture`](../auto-decision-capture/SKILL.md) | "What did we already settle, and where is it written down?" | capture | No — fires passively |
443
+ | [`auto-finding-capture`](../auto-finding-capture/SKILL.md) | "What concrete issues has anyone surfaced?" | capture | No — fires passively |
444
+
445
+ `python3 scripts/decision_surface.py` prints this table (`--json` for machines).
446
+ The registry is the one place a member is declared; this table is its prose
447
+ mirror and must match it.
448
+
449
+ **You are here: `auto-decision-capture`.** Reach for `silent-assumptions` when the user never saw the call at all and you need it rendered for a ruling; this skill records a decision the user already made, it does not surface one he did not know about.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: auto-finding-capture
3
- description: Project-scoped skill documenting build-loop's DEFAULT-ON auto-capture of clearly-identified findings/issues into the backlog, regardless of which terminal or agent surfaced them. Provides the detection contract, routing rules, dedup strategy, and the standing rule that agents/critics must NOT gate identified issues behind a user selection. Use when an agent, audit, or critic surfaces a concrete severity-labeled issue, or when reasoning about where findings persist.
3
+ description: Passively capture a concrete, severity-labeled finding or issue into the backlog, in real time. Fires automatically whenever an agent, audit, or critic surfaces one never gated behind a user selection. Not for decisions (use `auto-decision-capture`) or for a judgement call the agent made without asking, which is not a defect and does not belong in the backlog (use `silent-assumptions`).
4
4
  user-invocable: false
5
5
  when_to_use: |
6
6
  - Any agent/audit/critic states a concrete, severity-labeled issue in the session
@@ -117,3 +117,30 @@ An LLM-judged extraction path (for findings stated without a severity label or a
117
117
  finding keyword) is a possible future extension. v1 is deterministic-only by
118
118
  design: it satisfies the acceptance contract, adds no dependency, and keeps
119
119
  precision high. Add the LLM path only against a named, observed miss in this repo.
120
+
121
+ ## The decision-surface family — one core, several variants
122
+
123
+ Four skills share one job: put a set of calls in front of the user and capture a
124
+ ruling. They differ only in the KIND of call, so they share a core rather than
125
+ forking one — the variant registry (`scripts/decision_surface.py`), the
126
+ interactive page and its save/self-publish plumbing
127
+ (`skills/decision-queue/assets/template.html`), and the durable writer
128
+ (`scripts/write_decision/__main__.py`). **Adding a variant is a registry entry,
129
+ never a fork of the core.**
130
+
131
+ **Choose by the question the user is actually asking, never by name.** An agent
132
+ that picks on name alone reaches for the one it already knows and rebuilds
133
+ something that exists.
134
+
135
+ | Member | Answers | Layer | Does work stop? |
136
+ |---|---|---|---|
137
+ | [`silent-assumptions`](../silent-assumptions/SKILL.md) | "What did you decide without me?" | surface | No — work continued under your default |
138
+ | [`decision-queue`](../decision-queue/SKILL.md) | "What is waiting on me?" | surface | Yes — work has stopped |
139
+ | [`auto-decision-capture`](../auto-decision-capture/SKILL.md) | "What did we already settle, and where is it written down?" | capture | No — fires passively |
140
+ | [`auto-finding-capture`](../auto-finding-capture/SKILL.md) | "What concrete issues has anyone surfaced?" | capture | No — fires passively |
141
+
142
+ `python3 scripts/decision_surface.py` prints this table (`--json` for machines).
143
+ The registry is the one place a member is declared; this table is its prose
144
+ mirror and must match it.
145
+
146
+ **You are here: `auto-finding-capture`.** Reach for `silent-assumptions` when the thing to surface is a judgement call YOU made rather than a defect you found; a silent assumption is not a finding and does not belong in the backlog.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: build-loop
3
3
  description: "Orchestrated build loop for multi-step code work. TRIGGER on verb language ('build', 'implement', 'create', 'add', 'ship', 'wire up', 'integrate', 'refactor', 'migrate', 'rewrite', 'replace') OR symptom language ('fix', 'broken', 'doesn't work', 'isn't loading', 'not displaying', 'missing', 'should show', 'needs to', 'make it', 'show this differently') OR any task touching 2+ files, adding/removing an endpoint, crossing an architectural boundary, or attached screenshots of a bug. SKIP one-line edits, pure Q&A, conversational clarifications, status checks, and trivial typos/renames."
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 -->
@@ -26,22 +26,24 @@ Intent → internal mode:
26
26
  - **Root-cause analysis**: blameless RCA producing durable system levers — "root cause", "why did this fail", "post-mortem" (delegates to the `root-cause-analysis` skill).
27
27
  - **Retrospective**: recursive learning retrospective on a build/project — "retrospective", "retro", "what did we learn", "review this project's trajectory" (delegates to `recursive-retrospective`). *Example: "I need a root cause and a retrospective" → run does both.*
28
28
  - **Plan / spec**: "write a plan", "spec this" → spec-writing + plan-verify.
29
+ - **Repository maintenance / closeout**: repository structure, duplicate source, sibling consolidation, build artifacts, branches, worktrees, stashes, or local-main closeout → `repo-maintenance` (`repo-closeout` remains a temporary compatibility alias).
29
30
  - **PRD**: "start a PRD", "spec out a new app" → prd-bridge / start-prd flow.
30
31
  - **Self-improve / promote / knowledge / handoff / memory setup**: "scan recent runs", "promote this experiment", "record a decision", "hand this off", "set up memory" → the matching internal skill (self-improve, promotion-reviewer, knowledge, handoff, setup-memory).
32
+ - **Drain proposals**: "drain proposals", "review the proposal backlog", "what proposals are open" → the `drain-proposals` skill. Interactive and never auto-applies; every item needs an explicit apply / reject / defer.
31
33
 
32
34
  **Design intent:** one command for humans, plain-language routing, everything else agent-invoked within build-loop. If a request doesn't match a mode, run treats it as a Build task or asks one clarifying question — it never makes the user pick a command.
33
35
 
34
36
  ### Parallelism config
35
37
 
36
- Fan-out width is machine-aware. The cap is `effective_max_implementers(workdir)` from `scripts/parallelism.py`: `min(config.parallelism.maxImplementers, cpu_count−2, hard ceiling 12)`, defaulting to 8 when no config is present.
38
+ Fan-out width is supervisor-controlled. `autonomy_supervisor.py fanout` resolves `parallelism.py` capacity, then applies live backpressure. Effective width is the minimum of independent MECE work, project/request capacity, CPU headroom, cloud token budget, shared cross-session capacity, and the absolute ceiling of 150. Default project capacity remains 8.
37
39
 
38
- To raise the cap toward the hard ceiling, set in `.build-loop/config.json`:
40
+ To set a project preference, use `.build-loop/config.json`:
39
41
 
40
42
  ```json
41
43
  { "parallelism": { "maxImplementers": 8 } }
42
44
  ```
43
45
 
44
- Values above 12 are clamped. Values above `cpu_count−2` are clamped to `cpu_count−2` to leave headroom for the orchestrator and host OS.
46
+ The preference never forces that many workers. The supervisor admits only independent chunks supported by live resource and provider telemetry. Values above 150 are clamped; local capacity also preserves two CPU cores for the orchestrator and host OS.
45
47
 
46
48
  ## Autonomous Mode + Per-Commit Mode
47
49
 
@@ -50,7 +52,7 @@ Both are conditional modes — their flag tables, budget/iteration caps, questio
50
52
  - the invocation carries `--long` / `--budget` / `--autonomous=false`, or the goal text matches a long-running keyword (`overnight`, `large-scale`, `multi-day`, …) → **Autonomous Mode** detail;
51
53
  - `state.json.selfRecursive.enabled` is true, or the invocation carries `--per-commit` / `--no-per-commit` → **Per-Commit Mode** detail.
52
54
 
53
- Default behavior with none of those signals: classic single-pass Phase 1–6, 2h budget, autonomous queue-drain on. The end-of-run `issues/` then `backlog/` drain is a SHIPPED DEFAULT (2026-06-04), reversible per-repo via `.build-loop/config.json` `sessionPrefs.continueFromQueues: "never"`.
55
+ Default behavior with none of those signals: classic single-pass Phase 1–6, 2h budget, autonomous execution-queue drain on. Backlog items stay deferred until class-aware promotion at a planning boundary; initiatives and decisions never auto-promote.
54
56
 
55
57
  ## Scope Check
56
58
 
@@ -102,6 +104,30 @@ Self-heal is **both reactive and proactive**. It is not only triggered by errors
102
104
 
103
105
  **Closure test (counterfactual):** a root cause is not closed at "an actionable control." It is closed only when the named lever would have **prevented, detected, or contained THIS exact failure on the real input** (not a hand-constructed one) — a control that exists but stays dormant on the real signal does not count. **Fix strength:** prefer the strongest feasible control — `eliminate → impossible-state → automated-block → detect → contain → decision-support → docs` — over the reflex "add a detect-gate." A dependency you don't own is never "ignore it": isolate / validate / monitor / degrade / escalate / accept-residual-risk explicitly.
104
106
 
107
+ ### Finding disposition — "pre-existing" is not a decision (C-FINDINGS / every_finding_dispositioned)
108
+
109
+ Every finding a run surfaces — lint, type, security, scanner or detector warning, failing or skipped test, deprecation, contract drift — reaches exactly one terminal state before "done": **fixed**, **waived against a durable record**, or **escalated as a new record**. "Pre-existing" says when a defect arrived, never whether it may stand. A report that names a warning and moves on has disclosed it, not dispositioned it; across runs that is how a repo accretes permanent warnings every future run re-observes and re-dismisses at full token cost.
110
+
111
+ Route each finding: **inside** the run's owned files → fix it (C-HEAL self-heal, then C-RCA to root cause). **Outside** them → escalate and record — `scripts/backlog.py new` for this repo, `scripts/file_to_operations_center.py` for any other (`references/keep-going-policy.md` §"Flagged-issue default route") — and report the returned id. Scope bounds what a run FIXES; it never bounds what a run RECORDS, so out-of-scope findings get handed off rather than absorbed. **Genuinely acceptable** → waive, and only against a durable record:
112
+
113
+ ```bash
114
+ python3 scripts/waivers.py check --repo "$PWD" --rule <id> --path <file> [--anchor <sym|line:N>] --json # exit 0 = already waived
115
+ python3 scripts/waivers.py new --repo "$PWD" --rule <id> --path <file> --rationale "..." --authority "user|agent:<name>|decision:<path>" --expires "<date|version|until-file-changes>"
116
+ ```
117
+
118
+ **Before filing a finding that a value is factually WRONG about the world, search (C-CLAIMS/search_before_contradicting_code).**
119
+ Company and product names, rebrands, acquisitions, model IDs, versions, pricing, API
120
+ signatures, deprecations, legal names: all of these change after a model's cutoff, so
121
+ disagreeing with one is a prompt to search, never a finding on its own. Two tells that
122
+ the code is right and the model is stale: the value sits among siblings that are plainly
123
+ correct, or a migration/repair script/test already treats the other value as legacy. A
124
+ search costs seconds; a wrong correction to a world-fact ships a regression and fights
125
+ whatever migration already encodes the new value. Walk the tree in
126
+ `references/research-trigger-policy.md` §"Encounter Trigger" — it fires in ANY phase,
127
+ including runs whose goal carries no research signal, which is exactly when this misses.
128
+
129
+ An agent's own unrecorded "out of scope" or "not mine" is not a waiver, and a user's spoken waiver counts only once written. Every waiver names its expiry; absent one it defaults to re-surfacing the next time its covered file changes. Phase 4G carries the `## Findings disposition` table — one row per finding, its state, and the record it points at.
130
+
105
131
  ### Follow-up auto-drain at chunk boundary
106
132
 
107
133
  A chunk boundary is not a checkpoint. When the orchestrator (or any session under the build-loop skill) is about to write a final report containing a "still-to-do" / "deferred" / "next pass" list of same-shape, same-intent items, route those items through the follow-up queue instead of writing them to the user as prose questions:
@@ -139,6 +165,8 @@ their brief explicitly hands them a bounded implementation task.
139
165
 
140
166
  **Codex permission gate**: generic Build Loop wording such as "parallel-safe groups" is not by itself authorization to spawn Codex subagents. In Codex, spawn workers only when the user explicitly asks for delegation/parallel agent work or uses a command flag such as `--parallel`. Without that signal, keep execution local while preserving the MECE plan.
141
167
 
168
+ **System-access requests**: before a read-only command could trigger a macOS administrator or privacy request, run it through `scripts/system_access_request.py` with a specific `--purpose`, `--scope`, and `--requester`. The wrapper prints that explanation before dispatch, records the first request, and makes identical callers wait. A dispatched denial, cancellation, or failure never triggers an automatic retry; only a process that failed before dispatch is retryable. Use this path for `sfltool dumpbtm`; do not invoke it directly.
169
+
142
170
  **Native agent-rally capabilities**: build-loop vendors `skills/agent-rally-point/SKILL.md` and `skills/agent-rally-watcher/SKILL.md` as embedded mini-plugin skills. Use those skill entrypoints for Rally Point substrate or watcher work before reaching for the standalone repos. The grouped extraction contract is `scripts/rally_point/plugin_boundary.json`; validate it with `python3 scripts/agent_rally.py boundary --repo "$PWD" --check --json`.
143
171
 
144
172
  **Ephemeral plan cleanup**: never delete a `.build-loop/plan*.md` or
@@ -146,7 +174,7 @@ their brief explicitly hands them a bounded implementation task.
146
174
  build-loop-memory via `python3 scripts/archive_project_plan.py <plan> --workdir
147
175
  "$PWD"`. Use `--remove-source` only after the archive write succeeds.
148
176
 
149
- **Coding-host coordination polling gate**: when a build-loop task involves more than one coding host, an active rally-point peer, an active coord file, any `inbox/<tool>.jsonl` message, or any `inbox/all.jsonl` broadcast, the current host must keep a cheap watcher live while work is in flight. Rally/coordination output is routing metadata only, not verification evidence; use it to decide who to coordinate with, then verify code/package/release facts against the authoritative source. Use a stable tool id (`claude_code`, `codex`, `cursor`, etc.). Run a one-shot status check first:
177
+ **Coding-host coordination polling gate**: when a build-loop task involves more than one coding host, an active rally-point peer, an active coord file, any `inbox/<tool>.jsonl` message, or any `inbox/all.jsonl` broadcast, the current host must keep a cheap watcher live while work is in flight. Rally/coordination output is routing metadata only, not verification evidence; use it to decide who to coordinate with, then verify code/package/release facts against the authoritative source. Set `TOOL_NAME` to the stable host family (`claude_code`, `codex`, `cursor`, etc.) and `SESSION_ID` to the stable host session. Build Loop qualifies that pair into an exact native Rally actor; Build Loop local fallback deliberately keeps the base tool plus session id. Run a one-shot status check first:
150
178
 
151
179
  ```bash
152
180
  python3 scripts/coordination_status.py --workdir "$PWD" --session-id "$SESSION_ID" --tool "$TOOL_NAME" --json
@@ -158,7 +186,7 @@ If the status has `active_peers`, `coordination_file`, `inbox_unread_count > 0`,
158
186
  python3 scripts/coordination_watch.py --workdir "$PWD" --session-id "$SESSION_ID" --tool "$TOOL_NAME" --interval 5 --jsonl --baseline-current
159
187
  ```
160
188
 
161
- Keep that process attached in the host's tool/session mechanism and poll it before commits, before final responses, and after any 30s work interval. When it emits a revision or inbox change, immediately rerun `coordination_status.py --tool "$TOOL_NAME"`, then run `python3 scripts/rally_point/inbox.py read --workdir "$PWD" --tool "$TOOL_NAME" --json` to read the resolved-channel inbox for `<tool>` plus the common broadcast inbox, and post the required channel response. Do not ask the user to paste peer messages that are already present in the rally channel, the addressed inbox, or the common broadcast inbox.
189
+ Keep that process attached in the host's tool/session mechanism and poll it before commits, before final responses, and after any 30s work interval. When it emits a revision or inbox change, immediately rerun `coordination_status.py --tool "$TOOL_NAME" --session-id "$SESSION_ID"`, then run `python3 scripts/rally_point/inbox.py read --workdir "$PWD" --tool "$TOOL_NAME" --session-id "$SESSION_ID" --json` to read the exact native actor's inbox (or the base-tool local inbox) plus the common broadcast inbox, and post the required channel response. Do not ask the user to paste peer messages that are already present in the rally channel, the addressed inbox, or the common broadcast inbox.
162
190
 
163
191
  ## Intent Capability Pack
164
192
 
@@ -198,6 +226,8 @@ Build-loop prefers installed plugins and skills over reinventing patterns. Each
198
226
 
199
227
  Understand current state, load memory through the automatic context bootstrap, detect tools, map architecture, capture north star + update intent, assess clean-sheet vs current-constraints approach lenses, define goal and criteria. Writes `.build-loop/context-bootstrap.json`, `.build-loop/context/current.md` via `scripts/context_snapshot.py`, `.build-loop/intent.md`, and `.build-loop/goal.md`.
200
228
 
229
+ Groundwork intake: when `$GROUNDWORK_BUILD_REQUEST` or `.designdoc/build-request.json` is present, validate it with the adjacent canonical Spec through `scripts/groundwork_exchange.py validate-request` before planning; failures block Execute.
230
+
201
231
  Key steps: detect plugins → set sub-routers → map architecture → run `scripts/context_bootstrap.py` (bootstrap surfaces queue counts+top items+progressive lessons in the packet; check `session_prefs.continue_from_queues` and ask the user ONCE when "ask" and any queue has items; see `agents/build-orchestrator.md` §"Queue surfacing + session preference" and `AGENTS.md` §"Memory bootstrap + queue surfacing" for the full surface+ask protocol) → run `scripts/research_trigger.py` to decide Research plugin depth and blocked final-claim handling → run `scripts/task_surface.py` when surfacing open work → load PRD if present → capture intent → capture approach lenses for non-trivial recommendations → for UI work load `references/ui-io-contract.md` and inventory affected inputs/outputs → define scoring criteria → synthesis-density routing (count `synthesis_dimensions`; escalate to thinking-tier when > 5).
202
232
 
203
233
  **Load `skills/build-loop/references/phase-1-assess.md`** for the full step-by-step protocol including UI pre-flight, workspace concurrency checks, recovery check, and synthesis-density routing details.
@@ -222,17 +252,28 @@ Key steps: subagent-driven-development → model assignment (Sonnet default) →
222
252
 
223
253
  Seven sub-steps run in order (A–G): Critic → Validate → Optimize (opt-in) → Fact-Check → Simplify → Auto-Resolve → Report. F (Auto-Resolve) drains non-destructive items via `scripts/autonomy_gate.py` (auto/warn/confirm/block routing). G (Report) is final-pass-only.
224
254
 
225
- Key steps: independent-auditor (build scope) adversarial read → build-loop-owned UI validation when UI changed code-based graders → live smoke gate → LLM judges → fact-checker + mock-scanner + architecture-rules in parallel → simplify → autonomy gate queue → final scorecard + run entry → **non-gating post-push retrospective dispatch** (`build-loop:retrospective-synthesizer` writes the 9-section `.build-loop/retrospectives/<date>/<run-id>.md` + ≤5-line summary surfaced inline; enforce-candidates land at `.build-loop/proposals/enforce-from-retro/` for human review — never auto-promoted; fire-and-continue, run-close is NOT delayed). On self-recursive runs, G appends `## Self-modifications (readback)` listing every self-modification attempted this run — file, what/why, gate verdict, additional-review finding — so the human sees results at the end without the loop stopping. Full spec in `agents/build-orchestrator.md` §G.
255
+ Groundwork return: when Phase 1 accepted a request, Review-G emits `.designdoc/implementation-map.json` through `scripts/groundwork_exchange.py emit-map`; failures route to Iterate and Groundwork alone calculates convergence.
256
+
257
+ Key steps: independent-auditor (build scope) adversarial read → build-loop-owned UI validation when UI changed → code-based graders → live smoke gate → LLM judges → fact-checker + mock-scanner + architecture-rules in parallel → public/private documentation boundary check when docs changed or publication is in scope → simplify → autonomy gate queue → final scorecard + run entry (asserted by `scripts/run_close_lint.py` — a report may not be emitted while the `runs[]` write is missing) → **non-gating post-push retrospective dispatch** (`build-loop:retrospective-synthesizer` writes the 9-section `.build-loop/retrospectives/<date>/<run-id>.md` + ≤5-line summary surfaced inline, AND a required durable copy to `build-loop-memory/projects/<slug>/retrospectives/` via `memory_writer.py` — `.build-loop/` is gitignored, so the local copy alone does not survive a clone; enforce-candidates land at `.build-loop/proposals/enforce-from-retro/` for human review — never auto-promoted; fire-and-continue, run-close is NOT delayed). On self-recursive runs, G appends `## Self-modifications (readback)` listing every self-modification attempted this run — file, what/why, gate verdict, additional-review finding — so the human sees results at the end without the loop stopping. Full spec in `agents/build-orchestrator.md` §G.
258
+
259
+ **Documentation publication boundary.** When documentation changed, a repository is
260
+ being prepared for publication, or Review finds plan/RCA/audit/retrospective material,
261
+ load `references/public-repository-documentation-boundary.md`. Verify repository
262
+ visibility. Private repositories retain internal records. Public repositories retain
263
+ only current user-, contributor-, and agent-facing product material; archive internal
264
+ plans, RCAs, future architecture, review artifacts, and maintainer operations to the
265
+ private `build-loop-memory` project lane before removing and ignoring them. A missing
266
+ private-memory receipt blocks the documentation review from passing.
226
267
 
227
268
  **Load `skills/build-loop/references/phase-4-review.md`** for sub-step details, gate matrices, routing rules, and the full Sub-step F Auto-Resolve protocol (all 4 verdict arms including `warn` exit-0 behavior).
228
269
 
229
- **Independent commit auditor — boundary gate + dispatched judge.** Single consolidated auditor (2026-05-23 — replaces retired `commit-auditor` and earlier retired `sonnet-critic`). Two surfaces share the same context-gathering procedure and verdict taxonomy: (1) a PreToolUse Bash hook fires `scripts/audit_before_commit.py` on every `git commit` regardless of who initiates it (manual, Codex, build-loop, IDE) — deterministic packet-builder, hard-blocks (exit 2) on staged secrets and merge-conflict markers, bypass via `BUILDLOOP_AUDIT_BYPASS=1`; (2) the `independent-auditor` agent dispatches at Phase 3 chunk-close (chunk advisory) and Phase 4 Review-A (build scope) for LLM-grade judgment. Four verdicts: `yay (approve)` / `nay (reject)` / `suggest_correction` / `look_again`. **Auditor dispatch ladder (GAP-1):** a *nested* orchestrator (dispatched as a subagent, or per-commit mode) has no Agent tool and cannot dispatch the auditor — it walks `dispatched-agent → peer-host (rally / codex exec) → not-run:parent-must-dispatch`, records the chosen rung in `auditor_status`, and **never** lets inline self-reasoning masquerade as the independent auditor. A `not-run:parent-must-dispatch` run is not review-complete: under the parent-dispatch contract the dispatching parent owes the audit before Report. Full reference: `skills/build-loop/references/independent-auditor.md` + `references/phase-4-review.md` §"Sub-step A" + `agents/independent-auditor.md`.
270
+ **Independent commit auditor — boundary gate + dispatched judge.** Single consolidated auditor (2026-05-23 — replaces retired `commit-auditor` and earlier retired `sonnet-critic`). Two surfaces share the same context-gathering procedure and verdict taxonomy: (1) a PreToolUse Bash hook fires `scripts/audit_before_commit.py` on every `git commit` regardless of who initiates it (manual, Codex, build-loop, IDE) — deterministic packet-builder, hard-blocks (exit 2) on staged secrets and merge-conflict markers, bypass via `BUILDLOOP_AUDIT_BYPASS=1`; (2) the `independent-auditor` agent dispatches at Phase 3 chunk-close (chunk advisory) and Phase 4 Review-A (build scope) for LLM-grade judgment. Four verdicts: `yay (approve)` / `nay (reject)` / `suggest_correction` / `look_again`. **Auditor dispatch ladder (GAP-1):** a *nested* orchestrator (dispatched as a subagent, or per-commit mode) has no Agent tool and cannot dispatch the auditor — it walks `dispatched-agent → peer-host (rally / codex exec) → not-run:parent-must-dispatch`, records the chosen rung in `auditor_status`, and **never** lets inline self-reasoning masquerade as the independent auditor. A `not-run:parent-must-dispatch` run is not review-complete: the nested orchestrator writes a machine-checkable **owed-verification manifest** (`.build-loop/owed-verification.json` via `scripts/owed_verification.py write`) and flips `state.json.review_incomplete = true`, so under the parent-dispatch contract the dispatching parent MUST dispatch the owed verifiers and `clear` the manifest before Report — the manifest replaces "parent remembers" with a gate (`owed_verification.py check`). Full reference: `skills/build-loop/references/independent-auditor.md` + `references/phase-4-review.md` §"Sub-step A" + `agents/independent-auditor.md`.
230
271
 
231
272
  ## Phase 5: Iterate — Fix Review Failures + UX Queue (up to 5x)
232
273
 
233
274
  Fix failures surfaced by Review plus drain the UX queue from Sub-step D Gates 7-8, systematically. Loops back to Review after each pass. Hard stop at 5 iterations.
234
275
 
235
- Key steps: prioritized work list (Validate failures → blocker UX → major UX → optimization → UI coverage gaps) → fan-out up to `effective_max` implementers (see `scripts/parallelism.py effective_max_implementers(workdir)` — default 8; `min(config.parallelism.maxImplementers, cpu_count−2, hard ceiling 12)`) → stuck-cascade (evidence-gap → memory re-check → parallel assess at 2 fails → causal-tree at 3 fails) → UI re-validate hook → overflow to followup/.
276
+ Key steps: prioritized work list (Validate failures → blocker UX → major UX → optimization → UI coverage gaps) → supervisor-selected adaptive fan-out (default project preference 8; absolute ceiling 150; resource, provider, independent-work, and shared-capacity limits remain binding) → stuck-cascade (evidence-gap → memory re-check → parallel assess at 2 fails → independent audit at the third same unresolved verdict → quarantine at the fifth) → UI re-validate hook → overflow to followup/.
236
277
 
237
278
  **Load `skills/build-loop/references/phase-5-iterate.md`** for the full prioritized work list, status routing for all 9 implementer return values, convergence detection, and followup overflow protocol.
238
279
 
@@ -240,13 +281,13 @@ Key steps: prioritized work list (Validate failures → blocker UX → major UX
240
281
 
241
282
  Detect recurring patterns across recent runs, auto-draft experimental skills/agents. **Always runs after Review-G** (v0.30.0+) and always emits a `## Learn` outcome line. Three outcome states: **accruing** (`runs[] < 3` → `Learn: accruing (N/3 runs)`), **deferred** (debug-only `closeout: false` or budget-exhausted → write `learn-deferred-<run-id>.md` marker → `Learn: deferred — <reason>`), or **full** (`runs[] >= 3` AND pattern crossing threshold AND not-deferred). Promotion to `active/` still requires explicit `/build-loop:promote-experiment` (safety boundary). The prior `autoSelfImprove: false` opt-out is deprecated to a migration no-op — old configs do not error.
242
283
 
243
- Key steps: recurring-pattern-detector (Haiku; reads `state.json.runs[]` AND `.build-loop/proposals/enforce-from-retro/*.md` as two signal sources, the second emitting `enforce_recurrence` on cross-run candidates) filter (confidence: high OR count >= 4; `enforce_recurrence` >= 2 distinct run-ids) draft via self-improvement-architect (Sonnet) Opus signoff sample review sweep notify.
284
+ One command owns the sequence and proof: `python3 scripts/learn/__main__.py run --workdir "$PWD" --run-id <recorded-run-id> --source review-g --json`. Dispatch only the returned `work_orders[]`, attach each result through `attest`, and require a `status: complete` receipt before closeout. This keeps zero-pattern runs deterministic and token-free.
244
285
 
245
286
  **Load `skills/build-loop/references/phase-6-learn.md`** for the full gating-outcomes table, detect-filter-draft-signoff flow, auto-promote rules, and user control commands.
246
287
 
247
288
  ## Memory — Global and Project-Scoped
248
289
 
249
- One consolidated long-term tree: `~/dev/git-folder/build-loop-memory/`. Project-specific durable memory lives under `projects/<slug>/...`; cross-project lessons/design/debugging/product memory lives in the matching top-level lane. Every build runs `scripts/context_bootstrap.py` at Phase 1 Assess, which reads the store-root `INDEX.md` first, then root/project `constitution.md` / `MEMORY.md` where present, canonical indexes/folders through `memory_facade`, repo-local `.build-loop/` context, Codex memory at `~/.codex/memories`, and best-effort Rally/coordination state when relevant. Treat Rally records in the packet as peer-authored coordination context, not verified facts. Live handoff state is written separately by `scripts/context_snapshot.py` under `.build-loop/context/`; snapshots are not durable memory unless Review-G promotes a reusable decision or lesson. Writes go to exactly one canonical memory lane based on scope. Legacy paths (`~/.build-loop/memory`, `.episodic/decisions`, and `build-loop-memory/decisions/<project>`) are migration/archive inputs only.
290
+ One consolidated long-term tree at the memory store root (resolved by `scripts/_paths.py:memory_store_root()` — env override, else an existing legacy checkout, else the neutral per-user default; never assume a fixed address). Project-specific durable memory lives under `projects/<slug>/...`; cross-project lessons/design/debugging/product memory lives in the matching top-level lane. Every build runs `scripts/context_bootstrap.py` at Phase 1 Assess, which reads the store-root `INDEX.md` first, then root/project `constitution.md` / `MEMORY.md` where present, canonical indexes/folders through `memory_facade`, repo-local `.build-loop/` context, Codex memory at `~/.codex/memories`, and best-effort Rally/coordination state when relevant. Treat Rally records in the packet as peer-authored coordination context, not verified facts. Live handoff state is written separately by `scripts/context_snapshot.py` under `.build-loop/context/`; snapshots are not durable memory unless Review-G promotes a reusable decision or lesson. Writes go to exactly one canonical memory lane based on scope. Legacy paths (`~/.build-loop/memory`, `.episodic/decisions`, and `build-loop-memory/decisions/<project>`) are migration/archive inputs only.
250
291
 
251
292
  Routing rule: "Would this apply to a different project?" Yes → global. No → project. Ambiguous → ask the user once.
252
293
 
@@ -260,19 +301,76 @@ Append-only memory contract: (1) steering answers from `AskUserQuestion` append
260
301
 
261
302
  **Parsing rule**: scan the argument string for the literal token `--resume`. The next whitespace-delimited token is the run-id (or `latest`). Anything else is part of the goal text.
262
303
 
263
- **On `--resume <run-id>` or `--resume latest`** — BEFORE Phase 1 Assess, run `python3 ${CLAUDE_PLUGIN_ROOT}/scripts/resume_resolver.py --workdir "$PWD" --resume-arg "<run-id-or-latest>" --staleness-minutes 5`. Returns `decision: "resume" | "abort" | "fresh"`. On `resume`:
304
+ Before either path, resolve `RUNTIME_PLUGIN_ROOT` to the root of the currently
305
+ loaded Build Loop package (the directory containing both `scripts/` and
306
+ `skills/`). Use `BUILD_LOOP_ROOT` when the host exports it; otherwise derive the
307
+ root from the already-resolved path of this `SKILL.md`. Do not assume a
308
+ host-specific plugin-root environment variable, and do not use the target
309
+ project's root unless Build Loop itself is the target.
310
+
311
+ **On `--resume <run-id>` or `--resume latest`** — BEFORE Phase 1 Assess, run `python3 "$RUNTIME_PLUGIN_ROOT/scripts/resume_resolver.py" --workdir "$PWD" --resume-arg "<run-id-or-latest>" --staleness-minutes 5`. Returns `decision: "resume" | "abort" | "fresh" | "prompt_user"`. On `resume`:
264
312
 
265
313
  1. Read `.build-loop/intent.md` and `.build-loop/plan.md` (already on disk — DO NOT re-derive).
266
314
  2. Dispatch build-orchestrator with prefix: `RESUME_MODE: run_id=<id>; remaining_chunks=<json>; iterate_attempt=<n>; concurrent_modifications=<json>`
267
315
  3. Agent §0 handles the rest — skips Phase 1+2, jumps to Phase 3 on `remaining_chunks` only.
268
316
 
269
- **On NO `--resume` (normal dispatch)** — BEFORE Phase 1 step 1, run the same resolver with `--resume-arg ""`. If it returns `decision: "prompt_user"`, surface to the user verbatim:
317
+ **On NO `--resume` (normal dispatch)** — BEFORE Phase 1 step 1, run the same resolver with `--resume-arg ""`. When the host supplies a stable current session id, pass it explicitly as `--current-session-id "<id>"`; never infer ownership from heartbeat freshness. An exact session match proves continuity only, so a `decision: "resume"` result continues the existing run through the same Resume Mode path above—it never starts fresh. If the resolver returns `decision: "prompt_user"`, surface to the user verbatim:
270
318
  > "Incomplete build detected (run_id=X, last heartbeat N min ago, M of K chunks complete). Resume with `/build-loop:run --resume X` or start fresh? Starting fresh will not delete the incomplete state — it persists until manually cleared."
271
319
 
320
+ If it instead returns `decision: "abort"` with
321
+ `required_action: "archive_legacy_crash"`, immediately rerun the resolver with
322
+ `--archive-terminal-legacy-crash`. Proceed as a fresh run only when that second
323
+ result returns `decision: "fresh"`, `archive_applied: true`, and
324
+ `fresh_ready: true`. This path is limited to a schema-less crash whose terminal
325
+ evidence the resolver revalidates under the state lock; every ambiguous or
326
+ potentially active schema-less execution remains refused.
327
+
328
+ Every other `abort` is a hard refusal: do not begin a fresh run. In particular,
329
+ an existing nonterminal execution with a fresh, missing, timezone-less, or
330
+ unparseable heartbeat is not fresh-run permission. An exact match between the
331
+ explicit `--current-session-id` and `execution.current_session_id` proves only
332
+ host/thread continuity and therefore resumes that run. It is not a unique
333
+ invocation nonce and cannot authorize replacing the execution.
334
+
272
335
  This is the crash-resume staleness signal — heartbeat staleness on `state.json.execution`, no hook dependency, fires every fresh dispatch. (A crash-recovery concern, distinct from concurrent-presence collision, which is owned solely by Rally Point presence — see `KNOWN-ISSUES.md` §M4.)
273
336
 
274
337
  **Concurrent-modification handling**: when `concurrent_modifications` is non-empty in the resolver output, the agent's §0 branch surfaces each flagged chunk as `status: concurrent_modification_detected` and asks the user whether to redo the chunk (default) or keep the hand-edits.
275
338
 
339
+ ## Output contract — applies to EVERY user-facing message, not just the Phase 4 report
340
+
341
+ Two references govern how build-loop talks to a human. Load them the first time a
342
+ run emits user-facing text, and follow them for the rest of the session:
343
+
344
+ - `references/output-style.md` — SENTENCE level. Lead with the answer to the
345
+ question actually asked. Strong verb over weak-verb-plus-filler
346
+ (`was responsible for` → `caused`). Data over adverbs
347
+ (`significantly increased` → `increased 42%`). Say `because` only when the cause
348
+ is proven, `suggesting` when evidence merely implies it.
349
+ - `references/status-output-format.md` — BLOCK level, for findings, open items,
350
+ status updates, and recommendations. Heading is an action-verb phrase with real
351
+ numbers inline; second line is the consequence (what breaks, for whom, when);
352
+ specifics named individually; close with a decision or a status.
353
+
354
+ **These are not Review-G-only.** They govern interim status, findings surfaced
355
+ mid-run, handoffs, and any answer given while the skill is loaded. Review-G is
356
+ where the deterministic lint runs, not where the contract begins. A run that
357
+ reports conforming prose only in its final report has followed the lint and missed
358
+ the rule.
359
+
360
+ Self-check any substantial user-facing markdown before sending:
361
+
362
+ ```bash
363
+ python3 scripts/report_lint.py <draft.md> --json # weak-verb, filler-opener, hedge
364
+ ```
365
+
366
+ WARN-only with self-heal — rewrite and move on; it never halts a run. The lint
367
+ grades three mechanical rules; everything else in the two references is judgment,
368
+ so a clean lint is not evidence the contract was met.
369
+
370
+ The governing test, from `status-output-format.md` §2: *if an agent with zero
371
+ context read only this line, would it know what to do?* A block that satisfies
372
+ every rule and fails that test is still wrong.
373
+
276
374
  ## Efficiency
277
375
 
278
376
  - No extraneous code. Every line serves the goal
@@ -301,16 +399,21 @@ Build-loop can author new skills mid-flow when a repeated task pattern emerges a
301
399
 
302
400
  **Procedure:**
303
401
 
304
- 1. Draft the skill during Phase 4 if the need arises. Use the `plugin-dev:skill-development` skill if available, else `fallbacks.md#agent-authoring` format (but for skills — name, description, body ≤200 lines, progressive disclosure).
305
- 2. Use it immediately in the current build.
306
- 3. At Review-F, score its usefulness: did it reduce friction? Would you use it next build?
307
- 4. Decide: **keep**, **promote** (project → global), or **drop**.
402
+ 1. Draft the skill during Phase 4 if the need arises. Use the `plugin-dev:skill-development` skill if available, else `fallbacks.md#agent-authoring` format (but for skills — name, description, body ≤200 lines, progressive disclosure). Write `user-invocable: false` into the frontmatter: a new skill is hidden by default and is reached by build-loop routing, not by the user's slash menu.
403
+ 2. Stamp it in the same turn as the write, on the path you just wrote:
404
+ ```bash
405
+ python3 "${CLAUDE_PLUGIN_ROOT:-.}/scripts/stamp_skill_frontmatter.py" --apply <path-just-written>
406
+ ```
407
+ The harness computes `userInvocable ?? true`, so a SKILL.md carrying no field is PUBLIC. Step 1's frontmatter line is the fast path; this command is the control. Expected status `compliant` or `stamped`, exit 0. A `violation` or `malformed` exit means the skill you just authored is publicly invocable or unparseable — fix it and re-run before using the skill.
408
+ 3. Use it immediately in the current build.
409
+ 4. At Review-F, score its usefulness: did it reduce friction? Would you use it next build?
410
+ 5. Decide: **keep**, **promote** (project → global), or **drop**.
308
411
  - Keep (project) — leave in `.build-loop/skills/`.
309
- - Promote — move to `~/.claude/skills/`, confirm with user.
412
+ - Promote — copy to `~/.claude/skills/<name>/SKILL.md`, run the stamper again **on the destination path** (`python3 "${CLAUDE_PLUGIN_ROOT:-.}/scripts/stamp_skill_frontmatter.py" --apply ~/.claude/skills/<name>/SKILL.md`), then confirm with the user using the exposure block in `skills/self-improve/SKILL.md` §"Promotion exposure statement". `~/.claude/skills/` loads in every session on every project, so this move — not the drafting step — is where exposure is decided.
310
413
  - Drop — delete and note in `.build-loop/feedback.md` why it didn't earn its keep.
311
- 5. Record the decision through `scripts/memory_writer.py` into `build-loop-memory/lessons/` or `build-loop-memory/projects/<slug>/lessons/` as a `pattern` entry.
414
+ 6. Record the decision through `scripts/memory_writer.py` into `build-loop-memory/lessons/` or `build-loop-memory/projects/<slug>/lessons/` as a `pattern` entry.
312
415
 
313
- **Self-review/self-heal loop extension:** the self-review/self-heal loop (proactive arm of C-HEAL) MAY author new skills AND new scripts when doing so prevents a class of issue or streamlines repeated work. New skills start project-local and follow this same keep/promote/drop lifecycle. Promotion to the build-loop plugin repo or `~/.claude/skills/` still requires user confirmation (global scope is consequential). New scripts MUST have a colocated `test_<name>.py` — no untested script lands. When the authoring happens inside a self-recursive build (editing build-loop itself), every new or modified file passes through the SELF-MODIFICATION SAFETY GATE in `references/self-review.md` §"Self-modification of the restricted repo" before commit.
416
+ **Self-review/self-heal loop extension:** the self-review/self-heal loop (proactive arm of C-HEAL) MAY author new skills AND new scripts when doing so prevents a class of issue or streamlines repeated work. New skills start project-local and follow this same keep/promote/drop lifecycle. Promotion to the build-loop plugin repo or `~/.claude/skills/` still requires user confirmation (global scope is consequential) and runs the destination-path stamper from step 5 before that confirmation is asked. New scripts MUST have a colocated `test_<name>.py` — no untested script lands. When the authoring happens inside a self-recursive build (editing build-loop itself), every new or modified file passes through the SELF-MODIFICATION SAFETY GATE in `references/self-review.md` §"Self-modification of the restricted repo" before commit.
314
417
 
315
418
  **Never proliferate skills**. A skill that isn't used twice across builds should be dropped. Prefer extending an existing skill over creating a new one.
316
419
 
@@ -347,14 +450,17 @@ Contextual material loaded on demand (not at skill invocation):
347
450
  - `references/phase-3-execute.md` — Full Phase 3 Execute protocol
348
451
  - `references/verify-dispatch.md` — Post-dispatch 5-step git/test ground-truth checklist; walk after any dispatched agent claims commits landed / tests passed (a solicited peer agreeing is not independent verification)
349
452
  - `references/dogfood-reload-checkpoint.md` — Self-recursive stop/reload/resume checkpoint and ACK/fallback protocol
453
+ - `references/privileged-request-broker.md` — Naming, coalescing, and recording macOS administrator-password requests across concurrent tasks. Load when a build touches a command that asks for an admin password, when a user reports unexplained password dialogs, or when editing `scripts/privileged_commands.json`.
350
454
  - `references/phase-4-review.md` — Full Phase 4 Review protocol (sub-steps A–G, including Sub-step F Auto-Resolve with all 4 verdict arms)
351
455
  - `references/phase-5-iterate.md` — Full Phase 5 Iterate protocol
352
456
  - `references/phase-6-learn.md` — Full Phase 6 Learn protocol
353
457
  - `references/memory.md` — Memory system: global vs project stores, routing rule, read/write policy
458
+ - `references/output-style.md` — Sentence-level user-facing style contract (see "Output contract" above)
459
+ - `references/status-output-format.md` — Block-level shape for findings, open items, status, recommendations
354
460
  - `references/leadership.md` — Initiative + decision-escalation doctrine (decide-at-70%, self-research → memory → peers → persona panel → human-only-for-irreversible, parallel-work-before-idling, token-posture gauge). Synthesized from intent-based leadership / mission command / two-door decisions.
355
461
  - `references/research-trigger-policy.md` — Research plugin trigger/depth gate, t-shirt depth lower bounds, and final-claim citation/unavailable rule
356
462
  - `references/task-capture-policy.md` — Read-only active task surface over existing plan/state/queue/backlog surfaces; no new task ledger by default
357
- - `references/backlog-system.md` — Host-agnostic, multi-repo backlog system: MD+YAML items (canonical truth) + regenerable INDEX, pure-stdlib `scripts/backlog.py` (new/sync/list), one-way mirror to personal memory. Read via `BACKLOG.md`→`INDEX.md`→grep; write via the CLI
463
+ - `references/backlog-system.md` — Host-agnostic classed backlog: planned pickup, approval-gated initiatives, contextual user decisions, lossless reconciliation, and explicit promotion into the executable queue
358
464
  - `references/agent-role-taxonomy.md` — Lead/peer/coder-assessor/reviewer/skill responsibility map; use before adding or renaming agents.
359
465
  - `references/capability-routing.md` — Full capability routing table, trigger conditions, sub-routers
360
466
  - `references/recent-design-structures.md` — Recent UI structure library loaded by `design-contract-specialist` in Phase 2. Structures are options, not mandates.
@@ -362,7 +468,7 @@ Contextual material loaded on demand (not at skill invocation):
362
468
  - `../ui-design/references/ui-guidance-sources.md` — Source map for local UI guidance across build-loop, UI Guidance, IBR, Mockup Gallery, document/deck plugins, research, vault, project-local hidden folders, and build-loop-memory.
363
469
  - `references/refactor-history/` — Internal assessment of the 2026-04 refactor. `ASSESSMENT.md` explains rationale, `trace-comparison.md` shows before/after flow, `STANDALONE_TEST_RUN.md` validates the model, `scenarios/01..06` contain 6 test scenarios.
364
470
  - `eval-guide.md` — How to interpret build-loop scorecards.
365
- - `fallbacks.md` — Degraded-but-useful behavior when bridge plugins or rendered UI tooling are absent. IBR remains explicit-only through `build-loop:ibr-bridge`.
471
+ - `fallbacks.md` — Degraded-but-useful behavior when bridge plugins or rendered UI tooling are absent. Headless IBR verification follows `../../references/ibr-ui-verification-policy.md`; viewer surfaces remain explicit-only.
366
472
  - `phases/fact-check.md` — Detailed fact-check sub-step specification.
367
473
 
368
474
  Companion skills (each has its own SKILL.md; load via `Skill("build-loop:<name>")`):
@@ -373,7 +479,9 @@ Companion skills (each has its own SKILL.md; load via `Skill("build-loop:<name>"
373
479
  - `build-loop:architecture-{scan,impact,trace,rules,dead,review}` — native architecture skills sourced from NavGator (provenance + drift-detection via `build-loop:sync-skills`)
374
480
  - `build-loop:debugging-memory` · `build-loop:debug-loop` · `build-loop:logging-tracer` — bundled debugger primitives (orchestrator owns when-to-fire, these own the procedural detail)
375
481
  - `build-loop:plugin-builder` · `build-loop:mcp-builder` — plugin authoring (use together for plugins that expose MCP tools)
482
+ - `build-loop:repo-maintenance` — repository structure, source-of-truth, artifact retention, sibling consolidation, and safe local-main closeout (`build-loop:repo-closeout` is the temporary compatibility alias)
376
483
  - `build-loop:authentication` — multi-provider auth reference library (Better Auth, Supabase, Google OAuth, Resend; routed by provider × topic)
484
+ - `build-loop:data-plane-worktrees` — isolates mutable non-Git state across run worktrees; loads for SQLite/PostgreSQL migrations, generated indexes, Docker volumes/projects, mutable file stores, or external namespaces and drives the run manifest through terminal closeout.
377
485
  - `build-loop:building-with-deepagents` — OSS deepagents framework (activates on `from deepagents import`)
378
486
  - `build-loop:ui-design` — build-loop-owned UI design direction skill loaded before non-trivial UI implementation; `design-contract-specialist` writes the resulting `.build-loop/app-contract/ui.md`.
379
487
  - `build-loop:telemetry` — OpenTelemetry-first observability guidance (LLM/agent → Phoenix/Langfuse + OpenInference/OpenLLMetry; web/server → OTel SDK + Sentry; mobile/iOS → Embrace/OTel-swift over Firebase). Loaded in Phase 1 when a build touches a server/LLM/mobile app with no telemetry, or Phase 2 when adding a service/LLM path; encodes the user's decided OTel + GenAI-semconv stack.