Fail-closed Hermes full-handoff acceptance harness #19
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/hermes-full-handoff-acceptance"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Repairs the independent review blockers on the same branch and PR. Previous reviewed head:
c808baff40a12a90f43c2e5e39b94d139f88ea29. Repaired head:02e559d7ac80cde6b2f2b87a4cba32bcb79d8971.Mandatory P1: the zero-evidence fail-open is closed
evaluate_names_absentreturnedPASSwhen its step exited0with no output. Five mandatory checks —identity.no-provider-api-key-in-pod,identity.no-provider-api-key-in-manifest,forge.worker-holds-no-git-credential-variable,pool.coordinator-retains-sole-state-ownership,access.no-cluster-admin-binding-for-agent— could therefore report a pass on no evidence at all, converting aNO_GOinto aGOon exactly the checks that assert credentials, a cluster-admin binding, and shared coordinator state are absent.Both name rules now resolve their step through a single guard in
_line_step, so zero observations areNOT_RUN. Regressions pin all five real catalog specs (not synthetic look-alikes) across four axes each: silent, whitespace-only, healthy-evidencePASS, and forbidden-nameFAIL. A further regression drives the whole 63-check catalog with every other check held atPASSand asserts the verdict isNO_GO, with an all-PASScontrol assertingGO.Both reachable silence paths are reproduced against the real tools:
env_namestemplate with a missing upstream binary exits0with 0 bytes. Executed through/bin/sh; fully hermetic.0with no usable evidence. The exact output bytes are pinned hermetically; a second test confirms the liverc=0behaviour against a read-onlykubectl getand skips when no cluster is reachable.The
pool.coordinator-retains-sole-state-ownershipprojection now emits one<volume>=<claim>line per template volume, so a volume without a PVC still counts as an observation and only real drift produces silence. Verified against a live StatefulSet.Closed hardening and evidence defects
atlas/titan-iacon an exact segment boundary, soatlas/titan-iac-evilandatlas/titan-iacxare refused.%2e%2e) and double-encoded forms, before the request is built.--as/--as-group/--as-uidare refused for every argv, in every mode, from every vantage. The inner command ofkubectl execis re-checked under the same rule instead of being granted an unconditional exemption, andvalidate_catalogno longer guards only the operator vantage. No audited self-probe needs impersonation, so nothing is left enabled by convention.fluxandhelmare removed from the allowlist; they had no pinned release digest and no catalog step used them. Flux/Helm status is read throughkubectl. A regression assertsALLOWED_BINARIES,EXPECTED_PATHS,EXPECTED_SHA256, andPOD_COMMAND_PATHShave identical key sets, so an allowlisted binary the executor would refuse to attest cannot reappear.--concurrencywas validated and stored but never used (run_catalogis sequential), and--expect-telegram-sessionswasstore_truewithdefault=Trueso it could never beFalse. Both are gone along with the dead concurrency bound; Telegram continuity remains mandatory.limit=50, and the create response is treated as an authoritative source for the pull number. Every number either source names is registered and closed, so an unusable index can no longer orphan an open draft. When anything is uncertain the evidence carriesresidue_refand an exactmanual_cleanupcommand list. The previously verified path where a non-zero create is corroborated by an exact index match still passes.executable_pathandexecutable_sha256, so withholding bytes no longer withholds binary attestation.ruff format --checkscope now names the files this change owns and passes verbatim (33 files, exit 0). The previoustesting/quality_*.pyglob pulled in the unmodified, not-format-cleantesting/quality_gate.py.hygiene.legacy_line_exceptionsmechanism is reverted;testing/quality_hygiene.pyis byte-identical tomainand the contract change here is purely additive (74 insertions, 0 deletions). See the honest gate status below.hermes_handoff_arming.pyis split out ofhermes_handoff_ephemeral.pyso both stay under the 500-line cap.Exact-head validation at
02e559d7docs,smell,unit, andcoverageallok.hygieneisfailed, and it is red onmaintoo. Exactly four pre-existing test files exceed 500 lines:scripts/tests/test_dashboards_render_atlas.py(516),testing/tests/test_hermes_chat_quality.py(2242),testing/tests/test_hermes_cli_lanes.py(1971),testing/tests/test_hermes_coordinator.py(510). All four are untouched here and byte-identical at merge-base30259b52and at currentorigin/main; a pristine export of each reports the same four issues and nothing else. Grandfathering or splitting them is a repo-wide contract decision that belongs to the canonical contract change in PR #14/#15, per the repair instruction not to add broad legacy LOC exceptions here.hermes_handoff_arming.pyat 100%/100%.kubectl execinner command, and drop attestation from an unrecorded step.checkandformat --checkover every changed file: PASS.compileall: PASS.git diff --check origin/main...HEAD: PASS.hermes_handoff_evaluators.pyat 497).env -iwith noPYTHONPATH/HOME/KUBECONFIG(425 passed, 1 live-cluster test skipped).validate_catalogreporting 0 problems; 66 unique argv contain zero mutating commands (the onlycreatetokens are side-effect-freekubectl auth can-ireviews), zero impersonation arguments, zero credential paths, andGET-only Gitea calls. A driven full run throughmain()executes 81 commands with zero mutations and zeroPOST/PATCH/DELETE. With no release inputs supplied, the run fails closed with 0 spawned commands.services/hermes(113 docs),services/bstein-dev-home(35),clusters/atlas/flux-system(100).detect-secrets1.5.0 over every changed file: every hit is a pinned SHA-256 digest, a Git commit SHA, or a synthetic redaction fixture. Both new files scan clean.maind8f2d818b9a552ea6c2d7fe86554be829bd5ffff: merge-tree clean. Recomputed over all 28 pairwise combinations, #19 is clean withmain, #17, #18, and #20, and conflicts with #12, #14, #15, and #16. #18+#19 became clean because the duplicated hygiene mechanism is gone; #12+#19 is new because #12 advanced toed43dbaa. The runbook names the exact overlapping files per pair and requires recomputation before integration.Human review is required. This PR remains open and draft. Nothing was merged, force-pushed, deployed, reconciled, published, approved, or live-mutated, and no credential was read or created.
WIP: Fail-closed Hermes full-handoff acceptance harnessto Fail-closed Hermes full-handoff acceptance harness