repo-harness 0.25.3 → 0.25.4

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 (304) hide show
  1. package/README.md +16 -27
  2. package/agents/fleet/gatekeeper.md +1 -1
  3. package/assets/operator/{fleet-windows-job-controller.ps1 → windows-job-controller.ps1} +12 -12
  4. package/assets/reference-configs/agentic-development-flow.md +27 -17
  5. package/assets/reference-configs/external-tooling.md +8 -81
  6. package/assets/reference-configs/global-working-rules.md +1 -1
  7. package/assets/reference-configs/harness-overview.md +11 -7
  8. package/assets/reference-configs/herdr-skill-context.md +3 -2
  9. package/assets/reference-configs/hook-operations.md +4 -4
  10. package/assets/reference-configs/host-invariants.md +1 -1
  11. package/assets/reference-configs/issue-pipeline.md +2 -3
  12. package/assets/review-hazards.v1.json +57 -0
  13. package/assets/skill-commands/manifest.json +53 -142
  14. package/assets/skill-version.json +2 -2
  15. package/assets/skills/repo-harness-cross-review/SKILL.md +8 -5
  16. package/assets/skills/repo-harness-cross-review/references/generic-review.md +11 -5
  17. package/assets/skills/repo-harness-issue-flow/SKILL.md +21 -11
  18. package/assets/skills/repo-harness-issue-flow/references/acceptor.md +59 -9
  19. package/assets/skills/repo-harness-issue-flow/references/board.md +61 -51
  20. package/assets/skills/repo-harness-issue-flow/references/orchestrator.md +72 -41
  21. package/assets/skills/repo-harness-issue-flow/references/replan.md +8 -7
  22. package/assets/skills/repo-harness-issue-flow/references/templates.md +78 -39
  23. package/assets/skills/repo-harness-issue-flow/references/worker.md +26 -15
  24. package/assets/skills/repo-harness-test/references/authoring.md +0 -3
  25. package/assets/skills/repo-harness-test/references/running.md +5 -3
  26. package/assets/skills/repo-harness-test/references/verification-plan.md +7 -3
  27. package/assets/tool-catalog.v1.json +7 -12
  28. package/dist/hook-entry.js +200 -825
  29. package/dist/oar-review-host.js +3 -2
  30. package/dist/operator-ui/assets/{ArchitectureWorkspace-rjlN-8R2.js → ArchitectureWorkspace-BRP1rMMo.js} +1 -1
  31. package/dist/operator-ui/assets/{DocsPage-CRaTSP3D.js → DocsPage-DLM6dzMb.js} +3 -3
  32. package/dist/operator-ui/assets/{abnfDiagram-VCTEODGH-BFhgL4_X.js → abnfDiagram-VCTEODGH-B4_iXt3l.js} +1 -1
  33. package/dist/operator-ui/assets/architecture-7GRP2DOG-BaUpfaSR.js +1 -0
  34. package/dist/operator-ui/assets/{architectureDiagram-5GKGNRK7-1NoOp4es.js → architectureDiagram-5GKGNRK7-D2vVdhRg.js} +1 -1
  35. package/dist/operator-ui/assets/{blockDiagram-I7D4REHJ-D-cnMqjK.js → blockDiagram-I7D4REHJ-BYZ8XsMJ.js} +1 -1
  36. package/dist/operator-ui/assets/{c4Diagram-7LVT6UL2-DYm9qbaz.js → c4Diagram-7LVT6UL2-5ZFF7y_b.js} +1 -1
  37. package/dist/operator-ui/assets/channel-B2h48QWv.js +1 -0
  38. package/dist/operator-ui/assets/{chunk-4HAMMTFA-BF1G1yi6.js → chunk-4HAMMTFA-i3tlSxDP.js} +1 -1
  39. package/dist/operator-ui/assets/{chunk-75Z2AOVW-B1j-oisA.js → chunk-75Z2AOVW-BhcHGQX3.js} +1 -1
  40. package/dist/operator-ui/assets/{chunk-DU6HZSFF-DsnuxesV.js → chunk-DU6HZSFF-ESwLEd7y.js} +1 -1
  41. package/dist/operator-ui/assets/{chunk-F27PBJKO-eb7-Ur1D.js → chunk-F27PBJKO-DzgkUAaS.js} +1 -1
  42. package/dist/operator-ui/assets/{chunk-GMAD6QVW-C09ks1XE.js → chunk-GMAD6QVW-CI3PzCBH.js} +1 -1
  43. package/dist/operator-ui/assets/{chunk-GVQU2GXP-BpZL9Gfs.js → chunk-GVQU2GXP-D7mVueL9.js} +1 -1
  44. package/dist/operator-ui/assets/{chunk-IMKFNOWR-kyEnT-W3.js → chunk-IMKFNOWR-6yCiE3Ny.js} +1 -1
  45. package/dist/operator-ui/assets/{chunk-L3NEJ4N5-CEQdXQqr.js → chunk-L3NEJ4N5-fDwT8vZ_.js} +1 -1
  46. package/dist/operator-ui/assets/{chunk-OSK3NFVY-B8eNuair.js → chunk-OSK3NFVY-CYeI6Ngu.js} +1 -1
  47. package/dist/operator-ui/assets/{chunk-P2QGCYS3-IC1iPfVx.js → chunk-P2QGCYS3-BR4LGVGe.js} +1 -1
  48. package/dist/operator-ui/assets/{chunk-POPQ4Y6H-Bb7QgvZD.js → chunk-POPQ4Y6H-DGYaK5_M.js} +1 -1
  49. package/dist/operator-ui/assets/{chunk-PWAF6VOD-CwILx0_c.js → chunk-PWAF6VOD-CP0EqV5m.js} +1 -1
  50. package/dist/operator-ui/assets/{chunk-SHT3W25Y-hEd5Dpoe.js → chunk-SHT3W25Y-CfBlFhVD.js} +1 -1
  51. package/dist/operator-ui/assets/{chunk-SVP7TREG-C-QbND6n.js → chunk-SVP7TREG-BatRqPl3.js} +1 -1
  52. package/dist/operator-ui/assets/{chunk-TICWLB2K-DeSQeLFM.js → chunk-TICWLB2K-Bdzq3Pce.js} +1 -1
  53. package/dist/operator-ui/assets/classDiagram-ZZMXUADV-Bdi2GD7M.js +1 -0
  54. package/dist/operator-ui/assets/classDiagram-v2-VYDZK3BY-Bdi2GD7M.js +1 -0
  55. package/dist/operator-ui/assets/{cynefin-OW5HDTMX-PhoRwNSU.js → cynefin-OW5HDTMX-DWFrsjEE.js} +1 -1
  56. package/dist/operator-ui/assets/{cynefinDiagram-5FMLGOSQ-7OXilZZ1.js → cynefinDiagram-5FMLGOSQ-VHMt8H7p.js} +1 -1
  57. package/dist/operator-ui/assets/{dagre-GXQ25YYZ-Dk48DZQU.js → dagre-GXQ25YYZ-DcIZyQLZ.js} +1 -1
  58. package/dist/operator-ui/assets/{diagram-S7CK7UJ4-CtyC5kUo.js → diagram-S7CK7UJ4-CFmbsbnJ.js} +1 -1
  59. package/dist/operator-ui/assets/{diagram-UQ7AKVKN-Be56sX3m.js → diagram-UQ7AKVKN-D7wxxWxp.js} +1 -1
  60. package/dist/operator-ui/assets/{diagram-VSXAHHWV-BhNRjKPt.js → diagram-VSXAHHWV-Kbacc4vb.js} +1 -1
  61. package/dist/operator-ui/assets/{diagram-VX7I27RA-CUr_B8fH.js → diagram-VX7I27RA-BFA0zXM3.js} +1 -1
  62. package/dist/operator-ui/assets/{diagram-Z3DM3KII-CdZCWs9K.js → diagram-Z3DM3KII-C7XyRbul.js} +1 -1
  63. package/dist/operator-ui/assets/{ebnfDiagram-PWID7BFC-I8e2x1dF.js → ebnfDiagram-PWID7BFC-Cnqsrj6p.js} +1 -1
  64. package/dist/operator-ui/assets/{erDiagram-RLTQ6QDP-SMs1WZl6.js → erDiagram-RLTQ6QDP-CRR1x5bo.js} +1 -1
  65. package/dist/operator-ui/assets/eventmodeling-NTZA5JFV-Brlm8U--.js +1 -0
  66. package/dist/operator-ui/assets/flowDiagram-HODETNUW-CETmahG6.js +1 -0
  67. package/dist/operator-ui/assets/{ganttDiagram-EL5Y4UJY-BV0qL4k_.js → ganttDiagram-EL5Y4UJY-DUf1_n-j.js} +1 -1
  68. package/dist/operator-ui/assets/{gitGraph-4MIJSDKK-BloiXYXP.js → gitGraph-4MIJSDKK-2kdiVAUn.js} +1 -1
  69. package/dist/operator-ui/assets/{gitGraphDiagram-WWUBYQGX-B4D8jXky.js → gitGraphDiagram-WWUBYQGX-BmuNxcNU.js} +1 -1
  70. package/dist/operator-ui/assets/index-Df_LhKDl.css +2 -0
  71. package/dist/operator-ui/assets/index-GomJMfKU.js +27 -0
  72. package/dist/operator-ui/assets/{info-A6RAGUB7-UOZqF0a7.js → info-A6RAGUB7-nLuuS8_v.js} +1 -1
  73. package/dist/operator-ui/assets/{infoDiagram-27XIBGKW-C6X0pAO1.js → infoDiagram-27XIBGKW-Bmj3Jlpp.js} +1 -1
  74. package/dist/operator-ui/assets/{ishikawaDiagram-5VMMS53U-Cp3KYNQj.js → ishikawaDiagram-5VMMS53U-FhYF1F0C.js} +1 -1
  75. package/dist/operator-ui/assets/{journeyDiagram-3NMN7TZE-DCjmPwDY.js → journeyDiagram-3NMN7TZE-C3QJqY-3.js} +1 -1
  76. package/dist/operator-ui/assets/{kanban-definition-UXKFOSKX-f2p6h_X8.js → kanban-definition-UXKFOSKX-DZi1Wjno.js} +1 -1
  77. package/dist/operator-ui/assets/{line-DGsxynmm.js → line-iqB75cyP.js} +1 -1
  78. package/dist/operator-ui/assets/{mermaid-parser.core-CFVtSnVW.js → mermaid-parser.core-DIArUF3d.js} +3 -3
  79. package/dist/operator-ui/assets/{mermaid.core-DiouEf_0.js → mermaid.core-BNDqdTtO.js} +4 -4
  80. package/dist/operator-ui/assets/{mindmap-definition-YA3MSWOX-BNYBhd2k.js → mindmap-definition-YA3MSWOX-BOcVX1M-.js} +1 -1
  81. package/dist/operator-ui/assets/{packet-AYTQ26CC-BxJO6-w_.js → packet-AYTQ26CC-EiozlwqG.js} +1 -1
  82. package/dist/operator-ui/assets/{pegDiagram-XKGWAZYB-NFxyKcEL.js → pegDiagram-XKGWAZYB-CWW7r51u.js} +1 -1
  83. package/dist/operator-ui/assets/{pie-WAS4IAKB-DRG3g5IX.js → pie-WAS4IAKB-C__OzaDl.js} +1 -1
  84. package/dist/operator-ui/assets/{pieDiagram-E7YTZNPT-BM-X8pCs.js → pieDiagram-E7YTZNPT-DbUDXHBG.js} +1 -1
  85. package/dist/operator-ui/assets/{quadrantDiagram-AXDQQJYC-CfxNqnID.js → quadrantDiagram-AXDQQJYC-CKI9LUcX.js} +1 -1
  86. package/dist/operator-ui/assets/{radar-RG4KPBEZ-CWp-KDl_.js → radar-RG4KPBEZ-CsRX-Fi6.js} +1 -1
  87. package/dist/operator-ui/assets/{railroad-74A4TZTK-W7pjUvJr.js → railroad-74A4TZTK-BQ58dawQ.js} +1 -1
  88. package/dist/operator-ui/assets/railroad-abnf-HS5TGJTU-DRTkqyLp.js +1 -0
  89. package/dist/operator-ui/assets/railroad-ebnf-LZEXJU2U-DZGX3DDS.js +1 -0
  90. package/dist/operator-ui/assets/railroad-peg-WCYAUIDC-CL-P4w1a.js +1 -0
  91. package/dist/operator-ui/assets/{railroadDiagram-O6MQD6OU-k_k-e0OU.js → railroadDiagram-O6MQD6OU-Abb-RJax.js} +1 -1
  92. package/dist/operator-ui/assets/{requirementDiagram-BXWQKSXE-BFUODn2H.js → requirementDiagram-BXWQKSXE-DkznGHTE.js} +1 -1
  93. package/dist/operator-ui/assets/{sankeyDiagram-P5KCCOFB-BVCdC525.js → sankeyDiagram-P5KCCOFB-UKM5vqlg.js} +1 -1
  94. package/dist/operator-ui/assets/{sequenceDiagram-WJ2MYXX4-CV9FGbzU.js → sequenceDiagram-WJ2MYXX4-BwIN13l-.js} +1 -1
  95. package/dist/operator-ui/assets/{stateDiagram-D77RDMKH-BCUJLyp9.js → stateDiagram-D77RDMKH-BZTAWRZO.js} +1 -1
  96. package/dist/operator-ui/assets/stateDiagram-v2-MP3YSRHH-CkEudgGK.js +1 -0
  97. package/dist/operator-ui/assets/{swimlanes-42K2YHIH-BhJmqiih.js → swimlanes-42K2YHIH-jGl_hpZI.js} +1 -1
  98. package/dist/operator-ui/assets/swimlanesDiagram-VR7AAH4N-CPzqZPqV.js +8 -0
  99. package/dist/operator-ui/assets/{timeline-definition-24CTP7MA-DncmXLjW.js → timeline-definition-24CTP7MA-B-4sBugD.js} +1 -1
  100. package/dist/operator-ui/assets/{treeView-Q6P3EWNA-CZN7aAl9.js → treeView-Q6P3EWNA-CgCjxhbn.js} +1 -1
  101. package/dist/operator-ui/assets/{treemap-WGGIJYW6-DEBJHML0.js → treemap-WGGIJYW6-BwqVgmtt.js} +1 -1
  102. package/dist/operator-ui/assets/{vennDiagram-4TSXK5OY-BUU9uzvr.js → vennDiagram-4TSXK5OY-147aCcas.js} +1 -1
  103. package/dist/operator-ui/assets/{wardley-WFR3VGLG-DNxI3y-4.js → wardley-WFR3VGLG-DeN0guWh.js} +1 -1
  104. package/dist/operator-ui/assets/{wardleyDiagram-VM6X3IG4-Cb3t-YF7.js → wardleyDiagram-VM6X3IG4-D47xUeXU.js} +1 -1
  105. package/dist/operator-ui/assets/{xychartDiagram-S5SC5T6Z-BzBOBXOR.js → xychartDiagram-S5SC5T6Z-CDhILzlV.js} +1 -1
  106. package/dist/operator-ui/index.html +2 -2
  107. package/package.json +3 -3
  108. package/scripts/check-agent-tooling.sh +27 -14
  109. package/scripts/check-ci.sh +7 -1
  110. package/scripts/check-state-boundaries.ts +2 -1
  111. package/scripts/check-tarball-install-smoke.sh +18 -26
  112. package/scripts/ci-documentation-consumers.ts +42 -13
  113. package/scripts/ci-path-consumers.ts +39 -0
  114. package/scripts/install-agent-fleet.sh +13 -19
  115. package/scripts/lib/project-init-lib.sh +1 -9
  116. package/scripts/run-harness-profile-benchmark.ts +3 -2
  117. package/scripts/run-skill-routing-eval.ts +36 -34
  118. package/scripts/select-ci-coverage.ts +55 -21
  119. package/scripts/ship-worktrees.sh +24 -9
  120. package/scripts/skill-surface-select.ts +33 -40
  121. package/scripts/sync-codex-installed-copies.sh +17 -16
  122. package/scripts/sync-reference-configs.ts +51 -18
  123. package/scripts/test-file-durations.json +3 -20
  124. package/src/cli/commands/architecture-debt.ts +1 -2
  125. package/src/cli/commands/architecture-projection.ts +3 -2
  126. package/src/cli/commands/board.ts +77 -6
  127. package/src/cli/commands/candidate-reconciliation.ts +24 -14
  128. package/src/cli/commands/capability-context.ts +1 -1
  129. package/src/cli/commands/doctor.ts +43 -47
  130. package/src/cli/commands/fleet.ts +1 -143
  131. package/src/cli/commands/global-runtime.ts +90 -64
  132. package/src/cli/commands/herdr-skill.ts +6 -2
  133. package/src/cli/commands/herdr.ts +3 -2
  134. package/src/cli/commands/init-hook.ts +37 -24
  135. package/src/cli/commands/init.ts +16 -20
  136. package/src/cli/commands/install.ts +1 -3
  137. package/src/cli/commands/retention.ts +2 -1
  138. package/src/cli/commands/review.ts +1 -1
  139. package/src/cli/commands/setup-snapshot.ts +1 -2
  140. package/src/cli/commands/state.ts +0 -25
  141. package/src/cli/commands/status.ts +34 -64
  142. package/src/cli/commands/tools.ts +16 -3
  143. package/src/cli/commands/upgrade.ts +9 -2
  144. package/src/cli/hook/agent-notice.ts +2 -2
  145. package/src/cli/hook/return-channel.ts +6 -34
  146. package/src/cli/hook/route-registry.ts +0 -7
  147. package/src/cli/hook/subagent-context.ts +0 -6
  148. package/src/cli/index.ts +231 -139
  149. package/src/cli/installer/install-profile.ts +756 -679
  150. package/src/cli/installer/install-state-migration.ts +295 -0
  151. package/src/cli/installer/managed-entries.ts +4 -9
  152. package/src/cli/installer/skill-projection.ts +8 -6
  153. package/src/cli/installer/targets/claude.ts +1 -1
  154. package/src/cli/installer/targets/codex.ts +1 -1
  155. package/src/cli/installer/types.ts +1 -3
  156. package/src/cli/installer/uninstall.ts +4 -4
  157. package/src/cli/installer/waza-rules.ts +6 -6
  158. package/src/core/architecture/projection.ts +16 -0
  159. package/src/core/board/attention-delivery.ts +124 -0
  160. package/src/core/board/attention.ts +92 -5
  161. package/src/core/board/board.ts +36 -8
  162. package/src/core/board/dependency-migration.ts +258 -0
  163. package/src/core/board/hazards.ts +84 -0
  164. package/src/core/board/source.ts +7 -3
  165. package/src/core/decision/notify-relay-record.ts +52 -0
  166. package/src/core/fleet/task-message-order.ts +11 -0
  167. package/src/core/operator/bot-access.ts +2 -1
  168. package/src/core/operator/notify-status.ts +1 -48
  169. package/src/core/operator/repositories.ts +72 -0
  170. package/src/core/operator/seat-launch.ts +9 -2
  171. package/src/core/operator/task-messages.ts +138 -0
  172. package/src/core/publication/feedback.ts +0 -4
  173. package/src/core/review/review-publish.ts +2 -2
  174. package/src/core/sessions/session-selector.ts +0 -33
  175. package/src/core/skill-surface/catalog.ts +62 -275
  176. package/src/core/skill-surface/plugin-manifest.ts +95 -0
  177. package/src/core/tools/catalog.ts +10 -14
  178. package/src/effects/admission/admission-source.ts +0 -11
  179. package/src/effects/admission/admission-store.ts +0 -15
  180. package/src/effects/adoption/standard-plan.ts +8 -9
  181. package/src/effects/architecture/archcontext-owners.ts +12 -49
  182. package/src/effects/architecture/archctx-provider.ts +12 -112
  183. package/src/effects/architecture/architecture-read.ts +186 -0
  184. package/src/effects/architecture/model-reader.ts +2 -2
  185. package/src/effects/architecture/projection-apply.ts +1 -2
  186. package/src/effects/board/attention-watch.ts +186 -0
  187. package/src/effects/board/collect.ts +56 -4
  188. package/src/effects/board/dependency-migration.ts +229 -0
  189. package/src/effects/dev-activity/collector.ts +3 -17
  190. package/src/effects/dsh-plugin-state.ts +57 -0
  191. package/src/effects/fleet/provider-feedback.ts +4 -78
  192. package/src/effects/fleet/task-inbox.ts +26 -106
  193. package/src/effects/github/issues.ts +14 -16
  194. package/src/effects/github/policy.ts +39 -11
  195. package/src/effects/host-skill-roots.ts +8 -4
  196. package/src/effects/operator/architecture-map-worker.ts +14 -40
  197. package/src/effects/operator/architecture.ts +2 -2
  198. package/src/effects/operator/doc-session-finalize-scope.ts +2 -1
  199. package/src/effects/operator/execution-state.ts +3 -20
  200. package/src/effects/operator/notify-status.ts +2 -4
  201. package/src/effects/operator/repositories.ts +27 -0
  202. package/src/effects/operator/seats-configuration.ts +10 -10
  203. package/src/effects/operator/server.ts +123 -393
  204. package/src/effects/operator/task-diff.ts +1 -44
  205. package/src/effects/operator/task-messages.ts +31 -0
  206. package/src/effects/operator/task-read-process.ts +5 -18
  207. package/src/effects/publication/merge-readiness.ts +6 -314
  208. package/src/effects/publication/test-execution-evidence.ts +1 -66
  209. package/src/effects/refactor/archctx-provider.ts +2 -2
  210. package/src/effects/refactor/recommendations.ts +1 -1
  211. package/src/effects/repo-registry.ts +15 -1
  212. package/src/effects/review-runner/task-pre-prompt-inbox-consumer.ts +1 -2
  213. package/src/effects/review-runner/task-pre-prompt-inbox.ts +1 -2
  214. package/src/effects/review-runner/task-review-runner.ts +3 -3
  215. package/src/effects/sessions/admitted-source.ts +1 -86
  216. package/src/effects/state/resolve-effective-state.ts +1 -1
  217. package/src/effects/strategy/skill.ts +1 -1
  218. package/src/effects/terminal/herdr-core.ts +72 -9
  219. package/src/effects/terminal/herdr-notify-install.ts +6 -77
  220. package/src/effects/terminal/native-task-session.ts +1 -12
  221. package/src/effects/terminal/notify-read.ts +138 -0
  222. package/src/effects/terminal/notify-relay.ts +5 -62
  223. package/src/effects/terminal/task-role-profiles.ts +1 -4
  224. package/src/effects/terminal/task-session-record.ts +64 -3
  225. package/src/effects/terminal/task-session.ts +2 -32
  226. package/src/effects/upgrade/legacy-inventory.ts +8 -12
  227. package/src/operator-web/App.tsx +54 -167
  228. package/src/operator-web/ArchitectureMap.tsx +1 -1
  229. package/src/operator-web/BoardPage.tsx +14 -7
  230. package/src/operator-web/BotsPage.tsx +2 -1
  231. package/src/operator-web/NavRail.tsx +1 -1
  232. package/src/operator-web/RepositoriesPage.tsx +95 -35
  233. package/src/operator-web/SeatsPage.tsx +2 -5
  234. package/src/operator-web/SettingsPage.tsx +1 -1
  235. package/src/operator-web/TaskDrawer.tsx +76 -7
  236. package/src/operator-web/ToolsPage.tsx +1 -1
  237. package/src/operator-web/WorktreesPage.tsx +1 -1
  238. package/src/operator-web/app.css +2 -66
  239. package/src/operator-web/board-view.ts +1 -1
  240. package/src/operator-web/bots.ts +1 -1
  241. package/src/operator-web/brand.tsx +1 -0
  242. package/src/operator-web/fixtures/board-1474.json +437 -0
  243. package/src/operator-web/fixtures/bots.ts +1 -1
  244. package/src/operator-web/fixtures/dev-activity.ts +37 -6
  245. package/src/operator-web/fixtures/index.ts +28 -20
  246. package/src/operator-web/fixtures/settings.ts +1 -1
  247. package/src/operator-web/fixtures/setup.ts +1 -8
  248. package/src/operator-web/i18n.ts +101 -389
  249. package/src/operator-web/operator-api-error.ts +31 -0
  250. package/src/operator-web/repositories.ts +55 -0
  251. package/src/operator-web/repository-reads.ts +55 -1
  252. package/src/operator-web/settings.ts +2 -2
  253. package/src/operator-web/workspace-location.ts +2 -3
  254. package/src/operator-web/worktrees.ts +2 -2
  255. package/agents/fleet/orchestrator.md +0 -36
  256. package/dist/operator-ui/assets/architecture-7GRP2DOG-CAUav40i.js +0 -1
  257. package/dist/operator-ui/assets/channel-J9t0gGUF.js +0 -1
  258. package/dist/operator-ui/assets/classDiagram-ZZMXUADV-DXPXgEqY.js +0 -1
  259. package/dist/operator-ui/assets/classDiagram-v2-VYDZK3BY-DXPXgEqY.js +0 -1
  260. package/dist/operator-ui/assets/eventmodeling-NTZA5JFV-DqJVxgEO.js +0 -1
  261. package/dist/operator-ui/assets/flowDiagram-HODETNUW-NvyYrdhg.js +0 -1
  262. package/dist/operator-ui/assets/index-CAtU8UhN.js +0 -27
  263. package/dist/operator-ui/assets/index-DcWFPCXl.css +0 -2
  264. package/dist/operator-ui/assets/railroad-abnf-HS5TGJTU-7fl6y-zk.js +0 -1
  265. package/dist/operator-ui/assets/railroad-ebnf-LZEXJU2U-nFqux8Y2.js +0 -1
  266. package/dist/operator-ui/assets/railroad-peg-WCYAUIDC-DfJI7HIW.js +0 -1
  267. package/dist/operator-ui/assets/stateDiagram-v2-MP3YSRHH-BrcHaQr3.js +0 -1
  268. package/dist/operator-ui/assets/swimlanesDiagram-VR7AAH4N-BBUuY_m3.js +0 -8
  269. package/src/cli/commands/external-source.ts +0 -143
  270. package/src/cli/hook/board-slice-context.ts +0 -44
  271. package/src/core/external-sources/admitted-binding.ts +0 -76
  272. package/src/core/external-sources/binding.ts +0 -21
  273. package/src/core/external-sources/issue-observation.ts +0 -294
  274. package/src/core/external-sources/projection.ts +0 -75
  275. package/src/core/fleet/board.ts +0 -388
  276. package/src/core/operator/admitted-task-activity.ts +0 -88
  277. package/src/core/operator/admitted-task-context.ts +0 -35
  278. package/src/core/operator/fleet-snapshot.ts +0 -188
  279. package/src/core/operator/observation-identity.ts +0 -4
  280. package/src/core/operator/task-activity.ts +0 -41
  281. package/src/core/operator/task-diff.ts +0 -42
  282. package/src/core/sessions/task-sessions.ts +0 -41
  283. package/src/core/skill-surface/profile-components.ts +0 -39
  284. package/src/core/state/provider-board.ts +0 -55
  285. package/src/effects/external-sources/binding.ts +0 -101
  286. package/src/effects/external-sources/refresh.ts +0 -158
  287. package/src/effects/external-sources/store.ts +0 -406
  288. package/src/effects/fleet/board.ts +0 -619
  289. package/src/effects/operator/admitted-task-activity.ts +0 -39
  290. package/src/effects/operator/fleet-collector-process.ts +0 -125
  291. package/src/effects/operator/task-context.ts +0 -31
  292. package/src/effects/sessions/task-sessions.ts +0 -73
  293. package/src/effects/state/collect-provider-board-inputs.ts +0 -43
  294. package/src/effects/state/collect-slice-inputs.ts +0 -21
  295. package/src/operator-web/AdmittedTaskActivity.tsx +0 -61
  296. package/src/operator-web/AdmittedTaskContext.tsx +0 -30
  297. package/src/operator-web/RepositoryWorkspace.tsx +0 -749
  298. package/src/operator-web/TaskDiff.tsx +0 -103
  299. package/src/operator-web/fixture.ts +0 -323
  300. package/src/operator-web/fleet-api.ts +0 -88
  301. package/src/operator-web/task-context.ts +0 -9
  302. package/src/operator-web/task-location.ts +0 -34
  303. package/src/operator-web/types.ts +0 -683
  304. package/src/operator-web/worklist.ts +0 -132
