diff --git a/docs/reviews/2026-10-16-browser-producer-pin-refresh.md b/docs/reviews/2026-10-16-browser-producer-pin-refresh.md new file mode 100644 index 0000000..be35190 --- /dev/null +++ b/docs/reviews/2026-10-16-browser-producer-pin-refresh.md @@ -0,0 +1,37 @@ +# Browser producer pin refresh — 2026-10-16 + +WARDEN-WP-0044-T03 source review, scoped to NetKingdom commit +`015694ee414c802dc2ef1fa0120dfed610086e69`, against Warden `d79f065`. + +Reviewed the exact committed schema, validator, evidence changes and the 21 +producer contract tests. The optional bounded `execution_descriptors` map now +requires lowercase exact SHA-256 byte pins keyed to declared steps. The direct +evidence API refuses malformed maps. Absent and incomplete maps retain plan-only +behavior; the repair supplies no descriptor, adapter or execution authority. +This is compatible with Warden's independently authenticated admission gates. + +Refresh only the validator and evidence module pins. Composer/capability module +hashes and both reviewed parameter-definition hashes remain exact and unchanged. +All four copied module bytes match the named NetKingdom commit and canonical +checkout. No fallback, wildcard or allowed-drift path is added. + +Before the refresh, explicit canonical producer integration failed both positive +version tests (1.1/1.2), with 20 refusals passing. After refresh, 87 producer, +Executor and reducer checks pass, including 14 new malformed descriptor cases +and existing missing/changed-source checks across all four pinned modules. +The 21 producer descriptor-contract checks and focused Ruff checks also pass. +Use `WARDEN_TEST_NETKINGDOM_ROOT=/home/worsch/net-kingdom` explicitly: the +isolated checkout's default sibling can resolve another checkout. + +Emergent knowledge 0.2.6 digest +`8d1d6a9d4d07fec7b619618de7dfe2be2254c1790f85f4198c7fe19db9751c02` +was withheld due to source drift; start/local-work cards and actual source were +reviewed directly. It conveys no authority. + +No new browser or identity-restore adapter was admitted or attested. No credential +or privileged execution occurred. Native structural receipts, authenticated owner +provenance, descriptor assent, attended sessions, ordered verification and the +first native case run remain open. T03 stays progress; T04 stays wait. + +Exact pin hashes, tests and publication identity are retained under the Custodian +`docs/changes/netkingdom-target-2026-10-16/warden-browser-pin-refresh/` directory. diff --git a/src/warden/case_inputs.py b/src/warden/case_inputs.py index baa00b2..9c876d7 100644 --- a/src/warden/case_inputs.py +++ b/src/warden/case_inputs.py @@ -15,9 +15,11 @@ import tempfile from .case_receipt_state import Refused +# Reviewed producer: net-kingdom 015694ee414c802dc2ef1fa0120dfed610086e69. +# Review: docs/reviews/2026-10-16-browser-producer-pin-refresh.md SOURCE_PINS = { - "tools/security-case-types/security_case_evidence.py": "3c5d021ca7f1fc41fba4b2ff42fcb036b916a2a09ffc5e147cc3db1874dd2401", - "tools/security-case-types/security_case_validator.py": "cbb9ab532d328f78cf37aca57891400e2e65d63a8ab3c5fe7bd1a4ff21dee56f", + "tools/security-case-types/security_case_evidence.py": "da8efa59c52ad73283397ebe639ae259d0cb9c6348b5cb829135c24230dcdc75", + "tools/security-case-types/security_case_validator.py": "1bcc62e9bc374c711363295549f3cd5bb0b32952671ed4b08fddc7f74742959b", "tools/security-scenario-composer/security_scenario_composer.py": "9f0cc69930aa8ee2cc3fb92236e6a99728df17b8c0fe36e1250241c38fc01c4f", "tools/playbook-capability-contract/playbook_contract_validator.py": "2e1e0c809d4bc9d64c2d974cc23fecd1c5636785154c2554edd9191852fd926d", } diff --git a/tests/test_case_inputs.py b/tests/test_case_inputs.py index 01e9407..50a132f 100644 --- a/tests/test_case_inputs.py +++ b/tests/test_case_inputs.py @@ -183,3 +183,25 @@ def test_required_browser_parameter_is_not_defaulted_away(rig): with pytest.raises(Refused, match="exact-version"): executor.admit(*sources, **kwargs) assert not calls + + +@pytest.mark.parametrize("version", ["1.1", "1.2"]) +@pytest.mark.parametrize( + "pins", + [ + None, + [], + {"mint-secret": "sha256:" + "A" * 64}, + {"mint-secret": "sha256:" + "a" * 64 + "\n"}, + {"undeclared-step": "sha256:" + "a" * 64}, + {"mint-secret": ["sha256:" + "a" * 64]}, + {"step-" + str(n): "sha256:" + "a" * 64 for n in range(129)}, + ], +) +def test_actual_producer_refuses_malformed_descriptor_pins(rig, version, pins): + executor, calls, sources, _ = browser(rig, version) + case, typ = (yaml.safe_load(source) for source in sources[:2]) + typ["spec"]["execution_descriptors"] = pins + with pytest.raises(Refused, match="exact-version"): + executor.browser_inputs.target(case, typ, "client_id") + assert not calls diff --git a/workplans/WARDEN-WP-0044-security-case-follow-through.md b/workplans/WARDEN-WP-0044-security-case-follow-through.md index 7d6799d..00cfb99 100644 --- a/workplans/WARDEN-WP-0044-security-case-follow-through.md +++ b/workplans/WARDEN-WP-0044-security-case-follow-through.md @@ -263,3 +263,12 @@ Executor/producer tests cover positive versions and refusal/containment paths. Acknowledged machine descriptors, authenticated owner evidence, real Forgejo materialization and contained native sessions remain mandatory and unimplemented; T03 stays progress, T04 stays wait. No type or case status changed. + +2026-10-16 producer source refresh: independently reviewed NetKingdom +`015694ee414c802dc2ef1fa0120dfed610086e69` optional descriptor-map repair. +Only the validator/evidence source pins change; exact parameter and transitive +source identity remain enforced. Actual canonical producer, Executor and reducer +suite passes 87 checks, including 14 new malformed-map integration cases; all +four missing/changed modules still refuse. Review: +`docs/reviews/2026-10-16-browser-producer-pin-refresh.md`. No adapter attestation, +native acceptance, credential use or privileged dispatch. T03 remains progress.