millrace-ai 0.1.0__tar.gz

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 (252) hide show
  1. millrace_ai-0.1.0/PKG-INFO +267 -0
  2. millrace_ai-0.1.0/README.md +252 -0
  3. millrace_ai-0.1.0/millrace_ai.egg-info/PKG-INFO +267 -0
  4. millrace_ai-0.1.0/millrace_ai.egg-info/SOURCES.txt +250 -0
  5. millrace_ai-0.1.0/millrace_ai.egg-info/dependency_links.txt +1 -0
  6. millrace_ai-0.1.0/millrace_ai.egg-info/entry_points.txt +2 -0
  7. millrace_ai-0.1.0/millrace_ai.egg-info/requires.txt +9 -0
  8. millrace_ai-0.1.0/millrace_ai.egg-info/top_level.txt +1 -0
  9. millrace_ai-0.1.0/millrace_engine/__init__.py +7 -0
  10. millrace_ai-0.1.0/millrace_engine/__main__.py +9 -0
  11. millrace_ai-0.1.0/millrace_engine/adapters/__init__.py +1 -0
  12. millrace_ai-0.1.0/millrace_engine/adapters/control_mailbox.py +155 -0
  13. millrace_ai-0.1.0/millrace_engine/adapters/file_watcher.py +422 -0
  14. millrace_ai-0.1.0/millrace_engine/assets/ADVISOR.md +163 -0
  15. millrace_ai-0.1.0/millrace_engine/assets/OPERATOR_GUIDE.md +289 -0
  16. millrace_ai-0.1.0/millrace_engine/assets/README.md +252 -0
  17. millrace_ai-0.1.0/millrace_engine/assets/__init__.py +1 -0
  18. millrace_ai-0.1.0/millrace_engine/assets/docs/RUNTIME_DEEP_DIVE.md +1425 -0
  19. millrace_ai-0.1.0/millrace_engine/assets/docs/TUI_DOCUMENTATION.md +803 -0
  20. millrace_ai-0.1.0/millrace_engine/assets/manifest.json +1349 -0
  21. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large__1.0.0.json +424 -0
  22. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large__1.0.0.md +422 -0
  23. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large_direct_update__1.0.0.json +266 -0
  24. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large_direct_update__1.0.0.md +265 -0
  25. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.quick_build__1.0.0.json +77 -0
  26. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.quick_build__1.0.0.md +91 -0
  27. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.standard__1.0.0.json +313 -0
  28. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.standard__1.0.0.md +449 -0
  29. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.audit__1.0.0.json +224 -0
  30. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.audit__1.0.0.md +224 -0
  31. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.goalspec__1.0.0.json +300 -0
  32. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.goalspec__1.0.0.md +300 -0
  33. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.incident__1.0.0.json +202 -0
  34. millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.incident__1.0.0.md +202 -0
  35. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.complex__1.0.0.json +99 -0
  36. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.complex__1.0.0.md +108 -0
  37. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.involved__1.0.0.json +99 -0
  38. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.involved__1.0.0.md +108 -0
  39. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.moderate__1.0.0.json +99 -0
  40. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.moderate__1.0.0.md +108 -0
  41. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.default__1.0.0.json +42 -0
  42. millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.default__1.0.0.md +45 -0
  43. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.default_autonomous__1.0.0.json +43 -0
  44. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.default_autonomous__1.0.0.md +50 -0
  45. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large__1.0.0.json +52 -0
  46. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large__1.0.0.md +50 -0
  47. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large_direct_update__1.0.0.json +51 -0
  48. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large_direct_update__1.0.0.md +50 -0
  49. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_audit__1.0.0.json +55 -0
  50. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_audit__1.0.0.md +54 -0
  51. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_goalspec__1.0.0.json +55 -0
  52. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_goalspec__1.0.0.md +54 -0
  53. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_incident__1.0.0.json +55 -0
  54. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_incident__1.0.0.md +54 -0
  55. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.standard__1.0.0.json +45 -0
  56. millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.standard__1.0.0.md +50 -0
  57. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.builder__1.0.0.json +90 -0
  58. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.builder__1.0.0.md +91 -0
  59. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.consult__1.0.0.json +91 -0
  60. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.consult__1.0.0.md +93 -0
  61. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.doublecheck__1.0.0.json +91 -0
  62. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.doublecheck__1.0.0.md +93 -0
  63. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.hotfix__1.0.0.json +89 -0
  64. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.hotfix__1.0.0.md +91 -0
  65. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.integration__1.0.0.json +89 -0
  66. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.integration__1.0.0.md +91 -0
  67. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-execute__1.0.0.json +93 -0
  68. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-execute__1.0.0.md +94 -0
  69. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-plan__1.0.0.json +91 -0
  70. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-plan__1.0.0.md +92 -0
  71. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.qa__1.0.0.json +91 -0
  72. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.qa__1.0.0.md +93 -0
  73. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.reassess__1.0.0.json +94 -0
  74. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.reassess__1.0.0.md +94 -0
  75. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.refactor__1.0.0.json +95 -0
  76. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.refactor__1.0.0.md +95 -0
  77. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.troubleshoot__1.0.0.json +89 -0
  78. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.troubleshoot__1.0.0.md +91 -0
  79. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.update__1.0.0.json +89 -0
  80. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.update__1.0.0.md +91 -0
  81. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-gatekeeper__1.0.0.json +88 -0
  82. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-gatekeeper__1.0.0.md +89 -0
  83. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-intake__1.0.0.json +88 -0
  84. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-intake__1.0.0.md +89 -0
  85. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-validate__1.0.0.json +90 -0
  86. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-validate__1.0.0.md +91 -0
  87. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.goal-intake__1.0.0.json +89 -0
  88. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.goal-intake__1.0.0.md +89 -0
  89. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-archive__1.0.0.json +88 -0
  90. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-archive__1.0.0.md +89 -0
  91. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-intake__1.0.0.json +88 -0
  92. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-intake__1.0.0.md +89 -0
  93. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-resolve__1.0.0.json +90 -0
  94. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-resolve__1.0.0.md +91 -0
  95. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.objective-profile-sync__1.0.0.json +90 -0
  96. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.objective-profile-sync__1.0.0.md +91 -0
  97. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-review__1.0.0.json +90 -0
  98. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-review__1.0.0.md +91 -0
  99. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-synthesis__1.0.0.json +90 -0
  100. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-synthesis__1.0.0.md +91 -0
  101. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.taskmaster__1.0.0.json +88 -0
  102. millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.taskmaster__1.0.0.md +89 -0
  103. millrace_ai-0.1.0/millrace_engine/assets/registry/task_authoring/task_authoring.narrow__1.0.0.json +42 -0
  104. millrace_ai-0.1.0/millrace_engine/assets/registry/task_authoring/task_authoring.narrow__1.0.0.md +45 -0
  105. millrace_ai-0.1.0/millrace_engine/assets/resolver.py +285 -0
  106. millrace_ai-0.1.0/millrace_engine/baseline_assets.py +114 -0
  107. millrace_ai-0.1.0/millrace_engine/cli.py +1281 -0
  108. millrace_ai-0.1.0/millrace_engine/compiler.py +793 -0
  109. millrace_ai-0.1.0/millrace_engine/compiler_artifacts.py +249 -0
  110. millrace_ai-0.1.0/millrace_engine/compiler_models.py +505 -0
  111. millrace_ai-0.1.0/millrace_engine/compiler_rebinding.py +119 -0
  112. millrace_ai-0.1.0/millrace_engine/compiler_rendering.py +183 -0
  113. millrace_ai-0.1.0/millrace_engine/config.py +1083 -0
  114. millrace_ai-0.1.0/millrace_engine/contracts.py +1529 -0
  115. millrace_ai-0.1.0/millrace_engine/control.py +725 -0
  116. millrace_ai-0.1.0/millrace_engine/control_common.py +75 -0
  117. millrace_ai-0.1.0/millrace_engine/control_models.py +503 -0
  118. millrace_ai-0.1.0/millrace_engine/control_mutations.py +167 -0
  119. millrace_ai-0.1.0/millrace_engine/control_reports.py +540 -0
  120. millrace_ai-0.1.0/millrace_engine/diagnostics.py +556 -0
  121. millrace_ai-0.1.0/millrace_engine/engine.py +1262 -0
  122. millrace_ai-0.1.0/millrace_engine/events.py +251 -0
  123. millrace_ai-0.1.0/millrace_engine/execution_nodes.py +50 -0
  124. millrace_ai-0.1.0/millrace_engine/health.py +499 -0
  125. millrace_ai-0.1.0/millrace_engine/loop_architecture.py +125 -0
  126. millrace_ai-0.1.0/millrace_engine/loop_architecture_catalog.py +223 -0
  127. millrace_ai-0.1.0/millrace_engine/loop_architecture_common.py +385 -0
  128. millrace_ai-0.1.0/millrace_engine/loop_architecture_loop_contracts.py +234 -0
  129. millrace_ai-0.1.0/millrace_engine/loop_architecture_profile_contracts.py +213 -0
  130. millrace_ai-0.1.0/millrace_engine/loop_architecture_stage_contracts.py +524 -0
  131. millrace_ai-0.1.0/millrace_engine/markdown.py +105 -0
  132. millrace_ai-0.1.0/millrace_engine/materialization.py +905 -0
  133. millrace_ai-0.1.0/millrace_engine/materialization_merge.py +149 -0
  134. millrace_ai-0.1.0/millrace_engine/materialization_models.py +250 -0
  135. millrace_ai-0.1.0/millrace_engine/materialization_provenance.py +69 -0
  136. millrace_ai-0.1.0/millrace_engine/paths.py +196 -0
  137. millrace_ai-0.1.0/millrace_engine/planes/__init__.py +1 -0
  138. millrace_ai-0.1.0/millrace_engine/planes/base.py +25 -0
  139. millrace_ai-0.1.0/millrace_engine/planes/execution.py +1357 -0
  140. millrace_ai-0.1.0/millrace_engine/planes/execution_recovery.py +348 -0
  141. millrace_ai-0.1.0/millrace_engine/planes/execution_routing.py +439 -0
  142. millrace_ai-0.1.0/millrace_engine/planes/execution_runtime.py +643 -0
  143. millrace_ai-0.1.0/millrace_engine/planes/research.py +905 -0
  144. millrace_ai-0.1.0/millrace_engine/policies/__init__.py +166 -0
  145. millrace_ai-0.1.0/millrace_engine/policies/complexity.py +146 -0
  146. millrace_ai-0.1.0/millrace_engine/policies/hooks.py +618 -0
  147. millrace_ai-0.1.0/millrace_engine/policies/integration.py +319 -0
  148. millrace_ai-0.1.0/millrace_engine/policies/network_guard.py +77 -0
  149. millrace_ai-0.1.0/millrace_engine/policies/outage.py +487 -0
  150. millrace_ai-0.1.0/millrace_engine/policies/pacing.py +138 -0
  151. millrace_ai-0.1.0/millrace_engine/policies/preflight.py +376 -0
  152. millrace_ai-0.1.0/millrace_engine/policies/sizing.py +706 -0
  153. millrace_ai-0.1.0/millrace_engine/policies/transport.py +163 -0
  154. millrace_ai-0.1.0/millrace_engine/policies/usage_budget.py +421 -0
  155. millrace_ai-0.1.0/millrace_engine/provenance.py +582 -0
  156. millrace_ai-0.1.0/millrace_engine/publishing/__init__.py +33 -0
  157. millrace_ai-0.1.0/millrace_engine/publishing/manifest.py +193 -0
  158. millrace_ai-0.1.0/millrace_engine/publishing/staging.py +467 -0
  159. millrace_ai-0.1.0/millrace_engine/queue.py +496 -0
  160. millrace_ai-0.1.0/millrace_engine/registry.py +527 -0
  161. millrace_ai-0.1.0/millrace_engine/runner.py +326 -0
  162. millrace_ai-0.1.0/millrace_engine/stages/__init__.py +1 -0
  163. millrace_ai-0.1.0/millrace_engine/stages/base.py +250 -0
  164. millrace_ai-0.1.0/millrace_engine/stages/builder.py +18 -0
  165. millrace_ai-0.1.0/millrace_engine/stages/consult.py +22 -0
  166. millrace_ai-0.1.0/millrace_engine/stages/doublecheck.py +22 -0
  167. millrace_ai-0.1.0/millrace_engine/stages/hotfix.py +18 -0
  168. millrace_ai-0.1.0/millrace_engine/stages/integrate.py +18 -0
  169. millrace_ai-0.1.0/millrace_engine/stages/large_execute.py +18 -0
  170. millrace_ai-0.1.0/millrace_engine/stages/large_plan.py +18 -0
  171. millrace_ai-0.1.0/millrace_engine/stages/qa.py +22 -0
  172. millrace_ai-0.1.0/millrace_engine/stages/reassess.py +18 -0
  173. millrace_ai-0.1.0/millrace_engine/stages/refactor.py +18 -0
  174. millrace_ai-0.1.0/millrace_engine/stages/troubleshoot.py +18 -0
  175. millrace_ai-0.1.0/millrace_engine/stages/update.py +19 -0
  176. millrace_ai-0.1.0/millrace_engine/standard_runtime.py +264 -0
  177. millrace_ai-0.1.0/millrace_engine/standard_runtime_models.py +140 -0
  178. millrace_ai-0.1.0/millrace_engine/standard_runtime_overrides.py +140 -0
  179. millrace_ai-0.1.0/millrace_engine/standard_runtime_views.py +234 -0
  180. millrace_ai-0.1.0/millrace_engine/status.py +543 -0
  181. millrace_ai-0.1.0/millrace_engine/telemetry.py +773 -0
  182. millrace_ai-0.1.0/millrace_engine/tui/__init__.py +2 -0
  183. millrace_ai-0.1.0/millrace_engine/tui/__main__.py +44 -0
  184. millrace_ai-0.1.0/millrace_engine/tui/app.py +268 -0
  185. millrace_ai-0.1.0/millrace_engine/tui/bindings.py +30 -0
  186. millrace_ai-0.1.0/millrace_engine/tui/formatting.py +386 -0
  187. millrace_ai-0.1.0/millrace_engine/tui/gateway.py +910 -0
  188. millrace_ai-0.1.0/millrace_engine/tui/launcher.py +329 -0
  189. millrace_ai-0.1.0/millrace_engine/tui/messages.py +105 -0
  190. millrace_ai-0.1.0/millrace_engine/tui/models.py +709 -0
  191. millrace_ai-0.1.0/millrace_engine/tui/screens/__init__.py +6 -0
  192. millrace_ai-0.1.0/millrace_engine/tui/screens/add_idea_modal.py +105 -0
  193. millrace_ai-0.1.0/millrace_engine/tui/screens/add_task_modal.py +104 -0
  194. millrace_ai-0.1.0/millrace_engine/tui/screens/config_edit_modal.py +142 -0
  195. millrace_ai-0.1.0/millrace_engine/tui/screens/confirm_modal.py +61 -0
  196. millrace_ai-0.1.0/millrace_engine/tui/screens/health_gate.py +240 -0
  197. millrace_ai-0.1.0/millrace_engine/tui/screens/help_modal.py +117 -0
  198. millrace_ai-0.1.0/millrace_engine/tui/screens/run_detail_modal.py +191 -0
  199. millrace_ai-0.1.0/millrace_engine/tui/screens/shell.py +977 -0
  200. millrace_ai-0.1.0/millrace_engine/tui/store.py +368 -0
  201. millrace_ai-0.1.0/millrace_engine/tui/styles/app.tcss +22 -0
  202. millrace_ai-0.1.0/millrace_engine/tui/styles/panels.tcss +290 -0
  203. millrace_ai-0.1.0/millrace_engine/tui/styles/shell.tcss +174 -0
  204. millrace_ai-0.1.0/millrace_engine/tui/widgets/__init__.py +8 -0
  205. millrace_ai-0.1.0/millrace_engine/tui/widgets/config_panel.py +497 -0
  206. millrace_ai-0.1.0/millrace_engine/tui/widgets/expanded_stream.py +362 -0
  207. millrace_ai-0.1.0/millrace_engine/tui/widgets/logs_panel.py +592 -0
  208. millrace_ai-0.1.0/millrace_engine/tui/widgets/notices.py +50 -0
  209. millrace_ai-0.1.0/millrace_engine/tui/widgets/overview_panel.py +497 -0
  210. millrace_ai-0.1.0/millrace_engine/tui/widgets/panels.py +27 -0
  211. millrace_ai-0.1.0/millrace_engine/tui/widgets/progressive_disclosure.py +68 -0
  212. millrace_ai-0.1.0/millrace_engine/tui/widgets/publish_panel.py +419 -0
  213. millrace_ai-0.1.0/millrace_engine/tui/widgets/queue_panel.py +586 -0
  214. millrace_ai-0.1.0/millrace_engine/tui/widgets/research_panel.py +530 -0
  215. millrace_ai-0.1.0/millrace_engine/tui/widgets/runs_panel.py +363 -0
  216. millrace_ai-0.1.0/millrace_engine/tui/widgets/sidebar.py +153 -0
  217. millrace_ai-0.1.0/millrace_engine/tui/widgets/status_bar.py +246 -0
  218. millrace_ai-0.1.0/millrace_engine/tui/workers.py +185 -0
  219. millrace_ai-0.1.0/millrace_engine/workspace_init.py +292 -0
  220. millrace_ai-0.1.0/pyproject.toml +65 -0
  221. millrace_ai-0.1.0/setup.cfg +4 -0
  222. millrace_ai-0.1.0/tests/test_asset_resolver.py +155 -0
  223. millrace_ai-0.1.0/tests/test_baseline_assets.py +238 -0
  224. millrace_ai-0.1.0/tests/test_cli.py +3486 -0
  225. millrace_ai-0.1.0/tests/test_compiler.py +945 -0
  226. millrace_ai-0.1.0/tests/test_config.py +365 -0
  227. millrace_ai-0.1.0/tests/test_contracts.py +140 -0
  228. millrace_ai-0.1.0/tests/test_execution_plane.py +2710 -0
  229. millrace_ai-0.1.0/tests/test_execution_prompt_contracts.py +189 -0
  230. millrace_ai-0.1.0/tests/test_file_watcher.py +117 -0
  231. millrace_ai-0.1.0/tests/test_goalspec_state.py +806 -0
  232. millrace_ai-0.1.0/tests/test_health.py +100 -0
  233. millrace_ai-0.1.0/tests/test_loop_architecture.py +503 -0
  234. millrace_ai-0.1.0/tests/test_materialization.py +683 -0
  235. millrace_ai-0.1.0/tests/test_package_parity.py +95 -0
  236. millrace_ai-0.1.0/tests/test_policy_hooks.py +490 -0
  237. millrace_ai-0.1.0/tests/test_publishing.py +189 -0
  238. millrace_ai-0.1.0/tests/test_queue.py +443 -0
  239. millrace_ai-0.1.0/tests/test_registry.py +621 -0
  240. millrace_ai-0.1.0/tests/test_research_dispatcher.py +3038 -0
  241. millrace_ai-0.1.0/tests/test_research_queues.py +445 -0
  242. millrace_ai-0.1.0/tests/test_research_registry.py +92 -0
  243. millrace_ai-0.1.0/tests/test_research_state.py +531 -0
  244. millrace_ai-0.1.0/tests/test_research_stub.py +72 -0
  245. millrace_ai-0.1.0/tests/test_runner.py +486 -0
  246. millrace_ai-0.1.0/tests/test_scaffold.py +150 -0
  247. millrace_ai-0.1.0/tests/test_sizing.py +200 -0
  248. millrace_ai-0.1.0/tests/test_status.py +101 -0
  249. millrace_ai-0.1.0/tests/test_tui.py +3983 -0
  250. millrace_ai-0.1.0/tests/test_tui_snapshots.py +361 -0
  251. millrace_ai-0.1.0/tests/test_validation_mode_custom.py +211 -0
  252. millrace_ai-0.1.0/tests/test_validation_mode_standard.py +217 -0
