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.
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.claude-plugin/plugin.json +17 -3
- loop_engineer-0.9.0/.github/dependabot.yml +16 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/workflows/ci.yml +39 -8
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/workflows/publish.yml +7 -4
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.gitignore +12 -8
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/CHANGELOG.md +93 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/CONTRIBUTING.md +34 -2
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/PKG-INFO +38 -12
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/README.md +35 -11
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/action.yml +1 -1
- loop_engineer-0.9.0/docs/adr/0001-proof-kernel-and-runtime.md +104 -0
- loop_engineer-0.9.0/docs/contributing/issues/01-good-first-qw9-trigger-phrases.md +45 -0
- loop_engineer-0.9.0/docs/contributing/issues/02-good-first-qw10-self-eval-labels.md +39 -0
- loop_engineer-0.9.0/docs/contributing/issues/03-good-first-emit-metrics-vocabulary.md +44 -0
- loop_engineer-0.9.0/docs/contributing/issues/04-help-wanted-openhands-recipe.md +42 -0
- loop_engineer-0.9.0/docs/contributing/issues/05-help-wanted-ruflo-recipe.md +39 -0
- loop_engineer-0.9.0/docs/contributing/issues/06-help-wanted-gap-reports.md +42 -0
- loop_engineer-0.9.0/docs/contributing/issues/07-help-wanted-emit-scaffold-runlog-seed.md +61 -0
- loop_engineer-0.9.0/docs/gap-reports/scoreboard.md +296 -0
- loop_engineer-0.9.0/docs/gap-reports/superpowers.md +108 -0
- loop_engineer-0.9.0/docs/integrations/langgraph.md +88 -0
- loop_engineer-0.9.0/docs/integrations/temporal.md +90 -0
- loop_engineer-0.9.0/docs/superpowers/plans/2026-07-08-v0.8.0-composes-the-field.md +2114 -0
- loop_engineer-0.9.0/docs/superpowers/plans/2026-07-09-st5-harness-scoreboard.md +39 -0
- loop_engineer-0.9.0/docs/superpowers/specs/2026-07-08-v0.8.0-composes-the-field-design.md +221 -0
- loop_engineer-0.9.0/docs/superpowers/specs/2026-07-09-st5-harness-scoreboard-design.md +104 -0
- loop_engineer-0.9.0/examples/agent-os-run/README.md +52 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/product/mission.md +23 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/product/roadmap.md +16 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/plan.md +31 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/references.md +23 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/shape.md +32 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/specs/2026-07-09-1030-csv-dedupe/standards.md +25 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/standards/backend/data-imports.md +16 -0
- loop_engineer-0.9.0/examples/agent-os-run/agent-os/standards/index.yml +5 -0
- loop_engineer-0.9.0/examples/bmad-run/README.md +39 -0
- loop_engineer-0.9.0/examples/bmad-run/_bmad/bmm/config.yaml +15 -0
- loop_engineer-0.9.0/examples/bmad-run/_bmad-output/implementation-artifacts/1-1-deduplicate-csv-rows.md +83 -0
- loop_engineer-0.9.0/examples/bmad-run/_bmad-output/implementation-artifacts/epic-1-retro-2026-07-09.md +54 -0
- loop_engineer-0.9.0/examples/bmad-run/_bmad-output/implementation-artifacts/sprint-status.yaml +38 -0
- loop_engineer-0.9.0/examples/bmad-run/_bmad-output/planning-artifacts/epics.md +48 -0
- loop_engineer-0.9.0/examples/bmad-run/_bmad-output/planning-artifacts/prd.md +48 -0
- loop_engineer-0.9.0/examples/bmad-run/src/import_contacts.py +55 -0
- loop_engineer-0.9.0/examples/bmad-run/tests/test_import_contacts.py +59 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/1235-analysis.md +51 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/1235.md +43 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/epic.md +79 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/execution-status.md +16 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/github-mapping.md +7 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/updates/1235/progress.md +30 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/epics/csv-dedupe/updates/1235/stream-A.md +18 -0
- loop_engineer-0.9.0/examples/ccpm-run/.claude/prds/csv-dedupe.md +63 -0
- loop_engineer-0.9.0/examples/ccpm-run/README.md +45 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/approvals/.gitkeep +0 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/holdout-run.txt +49 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/holdout-verdict.json +26 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/verify-T1.json +8 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/verify-T2-iter1.json +8 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/artifacts/verify-T2.json +8 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/checkpoints/.gitkeep +0 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/manifest.yaml +53 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/memory/.gitkeep +0 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/repair/iter-002.json +12 -0
- loop_engineer-0.9.0/examples/coverage-repair/.loop/state.json +14 -0
- loop_engineer-0.9.0/examples/evidence/invalid/absolute-uri.json +10 -0
- loop_engineer-0.9.0/examples/evidence/invalid/bad-sha256-pattern.json +10 -0
- loop_engineer-0.9.0/examples/evidence/invalid/missing-required-field.json +9 -0
- loop_engineer-0.9.0/examples/evidence/invalid/scheme-uri.json +10 -0
- loop_engineer-0.9.0/examples/evidence/valid-evidence.json +22 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/.loop/artifacts/holdout-verdict.json +21 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/.loop/artifacts/verify-T1-iter1.json +8 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/.loop/artifacts/verify-T1.json +9 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/.loop/manifest.yaml +53 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/.loop/repair/iter-002.json +12 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/.loop/state.json +14 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/.loop/terminal_state.json +14 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/README.md +96 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/RUNLOG.md +25 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/SPEC.md +55 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/TASKS.json +23 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/WORKFLOW.md +77 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/scripts/run-example +28 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/scripts/verify-fast +6 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/scripts/verify-full +15 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/target/jobs.py +17 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/target/manifest.json +8 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/target/measure_stability.py +32 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/target/test_holdout.py +15 -0
- loop_engineer-0.9.0/examples/flaky-test-triage/target/test_visible.py +9 -0
- loop_engineer-0.9.0/examples/langgraph-emit/README.md +52 -0
- loop_engineer-0.9.0/examples/langgraph-emit/graph_example.py +123 -0
- loop_engineer-0.9.0/examples/naive-loop/.loop/state.json +5 -0
- loop_engineer-0.9.0/examples/openspec-run/README.md +46 -0
- loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/.openspec.yaml +2 -0
- loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/design.md +49 -0
- loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/proposal.md +31 -0
- loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/specs/csv-dedupe/spec.md +37 -0
- loop_engineer-0.9.0/examples/openspec-run/openspec/changes/archive/2026-07-09-dedupe-csv-rows/tasks.md +25 -0
- loop_engineer-0.9.0/examples/openspec-run/openspec/config.yaml +22 -0
- loop_engineer-0.9.0/examples/openspec-run/openspec/specs/csv-dedupe/spec.md +41 -0
- loop_engineer-0.9.0/examples/plans/coverage-repair.plan.json +32 -0
- loop_engineer-0.9.0/examples/plans/invalid/cyclic-dependency.plan.json +11 -0
- loop_engineer-0.9.0/examples/plans/invalid/missing-goal.plan.json +6 -0
- loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/plans/completed/csv-dedupe.plan.md +98 -0
- loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/prds/csv-dedupe.prd.md +65 -0
- loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/reports/csv-dedupe-report.md +86 -0
- loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/reviews/pr-42-cycle-0.verdict.json +4 -0
- loop_engineer-0.9.0/examples/prp-run/.claude/PRPs/reviews/pr-42-review.md +95 -0
- loop_engineer-0.9.0/examples/prp-run/.claude/prp-loop.run.log +10 -0
- loop_engineer-0.9.0/examples/prp-run/.claude/prp-loop.state.json +30 -0
- loop_engineer-0.9.0/examples/prp-run/README.md +43 -0
- loop_engineer-0.9.0/examples/ruflo-run/.claude-flow/metrics/swarm-activity.json +18 -0
- loop_engineer-0.9.0/examples/ruflo-run/.claude-flow/metrics/v3-progress.json +26 -0
- loop_engineer-0.9.0/examples/ruflo-run/.claude-flow/security/audit-status.json +8 -0
- loop_engineer-0.9.0/examples/ruflo-run/.hive-mind/sessions/hive-mind-prompt-swarm-2026-07-09.txt +46 -0
- loop_engineer-0.9.0/examples/ruflo-run/.mcp.json +17 -0
- loop_engineer-0.9.0/examples/ruflo-run/.swarm/memory-export.json +78 -0
- loop_engineer-0.9.0/examples/ruflo-run/README.md +46 -0
- loop_engineer-0.9.0/examples/spec-kit-run/.specify/feature.json +1 -0
- loop_engineer-0.9.0/examples/spec-kit-run/.specify/memory/constitution.md +35 -0
- loop_engineer-0.9.0/examples/spec-kit-run/README.md +27 -0
- loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/checklists/requirements.md +32 -0
- loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/plan.md +71 -0
- loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/quickstart.md +38 -0
- loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/research.md +32 -0
- loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/spec.md +74 -0
- loop_engineer-0.9.0/examples/spec-kit-run/specs/001-csv-dedupe/tasks.md +74 -0
- loop_engineer-0.9.0/examples/superpowers-run/.superpowers/sdd/progress.md +4 -0
- loop_engineer-0.9.0/examples/superpowers-run/README.md +15 -0
- loop_engineer-0.9.0/examples/superpowers-run/docs/superpowers/plans/2026-07-08-csv-dedupe.md +17 -0
- loop_engineer-0.9.0/examples/superpowers-run/docs/superpowers/specs/2026-07-08-csv-dedupe-design.md +19 -0
- loop_engineer-0.9.0/examples/task-master-run/.taskmaster/config.json +32 -0
- loop_engineer-0.9.0/examples/task-master-run/.taskmaster/docs/prd.txt +42 -0
- loop_engineer-0.9.0/examples/task-master-run/.taskmaster/reports/task-complexity-report.json +37 -0
- loop_engineer-0.9.0/examples/task-master-run/.taskmaster/state.json +9 -0
- loop_engineer-0.9.0/examples/task-master-run/.taskmaster/tasks/task_001.txt +17 -0
- loop_engineer-0.9.0/examples/task-master-run/.taskmaster/tasks/tasks.json +73 -0
- loop_engineer-0.9.0/examples/task-master-run/.taskmaster/templates/example_prd.txt +32 -0
- loop_engineer-0.9.0/examples/task-master-run/CLAUDE.md +57 -0
- loop_engineer-0.9.0/examples/task-master-run/README.md +38 -0
- loop_engineer-0.9.0/examples/temporal-certify/README.md +67 -0
- loop_engineer-0.9.0/examples/temporal-certify/workflow_example.py +187 -0
- loop_engineer-0.9.0/loop/__init__.py +30 -0
- loop_engineer-0.9.0/loop/__main__.py +379 -0
- loop_engineer-0.9.0/loop/architect.py +39 -0
- loop_engineer-0.9.0/loop/completion.py +73 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/contract.py +203 -21
- loop_engineer-0.9.0/loop/emit.py +399 -0
- loop_engineer-0.9.0/loop/events.py +307 -0
- loop_engineer-0.9.0/loop/evidence.py +194 -0
- loop_engineer-0.9.0/loop/foreign.py +381 -0
- loop_engineer-0.9.0/loop/fsm.py +67 -0
- loop_engineer-0.9.0/loop/integrations.py +179 -0
- loop_engineer-0.9.0/loop/plan.py +267 -0
- loop_engineer-0.9.0/loop/reducer.py +183 -0
- loop_engineer-0.9.0/loop/runcontrol.py +112 -0
- loop_engineer-0.9.0/loop/runner.py +245 -0
- loop_engineer-0.9.0/loop/runtime.py +223 -0
- loop_engineer-0.9.0/loop/simulate.py +120 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/pyproject.toml +3 -1
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/repo-os-contract.md +237 -3
- loop_engineer-0.9.0/schemas/event.schema.json +33 -0
- loop_engineer-0.9.0/schemas/evidence.schema.json +46 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/manifest.schema.json +1 -0
- loop_engineer-0.9.0/schemas/plan.schema.json +23 -0
- loop_engineer-0.9.0/schemas/state.schema.json +103 -0
- loop_engineer-0.9.0/schemas/terminal.schema.json +90 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/inspect_loop.py +26 -4
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/metrics.py +2 -2
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/runtime_monitor.py +14 -3
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/self_eval.py +20 -6
- loop_engineer-0.9.0/scripts/test_adversarial_kernel.py +264 -0
- loop_engineer-0.9.0/scripts/test_adversarial_process.py +207 -0
- loop_engineer-0.9.0/scripts/test_ci_release_mode.py +27 -0
- loop_engineer-0.9.0/scripts/test_completion_policy.py +118 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_conformance.py +1 -1
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_version.py +4 -2
- loop_engineer-0.9.0/scripts/test_doctor_eventstore.py +166 -0
- loop_engineer-0.9.0/scripts/test_emit.py +358 -0
- loop_engineer-0.9.0/scripts/test_eventstore.py +296 -0
- loop_engineer-0.9.0/scripts/test_evidence.py +234 -0
- loop_engineer-0.9.0/scripts/test_flaky_example.py +55 -0
- loop_engineer-0.9.0/scripts/test_foreign_inspect.py +186 -0
- loop_engineer-0.9.0/scripts/test_fsm.py +100 -0
- loop_engineer-0.9.0/scripts/test_integrations.py +227 -0
- loop_engineer-0.9.0/scripts/test_langgraph_recipe_st3.py +75 -0
- loop_engineer-0.9.0/scripts/test_loop_architect_cli.py +146 -0
- loop_engineer-0.9.0/scripts/test_loop_cli.py +301 -0
- loop_engineer-0.9.0/scripts/test_loop_cli_status_replay.py +254 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_loop_contract_core.py +68 -1
- loop_engineer-0.9.0/scripts/test_loop_runcontrol_cli.py +377 -0
- loop_engineer-0.9.0/scripts/test_loop_simulate_cli.py +211 -0
- loop_engineer-0.9.0/scripts/test_loop_simulate_zero_writes.py +91 -0
- loop_engineer-0.9.0/scripts/test_manifest_extra_states_schema.py +38 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_metrics.py +17 -0
- loop_engineer-0.9.0/scripts/test_plan_schema.py +225 -0
- loop_engineer-0.9.0/scripts/test_reducer.py +317 -0
- loop_engineer-0.9.0/scripts/test_runner_dispatch.py +129 -0
- loop_engineer-0.9.0/scripts/test_runner_verifier.py +158 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_runtime_monitor.py +18 -0
- loop_engineer-0.9.0/scripts/test_state_vocabulary.py +59 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_template_roundtrip.py +3 -16
- loop_engineer-0.9.0/scripts/test_temporal_recipe.py +156 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_wheel_selfcontained.py +11 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-evals/SKILL.md +1 -1
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-inspector/SKILL.md +1 -1
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-run/SKILL.md +1 -1
- loop_engineer-0.9.0/templates/RUNLOG.md.tmpl +31 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/state.json.tmpl +1 -1
- loop_engineer-0.7.0/docs/integrations/langgraph.md +0 -30
- loop_engineer-0.7.0/examples/langgraph-emit/README.md +0 -34
- loop_engineer-0.7.0/examples/langgraph-emit/graph_example.py +0 -82
- loop_engineer-0.7.0/loop/__init__.py +0 -17
- loop_engineer-0.7.0/loop/__main__.py +0 -176
- loop_engineer-0.7.0/loop/emit.py +0 -258
- loop_engineer-0.7.0/schemas/state.schema.json +0 -25
- loop_engineer-0.7.0/schemas/terminal.schema.json +0 -19
- loop_engineer-0.7.0/scripts/test_emit.py +0 -178
- loop_engineer-0.7.0/scripts/test_loop_cli.py +0 -149
- loop_engineer-0.7.0/templates/RUNLOG.md.tmpl +0 -42
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.claude-plugin/marketplace.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/.pre-commit-hooks.yaml +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/CODE_OF_CONDUCT.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/GLOSSARY.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/LICENSE +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/SECURITY.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/ROADMAP-v1.0.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/demo.cast +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/demo.gif +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/metrics-baseline.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/social-card.png +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/plans/2026-06-20-loop-engineer-v1.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/plans/2026-06-30-loop-engineer-v1.0-roadmap.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/plans/2026-07-03-adoption-slices.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-20-loop-engineer-design.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-st1-metrics-baseline.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-st2-portable-contract-spec.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-st3-integration-adapters.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-06-30-v04-credibility-enforcement.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/docs/superpowers/specs/2026-07-03-adoption-slices-design.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/evals/cases/structural.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/evals/rubric.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/ADR.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/README.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/RUNLOG.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/SPEC.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/TASKS.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/WORKFLOW.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/scripts/run-example +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/scripts/verify-fast +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/scripts/verify-full +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/manifest.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/measure_coverage.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/pricing.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/test_holdout.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/target/test_visible.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/coverage-repair/terminal_state.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/examples/naive-loop/README.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/hooks/stop_firewall.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/_resources.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/paths.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/loop/scaffold.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/architecture-matrix.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/eval-suite.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/loop-patterns.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/model-routing.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/platform-map.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/prompt-templates.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/reference/safety-and-approvals.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/receipt.schema.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/repair-record.schema.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/rollout-record.schema.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/schemas/tasks.schema.json +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/action_scorecard.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/anticheat_scan.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/benchmark_harness.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/holdout_gate.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/rollout_ledger.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_action_scorecard.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_anticheat_scan.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_benchmark_harness.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_contract_records.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_adoption.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_baseline.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_docs_claims.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_example_runnable.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_holdout_gate.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_inspect_loop.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_langgraph_recipe.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_metrics_cli.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_precommit_hook.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_resources.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_rollout_ledger.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_scaffold.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_schemas_metrics.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_self_eval.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_stop_firewall.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/test_validate_frontmatter.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/scripts/validate_frontmatter.py +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-architect/SKILL.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-contract/SKILL.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-engineer/SKILL.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-flywheel/SKILL.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-inspector/reference/patterns.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-repair/SKILL.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-runtime-monitor/SKILL.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/skills/loop-runtime-monitor/reference/patterns.md +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/AGENTS.md.tmpl +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/EVALS-rubric.md.tmpl +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/SPEC.md.tmpl +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/TASKS.json.tmpl +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/WORKFLOW.md.tmpl +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/extract-trace-metrics.sh +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/judge-rubric.sh +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/manifest.yaml.tmpl +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/terminal_state.json.tmpl +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/verify-fast.sh +0 -0
- {loop_engineer-0.7.0 → loop_engineer-0.9.0}/templates/verify-full.sh +0 -0
- {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.
|
|
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": {
|
|
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": [
|
|
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@
|
|
20
|
+
- uses: actions/checkout@v7
|
|
18
21
|
|
|
19
|
-
- uses: actions/setup-python@
|
|
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@
|
|
56
|
-
- uses: actions/setup-python@
|
|
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@
|
|
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@
|
|
14
|
+
- uses: actions/checkout@v7
|
|
12
15
|
|
|
13
|
-
- uses: actions/setup-python@
|
|
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@
|
|
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@
|
|
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
|
-
.
|
|
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
|
-
|
|
6
|
+
/.loop/
|
|
6
7
|
|
|
7
8
|
# Machine-local Claude Code config + GSD audit telemetry (not plugin content)
|
|
8
|
-
|
|
9
|
-
|
|
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.
|
|
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
|
[](https://github.com/SollanSystems/loop-engineer/actions/workflows/ci.yml)
|
|
43
45
|
[](https://www.python.org/downloads/)
|
|
44
46
|
[](LICENSE)
|
|
45
|
-
[](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
|

|
|
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;
|
|
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
|
|
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.
|
|
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
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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.
|
|
438
|
-
- Release tag: `v0.
|
|
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
|
|
468
|
+
- Current reference examples: `examples/coverage-repair`, `examples/flaky-test-triage`
|
|
443
469
|
|
|
444
470
|
---
|
|
445
471
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/SollanSystems/loop-engineer/actions/workflows/ci.yml)
|
|
6
6
|
[](https://www.python.org/downloads/)
|
|
7
7
|
[](LICENSE)
|
|
8
|
-
[](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
|

|
|
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;
|
|
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
|
|
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.
|
|
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
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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.
|
|
401
|
-
- Release tag: `v0.
|
|
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
|
|
429
|
+
- Current reference examples: `examples/coverage-repair`, `examples/flaky-test-triage`
|
|
406
430
|
|
|
407
431
|
---
|
|
408
432
|
|