autofab 0.2.0__py3-none-any.whl
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.
- autofab/README.md +5 -0
- autofab/autofab_roles.toml +257 -0
- autofab/guides/low_to_lib.md +89 -0
- autofab/guides/meta_guide.md +146 -0
- autofab/parts/__init__.py +3 -0
- autofab/parts/agent/__init__.py +0 -0
- autofab/parts/agent/description.md +31 -0
- autofab/parts/agent/high/agent_config.md +34 -0
- autofab/parts/agent/high/file_alias.md +34 -0
- autofab/parts/agent/high/node_config.md +36 -0
- autofab/parts/agent/high/node_storage.md +32 -0
- autofab/parts/agent/high/session.md +22 -0
- autofab/parts/agent/lib/__init__.py +3 -0
- autofab/parts/agent/lib/agent_config.py +46 -0
- autofab/parts/agent/lib/file_alias.py +70 -0
- autofab/parts/agent/lib/node_config.py +174 -0
- autofab/parts/agent/lib/node_storage.py +33 -0
- autofab/parts/agent/lib/session.py +17 -0
- autofab/parts/agent/low/agent_config.pyi +50 -0
- autofab/parts/agent/low/file_alias.pyi +123 -0
- autofab/parts/agent/low/node_config.pyi +230 -0
- autofab/parts/agent/low/node_storage.pyi +79 -0
- autofab/parts/agent/low/session.pyi +30 -0
- autofab/parts/agent/planning/agent_config.md +44 -0
- autofab/parts/agent/planning/file_alias.md +56 -0
- autofab/parts/agent/planning/node_config.md +64 -0
- autofab/parts/agent/planning/node_storage.md +47 -0
- autofab/parts/agent/planning/session.md +46 -0
- autofab/parts/agent/pretense/__init__.py +1 -0
- autofab/parts/agent/pretense/agent_config_pretense.py +207 -0
- autofab/parts/agent/pretense/file_alias_pretense.py +245 -0
- autofab/parts/agent/pretense/node_config_pretense.py +362 -0
- autofab/parts/agent/pretense/node_storage_pretense.py +196 -0
- autofab/parts/agent/scenarios/agent_config.md +126 -0
- autofab/parts/agent/scenarios/file_alias.md +90 -0
- autofab/parts/agent/scenarios/node_config.md +137 -0
- autofab/parts/agent/scenarios/node_storage.md +117 -0
- autofab/parts/agent/scenarios/session.md +73 -0
- autofab/parts/agent/tests/__init__.py +0 -0
- autofab/parts/antigravity/description.md +23 -0
- autofab/parts/antigravity/high/antigravity_asm.md +26 -0
- autofab/parts/antigravity/high/antigravity_coordinator.md +40 -0
- autofab/parts/antigravity/high/antigravity_coordinator_impl.md +45 -0
- autofab/parts/antigravity/high/antigravity_ext.md +29 -0
- autofab/parts/antigravity/high/antigravity_harness.md +42 -0
- autofab/parts/antigravity/high/antigravity_harness_impl.md +39 -0
- autofab/parts/antigravity/high/antigravity_workspace.md +34 -0
- autofab/parts/antigravity/lib/__init__.py +5 -0
- autofab/parts/antigravity/lib/antigravity_asm.py +29 -0
- autofab/parts/antigravity/lib/antigravity_coordinator.py +103 -0
- autofab/parts/antigravity/lib/antigravity_coordinator_impl.py +301 -0
- autofab/parts/antigravity/lib/antigravity_harness.py +104 -0
- autofab/parts/antigravity/lib/antigravity_harness_impl.py +384 -0
- autofab/parts/antigravity/lib/antigravity_workspace.py +48 -0
- autofab/parts/antigravity/low/antigravity_asm.pyi +18 -0
- autofab/parts/antigravity/low/antigravity_coordinator.pyi +117 -0
- autofab/parts/antigravity/low/antigravity_coordinator_impl.pyi +107 -0
- autofab/parts/antigravity/low/antigravity_ext.pyi +74 -0
- autofab/parts/antigravity/low/antigravity_harness.pyi +141 -0
- autofab/parts/antigravity/low/antigravity_harness_impl.pyi +156 -0
- autofab/parts/antigravity/low/antigravity_workspace.pyi +54 -0
- autofab/parts/antigravity/planning/antigravity_coordinator.md +48 -0
- autofab/parts/antigravity/planning/antigravity_coordinator_impl.md +55 -0
- autofab/parts/antigravity/planning/antigravity_harness.md +55 -0
- autofab/parts/antigravity/planning/antigravity_harness_impl.md +55 -0
- autofab/parts/antigravity/planning/antigravity_workspace.md +42 -0
- autofab/parts/antigravity/pretense/__init__.py +1 -0
- autofab/parts/antigravity/pretense/antigravity_coordinator_impl_pretense.py +295 -0
- autofab/parts/antigravity/pretense/antigravity_harness_impl_pretense.py +162 -0
- autofab/parts/antigravity/scenarios/antigravity_coordinator.md +35 -0
- autofab/parts/antigravity/scenarios/antigravity_coordinator_impl.md +39 -0
- autofab/parts/antigravity/scenarios/antigravity_harness.md +49 -0
- autofab/parts/antigravity/scenarios/antigravity_harness_impl.md +55 -0
- autofab/parts/antigravity/scenarios/antigravity_workspace.md +28 -0
- autofab/parts/antigravity/tests/antigravity_asm_test.py +49 -0
- autofab/parts/antigravity/tests/antigravity_coordinator_impl_test.py +164 -0
- autofab/parts/antigravity/tests/antigravity_harness_impl_test.py +210 -0
- autofab/parts/autofab.toml +4 -0
- autofab/parts/benchmark/BUILD.bazel +10 -0
- autofab/parts/benchmark/__init__.py +1 -0
- autofab/parts/benchmark/description.md +23 -0
- autofab/parts/benchmark/high/benchmark.md +32 -0
- autofab/parts/benchmark/high/benchmark_impl.md +47 -0
- autofab/parts/benchmark/lib/benchmark.py +164 -0
- autofab/parts/benchmark/lib/benchmark_impl.py +2391 -0
- autofab/parts/benchmark/low/benchmark.pyi +224 -0
- autofab/parts/benchmark/low/benchmark_impl.pyi +236 -0
- autofab/parts/benchmark/planning/benchmark.md +53 -0
- autofab/parts/benchmark/planning/benchmark_impl.md +65 -0
- autofab/parts/benchmark/pretense/benchmark_impl_pretense.py +165 -0
- autofab/parts/benchmark/scenarios/benchmark.md +97 -0
- autofab/parts/benchmark/scenarios/benchmark_impl.md +127 -0
- autofab/parts/benchmark/tests/benchmark_impl_test.py +1395 -0
- autofab/parts/control/__init__.py +0 -0
- autofab/parts/control/description.md +29 -0
- autofab/parts/control/high/attribution.md +34 -0
- autofab/parts/control/high/attribution_impl.md +59 -0
- autofab/parts/control/high/control_asm.md +24 -0
- autofab/parts/control/high/coordinate.md +36 -0
- autofab/parts/control/high/coordinate_impl.md +47 -0
- autofab/parts/control/high/submit.md +42 -0
- autofab/parts/control/high/submit_impl.md +51 -0
- autofab/parts/control/high/verification.md +32 -0
- autofab/parts/control/high/verification_impl.md +37 -0
- autofab/parts/control/high/work_scheduler.md +36 -0
- autofab/parts/control/high/work_scheduler_impl.md +41 -0
- autofab/parts/control/lib/__init__.py +0 -0
- autofab/parts/control/lib/attribution.py +74 -0
- autofab/parts/control/lib/attribution_impl.py +625 -0
- autofab/parts/control/lib/control_asm.py +35 -0
- autofab/parts/control/lib/coordinate.py +109 -0
- autofab/parts/control/lib/coordinate_impl.py +701 -0
- autofab/parts/control/lib/submit.py +62 -0
- autofab/parts/control/lib/submit_impl.py +714 -0
- autofab/parts/control/lib/verification.py +39 -0
- autofab/parts/control/lib/verification_impl.py +219 -0
- autofab/parts/control/lib/work_scheduler.py +58 -0
- autofab/parts/control/lib/work_scheduler_impl.py +557 -0
- autofab/parts/control/low/attribution.pyi +127 -0
- autofab/parts/control/low/attribution_impl.pyi +159 -0
- autofab/parts/control/low/control_asm.pyi +21 -0
- autofab/parts/control/low/coordinate.pyi +152 -0
- autofab/parts/control/low/coordinate_impl.pyi +226 -0
- autofab/parts/control/low/submit.pyi +97 -0
- autofab/parts/control/low/submit_impl.pyi +117 -0
- autofab/parts/control/low/verification.pyi +70 -0
- autofab/parts/control/low/verification_impl.pyi +65 -0
- autofab/parts/control/low/work_scheduler.pyi +91 -0
- autofab/parts/control/low/work_scheduler_impl.pyi +75 -0
- autofab/parts/control/planning/attribution.md +62 -0
- autofab/parts/control/planning/attribution_impl.md +62 -0
- autofab/parts/control/planning/coordinate.md +62 -0
- autofab/parts/control/planning/coordinate_impl.md +71 -0
- autofab/parts/control/planning/submit.md +62 -0
- autofab/parts/control/planning/submit_impl.md +64 -0
- autofab/parts/control/planning/verification.md +53 -0
- autofab/parts/control/planning/verification_impl.md +54 -0
- autofab/parts/control/planning/work_scheduler.md +55 -0
- autofab/parts/control/planning/work_scheduler_impl.md +57 -0
- autofab/parts/control/pretense/__init__.py +1 -0
- autofab/parts/control/pretense/attribution_impl_pretense.py +644 -0
- autofab/parts/control/pretense/coordinate_impl_pretense.py +628 -0
- autofab/parts/control/pretense/submit_impl_pretense.py +461 -0
- autofab/parts/control/pretense/verification_impl_pretense.py +363 -0
- autofab/parts/control/pretense/work_scheduler_impl_pretense.py +440 -0
- autofab/parts/control/scenarios/attribution.md +122 -0
- autofab/parts/control/scenarios/attribution_impl.md +248 -0
- autofab/parts/control/scenarios/coordinate.md +136 -0
- autofab/parts/control/scenarios/coordinate_impl.md +266 -0
- autofab/parts/control/scenarios/submit.md +165 -0
- autofab/parts/control/scenarios/submit_impl.md +304 -0
- autofab/parts/control/scenarios/verification.md +66 -0
- autofab/parts/control/scenarios/verification_impl.md +159 -0
- autofab/parts/control/scenarios/work_scheduler.md +105 -0
- autofab/parts/control/scenarios/work_scheduler_impl.md +241 -0
- autofab/parts/control/tests/attribution_impl_test.py +265 -0
- autofab/parts/control/tests/coordinate_impl_test.py +333 -0
- autofab/parts/control/tests/submit_impl_test.py +284 -0
- autofab/parts/control/tests/verification_impl_test.py +112 -0
- autofab/parts/control/tests/work_scheduler_impl_test.py +190 -0
- autofab/parts/core/__init__.py +0 -0
- autofab/parts/core/description.md +33 -0
- autofab/parts/core/high/app_info_ext.md +31 -0
- autofab/parts/core/high/autofab_files_ext.md +37 -0
- autofab/parts/core/high/commonmark_ext.md +29 -0
- autofab/parts/core/high/file_paths.md +32 -0
- autofab/parts/core/high/file_paths_impl.md +27 -0
- autofab/parts/core/high/filesystem_ext.md +27 -0
- autofab/parts/core/high/json_ext.md +31 -0
- autofab/parts/core/high/topological_order_ext.md +33 -0
- autofab/parts/core/lib/__init__.py +0 -0
- autofab/parts/core/lib/file_paths.py +163 -0
- autofab/parts/core/lib/file_paths_impl.py +89 -0
- autofab/parts/core/low/app_info_ext.pyi +71 -0
- autofab/parts/core/low/autofab_files_ext.pyi +106 -0
- autofab/parts/core/low/commonmark_ext.pyi +51 -0
- autofab/parts/core/low/file_paths.pyi +159 -0
- autofab/parts/core/low/file_paths_impl.pyi +87 -0
- autofab/parts/core/low/filesystem_ext.pyi +119 -0
- autofab/parts/core/low/json_ext.pyi +144 -0
- autofab/parts/core/low/topological_order_ext.pyi +51 -0
- autofab/parts/core/planning/file_paths.md +64 -0
- autofab/parts/core/planning/file_paths_impl.md +55 -0
- autofab/parts/core/pretense/__init__.py +1 -0
- autofab/parts/core/pretense/file_paths_impl_pretense.py +269 -0
- autofab/parts/core/scenarios/file_paths.md +71 -0
- autofab/parts/core/scenarios/file_paths_impl.md +170 -0
- autofab/parts/core/tests/__init__.py +0 -0
- autofab/parts/core/tests/file_paths_impl_test.py +94 -0
- autofab/parts/dag/__init__.py +0 -0
- autofab/parts/dag/description.md +29 -0
- autofab/parts/dag/high/dag_asm.md +24 -0
- autofab/parts/dag/high/dag_config.md +24 -0
- autofab/parts/dag/high/dag_storage.md +44 -0
- autofab/parts/dag/high/subgraph.md +30 -0
- autofab/parts/dag/high/subgraph_impl.md +31 -0
- autofab/parts/dag/lib/__init__.py +0 -0
- autofab/parts/dag/lib/dag_asm.py +25 -0
- autofab/parts/dag/lib/dag_config.py +32 -0
- autofab/parts/dag/lib/dag_storage.py +236 -0
- autofab/parts/dag/lib/subgraph.py +72 -0
- autofab/parts/dag/lib/subgraph_impl.py +225 -0
- autofab/parts/dag/low/dag_asm.pyi +18 -0
- autofab/parts/dag/low/dag_config.pyi +34 -0
- autofab/parts/dag/low/dag_storage.pyi +228 -0
- autofab/parts/dag/low/subgraph.pyi +74 -0
- autofab/parts/dag/low/subgraph_impl.pyi +106 -0
- autofab/parts/dag/planning/dag_config.md +43 -0
- autofab/parts/dag/planning/dag_storage.md +89 -0
- autofab/parts/dag/planning/subgraph.md +63 -0
- autofab/parts/dag/planning/subgraph_impl.md +61 -0
- autofab/parts/dag/pretense/__init__.py +1 -0
- autofab/parts/dag/pretense/dag_config_pretense.py +65 -0
- autofab/parts/dag/pretense/dag_storage_pretense.py +123 -0
- autofab/parts/dag/pretense/subgraph_impl_pretense.py +450 -0
- autofab/parts/dag/scenarios/dag_config.md +46 -0
- autofab/parts/dag/scenarios/dag_storage.md +176 -0
- autofab/parts/dag/scenarios/subgraph.md +156 -0
- autofab/parts/dag/scenarios/subgraph_impl.md +290 -0
- autofab/parts/dag/tests/__init__.py +0 -0
- autofab/parts/dag/tests/subgraph_impl_test.py +403 -0
- autofab/parts/dsh/description.md +24 -0
- autofab/parts/dsh/high/dsh_asm.md +26 -0
- autofab/parts/dsh/high/dsh_ext.md +33 -0
- autofab/parts/dsh/high/dsh_harness.md +42 -0
- autofab/parts/dsh/high/dsh_harness_impl.md +47 -0
- autofab/parts/dsh/high/dsh_telemetry.md +42 -0
- autofab/parts/dsh/high/dsh_telemetry_impl.md +43 -0
- autofab/parts/dsh/high/dsh_workspace.md +38 -0
- autofab/parts/dsh/high/dsh_workspace_impl.md +37 -0
- autofab/parts/dsh/lib/__init__.py +1 -0
- autofab/parts/dsh/lib/dsh_asm.py +32 -0
- autofab/parts/dsh/lib/dsh_harness.py +72 -0
- autofab/parts/dsh/lib/dsh_harness_impl.py +776 -0
- autofab/parts/dsh/lib/dsh_telemetry.py +131 -0
- autofab/parts/dsh/lib/dsh_telemetry_impl.py +924 -0
- autofab/parts/dsh/lib/dsh_workspace.py +48 -0
- autofab/parts/dsh/lib/dsh_workspace_impl.py +398 -0
- autofab/parts/dsh/low/dsh_asm.pyi +19 -0
- autofab/parts/dsh/low/dsh_ext.pyi +86 -0
- autofab/parts/dsh/low/dsh_harness.pyi +103 -0
- autofab/parts/dsh/low/dsh_harness_impl.pyi +148 -0
- autofab/parts/dsh/low/dsh_telemetry.pyi +171 -0
- autofab/parts/dsh/low/dsh_telemetry_impl.pyi +151 -0
- autofab/parts/dsh/low/dsh_workspace.pyi +56 -0
- autofab/parts/dsh/low/dsh_workspace_impl.pyi +44 -0
- autofab/parts/dsh/planning/dsh_harness.md +53 -0
- autofab/parts/dsh/planning/dsh_harness_impl.md +59 -0
- autofab/parts/dsh/planning/dsh_telemetry.md +48 -0
- autofab/parts/dsh/planning/dsh_telemetry_impl.md +49 -0
- autofab/parts/dsh/planning/dsh_workspace.md +45 -0
- autofab/parts/dsh/planning/dsh_workspace_impl.md +46 -0
- autofab/parts/dsh/pretense/dsh_harness_impl_pretense.py +318 -0
- autofab/parts/dsh/pretense/dsh_telemetry_impl_pretense.py +233 -0
- autofab/parts/dsh/pretense/dsh_workspace_impl_pretense.py +194 -0
- autofab/parts/dsh/scenarios/dsh_harness.md +56 -0
- autofab/parts/dsh/scenarios/dsh_harness_impl.md +71 -0
- autofab/parts/dsh/scenarios/dsh_telemetry.md +51 -0
- autofab/parts/dsh/scenarios/dsh_telemetry_impl.md +62 -0
- autofab/parts/dsh/scenarios/dsh_workspace.md +38 -0
- autofab/parts/dsh/scenarios/dsh_workspace_impl.md +43 -0
- autofab/parts/dsh/tests/dsh_asm_test.py +38 -0
- autofab/parts/dsh/tests/dsh_harness_impl_test.py +869 -0
- autofab/parts/dsh/tests/dsh_telemetry_impl_test.py +364 -0
- autofab/parts/dsh/tests/dsh_workspace_impl_test.py +207 -0
- autofab/parts/metadata/__init__.py +0 -0
- autofab/parts/metadata/description.md +36 -0
- autofab/parts/metadata/high/metadata_asm.md +24 -0
- autofab/parts/metadata/high/src_metadata.md +34 -0
- autofab/parts/metadata/high/src_metadata_ext.md +29 -0
- autofab/parts/metadata/high/src_metadata_impl.md +37 -0
- autofab/parts/metadata/high/src_storage_impl.md +67 -0
- autofab/parts/metadata/lib/__init__.py +0 -0
- autofab/parts/metadata/lib/metadata_asm.py +29 -0
- autofab/parts/metadata/lib/src_metadata.py +611 -0
- autofab/parts/metadata/lib/src_metadata_impl.py +388 -0
- autofab/parts/metadata/lib/src_storage_impl.py +769 -0
- autofab/parts/metadata/low/metadata_asm.pyi +18 -0
- autofab/parts/metadata/low/src_metadata.pyi +304 -0
- autofab/parts/metadata/low/src_metadata_ext.pyi +76 -0
- autofab/parts/metadata/low/src_metadata_impl.pyi +265 -0
- autofab/parts/metadata/low/src_storage_impl.pyi +449 -0
- autofab/parts/metadata/planning/src_metadata.md +66 -0
- autofab/parts/metadata/planning/src_metadata_impl.md +56 -0
- autofab/parts/metadata/planning/src_storage_impl.md +100 -0
- autofab/parts/metadata/pretense/__init__.py +1 -0
- autofab/parts/metadata/pretense/src_metadata_impl_pretense.py +850 -0
- autofab/parts/metadata/pretense/src_storage_impl_pretense.py +909 -0
- autofab/parts/metadata/scenarios/src_metadata.md +160 -0
- autofab/parts/metadata/scenarios/src_metadata_impl.md +252 -0
- autofab/parts/metadata/scenarios/src_storage_impl.md +581 -0
- autofab/parts/metadata/tests/src_metadata_impl_test.py +234 -0
- autofab/parts/metadata/tests/src_storage_impl_test.py +725 -0
- autofab/parts/subagent/description.md +33 -0
- autofab/parts/subagent/high/subagent_asm.md +26 -0
- autofab/parts/subagent/high/subagent_coordinator.md +68 -0
- autofab/parts/subagent/high/subagent_coordinator_impl.md +57 -0
- autofab/parts/subagent/high/subagent_harness.md +40 -0
- autofab/parts/subagent/high/subagent_harness_impl.md +39 -0
- autofab/parts/subagent/high/subagent_tool.md +28 -0
- autofab/parts/subagent/high/subagent_tool_impl.md +29 -0
- autofab/parts/subagent/lib/__init__.py +1 -0
- autofab/parts/subagent/lib/subagent_asm.py +31 -0
- autofab/parts/subagent/lib/subagent_coordinator.py +205 -0
- autofab/parts/subagent/lib/subagent_coordinator_impl.py +747 -0
- autofab/parts/subagent/lib/subagent_harness.py +95 -0
- autofab/parts/subagent/lib/subagent_harness_impl.py +422 -0
- autofab/parts/subagent/lib/subagent_tool.py +42 -0
- autofab/parts/subagent/lib/subagent_tool_impl.py +254 -0
- autofab/parts/subagent/low/subagent_asm.pyi +19 -0
- autofab/parts/subagent/low/subagent_coordinator.pyi +256 -0
- autofab/parts/subagent/low/subagent_coordinator_impl.pyi +139 -0
- autofab/parts/subagent/low/subagent_harness.pyi +141 -0
- autofab/parts/subagent/low/subagent_harness_impl.pyi +136 -0
- autofab/parts/subagent/low/subagent_tool.pyi +54 -0
- autofab/parts/subagent/low/subagent_tool_impl.pyi +73 -0
- autofab/parts/subagent/planning/subagent_coordinator.md +61 -0
- autofab/parts/subagent/planning/subagent_coordinator_impl.md +65 -0
- autofab/parts/subagent/planning/subagent_harness.md +56 -0
- autofab/parts/subagent/planning/subagent_harness_impl.md +56 -0
- autofab/parts/subagent/planning/subagent_tool.md +38 -0
- autofab/parts/subagent/planning/subagent_tool_impl.md +40 -0
- autofab/parts/subagent/pretense/subagent_coordinator_impl_pretense.py +318 -0
- autofab/parts/subagent/pretense/subagent_harness_impl_pretense.py +172 -0
- autofab/parts/subagent/pretense/subagent_tool_impl_pretense.py +191 -0
- autofab/parts/subagent/scenarios/subagent_coordinator.md +91 -0
- autofab/parts/subagent/scenarios/subagent_coordinator_impl.md +135 -0
- autofab/parts/subagent/scenarios/subagent_harness.md +63 -0
- autofab/parts/subagent/scenarios/subagent_harness_impl.md +71 -0
- autofab/parts/subagent/scenarios/subagent_tool.md +42 -0
- autofab/parts/subagent/scenarios/subagent_tool_impl.md +40 -0
- autofab/parts/subagent/tests/subagent_asm_test.py +43 -0
- autofab/parts/subagent/tests/subagent_coordinator_impl_test.py +1215 -0
- autofab/parts/subagent/tests/subagent_harness_impl_test.py +258 -0
- autofab/parts/subagent/tests/subagent_tool_impl_test.py +222 -0
- autofab/parts/systems/__init__.py +0 -0
- autofab/parts/systems/description.md +23 -0
- autofab/parts/systems/high/autofab_asm.md +26 -0
- autofab/parts/systems/lib/__init__.py +0 -0
- autofab/parts/systems/lib/autofab_asm.py +35 -0
- autofab/parts/systems/low/autofab_asm.pyi +23 -0
- autofab/parts/systems/tests/__init__.py +0 -0
- autofab/parts/uv/description.md +25 -0
- autofab/parts/uv/high/manifest_ext.md +27 -0
- autofab/parts/uv/high/manifest_loader.md +34 -0
- autofab/parts/uv/high/manifest_loader_impl.md +53 -0
- autofab/parts/uv/high/model_config_ext.md +27 -0
- autofab/parts/uv/high/model_config_impl.md +32 -0
- autofab/parts/uv/high/node_config_impl.md +59 -0
- autofab/parts/uv/high/target.md +24 -0
- autofab/parts/uv/high/target_impl.md +27 -0
- autofab/parts/uv/high/target_labels_ext.md +27 -0
- autofab/parts/uv/high/uv_asm.md +26 -0
- autofab/parts/uv/lib/__init__.py +0 -0
- autofab/parts/uv/lib/manifest_loader.py +43 -0
- autofab/parts/uv/lib/manifest_loader_impl.py +581 -0
- autofab/parts/uv/lib/model_config_impl.py +280 -0
- autofab/parts/uv/lib/node_config_impl.py +538 -0
- autofab/parts/uv/lib/target.py +29 -0
- autofab/parts/uv/lib/target_impl.py +157 -0
- autofab/parts/uv/lib/uv_asm.py +31 -0
- autofab/parts/uv/low/manifest_ext.pyi +64 -0
- autofab/parts/uv/low/manifest_loader.pyi +92 -0
- autofab/parts/uv/low/manifest_loader_impl.pyi +83 -0
- autofab/parts/uv/low/model_config_ext.pyi +68 -0
- autofab/parts/uv/low/model_config_impl.pyi +113 -0
- autofab/parts/uv/low/node_config_impl.pyi +333 -0
- autofab/parts/uv/low/target.pyi +57 -0
- autofab/parts/uv/low/target_impl.pyi +62 -0
- autofab/parts/uv/low/target_labels_ext.pyi +62 -0
- autofab/parts/uv/low/uv_asm.pyi +20 -0
- autofab/parts/uv/planning/manifest_loader.md +69 -0
- autofab/parts/uv/planning/manifest_loader_impl.md +58 -0
- autofab/parts/uv/planning/model_config_impl.md +54 -0
- autofab/parts/uv/planning/node_config_impl.md +92 -0
- autofab/parts/uv/planning/target.md +45 -0
- autofab/parts/uv/planning/target_impl.md +47 -0
- autofab/parts/uv/pretense/__init__.py +1 -0
- autofab/parts/uv/pretense/manifest_loader_impl_pretense.py +191 -0
- autofab/parts/uv/pretense/model_config_impl_pretense.py +178 -0
- autofab/parts/uv/pretense/node_config_impl_pretense.py +171 -0
- autofab/parts/uv/pretense/target_impl_pretense.py +187 -0
- autofab/parts/uv/scenarios/manifest_loader.md +76 -0
- autofab/parts/uv/scenarios/manifest_loader_impl.md +333 -0
- autofab/parts/uv/scenarios/model_config_impl.md +290 -0
- autofab/parts/uv/scenarios/node_config_impl.md +648 -0
- autofab/parts/uv/scenarios/target.md +72 -0
- autofab/parts/uv/scenarios/target_impl.md +469 -0
- autofab/parts/uv/tests/__init__.py +1 -0
- autofab/parts/uv/tests/manifest_loader_impl_test.py +440 -0
- autofab/parts/uv/tests/model_config_impl_test.py +368 -0
- autofab/parts/uv/tests/node_config_impl_test.py +340 -0
- autofab/parts/uv/tests/target_impl_test.py +134 -0
- autofab/parts/workspace/description.md +31 -0
- autofab/parts/workspace/high/provision.md +38 -0
- autofab/parts/workspace/high/provision_impl.md +62 -0
- autofab/parts/workspace/high/role_registry.md +34 -0
- autofab/parts/workspace/high/role_registry_impl.md +31 -0
- autofab/parts/workspace/high/roles.md +30 -0
- autofab/parts/workspace/high/roles_impl.md +33 -0
- autofab/parts/workspace/high/scaffold.md +36 -0
- autofab/parts/workspace/high/scaffold_impl.md +45 -0
- autofab/parts/workspace/high/stub.md +34 -0
- autofab/parts/workspace/high/stub_impl.md +35 -0
- autofab/parts/workspace/high/sync.md +38 -0
- autofab/parts/workspace/high/sync_impl.md +47 -0
- autofab/parts/workspace/high/workspace_asm.md +26 -0
- autofab/parts/workspace/lib/__init__.py +0 -0
- autofab/parts/workspace/lib/provision.py +68 -0
- autofab/parts/workspace/lib/provision_impl.py +594 -0
- autofab/parts/workspace/lib/role_registry.py +98 -0
- autofab/parts/workspace/lib/role_registry_impl.py +324 -0
- autofab/parts/workspace/lib/roles.py +97 -0
- autofab/parts/workspace/lib/roles_impl.py +825 -0
- autofab/parts/workspace/lib/scaffold.py +67 -0
- autofab/parts/workspace/lib/scaffold_impl.py +947 -0
- autofab/parts/workspace/lib/stub.py +59 -0
- autofab/parts/workspace/lib/stub_impl.py +575 -0
- autofab/parts/workspace/lib/sync.py +71 -0
- autofab/parts/workspace/lib/sync_impl.py +723 -0
- autofab/parts/workspace/lib/workspace_asm.py +37 -0
- autofab/parts/workspace/low/provision.pyi +133 -0
- autofab/parts/workspace/low/provision_impl.pyi +184 -0
- autofab/parts/workspace/low/role_registry.pyi +134 -0
- autofab/parts/workspace/low/role_registry_impl.pyi +166 -0
- autofab/parts/workspace/low/roles.pyi +119 -0
- autofab/parts/workspace/low/roles_impl.pyi +70 -0
- autofab/parts/workspace/low/scaffold.pyi +109 -0
- autofab/parts/workspace/low/scaffold_impl.pyi +132 -0
- autofab/parts/workspace/low/stub.pyi +69 -0
- autofab/parts/workspace/low/stub_impl.pyi +88 -0
- autofab/parts/workspace/low/sync.pyi +119 -0
- autofab/parts/workspace/low/sync_impl.pyi +138 -0
- autofab/parts/workspace/low/workspace_asm.pyi +23 -0
- autofab/parts/workspace/planning/provision.md +53 -0
- autofab/parts/workspace/planning/provision_impl.md +60 -0
- autofab/parts/workspace/planning/role_registry.md +52 -0
- autofab/parts/workspace/planning/role_registry_impl.md +53 -0
- autofab/parts/workspace/planning/roles.md +45 -0
- autofab/parts/workspace/planning/roles_impl.md +44 -0
- autofab/parts/workspace/planning/scaffold.md +47 -0
- autofab/parts/workspace/planning/scaffold_impl.md +48 -0
- autofab/parts/workspace/planning/stub.md +43 -0
- autofab/parts/workspace/planning/stub_impl.md +47 -0
- autofab/parts/workspace/planning/sync.md +52 -0
- autofab/parts/workspace/planning/sync_impl.md +55 -0
- autofab/parts/workspace/pretense/__init__.py +1 -0
- autofab/parts/workspace/pretense/provision_impl_pretense.py +313 -0
- autofab/parts/workspace/pretense/role_registry_impl_pretense.py +509 -0
- autofab/parts/workspace/pretense/roles_impl_pretense.py +490 -0
- autofab/parts/workspace/pretense/scaffold_impl_pretense.py +330 -0
- autofab/parts/workspace/pretense/stub_impl_pretense.py +271 -0
- autofab/parts/workspace/pretense/sync_impl_pretense.py +494 -0
- autofab/parts/workspace/scenarios/provision.md +97 -0
- autofab/parts/workspace/scenarios/provision_impl.md +177 -0
- autofab/parts/workspace/scenarios/role_registry.md +171 -0
- autofab/parts/workspace/scenarios/role_registry_impl.md +252 -0
- autofab/parts/workspace/scenarios/roles.md +31 -0
- autofab/parts/workspace/scenarios/roles_impl.md +31 -0
- autofab/parts/workspace/scenarios/scaffold.md +50 -0
- autofab/parts/workspace/scenarios/scaffold_impl.md +61 -0
- autofab/parts/workspace/scenarios/stub.md +28 -0
- autofab/parts/workspace/scenarios/stub_impl.md +24 -0
- autofab/parts/workspace/scenarios/sync.md +107 -0
- autofab/parts/workspace/scenarios/sync_impl.md +181 -0
- autofab/parts/workspace/tests/provision_impl_test.py +735 -0
- autofab/parts/workspace/tests/role_registry_impl_test.py +334 -0
- autofab/parts/workspace/tests/roles_impl_test.py +145 -0
- autofab/parts/workspace/tests/scaffold_impl_test.py +414 -0
- autofab/parts/workspace/tests/stub_impl_test.py +208 -0
- autofab/parts/workspace/tests/sync_impl_test.py +1004 -0
- autofab/parts/workspace_cli/__init__.py +1 -0
- autofab/parts/workspace_cli/description.md +33 -0
- autofab/parts/workspace_cli/high/check.md +30 -0
- autofab/parts/workspace_cli/high/check_impl.md +31 -0
- autofab/parts/workspace_cli/high/cli_tool.md +38 -0
- autofab/parts/workspace_cli/high/cli_tool_impl.md +31 -0
- autofab/parts/workspace_cli/high/commands.md +42 -0
- autofab/parts/workspace_cli/high/commands_impl.md +41 -0
- autofab/parts/workspace_cli/high/coverage.md +30 -0
- autofab/parts/workspace_cli/high/coverage_impl.md +34 -0
- autofab/parts/workspace_cli/high/dirtiness.md +36 -0
- autofab/parts/workspace_cli/high/dirtiness_impl.md +37 -0
- autofab/parts/workspace_cli/high/pending.md +36 -0
- autofab/parts/workspace_cli/high/pending_impl.md +37 -0
- autofab/parts/workspace_cli/high/work.md +50 -0
- autofab/parts/workspace_cli/high/work_impl.md +63 -0
- autofab/parts/workspace_cli/high/workspace_cli_asm.md +24 -0
- autofab/parts/workspace_cli/lib/__init__.py +0 -0
- autofab/parts/workspace_cli/lib/check.py +46 -0
- autofab/parts/workspace_cli/lib/check_impl.py +1068 -0
- autofab/parts/workspace_cli/lib/cli_tool.py +129 -0
- autofab/parts/workspace_cli/lib/cli_tool_impl.py +454 -0
- autofab/parts/workspace_cli/lib/commands.py +110 -0
- autofab/parts/workspace_cli/lib/commands_impl.py +647 -0
- autofab/parts/workspace_cli/lib/coverage.py +96 -0
- autofab/parts/workspace_cli/lib/coverage_impl.py +464 -0
- autofab/parts/workspace_cli/lib/dirtiness.py +61 -0
- autofab/parts/workspace_cli/lib/dirtiness_impl.py +635 -0
- autofab/parts/workspace_cli/lib/pending.py +36 -0
- autofab/parts/workspace_cli/lib/pending_impl.py +305 -0
- autofab/parts/workspace_cli/lib/work.py +108 -0
- autofab/parts/workspace_cli/lib/work_impl.py +642 -0
- autofab/parts/workspace_cli/lib/workspace_cli_asm.py +37 -0
- autofab/parts/workspace_cli/low/check.pyi +72 -0
- autofab/parts/workspace_cli/low/check_impl.pyi +99 -0
- autofab/parts/workspace_cli/low/cli_tool.pyi +137 -0
- autofab/parts/workspace_cli/low/cli_tool_impl.pyi +176 -0
- autofab/parts/workspace_cli/low/commands.pyi +138 -0
- autofab/parts/workspace_cli/low/commands_impl.pyi +197 -0
- autofab/parts/workspace_cli/low/coverage.pyi +166 -0
- autofab/parts/workspace_cli/low/coverage_impl.pyi +188 -0
- autofab/parts/workspace_cli/low/dirtiness.pyi +93 -0
- autofab/parts/workspace_cli/low/dirtiness_impl.pyi +90 -0
- autofab/parts/workspace_cli/low/pending.pyi +76 -0
- autofab/parts/workspace_cli/low/pending_impl.pyi +95 -0
- autofab/parts/workspace_cli/low/work.pyi +202 -0
- autofab/parts/workspace_cli/low/work_impl.pyi +217 -0
- autofab/parts/workspace_cli/low/workspace_cli_asm.pyi +24 -0
- autofab/parts/workspace_cli/planning/check.md +40 -0
- autofab/parts/workspace_cli/planning/check_impl.md +50 -0
- autofab/parts/workspace_cli/planning/cli_tool.md +49 -0
- autofab/parts/workspace_cli/planning/cli_tool_impl.md +45 -0
- autofab/parts/workspace_cli/planning/commands.md +49 -0
- autofab/parts/workspace_cli/planning/commands_impl.md +67 -0
- autofab/parts/workspace_cli/planning/coverage.md +55 -0
- autofab/parts/workspace_cli/planning/coverage_impl.md +60 -0
- autofab/parts/workspace_cli/planning/dirtiness.md +45 -0
- autofab/parts/workspace_cli/planning/dirtiness_impl.md +51 -0
- autofab/parts/workspace_cli/planning/pending.md +47 -0
- autofab/parts/workspace_cli/planning/pending_impl.md +54 -0
- autofab/parts/workspace_cli/planning/work.md +62 -0
- autofab/parts/workspace_cli/planning/work_impl.md +76 -0
- autofab/parts/workspace_cli/pretense/__init__.py +1 -0
- autofab/parts/workspace_cli/pretense/check_impl_pretense.py +202 -0
- autofab/parts/workspace_cli/pretense/cli_tool_impl_pretense.py +225 -0
- autofab/parts/workspace_cli/pretense/commands_impl_pretense.py +297 -0
- autofab/parts/workspace_cli/pretense/coverage_impl_pretense.py +281 -0
- autofab/parts/workspace_cli/pretense/dirtiness_impl_pretense.py +301 -0
- autofab/parts/workspace_cli/pretense/pending_impl_pretense.py +246 -0
- autofab/parts/workspace_cli/pretense/work_impl_pretense.py +308 -0
- autofab/parts/workspace_cli/scenarios/check.md +21 -0
- autofab/parts/workspace_cli/scenarios/check_impl.md +70 -0
- autofab/parts/workspace_cli/scenarios/cli_tool.md +113 -0
- autofab/parts/workspace_cli/scenarios/cli_tool_impl.md +228 -0
- autofab/parts/workspace_cli/scenarios/commands.md +67 -0
- autofab/parts/workspace_cli/scenarios/commands_impl.md +53 -0
- autofab/parts/workspace_cli/scenarios/coverage.md +97 -0
- autofab/parts/workspace_cli/scenarios/coverage_impl.md +163 -0
- autofab/parts/workspace_cli/scenarios/dirtiness.md +41 -0
- autofab/parts/workspace_cli/scenarios/dirtiness_impl.md +38 -0
- autofab/parts/workspace_cli/scenarios/pending.md +37 -0
- autofab/parts/workspace_cli/scenarios/pending_impl.md +41 -0
- autofab/parts/workspace_cli/scenarios/work.md +81 -0
- autofab/parts/workspace_cli/scenarios/work_impl.md +220 -0
- autofab/parts/workspace_cli/tests/check_impl_test.py +665 -0
- autofab/parts/workspace_cli/tests/cli_tool_impl_test.py +306 -0
- autofab/parts/workspace_cli/tests/commands_impl_test.py +609 -0
- autofab/parts/workspace_cli/tests/coverage_impl_test.py +190 -0
- autofab/parts/workspace_cli/tests/dirtiness_impl_test.py +281 -0
- autofab/parts/workspace_cli/tests/pending_impl_test.py +192 -0
- autofab/parts/workspace_cli/tests/work_impl_test.py +962 -0
- autofab/support/__init__.py +5 -0
- autofab/support/lib/__init__.py +5 -0
- autofab/support/lib/app_info.py +129 -0
- autofab/support/lib/autofab_role_tool.py +3342 -0
- autofab/support/lib/build_lint_common.py +5247 -0
- autofab/support/lib/lib_lint.py +1244 -0
- autofab/support/lib/pretense_lint.py +1228 -0
- autofab/support/lib/test_lint.py +729 -0
- autofab/support/tests/__init__.py +1 -0
- autofab/support/tests/app_info_test.py +73 -0
- autofab/support/tests/autofab_role_tool_test.py +1186 -0
- autofab/support/tests/build_lint_common_test.py +472 -0
- autofab/support/tests/src_metadata_test.py +571 -0
- autofab/tests/example/bar.txt +9 -0
- autofab/tests/example/foo.txt +5 -0
- autofab-0.2.0.dist-info/METADATA +340 -0
- autofab-0.2.0.dist-info/RECORD +794 -0
- autofab-0.2.0.dist-info/WHEEL +4 -0
- autofab-0.2.0.dist-info/entry_points.txt +7 -0
- autofab_python/README.md +18 -0
- autofab_python/autofab_roles.toml +257 -0
- autofab_python/guides/coverage.md +45 -0
- autofab_python/guides/high_level_spec.md +148 -0
- autofab_python/guides/high_to_planning.md +105 -0
- autofab_python/guides/high_to_scenario.md +98 -0
- autofab_python/guides/low_to_lib.md +89 -0
- autofab_python/guides/low_to_test.md +92 -0
- autofab_python/guides/planning_to_low.md +123 -0
- autofab_python/guides/pretense.md +111 -0
- autofab_python/guides/pretense_coverage.md +39 -0
- autofab_python/guides/pretense_qa.md +43 -0
- autofab_python/guides/qa.md +118 -0
- autofab_python/guides/spec_qa.md +101 -0
- autofab_python/guides/uncontracted_bash.md +90 -0
- autofab_python/pyproject.toml +24 -0
- autofab_python/pyright_spec.json +5 -0
- autofab_python/support/__init__.py +5 -0
- autofab_python/support/lib/__init__.py +5 -0
- autofab_python/support/lib/app_info.py +129 -0
- autofab_python/support/lib/build_lint_common.py +5247 -0
- autofab_python/support/lib/framework.py +135 -0
- autofab_python/support/lib/framework.pyi +144 -0
- autofab_python/support/lib/high_lint.py +408 -0
- autofab_python/support/lib/lib_lint.py +1244 -0
- autofab_python/support/lib/lifecycle.py +759 -0
- autofab_python/support/lib/lifecycle.pyi +399 -0
- autofab_python/support/lib/low_lint.py +775 -0
- autofab_python/support/lib/pretense_lint.py +1228 -0
- autofab_python/support/lib/spec_lint.py +732 -0
- autofab_python/support/lib/test_lint.py +729 -0
- autofab_python/support/tests/app_info_test.py +84 -0
- autofab_python/support/tests/autofab_role_tool_test.py +1186 -0
- autofab_python/support/tests/build_lint_common_test.py +472 -0
- autofab_python/support/tests/high_lint_test.sh +169 -0
- autofab_python/support/tests/import_boundaries_lint_test.py +149 -0
- autofab_python/support/tests/lib_lint_test.sh +1436 -0
- autofab_python/support/tests/lifecycle_test.py +707 -0
- autofab_python/support/tests/linter_gates_test.py +38 -0
- autofab_python/support/tests/low_lint_test.sh +263 -0
- autofab_python/support/tests/pretense_lint_test.py +474 -0
- autofab_python/support/tests/test_lint_test.sh +1100 -0
- autofab_python/templates/empty_template.txt +0 -0
- autofab_python/templates/hls_template.md +37 -0
- autofab_python/templates/lib_template.py +10 -0
- autofab_python/templates/low_template.pyi +6 -0
- autofab_python/templates/model_configs.toml +250 -0
- autofab_python/templates/planning_template.md +37 -0
- autofab_python/templates/pretense_template.py +168 -0
- autofab_python/templates/scenario_template.md +22 -0
- autofab_python/templates/test_template.py +10 -0
- benchmarks/README.md +43 -0
- benchmarks/__init__.py +1 -0
- benchmarks/parts/autofab.toml +4 -0
- benchmarks/parts/dag_engine/__init__.py +1 -0
- benchmarks/parts/dag_engine/description.md +9 -0
- benchmarks/parts/dag_engine/high/dag_engine.md +72 -0
- benchmarks/parts/dag_engine/high/dag_engine_impl.md +44 -0
- benchmarks/parts/dag_engine/lib/dag_engine.py +190 -0
- benchmarks/parts/dag_engine/lib/dag_engine_impl.py +142 -0
- benchmarks/parts/dag_engine/low/dag_engine.pyi +525 -0
- benchmarks/parts/dag_engine/low/dag_engine_impl.pyi +333 -0
- benchmarks/parts/dag_engine/planning/dag_engine.md +78 -0
- benchmarks/parts/dag_engine/planning/dag_engine_impl.md +66 -0
- benchmarks/parts/dag_engine/scenarios/dag_engine.md +62 -0
- benchmarks/parts/dag_engine/scenarios/dag_engine_impl.md +84 -0
- benchmarks/parts/dag_engine/tests/dag_engine_impl_test.py +502 -0
- benchmarks/parts/dag_engine_lite/__init__.py +1 -0
- benchmarks/parts/dag_engine_lite/description.md +9 -0
- benchmarks/parts/dag_engine_lite/high/dag_engine_lite.md +66 -0
- benchmarks/parts/dag_engine_lite/high/dag_engine_lite_impl.md +44 -0
- benchmarks/parts/dag_engine_lite/lib/dag_engine_lite.py +173 -0
- benchmarks/parts/dag_engine_lite/lib/dag_engine_lite_impl.py +138 -0
- benchmarks/parts/dag_engine_lite/low/dag_engine_lite.pyi +496 -0
- benchmarks/parts/dag_engine_lite/low/dag_engine_lite_impl.pyi +320 -0
- benchmarks/parts/dag_engine_lite/planning/dag_engine_lite.md +86 -0
- benchmarks/parts/dag_engine_lite/planning/dag_engine_lite_impl.md +71 -0
- benchmarks/parts/dag_engine_lite/scenarios/dag_engine_lite.md +85 -0
- benchmarks/parts/dag_engine_lite/scenarios/dag_engine_lite_impl.md +104 -0
- benchmarks/parts/dag_engine_lite/tests/dag_engine_lite_impl_test.py +32 -0
- benchmarks/parts/semver_solver/__init__.py +1 -0
- benchmarks/parts/semver_solver/description.md +10 -0
- benchmarks/parts/semver_solver/high/backtracking_solver_ext.md +32 -0
- benchmarks/parts/semver_solver/high/semver_solver.md +66 -0
- benchmarks/parts/semver_solver/high/semver_solver_impl.md +51 -0
- benchmarks/parts/semver_solver/low/backtracking_solver_ext.pyi +132 -0
- benchmarks/parts/semver_solver/low/semver_solver.pyi +352 -0
- benchmarks/parts/semver_solver/low/semver_solver_impl.pyi +188 -0
- benchmarks/parts/semver_solver/planning/semver_solver.md +82 -0
- benchmarks/parts/semver_solver/planning/semver_solver_impl.md +65 -0
- benchmarks/parts/semver_solver/scenarios/semver_solver.md +94 -0
- benchmarks/parts/semver_solver/scenarios/semver_solver_impl.md +115 -0
- benchmarks/results/dag_engine/Qwen3.6-35B-A3B-oQ6-mtp+dsh/cleanroom_2.log +61 -0
- benchmarks/results/dag_engine/Qwen3.6-35B-A3B-oQ6-mtp+dsh/lib_1.py +1136 -0
- benchmarks/results/dag_engine/Qwen3.6-35B-A3B-oQ6-mtp+dsh/lib_2.py +1268 -0
- benchmarks/results/dag_engine/Qwen3.6-35B-A3B-oQ6-mtp+dsh/test_1.py +1170 -0
- benchmarks/results/dag_engine/Qwen3.6-35B-A3B-oQ6-mtp+dsh/test_2.py +914 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/cleanroom_2.log +12 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/cleanroom_3.log +13 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/cleanroom_4.log +23 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/lib_1.py +1310 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/lib_2.py +1270 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/lib_3.py +1413 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/lib_4.py +1446 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/test_1.py +951 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/test_2.py +797 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/test_3.py +681 -0
- benchmarks/results/dag_engine/deepseek-flash+dsh/test_4.py +996 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/cleanroom_2.log +20 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/cleanroom_3.log +17 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/cleanroom_4.log +31 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/lib_1.py +1090 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/lib_2.py +984 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/lib_3.py +904 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/lib_4.py +951 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/test_1.py +856 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/test_2.py +657 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/test_3.py +769 -0
- benchmarks/results/dag_engine/gemini-3.8-flash+antigravity/test_4.py +905 -0
- benchmarks/results/dag_engine/gemini-4-argon+antigravity/cleanroom_1.log +15 -0
- benchmarks/results/dag_engine/gemini-4-argon+antigravity/lib_1.py +1095 -0
- benchmarks/results/dag_engine/gemini-4-argon+antigravity/test_1.py +754 -0
- benchmarks/results/dag_engine/gemini-4-argon+antigravity-baseline/cleanroom_1.log +439 -0
- benchmarks/results/dag_engine/gemini-4-argon+antigravity-baseline/lib_1.py +1313 -0
- benchmarks/results/dag_engine/gemini-4-argon+antigravity-baseline/test_1.py +488 -0
- benchmarks/results/dag_engine/qwen-flash-next-288-q4+dsh/lib_1.py +1225 -0
- benchmarks/results/dag_engine/qwen-flash-next-288-q4+dsh/test_1.py +1072 -0
- benchmarks/results/dag_engine_lite/deepseek-flash+dsh-pretense/cleanroom_1.log +19 -0
- benchmarks/results/dag_engine_lite/deepseek-flash+dsh-pretense/lib_1.py +1204 -0
- benchmarks/results/dag_engine_lite/deepseek-flash+dsh-pretense/pretense_1.py +1843 -0
- benchmarks/results/dag_engine_lite/deepseek-flash+dsh-pretense-baseline/cleanroom_1.log +525 -0
- benchmarks/results/dag_engine_lite/deepseek-flash+dsh-pretense-baseline/lib_1.py +1063 -0
- benchmarks/results/dag_engine_lite/deepseek-flash+dsh-pretense-baseline/pretense_1.py +1480 -0
- benchmarks/results/dag_engine_lite/gemini-3.8-flash+antigravity-pretense/cleanroom_1.log +26 -0
- benchmarks/results/dag_engine_lite/gemini-3.8-flash+antigravity-pretense/lib_1.py +801 -0
- benchmarks/results/dag_engine_lite/gemini-3.8-flash+antigravity-pretense/pretense_1.py +1033 -0
- benchmarks/results/dag_engine_lite/gemini-3.8-flash+antigravity-pretense-baseline/cleanroom_1.log +525 -0
- benchmarks/results/dag_engine_lite/gemini-3.8-flash+antigravity-pretense-baseline/lib_1.py +734 -0
- benchmarks/results/dag_engine_lite/gemini-3.8-flash+antigravity-pretense-baseline/pretense_1.py +799 -0
- benchmarks/results/dag_engine_lite/qwen-moe+dsh-pretense/cleanroom_1.log +74 -0
- benchmarks/results/dag_engine_lite/qwen-moe+dsh-pretense/lib_1.py +1203 -0
- benchmarks/results/dag_engine_lite/qwen-moe+dsh-pretense/pretense_1.py +1160 -0
- benchmarks/results/dag_engine_lite/qwen-moe+dsh-pretense-baseline/cleanroom_1.log +6 -0
- benchmarks/results/dag_engine_lite/qwen-moe+dsh-pretense-baseline/lib_1.py +912 -0
- benchmarks/results/dag_engine_lite/qwen-moe+dsh-pretense-baseline/pretense_1.py +855 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/cleanroom_1.log +35 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/cleanroom_2.log +19 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/cleanroom_3.log +19 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/lib_1.py +1045 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/lib_2.py +1116 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/lib_3.py +998 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/pretense_1.py +1824 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/pretense_2.py +1733 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense/pretense_3.py +2064 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/cleanroom_1.log +521 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/cleanroom_2.log +525 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/cleanroom_3.log +525 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/lib_1.py +749 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/lib_2.py +926 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/lib_3.py +879 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/pretense_1.py +880 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/pretense_2.py +1182 -0
- benchmarks/results/semver_solver/deepseek-flash+dsh-pretense-baseline/pretense_3.py +1381 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/cleanroom_1.log +22 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/cleanroom_2.log +15 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/cleanroom_3.log +17 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/lib_1.py +796 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/lib_2.py +769 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/lib_3.py +765 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/pretense_1.py +1624 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/pretense_2.py +1262 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense/pretense_3.py +1497 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/cleanroom_1.log +33 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/cleanroom_2.log +525 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/cleanroom_3.log +533 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/lib_1.py +625 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/lib_2.py +898 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/lib_3.py +631 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/pretense_1.py +573 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/pretense_2.py +1055 -0
- benchmarks/results/semver_solver/gemini-3.8-flash+antigravity-pretense-baseline/pretense_3.py +964 -0
- benchmarks/results/semver_solver/qwen-moe+dsh-pretense-baseline/cleanroom_1.log +533 -0
- benchmarks/results/semver_solver/qwen-moe+dsh-pretense-baseline/lib_1.py +840 -0
- benchmarks/results/semver_solver/qwen-moe+dsh-pretense-baseline/pretense_1.py +1170 -0
- pretense/README.md +33 -0
- pretense/__init__.py +82 -0
- pretense/cli.py +35 -0
- pretense/collections.py +206 -0
- pretense/compiler.py +47 -0
- pretense/context.py +9 -0
- pretense/fake.py +5 -0
- pretense/parts/autofab.toml +4 -0
- pretense/parts/pretense/__init__.py +1 -0
- pretense/parts/pretense/description.md +20 -0
- pretense/parts/pretense/high/pretense.md +23 -0
- pretense/parts/pretense/high/pretense_impl.md +23 -0
- pretense/parts/pretense/lib/pretense.py +1303 -0
- pretense/parts/pretense/lib/pretense_impl.py +806 -0
- pretense/parts/pretense/low/pretense.pyi +422 -0
- pretense/parts/pretense/low/pretense_impl.pyi +86 -0
- pretense/parts/pretense/planning/pretense.md +72 -0
- pretense/parts/pretense/planning/pretense_impl.md +59 -0
- pretense/parts/pretense/pretense/pretense_impl_pretense.py +218 -0
- pretense/parts/pretense/scenarios/pretense.md +76 -0
- pretense/parts/pretense/scenarios/pretense_impl.md +58 -0
- pretense/parts/pretense/tests/pretense_impl_test.py +895 -0
- pretense/proto.py +9 -0
- pretense/pyproject.toml +40 -0
- pretense/sentinels.py +25 -0
- pretense/support/tests/counterexample_synthesis_test.py +97 -0
- pretense/support/tests/pretense_core_test.py +244 -0
- pretense/synthesis.py +44 -0
- pretense/transition.py +11 -0
autofab/README.md
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# autofab_roles.toml
|
|
2
|
+
# Autofab Python methodology role definitions
|
|
3
|
+
# Canonical package address: //autofab_python
|
|
4
|
+
|
|
5
|
+
[methodology]
|
|
6
|
+
name = "python"
|
|
7
|
+
description = "Cleanroom literate specification and verification methodology for Python"
|
|
8
|
+
|
|
9
|
+
[roles.high]
|
|
10
|
+
name = "high"
|
|
11
|
+
persona = "High-Level Spec Engineer"
|
|
12
|
+
src_pattern = "{unit_dir}/high/{unit_name}.md"
|
|
13
|
+
guide = "autofab_python/guides/high_level_spec.md"
|
|
14
|
+
template = "autofab_python/templates/hls_template.md"
|
|
15
|
+
prompt_template = "Files are aligned according to the guide."
|
|
16
|
+
allows_step_mode = true
|
|
17
|
+
role_deps = []
|
|
18
|
+
star_role_deps = ["high"]
|
|
19
|
+
common_spec_roles = []
|
|
20
|
+
tools = [
|
|
21
|
+
"autofab_python.support.lib.high_lint",
|
|
22
|
+
"autofab_python.support.lib.build_lint_common",
|
|
23
|
+
]
|
|
24
|
+
active_component_types = ["implementation", "assembly", "interface", "external"]
|
|
25
|
+
verify_template = "uv run python -m autofab_python.support.lib.high_lint {unit_dir}/high/{unit_name}.md"
|
|
26
|
+
|
|
27
|
+
[roles.scenario]
|
|
28
|
+
name = "scenario"
|
|
29
|
+
persona = "Scenario Author"
|
|
30
|
+
src_pattern = "{unit_dir}/scenarios/{unit_name}.md"
|
|
31
|
+
guide = "autofab_python/guides/high_to_scenario.md"
|
|
32
|
+
template = "autofab_python/templates/scenario_template.md"
|
|
33
|
+
prompt_template = "Files are aligned according to the guide."
|
|
34
|
+
allows_step_mode = true
|
|
35
|
+
role_deps = []
|
|
36
|
+
star_role_deps = ["scenario"]
|
|
37
|
+
common_spec_roles = ["high"]
|
|
38
|
+
tools = [
|
|
39
|
+
"autofab.support.lib.build_lint_common",
|
|
40
|
+
]
|
|
41
|
+
active_component_types = ["interface", "implementation"]
|
|
42
|
+
verify_template = "# Scenario files verified against high_to_scenario.md"
|
|
43
|
+
|
|
44
|
+
[roles.planning]
|
|
45
|
+
name = "planning"
|
|
46
|
+
persona = "Planning Engineer"
|
|
47
|
+
src_pattern = "{unit_dir}/planning/{unit_name}.md"
|
|
48
|
+
guide = "autofab_python/guides/high_to_planning.md"
|
|
49
|
+
template = "autofab_python/templates/planning_template.md"
|
|
50
|
+
prompt_template = "Files are aligned according to the guide."
|
|
51
|
+
allows_step_mode = true
|
|
52
|
+
role_deps = []
|
|
53
|
+
star_role_deps = ["planning"]
|
|
54
|
+
feedback_role_deps = ["high"]
|
|
55
|
+
common_spec_roles = ["high"]
|
|
56
|
+
tools = [
|
|
57
|
+
"autofab.support.lib.build_lint_common",
|
|
58
|
+
]
|
|
59
|
+
active_component_types = ["implementation", "interface"]
|
|
60
|
+
verify_template = "# Planning canvas verified against high_to_planning.md"
|
|
61
|
+
|
|
62
|
+
[roles.low]
|
|
63
|
+
name = "low"
|
|
64
|
+
persona = "Low-Level Spec Engineer"
|
|
65
|
+
src_pattern = "{unit_dir}/low/{unit_name}.pyi"
|
|
66
|
+
guide = "autofab_python/guides/planning_to_low.md"
|
|
67
|
+
template = "autofab_python/templates/low_template.pyi"
|
|
68
|
+
prompt_template = "Files are aligned according to the guide."
|
|
69
|
+
allows_step_mode = true
|
|
70
|
+
role_deps = []
|
|
71
|
+
star_role_deps = ["low"]
|
|
72
|
+
feedback_role_deps = ["planning"]
|
|
73
|
+
common_spec_roles = ["planning"]
|
|
74
|
+
tools = [
|
|
75
|
+
"autofab.support.lib.build_lint_common",
|
|
76
|
+
]
|
|
77
|
+
active_component_types = ["implementation", "assembly", "interface", "external"]
|
|
78
|
+
verify_template = "uv run python -m autofab_python.support.lib.low_lint {unit_dir}/low/{unit_name}.pyi && uv run pyright --project $([ -f pyright_spec.json ] && echo pyright_spec.json || find . -name pyright_spec.json -not -path '*/.*' | head -n 1) {unit_dir}/low/{unit_name}.pyi"
|
|
79
|
+
|
|
80
|
+
[roles.spec_qa]
|
|
81
|
+
name = "spec_qa"
|
|
82
|
+
persona = "Specification QA Arbiter"
|
|
83
|
+
src_pattern = ""
|
|
84
|
+
guide = "autofab_python/guides/spec_qa.md"
|
|
85
|
+
prompt_template = "Files are aligned according to the guide."
|
|
86
|
+
allows_step_mode = false
|
|
87
|
+
role_deps = ["scenario"]
|
|
88
|
+
star_role_deps = ["high", "planning", "low"]
|
|
89
|
+
feedback_role_deps = ["high", "planning", "low"]
|
|
90
|
+
common_spec_roles = ["high", "planning", "scenario"]
|
|
91
|
+
tools = [
|
|
92
|
+
"autofab_python.support.lib.high_lint",
|
|
93
|
+
"autofab_python.support.lib.spec_lint",
|
|
94
|
+
"autofab_python.support.lib.low_lint",
|
|
95
|
+
"autofab_python.support.lib.build_lint_common",
|
|
96
|
+
]
|
|
97
|
+
active_component_types = ["implementation", "assembly", "interface"]
|
|
98
|
+
verify_template = "uv run python -m autofab_python.support.lib.high_lint {unit_dir}/high/{unit_name}.md && (! test -f {unit_dir}/planning/{unit_name}.md || uv run python -m autofab_python.support.lib.spec_lint {unit_dir}/planning/{unit_name}.md) && uv run python -m autofab_python.support.lib.low_lint {unit_dir}/low/{unit_name}.pyi && uv run pyright --project $([ -f pyright_spec.json ] && echo pyright_spec.json || find . -name pyright_spec.json -not -path '*/.*' | head -n 1) {unit_dir}/low/{unit_name}.pyi"
|
|
99
|
+
verification_success_message = "Specification, planning, and low-level specification verified for {unit_name}."
|
|
100
|
+
|
|
101
|
+
[roles.lib]
|
|
102
|
+
name = "lib"
|
|
103
|
+
persona = "Lib Engineer"
|
|
104
|
+
src_pattern = "{unit_dir}/lib/{unit_name}.py"
|
|
105
|
+
guide = "autofab_python/guides/low_to_lib.md"
|
|
106
|
+
template = "autofab_python/templates/lib_template.py"
|
|
107
|
+
template_command = "uv run python -m autofab_python.support.lib.lib_lint --scaffold {target_file}"
|
|
108
|
+
prompt_template = "Files are aligned according to the guide."
|
|
109
|
+
allows_step_mode = true
|
|
110
|
+
role_deps = []
|
|
111
|
+
star_role_deps = ["low"]
|
|
112
|
+
silent_role_deps = ["spec_qa"]
|
|
113
|
+
silent_cross_role_deps = ["lib"]
|
|
114
|
+
common_spec_roles = ["low"]
|
|
115
|
+
tools = [
|
|
116
|
+
"autofab_python.support.lib.lib_lint",
|
|
117
|
+
"autofab_python.support.lib.build_lint_common",
|
|
118
|
+
]
|
|
119
|
+
active_component_types = ["implementation", "assembly", "interface"]
|
|
120
|
+
verify_template = "uv run python -m autofab_python.support.lib.lib_lint {unit_dir}/lib/{unit_name}.py --pyi {unit_dir}/low/{unit_name}.pyi && uv run pyright {unit_dir}/lib/{unit_name}.py"
|
|
121
|
+
verification_success_message = "{unit_name}.py passed static checks (syntax & types). IMPORTANT: Static verification does NOT run unit tests or verify runtime logic. If this target has unacted feedback, you must resolve the defect against low/*.pyi contracts and tests before submitting."
|
|
122
|
+
|
|
123
|
+
[roles.test]
|
|
124
|
+
name = "test"
|
|
125
|
+
persona = "Test Engineer"
|
|
126
|
+
pipeline = "standard"
|
|
127
|
+
src_pattern = "{unit_dir}/tests/{unit_name}_test.py"
|
|
128
|
+
guide = "autofab_python/guides/low_to_test.md"
|
|
129
|
+
template = "autofab_python/templates/test_template.py"
|
|
130
|
+
template_command = "uv run python -m autofab_python.support.lib.test_lint --scaffold {target_file} --lib-pkg {unit_dir}/lib"
|
|
131
|
+
prompt_template = "Files are aligned according to the guide."
|
|
132
|
+
allows_step_mode = true
|
|
133
|
+
role_deps = []
|
|
134
|
+
star_role_deps = ["low"]
|
|
135
|
+
silent_role_deps = ["spec_qa"]
|
|
136
|
+
stub_role_deps = ["lib"]
|
|
137
|
+
silent_cross_role_deps = ["lib"]
|
|
138
|
+
common_spec_roles = ["low"]
|
|
139
|
+
tools = [
|
|
140
|
+
"autofab_python.support.lib.test_lint",
|
|
141
|
+
"autofab_python.support.lib.build_lint_common",
|
|
142
|
+
]
|
|
143
|
+
active_component_types = ["implementation"]
|
|
144
|
+
verify_template = "uv run python -m autofab_python.support.lib.test_lint {unit_dir}/tests/{unit_name}_test.py --pyi {unit_dir}/low/{unit_name}.pyi && uv run pyright {unit_dir}/tests/{unit_name}_test.py"
|
|
145
|
+
|
|
146
|
+
verification_success_message = "{unit_name}_test.py passed static checks (syntax & types). IMPORTANT: Static verification does NOT execute test suites. Call check_file often to verify test structure and imports."
|
|
147
|
+
|
|
148
|
+
[roles.qa]
|
|
149
|
+
name = "qa"
|
|
150
|
+
persona = "QA Arbiter"
|
|
151
|
+
pipeline = "standard"
|
|
152
|
+
src_pattern = ""
|
|
153
|
+
guide = "autofab_python/guides/qa.md"
|
|
154
|
+
prompt_template = "Files are aligned according to the guide."
|
|
155
|
+
allows_step_mode = false
|
|
156
|
+
role_deps = []
|
|
157
|
+
star_role_deps = ["low"]
|
|
158
|
+
feedback_role_deps = ["lib", "test"]
|
|
159
|
+
common_spec_roles = ["low"]
|
|
160
|
+
tools = []
|
|
161
|
+
active_component_types = ["implementation"]
|
|
162
|
+
verify_template = "uv run pytest {unit_dir}/tests/{unit_name}_test.py --timeout=10 --timeout-method=thread"
|
|
163
|
+
verification_success_message = "Test {unit_name}_test.py passed."
|
|
164
|
+
|
|
165
|
+
[roles.coverage]
|
|
166
|
+
name = "coverage"
|
|
167
|
+
persona = "Coverage Arbiter"
|
|
168
|
+
pipeline = "standard"
|
|
169
|
+
src_pattern = ""
|
|
170
|
+
guide = "autofab_python/guides/coverage.md"
|
|
171
|
+
prompt_template = "Files are aligned according to the guide. Coverage audits must be formulated strictly against public specification contracts. Never demand testing private helpers or internal methods; uncovered defensive branches belong to the library to prune as dead code or mark as unreachable according to the methodology."
|
|
172
|
+
allows_step_mode = false
|
|
173
|
+
role_deps = []
|
|
174
|
+
silent_role_deps = ["qa"]
|
|
175
|
+
star_role_deps = ["low"]
|
|
176
|
+
feedback_role_deps = ["lib", "test"]
|
|
177
|
+
common_spec_roles = ["low"]
|
|
178
|
+
tools = [
|
|
179
|
+
"autofab.support.lib.autofab_role_tool",
|
|
180
|
+
]
|
|
181
|
+
active_component_types = ["implementation"]
|
|
182
|
+
verify_template = "uv run pytest {unit_dir}/tests/{unit_name}_test.py --timeout=10 --timeout-method=thread && uv run python -m autofab.support.lib.autofab_role_tool coverage --impl {unit_dir}/lib/{unit_name}.py --test {unit_dir}/tests/{unit_name}_test.py --threshold 100.0"
|
|
183
|
+
verification_success_message = "All lines of {unit_name}.py are covered by {unit_name}_test.py."
|
|
184
|
+
|
|
185
|
+
[roles.pretense]
|
|
186
|
+
name = "pretense"
|
|
187
|
+
persona = "Pretense Engineer"
|
|
188
|
+
pipeline = "pretense"
|
|
189
|
+
src_pattern = "{unit_dir}/pretense/{unit_name}_pretense.py"
|
|
190
|
+
guide = "autofab_python/guides/pretense.md"
|
|
191
|
+
template = "autofab_python/templates/pretense_template.py"
|
|
192
|
+
template_command = "uv run python -m autofab_python.support.lib.pretense_lint --scaffold {target_file} --pyi {unit_dir}/low/{unit_name}.pyi --impl {unit_dir}/lib/{unit_name}.py"
|
|
193
|
+
prompt_template = "Files are aligned according to the guide. In Pretense test suites, define transition postconditions in ctx.ensures(...). In Test<Target>ImplReal, bind real instances into self.sm = TargetStateMachine(singletons={...}) and drive scenarios via self.sm.dispatch_transition(...) without redundant manual assertions, relying on ctx.ensures(...) to verify contracts automatically."
|
|
194
|
+
allows_step_mode = true
|
|
195
|
+
role_deps = []
|
|
196
|
+
star_role_deps = ["low"]
|
|
197
|
+
silent_role_deps = ["spec_qa"]
|
|
198
|
+
stub_role_deps = ["lib"]
|
|
199
|
+
silent_cross_role_deps = ["lib"]
|
|
200
|
+
common_spec_roles = ["low"]
|
|
201
|
+
tools = [
|
|
202
|
+
"autofab_python.support.lib.pretense_lint",
|
|
203
|
+
"autofab_python.support.lib.build_lint_common",
|
|
204
|
+
]
|
|
205
|
+
active_component_types = ["implementation"]
|
|
206
|
+
verify_template = "uv run python -m autofab_python.support.lib.pretense_lint {unit_dir}/pretense/{unit_name}_pretense.py --pyi {unit_dir}/low/{unit_name}.pyi && uv run pyright {unit_dir}/pretense/{unit_name}_pretense.py"
|
|
207
|
+
verification_success_message = "{unit_name}_pretense.py passed static checks (syntax & types). IMPORTANT: Static verification does NOT execute test suites. Call check_file often to verify pretense structure."
|
|
208
|
+
|
|
209
|
+
[roles.pretense_qa]
|
|
210
|
+
name = "pretense_qa"
|
|
211
|
+
persona = "Pretense QA Arbiter"
|
|
212
|
+
pipeline = "pretense"
|
|
213
|
+
src_pattern = ""
|
|
214
|
+
guide = "autofab_python/guides/pretense_qa.md"
|
|
215
|
+
prompt_template = "Files are aligned according to the guide."
|
|
216
|
+
allows_step_mode = false
|
|
217
|
+
role_deps = []
|
|
218
|
+
star_role_deps = ["low"]
|
|
219
|
+
feedback_role_deps = ["lib", "pretense"]
|
|
220
|
+
common_spec_roles = ["low"]
|
|
221
|
+
tools = []
|
|
222
|
+
active_component_types = ["implementation"]
|
|
223
|
+
verify_template = "uv run pretense {unit_dir}/pretense/{unit_name}_pretense.py"
|
|
224
|
+
verification_success_message = "Pretense test {unit_name}_pretense.py passed."
|
|
225
|
+
|
|
226
|
+
[roles.pretense_coverage]
|
|
227
|
+
name = "pretense_coverage"
|
|
228
|
+
persona = "Pretense Coverage Arbiter"
|
|
229
|
+
pipeline = "pretense"
|
|
230
|
+
src_pattern = ""
|
|
231
|
+
guide = "autofab_python/guides/pretense_coverage.md"
|
|
232
|
+
prompt_template = "Files are aligned according to the guide. Coverage audits must be formulated strictly against public specification contracts. Never demand testing private helpers or internal methods; uncovered defensive branches belong to the library to prune as dead code or mark as unreachable according to the methodology."
|
|
233
|
+
allows_step_mode = false
|
|
234
|
+
role_deps = []
|
|
235
|
+
silent_role_deps = ["pretense_qa"]
|
|
236
|
+
star_role_deps = ["low"]
|
|
237
|
+
feedback_role_deps = ["lib", "pretense"]
|
|
238
|
+
common_spec_roles = ["low"]
|
|
239
|
+
tools = []
|
|
240
|
+
active_component_types = ["implementation"]
|
|
241
|
+
verify_template = "uv run pretense {unit_dir}/pretense/{unit_name}_pretense.py --no-fuzz --cov --threshold 100.0"
|
|
242
|
+
verification_success_message = "All lines of {unit_name}.py are covered by {unit_name}_pretense.py."
|
|
243
|
+
|
|
244
|
+
[fused_roles.baseline]
|
|
245
|
+
name = "baseline"
|
|
246
|
+
persona = "Baseline Software Developer"
|
|
247
|
+
pipeline = "standard"
|
|
248
|
+
roles = ["lib", "test", "qa", "coverage"]
|
|
249
|
+
guide = "autofab_python/guides/low_to_lib.md"
|
|
250
|
+
|
|
251
|
+
[fused_roles.pretense_baseline]
|
|
252
|
+
name = "pretense_baseline"
|
|
253
|
+
persona = "Pretense Baseline Software Developer"
|
|
254
|
+
pipeline = "pretense"
|
|
255
|
+
roles = ["lib", "pretense", "pretense_qa", "pretense_coverage"]
|
|
256
|
+
guide = "autofab_python/guides/low_to_lib.md"
|
|
257
|
+
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Guide: Low-Level Specification to Library Implementation Alignment
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
The artifact is a Python library module (`lib/<name>.py` or `lib/<name>_impl.py`) that formalizes `low/<name>.pyi` (and `low/<name>_impl.pyi`), submitted via `submit(target="<target_file>", change_summary="...")`. In multi-node sessions, multiple library modules are processed together by package-relative alias path. Cleanroom metadata blocks at the bottom of the file (under `# --- CLEANROOM METADATA ---` and `# --- END CLEANROOM METADATA ---`) are managed automatically by Cleanroom tooling upon `submit(change_summary=...)`; direct edits to metadata blocks are prohibited and rejected by editing tools. Library modules categorize into interface modules (`lib/<name>.py`) and implementation modules (`lib/<name>_impl.py` or concrete service modules). Interface modules define abstract protocol types, structural stubs, passive data types, and type aliases; service protocols in interface modules subclass `Protocol` and inherit `Singleton[TierType]` matching `low/<name>.pyi`, containing strictly `...` stubs without private backing state, and without `__initialize__`. Interface protocols are implemented by concrete implementation components (`_impl`) that may reside in other components or parts. Classes decorated with `@poly_type` are purely abstract and cannot be refined by a poly type with the same short name (though they may be extended by other poly types to create new abstract object types); only singletons and data types can be instantiated. An `_impl` component with no singletons has nothing to test; implementation components realize active service specifications as concrete `@singleton_type` classes implementing the interface protocol with their declared class-level `tier`. As an edge case, `@data_type` classes extending a `@poly_type` protocol must be concretely implemented in whatever component defines them (including interface modules); these data types are the only types implemented in an interface module.
|
|
6
|
+
|
|
7
|
+
Implementation modules (`lib/<name>_impl.py` or concrete service modules) translate the structural stubs and behavioral contracts in `low/<name>.pyi` and `low/<name>_impl.pyi` into a complete runtime implementation incorporating real control flow, input validation, iteration sweeps, exception handling, and error response branching. Implementation classes implement their companion interface protocol directly (which already inherits `Singleton[TierType]`), faithfully matching the base class hierarchy in `low/<name>_impl.pyi` without redundantly subclassing `Singleton` or duplicating erased type parameters. Implementation classes define their declared class-level `tier` attribute matching their lifecycle tier and provide concrete private backing state. Modules register singletons into the lifecycle registry via auto-generated module-level `__initialize__(registry=None) -> None`; classes never define `__initialize__`. Singleton instances initialize their private backing state (e.g. locks, collections, caches) in standard `__init__(self) -> None` or the optional inherited lifecycle post-creation hook `def initialize(self) -> None:`. Ad-hoc multi-phase configuration methods (`configure()`, `setup()`) not declared in specifications are prohibited, and implementation classes declare only contracted public members, standard dunder methods, and the optional inherited hook `def initialize(self) -> None:`. Lifecycle registration (`__initialize__`) in implementation modules is auto-generated and maintained by Cleanroom tooling under the `# --- CLEANROOM AUTO-GENERATED: DO NOT EDIT ---` delimiter; manual modification of auto-generated blocks is prohibited. Postconditions (`POSTCONDITIONS:`) specifying unconditional guarantees (`MUST <outcome>.`) and conditional outcomes (`WHEN <condition>, MUST <outcome>.`) are realized as concrete runtime branching (`if/else`), error handling (`try/except`), and exact quoted diagnostic string formatting. Caller assumptions (`ASSUMPTIONS:`) are accepted axiomatically without defensive checks or error branches. Implementation methods and key control-flow branches include brief inline comments indicating how they correspond to the contractual postconditions, invariants, or sequencing specified in `low/<name>.pyi`. Subtypes fulfill the full transitive contract of their supertypes even when low-level specification stubs omit redundant docstring boilerplate. Collaborator singletons are resolved on demand via `get_singleton(...)` respecting lifecycle tier boundaries. Target classes share the exact class names specified in the interface, and obsolete legacy members or uncontracted surplus types are pruned. When low-level specifications reference cross-package types omitted from read-only build dependencies, interface modules isolate them in private fallback containers (e.g. `class _Types: Foo = NewType("Foo", str); pkg = _Types`) and paired implementation modules alias the exact interface container (`pkg = interface_module.pkg`) to preserve nominal identity. When addressing verification feedback or blame reports from downstream roles, all sibling methods, branches, and related operations in the module must be audited for the same failure pattern before submitting, preventing narrow single-defect patches and multi-round ping-pong loops. Unreachable code is pruned or restructured to eliminate dead logic; if unreachable code cannot be otherwise changed (such as defensive branches required by static type checking, runtime protocol conformance, or assertions protecting internal invariants guaranteed by caller assumptions), it is ignored for test coverage by annotating it with `# pragma: no cover (assumption: <reason>)`.
|
|
8
|
+
|
|
9
|
+
> META: "Library modules translate low-level interface stubs and contracts into abstract protocols for interface components and full runtime execution for implementation components."
|
|
10
|
+
|
|
11
|
+
## Lint checks
|
|
12
|
+
|
|
13
|
+
- [ ] Every class and member declared in `low/<name>.pyi` is represented in `lib/<name>.py` with identical names and compatible signatures
|
|
14
|
+
- [ ] In interface modules, service protocols subclass Protocol and inherit Singleton[TierType] matching low/<name>.pyi, contain strictly ellipsis ... member stubs, never declare private state storage, and never define __initialize__
|
|
15
|
+
- [ ] In implementation modules, service classes implement interface protocols faithfully matching the base class hierarchy in `low/<name>_impl.pyi`, define class-level `tier` matching their declared lifecycle tier, and never append bare `Singleton` or duplicate `Singleton[TierType]` base classes; classes decorated with `@poly_type` are purely abstract and can never be directly instantiated in library code
|
|
16
|
+
- [ ] In implementation modules, every singleton class specifies its `tier` attribute matching its declared lifecycle tier
|
|
17
|
+
- [ ] In implementation modules, lifecycle registration (`__initialize__`) is maintained under the `# --- CLEANROOM AUTO-GENERATED: DO NOT EDIT ---` delimiter; interface modules omit `__initialize__`
|
|
18
|
+
- [ ] Data types (`@data_type`) extending a poly type (`@poly_type`) are concretely implemented in whatever component defines them; these are the only types implemented in an interface module
|
|
19
|
+
- [ ] Leaf `@data_type` and `@variant` classes are frozen dataclasses (`@dataclass(frozen=True)`) defining fields matching `low/<name>.pyi`
|
|
20
|
+
- [ ] Subclassed `@data_type` and `@variant` records follow Python dataclass field ordering constraints across inheritance hierarchies, ensuring non-default fields never follow inherited fields that specify default values; default diagnostic formatting belongs in `__post_init__` rather than conflicting field overrides
|
|
21
|
+
- [ ] External libraries are imported only as documented in `low/<name>_ext.pyi`
|
|
22
|
+
- [ ] Pyright type checking passes cleanly with zero errors across all classes
|
|
23
|
+
- [ ] Obsolete public types, type aliases, and class properties not declared in `low/<name>.pyi` or `low/<name>_impl.pyi` are pruned to maintain strict contract alignment and avoid public API pollution
|
|
24
|
+
- [ ] Implementation classes implementing specification protocols declare only contracted public members, standard dunder methods (`__init__`, `__len__`, etc.), and the optional inherited lifecycle hook `def initialize(self) -> None:`; uncontracted public methods (such as ad-hoc `configure()` or `setup()` methods) and class-level `__initialize__` methods are prohibited
|
|
25
|
+
- [ ] In assembly modules (`lib/<name>_asm.py`), `CONSTITUENTS` is defined as a non-empty tuple containing all constituent modules declared under `CONSTITUENTS:` in `low/<name>_asm.pyi`
|
|
26
|
+
- [ ] In assembly modules (`lib/<name>_asm.py`), `__initialize__(registry=None)` is defined and iterates through `CONSTITUENTS` to invoke each constituent module's initialization routine
|
|
27
|
+
|
|
28
|
+
## Document layout and imports
|
|
29
|
+
|
|
30
|
+
- [ ] Implementation modules import standard library collections and typing utilities (`Any`, `Callable`, `Dict`, `List`, `Mapping`, `Optional`, `Sequence`, `Set`, `Tuple`)
|
|
31
|
+
- [ ] Implementation and interface modules may import specification framework decorators and types (`singleton_type`, `poly_type`, `data_type`, `variant`, `operation`, `override`) from `support.lib.framework`
|
|
32
|
+
- [ ] Implementation modules import lifecycle infrastructure (`LifecycleRegistry`, `get_default_registry`, `get_singleton`) from `support.lib.lifecycle` (and `Singleton` only when explicitly declared in `low/<name>_impl.pyi`); interface modules import typing, data type dependencies, and `Singleton` / lifecycle tier types matching `low/<name>.pyi`
|
|
33
|
+
- [ ] Domain data types and error classes are imported from interface modules or defined with exact structural parity
|
|
34
|
+
- [ ] Collaborator interfaces are imported directly using package-relative imports
|
|
35
|
+
- [ ] Implementation classes are separated by two blank lines, and class members are separated by one blank line
|
|
36
|
+
- [ ] Cross-package types omitted from read-only build dependencies are isolated in private dummy containers in interface modules (e.g. `class _Types: Foo = NewType("Foo", str); pkg = _Types`), and paired implementation modules alias the exact container from the interface module (`pkg = interface_module.pkg`) to preserve nominal identity
|
|
37
|
+
- [ ] Assembly modules (`*_asm.py`) import all constituent modules declared under `CONSTITUENTS:` in `low/<name>_asm.pyi`, using relative imports for sibling constituents and full package paths (e.g. `from <package_scope>.parts.<pkg>.lib import ...`) for cross-package constituents; bare partial 'parts' imports are strictly disallowed
|
|
38
|
+
|
|
39
|
+
## Contract realization and control flow
|
|
40
|
+
|
|
41
|
+
- [ ] In implementation modules, the library realization fulfills the operation sequencing and dataflow dependencies specified in `low/<name>.pyi`
|
|
42
|
+
- [ ] In implementation modules, contractual postconditions (`WHEN <condition>, MUST <consequent>`) in `low/<name>.pyi` are realized as concrete runtime conditionals (`if/else`)
|
|
43
|
+
- [ ] In implementation modules, unconditional postconditions (`MUST <outcome>.`) in `low/<name>.pyi` are realized as runtime assertions, state transformations, or return values
|
|
44
|
+
- [ ] Implementation methods and key conditional branches contain brief comments indicating how they correspond to the postconditions, invariants, or sequencing in `low/<name>.pyi`
|
|
45
|
+
- [ ] When addressing feedback from downstream verification, implementation code fulfills the behavioral contracts and resolves the runtime defect cited in the feedback rather than relying on static compilation alone; sibling methods, branches, and related operations across the module are audited for the same defect pattern before submitting, preventing multi-round ping-pong loops
|
|
46
|
+
- [ ] Caller assumptions under `ASSUMPTIONS:` in `low/<name>.pyi` are accepted axiomatically without defensive validation, exception branching, or error returns
|
|
47
|
+
- [ ] Unreachable code is pruned or restructured to eliminate dead logic; unreachable code is ignored for test coverage using `# pragma: no cover (assumption: <reason>)` only if it cannot be otherwise changed (such as defensive branches required by static type checking, runtime protocol conformance, or assertions protecting internal invariants guaranteed by caller assumptions)
|
|
48
|
+
- [ ] Implementation classes fulfill all inherited supertype contracts and postconditions transitively across the inheritance hierarchy, even when low-level specification stubs omit redundant docstring copy-down
|
|
49
|
+
- [ ] Top-level unbound postconditions declared under `__orphan__()` in `low/<name>.pyi` are realized by the appropriate module service logic
|
|
50
|
+
- [ ] Iterative sweeps and comprehensions process collections, dictionaries, and sequences according to contract requirements
|
|
51
|
+
- [ ] When specifications mandate deterministic ordering or tie-breaking (such as topological sorting or priority queueing where items have identical rank), implementation code uses explicit stable keys (such as ascending alphabetical or lexicographical order) matching low specifications
|
|
52
|
+
- [ ] Happy-path outputs construct and return concrete response records or values matching declared return types in `low/<name>.pyi`
|
|
53
|
+
- [ ] Return values, dataclass parameters, and collaborator method arguments typed as domain NewTypes are explicitly wrapped (e.g. `MyNewType(val)`) rather than passed as bare primitives (`str`, `int`, `float`)
|
|
54
|
+
- [ ] Wire-format type aliases using Python 3.12 syntax (`type WireType = ...`) declared in `low/<name>.pyi` are preserved and re-exported
|
|
55
|
+
- [ ] In interface modules, service protocols retain `...` stubs and dynamic control flow logic is omitted, except for data types extending polytypes which are concretely implemented
|
|
56
|
+
|
|
57
|
+
## Validation and error branching
|
|
58
|
+
|
|
59
|
+
- [ ] Missing required parameter checks are implemented where contracts specify missing parameter postconditions in implementation modules
|
|
60
|
+
- [ ] Default value fallbacks are applied where contracts specify default value postconditions in implementation modules
|
|
61
|
+
- [ ] Missing message diagnostic functions are called where contracts specify missing note postconditions in implementation modules
|
|
62
|
+
- [ ] Wire conversions are wrapped in `try/except ParameterConversionError` blocks where contracts specify parameter conversion postconditions in implementation modules
|
|
63
|
+
- [ ] Diagnostic failure responses are formatted using the exact error templates specified in `low/<name>.pyi` postconditions in implementation modules
|
|
64
|
+
- [ ] Custom exception classes realized with `@dataclass` or frozen dataclass semantics implement `def __str__(self) -> str: return self.message` (or call `Exception.__init__(self, message)`) so that `str(exc)` returns the intended human-readable message in test assertions
|
|
65
|
+
- [ ] Value objects realized with `@dataclass` or custom classes representing values, specifications, or identifiers (e.g. `Version`, `VersionRange`, `Label`) implement `def __str__(self) -> str` delegating directly to their canonical string representation or `format()` method so that `str(obj)` seamlessly coerces to the canonical string in string interpolations, logs, and assertions
|
|
66
|
+
- [ ] When contracts specify domain error exceptions (e.g. classes extending `ValueError` or `RuntimeError`), operations raise them with exact quoted messages, and coordinating services catch them to format responses
|
|
67
|
+
- [ ] Catching broad exceptions (such as `except Exception:`) without re-raising is prohibited; task runners, executors, and retry handlers that contractually reify caught exceptions into result records or error attributes (e.g. `_result.error = exc`, `NodeResult(error=exc)`) capture the exception instance, or mark boundary handlers with `# cleanroom: allow-broad-exception`
|
|
68
|
+
- [ ] Collaborator response failures are checked and propagated where contracts specify failure propagation postconditions in implementation modules
|
|
69
|
+
|
|
70
|
+
## State management and lifecycle integration
|
|
71
|
+
|
|
72
|
+
- [ ] Stateful singletons in implementation modules declare private instance attributes (`self._tools`, `self._storage`) providing concrete backing storage
|
|
73
|
+
- [ ] Modules register singletons via module-level `__initialize__(registry=None) -> None`; classes never define `__initialize__`; singleton instances initialize backing state via standard `__init__(self) -> None` or the optional inherited lifecycle post-instantiation hook `def initialize(self) -> None:` (invoked automatically by the lifecycle framework for self-registration with managers); uncontracted multi-phase initialization methods (such as ad-hoc `configure()` or `setup()` methods) on classes are prohibited
|
|
74
|
+
- [ ] Phase-level configuration (such as parameterizing session metadata before dependent singletons start) is performed through `enter_phase(phase, setup=...)` using contracted operations (e.g. `RoleConfig.set_role`); inventing uncontracted configuration methods to inject dependencies is prohibited
|
|
75
|
+
- [ ] Dependencies required across singleton operations are resolved on demand via `get_singleton(...)` or passed as contracted method arguments; inventing uncontracted configuration methods to inject dependencies is prohibited
|
|
76
|
+
- [ ] Unreachable defensive branches or assertions protecting internal implementation assumptions are ignored for test coverage using `# pragma: no cover (assumption: <reason>)` only if they cannot be otherwise changed or pruned
|
|
77
|
+
- [ ] In interface modules, service protocols remain purely abstract without instance attributes, backing storage, or mutators
|
|
78
|
+
- [ ] Mutator operations in implementation singletons update internal state collections while enforcing contracted type-level invariants (`INVARIANTS:`), and dynamically synchronize dependent internal tracking state (such as dynamic scheduling queues or lifecycle state mappings) upon structural mutations (such as removals) so that state queries remain synchronized
|
|
79
|
+
- [ ] Getter properties in implementation singletons expose defensive copies or read-only views (`dict(self._tools)`) of internal state
|
|
80
|
+
- [ ] Services in implementation modules resolve peer or ancestor singletons via `get_singleton(...)` on demand rather than caching stale instances in global variables
|
|
81
|
+
- [ ] In implementation modules, `__initialize__` is maintained under the auto-generated block delimiter (`# --- CLEANROOM AUTO-GENERATED: DO NOT EDIT ---`) and left untouched; interface modules omit `__initialize__`
|
|
82
|
+
- [ ] Assembly modules (`*_asm.py`) aggregate and initialize all constituent modules via `CONSTITUENTS` in `__initialize__(registry=None)`, delegating initialization to each constituent module
|
|
83
|
+
|
|
84
|
+
<!-- CLEANROOM METADATA
|
|
85
|
+
LAST_CLEANED: 2026-10-07T05:04:27Z
|
|
86
|
+
LAST_CHANGED: 2026-10-29T01:10:00Z
|
|
87
|
+
CHANGE: Specify that unreachable code is ignored for coverage only if it cannot be otherwise changed
|
|
88
|
+
CODE_HASH: 17ba67fd84f1
|
|
89
|
+
-->
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Guide: Writing Guides for LLM Readers
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
A guide is read by an LLM that produces an artifact satisfying the guide's constraints. This guide states how to write a guide an LLM can follow, and applies its own rules to itself. Every guide has two parts: a Summary that states the initial requirements, and checklist sections that state the fine-grained requirements.
|
|
6
|
+
|
|
7
|
+
The reader is an LLM consuming the guide through tool reads; it has only the current message and the artifact, and it takes every sentence literally. Every line must be actionable.
|
|
8
|
+
|
|
9
|
+
The Summary drives the initial write or edit in one or at most two concise paragraphs: it states the high-level subject and core constraints completely so the initial revision is accurate in substance, without detailing fine-grained checks that checklist sections verify. Its purpose is twofold: (a) preserve an already working artifact without unnecessary edits, and (b) when an artifact is missing or starting from a template, establish a minimal valid artifact that passes initial verification before advancing, delegating expanded coverage and fine-grained refinement to progressive checklist steps. Initial creation and bootstrapping instructions belong as comments directly inside templates rather than in the Summary; checklist sections verify that template instruction comments are deleted from the final artifact. Because linters run immediately upon advancing, structural problems are exposed early, keeping the Summary light and focused on core constraints rather than deep rule duplication.
|
|
10
|
+
|
|
11
|
+
A guide never triggers. The prompt asks for alignment or conformance with the guide and the other input files, and it drives the loop; the guide stakes constraints and requirements only. Directive verbs aimed at the reader ("ensure", "produce", "apply", "verify the checklist", "call advance") are prohibited; declarative constraints ("the module must", "X matches Y") are the rule. Guides and prompts never advise about tool arguments: they can refer to advance, but they cannot refer to tool arguments or the content of advance. Prompts state what the artifact is, never what it is not. Prompts never provide negative instructions, never speculate about other modules or unreadable files, and never instruct on editing mechanics or tool usage. Prompts state the target artifact. Environmental communication to the agent (guides, prompts, tool outputs, reminders, and errors) is declarative and impersonal, stating objective state, invariants, and constraints; second-person pronouns ("you", "your") are prohibited so the agent treats the environment as an execution runtime rather than a conversational partner. Conversely, synthetic assistant steps or injected reasoning designed to steer agent cognition employ the first-person perspective ("I", "let me"), matching the assistant's internal monologue for natural token continuation into tool calls. The ambiguous term "turn" is strictly prohibited across all guides, prompts, and specifications; "step" refers exclusively to a single prompt/tool interaction cycle, and "round" refers to a full Cleanroom role dispatch wave.
|
|
12
|
+
|
|
13
|
+
Every guide follows this structure:
|
|
14
|
+
|
|
15
|
+
- `# Guide: <title>`, then `## Summary`, then optional non-step sections (`## Verification failure`, `## Lint checks`), then `## <checklist sections>`.
|
|
16
|
+
- The first `##` heading is the Summary.
|
|
17
|
+
- An optional `## Verification failure` section defines failure-recovery rules and diagnostic-handling constraints delivered only upon verification failure; it is never delivered as a progression step.
|
|
18
|
+
- If the artifact has a linter, a `## Lint checks` section describes what is checked; it is never delivered as a progression step.
|
|
19
|
+
- The boundary is positional: the Summary runs to the next `##` heading; each checklist section runs to the next `##` heading or end of file.
|
|
20
|
+
- Checklist sections contain only `- [ ] <item>` lines.
|
|
21
|
+
- Meta notes in guides are expressed as single-paragraph blockquotes: `> META: "one paragraph of meta note."`. Meta notes provide context or rationale for human authors and tooling, and express information blockades (file and role isolation boundaries); they are filtered out by file readers when read by an LLM agent so the agent is never confused by blockade instructions that the completed system enforces mechanically.
|
|
22
|
+
- The guide reads coherently whole (Summary then sections in order) and sectioned (Summary first, then one section at a time).
|
|
23
|
+
|
|
24
|
+
> META: "Guides are written for LLM readers that take every sentence literally; meta notes provide guidance for human authors, tooling, and information blockades while remaining invisible to the agent during execution. For the Markdown template format used to structure initial templates with HTML comment directives and parameters, see design-docs/template_format.md."
|
|
25
|
+
|
|
26
|
+
## Guide structure
|
|
27
|
+
|
|
28
|
+
- [ ] File is `# Guide: <title>` → `## Summary` → optional non-step sections (`## Verification failure`, `## Lint checks`) → `## <section>` headings, in that order
|
|
29
|
+
- [ ] The first `##` heading is the Summary
|
|
30
|
+
- [ ] An optional section titled `## Verification failure` states instructions or restrictions that apply only when verification fails; it is never delivered as a progression step
|
|
31
|
+
- [ ] If the artifact has a linter, a section titled `## Lint checks` describes what the linter checks; it is never delivered as a progression step
|
|
32
|
+
- [ ] Meta notes are expressed as single-paragraph blockquotes starting with `> META: "one paragraph of meta note."`
|
|
33
|
+
- [ ] Meta notes contain guidance, rationale, or information blockades intended for human authors and meta-tools, never normative requirements or constraints for the agent (since agent readers filter out `> META:` paragraphs)
|
|
34
|
+
- [ ] Information blockades restricting access to other files or roles are expressed strictly as meta notes; direct blockade constraints in the guide are prohibited because the completed system enforces them mechanically, and direct statements confuse the agent
|
|
35
|
+
- [ ] Checklist sections contain only `- [ ] <item>` lines — no prose, no nested headings
|
|
36
|
+
- [ ] The guide reads coherently whole and sectioned
|
|
37
|
+
|
|
38
|
+
## Summary
|
|
39
|
+
|
|
40
|
+
- [ ] The Summary states the guide's subject declaratively: an alignment guide names the artifact and its source ("The module implements `low/<name>.md`"); a conformance guide names the artifact ("The artifact conforms to this guide")
|
|
41
|
+
- [ ] The Summary is concise (one or at most two paragraphs), stating complete high-level requirements so the initial write or edit is accurate in substance, while leaving fine-grained rules to checklist sections
|
|
42
|
+
- [ ] The Summary serves two purposes: (a) preserving an already working artifact without edits when contracts and verification pass, and (b) establishing a minimal valid artifact that passes initial verification when starting from scratch or a template, delegating expanded coverage to checklist steps
|
|
43
|
+
- [ ] File references and multi-node session targets use package-relative file alias relative paths (e.g. `high/<name>.md`, `grounding/<name>.pyi`, `lib/<name>.py`, `tests/<name>_test.py`) and never expose host repository filesystem paths
|
|
44
|
+
- [ ] Rules governing the editing process, tool usage, incremental editing strategy, or write permissions belong in the `## Summary` (which is visible before editing begins and throughout all steps in step mode); checklist items verify the artifact after changes are made and show up too late to control how editing is done; rules that apply specifically and exclusively to recovering from verification failure belong in `## Verification failure`
|
|
45
|
+
- [ ] Applicability restrictions and not-applicable conditions (e.g. only applying to implementation specs whose name ends in `_impl.md`) are never in the Summary; they belong in `## Lint checks`
|
|
46
|
+
- [ ] No directive framing — never "ensure", "produce", "transform" (the file pre-exists; the prompt triggers, the guide constrains)
|
|
47
|
+
- [ ] Environmental communication to the agent (guides, prompts, tool outputs, reminders) is declarative and impersonal, stating environmental facts and constraints without second-person pronouns ("you", "your")
|
|
48
|
+
- [ ] Injected reasoning text representing agent cognition uses the first-person perspective ("I", "let me") to match the assistant monologue and drive action continuation
|
|
49
|
+
- [ ] Build-critical requirements come first (BUILD entries, required structure) — nothing builds without them
|
|
50
|
+
- [ ] The guide's requirements are satisfiable from the guide alone: no reliance on the artifact's starting state — the file's existing content (a template, a prior version) is at most an efficiency boost, never the source of required structure
|
|
51
|
+
- [ ] No instruction to run or interpret verification; verification is transparent and the reader's only verification action is calling `advance`; guides and prompts never advise about tool arguments: they can refer to advance, but they cannot refer to tool arguments or the content of advance
|
|
52
|
+
- [ ] Prompts state what the artifact is, never what it is not: no negative instructions, no speculation about other modules, and no editing or tool advice
|
|
53
|
+
- [ ] No instruction to do what the reader cannot do — the reader's capabilities are fixed (file reads, edits, and advance; the search tool is never installed; no execution, no shell, no test runs); a capability the reader lacks is never stated as a requirement and never as a prohibition — the reader already knows it lacks it
|
|
54
|
+
- [ ] No reference to files the reader cannot read (other guides, HLS files, implementations); a label in the source material that names an unreadable file gets one sentence saying it carries no requirements; information blockades are expressed exclusively as meta notes rather than direct reader prohibitions that confuse the agent
|
|
55
|
+
- [ ] External domain knowledge and foreign formats (third-party APIs, foreign serialization formats, runtime identifiers) are excluded from guides; external boundaries are specified in dedicated external boundary specifications (`low/<name>_ext.md`)
|
|
56
|
+
- [ ] Templates provide initial creation and bootstrapping guidance through inline instruction comments; checklist sections verify that template instruction comments are deleted before final artifact completion
|
|
57
|
+
- [ ] Templates follow the Markdown template format in design-docs/template_format.md, using HTML comment directives and placeholder parameters that remain readable without bindings
|
|
58
|
+
- [ ] The Summary mentions templates at most once to describe initial bootstrapping ("When starting from a template, the template's inline instructions guide creating a minimal artifact...")
|
|
59
|
+
- [ ] No meta-commentary, no rationale, no examples — state the constraint
|
|
60
|
+
|
|
61
|
+
## Checklist sections
|
|
62
|
+
|
|
63
|
+
- [ ] Each item is one independently verifiable constraint on the artifact; no cross-item reasoning ("see above")
|
|
64
|
+
- [ ] Checklist items constrain the post-edit artifact state (what the artifact contains), never the editing process or tool mechanics (how editing is performed) — process, tool, and editing constraints belong in `## Summary`
|
|
65
|
+
- [ ] Items carry the precision: exact spellings, required forms, conformance checks — never style preferences the source already dictates
|
|
66
|
+
- [ ] Each item is checkable given the Summary, the section, and the artifact
|
|
67
|
+
- [ ] Sections are ordered fine-grain-first (layout, imports, types, contracts, pitfalls)
|
|
68
|
+
- [ ] File references in all sections use package-relative file alias relative paths and never expose host repository filesystem paths
|
|
69
|
+
- [ ] If the artifact has a linter, a `## Lint checks` section (with the exact title "Lint checks") describes what is checked
|
|
70
|
+
- [ ] All checklist items that can be deterministically verified by verifying the presence or absence of a specific string, marker, or token belong in `## Lint checks` (and are implemented by the artifact's linter), never in judgment-based content sections
|
|
71
|
+
- [ ] The `## Lint checks` section contains only linter-verified checks and applicability constraints (e.g., target spec must end in `_impl.md`) — no human judgment points
|
|
72
|
+
- [ ] A point only partly linter-verified is split: the linter-verified part goes in `## Lint checks`, the judgment part stays in its content section
|
|
73
|
+
|
|
74
|
+
## Step mode
|
|
75
|
+
|
|
76
|
+
- [ ] In step mode the reader sees the Summary and one section at a time; earlier sections are stubbed — each section is self-sufficient: a rule the section depends on appears in that section or in the Summary
|
|
77
|
+
- [ ] Checklist sections are delivered after edits are made and an advance is called: they cannot control how editing is done because they show up too late; all editing workflow and tool rules live in `## Summary`
|
|
78
|
+
- [ ] Since guide delivery does not advance to subsequent sections until verification passes, checklist items cannot help the reader resolve verification errors; rules that govern resolving verification failures belong in `## Verification failure`
|
|
79
|
+
- [ ] A rule with no document region (it constrains the whole artifact) lives in the Summary, never in a section
|
|
80
|
+
- [ ] All items in a section concern one step of producing the artifact; if the items split into two concerns, split the section
|
|
81
|
+
- [ ] If one item can undo another, they are one item stating both constraints, or two items in the same section with the clobbered rule first
|
|
82
|
+
- [ ] Sections are named after the document regions they govern, in document order
|
|
83
|
+
- [ ] A rule that applies to every instance in a region is stated once, generically ("every operation", "every alias")
|
|
84
|
+
|
|
85
|
+
## Size
|
|
86
|
+
|
|
87
|
+
- [ ] Whole guide under the read-size limit (20,000 bytes in this repo) so whole-guide mode reads it in one read
|
|
88
|
+
- [ ] Cut anything that does not change what the reader produces: restated rules, meta-commentary, duplicate examples
|
|
89
|
+
- [ ] Smaller is not automatically better; cutting an exception the reader needs is worse than a few extra lines
|
|
90
|
+
|
|
91
|
+
## Wording
|
|
92
|
+
|
|
93
|
+
- [ ] Headers and lists over tables; one fact per line; each line complete on its own
|
|
94
|
+
- [ ] Second-person pronouns ("you", "your") are prohibited in all agent-facing environmental messages (guides, prompts, tool outputs, reminders, errors); constraints and states are stated impersonally and declaratively
|
|
95
|
+
- [ ] First-person perspective ("I", "let me") is used when injecting synthetic assistant reasoning to simulate internal agent cognition and prime tool execution
|
|
96
|
+
- [ ] Standard terminology: the ambiguous term "turn" is strictly prohibited; "step" is used exclusively for single prompt/tool interaction cycles, and "round" is used exclusively for full Cleanroom role dispatch waves
|
|
97
|
+
- [ ] "must", "never", "only" — never "should consider", "ideally"
|
|
98
|
+
- [ ] Never state a rule as "X or Y" when the reader must choose; state the condition of the choice
|
|
99
|
+
- [ ] Say what is an error and what is merely discouraged; the reader treats both as prohibitions unless told otherwise
|
|
100
|
+
- [ ] State exceptions beside their rules; the reader over-generalizes prohibitions
|
|
101
|
+
- [ ] Distinguish REQUIRED structure ("must contain") from CONTENT rules; the reader deletes redundant-looking required structure unless told it is required
|
|
102
|
+
- [ ] Define terms once; never introduce synonyms for one concept
|
|
103
|
+
- [ ] State each rule once within a section; a section never relies on a rule stated only in an earlier section (step mode stubs it) — repeat the rule or state it in the Summary
|
|
104
|
+
|
|
105
|
+
## Examples
|
|
106
|
+
|
|
107
|
+
- [ ] One strong example per rule beats three similar ones
|
|
108
|
+
- [ ] Every example obeys the guide's own rules
|
|
109
|
+
- [ ] Anti-examples paired with their fixes
|
|
110
|
+
- [ ] Examples never come from the current problem under work: no type names, components, or phrases from the specs, code, or conversation being guided; every example is a clean synthetic one invented for the guide
|
|
111
|
+
|
|
112
|
+
## Self-check
|
|
113
|
+
|
|
114
|
+
- [ ] Truncation test: cut at any line; every line before the cut remains a complete fact
|
|
115
|
+
- [ ] Action test: an LLM can derive a constraint from each sentence
|
|
116
|
+
- [ ] Section test: given the Summary, one section, and the artifact, the reader can check that section's items
|
|
117
|
+
- [ ] One-read test: given the whole guide in one read, the reader produces the required structure and applies the rules
|
|
118
|
+
- [ ] No-trigger test: no sentence directs the reader to do something the prompt already drives ("ensure", "produce", "call advance")
|
|
119
|
+
- [ ] Capability test: every action the guide names is one the reader can perform with its tools — no test runs, no shell, no unreadable files
|
|
120
|
+
- [ ] Perspective test: all environmental communications to the agent are declarative and impersonal without second-person pronouns ("you", "your"); injected assistant reasoning uses the first-person perspective ("I", "let me")
|
|
121
|
+
- [ ] Path test: no host filesystem paths appear anywhere in the guide; only package-relative file alias relative paths appear (such as `high/<name>.md`, `grounding/<name>.pyi`, `lib/<name>.py`, `tests/<name>_test.py`)
|
|
122
|
+
- [ ] Linter test: if a linter exists for the artifact, a section titled `## Lint checks` lists all automated and applicability checks, and no applicability rules appear in the Summary
|
|
123
|
+
- [ ] Deterministic test: every check verifiable by verifying presence or absence of a specific string or token is listed in `## Lint checks`
|
|
124
|
+
|
|
125
|
+
## Common pitfalls
|
|
126
|
+
|
|
127
|
+
- [ ] Bloat — restated rules, meta-commentary, duplicate examples — cut each fact once
|
|
128
|
+
- [ ] Chunk-fragile structure — tables, header-dependent lines, "as above" — one fact per line; lists over tables
|
|
129
|
+
- [ ] Second-person environmental address — using "you" or "your" in guides, prompts, tool responses, or reminders instead of declarative, impersonal constraints; or failing to use first-person perspective when injecting assistant reasoning
|
|
130
|
+
- [ ] Ambiguity — "should", "can optionally" — "must", "never", "only"
|
|
131
|
+
- [ ] Buried rules — the load-bearing constraint after examples — front-load; examples after rules
|
|
132
|
+
- [ ] Exposing file paths — using host or repository filesystem paths (e.g. `specs/low/<name>.md` or `testing/parts/...`) instead of package-relative file alias relative paths (e.g. `high/<name>.md`, `grounding/<name>.pyi`)
|
|
133
|
+
- [ ] Applicability in Summary — stating not-applicable conditions or spec filters in the Summary instead of `## Lint checks`
|
|
134
|
+
- [ ] Mixed lint/judgment points — a point the linter half-checks left whole — split: the linter part in `## Lint checks`, the judgment part in its content section
|
|
135
|
+
- [ ] Deterministic checks outside Lint checks — placing string-presence or string-absence checks in content sections instead of `## Lint checks`
|
|
136
|
+
- [ ] Process rules in checklist — placing editing strategy, tool usage, or step-by-step modification rules in checklist sections instead of `## Summary` where they are visible before editing
|
|
137
|
+
- [ ] Failure recovery in Summary or checklist — placing verification-failure recovery rules (such as fail-tool escalation or diagnostic triage) in `## Summary` or checklist sections instead of `## Verification failure`
|
|
138
|
+
- [ ] Missing Lint checks section — omitting `## Lint checks` when a linter is present
|
|
139
|
+
- [ ] Implicit requirements — required structure shown only by example — say "must contain"; list the structure
|
|
140
|
+
- [ ] Over-general rules — a prohibition without its exception — state the exception beside the rule
|
|
141
|
+
- [ ] Rule-breaking examples — a snippet that violates the guide — every example must conform
|
|
142
|
+
- [ ] Context examples — a snippet lifted from surrounding code or specs — use synthetic examples that obey the guide's rules
|
|
143
|
+
- [ ] Triggering — a sentence that instructs the reader ("ensure the module...") — the guide constrains; the prompt triggers
|
|
144
|
+
- [ ] Checklist items helping with verification — attempting to use checklist sections to guide the reader through resolving verification errors; because guides do not advance until verification passes, checklist items cannot help the reader fix verification failures
|
|
145
|
+
- [ ] Capability noise — telling the reader to run or interpret checks it has no tool for, or stating what it cannot do — the reader's capabilities are fixed; mention only actions the reader can take
|
|
146
|
+
- [ ] Direct information blockades — stating information blockades or unreadable file prohibitions directly in guide text or checklist items instead of expressing them exclusively as meta notes (`> META: "..."`); the completed system enforces file isolation mechanically, and direct blockade statements confuse the agent
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Agent Part (`update_with_ai/parts/agent`)
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
The **agent** part establishes the foundational session abstractions, operational policies, virtualized file addressing, and target-level execution configurations governing autonomous AI agent interactions in Cleanroom.
|
|
6
|
+
|
|
7
|
+
Rather than exposing physical host paths and ambient machine environments directly to language model agents—which causes hallucinated paths, cross-environment drift, and context pollution—the agent part creates a secure, virtualized execution boundary. It defines the lifecycle scope for individual agent sessions, restricts file interactions through virtual file aliases with explicit read/write permission tiers, parses and extracts model configuration parameters, and models task prompts and node definitions for dependency-directed workflows.
|
|
8
|
+
|
|
9
|
+
## Key Components & Specifications
|
|
10
|
+
|
|
11
|
+
According to the high-level specifications in [`update_with_ai/parts/agent/high/`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high):
|
|
12
|
+
|
|
13
|
+
- [`session.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/session.md): Defines the canonical lifecycle tier identifying agent session boundaries beneath the system-wide application environment. It ensures that ephemeral conversation state, session configurations, and tool allocations do not leak across distinct agent runs.
|
|
14
|
+
- [`agent_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/agent_config.md): Formalizes system-level operational policies and execution limits for agent sessions, including conversation turn limits, trailing character limits for superseded arguments (`supersede arg keep`), follow-up tool call injection, progressive guide delivery (`step mode`), startup file inspection, and delta-based edit reporting.
|
|
15
|
+
- [`file_alias.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/file_alias.md): Decouples agent session file operations from physical filesystem paths. It provides the `FileAlias` abstraction distinguishing *bound files* (mapped to workspace files with an owning node, categorized as *read-only* or *read-write*) from *unbound files*. It provides the `AliasManager` which resolves relative string paths to file aliases and sanitizes agent-visible text by masking host filesystem paths.
|
|
16
|
+
- [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md): Unifies node-level execution configurations for an active session. It models `RoleConfig` (the active role, sequence of nodes being cleaned, and execution version counter) and `SessionConfig` (resolved read-only and read-write files, step-by-step guides, starter templates and template parameters, verification checks, blame targets, and incoming defect feedback).
|
|
17
|
+
- [`node_storage.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_storage.md): Extends DAG storage with target manifest metadata. It preserves target definitions, task prompts, and dependency relationships, and evaluates node dirtiness dynamically by comparing in-band source file metadata against dependency change timestamps.
|
|
18
|
+
|
|
19
|
+
## How It Is Used by Other Parts
|
|
20
|
+
|
|
21
|
+
The `agent` part is a central domain contract consumed across the entire Cleanroom ecosystem:
|
|
22
|
+
|
|
23
|
+
- **`control`**: Uses [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md), [`file_alias.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/file_alias.md), and [`node_storage.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_storage.md) to set active session roles, discover ready dirty tasks, synthesize task prompts with user-facing aliases, evaluate verification checks, and attribute defects back to culprit upstream nodes.
|
|
24
|
+
- **`sandbox`**: Relies on [`file_alias.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/file_alias.md) and [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md) to enforce read-only vs. read-write permissions during file reads and edits, deliver progressive guides, evaluate verification checks in `check_files`, and validate blame targets during `submit`, `fail`, or `blame`.
|
|
25
|
+
- **`workspace`**: Uses [`file_alias.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/file_alias.md) and [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md) to map declared bound files, scaffold initial project trees, populate starter templates, and synchronize files between isolated role workspaces and the canonical workspace.
|
|
26
|
+
- **`subagent`**: Uses [`session.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/session.md), [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md), and [`node_storage.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_storage.md) to configure session scopes and task instructions when dispatching roles to autonomous subagents.
|
|
27
|
+
- **`antigravity` & `dsh`**: Use [`session.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/session.md) and session config types to bind execution turns to isolated role environments in Google Antigravity and DeepSeek Harness.
|
|
28
|
+
- **`loop` & `openai`**: Use [`session.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/session.md), [`agent_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/agent_config.md), and [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md) to enforce conversational turn limits, assemble prompt messages, and manage driver execution.
|
|
29
|
+
- **`workspace_cli`**: Uses [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md) and [`file_alias.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/file_alias.md) to implement workspace CLI commands (`get-work`, `check-files`, `submit`, `blame`).
|
|
30
|
+
- **`uv`**: Implements [`node_config.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_config.md) from Python build targets and manifest definitions.
|
|
31
|
+
- **`metadata`**: Implements [`node_storage.md`](file:///Users/seanmcdirmid/projects/cleanroom/update_with_ai/parts/agent/high/node_storage.md) through source file in-band comment metadata.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# agent_config interface component
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
The agent_config interface component defines execution limits, interaction modes, and read policies governing agent sessions.
|
|
6
|
+
|
|
7
|
+
Autonomous agent workflows require explicit bounds on conversational depth, automated tool chaining, instructional delivery modes, and session initialization. Without centralized agent operational policies, individual drivers and execution environments risk unbound execution loops, inconsistent instruction pacing, and uncoordinated file reads. The agent_config interface component establishes a unified system service that exposes conversational turn limits, follow-up injection policies, step-by-step guidance modes, and startup file read rules.
|
|
8
|
+
|
|
9
|
+
**Out of scope:** The agent_config interface component does not manage API credentials, parse build manifests, or compute graph schedules; these are handled by other components.
|
|
10
|
+
|
|
11
|
+
## Types and Behavior
|
|
12
|
+
|
|
13
|
+
A system's *agent config* provides execution parameters for agent sessions.
|
|
14
|
+
|
|
15
|
+
A *conversation limit* bounds the number of model interaction turns permitted in an agent run. A *supersede arg keep* limit bounds the number of trailing characters of a superseded string argument retained as a recognizable hint, resolving from agent session configuration.
|
|
16
|
+
|
|
17
|
+
An agent config also provides operational policies governing how the agent behaves during an agent run.
|
|
18
|
+
|
|
19
|
+
The policies of an agent config are:
|
|
20
|
+
|
|
21
|
+
- A *follow-up injection* policy directing the agent to execute the follow-up tool calls that tool responses specify.
|
|
22
|
+
|
|
23
|
+
- A *step mode* policy permitting the agent to receive a guide progressively.
|
|
24
|
+
|
|
25
|
+
- A *startup read* policy directing the agent to inspect declared files at session start.
|
|
26
|
+
|
|
27
|
+
- A *delta output* policy directing editing tools to report the changes they make rather than complete file content.
|
|
28
|
+
|
|
29
|
+
<!-- CLEANROOM METADATA
|
|
30
|
+
LAST_CLEANED: 2026-10-15T17:42:46Z
|
|
31
|
+
LAST_CHANGED: 2026-10-11T01:39:02Z
|
|
32
|
+
CHANGE: Replace the fragment policy lead-in with declarative policy properties and canonicalize policy terminology
|
|
33
|
+
SPEC_QA_AUDIT: 2026-10-15T17:42:46Z
|
|
34
|
+
-->
|