Repository navigation
Vault revocation census and docstrings: the two Vault client sites are recorded as guarded, and the hop docstrings point at the pins (BACKLOG #3587, #3489) - #2586
Conversation
The census listed the Vault KV secret provider and Transit key provider _build_client sites as Exempt and "Ungated". Since engine PR 2324 both are gated: each calls mount_strict_reply_adapter, which runs _refuse_an_unrevoked_vault_hop at construction and before each send. That guard decides through revocation_hop_disposition and never calls RevocationHopGuard, so the census gains a second root guard. The three names on the chain join _GUARDS. A sabotage of either site's mount call, or of either chain link, turns the census red. BACKLOG #3587 Proposed PR title: Revocation-guard census records the two Vault client sites as guarded (BACKLOG #3587) Banner: SHIPPED -- tests/test_revocation_guard_census.py lists both Vault _build_client sites as Guarded, tied to _refuse_an_unrevoked_vault_hop.
Round one of code review on the census change found these, all fixed: - The unlisted-site message now names mount_strict_reply_adapter for an hvac Vault client, not only RevocationHopGuard. - Each guard name but capture must have exactly one def in the package, so a same-named method cannot stand in for a wrapper. - A new test ties the Vault root to _crossed_unrevoked and revocation_hop_disposition. - The Vault note says no CRL lever is built, and what the census does not follow. The floor counts wrappers, not roots. The two new controls were sabotaged and went red. BACKLOG #3587 Proposed PR title: Revocation-guard census records the two Vault client sites as guarded (BACKLOG #3587) Banner: SHIPPED -- tests/test_revocation_guard_census.py lists both Vault _build_client sites as Guarded, tied to _refuse_an_unrevoked_vault_hop.
…ery call BACKLOG #3489, the docstring items PR 2540 deferred, plus two still open. - strict_requests: cut the sentence restating vault_failure_text's rule (re-review low 5); the CA-directory paragraph drops the restated versions and date (slice 2 item 9) and no longer says a directory file "wrote no prompt" on Windows, where a prompt is not visible (item 4). - trust_anchors.anchor_cadata: the POSIX pty run follows the Windows run it is "later" than, and points at the cafile pin for its versions (item 9). - vault_failure_text and the marker test docstring point at the VaultHopRefused docstring for the CA path and CA text (batch 252 Manager finding 1). - The marked-refusal scan now must see every VaultHopRefused( call the source spells, so its floor cannot lag again (low 2 and batch 252 Manager finding 2 recurred: floor 15, 17 calls). Proposed PR title: Vault hop docstrings point at the pins, and the marker scan counts every call (BACKLOG #3489) Proposed banner: PARTIAL -- slice 2 items 4 and 9, re-review low 5 and the batch 252 Manager's two findings built on branch b342-3489b. Re-review lows 1 and 3 declined: outside PR 2298's diff, each needs its own row. Body item 7 declined: no change can give PR 2298 a third review. Closing step 2 still open: it needs the reviewer's report.
BACKLOG #3489. Fixes from the code-review round 1 on this branch: - The text-count check on VaultHopRefused( calls went red on a mention and missed an alias, so the floor is a hand-kept 17 again. - "off-version" is back for the Linux and POSIX pty runs, and anchor_cadata says the pty case is pinned on POSIX only. - vault_failure_text points at VaultHopRefused for what the hop's text never names, rather than restating part of the list. - Docstring lines rewrapped to the 100-column limit. Proposed PR title: Vault hop docstrings point at the pins, and the marked-refusal floor matches the module (BACKLOG #3489) Proposed banner: PARTIAL -- slice 2 items 4 and 9, re-review low 5 and the batch 252 Manager's two findings built on branch b342-3489b (the floor recurred at 15 against 17 calls; now 17). Re-review lows 1 and 3 declined: outside PR 2298's diff, each needs its own row. Body item 7 declined: no change can give PR 2298 a third review. Closing step 2 still open: it needs the reviewer's report.
Carries BACKLOG #3587 (census records the two Vault client sites as guarded).
Carries BACKLOG #3489 (Vault hop docstrings point at the pins; marked-refusal floor matches the module).
|
QA -- two Builders, one per source branch, verbatim. #3587 (b342-3587, head 3ffbdc4): #3489 (b342-3489b, head ab89fb5): The wave head 72f1b69 is the two reviewed heads merged onto origin/main with no other change; the two branches touch different files. |
|
Manager (batch 342): do not merge yet. The three required pytest legs are red on 72f1b69 with one failure the branch caused: tests/test_vacuous_absence_assert_lint.py flags tests/test_revocation_guard_census.py:423 (test_every_guard_name_reaches_a_root asserts |
test_every_guard_name_reaches_a_root asserted `not not_one` over a walk with no earlier count, so the absence-assert lint failed all three pytest legs on PR 2586. An earlier `assert len(counts) >= 4` now fails a walk over nothing. `_GUARD_ROOTS` is pinned exactly, so a hollow wrapper moved into the roots needs an edit to the test that review sees (PR 2586 open finding 11). Proposed PR title: Vault revocation census and docstrings: the two Vault client sites are recorded as guarded, and the hop docstrings point at the pins (BACKLOG #3587, #3489) BACKLOG #3587
Dismissed because a newer commit was pushed; Greptile will re-review the current head.
|
Manager (batch 342): new reviewed head 262b364, one test-only fix commit on 72f1b69 (a count floor before the census absence check, and _GUARD_ROOTS pinned). Red then green on the lint; sabotage (empty walk, root added, root removed) each fails, controls pass. Builder's QA line, verbatim: QA -- korus roles/BUILDER.md step 11 My hold lifts once the required legs are green on 262b364. |
Merge danger
Reversible: yes -- a revert of this change on
mainundoes all of it.Blast radius: no runtime behaviour changes. Tests:
tests/test_revocation_guard_census.py(#3587) andtests/test_vault_hop_refusal_marker.py(one floor, #3489). Docstrings only:messagefoundry/transports/strict_requests.pyandmessagefoundry/auth/trust_anchors.py(#3489). 4 files.Evidence
secretprovider_vault.py::_build_clientandkeyprovider_vault.py::_build_clienttoExempt("... Ungated, and NOT in docs/DEPLOYMENT.md's ungated table ..."), although engine PR 2324 gated both hops. After: both areGuarded, tied to_refuse_an_unrevoked_vault_hopthroughmount_strict_reply_adapter; the census gains that guard as a second root besideRevocationHopGuard.capture. Six sabotages (each site's mount call, the adapter's call to the root, the mount's call to the adapter, a duplicate def of a guard name, the root's_crossed_unrevokedcall) each turned exactly the intended test red; an unchanged control passed.docs/DEPLOYMENT.mdalready listed the Vault hops as gated, so the false claim lived only in the census.>= 15against 17 sites (now>= 17); docstrings restated versions, dates and rules owned elsewhere, or said "wrote no prompt" on Windows where the capath pin says no prompt was seen.Batch 342 wave: BACKLOG #3587 and #3489 (Vault revocation tests and docstrings)
Wave branch
b342-wave-vault, head262b364edc6aea11b6a498f8570f3c79c61bffb1. Built fromorigin/mainby merging the two source branches below (wave head72f1b69009), then one fix commit262b364edc(reviewed in its own round): the census testtest_every_guard_name_reaches_a_rootgains a count floor before its absence check (the vacuous-absence lint failed all three pytest legs on 72f1b69) and pins_GUARD_ROOTSexactly (open finding 11, now fixed).b342-35873ffbdc45b5a68dbbb31eb8f9c1764c21b1f8ea4e7f8d2445d6b342-3489bab89fb516b760bd0e24aa344449f5e0df11a97c883ad747d61Each source head is the head its own review round 2 read; nothing was committed after either review. The two merge commits add nothing beyond the merges (the two branches touch different files).
#3587
Closing step 1 met: the census no longer lists the two Vault
_build_clientsites asExemptor calls them "Ungated", and the test passes (139 passed over the census, the Vault hop guard and the Vault posture census tests).#3489, item by item
_refuse_encrypted_ca_textno longer restates them;anchor_cadatagives the Windows run first, then "a later run, off-version", pty pinned on POSIX only.vault_failure_text's rule)vault_failure_textand the marker test docstring point at theVaultHopRefuseddocstring, which lists CA path and CA text. See open finding 1.5fa5a08768), recurred (15 against 17); now>= 17.5fa5a08768), PR 2298 (44ef67f960).57943b93ad); 2540 declined 11c.auth/service.py:1851), low 3 (privilege_probes.py:201)Checks (Builders' reports)
/simplify; ruff;mypy --platform linux --explicit-package-bases tests; pytest as above; sabotage as above. Skipped: the full suite, the other mypy legs (one test file changed)./simplify; ruff; mypy in all four section 7 legs; pytest on all 44 test files namingstrict_requests,VaultHopRefused,vault_failure_text,trust_anchors,anchor_cadataorencrypted_pem: 3212 passed, 97 skipped; after round 1, 1535 passed, 93 skipped. Skipped: the full suite.Known open findings (shipped open; both Builders reached the two-round cap)
#3489, first for the Lander's triage:
vault_failure_textlost a stated promise forEgressReplyError. The deleted sentence ("no part of the address, the proxy URL, the token or the reply") covered both types; the new pointer coversVaultHopRefusedonly. The reviewer adds thatbounded_read.read_bounded(~354) puts the peer's declared Content-Length intoTruncatedResponseError, so "fixed reason text" was already not quite true. Docstring only, no behaviour change; suggested fix: restore the four-item sentence for both types and keep the pointer for the CA items.>= 17floor can lag again; an exact count of every Load (call or listed non-call use) would also catch an alias._refuse_encrypted_ca_textand the capath paragraph still say the pins run "on each platform CI runs"; both pty tests skip on win32._is_label_or_constantaccepts any Nameconnector(pre-existing)._refuse_an_unchecked_client_keystill says "wrote no prompt" on Windows.anchor_cadata: "a POSIX pseudo-terminal" widens one WSL2 Ubuntu run to all of POSIX; the cafile table's Windows row differs from BACKLOG #1125: proxy framing requirements, and serve names an environment proxy #2270's reading.fc2227de5e's subject describes a check its next commit removed.#3587 (test-only; items 1, 3, 4 are ways the census could stay green over a hollow guard):
11. Nothing pins the set of
_GUARD_ROOTS; a hollow wrapper moved into it stays green. 12. The wrapper-floor comment says 5 wrappers; there are 7. 13. The authority test matchesrevocation_hop_dispositionby bare name. 14._def_countcounts function defs only. 15._def_countre-reads every file per guard name (~0.9 s). 16. The_VAULT_GUARDnote restates the guard docstring (SDS-3.5). 17. The unlisted-site message says an hvac client "must not use RevocationHopGuard", wider than the guard's docstring (SDS-3.7). 18. The Transit note's wording misattaches "through mount_strict_reply_adapter". 19. The Guarded-floor comment says 15 sites; there are 17. 20. Two new sentences pass 25 words.From the fix commit's review (new): 21.
_is_guardmatches every non-captureguard name on any receiver, soother_obj.refuse_an_unrevoked_hop(...)would count; 22. thecaptureroot has no decides-through-the-authority check; 23. the new "8 names" comment disagrees with the stale "5 wrappers" one (finding 12); 24. a ragged break in thevault_failure_textdocstring (~764).Proposed ledger banners (for the Lander)
Landing order
None required. Only open PR 2567 touches
auth/trust_anchors.py(~154 and ~1281-1440); this hunk is at ~545.