package/README.md CHANGED
@@ -119,11 +119,14 @@ helpers do not rediscover tools from a caller's `PATH`; rerun
119
119
  `repo-harness update` after relocating or replacing Git for Windows.
120
120
 
121
121
  The global bootstrap: installs the npm package as the global CLI, refreshes
122
- repo-harness skill aliases, installs user-level hook adapters, and records an
123
- explicit install profile. It is idempotent and does not apply repo-local workflow
124
- files to the current directory. `--dry-run --json` lists components to install,
125
- skip, and remove first. Profiles, native Codex delegation authority, refresh commands, and the
126
- read-only `setup check` audit:
122
+ repo-harness skill aliases, installs user-level hook adapters, and records the
123
+ plugin selection. With no flag it installs core and every plugin that the host
124
+ can run; `--plugins <ids>` selects exactly those plugins, and `--no-plugins`
125
+ installs core only. It is idempotent and does not apply repo-local workflow
126
+ files to the current directory. `--dry-run --json` lists the plugins to install,
127
+ keep, remove and skip first. Plugins, the protocol 2 to 3 migration, native
128
+ Codex delegation authority, refresh commands, and the read-only `setup check`
129
+ audit:
127
130
  [`install-profiles.md`](docs/reference-configs/install-profiles.md).
