| quick_id | 260706-odc |
|---|---|
| slug | close-audit-review-items |
| description | Close the four carried review items surfaced by the 2026.7.2 milestone audit |
| created | 2026-07-07 |
| status | in-progress |
Close the four low-severity/cosmetic review items surfaced (and recorded as deferred debt) by
the 2026.7.2-MILESTONE-AUDIT.md before milestone completion. GAP-01 is intentionally OUT of
scope β it is the already-deferred v2 PROV-01 feature, not a fix.
Scope-locked to exactly these four items. No behavior change to the verified N-compute dispatch path. Each logical change is an atomic commit.
- Files:
src/phaze/config_backends.py,tests/shared/config/test_backend_registry.py - Action:
ComputeBackend._require_dispatch_fieldsonly fails fast on a missingpush_host, never on an unsafe one β a stray space / shell metachar inpush_hostorssh_userinbackends.tomlpasses config-load and only surfaces as apydantic.ValidationErrordeep inside the firstpush_filedispatch (PushFilePayload._dest_host_safe). Add a module-level_PUSH_DEST_FORBIDDENfrozenset (kept in sync withPushFilePayload._DEST_HOST_FORBIDDENinschemas/agent_tasks.py) and extend_require_dispatch_fieldsto reject those chars inpush_host(required) andssh_user(only when present) with the id-taggedValueError. Keep the presence checks andssh_user-optional semantics unchanged. - Verify: new tests β space in
push_hostand metachar inssh_usereach raiseValidationErrornaming the entry id; a clean compute backend still constructs; existing registry suite green. - Done:
uv run pytest tests/shared/config/test_backend_registry.py -qgreen; ruff + mypy clean.
- Files:
src/phaze/tasks/push.py,tests/analyze/core/test_push_pipeline.py - Action:
_require_push_config's predicategetattr(cfg, name) is Nonelets an operator-set empty string (PHAZE_PUSH_SSH_USER="") pass and fall through as thedest_ssh_user or cfg.push_ssh_usersource, producing a broken"@host:..."remote spec. Change the predicate tonot getattr(cfg, name)so""fails fast the same asNone. - Verify: new test β
push_ssh_user=""raises the"missing required push config"RuntimeError. - Done:
uv run pytest tests/analyze/core/test_push_pipeline.py -qgreen; ruff + mypy clean.
- Files:
docs/multi-compute.md,docker-compose.cloud-agent.yml - Action: fix grammar
docs/multi-compute.md:176"(do not restated here)" β "(not restated here)"; update the moved test path indocker-compose.cloud-agent.yml:22tests/test_deployment/...βtests/agents/deployment/test_cloud_agent_compose.py. Prose/comment only, no behavior change. - Done: grep confirms both strings updated; compose still
yaml.safe_load-valid.
uv run ruff check+uv run mypyclean on touched source files.uv run pytest tests/analyze/services/test_backends.py tests/shared/config/test_backend_registry.py tests/analyze/core/test_push_pipeline.py tests/agents/deployment/test_cloud_agent_compose.py -qgreen.- All pre-commit hooks pass; never
--no-verify.
- GAP-01 (N-compute-aware
recover_orphaned_work) β deferred as v2 PROV-01. - 73-REVIEW WR-04 / AR-73-02 (ledger RMW race) β already closed by Phase 76 HARD-02.