agentic-dev-loop 0.15.3__tar.gz → 0.15.5__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.
- {agentic_dev_loop-0.15.3/src/agentic_dev_loop.egg-info → agentic_dev_loop-0.15.5}/PKG-INFO +6 -5
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/README.md +5 -4
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/pyproject.toml +1 -1
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/templates/dev.agent.md +24 -9
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/stages.py +6 -2
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/viz/page.py +1 -1
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5/src/agentic_dev_loop.egg-info}/PKG-INFO +6 -5
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop.egg-info/SOURCES.txt +1 -0
- agentic_dev_loop-0.15.5/tests/test_runs_js_duration_charts.py +179 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_unit11.py +38 -1
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/LICENSE +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/setup.cfg +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/config.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/failure.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/paths.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/profiles/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/profiles/data/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/profiles/data/python.yaml +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/results.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/core/verdict.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/actions.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/agent_error_guide.md +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/agent_error_guide.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/agents.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/allowlist.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/brief_coverage.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/brief_prompt.md +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/brief_prompt.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/cli.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/completion.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/containers.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/copilot_auth.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/deps.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/dryrun.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/egress_policy.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/egress_proxy.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/extensions/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/extensions/aidlc.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/forbidden.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/graph.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/hostboundary.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/isolation.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/llm.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/loaders.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/mounts.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/checks.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/doctor.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/init.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/recipes/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/recipes/python.yaml +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/recipes.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/templates/env.example +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/templates/qa.agent.md +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/templates/review.agent.md +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/templates.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/onboarding/upgrade.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/outputs.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/presets.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/proc.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/provider_wire.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/registry.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/run_status.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/run_status_command.md +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/seccomp/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/seccomp/chromium-userns.json +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/secrets.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/step_workspace.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/engine/sync_back.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/py.typed +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/reporting/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/reporting/metrics.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/reporting/render.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/reporting/sources.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/viz/__init__.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/viz/layout.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/viz/runs_view.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop/viz/server.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop.egg-info/dependency_links.txt +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop.egg-info/entry_points.txt +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop.egg-info/requires.txt +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/src/agentic_dev_loop.egg-info/top_level.txt +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_029_merge_on_conflict.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_033_brief_step.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_035_finalize_nudge.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_036_banned_commands_and_lane_boundary.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_041_brief_coverage.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_046_brief_prompt.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_cli.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_doctor.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_init.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_profile_loading.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_profiles.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_recipes.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_schema_lock.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_templates.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_055_upgrade.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_actions.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_agent_error_guide.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_agents.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_aidlc.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_build_viz_page.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_cli.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_config.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_containers.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_copilot_auth.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_copilot_cli.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_deps.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_dry_run.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_e2e_fixtures.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_egress_proxy.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_graph.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_hostboundary.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_hostboundary_integration.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_isolation.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_isolation_integration.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_isolation_pbt.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_llm.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_loaders.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_module_contract.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_outputs.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_outputs_pbt.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_proc.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_provider_wire.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_publish.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_qa_prompt.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_registry.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_repo_ascii.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_results.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_run_status.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_runs_js_filters.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_runs_js_key_stats.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_runs_js_metrics.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_runs_layout.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_runs_layout_key_stats.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_sdk_compat.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_secrets.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_secrets_integration.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_secrets_pipeline.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_source_resolution.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_stages.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_step_workspace.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_sync_back.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_unit11_pbt.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_unit12_reporting.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_unit13_runs_viz.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_unit5_config.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_unit5_pbt.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_unit5_pure.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_verdict.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_viz.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_viz_demo.py +0 -0
- {agentic_dev_loop-0.15.3 → agentic_dev_loop-0.15.5}/tests/test_viz_layout.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentic-dev-loop
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.5
|
|
4
4
|
Summary: Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.
|
|
5
5
|
Author: Luke Wilson
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -562,10 +562,11 @@ Conventions that make a good agent file:
|
|
|
562
562
|
- **dev enumerates its impossible set and stops at it.** List the commands
|
|
563
563
|
the sandbox cannot run (offline package fetches, browser downloads), one
|
|
564
564
|
attempt per command - keeps the productive loop and kills doomed retries.
|
|
565
|
-
- **Failure output
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
565
|
+
- **Failure output is a required fix in dev's next context.** Agent verdict
|
|
566
|
+
steps land their failing output under *Previous attempt feedback*; command
|
|
567
|
+
gates (test, restore) land it under *Mechanical gate output*, with the exit
|
|
568
|
+
code under *Verified state*. Steps route `on_fail: { goto: dev, retry: true }`,
|
|
569
|
+
and the dev prompt makes every listed failure a required fix.
|
|
569
570
|
- **No git mutations, ever.** The `commit` step is the single commit point.
|
|
570
571
|
|
|
571
572
|
### The pipeline file
|
|
@@ -515,10 +515,11 @@ Conventions that make a good agent file:
|
|
|
515
515
|
- **dev enumerates its impossible set and stops at it.** List the commands
|
|
516
516
|
the sandbox cannot run (offline package fetches, browser downloads), one
|
|
517
517
|
attempt per command - keeps the productive loop and kills doomed retries.
|
|
518
|
-
- **Failure output
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
518
|
+
- **Failure output is a required fix in dev's next context.** Agent verdict
|
|
519
|
+
steps land their failing output under *Previous attempt feedback*; command
|
|
520
|
+
gates (test, restore) land it under *Mechanical gate output*, with the exit
|
|
521
|
+
code under *Verified state*. Steps route `on_fail: { goto: dev, retry: true }`,
|
|
522
|
+
and the dev prompt makes every listed failure a required fix.
|
|
522
523
|
- **No git mutations, ever.** The `commit` step is the single commit point.
|
|
523
524
|
|
|
524
525
|
### The pipeline file
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agentic-dev-loop"
|
|
7
|
-
version = "0.15.
|
|
7
|
+
version = "0.15.5"
|
|
8
8
|
description = "Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -10,10 +10,11 @@ opinionated LangGraph + OpenHands SDK pipeline engine written in Python.
|
|
|
10
10
|
## WORKFLOW
|
|
11
11
|
|
|
12
12
|
1. Read the plan documents and README.md in the context below.
|
|
13
|
-
2. If the context contains a *Previous attempt feedback* section
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
the edited file) before
|
|
13
|
+
2. If the context contains a *Previous attempt feedback* section or a
|
|
14
|
+
*Mechanical gate output* section, treat every issue listed there as a
|
|
15
|
+
required fix from the pipeline's earlier stages - address each one before
|
|
16
|
+
anything else, and verify each fix landed (re-read the edited file) before
|
|
17
|
+
moving on. A mechanical entry names the attempt that produced it.
|
|
17
18
|
3. Check for prior-attempt residue before implementing. The pipeline syncs
|
|
18
19
|
every lane's edits back into this repo's working tree after each terminal
|
|
19
20
|
action, so an earlier attempt that died at a later gate can leave the full
|
|
@@ -66,10 +67,23 @@ opinionated LangGraph + OpenHands SDK pipeline engine written in Python.
|
|
|
66
67
|
exit code alone.
|
|
67
68
|
- You do not need to prove anything here: fill in the verification matrix,
|
|
68
69
|
write your final response, and stop.
|
|
69
|
-
- If the gate fails, you are retried with the failing output
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
- If the gate fails, you are retried with the failing output under
|
|
71
|
+
*Mechanical gate output* and the exit code under *Verified state* (command
|
|
72
|
+
gates do not write *Previous attempt feedback*). Find the root cause - a
|
|
73
|
+
regression in your change, a stale test pinning old behavior, or a genuine
|
|
74
|
+
library bug - and fix it, never the symptom.
|
|
75
|
+
|
|
76
|
+
## AUDIT GATE
|
|
77
|
+
|
|
78
|
+
- The restore step re-runs the install and a dependency audit on every pass.
|
|
79
|
+
A failing audit means a pin in the dependency manifest carries known CVEs;
|
|
80
|
+
it is a required fix, never "pre-existing" or "unrelated".
|
|
81
|
+
- Fix it with a manifest edit, never a package-manager command (agent steps
|
|
82
|
+
are offline). Follow the floor-pin pattern: pin the vulnerable resolved
|
|
83
|
+
package to a CVE-free version, or pin the intermediate package to the last
|
|
84
|
+
release that admits it, so a fresh resolve lands on the fixed version.
|
|
85
|
+
- Restore re-audits the bumped pins on the next pass, so the loop
|
|
86
|
+
self-corrects; report the audit as fixed only after that gate passes.
|
|
73
87
|
|
|
74
88
|
## TEST-FIRST
|
|
75
89
|
|
|
@@ -81,7 +95,8 @@ opinionated LangGraph + OpenHands SDK pipeline engine written in Python.
|
|
|
81
95
|
|
|
82
96
|
- The moment your final response is written AND the full suite has passed
|
|
83
97
|
locally (`.venv-sandbox/bin/python -m pytest tests/ -q` exits 0) AND every
|
|
84
|
-
*Previous attempt feedback*
|
|
98
|
+
*Previous attempt feedback* and *Mechanical gate output* item is addressed,
|
|
99
|
+
the step is COMPLETE. Stop.
|
|
85
100
|
- Do not re-read files, re-run checks, or `cat`/`tail`/`grep` files you just
|
|
86
101
|
wrote to confirm what already passed. A green suite is a green suite:
|
|
87
102
|
re-running it buys nothing, since the mechanical test gate re-runs the
|
|
@@ -446,7 +446,10 @@ def build_context(runtime: Runtime, docs: dict[str, str], subject: str,
|
|
|
446
446
|
own mechanical section (process fact, never an agent claim), and only
|
|
447
447
|
engine-verified facts (command exit codes, brief coverage, commit outcome)
|
|
448
448
|
appear in the verified section. Nothing in the claims section is ever
|
|
449
|
-
routed on.
|
|
449
|
+
routed on. The mechanical heading binds every failure it carries as a
|
|
450
|
+
required fix: command gates (test, restore) never write the notes channel,
|
|
451
|
+
so without that binding a retried dev agent has no required-fix trigger
|
|
452
|
+
(plan 065)."""
|
|
450
453
|
parts = [f"You are working on {subject}.\n", guide_section()]
|
|
451
454
|
for name, content in docs.items():
|
|
452
455
|
parts.append(f"## {name}\n\n{content}")
|
|
@@ -470,7 +473,8 @@ def build_context(runtime: Runtime, docs: dict[str, str], subject: str,
|
|
|
470
473
|
parts.extend(claims)
|
|
471
474
|
if mechanical_notes:
|
|
472
475
|
parts.append("## Mechanical gate output "
|
|
473
|
-
"(pipeline-captured process output, not agent claims
|
|
476
|
+
"(pipeline-captured process output, not agent claims; "
|
|
477
|
+
"each failure here is a required fix)")
|
|
474
478
|
parts.extend(mechanical_notes)
|
|
475
479
|
verified_lines = [f"- {name}: {fact}" for name, fact in (verified or {}).items()]
|
|
476
480
|
parts.append(
|