128
131
 
129
132
  ### 3. Preview the repo-local contract
@@ -245,7 +248,7 @@ task queue.
245
248
  | --- | --- | --- |
246
249
  | Issue and PR | Scope, ownership, dependencies, status and review evidence | The assigned GitHub issue |
247
250
  | Session support | Repository context, hooks and handoffs | `repo-harness init` |
248
- | Existing observations | Read retained task and runtime records | `repo-harness fleet board --json` |
251
+ | Board | Read the sub-issues, pull requests, plan block and seat terminals of one parent issue | `repo-harness board --parent <n> --json` |
249
252
 
250
253
  New work uses a bounded issue brief and the current repository rules. Historical
251
254
  Sprint, binding and Lease records remain readable for operator and closeout
@@ -323,15 +326,15 @@ Keep the issue, branch, verification result and next action in the handoff.
323
326
  Re-read the issue and PR before continuing. Use the approved OAR and Herdr host
324
327
  paths for an assigned agent. repo-harness has no PM or Engineer scheduling API.
325
328
 
326
- ### Existing task observations
329
+ ### Board of a parent issue
327
330
 
328
331
  ```bash
329
- repo-harness fleet board --json
332
+ repo-harness board --parent <n> --json
330
333
  ```
331
334
 
332
- The board reads retained task, Lease, publication, inbox and runtime evidence.
333
- It does not claim work or create an Engineer binding. Completion and cleanup
334
- helpers remain for existing records.
335
+ The board reads the sub-issues, pull requests, plan block and hc seat terminals
336
+ of one parent issue. It does not claim work or create an Engineer binding.
337
+ Completion and cleanup helpers remain for existing records.
335
338
 
