phase-loop-runtime 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.
- phase_loop_runtime/__init__.py +20 -0
- phase_loop_runtime/_contract_docs/phase-loop/extraction-readiness.md +90 -0
- phase_loop_runtime/_contract_docs/phase-loop/granular-execution-policy.md +137 -0
- phase_loop_runtime/_contract_docs/phase-loop/harness-capability-matrix.md +510 -0
- phase_loop_runtime/_contract_docs/phase-loop/harness-skill-matrix.md +125 -0
- phase_loop_runtime/_contract_docs/phase-loop/harness-substrate-manifest.md +232 -0
- phase_loop_runtime/_contract_docs/phase-loop/pi-loop-control.md +247 -0
- phase_loop_runtime/_contract_docs/phase-loop/protocol.md +2759 -0
- phase_loop_runtime/_contract_docs/phase-loop/runtime-boundary.md +289 -0
- phase_loop_runtime/_contract_docs/phase-loop/spec-discovery-roots.md +47 -0
- phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-governed-pipeline.md +42 -0
- phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-portal-projection.md +34 -0
- phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-regenesis.md +29 -0
- phase_loop_runtime/_contract_docs/phase-loop/substrate-soak-report.md +32 -0
- phase_loop_runtime/_contract_docs/runtime/verification-evidence-contract.md +52 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/commands.txt +2 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-mixed-signals/mixed.json +5 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-provider-timeout/timeout-note.txt +2 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-redacted-summary/redacted-summary.json +6 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-small-sample/sample.json +7 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/edge.txt +2 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/borderline/borderline-threshold-edge/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-a.txt +1 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-b.txt +1 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-duplicate-png/shot-c.txt +1 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/claimed-results.json +5 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-missing-references/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-subtle-low-variance/metrics.json +9 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/findings.md +10 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-templated-prose/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/scores.json +4 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-fake/fake-uniform-scores/summary.txt +1 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/bundle-check.json +8 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-adoption-bundle/operator-note.txt +2 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/events-sample.jsonl +3 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-handoff-ledger/receipt.txt +1 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/evidence.json +13 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-runner-diff/summary.txt +2 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/matrix.json +9 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-test-matrix/notes.md +4 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/console-summary.txt +2 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/manifest.json +16 -0
- phase_loop_runtime/_test_fixtures/evidence-audit-calibration/known-real/real-ui-screenshot-standin/screenshot-standin.ppm +5 -0
- phase_loop_runtime/adoption_bundle.py +273 -0
- phase_loop_runtime/advisor_board/CONTRACTS.md +257 -0
- phase_loop_runtime/advisor_board/__init__.py +288 -0
- phase_loop_runtime/advisor_board/backing.py +137 -0
- phase_loop_runtime/advisor_board/backing_omnigent.py +498 -0
- phase_loop_runtime/advisor_board/config.py +225 -0
- phase_loop_runtime/advisor_board/events.py +115 -0
- phase_loop_runtime/advisor_board/fixtures/advisor-boards.example.toml +59 -0
- phase_loop_runtime/advisor_board/fixtures.py +91 -0
- phase_loop_runtime/advisor_board/harness_mapping.py +125 -0
- phase_loop_runtime/advisor_board/matrix.py +146 -0
- phase_loop_runtime/advisor_board/observability.py +481 -0
- phase_loop_runtime/advisor_board/presets.py +188 -0
- phase_loop_runtime/advisor_board/registries.py +309 -0
- phase_loop_runtime/advisor_board/resolver.py +253 -0
- phase_loop_runtime/advisor_board/schema.py +269 -0
- phase_loop_runtime/advisor_board/standin.py +166 -0
- phase_loop_runtime/advisor_board/validation.py +159 -0
- phase_loop_runtime/agent_runtime_provider.py +676 -0
- phase_loop_runtime/baml_modular.py +656 -0
- phase_loop_runtime/baml_src/dotfiles_adoption_manifest.baml +37 -0
- phase_loop_runtime/baml_src/dotfiles_c4_document.baml +14 -0
- phase_loop_runtime/baml_src/dotfiles_plan_manifest.baml +50 -0
- phase_loop_runtime/baml_src/dotfiles_runtime_projection.baml +16 -0
- phase_loop_runtime/baml_src/dotfiles_task_catalog.baml +20 -0
- phase_loop_runtime/baml_src/emit_phase_closeout.baml +86 -0
- phase_loop_runtime/baml_src/evaluate_suspected_fake_evidence.baml +36 -0
- phase_loop_runtime/baml_src/verification_evidence.baml +40 -0
- phase_loop_runtime/broker.py +181 -0
- phase_loop_runtime/build_bundle.py +294 -0
- phase_loop_runtime/capability_registry.py +835 -0
- phase_loop_runtime/classifier.py +87 -0
- phase_loop_runtime/claude_agent_view.py +625 -0
- phase_loop_runtime/claude_channel_sidecar.py +1086 -0
- phase_loop_runtime/cli.py +2599 -0
- phase_loop_runtime/closeout.py +865 -0
- phase_loop_runtime/closeout_classifier.py +120 -0
- phase_loop_runtime/closeout_evidence_audit.py +112 -0
- phase_loop_runtime/closeout_validation.py +144 -0
- phase_loop_runtime/closeout_validators.py +203 -0
- phase_loop_runtime/consiliency_gates.py +374 -0
- phase_loop_runtime/consiliency_ingest.py +399 -0
- phase_loop_runtime/consiliency_layout.py +176 -0
- phase_loop_runtime/consiliency_scaffold.py +305 -0
- phase_loop_runtime/cross_repo_channel.py +331 -0
- phase_loop_runtime/discovery.py +2368 -0
- phase_loop_runtime/dispatch_lock.py +167 -0
- phase_loop_runtime/doc_delta_validator.py +98 -0
- phase_loop_runtime/docs_audit.py +285 -0
- phase_loop_runtime/docs_freshness.py +468 -0
- phase_loop_runtime/docs_surfaces.py +150 -0
- phase_loop_runtime/dotfiles_profile_plugin.py +96 -0
- phase_loop_runtime/events.py +154 -0
- phase_loop_runtime/events_migration.py +96 -0
- phase_loop_runtime/evidence_audit.py +1082 -0
- phase_loop_runtime/evidence_audit_config.py +172 -0
- phase_loop_runtime/fleet_map.py +426 -0
- phase_loop_runtime/fleet_metrics.py +298 -0
- phase_loop_runtime/fleet_metrics_export.py +196 -0
- phase_loop_runtime/git_discipline.py +479 -0
- phase_loop_runtime/git_ops.py +122 -0
- phase_loop_runtime/git_topology.py +252 -0
- phase_loop_runtime/governed_bundle.py +137 -0
- phase_loop_runtime/governed_premerge.py +219 -0
- phase_loop_runtime/governed_review.py +264 -0
- phase_loop_runtime/handoff.py +932 -0
- phase_loop_runtime/handoff_path.py +14 -0
- phase_loop_runtime/injection.py +740 -0
- phase_loop_runtime/install_status.py +88 -0
- phase_loop_runtime/lane_scheduler.py +317 -0
- phase_loop_runtime/launcher.py +2760 -0
- phase_loop_runtime/lease_store.py +553 -0
- phase_loop_runtime/maintenance.py +401 -0
- phase_loop_runtime/migrate_handoffs.py +201 -0
- phase_loop_runtime/models.py +2144 -0
- phase_loop_runtime/observability.py +1290 -0
- phase_loop_runtime/panel_invoker.py +1638 -0
- phase_loop_runtime/phase_loop_drift_audit.py +388 -0
- phase_loop_runtime/phase_worktree_executor.py +433 -0
- phase_loop_runtime/pipeline_adapter/__init__.py +12 -0
- phase_loop_runtime/pipeline_adapter/branch_ops.py +274 -0
- phase_loop_runtime/pipeline_adapter/flag.py +55 -0
- phase_loop_runtime/pipeline_adapter/markers.py +13 -0
- phase_loop_runtime/pipeline_adapter/merge_policy.py +72 -0
- phase_loop_runtime/pipeline_adapter/ratification.py +100 -0
- phase_loop_runtime/pipeline_adapter/sibling_matcher.py +123 -0
- phase_loop_runtime/plan_ir.py +523 -0
- phase_loop_runtime/plan_manifest.py +415 -0
- phase_loop_runtime/planner_validation.py +176 -0
- phase_loop_runtime/profiles.py +462 -0
- phase_loop_runtime/prompts.py +365 -0
- phase_loop_runtime/provenance.py +165 -0
- phase_loop_runtime/publishing.py +339 -0
- phase_loop_runtime/py.typed +1 -0
- phase_loop_runtime/reconcile.py +1550 -0
- phase_loop_runtime/redaction.py +184 -0
- phase_loop_runtime/reflection_sync.py +293 -0
- phase_loop_runtime/release_guard.py +186 -0
- phase_loop_runtime/render.py +432 -0
- phase_loop_runtime/repo_validation.py +427 -0
- phase_loop_runtime/review_summary.py +150 -0
- phase_loop_runtime/roadmap_lint.py +425 -0
- phase_loop_runtime/route_log.py +59 -0
- phase_loop_runtime/route_policy/__init__.py +11 -0
- phase_loop_runtime/route_policy/fixtures/route_selection.golden.json +263 -0
- phase_loop_runtime/runner.py +8400 -0
- phase_loop_runtime/runtime_paths.py +225 -0
- phase_loop_runtime/runtime_projection.py +113 -0
- phase_loop_runtime/runtime_resources.py +36 -0
- phase_loop_runtime/schema_export.py +292 -0
- phase_loop_runtime/schemas/phase_loop_closeout.schema.json +366 -0
- phase_loop_runtime/skill_install.py +176 -0
- phase_loop_runtime/skill_inventory.py +662 -0
- phase_loop_runtime/skill_paths.py +42 -0
- phase_loop_runtime/skill_sources_plugin.py +37 -0
- phase_loop_runtime/skills_bundle/claude-advisor-board/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-advisor-board/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/claude-advisor-panel/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-advisor-panel/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/claude-execute-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-execute-detailed/SKILL.md +152 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/SKILL.md +745 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/allocate_worktree_name.sh +33 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/audit_lane_file_touches.py +197 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/state.py +274 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/team_teardown.sh +32 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/validate_plan_doc.py +642 -0
- phase_loop_runtime/skills_bundle/claude-execute-phase/scripts/verify_harness.sh +96 -0
- phase_loop_runtime/skills_bundle/claude-phase-loop/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-phase-loop/SKILL.md +115 -0
- phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/SKILL.md +439 -0
- phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/assets/review_prompt.md +19 -0
- phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
- phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/references/roadmap-template.md +193 -0
- phase_loop_runtime/skills_bundle/claude-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
- phase_loop_runtime/skills_bundle/claude-plan-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-plan-detailed/SKILL.md +334 -0
- phase_loop_runtime/skills_bundle/claude-plan-detailed/assets/review_prompt.md +25 -0
- phase_loop_runtime/skills_bundle/claude-plan-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-plan-phase/SKILL.md +776 -0
- phase_loop_runtime/skills_bundle/claude-plan-phase/assets/review_prompt.md +17 -0
- phase_loop_runtime/skills_bundle/claude-plan-phase/scripts/validate_plan_doc.py +1092 -0
- phase_loop_runtime/skills_bundle/claude-run-train/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-run-train/SKILL.md +75 -0
- phase_loop_runtime/skills_bundle/claude-skill-editor/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-skill-editor/SKILL.md +243 -0
- phase_loop_runtime/skills_bundle/claude-skill-editor/assets/editor_prompt.md +72 -0
- phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/SKILL.md +249 -0
- phase_loop_runtime/skills_bundle/claude-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
- phase_loop_runtime/skills_bundle/claude-task-contextualizer/README.md +1 -0
- phase_loop_runtime/skills_bundle/claude-task-contextualizer/SKILL.md +74 -0
- phase_loop_runtime/skills_bundle/claude-task-contextualizer/references/task-templates.md +103 -0
- phase_loop_runtime/skills_bundle/codex-advisor-board/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-advisor-board/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/codex-advisor-panel/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-advisor-panel/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/codex-execute-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-execute-detailed/SKILL.md +154 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/SKILL.md +231 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/allocate_worktree_name.sh +33 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/audit_lane_file_touches.py +197 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/state.py +274 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/team_teardown.sh +32 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/validate_plan_doc.py +642 -0
- phase_loop_runtime/skills_bundle/codex-execute-phase/scripts/verify_harness.sh +96 -0
- phase_loop_runtime/skills_bundle/codex-phase-loop/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-phase-loop/SKILL.md +248 -0
- phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/SKILL.md +150 -0
- phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/assets/review_prompt.md +19 -0
- phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
- phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/references/roadmap-template.md +193 -0
- phase_loop_runtime/skills_bundle/codex-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
- phase_loop_runtime/skills_bundle/codex-plan-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-plan-detailed/SKILL.md +119 -0
- phase_loop_runtime/skills_bundle/codex-plan-detailed/assets/review_prompt.md +25 -0
- phase_loop_runtime/skills_bundle/codex-plan-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-plan-phase/SKILL.md +307 -0
- phase_loop_runtime/skills_bundle/codex-plan-phase/assets/review_prompt.md +17 -0
- phase_loop_runtime/skills_bundle/codex-plan-phase/scripts/validate_plan_doc.py +1092 -0
- phase_loop_runtime/skills_bundle/codex-run-train/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-run-train/SKILL.md +75 -0
- phase_loop_runtime/skills_bundle/codex-skill-editor/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-skill-editor/SKILL.md +94 -0
- phase_loop_runtime/skills_bundle/codex-skill-editor/assets/editor_prompt.md +72 -0
- phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/SKILL.md +114 -0
- phase_loop_runtime/skills_bundle/codex-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
- phase_loop_runtime/skills_bundle/codex-task-contextualizer/README.md +1 -0
- phase_loop_runtime/skills_bundle/codex-task-contextualizer/SKILL.md +102 -0
- phase_loop_runtime/skills_bundle/codex-task-contextualizer/references/task-templates.md +103 -0
- phase_loop_runtime/skills_bundle/gemini-advisor-board/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-advisor-board/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/gemini-advisor-panel/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-advisor-panel/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/gemini-execute-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-execute-detailed/SKILL.md +144 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/SKILL.md +198 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/allocate_worktree_name.sh +33 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/audit_lane_file_touches.py +197 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/state.py +274 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/team_teardown.sh +32 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/validate_plan_doc.py +642 -0
- phase_loop_runtime/skills_bundle/gemini-execute-phase/scripts/verify_harness.sh +96 -0
- phase_loop_runtime/skills_bundle/gemini-phase-loop/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-phase-loop/SKILL.md +111 -0
- phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/SKILL.md +147 -0
- phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/assets/review_prompt.md +19 -0
- phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
- phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/references/roadmap-template.md +193 -0
- phase_loop_runtime/skills_bundle/gemini-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
- phase_loop_runtime/skills_bundle/gemini-plan-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-plan-detailed/SKILL.md +119 -0
- phase_loop_runtime/skills_bundle/gemini-plan-detailed/assets/review_prompt.md +25 -0
- phase_loop_runtime/skills_bundle/gemini-plan-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-plan-phase/SKILL.md +217 -0
- phase_loop_runtime/skills_bundle/gemini-plan-phase/assets/review_prompt.md +17 -0
- phase_loop_runtime/skills_bundle/gemini-plan-phase/scripts/validate_plan_doc.py +1092 -0
- phase_loop_runtime/skills_bundle/gemini-run-train/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-run-train/SKILL.md +75 -0
- phase_loop_runtime/skills_bundle/gemini-skill-editor/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-skill-editor/SKILL.md +87 -0
- phase_loop_runtime/skills_bundle/gemini-skill-editor/assets/editor_prompt.md +72 -0
- phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/SKILL.md +109 -0
- phase_loop_runtime/skills_bundle/gemini-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
- phase_loop_runtime/skills_bundle/gemini-task-contextualizer/README.md +1 -0
- phase_loop_runtime/skills_bundle/gemini-task-contextualizer/SKILL.md +98 -0
- phase_loop_runtime/skills_bundle/gemini-task-contextualizer/references/task-templates.md +103 -0
- phase_loop_runtime/skills_bundle/opencode-advisor-board/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-advisor-board/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/opencode-advisor-panel/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-advisor-panel/SKILL.md +38 -0
- phase_loop_runtime/skills_bundle/opencode-execute-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-execute-detailed/SKILL.md +144 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/SKILL.md +196 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/allocate_worktree_name.sh +33 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/audit_lane_file_touches.py +197 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/cleanup_lane_worktrees.sh +103 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/parent_tree_leakage_check.sh +125 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/post_merge_import_smoke.sh +62 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/pre_merge_destructiveness_check.sh +127 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/resolve_branch_from_sha.sh +51 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/state.py +274 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/sweep_stale_worktrees.sh +62 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/team_teardown.sh +32 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/validate_plan_doc.py +642 -0
- phase_loop_runtime/skills_bundle/opencode-execute-phase/scripts/verify_harness.sh +96 -0
- phase_loop_runtime/skills_bundle/opencode-phase-loop/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-phase-loop/SKILL.md +113 -0
- phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/SKILL.md +147 -0
- phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/assets/review_prompt.md +19 -0
- phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/parallelization-heuristics.md +111 -0
- phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/references/roadmap-template.md +193 -0
- phase_loop_runtime/skills_bundle/opencode-phase-roadmap-builder/scripts/validate_roadmap.py +32 -0
- phase_loop_runtime/skills_bundle/opencode-plan-detailed/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-plan-detailed/SKILL.md +119 -0
- phase_loop_runtime/skills_bundle/opencode-plan-detailed/assets/review_prompt.md +25 -0
- phase_loop_runtime/skills_bundle/opencode-plan-phase/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-plan-phase/SKILL.md +211 -0
- phase_loop_runtime/skills_bundle/opencode-plan-phase/assets/review_prompt.md +17 -0
- phase_loop_runtime/skills_bundle/opencode-plan-phase/scripts/validate_plan_doc.py +1092 -0
- phase_loop_runtime/skills_bundle/opencode-run-train/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-run-train/SKILL.md +75 -0
- phase_loop_runtime/skills_bundle/opencode-skill-editor/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-skill-editor/SKILL.md +87 -0
- phase_loop_runtime/skills_bundle/opencode-skill-editor/assets/editor_prompt.md +72 -0
- phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/SKILL.md +109 -0
- phase_loop_runtime/skills_bundle/opencode-skill-improvement-planner/assets/aggregator_prompt.md +79 -0
- phase_loop_runtime/skills_bundle/opencode-task-contextualizer/README.md +1 -0
- phase_loop_runtime/skills_bundle/opencode-task-contextualizer/SKILL.md +98 -0
- phase_loop_runtime/skills_bundle/opencode-task-contextualizer/references/task-templates.md +103 -0
- phase_loop_runtime/state.py +156 -0
- phase_loop_runtime/state_degradation.py +136 -0
- phase_loop_runtime/state_ops.py +676 -0
- phase_loop_runtime/train_ledger.py +215 -0
- phase_loop_runtime/train_roadmap.py +339 -0
- phase_loop_runtime/train_runner.py +1197 -0
- phase_loop_runtime/verification_evidence.py +650 -0
- phase_loop_runtime/verification_evidence_validator.py +75 -0
- phase_loop_runtime/visual_evidence_validator.py +36 -0
- phase_loop_runtime/worker_pool.py +123 -0
- phase_loop_runtime/worktree_index.py +270 -0
- phase_loop_runtime-0.2.0.data/data/share/phase-loop-runtime/protocol/protocol.md +2475 -0
- phase_loop_runtime-0.2.0.dist-info/METADATA +106 -0
- phase_loop_runtime-0.2.0.dist-info/RECORD +370 -0
- phase_loop_runtime-0.2.0.dist-info/WHEEL +5 -0
- phase_loop_runtime-0.2.0.dist-info/entry_points.txt +9 -0
- phase_loop_runtime-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# Phase-Loop Runtime Boundary
|
|
2
|
+
|
|
3
|
+
This document defines the stable public interface for the phase-loop runtime. Components not listed here are considered internal and subject to change without notice.
|
|
4
|
+
|
|
5
|
+
Path ownership for the dotfiles-hosted harness substrate is recorded in
|
|
6
|
+
`docs/phase-loop/harness-substrate-manifest.md`. This document defines the
|
|
7
|
+
public runtime contract; the substrate manifest defines which dotfiles paths
|
|
8
|
+
downstream repositories may cite.
|
|
9
|
+
IF-0-SUBSTRATE-1 keeps that citation surface limited to runtime code, CLI
|
|
10
|
+
wrappers, bridge skills, shared runner skills, protocol docs, fixtures, tests,
|
|
11
|
+
scripts, and canonical `.phase-loop/**` state.
|
|
12
|
+
The public skill namespace contract is recorded in
|
|
13
|
+
`docs/phase-loop/harness-skill-matrix.md`; it freezes harness workflow names,
|
|
14
|
+
Pi Agent role-style exceptions, direct route compatibility, and the
|
|
15
|
+
governed-pipeline `.pipeline/skills/**` boundary.
|
|
16
|
+
|
|
17
|
+
## CLI Interface
|
|
18
|
+
|
|
19
|
+
The primary entrypoint is `phase-loop` (aliased as `codex-phase-loop`).
|
|
20
|
+
|
|
21
|
+
### Commands
|
|
22
|
+
|
|
23
|
+
- `run`: Start or continue phase execution.
|
|
24
|
+
- `resume`: Resume the current phase after a non-terminal exit or blocker.
|
|
25
|
+
- `status`: Show the current phase and loop status.
|
|
26
|
+
- `dry-run`: Parse the roadmap and current plan without executing work.
|
|
27
|
+
- `maintain-skills`: Analyze and propose improvements to harness-local skills based on execution reflections.
|
|
28
|
+
- `sync-skills`: Audit or repair harness-local bridge skills for manual reentry.
|
|
29
|
+
(DECOUPLE: provided by the dotfiles-profile plugin — see the profile-command
|
|
30
|
+
note below — not by the generic runtime.)
|
|
31
|
+
- `state`: Inspect the current durable state.
|
|
32
|
+
- `handoff`: Generate a TUI handoff artifact for the current state.
|
|
33
|
+
- `archive-state`: Move the current state to an archive directory.
|
|
34
|
+
- `monitor`: Poll the runtime state and run notification commands on status changes.
|
|
35
|
+
- `version`: Print the installed phase-loop version. The top-level
|
|
36
|
+
`--version` flag reports the same public version string.
|
|
37
|
+
- `execute <phase>`: Direct bridge invocation for external runners. Supports
|
|
38
|
+
`--bundle <phase-source-bundle.v1>`, `--output <phase_loop_closeout.v1>`,
|
|
39
|
+
and `--mode execute|repair|review`. Unsupported modes and invalid bridge
|
|
40
|
+
inputs are typed non-human contract blockers.
|
|
41
|
+
|
|
42
|
+
#### Profile-command plugin seam (DECOUPLE)
|
|
43
|
+
|
|
44
|
+
The dotfiles-domain commands `adoption-bundle`, `sync-skills`, `build-bundle`, and
|
|
45
|
+
`hotfix` are NOT part of the generic runtime surface. They are registered only when
|
|
46
|
+
a profile plugin is loaded, via the `phase_loop_runtime.profile_commands`
|
|
47
|
+
entry-point group (declared by a profile distribution) or the
|
|
48
|
+
`PHASE_LOOP_PROFILE_PLUGINS` opt-in (a comma-separated list of `module:callable`
|
|
49
|
+
specs). A clean wheel install with no profile plugin exposes none of them; the
|
|
50
|
+
in-tree dotfiles profile is `phase_loop_runtime.dotfiles_profile_plugin`. Profiles
|
|
51
|
+
likewise contribute skill source roots via the `phase_loop_runtime.skill_sources`
|
|
52
|
+
group. This is the seam validated by the DECOUPLE Gate-A clean-room harness.
|
|
53
|
+
|
|
54
|
+
### Core Flags
|
|
55
|
+
|
|
56
|
+
- `--repo`: Path to the repository (default: `.`).
|
|
57
|
+
- `--roadmap`: Path to the roadmap file.
|
|
58
|
+
- `--phase`: Target phase alias.
|
|
59
|
+
- `--json`: Emit machine-readable JSON output.
|
|
60
|
+
- `--dry-run`: Enable dry-run mode.
|
|
61
|
+
|
|
62
|
+
### External-Runner Invocation Contract
|
|
63
|
+
|
|
64
|
+
This is the stable contract an external orchestrator (e.g. governed-pipeline)
|
|
65
|
+
binds to when it delegates a phase to the phase-loop backend. The entrypoint
|
|
66
|
+
name, the bridge subcommand, its argument shape, and the in/out schemas are a
|
|
67
|
+
stability-guaranteed surface; changes are versioned, not silent.
|
|
68
|
+
|
|
69
|
+
- **Entrypoint:** the console script `phase-loop` (legacy alias
|
|
70
|
+
`codex-phase-loop`). There is no `dotfiles` command — the runtime ships
|
|
71
|
+
`phase-loop`/`codex-phase-loop` only. Callers SHOULD resolve the entrypoint
|
|
72
|
+
configurably (a documented default of `phase-loop`, overridable via an env var
|
|
73
|
+
such as `PHASE_LOOP_CLI`) rather than hardcoding a command name, so the
|
|
74
|
+
binding survives non-PATH/venv installs, pinned versions, and renames. Do not
|
|
75
|
+
invent a repo-named (`dotfiles`) command.
|
|
76
|
+
- **Bridge command:**
|
|
77
|
+
`phase-loop execute <phase> --bundle <phase-source-bundle.v1> --output <path> [--mode execute|repair|review]`.
|
|
78
|
+
- **Input:** a validated `phase-source-bundle.v1` artifact (`--bundle`). In
|
|
79
|
+
`pipeline_required` mode the bridge fails closed unless the bundle and its
|
|
80
|
+
identity/freshness inputs validate together (see Operating Modes).
|
|
81
|
+
- **Output:** exactly one `phase_loop_closeout.v1` JSON file written to
|
|
82
|
+
`--output`, plus a typed exit code (see Exit Codes). The closeout is the
|
|
83
|
+
structured result; callers read it rather than parsing the event ledger.
|
|
84
|
+
- **Capability / version negotiation:** callers gate on `phase-loop --version`
|
|
85
|
+
(top-level `--version` reports the public version string) against a documented
|
|
86
|
+
version floor before invoking; when the entrypoint is absent or below the
|
|
87
|
+
floor, the caller degrades gracefully (e.g. artifact-only ingestion) instead
|
|
88
|
+
of failing the run.
|
|
89
|
+
|
|
90
|
+
## Operating Modes
|
|
91
|
+
|
|
92
|
+
Standalone phase-loop use is the default local operator path. `run`, `resume`,
|
|
93
|
+
`status`, `dry-run`, and manual `codex-plan-phase` / `codex-execute-phase`
|
|
94
|
+
workflows remain valid without governed-pipeline, `.pipeline/**`, Portal,
|
|
95
|
+
Greenfield, a source bundle, credentials, Host bootstrap, Shell config, shell
|
|
96
|
+
profile sourcing, SSH setup, MCP gateway setup, generic 1Password setup,
|
|
97
|
+
provider-supplied payloads, or local environment contents. `.phase-loop/` is the
|
|
98
|
+
canonical runtime state surface; `.codex/phase-loop/` is a legacy read fallback
|
|
99
|
+
only when canonical state is absent.
|
|
100
|
+
|
|
101
|
+
`pipeline_optional` runs may consume Pipeline source-bundle metadata when an
|
|
102
|
+
external orchestrator supplies it, but missing Pipeline metadata does not make
|
|
103
|
+
a legacy standalone phase plan invalid.
|
|
104
|
+
|
|
105
|
+
`pipeline_required` direct bridge invocation must fail closed before execution
|
|
106
|
+
unless these inputs validate together: bundle path, bundle SHA-256,
|
|
107
|
+
Pipeline phase id or alias, roadmap identity, protected-source entries,
|
|
108
|
+
protected-source file hashes, and source-bundle freshness. Governed Pipeline
|
|
109
|
+
owns adoption, source-bundle emission, canonical refresh, replan, closeout
|
|
110
|
+
ingest, Greenfield reduction, and Portal projection. Governed-pipeline owns
|
|
111
|
+
canonical source-truth refresh, source-bundle emission,
|
|
112
|
+
protected-source freshness, scheduling, closeout ingest, Greenfield reduction,
|
|
113
|
+
and Portal projection; dotfiles consumes the supplied bundle and emits redacted
|
|
114
|
+
closeout metadata.
|
|
115
|
+
Governed-pipeline also owns canonical spec adoption, archive manifests,
|
|
116
|
+
managed mirror manifests, mirror writes, source-truth reconciliation, canonical
|
|
117
|
+
refresh, replan, and preflight block decisions. Dotfiles may echo validated
|
|
118
|
+
metadata-only adoption roles in closeout, but it does not decide canonical
|
|
119
|
+
adoption, archive membership, mirror refresh, or unmanaged spec promotion.
|
|
120
|
+
|
|
121
|
+
Standalone dotfiles discovery treats root `specs/**` as the default
|
|
122
|
+
human-visible future-spec intake root when no phase plan, source bundle, or
|
|
123
|
+
repo-local config overrides it. Legacy or project-specific seed roots such as
|
|
124
|
+
`Specs/**` are explicit input roots only, not automatic future-spec storage
|
|
125
|
+
roots. See `docs/phase-loop/spec-discovery-roots.md`.
|
|
126
|
+
|
|
127
|
+
## Python API
|
|
128
|
+
|
|
129
|
+
The following modules under `phase_loop_runtime.*` are considered public:
|
|
130
|
+
|
|
131
|
+
- `phase_loop_runtime.cli`: CLI entrypoint and parser definition.
|
|
132
|
+
- `phase_loop_runtime.discovery`: Roadmap and repository resolution.
|
|
133
|
+
- `phase_loop_runtime.handoff`: TUI handoff generation and metadata.
|
|
134
|
+
- `phase_loop_runtime.models`: Core data models, schemas, and literals.
|
|
135
|
+
- `phase_loop_runtime.maintenance`: Skill maintenance and improvement logic.
|
|
136
|
+
- `phase_loop_runtime.observability`: Notification and monitoring utilities.
|
|
137
|
+
- `phase_loop_runtime.profiles`: Model and effort profile definitions.
|
|
138
|
+
- `phase_loop_runtime.reconcile`: State and roadmap reconciliation.
|
|
139
|
+
- `phase_loop_runtime.render`: Text and JSON rendering for CLI output.
|
|
140
|
+
- `phase_loop_runtime.runtime_paths`: Canonical `.phase-loop/` path helpers and legacy
|
|
141
|
+
`.codex/phase-loop/` read-fallback helpers.
|
|
142
|
+
- `phase_loop_runtime.runner`: The main loop execution engine.
|
|
143
|
+
- `phase_loop_runtime.state_ops`: State inspection and archiving operations.
|
|
144
|
+
- `phase_loop_runtime.state`: Durable state persistence (JSON).
|
|
145
|
+
|
|
146
|
+
## Artifacts and Paths
|
|
147
|
+
|
|
148
|
+
- `.phase-loop/`: Canonical runtime directory.
|
|
149
|
+
- `.phase-loop/state.json`: Current loop state.
|
|
150
|
+
- `.phase-loop/events.jsonl`: Append-only event ledger.
|
|
151
|
+
- `.phase-loop/runs/<run-id>/`: Artifacts for a specific run.
|
|
152
|
+
- `.codex/phase-loop/`: Legacy compatibility root. It may be read only when
|
|
153
|
+
canonical `.phase-loop/` state is absent; new writes target `.phase-loop/`.
|
|
154
|
+
- `plans/phase-plan-*.md`: Phase-specific execution plans.
|
|
155
|
+
- `specs/phase-plans-*.md`: Multi-phase roadmaps.
|
|
156
|
+
- `specs/**`: Standalone future-spec discovery and advisory intake root unless
|
|
157
|
+
a phase plan, source bundle, or repo-local config overrides it.
|
|
158
|
+
- `Specs/**`: Legacy or project-specific seed input root only when explicitly
|
|
159
|
+
named by a phase plan, source bundle, or repo-local config.
|
|
160
|
+
|
|
161
|
+
## Scheduler-Owned Lane Inputs
|
|
162
|
+
|
|
163
|
+
The runtime may consume scheduler-owned lane assignment metadata, but does not
|
|
164
|
+
own scheduling, runtime ledger policy, worktree allocation, merge reduction, or
|
|
165
|
+
authority digests. The accepted assignment surface is lane id, wave id,
|
|
166
|
+
worktree path, base SHA, isolation mode, owned files, read-only refs, harness
|
|
167
|
+
route, model, effort, and fallback reason. Greenfield authority refs and
|
|
168
|
+
governed-pipeline scheduling data remain external inputs, not dotfiles-owned
|
|
169
|
+
runtime authority.
|
|
170
|
+
|
|
171
|
+
`--lane-scheduler concurrent` launches scheduler-approved ready waves only
|
|
172
|
+
when every writer is `parallel_safe`, writable ownership is disjoint, reducer
|
|
173
|
+
lanes are excluded, and each writer has a `git_worktree` assignment at the
|
|
174
|
+
current base SHA. `--lane-scheduler serialized` and the default coarse phase
|
|
175
|
+
path remain compatibility modes and may run on the main worktree without
|
|
176
|
+
assignment metadata.
|
|
177
|
+
|
|
178
|
+
Closeout metadata may report lane identity, wave identity, worktree identity,
|
|
179
|
+
verification status, changed paths, source-truth impact categories, advisory
|
|
180
|
+
canonical-refresh reason codes, source-bundle identity, protected-source roles,
|
|
181
|
+
and redacted evidence refs. Evidence refs are artifact paths and digests only;
|
|
182
|
+
raw spec bodies, raw diffs, raw transcripts, credential material, private
|
|
183
|
+
files, local environment contents, and provider tokens are outside the public
|
|
184
|
+
runtime contract.
|
|
185
|
+
|
|
186
|
+
## Bridge Fixture Boundary
|
|
187
|
+
|
|
188
|
+
Dotfiles owns the native v1 bridge fixtures at
|
|
189
|
+
`vendor/phase-loop-runtime/tests/fixtures/phase_loop_pipeline_bridge/**`. These fixtures are
|
|
190
|
+
metadata-only examples for `phase_loop_closeout.v1` outcomes, including
|
|
191
|
+
complete, blocked, stale source bundle, failed verification, human-required,
|
|
192
|
+
malformed, standalone-no-bundle, and canonical-refresh-recommended cases.
|
|
193
|
+
Native fixture JSON uses nested `automation`, `artifacts`, `verification`,
|
|
194
|
+
`blocker`, `source_bundle`, and `source_truth_impact` objects and does not
|
|
195
|
+
include deprecated root-level v5 automation aliases.
|
|
196
|
+
DFADOPTHINTS fixtures cover standalone unmanaged spec hints,
|
|
197
|
+
pipeline-required adoption roles, managed mirror specs, archive manifests,
|
|
198
|
+
canonical refresh recommendations, and malformed redaction rejection.
|
|
199
|
+
|
|
200
|
+
Governed-pipeline may mirror those fixtures under the downstream mirror location
|
|
201
|
+
`packages/pipeline-runtime/test/fixtures/phase-loop-bridge/` for its own
|
|
202
|
+
ingest tests. That mirror path is a downstream consumer and not a dotfiles write target.
|
|
203
|
+
Governed-pipeline owns mirror updates, closeout ingest, canonical refresh,
|
|
204
|
+
replan, and preflight block decisions; those decisions are governed-pipeline-owned.
|
|
205
|
+
|
|
206
|
+
DFTRUTHSOAK is the final source-truth reconciliation soak for this dotfiles
|
|
207
|
+
runtime boundary. Its evidence surface is local and metadata-only: standalone
|
|
208
|
+
closeout, pipeline-required closeout, stale-input blockers, source-truth
|
|
209
|
+
advisory hints, bridge fixtures, and downstream mirror refs. Portal-facing
|
|
210
|
+
evidence remains governed-pipeline projection metadata, not Portal lifecycle,
|
|
211
|
+
database, or contract writes from dotfiles. Greenfield-facing evidence remains
|
|
212
|
+
path and digest authority refs mediated by governed-pipeline, not Greenfield
|
|
213
|
+
reducer or authority-file writes from dotfiles.
|
|
214
|
+
|
|
215
|
+
## Skill and Prompt Guardrails
|
|
216
|
+
|
|
217
|
+
Operator skills and generated prompts must preserve standalone dotfiles use:
|
|
218
|
+
planning, execution, bridge, and shared CLI runner workflows remain valid
|
|
219
|
+
without governed-pipeline, Portal, Greenfield, `.pipeline/**`, or a source
|
|
220
|
+
bundle. Pipeline metadata is additive and may be copied into plan frontmatter
|
|
221
|
+
only from a validated source bundle or explicit `pipeline_required` run
|
|
222
|
+
context.
|
|
223
|
+
Harness workflow skill names are governed by
|
|
224
|
+
`docs/phase-loop/harness-skill-matrix.md`. That matrix is the public contract
|
|
225
|
+
for `<harness>-<workflow>` skill names, the Pi Agent role-style exceptions, and
|
|
226
|
+
compatibility for direct Codex, Gemini, OpenCode, and Claude Code `claude -p`
|
|
227
|
+
routes.
|
|
228
|
+
Collaborator consumption of the runtime and harness workflow skill packs is
|
|
229
|
+
documented in `docs/phase-loop/collaborator-bootstrap.md`. That document is the
|
|
230
|
+
install citation surface for downstream repos; it does not expand the runtime
|
|
231
|
+
boundary to host bootstrap, owner dotfiles, personal credentials, terminal
|
|
232
|
+
state, or direct writes to governed-pipeline, Portal, Greenfield, ReGenesis, or
|
|
233
|
+
`.pipeline/**`.
|
|
234
|
+
|
|
235
|
+
Portal and Greenfield examples are governed-pipeline-mediated boundaries:
|
|
236
|
+
Portal projection, governed-pipeline closeout ingest, and Greenfield metadata-only authority refs are not direct dotfiles write targets. Skills and
|
|
237
|
+
prompts must forbid inferred reads or writes to `.pipeline/**`,
|
|
238
|
+
governed-pipeline specs, Portal contracts, Greenfield authority files, private
|
|
239
|
+
evidence, raw data, raw source evidence, credentials, provider-supplied data, and legacy `.codex/phase-loop/` state unless the active plan and source bundle explicitly
|
|
240
|
+
own the exact path or glob.
|
|
241
|
+
|
|
242
|
+
DFPARSOAK is the release-gate exercise of this boundary. Its metadata-only
|
|
243
|
+
`GFPARSOAK` and `GPPARSOAK` inputs cite repo-relative receipt paths and sha256
|
|
244
|
+
digests only. Its local scheduler-owned git-worktree wave records Pi Agent,
|
|
245
|
+
Claude Code CLI, Codex, and Gemini route metadata while keeping redacted
|
|
246
|
+
evidence as handles or hashes and preserving no sibling-repo mutation.
|
|
247
|
+
|
|
248
|
+
## Exit Codes
|
|
249
|
+
|
|
250
|
+
- `0`: Success (or completion in `run`/`resume`).
|
|
251
|
+
- `1`: General failure or blocked status.
|
|
252
|
+
- `2`: Ambiguous roadmap selection (requires human intervention).
|
|
253
|
+
|
|
254
|
+
## Completeness for Extraction
|
|
255
|
+
|
|
256
|
+
This inventory represents the full set of public interfaces required for the vendored package `phase-loop-runtime` to operate as a future standalone repository if publication is needed later. Governed-pipeline and other downstream consumers may use the documented CLI, schema, fixture, and state surfaces through the vendored package. Any tool or service consuming phase-loop should limit its integration to these documented surfaces.
|
|
257
|
+
The harness substrate manifest separates those public surfaces from broader
|
|
258
|
+
dotfiles environment normalization such as host bootstrap, shell config,
|
|
259
|
+
terminal config, SSH, generic 1Password setup, MCP gateway setup, and unrelated
|
|
260
|
+
editor config.
|
|
261
|
+
DFFAKESMOKE substrate receipt fields for downstream Pipeline consumption are
|
|
262
|
+
documented in `docs/phase-loop/dffakesmoke-substrate-receipt.md`.
|
|
263
|
+
|
|
264
|
+
The standalone identity must preserve the Python import package `phase_loop_runtime`,
|
|
265
|
+
the neutral `phase-loop` command, and the backward-compatible `codex-phase-loop`
|
|
266
|
+
alias. `phase-loop` and `codex-phase-loop` remain separate entrypoints over the
|
|
267
|
+
same parser; dotfiles bootstrap installs the vendored package in editable mode.
|
|
268
|
+
|
|
269
|
+
Package-like use of the public modules, parser construction, status rendering,
|
|
270
|
+
direct bridge diagnostics, and runtime path helpers must work from
|
|
271
|
+
`vendor/phase-loop-runtime` without shell profile sourcing,
|
|
272
|
+
1Password, Vercel, Supabase, or other dotfiles-specific credentials, and
|
|
273
|
+
without ambient `~/.codex` state.
|
|
274
|
+
|
|
275
|
+
- **Contract Coverage**: 100% of the `phase_loop_closeout.v1` schema is supported.
|
|
276
|
+
- **CLI Parity**: The CLI provides full lifecycle management (`run`,
|
|
277
|
+
`resume`, `status`, `dry-run`, `maintain-skills`, `sync-skills`, `state`,
|
|
278
|
+
`handoff`, `archive-state`, `monitor`, and `version`) plus deterministic
|
|
279
|
+
direct bridge invocation through `execute <phase>`.
|
|
280
|
+
- **Schema Stability**: All machine-readable artifacts (JSON/JSONL) follow the frozen protocol.
|
|
281
|
+
|
|
282
|
+
## DFPARSOAK Integrated Soak
|
|
283
|
+
|
|
284
|
+
DFPARSOAK publishes the final integrated substrate receipt at
|
|
285
|
+
`docs/phase-loop/dfparsoak-receipt.md` and the local execution runbook at
|
|
286
|
+
`docs/phase-loop/dfparsoak-runbook.md`. Those artifacts freeze the dotfiles
|
|
287
|
+
side of lane, wave, worktree, harness route, model, effort, fallback, and
|
|
288
|
+
redacted evidence metadata while keeping governed-pipeline as scheduler and
|
|
289
|
+
closeout-ingest authority.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Phase-Loop Spec Discovery Roots
|
|
2
|
+
|
|
3
|
+
Standalone dotfiles phase-loop runs use root `specs/**` as the default
|
|
4
|
+
human-visible future-spec discovery root when no phase plan, source bundle, or
|
|
5
|
+
repo-local config names a different root.
|
|
6
|
+
|
|
7
|
+
Legacy or project-specific seed roots such as `Specs/**` are explicit input
|
|
8
|
+
roots only. They can be cited by a phase plan or validated source bundle as
|
|
9
|
+
seed material, but they are not automatic storage roots for future accepted
|
|
10
|
+
specs. Accepted future specs should normalize toward root `specs/**` for later
|
|
11
|
+
governed-pipeline intake.
|
|
12
|
+
|
|
13
|
+
Governed-pipeline owns canonical spec adoption, `.pipeline/specs/**`,
|
|
14
|
+
archive manifests, managed mirror manifests, mirror writes, source-bundle
|
|
15
|
+
emission, canonical refresh, source-truth reconciliation, replan, and preflight
|
|
16
|
+
block decisions; those decisions are governed-pipeline-owned. Dotfiles may consume validated metadata and echo
|
|
17
|
+
metadata-only adoption roles such as `active_canonical_spec`,
|
|
18
|
+
`managed_mirror_file`, `mirror_manifest`, `archive_manifest`, and
|
|
19
|
+
`unmanaged_spec_input`, but it does not decide whether a spec is canonical,
|
|
20
|
+
archived, mirrored, refreshed, or blocked.
|
|
21
|
+
|
|
22
|
+
Closeout and docs evidence stays metadata-only. Do not include raw spec bodies,
|
|
23
|
+
raw diffs, provider payloads, credentials, local environment values, private
|
|
24
|
+
evidence, or absolute private paths as runtime evidence.
|
|
25
|
+
|
|
26
|
+
Closeout may cite repo-relative spec roots, changed-path categories, SHA-256
|
|
27
|
+
hashes, source-bundle identity, protected-source roles, advisory reason codes,
|
|
28
|
+
and evidence-ref paths. Standalone root `specs/**` changes are advisory
|
|
29
|
+
`unmanaged_spec` future input by default. Managed root mirror and archived spec
|
|
30
|
+
classification comes only from validated source-bundle metadata. Dotfiles emits
|
|
31
|
+
`canonical_refresh_recommended` and reason codes as metadata-only hints;
|
|
32
|
+
governed-pipeline decides whether those hints trigger refresh, mirror, archive,
|
|
33
|
+
replan, or block actions.
|
|
34
|
+
|
|
35
|
+
DFADOPTBRIDGE fixtures apply the same rule to governed-pipeline v11 adoption
|
|
36
|
+
coverage. `dfadoptbridge_unmanaged_spec_input.json` represents root `specs/**`
|
|
37
|
+
as unmanaged spec input metadata, while mirror manifest and archive manifest
|
|
38
|
+
fixtures represent only repo-relative paths, SHA-256 fields, protected-source
|
|
39
|
+
roles, changed-path categories, advisory reason codes, and evidence refs.
|
|
40
|
+
|
|
41
|
+
DFADOPTSOAK keeps that boundary as a release gate. Standalone root `specs/**`
|
|
42
|
+
changes are advisory unmanaged-spec hints. Non-default roots such as `Specs/**`
|
|
43
|
+
remain non-advisory unless a phase plan, validated source bundle, or repo-local
|
|
44
|
+
configuration explicitly names the root. Explicit intake roles such as
|
|
45
|
+
`adapter_configured_intake_root` and `legacy_specs_bundle` classify those
|
|
46
|
+
repo-relative paths as unmanaged spec input metadata only; they do not authorize
|
|
47
|
+
dotfiles to read raw private source bytes or write downstream mirror artifacts.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# SUBSTRATESOAK Governed Pipeline v25 Compatibility
|
|
2
|
+
|
|
3
|
+
SUBSTRATESOAK proves compatibility through dotfiles-local fixtures and
|
|
4
|
+
metadata-only closeout examples. The fixture matrix lives at
|
|
5
|
+
`vendor/phase-loop-runtime/tests/fixtures/phase_loop_pipeline_bridge/substratesoak_*.json`,
|
|
6
|
+
and dotfiles owns only the local fixture source plus the tests that validate
|
|
7
|
+
that source.
|
|
8
|
+
|
|
9
|
+
Governed Pipeline owns mirror regeneration. Governed Pipeline owns closeout ingest.
|
|
10
|
+
Dotfiles does not take ownership of downstream mirror refresh,
|
|
11
|
+
canonical adoption, archive, replan, preflight, or Portal projection decisions.
|
|
12
|
+
The compatibility receipt records no sibling repository mutation.
|
|
13
|
+
|
|
14
|
+
## Metadata Contract
|
|
15
|
+
|
|
16
|
+
Governed Pipeline may consume only metadata fields from the local fixture
|
|
17
|
+
matrix:
|
|
18
|
+
|
|
19
|
+
- pipeline mode
|
|
20
|
+
- source bundle path
|
|
21
|
+
- source bundle SHA-256
|
|
22
|
+
- phase id
|
|
23
|
+
- protected-source roles
|
|
24
|
+
- artifact paths
|
|
25
|
+
- evidence refs
|
|
26
|
+
- changed-path categories
|
|
27
|
+
- verification status
|
|
28
|
+
- blocker class
|
|
29
|
+
- canonical-refresh advisory reason codes
|
|
30
|
+
|
|
31
|
+
Those fields are identifiers, hashes, classifications, or redacted references.
|
|
32
|
+
They are not permission to read source bundle bytes, protected source contents,
|
|
33
|
+
private evidence, or downstream runtime state.
|
|
34
|
+
|
|
35
|
+
## Boundaries
|
|
36
|
+
|
|
37
|
+
The downstream mirror location
|
|
38
|
+
`packages/pipeline-runtime/test/fixtures/phase-loop-bridge/`, governed-pipeline specs,
|
|
39
|
+
`.pipeline/**`, sibling repositories, Raw evidence, Provider payloads,
|
|
40
|
+
credentials, and local environment values are outside the dotfiles write and
|
|
41
|
+
read boundary for this phase. Governed Pipeline remains the owner for any
|
|
42
|
+
derived mirror copy or closeout ingestion behavior.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# SUBSTRATESOAK Portal v40 Projection Boundary
|
|
2
|
+
|
|
3
|
+
Portal v40 display evidence is projection-mediated. Dotfiles may publish only
|
|
4
|
+
Governed Pipeline-mediated metadata for the Portal display path; it does not
|
|
5
|
+
publish Portal runtime output.
|
|
6
|
+
|
|
7
|
+
Allowed display metadata:
|
|
8
|
+
|
|
9
|
+
- phase alias
|
|
10
|
+
- terminal status
|
|
11
|
+
- verification status
|
|
12
|
+
- blocker class
|
|
13
|
+
- human-required flag
|
|
14
|
+
- changed paths
|
|
15
|
+
- artifact refs
|
|
16
|
+
- evidence ref hashes
|
|
17
|
+
- source-bundle identity
|
|
18
|
+
- protected-source roles
|
|
19
|
+
- advisory reason codes
|
|
20
|
+
|
|
21
|
+
The BAML source at
|
|
22
|
+
`vendor/phase-loop-runtime/src/phase_loop_runtime/baml_src/emit_phase_closeout.baml` remains the schema
|
|
23
|
+
authority. This document cites schema-adjacent field names only so the Portal
|
|
24
|
+
projection can stay aligned with Governed Pipeline ingest without creating a
|
|
25
|
+
second schema.
|
|
26
|
+
|
|
27
|
+
## Denied Dotfiles Outputs
|
|
28
|
+
|
|
29
|
+
Portal routing layer, Portal display layer, database storage, projection payloads,
|
|
30
|
+
lifecycle state, Portal contracts, auth state, Raw evidence, Provider payloads,
|
|
31
|
+
credentials, local environment values, host-specific paths, `.pipeline/**`, and
|
|
32
|
+
legacy .codex/phase-loop/** are outside the SUBSTRATESOAK dotfiles output
|
|
33
|
+
surface. Any Portal-visible value must arrive through Governed Pipeline
|
|
34
|
+
projection using redacted metadata and hashes.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# SUBSTRATESOAK ReGenesis v46 Support Surface
|
|
2
|
+
|
|
3
|
+
ReGenesis v46 may cite these dotfiles-owned surfaces:
|
|
4
|
+
|
|
5
|
+
- phase-loop runtime
|
|
6
|
+
- codex-phase-loop alias
|
|
7
|
+
- harness workflow skill packs
|
|
8
|
+
- collaborator bootstrap docs
|
|
9
|
+
- runtime boundary docs
|
|
10
|
+
- substrate manifest docs
|
|
11
|
+
- bridge fixtures
|
|
12
|
+
- metadata-only closeout surfaces
|
|
13
|
+
|
|
14
|
+
The supported adoption path is through Governed Pipeline metadata and fixture
|
|
15
|
+
projection. Dotfiles provides citation material and local compatibility tests;
|
|
16
|
+
Governed Pipeline owns downstream adoption and mirror behavior.
|
|
17
|
+
|
|
18
|
+
## Out of Scope
|
|
19
|
+
|
|
20
|
+
Full owner dotfiles bootstrap is out of scope. Shell profile sourcing is out of scope.
|
|
21
|
+
SSH setup is out of scope. MCP setup is out of scope. Terminal or Zellij setup is out of scope.
|
|
22
|
+
Generic 1Password setup is out of scope.
|
|
23
|
+
|
|
24
|
+
Sibling repository mutation is out of scope. Direct ReGenesis changes are out of scope.
|
|
25
|
+
Direct Governed Pipeline changes are out of scope. Direct Portal changes are out of scope.
|
|
26
|
+
Direct Greenfield changes are out of scope. .pipeline/** changes are out of scope.
|
|
27
|
+
Raw evidence is out of scope. Provider payloads are out of scope.
|
|
28
|
+
Credentials are out of scope. Local environment values are out of scope.
|
|
29
|
+
Legacy .codex/phase-loop/** changes are out of scope.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# SUBSTRATESOAK Reducer Receipt
|
|
2
|
+
|
|
3
|
+
SUBSTRATESOAK reduces SL-0 through SL-3 against IF-0-SUBSTRATESOAK-1:
|
|
4
|
+
cross-repo fixture matrix proves compatibility with Governed Pipeline v25
|
|
5
|
+
without sibling repo mutation.
|
|
6
|
+
|
|
7
|
+
## Exit Criteria
|
|
8
|
+
|
|
9
|
+
| Criterion | Evidence |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| Fixture matrix covers standalone, `pipeline_optional`, `pipeline_required`, stale bundle, unmanaged spec hint, closeout complete, verification failed, human-required, and redaction violation cases. | SL-0 fixture matrix and `PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_pipeline_bridge.py -k substratesoak` |
|
|
12
|
+
| Governed Pipeline v25 mirror fixtures can be regenerated by Governed Pipeline and are not written by dotfiles. | SL-1 receipt and `PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_governed.py` |
|
|
13
|
+
| Portal v40 evidence remains metadata-only and projection-mediated through Governed Pipeline. | SL-2 receipt and `PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_portal.py` |
|
|
14
|
+
| ReGenesis v46 docs state supported runtime, skill, fixture, and closeout metadata surfaces. | SL-3 support doc and `PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_docs.py` |
|
|
15
|
+
| The phase writes no sibling repo, governed-pipeline mirror path, Portal, Greenfield, ReGenesis, `.pipeline/**`, credential, Raw evidence, Provider payload, local environment value, private input, ignored output, personal host bootstrap, or legacy `.codex/phase-loop/**` target. | SL-0 through SL-3 negative assertions and grep checks from the phase plan |
|
|
16
|
+
| .phase-loop/ remains the authoritative runner state source for this phase; legacy `.codex/phase-loop/` files are not used to block or supersede canonical state. | This reducer cites canonical runner state only and does not read or mutate legacy state |
|
|
17
|
+
|
|
18
|
+
## Verification Commands
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_pipeline_bridge.py -k substratesoak
|
|
22
|
+
PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_governed.py
|
|
23
|
+
PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_portal.py
|
|
24
|
+
PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_docs.py
|
|
25
|
+
PYTHONPATH=vendor/phase-loop-runtime/src python -m pytest vendor/phase-loop-runtime/tests/test_phase_loop_pipeline_bridge.py vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_governed.py vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_portal.py vendor/phase-loop-runtime/tests/test_phase_loop_substrate_soak_docs.py
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## IF Gate
|
|
29
|
+
|
|
30
|
+
IF-0-SUBSTRATESOAK-1 is produced when the fixture matrix, Governed Pipeline
|
|
31
|
+
receipt, Portal projection receipt, ReGenesis support doc, and this reducer
|
|
32
|
+
receipt all pass their targeted and whole-phase verification commands.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Verification Evidence Contract
|
|
2
|
+
|
|
3
|
+
VC freezes the additive verification evidence artifact for future runner wiring. Until a later phase consumes it, the only producer is `phase_loop_runtime.verification_evidence.run_verification`.
|
|
4
|
+
|
|
5
|
+
`run_verification(repo, run_dir, commands, suite_command, env_refresh, timeout_s) -> VerificationResult` writes two sibling files under the supplied run directory:
|
|
6
|
+
|
|
7
|
+
- `verification.json`
|
|
8
|
+
- `verification.log`
|
|
9
|
+
|
|
10
|
+
`verification.json` uses schema version 1 and contains exactly these top-level fields:
|
|
11
|
+
|
|
12
|
+
- `schema_version`
|
|
13
|
+
- `run_id`
|
|
14
|
+
- `phase_alias`
|
|
15
|
+
- `commands`
|
|
16
|
+
- `env_refresh`
|
|
17
|
+
- `suite`
|
|
18
|
+
- `started_at`
|
|
19
|
+
- `finished_at`
|
|
20
|
+
- `log_sha256`
|
|
21
|
+
|
|
22
|
+
Each `commands[]` item contains `argv`, `cwd`, `exit_code`, `duration_s`, and `log_offset`. `env_refresh`, when present, contains `triggered`, `manifests`, `install_argv`, and `exit_code`. `suite`, when present, contains `argv`, `exit_code`, and `duration_s`.
|
|
23
|
+
|
|
24
|
+
`verification.log` stores raw combined stdout and stderr from the recorded subprocesses. `log_offset` is the byte offset for each command's output. `log_sha256` is the SHA-256 digest of the final log bytes.
|
|
25
|
+
|
|
26
|
+
The JSON artifact is written atomically by creating a same-directory temporary file and replacing `verification.json`. Re-running identical command inputs rewrites the same artifact shape and log content, except for timestamps and durations.
|
|
27
|
+
|
|
28
|
+
Command failures, missing executables, and timeouts are evidence data. They are represented by nonzero `exit_code` values and do not make `run_verification` raise. Programmer errors, such as a missing repo or a run directory outside the repo, raise before evidence is written.
|
|
29
|
+
|
|
30
|
+
The plan-time validator API is `validate_verification_commands(repo, commands) -> list[ValidationFinding]`. It is read-only and returns structured findings for empty argv, unresolved `argv[0]`, explicit repo-relative path references that do not exist, and cwd/path references that resolve outside the repo.
|
|
31
|
+
|
|
32
|
+
`load_verification_artifact(path)` validates the persisted artifact and returns `VerificationResult`.
|
|
33
|
+
|
|
34
|
+
Evidence marked `evidence: operational` can be recorded for operator inspection, but it cannot mark runner-executed verification as passed. A later runner phase must still reduce actual command exit data before claiming verification success.
|
|
35
|
+
|
|
36
|
+
## Hotfix Consumers
|
|
37
|
+
|
|
38
|
+
`phase-loop hotfix --init-stub <path>` writes a minimal stub with `objective`
|
|
39
|
+
and `verification_command` fields without creating a run directory.
|
|
40
|
+
|
|
41
|
+
`phase-loop hotfix --reason <text> --plan <stub-path>` is an emergency
|
|
42
|
+
consumer of the same IF-0-VC-1 evidence path. It creates
|
|
43
|
+
`.phase-loop/runs/<ts>-hotfix-<slug>/`, runs dependency-manifest env refresh,
|
|
44
|
+
the stub verification command, and the effective suite command through
|
|
45
|
+
`run_verification`, then validates the resulting artifact before ledger
|
|
46
|
+
closeout. A passed hotfix event must include `work_unit: hotfix`, the redacted
|
|
47
|
+
reason, plan stub, `verification_artifact_path`, `verification_log_path`, and
|
|
48
|
+
the artifact validation summary. A missing, malformed, tampered, or nonzero
|
|
49
|
+
artifact blocks the hotfix closeout instead of reporting `passed`.
|
|
50
|
+
|
|
51
|
+
Use hotfix for a single bounded change with no interface freeze. Anything that
|
|
52
|
+
changes interfaces, roadmap scope, or downstream work uses a roadmap phase.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixture_id": "borderline-mixed-signals",
|
|
3
|
+
"category": "borderline",
|
|
4
|
+
"expected_verdict_class": "uncertain",
|
|
5
|
+
"expected_confidence": 0.56,
|
|
6
|
+
"expected_artifact_characteristics": "Ambiguous evidence with one suspicious metric but concrete command and file details.",
|
|
7
|
+
"sample_artifact_paths": ["mixed.json", "commands.txt"],
|
|
8
|
+
"rationale": "Mixed real and suspicious signals should support threshold tuning.",
|
|
9
|
+
"tier2_signal_summary": {
|
|
10
|
+
"kind": "calibration_borderline",
|
|
11
|
+
"signals": ["one low-variance metric", "specific commands", "distinct files"]
|
|
12
|
+
},
|
|
13
|
+
"estimated_input_tokens": 730,
|
|
14
|
+
"estimated_output_tokens": 215,
|
|
15
|
+
"estimated_cost_usd": 0.0075
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixture_id": "borderline-provider-timeout",
|
|
3
|
+
"category": "borderline",
|
|
4
|
+
"expected_verdict_class": "uncertain",
|
|
5
|
+
"expected_confidence": 0.25,
|
|
6
|
+
"expected_artifact_characteristics": "Ambiguous provider behavior where the wrapper should preserve uncertainty instead of asserting fake.",
|
|
7
|
+
"sample_artifact_paths": ["timeout-note.txt"],
|
|
8
|
+
"rationale": "Timeouts should produce uncertain fallback metadata, not hard classifications.",
|
|
9
|
+
"tier2_signal_summary": {
|
|
10
|
+
"kind": "calibration_borderline",
|
|
11
|
+
"signals": ["provider timeout", "no parsed judgment", "operator review"]
|
|
12
|
+
},
|
|
13
|
+
"estimated_input_tokens": 600,
|
|
14
|
+
"estimated_output_tokens": 190,
|
|
15
|
+
"estimated_cost_usd": 0.0062
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixture_id": "borderline-redacted-summary",
|
|
3
|
+
"category": "borderline",
|
|
4
|
+
"expected_verdict_class": "uncertain",
|
|
5
|
+
"expected_confidence": 0.52,
|
|
6
|
+
"expected_artifact_characteristics": "Ambiguous metadata-only evidence where redaction hides details needed for a decisive judgment.",
|
|
7
|
+
"sample_artifact_paths": ["redacted-summary.json"],
|
|
8
|
+
"rationale": "Redacted summaries can be valid but should not be over-classified without corroboration.",
|
|
9
|
+
"tier2_signal_summary": {
|
|
10
|
+
"kind": "calibration_borderline",
|
|
11
|
+
"signals": ["metadata-only", "redacted details", "operator review"]
|
|
12
|
+
},
|
|
13
|
+
"estimated_input_tokens": 650,
|
|
14
|
+
"estimated_output_tokens": 205,
|
|
15
|
+
"estimated_cost_usd": 0.0067
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixture_id": "borderline-small-sample",
|
|
3
|
+
"category": "borderline",
|
|
4
|
+
"expected_verdict_class": "uncertain",
|
|
5
|
+
"expected_confidence": 0.48,
|
|
6
|
+
"expected_artifact_characteristics": "Ambiguous evidence with a small sample and insufficient corroborating artifacts.",
|
|
7
|
+
"sample_artifact_paths": ["sample.json"],
|
|
8
|
+
"rationale": "Too little evidence for a hard real or fake classification.",
|
|
9
|
+
"tier2_signal_summary": {
|
|
10
|
+
"kind": "calibration_borderline",
|
|
11
|
+
"signals": ["small sample", "moderate similarity", "limited context"]
|
|
12
|
+
},
|
|
13
|
+
"estimated_input_tokens": 640,
|
|
14
|
+
"estimated_output_tokens": 200,
|
|
15
|
+
"estimated_cost_usd": 0.0068
|
|
16
|
+
}
|