@@ -0,0 +1,267 @@
1
+ Metadata-Version: 2.4
2
+ Name: millrace-ai
3
+ Version: 0.1.0
4
+ Summary: Python runtime engine for the Millrace v1 control plane
5
+ Requires-Python: >=3.11
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: pydantic<3,>=2
8
+ Requires-Dist: textual<9,>=8
9
+ Requires-Dist: tomlkit<1,>=0.13
10
+ Requires-Dist: typer<1,>=0.12
11
+ Requires-Dist: watchdog<7,>=4
12
+ Provides-Extra: dev
13
+ Requires-Dist: pytest<9,>=8; extra == "dev"
14
+ Requires-Dist: pytest-textual-snapshot<2,>=1; extra == "dev"
15
+
16
+ # Millrace
17
+
18
+ Millrace is a local autonomous software-delivery runtime for long-running coding work. It runs governed execution and research loops inside a file-backed workspace with durable state, explicit recovery surfaces, per-run provenance, and publish controls.
19
+
20
+ It is built for unattended or semi-attended work that needs more than a chat session or a thin agent wrapper. You get one engine, one control plane, and multiple operator surfaces over the same on-disk truth: CLI, TUI, and agent-guided operation.
21
+
22
+ It gives you:
23
+
24
+ - a Python CLI and a Textual TUI, plus an agent-facing advisor surface
25
+ - a single runtime engine
26
+ - an execution plane for delivery work
27
+ - a research plane for idea intake, audit, and governed handoff
28
+ - durable runtime state, event logs, diagnostics, provenance, and publish surfaces inside the workspace
29
+
30
+ Read next:
31
+
32
+ - `OPERATOR_GUIDE.md` for the human operator workflow
33
+ - `ADVISOR.md` for the agent-facing operator prompt
34
+ - `docs/RUNTIME_DEEP_DIVE.md` for architecture and failure-model detail
35
+
36
+ ## Why Millrace Exists
37
+
38
+ Interactive coding tools are good at short sessions. They are weak at long-running governed work that needs queue discipline, durable state, recoverable execution, research-to-delivery handoff, and publish controls.
39
+
40
+ Millrace exists to make those runtime concerns first-class instead of leaving them implicit in shell history, chat transcripts, or one-off wrapper scripts.
41
+
42
+ ## How Millrace Is Different
43
+
44
+ - Runtime, not wrapper: Millrace owns lifecycle, queue mutation, watch surfaces, status, events, and publish flow.
45
+ - File-backed truth: runs, queues, status, diagnostics, and provenance live in the workspace, not in opaque process memory.
46
+ - Governed autonomy: execution and research share one engine but keep distinct state, reporting, and handoff surfaces.
47
+ - Frozen per-run plans: each run resolves its effective mode and loop, then records the exact plan used for that run.
48
+ - Multiple operator surfaces: CLI, TUI, and agent-guided operation all sit over the same control plane.
49
+
50
+ ## Design Philosophy
51
+
52
+ - Local and inspectable: the workspace is the source of operational truth.
53
+ - Honest failure over hidden magic: blocked work, partial progress, and degraded state should stay legible.
54
+ - Explicit boundaries: lifecycle, runtime state, research, execution, and publish are separate product surfaces.
55
+ - Recoverability matters: long-running systems need durable ledgers, diagnostics, and restart-safe state.
56
+
57
+ ## Repo Layout
58
+
59
+ The public Millrace repo is package-first. Its main surfaces are:
60
+
61
+ - `millrace_engine/`: the runtime package, CLI, control layer, and engine
62
+ - `docs/`: longer-form reference material, including the runtime deep dive and TUI reference
63
+ - `tests/`: unit and integration tests
64
+ - `pyproject.toml`: packaging metadata and console entrypoint
65
+ - `millrace_engine/assets/`: the packaged baseline bundle used by `millrace init`
66
+
67
+ `millrace.toml` and `agents/` are part of an initialized Millrace workspace. They are seeded by `millrace init`; they are not expected at the public repo root.
68
+
69
+ ## Initialized Workspace Layout
70
+
71
+ An initialized workspace created by `millrace init /absolute/path/to/workspace` contains:
72
+
73
+ - `millrace.toml`: the active workspace config
74
+ - `agents/`: queues, runs, logs, prompts, state, and provenance
75
+ - `docs/`: copied reference material that travels with the workspace
76
+
77
+ ## Core Runtime Model
78
+
79
+ - One CLI: `python3 -m millrace_engine --config millrace.toml ...`
80
+ - One TUI shell: `python3 -m millrace_engine.tui --config millrace.toml`
81
+ - One engine: the daemon owns lifecycle, watchers, mailbox commands, runtime state, and event emission.
82
+ - Two logical planes: execution work and research work share the same engine but keep separate status and reporting surfaces.
83
+ - File-backed truth: queues, runs, status, logs, diagnostics, and provenance live under `agents/`.
84
+ - Workspace-first assets: workspace files override packaged defaults when present; packaged assets are the fallback.
85
+ - Frozen per-run plans: before a standard execution run, Millrace resolves the selected mode and loop, applies workspace overrides, and freezes the effective plan under `agents/runs/<run_id>/`.
86
+
87
+ ## Quick Start
88
+
89
+ ```bash
90
+ cd /absolute/path/to/millrace
91
+ python3 -m venv .venv
92
+ source .venv/bin/activate
93
+ python3 -m pip install -e '.[dev]'
94
+ python3 -m millrace_engine init /absolute/path/to/workspace
95
+ python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
96
+ python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml status --detail --json
97
+ python3 -m millrace_engine.tui --config /absolute/path/to/workspace/millrace.toml
98
+ ```
99
+
100
+ After init, you can `cd /absolute/path/to/workspace` and use the shorter `--config millrace.toml` form.
101
+
102
+ Add work and execute one foreground cycle:
103
+
104
+ ```bash
105
+ cd /absolute/path/to/workspace
106
+ python3 -m millrace_engine --config millrace.toml add-task "Example task"
107
+ python3 -m millrace_engine --config millrace.toml start --once
108
+ ```
109
+
110
+ If the package entrypoint is installed, `millrace --config millrace.toml ...` is equivalent.
111
+
112
+ ## TUI Shell
113
+
114
+ The TUI is the fastest way to operate an initialized workspace when you want a dense control panel instead of a stream of CLI calls.
115
+
116
+ Launch it with:
117
+
118
+ ```bash
119
+ python3 -m millrace_engine.tui --config millrace.toml
120
+ ```
121
+
122
+ What it provides:
123
+
124
+ - a startup health gate before the shell becomes interactive
125
+ - a dual-mode shell with summary-first `operator` mode and detail-forward `debug` mode
126
+ - one toggleable expanded stream mode that takes over the main content area while leaving the sidebar, status strip, and notices visible
127
+ - a persistent shell with sidebar navigation, a compact status strip, and widget-composed overview/queue/runs/research/logs/config/publish panels
128
+ - explicit lifecycle signaling across the sidebar daemon badge, top status strip, and notices rail
129
+ - guided task, idea, queue reorder, config edit, and publish confirmation flows
130
+ - lifecycle actions for `start --once`, `start --daemon`, `pause`, `resume`, and `stop`
131
+ - a command palette for common actions, including display-mode toggle and lifecycle controls
132
+ - built-in keyboard help (`?`) and panel shortcuts (`1` through `7`)
133
+ - the same runtime semantics as the CLI, including mailbox-safe daemon mutations and the same file-backed truth surfaces
134
+
135
+ Use the TUI for day-to-day observation and control. Use the CLI when you want scriptable, one-shot commands or JSON output.
136
+
137
+ The repo also ships a dedicated TUI reference in its `docs/` directory for the full panel, control, and interaction map.
138
+
139
+ Expanded stream behavior to know:
140
+
141
+ - press `e` to toggle the active panel into expanded mode and `Escape` to return to the normal panel body
142
+ - in `operator` mode, expanded view renders a narrated activity feed from runtime events
143
+ - in `debug` mode, expanded view renders the raw structured event lines, close to `logs --follow`
144
+ - if you scroll upward, live follow disengages until you jump back with `l`
145
+
146
+ ## Start A Fresh Workspace
147
+
148
+ Use `init` when you want a new Millrace workspace without copying files by hand:
149
+
150
+ ```bash
151
+ python3 -m millrace_engine init /absolute/path/to/workspace
152
+ python3 -m millrace_engine init --force /absolute/path/to/workspace
153
+ ```
154
+
155
+ Important behavior:
156
+
157
+ - Without `--force`, the destination must be absent or empty.
158
+ - With `--force`, Millrace overwrites manifest-tracked baseline files in place. It does not wipe the directory.
159
+ - Workspace prompt and registry overlays can override packaged defaults after scaffolding.
160
+ - Missing workspace prompt files fall back to packaged assets when the resolver supports that family.
161
+
162
+ After scaffolding, run the workspace preflight before you rely on the runtime:
163
+
164
+ ```bash
165
+ python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
166
+ ```
167
+
168
+ ## Daily Operator Flow
169
+
170
+ The rest of this section assumes you are operating inside an initialized workspace root that contains the active `millrace.toml`.
171
+
172
+ 1. Preflight the workspace:
173
+
174
+ ```bash
175
+ python3 -m millrace_engine --config millrace.toml health --json
176
+ ```
177
+
178
+ Or launch the TUI and let the health gate run automatically:
179
+
180
+ ```bash
181
+ python3 -m millrace_engine.tui --config millrace.toml
182
+ ```
183
+
184
+ 2. Inspect current state:
185
+
186
+ ```bash
187
+ python3 -m millrace_engine --config millrace.toml status --detail --json
188
+ python3 -m millrace_engine --config millrace.toml queue inspect --json
189
+ python3 -m millrace_engine --config millrace.toml research --json
190
+ python3 -m millrace_engine --config millrace.toml logs --tail 50 --json
191
+ ```
192
+
193
+ In the TUI, the Overview, Queue, Research, Logs, and Runs panels expose the same runtime state without leaving the shell.
194
+
195
+ 3. Add work:
196
+
197
+ ```bash
198
+ python3 -m millrace_engine --config millrace.toml add-task "Example task"
199
+ python3 -m millrace_engine --config millrace.toml add-idea /absolute/path/to/idea.md
200
+ ```
201
+
202
+ `add-task` appends an execution task to the backlog. `add-idea` copies a source markdown file into `agents/ideas/raw/` for research-side intake.
203
+
204
+ 4. Run the engine:
205
+
206
+ ```bash
207
+ python3 -m millrace_engine --config millrace.toml start --once
208
+ python3 -m millrace_engine --config millrace.toml start --daemon
209
+ ```
210
+
211
+ The TUI exposes the same actions through the command palette and keyboard-driven panel flows.
212
+
213
+ 5. Inspect outcomes:
214
+
215
+ ```bash
216
+ python3 -m millrace_engine --config millrace.toml logs --follow
217
+ python3 -m millrace_engine --config millrace.toml run-provenance <run_id> --json
218
+ python3 -m millrace_engine --config millrace.toml research history --json
219
+ ```
220
+
221
+ The TUI keeps recent runs, filtered logs, and concise run-provenance drilldown in one place, including a run-detail modal from the Runs and Logs panels.
222
+
223
+ When you want the old foreground-feed feel without leaving the shell, use TUI expanded mode instead of opening a second terminal just to run `logs --follow`.
224
+
225
+ 6. Control a long-running daemon:
226
+
227
+ ```bash
228
+ python3 -m millrace_engine --config millrace.toml pause
229
+ python3 -m millrace_engine --config millrace.toml resume
230
+ python3 -m millrace_engine --config millrace.toml stop
231
+ ```
232
+
233
+ When the daemon is running, mutating commands route through the mailbox so one owner process stays in control of live state.
234
+
235
+ ## Publish And Staging
236
+
237
+ Millrace includes a staging and publish surface for preparing a release worktree:
238
+
239
+ ```bash
240
+ python3 -m millrace_engine --config millrace.toml publish sync --json
241
+ python3 -m millrace_engine --config millrace.toml publish preflight --json
242
+ python3 -m millrace_engine --config millrace.toml publish commit --no-push --json
243
+ ```
244
+
245
+ `publish preflight` is read-only. It reports the resolved staging repo, manifest source, git readiness, and changed paths without mutating git state.
246
+
247
+ ## Runtime Inputs
248
+
249
+ By default the daemon watches:
250
+
251
+ - backlog and autonomy marker files
252
+ - raw ideas under `agents/ideas/raw/`
253
+ - mailbox commands under `agents/.runtime/commands/incoming/`
254
+ - the config file `millrace.toml`
255
+
256
+ These roots are configured under `[watchers]`.
257
+
258
+ Remaining shell loop artifacts under `agents/` are compatibility or reference material only. The supported operating surfaces are the Python CLI and the Textual TUI.
259
+
260
+ ## Verification
261
+
262
+ ```bash
263
+ python3 -m compileall millrace_engine
264
+ PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -q tests
265
+ ```
266
+
267
+ Use `health --json` as the first runtime preflight and `status --detail --json`, `research --json`, `logs`, and `run-provenance` as the main visibility surfaces once the engine is running.
@@ -0,0 +1,252 @@
1
+ # Millrace
2
+
3
+ Millrace is a local autonomous software-delivery runtime for long-running coding work. It runs governed execution and research loops inside a file-backed workspace with durable state, explicit recovery surfaces, per-run provenance, and publish controls.
4
+
5
+ It is built for unattended or semi-attended work that needs more than a chat session or a thin agent wrapper. You get one engine, one control plane, and multiple operator surfaces over the same on-disk truth: CLI, TUI, and agent-guided operation.
6
+
7
+ It gives you:
8
+
9
+ - a Python CLI and a Textual TUI, plus an agent-facing advisor surface
10
+ - a single runtime engine
11
+ - an execution plane for delivery work
12
+ - a research plane for idea intake, audit, and governed handoff
13
+ - durable runtime state, event logs, diagnostics, provenance, and publish surfaces inside the workspace
14
+
15
+ Read next:
16
+
17
+ - `OPERATOR_GUIDE.md` for the human operator workflow
18
+ - `ADVISOR.md` for the agent-facing operator prompt
19
+ - `docs/RUNTIME_DEEP_DIVE.md` for architecture and failure-model detail
20
+
21
+ ## Why Millrace Exists
22
+
23
+ Interactive coding tools are good at short sessions. They are weak at long-running governed work that needs queue discipline, durable state, recoverable execution, research-to-delivery handoff, and publish controls.
24
+
25
+ Millrace exists to make those runtime concerns first-class instead of leaving them implicit in shell history, chat transcripts, or one-off wrapper scripts.
26
+
27
+ ## How Millrace Is Different
28
+
29
+ - Runtime, not wrapper: Millrace owns lifecycle, queue mutation, watch surfaces, status, events, and publish flow.
30
+ - File-backed truth: runs, queues, status, diagnostics, and provenance live in the workspace, not in opaque process memory.
31
+ - Governed autonomy: execution and research share one engine but keep distinct state, reporting, and handoff surfaces.
32
+ - Frozen per-run plans: each run resolves its effective mode and loop, then records the exact plan used for that run.
33
+ - Multiple operator surfaces: CLI, TUI, and agent-guided operation all sit over the same control plane.
34
+
35
+ ## Design Philosophy
36
+
37
+ - Local and inspectable: the workspace is the source of operational truth.
38
+ - Honest failure over hidden magic: blocked work, partial progress, and degraded state should stay legible.
39
+ - Explicit boundaries: lifecycle, runtime state, research, execution, and publish are separate product surfaces.
40
+ - Recoverability matters: long-running systems need durable ledgers, diagnostics, and restart-safe state.
41
+
42
+ ## Repo Layout
43
+
44
+ The public Millrace repo is package-first. Its main surfaces are:
45
+
46
+ - `millrace_engine/`: the runtime package, CLI, control layer, and engine
47
+ - `docs/`: longer-form reference material, including the runtime deep dive and TUI reference
48
+ - `tests/`: unit and integration tests
49
+ - `pyproject.toml`: packaging metadata and console entrypoint
50
+ - `millrace_engine/assets/`: the packaged baseline bundle used by `millrace init`
51
+
52
+ `millrace.toml` and `agents/` are part of an initialized Millrace workspace. They are seeded by `millrace init`; they are not expected at the public repo root.
53
+
54
+ ## Initialized Workspace Layout
55
+
56
+ An initialized workspace created by `millrace init /absolute/path/to/workspace` contains:
57
+
58
+ - `millrace.toml`: the active workspace config
59
+ - `agents/`: queues, runs, logs, prompts, state, and provenance
60
+ - `docs/`: copied reference material that travels with the workspace
61
+
62
+ ## Core Runtime Model
63
+
64
+ - One CLI: `python3 -m millrace_engine --config millrace.toml ...`
65
+ - One TUI shell: `python3 -m millrace_engine.tui --config millrace.toml`
66
+ - One engine: the daemon owns lifecycle, watchers, mailbox commands, runtime state, and event emission.
67
+ - Two logical planes: execution work and research work share the same engine but keep separate status and reporting surfaces.
68
+ - File-backed truth: queues, runs, status, logs, diagnostics, and provenance live under `agents/`.
69
+ - Workspace-first assets: workspace files override packaged defaults when present; packaged assets are the fallback.
70
+ - Frozen per-run plans: before a standard execution run, Millrace resolves the selected mode and loop, applies workspace overrides, and freezes the effective plan under `agents/runs/<run_id>/`.
71
+
72
+ ## Quick Start
73
+
74
+ ```bash
75
+ cd /absolute/path/to/millrace
76
+ python3 -m venv .venv
77
+ source .venv/bin/activate
78
+ python3 -m pip install -e '.[dev]'
79
+ python3 -m millrace_engine init /absolute/path/to/workspace
80
+ python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
81
+ python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml status --detail --json
82
+ python3 -m millrace_engine.tui --config /absolute/path/to/workspace/millrace.toml
83
+ ```
84
+
85
+ After init, you can `cd /absolute/path/to/workspace` and use the shorter `--config millrace.toml` form.
86
+
87
+ Add work and execute one foreground cycle:
88
+
89
+ ```bash
90
+ cd /absolute/path/to/workspace
91
+ python3 -m millrace_engine --config millrace.toml add-task "Example task"
92
+ python3 -m millrace_engine --config millrace.toml start --once
93
+ ```
94
+
95
+ If the package entrypoint is installed, `millrace --config millrace.toml ...` is equivalent.
96
+
97
+ ## TUI Shell
98
+
99
+ The TUI is the fastest way to operate an initialized workspace when you want a dense control panel instead of a stream of CLI calls.
100
+
101
+ Launch it with:
102
+
103
+ ```bash
104
+ python3 -m millrace_engine.tui --config millrace.toml
105
+ ```
106
+
107
+ What it provides:
108
+
109
+ - a startup health gate before the shell becomes interactive
110
+ - a dual-mode shell with summary-first `operator` mode and detail-forward `debug` mode
111
+ - one toggleable expanded stream mode that takes over the main content area while leaving the sidebar, status strip, and notices visible
112
+ - a persistent shell with sidebar navigation, a compact status strip, and widget-composed overview/queue/runs/research/logs/config/publish panels
113
+ - explicit lifecycle signaling across the sidebar daemon badge, top status strip, and notices rail
114
+ - guided task, idea, queue reorder, config edit, and publish confirmation flows
115
+ - lifecycle actions for `start --once`, `start --daemon`, `pause`, `resume`, and `stop`
116
+ - a command palette for common actions, including display-mode toggle and lifecycle controls
117
+ - built-in keyboard help (`?`) and panel shortcuts (`1` through `7`)
118
+ - the same runtime semantics as the CLI, including mailbox-safe daemon mutations and the same file-backed truth surfaces
119
+
120
+ Use the TUI for day-to-day observation and control. Use the CLI when you want scriptable, one-shot commands or JSON output.
121
+
122
+ The repo also ships a dedicated TUI reference in its `docs/` directory for the full panel, control, and interaction map.
123
+
124
+ Expanded stream behavior to know:
125
+
126
+ - press `e` to toggle the active panel into expanded mode and `Escape` to return to the normal panel body
127
+ - in `operator` mode, expanded view renders a narrated activity feed from runtime events
128
+ - in `debug` mode, expanded view renders the raw structured event lines, close to `logs --follow`
129
+ - if you scroll upward, live follow disengages until you jump back with `l`
130
+
131
+ ## Start A Fresh Workspace
132
+
133
+ Use `init` when you want a new Millrace workspace without copying files by hand:
134
+
135
+ ```bash
136
+ python3 -m millrace_engine init /absolute/path/to/workspace
137
+ python3 -m millrace_engine init --force /absolute/path/to/workspace
138
+ ```
139
+
140
+ Important behavior:
141
+
142
+ - Without `--force`, the destination must be absent or empty.
143
+ - With `--force`, Millrace overwrites manifest-tracked baseline files in place. It does not wipe the directory.
144
+ - Workspace prompt and registry overlays can override packaged defaults after scaffolding.
145
+ - Missing workspace prompt files fall back to packaged assets when the resolver supports that family.
146
+
147
+ After scaffolding, run the workspace preflight before you rely on the runtime:
148
+
149
+ ```bash
150
+ python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
151
+ ```
152
+
153
+ ## Daily Operator Flow
154
+
155
+ The rest of this section assumes you are operating inside an initialized workspace root that contains the active `millrace.toml`.
156
+
157
+ 1. Preflight the workspace:
158
+
159
+ ```bash
160
+ python3 -m millrace_engine --config millrace.toml health --json
161
+ ```
162
+
163
+ Or launch the TUI and let the health gate run automatically:
164
+
165
+ ```bash
166
+ python3 -m millrace_engine.tui --config millrace.toml
167
+ ```
168
+
169
+ 2. Inspect current state:
170
+
171
+ ```bash
172
+ python3 -m millrace_engine --config millrace.toml status --detail --json
173
+ python3 -m millrace_engine --config millrace.toml queue inspect --json
174
+ python3 -m millrace_engine --config millrace.toml research --json
175
+ python3 -m millrace_engine --config millrace.toml logs --tail 50 --json
176
+ ```
177
+
178
+ In the TUI, the Overview, Queue, Research, Logs, and Runs panels expose the same runtime state without leaving the shell.
179
+
180
+ 3. Add work:
181
+
182
+ ```bash
183
+ python3 -m millrace_engine --config millrace.toml add-task "Example task"
184
+ python3 -m millrace_engine --config millrace.toml add-idea /absolute/path/to/idea.md
185
+ ```
186
+
187
+ `add-task` appends an execution task to the backlog. `add-idea` copies a source markdown file into `agents/ideas/raw/` for research-side intake.
188
+
189
+ 4. Run the engine:
190
+
191
+ ```bash
192
+ python3 -m millrace_engine --config millrace.toml start --once
193
+ python3 -m millrace_engine --config millrace.toml start --daemon
194
+ ```
195
+
196
+ The TUI exposes the same actions through the command palette and keyboard-driven panel flows.
197
+
198
+ 5. Inspect outcomes:
199
+
200
+ ```bash
201
+ python3 -m millrace_engine --config millrace.toml logs --follow
202
+ python3 -m millrace_engine --config millrace.toml run-provenance <run_id> --json
203
+ python3 -m millrace_engine --config millrace.toml research history --json
204
+ ```
205
+
206
+ The TUI keeps recent runs, filtered logs, and concise run-provenance drilldown in one place, including a run-detail modal from the Runs and Logs panels.
207
+
208
+ When you want the old foreground-feed feel without leaving the shell, use TUI expanded mode instead of opening a second terminal just to run `logs --follow`.
209
+
210
+ 6. Control a long-running daemon:
211
+
212
+ ```bash
213
+ python3 -m millrace_engine --config millrace.toml pause
214
+ python3 -m millrace_engine --config millrace.toml resume
215
+ python3 -m millrace_engine --config millrace.toml stop
216
+ ```
217
+
218
+ When the daemon is running, mutating commands route through the mailbox so one owner process stays in control of live state.
219
+
220
+ ## Publish And Staging
221
+
222
+ Millrace includes a staging and publish surface for preparing a release worktree:
223
+
224
+ ```bash
225
+ python3 -m millrace_engine --config millrace.toml publish sync --json
226
+ python3 -m millrace_engine --config millrace.toml publish preflight --json
227
+ python3 -m millrace_engine --config millrace.toml publish commit --no-push --json
228
+ ```
229
+
230
+ `publish preflight` is read-only. It reports the resolved staging repo, manifest source, git readiness, and changed paths without mutating git state.
231
+
232
+ ## Runtime Inputs
233
+
234
+ By default the daemon watches:
235
+
236
+ - backlog and autonomy marker files
237
+ - raw ideas under `agents/ideas/raw/`
238
+ - mailbox commands under `agents/.runtime/commands/incoming/`
239
+ - the config file `millrace.toml`
240
+
241
+ These roots are configured under `[watchers]`.
242
+
243
+ Remaining shell loop artifacts under `agents/` are compatibility or reference material only. The supported operating surfaces are the Python CLI and the Textual TUI.
244
+
245
+ ## Verification
246
+
247
+ ```bash
248
+ python3 -m compileall millrace_engine
249
+ PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -q tests
250
+ ```
251
+
252
+ Use `health --json` as the first runtime preflight and `status --detail --json`, `research --json`, `logs`, and `run-provenance` as the main visibility surfaces once the engine is running.