336
339
  Use [repo-harness](SKILL.md) for scope and worker ownership,
337
340
  [repo-harness-product](assets/skills/repo-harness-product/SKILL.md) for requested
@@ -351,20 +354,6 @@ violations. repo-harness shows each suggestion with its metrics, bounded evidenc
351
354
  and module statistics, and records the user decision. It never executes a refactor; an
352
355
  accepted suggestion goes through the normal plan and pull request workflow.
353
356
 
354
- ### External source intake
355
-
356
- ```bash
357
- repo-harness external-source refresh # one bounded, explicitly enabled GitHub observation
358
- repo-harness external-source bind --repo <id> --source-revision <digest> --session <selector.json>
359
- repo-harness external-source bindings # binding edges and current drift attention
360
- ```
361
-
362
- Intake is inert by design. An observed Issue mints no execution authority and
363
- does not become a runnable task on its own; binding attaches an immutable source
364
- revision to an existing admitted session selected by its provider issue, immutable
365
- claim, approved grant and session binding digest. The selector comes from task
366
- session discovery. Binding never creates a claim or approval.
367
-
368
357
  ### Persistent acceptance review
369
358
 
370
359
  Before review, configure the repository's manual `external_sources` policy and
@@ -613,8 +602,8 @@ repo-harness commit scripts or hooks unless that repo adopts the same policy.
613
602
 
614
603
  ## Current Release
615
604
 
616
- - npm package: `repo-harness@0.25.3`
617
- - Generated workflow stamp: `repo-harness@0.25.3+template@0.25.3`
605
+ - npm package: `repo-harness@0.25.4`
606
+ - Generated workflow stamp: `repo-harness@0.25.4+template@0.25.4`
618
607
  - GitHub repository: `Ancienttwo/repo-harness`
