loop-engineer 0.7.0__tar.gz → 0.9.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 (323) hide show
  1. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.claude-plugin/plugin.json +17 -3
  2. loop_engineer-0.9.0/.github/dependabot.yml +16 -0
  3. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/workflows/ci.yml +39 -8
  4. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/workflows/publish.yml +7 -4
  5. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.gitignore +12 -8
  6. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/CHANGELOG.md +93 -0
  7. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/CONTRIBUTING.md +34 -2
  8. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/PKG-INFO +38 -12
  9. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/README.md +35 -11
  10. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/action.yml +1 -1
  11. loop_engineer-0.9.0/docs/adr/0001-proof-kernel-and-runtime.md +104 -0
  12. loop_engineer-0.9.0/docs/contributing/issues/01-good-first-qw9-trigger-phrases.md +45 -0
  13. loop_engineer-0.9.0/docs/contributing/issues/02-good-first-qw10-self-eval-labels.md +39 -0
  14. loop_engineer-0.9.0/docs/contributing/issues/03-good-first-emit-metrics-vocabulary.md +44 -0
  15. loop_engineer-0.9.0/docs/contributing/issues/04-help-wanted-openhands-recipe.md +42 -0
  16. loop_engineer-0.9.0/docs/contributing/issues/05-help-wanted-ruflo-recipe.md +39 -0
  17. loop_engineer-0.9.0/docs/contributing/issues/06-help-wanted-gap-reports.md +42 -0
  18. loop_engineer-0.9.0/docs/contributing/issues/07-help-wanted-emit-scaffold-runlog-seed.md +61 -0
  19. loop_engineer-0.9.0/docs/gap-reports/scoreboard.md +296 -0
  20. loop_engineer-0.9.0/docs/gap-reports/superpowers.md +108 -0
  21. loop_engineer-0.9.0/docs/integrations/langgraph.md +88 -0
  22. loop_engineer-0.9.0/docs/integrations/temporal.md +90 -0
  23. loop_engineer-0.9.0/docs/superpowers/plans/2026-07-08-v0.8.0-composes-the-field.md +2114 -0
  24. loop_engineer-0.9.0/docs/superpowers/plans/2026-07-09-st5-harness-scoreboard.md +39 -0
  25. loop_engineer-0.9.0/docs/superpowers/specs/2026-07-08-v0.8.0-composes-the-field-design.md +221 -0
  26. loop_engineer-0.9.0/docs/superpowers/specs/2026-07-09-st5-harness-scoreboard-design.md +104 -0
  27. loop_engineer-0.9.0/examples/agent-os-run/README.md +52 -0
  28. loop_engineer-0.9.0/examples/agent-os-run/agent-os/product/mission.md +23 -0
  29. loop_engineer-0.9.0/examples/agent-os-run/agent-os/product/roadmap.md +16 -0
  30. loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/plan.md +31 -0
  31. loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/references.md +23 -0
  32. loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/shape.md +32 -0
  33. loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/standards.md +25 -0
  34. loop_engineer-0.9.0/examples/agent-os-run/agent-os/standards/backend/data-imports.md +16 -0
  35. loop_engineer-0.9.0/examples/agent-os-run/agent-os/standards/index.yml +5 -0
  36. loop_engineer-0.9.0/examples/bmad-run/README.md +39 -0
  37. loop_engineer-0.9.0/examples/bmad-run/_bmad/bmm/config.yaml +15 -0
  38. loop_engineer-0.9.0/examples/bmad-run/_bmad-output/implementation-artifacts/1-1-deduplicate-csv-rows.md +83 -0
  39. loop_engineer-0.9.0/examples/bmad-run/_bmad-output/implementation-artifacts/epic-1-retro-2026-07-09.md +54 -0
  40. loop_engineer-0.9.0/examples/bmad-run/_bmad-output/implementation-artifacts/sprint-status.yaml +38 -0
  41. loop_engineer-0.9.0/examples/bmad-run/_bmad-output/planning-artifacts/epics.md +48 -0
  42. loop_engineer-0.9.0/examples/bmad-run/_bmad-output/planning-artifacts/prd.md +48 -0
  43. loop_engineer-0.9.0/examples/bmad-run/src/import_contacts.py +55 -0
  44. loop_engineer-0.9.0/examples/bmad-run/tests/test_import_contacts.py +59 -0
  45. loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/1235-analysis.md +51 -0
  46. loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/1235.md +43 -0
  47. loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/epic.md +79 -0
  48. loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/execution-status.md +16 -0
  49. loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/github-mapping.md +7 -0
  50. loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/updates/1235/progress.md +30 -0
  51. loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/updates/1235/stream-A.md +18 -0
  52. loop_engineer-0.9.0/examples/ccpm-run/.claude/prds/csv-dedupe.md +63 -0
  53. loop_engineer-0.9.0/examples/ccpm-run/README.md +45 -0
  54. loop_engineer-0.9.0/examples/coverage-repair/.loop/approvals/.gitkeep +0 -0
  55. loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/holdout-run.txt +49 -0
  56. loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/holdout-verdict.json +26 -0
  57. loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/verify-T1.json +8 -0
  58. loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/verify-T2-iter1.json +8 -0
  59. loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/verify-T2.json +8 -0
  60. loop_engineer-0.9.0/examples/coverage-repair/.loop/checkpoints/.gitkeep +0 -0
  61. loop_engineer-0.9.0/examples/coverage-repair/.loop/manifest.yaml +53 -0
  62. loop_engineer-0.9.0/examples/coverage-repair/.loop/memory/.gitkeep +0 -0
  63. loop_engineer-0.9.0/examples/coverage-repair/.loop/repair/iter-002.json +12 -0
  64. loop_engineer-0.9.0/examples/coverage-repair/.loop/state.json +14 -0
  65. loop_engineer-0.9.0/examples/evidence/invalid/absolute-uri.json +10 -0
  66. loop_engineer-0.9.0/examples/evidence/invalid/bad-sha256-pattern.json +10 -0
  67. loop_engineer-0.9.0/examples/evidence/invalid/missing-required-field.json +9 -0
  68. loop_engineer-0.9.0/examples/evidence/invalid/scheme-uri.json +10 -0
  69. loop_engineer-0.9.0/examples/evidence/valid-evidence.json +22 -0
  70. loop_engineer-0.9.0/examples/flaky-test-triage/.loop/artifacts/holdout-verdict.json +21 -0
  71. loop_engineer-0.9.0/examples/flaky-test-triage/.loop/artifacts/verify-T1-iter1.json +8 -0
  72. loop_engineer-0.9.0/examples/flaky-test-triage/.loop/artifacts/verify-T1.json +9 -0
  73. loop_engineer-0.9.0/examples/flaky-test-triage/.loop/manifest.yaml +53 -0
  74. loop_engineer-0.9.0/examples/flaky-test-triage/.loop/repair/iter-002.json +12 -0
  75. loop_engineer-0.9.0/examples/flaky-test-triage/.loop/state.json +14 -0
  76. loop_engineer-0.9.0/examples/flaky-test-triage/.loop/terminal_state.json +14 -0
  77. loop_engineer-0.9.0/examples/flaky-test-triage/README.md +96 -0
  78. loop_engineer-0.9.0/examples/flaky-test-triage/RUNLOG.md +25 -0
  79. loop_engineer-0.9.0/examples/flaky-test-triage/SPEC.md +55 -0
  80. loop_engineer-0.9.0/examples/flaky-test-triage/TASKS.json +23 -0
  81. loop_engineer-0.9.0/examples/flaky-test-triage/WORKFLOW.md +77 -0
  82. loop_engineer-0.9.0/examples/flaky-test-triage/scripts/run-example +28 -0
  83. loop_engineer-0.9.0/examples/flaky-test-triage/scripts/verify-fast +6 -0
  84. loop_engineer-0.9.0/examples/flaky-test-triage/scripts/verify-full +15 -0
  85. loop_engineer-0.9.0/examples/flaky-test-triage/target/jobs.py +17 -0
  86. loop_engineer-0.9.0/examples/flaky-test-triage/target/manifest.json +8 -0
  87. loop_engineer-0.9.0/examples/flaky-test-triage/target/measure_stability.py +32 -0
  88. loop_engineer-0.9.0/examples/flaky-test-triage/target/test_holdout.py +15 -0
  89. loop_engineer-0.9.0/examples/flaky-test-triage/target/test_visible.py +9 -0
  90. loop_engineer-0.9.0/examples/langgraph-emit/README.md +52 -0
  91. loop_engineer-0.9.0/examples/langgraph-emit/graph_example.py +123 -0
  92. loop_engineer-0.9.0/examples/naive-loop/.loop/state.json +5 -0
  93. loop_engineer-0.9.0/examples/openspec-run/README.md +46 -0
  94. loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/.openspec.yaml +2 -0
  95. loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/design.md +49 -0
  96. loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/proposal.md +31 -0
  97. loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/specs/csv-dedupe/spec.md +37 -0
  98. loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/tasks.md +25 -0
  99. loop_engineer-0.9.0/examples/openspec-run/openspec/config.yaml +22 -0
  100. loop_engineer-0.9.0/examples/openspec-run/openspec/specs/csv-dedupe/spec.md +41 -0
  101. loop_engineer-0.9.0/examples/plans/coverage-repair.plan.json +32 -0
  102. loop_engineer-0.9.0/examples/plans/invalid/cyclic-dependency.plan.json +11 -0
  103. loop_engineer-0.9.0/examples/plans/invalid/missing-goal.plan.json +6 -0
  104. loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/plans/completed/csv-dedupe.plan.md +98 -0
  105. loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/prds/csv-dedupe.prd.md +65 -0
  106. loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/reports/csv-dedupe-report.md +86 -0
  107. loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/reviews/pr-42-cycle-0.verdict.json +4 -0
  108. loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/reviews/pr-42-review.md +95 -0
  109. loop_engineer-0.9.0/examples/prp-run/.claude/prp-loop.run.log +10 -0
  110. loop_engineer-0.9.0/examples/prp-run/.claude/prp-loop.state.json +30 -0
  111. loop_engineer-0.9.0/examples/prp-run/README.md +43 -0
  112. loop_engineer-0.9.0/examples/ruflo-run/.claude-flow/metrics/swarm-activity.json +18 -0
  113. loop_engineer-0.9.0/examples/ruflo-run/.claude-flow/metrics/v3-progress.json +26 -0
  114. loop_engineer-0.9.0/examples/ruflo-run/.claude-flow/security/audit-status.json +8 -0
  115. loop_engineer-0.9.0/examples/ruflo-run/.hive-mind/sessions/hive-mind-prompt-swarm-2026-07-09.txt +46 -0
  116. loop_engineer-0.9.0/examples/ruflo-run/.mcp.json +17 -0
  117. loop_engineer-0.9.0/examples/ruflo-run/.swarm/memory-export.json +78 -0
  118. loop_engineer-0.9.0/examples/ruflo-run/README.md +46 -0
  119. loop_engineer-0.9.0/examples/spec-kit-run/.specify/feature.json +1 -0
  120. loop_engineer-0.9.0/examples/spec-kit-run/.specify/memory/constitution.md +35 -0
  121. loop_engineer-0.9.0/examples/spec-kit-run/README.md +27 -0
  122. loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/checklists/requirements.md +32 -0
  123. loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/plan.md +71 -0
  124. loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/quickstart.md +38 -0
  125. loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/research.md +32 -0
  126. loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/spec.md +74 -0
  127. loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/tasks.md +74 -0
  128. loop_engineer-0.9.0/examples/superpowers-run/.superpowers/sdd/progress.md +4 -0
  129. loop_engineer-0.9.0/examples/superpowers-run/README.md +15 -0
  130. loop_engineer-0.9.0/examples/superpowers-run/docs/superpowers/plans/2026-07-08-csv-dedupe.md +17 -0
  131. loop_engineer-0.9.0/examples/superpowers-run/docs/superpowers/specs/2026-07-08-csv-dedupe-design.md +19 -0
  132. loop_engineer-0.9.0/examples/task-master-run/.taskmaster/config.json +32 -0
  133. loop_engineer-0.9.0/examples/task-master-run/.taskmaster/docs/prd.txt +42 -0
  134. loop_engineer-0.9.0/examples/task-master-run/.taskmaster/reports/task-complexity-report.json +37 -0
  135. loop_engineer-0.9.0/examples/task-master-run/.taskmaster/state.json +9 -0
  136. loop_engineer-0.9.0/examples/task-master-run/.taskmaster/tasks/task_001.txt +17 -0
  137. loop_engineer-0.9.0/examples/task-master-run/.taskmaster/tasks/tasks.json +73 -0
  138. loop_engineer-0.9.0/examples/task-master-run/.taskmaster/templates/example_prd.txt +32 -0
  139. loop_engineer-0.9.0/examples/task-master-run/CLAUDE.md +57 -0
  140. loop_engineer-0.9.0/examples/task-master-run/README.md +38 -0
  141. loop_engineer-0.9.0/examples/temporal-certify/README.md +67 -0
  142. loop_engineer-0.9.0/examples/temporal-certify/workflow_example.py +187 -0
  143. loop_engineer-0.9.0/loop/__init__.py +30 -0
  144. loop_engineer-0.9.0/loop/__main__.py +379 -0
  145. loop_engineer-0.9.0/loop/architect.py +39 -0
  146. loop_engineer-0.9.0/loop/completion.py +73 -0
  147. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/contract.py +203 -21
  148. loop_engineer-0.9.0/loop/emit.py +399 -0
  149. loop_engineer-0.9.0/loop/events.py +307 -0
  150. loop_engineer-0.9.0/loop/evidence.py +194 -0
  151. loop_engineer-0.9.0/loop/foreign.py +381 -0
  152. loop_engineer-0.9.0/loop/fsm.py +67 -0
  153. loop_engineer-0.9.0/loop/integrations.py +179 -0
  154. loop_engineer-0.9.0/loop/plan.py +267 -0
  155. loop_engineer-0.9.0/loop/reducer.py +183 -0
  156. loop_engineer-0.9.0/loop/runcontrol.py +112 -0
  157. loop_engineer-0.9.0/loop/runner.py +245 -0
  158. loop_engineer-0.9.0/loop/runtime.py +223 -0
  159. loop_engineer-0.9.0/loop/simulate.py +120 -0
  160. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/pyproject.toml +3 -1
  161. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/repo-os-contract.md +237 -3
  162. loop_engineer-0.9.0/schemas/event.schema.json +33 -0
  163. loop_engineer-0.9.0/schemas/evidence.schema.json +46 -0
  164. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/manifest.schema.json +1 -0
  165. loop_engineer-0.9.0/schemas/plan.schema.json +23 -0
  166. loop_engineer-0.9.0/schemas/state.schema.json +103 -0
  167. loop_engineer-0.9.0/schemas/terminal.schema.json +90 -0
  168. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/inspect_loop.py +26 -4
  169. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/metrics.py +2 -2
  170. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/runtime_monitor.py +14 -3
  171. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/self_eval.py +20 -6
  172. loop_engineer-0.9.0/scripts/test_adversarial_kernel.py +264 -0
  173. loop_engineer-0.9.0/scripts/test_adversarial_process.py +207 -0
  174. loop_engineer-0.9.0/scripts/test_ci_release_mode.py +27 -0
  175. loop_engineer-0.9.0/scripts/test_completion_policy.py +118 -0
  176. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_conformance.py +1 -1
  177. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_version.py +4 -2
  178. loop_engineer-0.9.0/scripts/test_doctor_eventstore.py +166 -0
  179. loop_engineer-0.9.0/scripts/test_emit.py +358 -0
  180. loop_engineer-0.9.0/scripts/test_eventstore.py +296 -0
  181. loop_engineer-0.9.0/scripts/test_evidence.py +234 -0
  182. loop_engineer-0.9.0/scripts/test_flaky_example.py +55 -0
  183. loop_engineer-0.9.0/scripts/test_foreign_inspect.py +186 -0
  184. loop_engineer-0.9.0/scripts/test_fsm.py +100 -0
  185. loop_engineer-0.9.0/scripts/test_integrations.py +227 -0
  186. loop_engineer-0.9.0/scripts/test_langgraph_recipe_st3.py +75 -0
  187. loop_engineer-0.9.0/scripts/test_loop_architect_cli.py +146 -0
  188. loop_engineer-0.9.0/scripts/test_loop_cli.py +301 -0
  189. loop_engineer-0.9.0/scripts/test_loop_cli_status_replay.py +254 -0
  190. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_loop_contract_core.py +68 -1
  191. loop_engineer-0.9.0/scripts/test_loop_runcontrol_cli.py +377 -0
  192. loop_engineer-0.9.0/scripts/test_loop_simulate_cli.py +211 -0
  193. loop_engineer-0.9.0/scripts/test_loop_simulate_zero_writes.py +91 -0
  194. loop_engineer-0.9.0/scripts/test_manifest_extra_states_schema.py +38 -0
  195. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_metrics.py +17 -0
  196. loop_engineer-0.9.0/scripts/test_plan_schema.py +225 -0
  197. loop_engineer-0.9.0/scripts/test_reducer.py +317 -0
  198. loop_engineer-0.9.0/scripts/test_runner_dispatch.py +129 -0
  199. loop_engineer-0.9.0/scripts/test_runner_verifier.py +158 -0
  200. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_runtime_monitor.py +18 -0
  201. loop_engineer-0.9.0/scripts/test_state_vocabulary.py +59 -0
  202. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_template_roundtrip.py +3 -16
  203. loop_engineer-0.9.0/scripts/test_temporal_recipe.py +156 -0
  204. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_wheel_selfcontained.py +11 -0
  205. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-evals/SKILL.md +1 -1
  206. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-inspector/SKILL.md +1 -1
  207. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-run/SKILL.md +1 -1
  208. loop_engineer-0.9.0/templates/RUNLOG.md.tmpl +31 -0
  209. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/state.json.tmpl +1 -1
  210. loop_engineer-0.7.0/docs/integrations/langgraph.md +0 -30
  211. loop_engineer-0.7.0/examples/langgraph-emit/README.md +0 -34
  212. loop_engineer-0.7.0/examples/langgraph-emit/graph_example.py +0 -82
  213. loop_engineer-0.7.0/loop/__init__.py +0 -17
  214. loop_engineer-0.7.0/loop/__main__.py +0 -176
  215. loop_engineer-0.7.0/loop/emit.py +0 -258
  216. loop_engineer-0.7.0/schemas/state.schema.json +0 -25
  217. loop_engineer-0.7.0/schemas/terminal.schema.json +0 -19
  218. loop_engineer-0.7.0/scripts/test_emit.py +0 -178
  219. loop_engineer-0.7.0/scripts/test_loop_cli.py +0 -149
  220. loop_engineer-0.7.0/templates/RUNLOG.md.tmpl +0 -42
  221. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.claude-plugin/marketplace.json +0 -0
  222. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  223. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  224. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  225. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  226. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.pre-commit-hooks.yaml +0 -0
  227. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/CODE_OF_CONDUCT.md +0 -0
  228. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/GLOSSARY.md +0 -0
  229. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/LICENSE +0 -0
  230. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/SECURITY.md +0 -0
  231. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/ROADMAP-v1.0.md +0 -0
  232. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/demo.cast +0 -0
  233. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/demo.gif +0 -0
  234. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/metrics-baseline.json +0 -0
  235. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/social-card.png +0 -0
  236. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/plans/2026-06-20-loop-engineer-v1.md +0 -0
  237. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/plans/2026-06-30-loop-engineer-v1.0-roadmap.md +0 -0
  238. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/plans/2026-07-03-adoption-slices.md +0 -0
  239. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-20-loop-engineer-design.md +0 -0
  240. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-st1-metrics-baseline.md +0 -0
  241. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-st2-portable-contract-spec.md +0 -0
  242. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-st3-integration-adapters.md +0 -0
  243. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-v04-credibility-enforcement.md +0 -0
  244. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-07-03-adoption-slices-design.md +0 -0
  245. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/evals/cases/structural.json +0 -0
  246. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/evals/rubric.md +0 -0
  247. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/ADR.md +0 -0
  248. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/README.md +0 -0
  249. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/RUNLOG.md +0 -0
  250. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/SPEC.md +0 -0
  251. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/TASKS.json +0 -0
  252. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/WORKFLOW.md +0 -0
  253. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/scripts/run-example +0 -0
  254. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/scripts/verify-fast +0 -0
  255. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/scripts/verify-full +0 -0
  256. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/manifest.json +0 -0
  257. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/measure_coverage.py +0 -0
  258. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/pricing.py +0 -0
  259. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/test_holdout.py +0 -0
  260. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/test_visible.py +0 -0
  261. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/terminal_state.json +0 -0
  262. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/naive-loop/README.md +0 -0
  263. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/hooks/stop_firewall.py +0 -0
  264. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/_resources.py +0 -0
  265. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/paths.py +0 -0
  266. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/scaffold.py +0 -0
  267. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/architecture-matrix.md +0 -0
  268. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/eval-suite.md +0 -0
  269. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/loop-patterns.md +0 -0
  270. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/model-routing.md +0 -0
  271. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/platform-map.md +0 -0
  272. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/prompt-templates.md +0 -0
  273. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/safety-and-approvals.md +0 -0
  274. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/receipt.schema.json +0 -0
  275. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/repair-record.schema.json +0 -0
  276. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/rollout-record.schema.json +0 -0
  277. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/tasks.schema.json +0 -0
  278. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/action_scorecard.py +0 -0
  279. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/anticheat_scan.py +0 -0
  280. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/benchmark_harness.py +0 -0
  281. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/holdout_gate.py +0 -0
  282. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/rollout_ledger.py +0 -0
  283. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_action_scorecard.py +0 -0
  284. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_anticheat_scan.py +0 -0
  285. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_benchmark_harness.py +0 -0
  286. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_contract_records.py +0 -0
  287. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_adoption.py +0 -0
  288. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_baseline.py +0 -0
  289. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_claims.py +0 -0
  290. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_example_runnable.py +0 -0
  291. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_holdout_gate.py +0 -0
  292. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_inspect_loop.py +0 -0
  293. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_langgraph_recipe.py +0 -0
  294. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_metrics_cli.py +0 -0
  295. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_precommit_hook.py +0 -0
  296. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_resources.py +0 -0
  297. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_rollout_ledger.py +0 -0
  298. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_scaffold.py +0 -0
  299. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_schemas_metrics.py +0 -0
  300. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_self_eval.py +0 -0
  301. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_stop_firewall.py +0 -0
  302. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_validate_frontmatter.py +0 -0
  303. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/validate_frontmatter.py +0 -0
  304. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-architect/SKILL.md +0 -0
  305. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-contract/SKILL.md +0 -0
  306. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-engineer/SKILL.md +0 -0
  307. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-flywheel/SKILL.md +0 -0
  308. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-inspector/reference/patterns.md +0 -0
  309. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-repair/SKILL.md +0 -0
  310. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-runtime-monitor/SKILL.md +0 -0
  311. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-runtime-monitor/reference/patterns.md +0 -0
  312. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/AGENTS.md.tmpl +0 -0
  313. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/EVALS-rubric.md.tmpl +0 -0
  314. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/SPEC.md.tmpl +0 -0
  315. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/TASKS.json.tmpl +0 -0
  316. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/WORKFLOW.md.tmpl +0 -0
  317. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/extract-trace-metrics.sh +0 -0
  318. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/judge-rubric.sh +0 -0
  319. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/manifest.yaml.tmpl +0 -0
  320. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/terminal_state.json.tmpl +0 -0
  321. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/verify-fast.sh +0 -0
  322. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/verify-full.sh +0 -0
  323. {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/verify-safety.sh +0 -0
@@ -1,11 +1,25 @@
1
1
  {
2
2
  "name": "loop-engineer",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Design, launch, verify, repair, and improve agent loops. A Claude-Code-native architect+operator for long-running, verifiable, self-improving agentic-coding systems.",
5
- "author": { "name": "Sollan Systems", "url": "https://github.com/SollanSystems" },
5
+ "author": {
6
+ "name": "Sollan Systems",
7
+ "url": "https://github.com/SollanSystems"
8
+ },
6
9
  "homepage": "https://github.com/SollanSystems/loop-engineer",
7
10
  "repository": "https://github.com/SollanSystems/loop-engineer",
8
- "keywords": ["agent", "loop", "agentic", "verification", "harness", "orchestration", "self-improvement", "claude-code", "eval", "repair"],
11
+ "keywords": [
12
+ "agent",
13
+ "loop",
14
+ "agentic",
15
+ "verification",
16
+ "harness",
17
+ "orchestration",
18
+ "self-improvement",
19
+ "claude-code",
20
+ "eval",
21
+ "repair"
22
+ ],
9
23
  "license": "MIT",
10
24
  "hooks": {
11
25
  "Stop": [
@@ -0,0 +1,16 @@
1
+ version: 2
2
+ updates:
3
+ # Covers .github/workflows/*.yml and the root composite action.yml.
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ groups:
9
+ actions:
10
+ patterns: ["*"]
11
+
12
+ # Runtime is stdlib-only; this watches the optional extras and any future pins.
13
+ - package-ecosystem: "pip"
14
+ directory: "/"
15
+ schedule:
16
+ interval: "weekly"
@@ -5,6 +5,9 @@ on:
5
5
  branches: [main]
6
6
  pull_request:
7
7
 
8
+ permissions:
9
+ contents: read
10
+
8
11
  jobs:
9
12
  gates:
10
13
  name: gates (py${{ matrix.python-version }})
@@ -14,14 +17,14 @@ jobs:
14
17
  matrix:
15
18
  python-version: ["3.10", "3.11", "3.12"]
16
19
  steps:
17
- - uses: actions/checkout@v4
20
+ - uses: actions/checkout@v7
18
21
 
19
- - uses: actions/setup-python@v5
22
+ - uses: actions/setup-python@v6
20
23
  with:
21
24
  python-version: ${{ matrix.python-version }}
22
25
 
23
26
  - name: Install gate dependencies
24
- run: python -m pip install --upgrade pip pyyaml pytest jsonschema
27
+ run: python -m pip install --upgrade pip pyyaml pytest jsonschema hypothesis
25
28
 
26
29
  - name: Frontmatter gate
27
30
  run: python -B scripts/validate_frontmatter.py
@@ -45,27 +48,55 @@ jobs:
45
48
 
46
49
  - name: Quickstart smoke test
47
50
  run: |
48
- python -B -m loop doctor examples/coverage-repair
51
+ python -B -m loop doctor --mode release examples/coverage-repair
49
52
  python -B -m loop inspect examples/coverage-repair
50
53
 
54
+ - name: Plan lint smoke test
55
+ run: |
56
+ python -B -m loop plan-lint --mode release examples/plans/coverage-repair.plan.json
57
+ if python -B -m loop plan-lint --mode release examples/plans/invalid/cyclic-dependency.plan.json; then
58
+ echo "::error::cyclic-dependency.plan.json unexpectedly passed plan-lint"
59
+ exit 1
60
+ fi
61
+ if python -B -m loop plan-lint --mode release examples/plans/invalid/missing-goal.plan.json; then
62
+ echo "::error::missing-goal.plan.json unexpectedly passed plan-lint"
63
+ exit 1
64
+ fi
65
+
51
66
  recipe-langgraph:
52
67
  name: recipe (langgraph)
53
68
  runs-on: ubuntu-latest
54
69
  steps:
55
- - uses: actions/checkout@v4
56
- - uses: actions/setup-python@v5
70
+ - uses: actions/checkout@v7
71
+ - uses: actions/setup-python@v6
57
72
  with:
58
73
  python-version: "3.12"
59
74
  - name: Install recipe dependencies
60
75
  run: python -m pip install --upgrade pip pyyaml pytest jsonschema langgraph
61
76
  - name: LangGraph recipe end-to-end
62
- run: python -B -m pytest -q -p no:cacheprovider scripts/test_langgraph_recipe.py
77
+ run: python -B -m pytest -q -p no:cacheprovider scripts/test_langgraph_recipe.py scripts/test_langgraph_recipe_st3.py
78
+
79
+ recipe-temporal:
80
+ name: recipe (temporal)
81
+ runs-on: ubuntu-latest
82
+ steps:
83
+ - uses: actions/checkout@v7
84
+ - uses: actions/setup-python@v6
85
+ with:
86
+ python-version: "3.12"
87
+ - name: Install recipe dependencies
88
+ run: python -m pip install --upgrade pip pyyaml pytest jsonschema temporalio
89
+ - name: Temporal recipe end-to-end
90
+ # start_local() downloads the Temporal dev-server binary (~20MB) to
91
+ # $TMPDIR/temporal-sdk-python-<version> — ephemeral and quick, so (like
92
+ # recipe-langgraph) this job carries no cache step.
93
+ run: python -B -m pytest -q -p no:cacheprovider scripts/test_temporal_recipe.py
63
94
 
64
95
  action-dogfood:
65
96
  name: action (dogfood on flagship example)
66
97
  runs-on: ubuntu-latest
67
98
  steps:
68
- - uses: actions/checkout@v4
99
+ - uses: actions/checkout@v7
69
100
  # The repo root's live .loop/ is gitignored, so it does not exist in a fresh
70
101
  # CI checkout — the tracked flagship example is the contract the action gates
71
102
  # (doctor-clean, inspect 90/strong in the action's dependency-free install).
@@ -4,13 +4,16 @@ on:
4
4
  push:
5
5
  tags: ["v*"]
6
6
 
7
+ permissions:
8
+ contents: read
9
+
7
10
  jobs:
8
11
  build:
9
12
  runs-on: ubuntu-latest
10
13
  steps:
11
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@v7
12
15
 
13
- - uses: actions/setup-python@v5
16
+ - uses: actions/setup-python@v6
14
17
  with:
15
18
  python-version: "3.12"
16
19
 
@@ -38,7 +41,7 @@ jobs:
38
41
  /tmp/smoke/bin/loop doctor /tmp/smoke-loop
39
42
  /tmp/smoke/bin/loop inspect /tmp/smoke-loop || true
40
43
 
41
- - uses: actions/upload-artifact@v4
44
+ - uses: actions/upload-artifact@v7
42
45
  with:
43
46
  name: dist
44
47
  path: dist/
@@ -50,7 +53,7 @@ jobs:
50
53
  permissions:
51
54
  id-token: write
52
55
  steps:
53
- - uses: actions/download-artifact@v4
56
+ - uses: actions/download-artifact@v8
54
57
  with:
55
58
  name: dist
56
59
  path: dist/
@@ -1,19 +1,20 @@
1
- # Ephemeral workbench
2
- .tmp/
1
+ # Ephemeral workbench (root-anchored: examples/*-run fixtures may legitimately
2
+ # contain same-named dirs — .claude/, .taskmaster/, memory/ — that MUST track)
3
+ /.tmp/
3
4
 
4
5
  # Loop run telemetry (operating-contract state for the self-improvement run; not plugin content)
5
- .loop/
6
+ /.loop/
6
7
 
7
8
  # Machine-local Claude Code config + GSD audit telemetry (not plugin content)
8
- .claude/
9
- .gsd/
9
+ /.claude/
10
+ /.gsd/
10
11
 
11
12
  # Local session memory / private build narrative (not plugin content)
12
- memory/
13
+ /memory/
13
14
 
14
15
  # Workbench dirs (review scratch + roadmap drafts; not plugin content)
15
- review/
16
- roadmap/
16
+ /review/
17
+ /roadmap/
17
18
 
18
19
  # Python
19
20
  __pycache__/
@@ -33,3 +34,6 @@ Thumbs.db
33
34
  # Secrets — never commit
34
35
  .env
35
36
  *.local
37
+
38
+ # Local cold-start context — deliberately untracked (see its own do-not-commit note)
39
+ /CLAUDE.md
@@ -14,6 +14,99 @@ All notable changes to `loop-engineer` are documented here.
14
14
  `WORKFLOW.md` and `README.md` are reworded to describe the mechanism; the 0.3.4
15
15
  history is left intact.
16
16
 
17
+ ## 0.9.0 — 2026-07-17
18
+
19
+ **The event-sourced kernel.** The contract gains a durable runtime substrate:
20
+ `loop-engineer/event@1` events in an append-only SQLite store
21
+ (`.loop/events.db` — WAL, `synchronous=FULL`, no-update/no-delete triggers,
22
+ `expected_sequence` compare-and-swap) folded by a deterministic reducer that
23
+ enforces FSM legality, the all-required completion gate, and terminal
24
+ immutability through the same `loop.fsm`/`loop.completion` modules the
25
+ writers use (#62). Around it: a canonical intermediate-state FSM with
26
+ unknown-state validation and writer timestamps (#59); `loop-engineer/plan@1`
27
+ — a Loop Plan IR with a `plan-lint` verb and a typed capability vocabulary
28
+ (#61); `loop-engineer/evidence@1` — hashed evidence objects with provenance,
29
+ re-verifiable byte-for-byte (#63); administrative `terminal_superseded`
30
+ events — the only event a terminated run admits, so a wrong terminal is
31
+ corrected on the record instead of edited in place (#64); a run-control event
32
+ vocabulary for approval, pause, and resume (#73); and explicit validation
33
+ modes `--mode basic|strict|release` across the CLI (#60).
34
+
35
+ **Runtime verbs.** `loop run` — event-sourced single-step dispatch with
36
+ crash-safe resume (#71); read-only `loop status` and `loop replay` (#70);
37
+ `loop simulate` — strictly read-only dry-run dispatch prediction (#75);
38
+ `approve` / `pause` / `resume` / `cancel` (#74); a subprocess-isolated
39
+ verifier runner — shlex argv, no shell, wall-clock cap, bounded output tail,
40
+ typed failure classes — plus typed fail-loud stubs for the not-yet-shipped
41
+ run modes (#72); `loop architect` as a typed fail-loud deferral (#76). And
42
+ `loop doctor` now composes an event-store consistency gate over
43
+ `status`/`replay` whenever `.loop/events.db` exists — one hard gate across
44
+ the file layer and the event log (#77).
45
+
46
+ **Completion-semantics hardening (Phase 0).** `Succeeded` now requires
47
+ **all** required criteria satisfied plus evidence — the prior any-true
48
+ reading was a correctness bug, fixed in one shared `loop/completion.py`
49
+ wired into the writer API, the integrations projection, and the contract
50
+ validator's G1 check. `terminal_state.json` is create-once (atomic;
51
+ `force` always raises); iteration ids are canonical ints (legacy decimal
52
+ strings stay read-compatible); `terminal@1` gains an additive
53
+ `completion_policy` (#48).
54
+
55
+ **Adversarial hardening.** A property-based kernel suite over FSM legality,
56
+ G1 completion, supersession, and replay determinism (#65), and a
57
+ process/security suite — real crash injection at code-controlled barriers,
58
+ verifier tampering, workspace-escape TOCTOU (#66). The `verify_evidence()`
59
+ symlink-swap TOCTOU that suite discovered (#67) is closed by fd-pinned
60
+ open-then-verify (#69), retiring the strict xfail marker.
61
+
62
+ **Scoreboard, funnel, housekeeping.** The ST5 harness scoreboard — 9 public
63
+ harnesses read through a foreign-layout registry with 8 vendored fixtures
64
+ (#41); contributor-funnel fixes — trigger-phrase disambiguation (#42),
65
+ documentation-completeness labels on the self-eval (#43),
66
+ `approval_requested`/`replanned` recognized as honest-red metrics tokens
67
+ (#44), metrics-clean RUNLOG seeding (#45); Dependabot version updates and
68
+ least-privilege workflow permissions (#46, #47).
69
+
70
+ **Known limitation.** Read verbs over the event store leave SQLite
71
+ `-wal`/`-shm` sidecars next to `.loop/events.db` (read-only connections
72
+ recreate them and cannot checkpoint on close). Store content is never
73
+ mutated, but tree-byte-identity checks over a store-backed workspace will
74
+ notice them.
75
+
76
+ Test baseline: 933 passed / 16 skipped with the `yaml`+`schemas` extras;
77
+ 864 / 85 in structural-fallback mode (PyYAML only).
78
+
79
+ ## 0.8.0 — 2026-07-09
80
+
81
+ **ST3 — integration adapters.** `loop/integrations.py`: an engine-neutral,
82
+ pure-stdlib projection (`EngineOutcome` + `to_terminal_state`) from any
83
+ engine's "the run ended" signal onto the 7 typed terminal states, with the
84
+ fixed precedence safety → human → blocked → budget → spec-gap → gate verdict.
85
+ `Succeeded` is reachable only through a green `holdout_gate.decide` verdict,
86
+ a clean anticheat sweep, a met criterion, and evidence; `false_completion` is
87
+ copied from the gate, never synthesized; missing gate/anticheat input fails
88
+ closed to `FailedUnverifiable`. The LangGraph recipe is upgraded in place to
89
+ this bar (its run now scores clean under `loop metrics` — closing the
90
+ recorded FCR-1.0 follow-up) and a Temporal recipe lands
91
+ (`examples/temporal-certify/`, certify-activity pattern, cancellation →
92
+ `AbortedByHuman`, retry exhaustion → `FailedBlocked`, timeout →
93
+ `FailedBudget`). Both recipes pin the false-completion invariant
94
+ (visible-green/holdout-red → `FailedUnverifiable` with
95
+ `false_completion: true`, never `Succeeded`) and pass the doctor round-trip.
96
+
97
+ **ST4 — contributor funnel.** `loop inspect` now recognizes a foreign
98
+ Superpowers-style run dir read-only (`loop/foreign.py` — a layout mapper onto
99
+ the existing `LoopPaths` seam; the M2/M3-hardened scorer is untouched and a
100
+ foreign harness with no gate and no terminal record scores honestly low).
101
+ The reading is checked in as `docs/gap-reports/superpowers.md` — the §14
102
+ conformance checklist evaluated against a vendored, sanitized fixture
103
+ (`examples/superpowers-run/`). A second runnable example lands:
104
+ `examples/flaky-test-triage/` — doctor-clean, gate-backed, and the showcase
105
+ for repair records (`loop metrics` derives a non-null repair-productivity of
106
+ 1.0 from its anchored red→green repair). Seven gate-backed starter issues are
107
+ drafted under `docs/contributing/issues/` and filed at release;
108
+ CONTRIBUTING gains the start-here funnel.
109
+
17
110
  ## 0.7.0 — 2026-07-08
18
111
 
19
112
  **ST2 — the portable standard.** The on-disk contract is now a documented,
@@ -11,7 +11,7 @@ you open a PR, all of these must be green (CI runs them on every push):
11
11
  ```bash
12
12
  # from the repo root
13
13
  python3 scripts/validate_frontmatter.py # SKILL.md frontmatter
14
- python3 scripts/self_eval.py # 13 structural invariants
14
+ python3 scripts/self_eval.py # 13 structural/doc-completeness invariants
15
15
  python3 -m pytest -q scripts # the test suite
16
16
  python3 -m py_compile loop/*.py scripts/*.py
17
17
  python3 -m loop doctor examples/coverage-repair # quickstart still works
@@ -20,6 +20,35 @@ python3 -m loop inspect examples/coverage-repair
20
20
 
21
21
  If you don't have the deps, prefix with `uv run --with pyyaml --with pytest`.
22
22
 
23
+ `scripts/test_adversarial_kernel.py` also uses the dev-only `hypothesis` dependency: install it with `pip install -e ".[dev]"`, or use `uv run --with hypothesis --with pytest`. A plain install never pulls it in; without it, those property tests skip rather than fail.
24
+
25
+ `scripts/test_adversarial_process.py` spawns short-lived child processes and sends real `SIGKILL` signals to simulate mid-transaction crashes; it is POSIX-only (CI uses `ubuntu-latest`), requires no new dependency, and adds a few seconds of subprocess wall time.
26
+
27
+ Most `self_eval.py` checks verify documentation-completeness — that the suite's
28
+ canonical vocabulary (terminal states, repair-record fields, eval layers +
29
+ metrics) is present in the skill prose — not that a running loop enforces it. The
30
+ runtime/behavioral gate is `python3 -m loop doctor` and the contract's own
31
+ `verify-*` scripts, which is why both appear in the list above.
32
+
33
+ ## Start here — the contributor funnel
34
+
35
+ Every open starter issue names **the gate that proves the fix** — a
36
+ deterministic command that is red before your change and green after. That is
37
+ the whole review bar (see the ground rule above).
38
+
39
+ - [`good first issue`](https://github.com/SollanSystems/loop-engineer/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
40
+ — small, bounded, gate-verifiable fixes.
41
+ - [`help wanted`](https://github.com/SollanSystems/loop-engineer/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
42
+ — integration recipes (OpenHands, ruflo — designs already written in
43
+ `docs/superpowers/specs/2026-06-30-st3-integration-adapters.md`) and
44
+ foreign-harness gap reports (`docs/gap-reports/`).
45
+
46
+ The contribution target for anything that emits or consumes contract
47
+ artifacts is the standard: `reference/repo-os-contract.md` — a harness that
48
+ satisfies the §14 conformance checklist (A1–E1) may claim it emits a
49
+ Loop-Engineer-conformant contract v1. Drafts for the seeded issues live in
50
+ `docs/contributing/issues/` and are filed on GitHub at release time.
51
+
23
52
  ## Repository layout
24
53
 
25
54
  | Path | What lives here |
@@ -34,7 +63,10 @@ If you don't have the deps, prefix with `uv run --with pyyaml --with pytest`.
34
63
 
35
64
  ## Authoring or editing a skill
36
65
 
37
- The `self_eval.py` checks encode hard rules — match them or the gate fails:
66
+ The `self_eval.py` checks encode hard rules — match them or the gate fails. Most
67
+ are documentation-completeness checks (the canonical vocabulary must appear in the
68
+ skill prose), not behavioral enforcement of a running loop — that gate is `loop
69
+ doctor` and the contract's own `verify-*` scripts:
38
70
 
39
71
  - **Frontmatter** must have `name:` and `description:`. The directory name **must equal**
40
72
  the frontmatter `name`. Keep the `description` a *quoted* YAML scalar (the suite quotes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: loop-engineer
3
- Version: 0.7.0
3
+ Version: 0.9.0
4
4
  Summary: Portable Loop Contract Core: validate and inspect repo-native operating contracts for agent loops.
5
5
  Project-URL: Homepage, https://github.com/SollanSystems/loop-engineer
6
6
  Project-URL: Repository, https://github.com/SollanSystems/loop-engineer
@@ -29,6 +29,8 @@ License: MIT License
29
29
  License-File: LICENSE
30
30
  Keywords: agent,agentic,claude-code,eval,harness,loop,orchestration,repair,self-improvement,verification
31
31
  Requires-Python: >=3.10
32
+ Provides-Extra: dev
33
+ Requires-Dist: hypothesis>=6; extra == 'dev'
32
34
  Provides-Extra: schemas
33
35
  Requires-Dist: jsonschema>=4; extra == 'schemas'
34
36
  Provides-Extra: yaml
@@ -42,7 +44,7 @@ Description-Content-Type: text/markdown
42
44
  [![CI](https://github.com/SollanSystems/loop-engineer/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/SollanSystems/loop-engineer/actions/workflows/ci.yml)
43
45
  [![Python 3.10–3.12](https://img.shields.io/badge/python-3.10%E2%80%933.12-blue)](https://www.python.org/downloads/)
44
46
  [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
45
- [![Release](https://img.shields.io/badge/release-0.7.0-blue)](https://github.com/SollanSystems/loop-engineer/tags)
47
+ [![Release](https://img.shields.io/badge/release-0.9.0-blue)](https://github.com/SollanSystems/loop-engineer/tags)
46
48
 
47
49
  Long-running agents commit **false completion**. After context compaction they
48
50
  forget what "done" meant, optimize to the visible test, patch in circles, and
@@ -57,7 +59,11 @@ ships, on disk and runnable today:
57
59
  - a **held-out gate** and an **anti-cheat scan** built to catch a loop gaming its
58
60
  own verifier;
59
61
  - a runnable example whose `false_completion: false` is backed by a committed,
60
- real gate verdict — `.loop/artifacts/holdout-verdict.json`, not a hand-set flag.
62
+ real gate verdict — `.loop/artifacts/holdout-verdict.json`, not a hand-set flag;
63
+ - an **event-sourced runtime** — `run`, `status`, `replay`, `simulate`, and
64
+ approve/pause/resume/cancel over an append-only SQLite event log
65
+ (`.loop/events.db`), folded by a deterministic reducer that enforces the same
66
+ completion gate as the writers, with crash-safe single-step resume.
61
67
 
62
68
  ![The inspector scores a self-asserted DIY loop 0/weak, then the gate-backed example 90/strong — both runs live](docs/demo.gif)
63
69
 
@@ -161,6 +167,7 @@ directory, and need no agent runtime to run.
161
167
  {
162
168
  "ok": true,
163
169
  "validation_mode": "structural-fallback",
170
+ "requested_mode": "auto",
164
171
  "schemas_checked": [
165
172
  "loop-engineer/manifest@1",
166
173
  "loop-engineer/state@1",
@@ -176,6 +183,15 @@ default, or real JSON-Schema validation against `schemas/*.json` when the
176
183
  optional `jsonschema` dependency is present (`pip install -e ".[schemas]"`), in
177
184
  which case it reads `"jsonschema"`.
178
185
 
186
+ For `doctor`, `validate`, and `verify`, `--mode basic|strict|release` makes the
187
+ choice explicit. With no flag, the current auto-detect behavior is unchanged
188
+ for backward compatibility with existing foreign and scoreboard callers.
189
+ `--mode basic` always uses the structural fallback, regardless of whether
190
+ `jsonschema` happens to be installed. `--mode strict` and `--mode release`
191
+ require real JSON-Schema validation and fail non-zero rather than silently
192
+ downgrade if the `jsonschema` extra is missing. `release` currently has the
193
+ same behavior as `strict`; it is reserved for a stricter future policy.
194
+
179
195
  `inspect` is a static contract linter: it scores the loop contract's structure —
180
196
  what proof machinery is present and what is missing — without running the loop:
181
197
 
@@ -253,7 +269,7 @@ terminal outcome:
253
269
  .loop/
254
270
  manifest.yaml # contract metadata
255
271
  state.json # live FSM cursor
256
- terminal_state.json # final exit record; written once — emit refuses overwrite without force=True
272
+ terminal_state.json # final exit record; immutable once written
257
273
  artifacts/ # evidence bundles and intermediate outputs
258
274
  approvals/ # approval requests and resolutions
259
275
  checkpoints/ # recoverable snapshots
@@ -307,6 +323,12 @@ The portable core lives in `loop/` and validates schema-bearing artifacts in
307
323
  - `loop-engineer/state@1`
308
324
  - `loop-engineer/tasks@1`
309
325
  - `loop-engineer/terminal@1`
326
+ - `loop-engineer/receipt@1`
327
+ - `loop-engineer/repair@1`
328
+ - `loop-engineer/rollout@1`
329
+ - `loop-engineer/plan@1`
330
+ - `loop-engineer/event@1`
331
+ - `loop-engineer/evidence@1`
310
332
 
311
333
  ### Claude Code plugin
312
334
 
@@ -338,13 +360,14 @@ otherwise, the stop is blocked with the exact doctor issues. No-op without
338
360
  **Any Python runtime** — `loop.emit` is a pure-stdlib writer for foreign
339
361
  orchestrators (LangGraph, or anything that can call four functions):
340
362
  `open_contract`, `append_iteration`, `append_receipt`, `terminate`. The writer
341
- refuses an evidence-free `Succeeded` at write time. Recipe:
363
+ refuses `Succeeded` unless every declared criterion is true and evidence is
364
+ present. Recipe:
342
365
  [docs/integrations/langgraph.md](docs/integrations/langgraph.md).
343
366
 
344
367
  **CI** — one workflow step validates the contract and publishes a scorecard:
345
368
 
346
369
  ```yaml
347
- - uses: SollanSystems/loop-engineer@v0.7.0
370
+ - uses: SollanSystems/loop-engineer@v0.9.0
348
371
  with:
349
372
  path: "."
350
373
  ```
@@ -426,20 +449,23 @@ claude plugin validate --strict .claude-plugin/plugin.json
426
449
  ```
427
450
 
428
451
  The structural self-eval checks skill presence, frontmatter, cross-links,
429
- terminal-state coverage, repair-record fields, eval metrics, templates, secret
430
- patterns, dispatch examples, the bring-your-own-verifier default, the MIT
431
- license, and README differentiation.
452
+ templates, secret patterns, dispatch examples, the bring-your-own-verifier
453
+ default, the MIT license, and README differentiation. Three further checks are
454
+ documentation-completeness scans: they confirm the canonical vocabulary for
455
+ terminal-state coverage, repair-record fields, and eval metrics is present in the
456
+ skill prose — not that a running loop enforces it (that runtime gate is `loop
457
+ doctor` and the contract's own `verify-*` scripts).
432
458
 
433
459
  ---
434
460
 
435
461
  ## Status
436
462
 
437
- - Version: `0.7.0`
438
- - Release tag: `v0.7.0` (PyPI publish trigger; plugin tags through 0.6.0 used `loop-engineer--v<version>`)
463
+ - Version: `0.9.0`
464
+ - Release tag: `v0.9.0` (PyPI publish trigger; plugin tags through 0.6.0 used `loop-engineer--v<version>`)
439
465
  - License: MIT
440
466
  - Primary interface: Claude Code plugin
441
467
  - Portable core: Python CLI + JSON schemas
442
- - Current reference example: `examples/coverage-repair`
468
+ - Current reference examples: `examples/coverage-repair`, `examples/flaky-test-triage`
443
469
 
444
470
  ---
445
471
 
@@ -5,7 +5,7 @@
5
5
  [![CI](https://github.com/SollanSystems/loop-engineer/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/SollanSystems/loop-engineer/actions/workflows/ci.yml)
6
6
  [![Python 3.10–3.12](https://img.shields.io/badge/python-3.10%E2%80%933.12-blue)](https://www.python.org/downloads/)
7
7
  [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
8
- [![Release](https://img.shields.io/badge/release-0.7.0-blue)](https://github.com/SollanSystems/loop-engineer/tags)
8
+ [![Release](https://img.shields.io/badge/release-0.9.0-blue)](https://github.com/SollanSystems/loop-engineer/tags)
9
9
 
10
10
  Long-running agents commit **false completion**. After context compaction they
11
11
  forget what "done" meant, optimize to the visible test, patch in circles, and
@@ -20,7 +20,11 @@ ships, on disk and runnable today:
20
20
  - a **held-out gate** and an **anti-cheat scan** built to catch a loop gaming its
21
21
  own verifier;
22
22
  - a runnable example whose `false_completion: false` is backed by a committed,
23
- real gate verdict — `.loop/artifacts/holdout-verdict.json`, not a hand-set flag.
23
+ real gate verdict — `.loop/artifacts/holdout-verdict.json`, not a hand-set flag;
24
+ - an **event-sourced runtime** — `run`, `status`, `replay`, `simulate`, and
25
+ approve/pause/resume/cancel over an append-only SQLite event log
26
+ (`.loop/events.db`), folded by a deterministic reducer that enforces the same
27
+ completion gate as the writers, with crash-safe single-step resume.
24
28
 
25
29
  ![The inspector scores a self-asserted DIY loop 0/weak, then the gate-backed example 90/strong — both runs live](docs/demo.gif)
26
30
 
@@ -124,6 +128,7 @@ directory, and need no agent runtime to run.
124
128
  {
125
129
  "ok": true,
126
130
  "validation_mode": "structural-fallback",
131
+ "requested_mode": "auto",
127
132
  "schemas_checked": [
128
133
  "loop-engineer/manifest@1",
129
134
  "loop-engineer/state@1",
@@ -139,6 +144,15 @@ default, or real JSON-Schema validation against `schemas/*.json` when the
139
144
  optional `jsonschema` dependency is present (`pip install -e ".[schemas]"`), in
140
145
  which case it reads `"jsonschema"`.
141
146
 
147
+ For `doctor`, `validate`, and `verify`, `--mode basic|strict|release` makes the
148
+ choice explicit. With no flag, the current auto-detect behavior is unchanged
149
+ for backward compatibility with existing foreign and scoreboard callers.
150
+ `--mode basic` always uses the structural fallback, regardless of whether
151
+ `jsonschema` happens to be installed. `--mode strict` and `--mode release`
152
+ require real JSON-Schema validation and fail non-zero rather than silently
153
+ downgrade if the `jsonschema` extra is missing. `release` currently has the
154
+ same behavior as `strict`; it is reserved for a stricter future policy.
155
+
142
156
  `inspect` is a static contract linter: it scores the loop contract's structure —
143
157
  what proof machinery is present and what is missing — without running the loop:
144
158
 
@@ -216,7 +230,7 @@ terminal outcome:
216
230
  .loop/
217
231
  manifest.yaml # contract metadata
218
232
  state.json # live FSM cursor
219
- terminal_state.json # final exit record; written once — emit refuses overwrite without force=True
233
+ terminal_state.json # final exit record; immutable once written
220
234
  artifacts/ # evidence bundles and intermediate outputs
221
235
  approvals/ # approval requests and resolutions
222
236
  checkpoints/ # recoverable snapshots
@@ -270,6 +284,12 @@ The portable core lives in `loop/` and validates schema-bearing artifacts in
270
284
  - `loop-engineer/state@1`
271
285
  - `loop-engineer/tasks@1`
272
286
  - `loop-engineer/terminal@1`
287
+ - `loop-engineer/receipt@1`
288
+ - `loop-engineer/repair@1`
289
+ - `loop-engineer/rollout@1`
290
+ - `loop-engineer/plan@1`
291
+ - `loop-engineer/event@1`
292
+ - `loop-engineer/evidence@1`
273
293
 
274
294
  ### Claude Code plugin
275
295
 
@@ -301,13 +321,14 @@ otherwise, the stop is blocked with the exact doctor issues. No-op without
301
321
  **Any Python runtime** — `loop.emit` is a pure-stdlib writer for foreign
302
322
  orchestrators (LangGraph, or anything that can call four functions):
303
323
  `open_contract`, `append_iteration`, `append_receipt`, `terminate`. The writer
304
- refuses an evidence-free `Succeeded` at write time. Recipe:
324
+ refuses `Succeeded` unless every declared criterion is true and evidence is
325
+ present. Recipe:
305
326
  [docs/integrations/langgraph.md](docs/integrations/langgraph.md).
306
327
 
307
328
  **CI** — one workflow step validates the contract and publishes a scorecard:
308
329
 
309
330
  ```yaml
310
- - uses: SollanSystems/loop-engineer@v0.7.0
331
+ - uses: SollanSystems/loop-engineer@v0.9.0
311
332
  with:
312
333
  path: "."
313
334
  ```
@@ -389,20 +410,23 @@ claude plugin validate --strict .claude-plugin/plugin.json
389
410
  ```
390
411
 
391
412
  The structural self-eval checks skill presence, frontmatter, cross-links,
392
- terminal-state coverage, repair-record fields, eval metrics, templates, secret
393
- patterns, dispatch examples, the bring-your-own-verifier default, the MIT
394
- license, and README differentiation.
413
+ templates, secret patterns, dispatch examples, the bring-your-own-verifier
414
+ default, the MIT license, and README differentiation. Three further checks are
415
+ documentation-completeness scans: they confirm the canonical vocabulary for
416
+ terminal-state coverage, repair-record fields, and eval metrics is present in the
417
+ skill prose — not that a running loop enforces it (that runtime gate is `loop
418
+ doctor` and the contract's own `verify-*` scripts).
395
419
 
396
420
  ---
397
421
 
398
422
  ## Status
399
423
 
400
- - Version: `0.7.0`
401
- - Release tag: `v0.7.0` (PyPI publish trigger; plugin tags through 0.6.0 used `loop-engineer--v<version>`)
424
+ - Version: `0.9.0`
425
+ - Release tag: `v0.9.0` (PyPI publish trigger; plugin tags through 0.6.0 used `loop-engineer--v<version>`)
402
426
  - License: MIT
403
427
  - Primary interface: Claude Code plugin
404
428
  - Portable core: Python CLI + JSON schemas
405
- - Current reference example: `examples/coverage-repair`
429
+ - Current reference examples: `examples/coverage-repair`, `examples/flaky-test-triage`
406
430
 
407
431
  ---
408
432
 
@@ -29,7 +29,7 @@ inputs:
29
29
  runs:
30
30
  using: "composite"
31
31
  steps:
32
- - uses: actions/setup-python@v5
32
+ - uses: actions/setup-python@v6
33
33
  with:
34
34
  python-version: ${{ inputs.python-version }}
35
35