619
608
  - Release notes and history: [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
620
609
 
@@ -9,7 +9,7 @@ effort: high
9
9
  Review only a medium or high tier diff under Review by risk in the development flow; a low tier gets no review.
10
10
  When `agents/fleet/known-gaps.md` is present, read the row for the PR's producer and run its named checks in addition to the tier's review. The table rules govern how the row combines with the review.
11
11
  Read the current diff only. A defect in untouched code is a non-blocking note, not a finding.
12
- From the second round, read only the hunks that changed after the previous round.
12
+ Take the scope of each round from the round rules in `repo-harness-issue-flow`, `references/acceptor.md` §2.2.
13
13
  Keep review read-only. The Bot owns fixes and publication.
14
14
  Return `VERDICT: PASS`, `VERDICT: FAIL`, or `VERDICT: BLOCKED` first.
15
15
  Record branch, HEAD, dirty scope and the assigned goal. Preserve unrelated work.
@@ -6,7 +6,7 @@ using System.Diagnostics;
6
6
  using System.Runtime.InteropServices;
7
7
  using System.Text;
8
8
 
9
- public static class RepoHarnessFleetJob {
9
+ public static class RepoHarnessOperatorJob {
10
10
  [StructLayout(LayoutKind.Sequential)]
11
11
  public struct BasicLimitInformation {
12
12
  public long PerProcessUserTimeLimit;
@@ -137,9 +137,9 @@ public static class RepoHarnessFleetJob {
137
137
  }
138
138
  '@
139
139
 
140
- $job = [RepoHarnessFleetJob]::CreateJobObject([IntPtr]::Zero, $null)
140
+ $job = [RepoHarnessOperatorJob]::CreateJobObject([IntPtr]::Zero, $null)
141
141
  if ($job -eq [IntPtr]::Zero) { throw 'CreateJobObject failed' }
142
- [RepoHarnessFleetJob]::ConfigureKillOnClose($job)
142
+ [RepoHarnessOperatorJob]::ConfigureKillOnClose($job)
143
143
 
144
144
  function Write-Response([string]$type) {
145
145
  [Console]::Out.WriteLine((@{ type = $type } | ConvertTo-Json -Compress))
@@ -149,26 +149,26 @@ function Write-Response([string]$type) {
149
149
  function Wait-ForZeroActiveProcesses([IntPtr]$handle) {
150
150
  $deadline = [DateTime]::UtcNow.AddSeconds(5)
151
151
  while ([DateTime]::UtcNow -lt $deadline) {
152
- if ([RepoHarnessFleetJob]::ActiveProcesses($handle) -eq 0) { return $true }
152
+ if ([RepoHarnessOperatorJob]::ActiveProcesses($handle) -eq 0) { return $true }
153
153
  Start-Sleep -Milliseconds 10
154
154
  }
155
- return ([RepoHarnessFleetJob]::ActiveProcesses($handle) -eq 0)
155
+ return ([RepoHarnessOperatorJob]::ActiveProcesses($handle) -eq 0)
156
156
  }
157
157
 
158
158
  function Close-CleanJob([IntPtr]$handle, [bool]$terminate) {
159
- if ($terminate -and -not [RepoHarnessFleetJob]::TerminateJobObject($handle, 1)) {
159
+ if ($terminate -and -not [RepoHarnessOperatorJob]::TerminateJobObject($handle, 1)) {
160
160
  throw 'TerminateJobObject failed'
161
161
  }
162
162
  if (-not (Wait-ForZeroActiveProcesses $handle)) { return $false }
163
- if (-not [RepoHarnessFleetJob]::CloseHandle($handle)) { throw 'CloseHandle failed' }
163
+ if (-not [RepoHarnessOperatorJob]::CloseHandle($handle)) { throw 'CloseHandle failed' }
164
164
  return $true
165
165
  }
166
166
 
167
167
  function Close-FailedJob([IntPtr]$handle) {
168
168
  if ($handle -eq [IntPtr]::Zero) { return }
169
- try { [void][RepoHarnessFleetJob]::TerminateJobObject($handle, 1) } catch { }
169
+ try { [void][RepoHarnessOperatorJob]::TerminateJobObject($handle, 1) } catch { }
170
170
  try { [void](Wait-ForZeroActiveProcesses $handle) } catch { }
171
- try { [void][RepoHarnessFleetJob]::CloseHandle($handle) } catch { }
171
+ try { [void][RepoHarnessOperatorJob]::CloseHandle($handle) } catch { }
172
172
  }
173
173
 
174
174
  function Stop-ExactCollector([System.Diagnostics.Process]$process) {
@@ -207,7 +207,7 @@ try {
207
207
  }
208
208
  $startInfo = New-Object System.Diagnostics.ProcessStartInfo
209
209
  $startInfo.FileName = [string]$request.executable
210
- $startInfo.Arguments = [RepoHarnessFleetJob]::QuoteArgument([string]$request.collector_path)
210
+ $startInfo.Arguments = [RepoHarnessOperatorJob]::QuoteArgument([string]$request.collector_path)
211
211
  $startInfo.UseShellExecute = $false
212
212
  $startInfo.RedirectStandardInput = $true
213
213
  $startInfo.RedirectStandardOutput = $true
@@ -228,12 +228,12 @@ try {
228
228
  }
229
229
  # This is the exact kernel handle returned for the child this controller
230
230
  # created. No PID is ever accepted or reopened across this boundary.
231
- if (-not [RepoHarnessFleetJob]::AssignProcessToJobObject($job, $collector.Handle)) {
231
+ if (-not [RepoHarnessOperatorJob]::AssignProcessToJobObject($job, $collector.Handle)) {
232
232
  if (-not (Stop-ExactCollector $collector)) { throw 'collector assignment failed and exact collector did not exit' }
233
233
  Write-Response 'cleanup_failed'
234
234
  break
235
235
  }
236
- [RepoHarnessFleetJob]::BeginForwarding($collector)
236
+ [RepoHarnessOperatorJob]::BeginForwarding($collector)
237
237
  $assigned = $true
238
238
  Write-Response 'assigned'
239
239
  continue
@@ -16,10 +16,10 @@
16
16
  ## CI cost
17
17
  Size PR CI by the diff, the same as step 4. A full suite on each small PR spends runner time and adds no evidence that the affected tests and the daily run do not already give. The repo-harness source repository uses this shape in `.github/workflows/ci.yml`.
18
18
 
19
- - Triggers: run PR checks on `pull_request`. Do not also trigger `push` on feature branches; that runs each commit twice. A `push` to the default branch runs the affected selection for the merged diff, not the full suite.
19
+ - Triggers: run PR checks on `pull_request`. Do not also trigger `push` on feature branches; that runs each commit twice. A `push` to the default branch runs only the selection job in report mode, with no tests.
20
20
  - Superseded runs: set `concurrency` to one group per PR number with `cancel-in-progress: true` for `pull_request` events only. Do not cancel scheduled runs.
21
21
  - Selection: a first job reads the diff against the PR base and outputs a mode. Later jobs read the mode in a job-level `if:`.
22
- - A docs-only diff (`docs/**/*.md`, README, CHANGELOG) skips build and test jobs when no test or script reads the changed files. Keep link and format checks. A document that is program input, such as a projected copy, a parsed contract or a generated region, runs its consumer tests.
22
+ - A docs-only diff runs only the tests that name a changed document, including a deleted one. With no such test, it skips build and test jobs, and the required aggregate check still reports. One function names the documentation paths; in the repo-harness source repository it is `isDocumentationPath` in `scripts/select-ci-coverage.ts`. Keep link, format and advisory document checks. A document that is program input, such as a projected copy, a parsed contract or a generated region, is outside the documentation rule or has a test that names it, so a change to it runs its consumer tests.
23
23
  - A code diff runs typecheck plus the tests that the diff affects. Use the runner's change detection (`vitest --changed`, `jest --changedSince`, `nx affected`, `turbo run --filter=...[<base>]`, `pytest --testmon`) or an import-graph selector.
24
24
  - A change to a shared input (lockfile, root build or test config, CI workflow, a test helper with no mapped consumer) runs the full suite on that PR. A selector that cannot map a changed file widens the run; it never shrinks it.
25
25
  - Required checks: skip a job with a job-level `if:`, not with workflow-level `paths` or `paths-ignore`. GitHub counts a skipped job as passing for a required check. A workflow that never starts leaves its required check pending and blocks the merge.
@@ -108,10 +108,14 @@ that PM restriction. OAR owns coding-agent execution. herdr-core (`hc`) owns
108
108
  terminals, and Herdr.app owns panes and visibility. A new Bot host adapts to that path; it does not add a new coding
109
109
  runtime or task authority.
110
110
 
111
- The `orchestrator` fleet role is the long-lived coordinator and integrator seat
112
- of `repo-harness-issue-flow`. Start it with `claude --agent orchestrator`. The
113
- fleet projects it to Claude only. It dispatches work and follows PRs and CI. It
114
- edits no product code and dispatches no subagents.
111
+ The orchestrator seat is the long-lived coordinator and integrator seat of
112
+ `repo-harness-issue-flow`. Start it with the argv that
113
+ `repo-harness seats argv orchestrator` prints. It dispatches work and follows
114
+ PRs and CI. It edits no product code. It may call the read-only roles
115
+ `gatekeeper`, `explorer` and `deep-reasoner` as sub-agents. The writers
116
+ (`fast-worker`, `deep-worker`, `root-cause-prover`) and the Codex
117
+ cross-review never run as its sub-agents: they run in Herdr seats, for
118
+ worktree isolation and one writer per file.
115
119
 
116
120
  The bot selects scope, worker and verification by risk. Use independent gatekeeper/cross-model review for large changes, security/permissions or model uncertainty; do not rerun a passing check or require multiple re-gates.
117
121
 
@@ -119,13 +123,19 @@ The bot selects scope, worker and verification by risk. Use independent gatekeep
119
123
 
120
124
  A hazard is a change that runs or exposes code, secrets, data or network access on a machine or in CI. One hit on any item sets an internal PR to High under [Review by risk](#review-by-risk). An external PR stops and escalates under its protocol; that behavior does not change.
121
125
 
122
- - Changes a workflow or other CI configuration under `.github/`.
123
- - Changes a release, publish, update or install script, or a package script that runs at install or release.
124
- - Changes a `Dockerfile` or another container build file.
125
- - Adds a network address, endpoint or telemetry.
126
- - Reads credentials, such as tokens, keys, `~/.ssh`, `~/.npmrc` or credential environment variables.
127
- - Adds or changes a dependency or a lockfile entry. A lockfile-only bump is still a hit; its source does not lower the tier.
128
- - Adds a binary, or an encoded or opaque blob, such as base64, long hex, minified or otherwise unreadable content.
126
+ <!-- review-hazards:list:begin -->
127
+ The board rule R3 reads only the rows with `path_visible: true`: a changed path that matches one of their patterns is a hit. Reviewers apply every row.
128
+
129
+ | Hazard | Paths that R3 reads |
130
+ | --- | --- |
131
+ | Changes a workflow or other CI configuration under `.github/`. | `.github/**` |
132
+ | Changes a release, publish, update or install script, or a package script that runs at install or release. | None (`path_visible: false`) |
133
+ | Changes a `Dockerfile` or another container build file. | `**/Dockerfile`, `**/Dockerfile.*`, `**/*.Dockerfile`, `**/Containerfile`, `**/Containerfile.*` |
134
+ | Adds a network address, endpoint or telemetry. | None (`path_visible: false`) |
135
+ | Reads credentials, such as tokens, keys, `~/.ssh`, `~/.npmrc` or credential environment variables. | None (`path_visible: false`) |
136
+ | Adds or changes a dependency or a lockfile entry. A lockfile-only bump is still a hit; its source does not lower the tier. | `**/bun.lock`, `**/bun.lockb`, `**/package-lock.json`, `**/npm-shrinkwrap.json`, `**/yarn.lock`, `**/pnpm-lock.yaml`, `**/Cargo.lock`, `**/go.sum`, `**/poetry.lock`, `**/uv.lock`, `**/Pipfile.lock`, `**/Gemfile.lock`, `**/composer.lock` |
137
+ | Adds a binary, or an encoded or opaque blob, such as base64, long hex, minified or otherwise unreadable content. | None (`path_visible: false`) |
138
+ <!-- review-hazards:list:end -->
129
139
 
130
140
  ### Review by risk
131
141
  The diff sets the tier. The author does not: a human change and a model change with the same diff get the same tier. One hit on a higher signal sets the higher tier.
@@ -136,7 +146,7 @@ The diff sets the tier. The author does not: a human change and a model change w
136
146
  | Medium | Cross-module behavior changes; public API changes; more than 10 non-generated implementation files; shared runtime changes; authentication-adjacent changes; or unresolved behavior uncertainty. |
137
147
  | High | Any hit on the [change hazard list](#change-hazards); permissions or sandbox grants; hooks and the mutation guard; deletion paths; `deploy/sql/`; code that writes to GitHub; or a change across more than one capability boundary in `.archcontext/model/`. |
138
148
 
139
- Review follows the `repo-harness-issue-flow` skill, [references/acceptor.md](../../assets/skills/repo-harness-issue-flow/references/acceptor.md). The tier selects the depth: no independent review for Low, one fresh-context review for Medium, and the gatekeeper plus one cross-model review for High, one round each. The Acceptor SOP owns the round, findings and publish steps.
149
+ Review follows the `repo-harness-issue-flow` skill, [references/acceptor.md](../../assets/skills/repo-harness-issue-flow/references/acceptor.md). The tier selects the depth: no independent review for Low, one fresh-context review for Medium, and the gatekeeper plus one review, preferably cross-model, for High. The round rules (who reviews each round, the claims of a round, the round-2 scope and the convergence rule) are only in [references/acceptor.md §2.2](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#22-rounds). The Acceptor SOP owns the round, findings and publish steps.
140
150
 
141
151
  Low accept-seat skip: a Low PR whose `Required / CI` is SUCCESS on the PR head and whose PR body holds the author verification evidence (the commands and their outcomes) takes no accept seat and no acceptance record. Do not dispatch a Codex, Herdr or OAR accept seat for it. `Required / CI` and that evidence are the proof surface. A Low PR that lacks either condition is not eligible to merge until both hold. Medium and High keep the full Acceptor SOP.
142
152
 
@@ -144,19 +154,19 @@ Worked example (docs-only Low path): the PR edits `docs/bot-onboarding.md` only.
144
154
 
145
155
  Rules for every tier:
146
156
  - The reviewer reads the current diff only. A defect in code the diff did not touch is a non-blocking note; open an issue for it, do not add a finding.
147
- - From the second round, the reviewer reads only the hunks that changed after the previous round. The three-round limit stays.
157
+ - Review rounds follow [references/acceptor.md §2.2](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#22-rounds). The reviewer reads CI on the exact head and the recorded evidence, and does not rerun a passing check ([references/acceptor.md §2.1](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#21-evidence)).
148
158
  - When an independent review ran, the PR description lists each finding with its disposition: fixed, or closed with the reason.
149
159
  - A low tier adds no review. A new test file or a rebase does not raise the tier.
150
160
  - Changing implementation and test assertions together does not raise the tier. Within the tier's existing review, check whether assertions preserve the intended behavior and whether removed or weakened coverage has a valid requirement-based reason. At Low, the author performs this check in self-review. Record the reason for each assertion change in the PR; never change assertions only to make a test pass. Do not dispatch a separate test-review gate.
151
161
  - A parent, coordinator or merge session reuses recorded acceptance when the reviewed diff, relevant base context, verification inputs and environment still match, and the review meets the current tier. The PR records the reviewed revision or diff, commands, results and finding dispositions. A change of session or reviewer is not a reason to repeat acceptance.
152
162
  - A batch integration PR (`repo-harness-issue-flow`, [references/orchestrator.md](../../assets/skills/repo-harness-issue-flow/references/orchestrator.md) §9.3) reuses the acceptance record of each member when every member merged without conflict and the batch adds no commit of its own. It needs no new review round. A Low member has no acceptance record to reuse. Required checks on the batch head still apply.
153
- - After a change, verify the affected behavior and review the changed hunks with their affected context. Retain valid evidence for unchanged scope; add only missing tier coverage. A rebase alone does not require a new full review, but changed base behavior or conflict resolution can invalidate affected evidence. Reuse never substitutes for required checks on the current head or the current-main merge requirement.
163
+ - After a change, verify the affected behavior. The review scope of each round after a change is in [references/acceptor.md §2.2](../../assets/skills/repo-harness-issue-flow/references/acceptor.md#22-rounds). Retain valid evidence for unchanged scope; add only missing tier coverage. A rebase alone does not require a new full review, but changed base behavior or conflict resolution can invalidate affected evidence. Reuse never substitutes for required checks on the current head or the current-main merge requirement.
154
164
  - A downstream repository maps its own release surfaces, for example public API, wire format, DDL/SQL and permissions, to the High tier.
155
165
 
156
166
  The bot measures progress by side effects only: commits, pushes, evidence events and PR or check changes. It does not resume a worker to check liveness. A worker past its timebox with no new side effect is stalled; stop it or ask the user.
157
167
  Retry by failure mode. Reduce scope after a limit or out-of-memory stop. Move a tool error to another model. A network drop or an unknown failure gets one retry only for a read-only or idempotent call. For a call that can change remote state, check the original request and the provider receipt first; do not retry an unknown effect. After two failures of one task, stop and ask the user.
158
168
  Clear conflicts first. Once conflicts are clear, triage review threads and watch CI in parallel. Classify a CI failure before a retry. A suspected flake gets one fresh build; an identical second failure is not a flake. Classify each review comment as fix, dismiss or ask by the review-comment triage reference of the installed `repo-harness-check` skill.
159
- Stop and ask the user when a command or result names `unknown`, `ambiguous`, `pending`, `unproven`, `identity_lost`, `reconciliation_required` or `recovery_required`, or says `inspect the same`, `inspect same`, `never replay`, `do not resend` or `do not launch again`; when a lease directory is empty or malformed; before a third review round; when a review thread concerns security, authentication, data or migrations; or when a written rule conflicts with observed state.
169
+ Stop and ask the user when a command or result names `unknown`, `ambiguous`, `pending`, `unproven`, `identity_lost`, `reconciliation_required` or `recovery_required`, or says `inspect the same`, `inspect same`, `never replay`, `do not resend` or `do not launch again`; when a lease directory is empty or malformed; when a review thread concerns security, authentication, data or migrations; or when a written rule conflicts with observed state.
160
170
 
161
171
  Pending main push CI follows Daily Flow step 5, not the stop-and-ask rule above.
162
172
 
@@ -1,72 +1,5 @@
1
1
  # External Tooling
2
2
 
3
- ## External Source Intake P0
4
-
5
- `.ai/harness/policy.json#external_sources` is absent by default and is equivalent to the only default, `{ "version": 1, "mode": "off" }`. Refresh never auto-enables from a repository URL, installed `gh`, labels, or registry access mode.
6
-
7
- To enable one manual GitHub evidence refresh, use one exact closed selection shape. Every limit is positive. A label scan requires sorted non-empty `labels_all` and accepts a sorted optional `assignees_any` restriction. Unknown fields and provider values fail closed.
8
-
9
- ```json
10
- {
11
- "external_sources": {
12
- "version": 1,
13
- "mode": "manual",
14
- "github": {
15
- "enabled": true,
16
- "repository": "owner/repository",
17
- "selection": {
18
- "kind": "labels",
19
- "labels_all": ["ready"],
20
- "assignees_any": []
21
- },
22
- "limits": {
23
- "max_pages": 5,
24
- "max_issues": 500,
25
- "max_body_bytes": 65536,
26
- "max_total_bytes": 1048576,
27
- "deadline_ms": 30000
28
- }
29
- }
30
- }
31
- }
32
- ```
33
-
34
- For an explicitly reviewed one-shot batch, select exact Issue numbers instead of requiring provider labels or scanning the whole repository:
35
-
36
- ```json
37
- {
38
- "external_sources": {
39
- "version": 1,
40
- "mode": "manual",
41
- "github": {
42
- "enabled": true,
43
- "repository": "Ancienttwo/byok-sdk",
44
- "selection": {
45
- "kind": "issue_numbers",
46
- "issue_numbers": [102, 103, 104, 105, 106, 107, 108, 109, 110, 111]
47
- },
48
- "limits": {
49
- "max_pages": 1,
50
- "max_issues": 10,
51
- "max_body_bytes": 65536,
52
- "max_total_bytes": 1048576,
53
- "deadline_ms": 30000
54
- }
55
- }
56
- }
57
- }
58
- ```
59
-
60
- Exact-batch refresh resolves only those Issue endpoints and fails the whole attempt if any selected Issue is missing, malformed, a pull request, or exceeds a limit. GitHub assignees, labels, and open/closed state are evidence only: they do not prove whether local work has already been dispatched. Dispatch deduplication belongs to an authenticated binding against canonical repo-harness task identity. The triage, reproduce and fix stage contract for observed issues is in [issue pipeline](issue-pipeline.md).
61
-
62
- `repo-harness external-source refresh --repo <registered-repo-id>` invokes the locally authenticated `gh` client once and records immutable observations plus an attempt receipt under the repository Git common directory. `list` performs no provider call. These records are inert evidence: they do not create or change review admission, priority, provider claims, collaboration, or Agent Runtime state.
63
-
64
- ## External Source Binding WP2
65
-
66
- Binding needs an existing admitted session for the same provider issue. Save one session `selector` object from `repo-harness state board --repository-id <id> --json` as a JSON file. Then run `repo-harness external-source bind --repo <id> --source-revision <digest> --session <file>`. The command requires a strict `read_write` registry grant. The observation's provider repository and issue must match the session admission. The command persists one immutable provenance edge with the exact observation, authorization revision, session selector and admission digest.
67
-
68
- `external-source bindings` reports source, session and authorization drift without mutating work. Retired V1 receipts remain stored without a runtime reader. `external-source context` is the sole provider-content renderer and wraps canonical JSON in `[ExternalSourceUntrusted]`. A binding does not create work or admission. Human acceptance stays at PR merge; only a true `installation_blocker` may pause earlier.
69
-
70
3
  Generated repos route external tooling by host/runtime shape. Task-level
71
4
  skill routing lives in `docs/reference-configs/agentic-development-flow.md`.
72
5
 
@@ -75,7 +8,7 @@ skill routing lives in `docs/reference-configs/agentic-development-flow.md`.
75
8
  - `hai-stack` supplies `geju` for live, pre-contract exploration; only its frozen output enters a contract
76
9
  - Codex automation requires `health`, `check`, and `mermaid` from `~/.codex/skills`
77
10
  - `CodeGraph` is required agent readiness for code navigation and impact tracing
78
- - repo-harness's packaged `agent_fleet` supplies the delegation loop's global agent definitions (`explorer`, `deep-reasoner`, `fast-worker`, `gatekeeper`, `root-cause-prover`, `harness-evaluator`) for both hosts, plus the Claude-only `orchestrator`
11
+ - repo-harness's packaged `agent_fleet` supplies the delegation loop's global agent definitions (`explorer`, `deep-reasoner`, `fast-worker`, `gatekeeper`, `root-cause-prover`, `harness-evaluator`) for both hosts
79
12
 
80
13
  Waza is Codex-first in this contract. `~/.codex/skills` is the Codex runtime
81
14
  source, while `~/.agents/skills` is only the skills CLI staging/cache path used
@@ -221,12 +154,13 @@ number of registered repos that have pending project upgrade work.
221
154
 
222
155
  The cross-review skill is **harness-owned**; its routing source lives in
223
156
  `assets/skills/repo-harness-cross-review/`. Explicit independent review uses
224
- the persistent fleet deep-reasoner task-agent and existing OAR host in Herdr.
157
+ a persistent task session in Herdr: the existing OAR host runs a reviewer with
158
+ the `deep-reasoner` role.
225
159
  The full profile installs this Skill on both hosts; generic-review file Result
226
160
  and typed Receipt own acceptance. The direct advisory runtime is retired.
227
161
  Plugin install/discovery/readiness is not a repo-harness runtime dependency;
228
162
  user-managed plugins remain untouched. Plan consultation uses persistent
229
- task-agent collaborators in Herdr. Review Markdown remains projection only.
163
+ collaborator sessions in Herdr. Review Markdown remains projection only.
230
164
 
231
165
  Reverse Skill is registered from `zhaoxuya520/reverse-skill` as the recommended
232
166
  but explicit-only `reverse-skill-router`. It is not part of either install
@@ -698,8 +632,7 @@ bun add -g @colbymchenry/codegraph@1.6.2 && codegraph sync . && codegraph status
698
632
  `check-agent-tooling.sh`. The single authored source is
699
633
  `package:agents/fleet`; it ships inside the npm package and never requires a
700
634
  network fetch. The managed list is `explorer`, `deep-reasoner`, `fast-worker`,
701
- `deep-worker`, `gatekeeper`, `root-cause-prover`, `harness-evaluator`, and
702
- `orchestrator`.
635
+ `deep-worker`, `gatekeeper`, `root-cause-prover`, and `harness-evaluator`.
703
636
 
704
637
  ### Two targets, one source
705
638
 
@@ -707,14 +640,9 @@ network fetch. The managed list is `explorer`, `deep-reasoner`, `fast-worker`,
707
640
  is installed byte-for-byte.
708
641
  - Codex: `~/.codex/agents/<agent>.toml` — generated deterministically from the
709
642
  same packaged `.md`; there is no second authored copy for Codex.
710
- - `orchestrator` is projected to Claude only (`CLAUDE_ONLY_AGENTS` in
711
- `src/effects/terminal/task-role-profiles.ts`). The installer writes no
712
- `~/.codex/agents/orchestrator.toml`, and the checker does not expect one.
713
- Start it as a long-lived session with `claude --agent orchestrator`. It is
714
- the coordinator and integrator seat of `repo-harness-issue-flow`
715
- (`opus/xhigh`, read-only tools plus `gh` and `hc send`). It has no
716
- Codex target because a Codex fleet TOML runs in a read-only sandbox without
717
- network access, which cannot run `gh`.
643
+ - The fleet holds sub-agent roles only. The orchestrator seat is not a fleet
644
+ role: `repo-harness seats argv orchestrator` prints its launch argv from the
645
+ `seats` section of `~/.repo-harness/config.json`.
718
646
 
719
647
  ### `.md` -> `.toml` mapping
720
648
 
@@ -997,7 +925,6 @@ managed files by hand:
997
925
  ~/.claude/agents/gatekeeper.md
998
926
  ~/.claude/agents/root-cause-prover.md
999
927
  ~/.claude/agents/harness-evaluator.md
1000
- ~/.claude/agents/orchestrator.md
1001
928
  ~/.codex/agents/explorer.toml
1002
929
  ~/.codex/agents/deep-reasoner.toml
1003
930
  ~/.codex/agents/fast-worker.toml
@@ -84,7 +84,7 @@ When a task requires broad research, repo archaeology, multi-source synthesis, o
84
84
  - Implementation sub-agents may run scoped typecheck and affected tests in their own worktree. They commit early and return their check results. An evidence role whose task is a named check, such as a root-cause reproduction, still runs that check and does not commit.
85
85
  - The parent agent owns task management, conflict resolution, build and post-merge integration verification, including typecheck and affected tests.
86
86
  - After integration, the parent removes each sub-agent worktree and branch whose commits are in the task branch and whose checkout is clean. It also removes the intermediate build output and temporary files that the work created. Other deletion still needs the user.
87
- - The `orchestrator` fleet role is a long-lived Claude session (`claude --agent orchestrator`), not a sub-agent. The fleet projects it to Claude only. It dispatches through Herdr or MCP, never through sub-agents, and edits no product code.
87
+ - The orchestrator seat is a long-lived session that starts from `repo-harness seats argv orchestrator`, not a sub-agent. It may call the read-only roles `gatekeeper`, `explorer` and `deep-reasoner` as sub-agents. It dispatches writers (`fast-worker`, `deep-worker`, `root-cause-prover`) and the Codex cross-review only to Herdr seats, for worktree isolation and one writer per file. It edits no product code.
88
88
 
89
89
  ## Peer Harness Collaboration
90
90
 
@@ -7,7 +7,7 @@ layers hold every workflow fact, and each fact has one source. Root
7
7
  | Layer | Question | Source |
8
8
  | --- | --- | --- |
9
9
  | Flow | Who acts, when, and in what order | `repo-harness-issue-flow` skill |
10
- | Roles | Which seat and model fill a role | `agents/fleet/` |
10
+ | Roles | Which seat runs which model, and which sub-agents it may call | The `seats` section of `~/.repo-harness/config.json`; sub-agent roles in `agents/fleet/` |
11
11
  | Tools | How an action runs | Herdr, the review and publication commands, `contract-worktree` |
12
12
 
13
13
  ## Flow
@@ -20,7 +20,7 @@ task state.
20
20
  - An orchestrator splits the goal into issues, dispatches work and
21
21
  integrates the results.
22
22
  - A worker claims one issue and delivers one PR.
23
- - An acceptor reviews one round of the PR.
23
+ - An acceptor takes one review in one round of the PR.
24
24
  - An integrator merges. Only `repo-harness publication merge` runs this
25
25
  step.
26
26
 
@@ -37,8 +37,11 @@ rollback in the PR description. A one-time decision goes in the issue.
37
37
 
38
38
  ## Roles
39
39
 
40
- Roles are seats in the flow. The model choice is advice, not a gate. Any
41
- host can fill a seat.
40
+ A seat is a process: the orchestrator, the advisor or a worker. A
41
+ sub-agent is an `agents/fleet/` role that runs inside a seat process. A
42
+ claim role (coordinator, writer, head owner, integrator, acceptor) is the
43
+ role that a GitHub claim gives on one issue or PR. The model choice is
44
+ advice, not a gate. Any host can fill a seat.
42
45
 
43
46
  | Role | Suggested fit | Writes |
44
47
  | --- | --- | --- |
@@ -47,9 +50,10 @@ host can fill a seat.
47
50
  | Acceptor | Fresh context, read-only; a different model family for High when available | Review threads and the acceptance record |
48
51
  | Gap reviewer | Different family from the orchestrator | Comments on drafts; no scope decision |
49
52
 
50
- `agents/fleet/` holds the role files. Claude projects them through
51
- `claude --agent <name>`. Other hosts load the same role from the issue-flow
52
- skill. The High tier prefers a different model family; a fresh same-family
53
+ `repo-harness seats argv <seat>` prints the launch argv of the
54
+ orchestrator, advisor and worker seats. `agents/fleet/` holds the sub-agent
55
+ roles that a seat may call; the installer projects each role to Claude and
56
+ Codex. The High tier prefers a different model family; a fresh same-family
53
57
  context is valid and records `model_relation` in the receipt.
54
58
 
55
59
  ## Tools
@@ -20,7 +20,7 @@ reopen an already identified Herdr terminal merely because `HC_TERMINAL_ID` is
20
20
  absent.
21
21
 
22
22
  - With `HC_TERMINAL_ID`, that value is your address. Terminals that you start
23
- are your children, and children report to you with `hc send $HC_TERMINAL_ID`.
23
+ report to you with `hc send $HC_TERMINAL_ID`.
24
24
  - Without `HC_TERMINAL_ID`, `hc` still reaches the user's core. Start with
25
25
  `hc ls --json`. It lists all live terminals of the user, not only yours.
26
26
  Read-only discovery does not require prior task ownership.
@@ -32,7 +32,8 @@ absent.
32
32
  task and meets the requested independence requirement. A matching path or an
33
33
  idle agent alone does not authorize repurposing another task's terminal.
34
34
  - If no suitable reviewer exists, start one at the task path with
35
- `hc run --bg --name <name> --cwd <task path> <template-or-agent> "<task>"`. Record the returned address.
35
+ `hc run --bg --no-parent --name <name> --cwd <task path> <template-or-agent> "<task>"`. Record the returned address.
36
+ `--no-parent` keeps the reviewer running when your program ends.
36
37
  Do not send input to terminals of another task.
37
38
  - For a visible pane, use `herdr-app do`. Split right; keep at most three
38
39
  panes per tab and create a new tab when full. `herdr-app --skill` gives the
@@ -40,10 +40,10 @@ Other documents link here. They do not copy this table.
40
40
  | --- | --- | --- | --- | --- |
41
41
  | `SessionStart.default` | all sessions | Claude, Codex | `session-context` | Emit the Effective State section first, then the edit-guard-scope, architecture-debt and pending-plan sections under one budget. |
42
42
  | `PreToolUse.edit` | `Edit\|Write` | Claude, Codex | `mutation-guard` | Block an `Edit`, `Write` or Codex `apply_patch` target outside the repository, under `_ref/` or `_ops/`, or without a parseable target path. Bash writes skip it; see [Edit guard coverage](#edit-guard-coverage). |
43
- | `PreToolUse.subagent` | `Agent` | Claude | `return-channel` | Append the return-channel contract, standing orders and board slice to a Claude `Agent` prompt. |
43
+ | `PreToolUse.subagent` | `Agent` | Claude | `return-channel` | Append the return-channel contract and standing orders to a Claude `Agent` prompt. |
44
44
  | `PreToolUse.bash` | `Bash` | Claude | `bash-mutation-guard` | Check literal write destinations under `_ops/`, `_ref/` or outside the repository. Unsupported shell syntax remains unchecked. |
45
45
  | `UserPromptSubmit.inbox` | all prompts | Claude, Codex | `agent-notice` | Deliver architecture debt on Codex; Claude emits nothing. |
46
- | `SubagentStart.context` | subagent start | Codex | `subagent-context` | Record the native role and model observation. Add the bounded child context, standing orders and board slice. |
46
+ | `SubagentStart.context` | subagent start | Codex | `subagent-context` | Record the native role and model observation. Add the bounded child context and standing orders. |
47
47
  | `Stop.default` | session stop | Claude, Codex | `stop` | Publish the evidence checkpoint and render handoff and resume. Report protected path changes. Claude can get architecture debt. |
48
48
 
49
49
  After upgrading the package, reinstall the host adapters. Codex must trust the
@@ -66,8 +66,8 @@ Both routes above use one renderer and preserve the register text verbatim.
66
66
  The block starts with `[repo-harness:standing-orders]` and is at most 1500 UTF-8
67
67
  bytes, including the marker and any truncation line.
68
68
  A truncated block ends with `... (truncated; read .ai/harness/standing-orders.md)`.
69
- Claude inserts it after the return-channel text and before the board slice.
70
- Codex includes it in `additionalContext` before the board slice.
69
+ Claude appends it after the return-channel text.
70
+ Codex includes it in `additionalContext`.
71
71
  Claude skips the block when its prompt already has the marker.
72
72
  Codex adds one block to the fresh context it builds for each `SubagentStart` event.
73
73
 
@@ -21,7 +21,7 @@ The grades describe repository boundaries. The delegation rows use evidence from
21
21
  | Assign a single writer per directory; never give concurrent agents overlapping write ownership. | **G** | The root agent instructions ask for one worktree per parallel writer (`CLAUDE.md:17`, `AGENTS.md:17`). No hook renders this rule, and no code acquires a directory-wide edit lease. | Root agent instructions; the active task's allowed paths and ownership brief. |
22
22
  | Run parallel writers only in separate worktrees from a clean source. Never silently drop isolation when worktree creation fails. | **G** | This is the upstream host requirement. The inspected start helper creates a Git worktree and rejects residual state with `--fresh`, but has no source-clean check in its start path (`scripts/contract-worktree.sh:523`, `scripts/contract-worktree.sh:556`, `scripts/contract-worktree.sh:588`). Do not describe the complete requirement as enforced. | Active contract's worktree boundary; `docs/researches/20260930-pi-harness-packages-extraction.md`, section 6.4. |
23
23
  | Refuse reuse when the caller requests a fresh contract worktree. | **E** | `--fresh` refuses an already-linked tree and existing metadata, path, worktree, or branch; it is an explicit option, not the default (`scripts/contract-worktree.sh:533`, `scripts/contract-worktree.sh:556`). | `contract-worktree start --fresh`. |
24
- | Child agents default to fresh task context and do not spawn further children. | **G** | The Codex install guidance asks for `fork_turns="none"` (`docs/reference-configs/install-profiles.md:193`). No hook or policy key sets spawn depth or validates the child's inherited transcript. `SubagentStart` records the native role observation and refuses no spawn (`src/cli/hook/subagent-context.ts:428`). | Host-native spawn configuration. |
24
+ | Child agents default to fresh task context and do not spawn further children. | **G** | The Codex install guidance asks for `fork_turns="none"` (`docs/reference-configs/install-profiles.md:417`). No hook or policy key sets spawn depth or validates the child's inherited transcript. `SubagentStart` records the native role observation and refuses no spawn (`src/cli/hook/subagent-context.ts:428`). | Host-native spawn configuration. |
25
25
  | Accept the exact subject with its evidence, rather than treating exit code zero as acceptance. | **E** | Acceptance parsing refuses stale subject/contract evidence before checking command success; `verify-sprint` invokes receipt verification and fails that gate when verification fails (`scripts/acceptance-receipt.ts:415`, `scripts/acceptance-receipt.ts:434`, `scripts/verify-sprint.sh:1211`). Scope: the receipt-backed completion gate. | Acceptance Policy in the active contract; the `repo-harness-issue-flow` skill (`references/acceptor.md`); AcceptanceReceipt and prepared verification evidence. |
26
26
  | After an interrupted managed push/PR/merge, recover explicitly with `recover reconcile`; never automatically replay the external effect. | **E** | Managed finish/ship refuse unfinished closeout re-entry. Reconcile requires an already-landed merge/push and completes missing phases without merging/pushing again (`scripts/contract-worktree.sh:1028`, `scripts/contract-worktree.sh:1426`, `scripts/ship-worktrees.sh:611`, `scripts/ship-worktrees.sh:1539`). Normal first execution may perform the effect; before it lands, recovery uses `abort`. | `long-run-continuation.md`, Crash Recovery; the worktree-scoped closeout journal. |
27
27
  | Apply the same explicit-recovery discipline to external effects outside managed closeout. | **G** | The inspected closeout helpers do not intercept arbitrary host shell commands. A host must not replace the managed recovery protocol with its own retry loop. | `long-run-continuation.md`, Crash Recovery; the operation's authorization. |
@@ -5,9 +5,8 @@ issue into a draft PR. The stages are triage, reproduce and fix. The host owns
5
5
  scheduling. repo-harness ships no scheduler and no automation code for this
6
6
  pipeline.
7
7
 
8
- Issue observation stays with `repo-harness external-source refresh|bind`. The
9
- local inbox stays with [heartbeat triage](heartbeat-triage.md). This contract
10
- adds the stop rules, the evidence handoff and the write rules.
8
+ The local inbox stays with [heartbeat triage](heartbeat-triage.md). This
9
+ contract adds the stop rules, the evidence handoff and the write rules.
11
10
 
12
11
  ## Stages
13
12
 
@@ -0,0 +1,57 @@
1
+ {
2
+ "hazards_version": "repo-harness.review-hazards.v1",
3
+ "hazards": [
4
+ {
5
+ "id": "ci-config",
6
+ "text": "Changes a workflow or other CI configuration under `.github/`.",
7
+ "path_visible": true,
8
+ "paths": [".github/**"]
9
+ },
10
+ {
11
+ "id": "release-install-script",
12
+ "text": "Changes a release, publish, update or install script, or a package script that runs at install or release.",
13
+ "path_visible": false
14
+ },
15
+ {
16
+ "id": "container-build",
17
+ "text": "Changes a `Dockerfile` or another container build file.",
18
+ "path_visible": true,
19
+ "paths": ["**/Dockerfile", "**/Dockerfile.*", "**/*.Dockerfile", "**/Containerfile", "**/Containerfile.*"]
20
+ },
21
+ {
22
+ "id": "network",
23
+ "text": "Adds a network address, endpoint or telemetry.",
24
+ "path_visible": false
25
+ },
26
+ {
27
+ "id": "credentials",
28
+ "text": "Reads credentials, such as tokens, keys, `~/.ssh`, `~/.npmrc` or credential environment variables.",
29
+ "path_visible": false
30
+ },
31
+ {
32
+ "id": "dependency",
33
+ "text": "Adds or changes a dependency or a lockfile entry. A lockfile-only bump is still a hit; its source does not lower the tier.",
34
+ "path_visible": true,
35
+ "paths": [
36
+ "**/bun.lock",
37
+ "**/bun.lockb",
38
+ "**/package-lock.json",
39
+ "**/npm-shrinkwrap.json",
40
+ "**/yarn.lock",
41
+ "**/pnpm-lock.yaml",
42
+ "**/Cargo.lock",
43
+ "**/go.sum",
44
+ "**/poetry.lock",
45
+ "**/uv.lock",
46
+ "**/Pipfile.lock",
47
+ "**/Gemfile.lock",
48
+ "**/composer.lock"
49
+ ]
50
+ },
51
+ {
52
+ "id": "opaque-content",
53
+ "text": "Adds a binary, or an encoded or opaque blob, such as base64, long hex, minified or otherwise unreadable content.",
54
+ "path_visible": false
55
+ }
56
+ ]
57
+ }