Nick
e9d3efae5d
feat(mutation_guards): port to FULL Rust — dichotomy wave
DICHOTOMY VERDICT: RUST (deterministic classification core — severity
lattices, branch order, verdict+reason+recovery are pure logic; zero IO).
Ported (name-preserving, src/rust/mutation_guards/src/lib.rs):
- classify_mutation (the full gate flow: unattributed identity-family
DENY first — it beats read ops and the destructive gate — then the
destructive-unbacked DENY, CONFIRM via score >= 4 or identity-kind +
mutating-op, ALLOW; severity-table defaults for unknown kind/op/scope)
- guard_mutation (dict.get defaults: missing-key default vs present-null
falsy passthrough — 0/[]/None falsy, non-empty strings truthy)
- mu_classify/mu_guard FFI exports (doc-envelope law: one JSON doc in,
{ok, value|err} out; no free-string export — callers free through
capability_scoring's cs_free_string)
Python semantics preserved exactly: Python truthiness over JSON values,
str(None) rendering in the reason f-strings, the exact reason/recovery
strings.
Truth: scripts/gen_mutation_guards_truth.py freezes 43 cases from the
live oracle (frozen_mg_truth.json embedded verbatim; RUNE_MG_CORE=python
pinned, deep-copied inputs) — every branch of both public functions:
DENY-1 precedence proofs (falsy 0/None attribution, read-op denial),
DENY-2 boundary (op/kind severity-2, falsy-zero backup), CONFIRM score-4
boundary and identity-rule, truthy non-bool backups, ALLOW lattice with
unknown kind/op/scope defaults, null kind/operation rendered as None,
guard defaults/extra-keys/empty-mutation. Battery green VERBATIM in-crate
(whole-doc compare). Live parity: facade 43/43 + kernel 43/43 (direct
loader), RUNE_MG_CORE=python fallback 43/43. Python tests green both
modes (test_governance_quartet 15/15).
Contract: BUILDER-2026-10-12T12:11:14Z-ab92a8-factory-wave (walked
draft→approved→building→verifying→closed back-to-back in ONE process,
scripts/open_contract_mutation_guards.py).
2026-10-12 13:58:40 +01:00
..
2026-09-12 17:03:27 +01:00
2026-10-08 13:30:14 +01:00
2026-09-11 20:15:57 +01:00
2026-09-19 01:40:34 +01:00
2026-09-19 18:23:17 +01:00
2026-10-08 03:19:27 +01:00
2026-10-10 01:45:56 +01:00
2026-09-07 19:51:36 +01:00
2026-09-08 02:06:34 +01:00
2026-10-12 00:05:38 +01:00
2026-10-12 12:45:03 +01:00
2026-10-11 22:02:18 +01:00
2026-09-07 15:10:37 +01:00
2026-09-07 21:00:44 +01:00
2026-10-12 01:41:06 +01:00
2026-10-12 02:00:44 +01:00
2026-10-12 00:37:26 +01:00
2026-09-08 02:46:26 +01:00
2026-09-19 01:40:34 +01:00
2026-10-12 03:47:57 +01:00
2026-10-12 02:42:06 +01:00
2026-10-12 02:55:05 +01:00
2026-09-19 00:56:19 +01:00
2026-09-13 14:48:28 +01:00
2026-09-11 20:15:57 +01:00
2026-09-14 06:26:24 +01:00
2026-09-18 10:25:59 +01:00
2026-10-08 14:27:57 +01:00
2026-10-08 14:01:46 +01:00
2026-10-11 10:17:46 +01:00
2026-09-11 15:36:08 +01:00
2026-09-11 20:15:57 +01:00
2026-10-08 14:24:29 +01:00
2026-10-08 14:48:58 +01:00
2026-10-11 23:07:56 +01:00
2026-10-12 13:04:29 +01:00
2026-10-11 15:43:11 +01:00
2026-10-07 10:52:49 +01:00
2026-10-11 19:07:34 +01:00
2026-10-11 15:27:49 +01:00
2026-10-12 00:05:38 +01:00
2026-10-12 12:45:03 +01:00
2026-10-11 22:02:18 +01:00
2026-10-07 18:18:07 +01:00
2026-10-07 19:35:04 +01:00
2026-10-08 00:30:00 +01:00
2026-10-11 23:03:35 +01:00
2026-10-11 14:48:20 +01:00
2026-10-11 21:51:05 +01:00
2026-10-07 17:45:20 +01:00
2026-10-11 09:44:03 +01:00
2026-10-12 00:26:02 +01:00
2026-10-08 03:01:43 +01:00
2026-10-11 21:33:47 +01:00
2026-10-08 02:28:08 +01:00
2026-10-08 01:06:50 +01:00
2026-10-12 02:44:22 +01:00
2026-10-12 11:56:55 +01:00
2026-10-12 03:46:49 +01:00
2026-10-08 00:09:18 +01:00
2026-10-12 02:08:12 +01:00
2026-10-07 20:52:25 +01:00
2026-10-07 20:00:56 +01:00
2026-10-07 19:13:55 +01:00
2026-10-12 02:26:30 +01:00
2026-10-08 00:41:51 +01:00
2026-10-11 18:58:33 +01:00
2026-10-12 13:58:40 +01:00
2026-10-12 03:58:49 +01:00
2026-10-12 01:03:37 +01:00
2026-09-07 21:00:44 +01:00
2026-10-11 23:23:43 +01:00
2026-10-08 00:20:44 +01:00
2026-10-11 17:09:07 +01:00
2026-10-07 19:50:33 +01:00
2026-10-07 18:56:17 +01:00
2026-10-07 18:42:22 +01:00
2026-10-12 02:50:56 +01:00
2026-10-08 02:44:40 +01:00
2026-10-12 13:50:14 +01:00
2026-10-12 01:41:06 +01:00
2026-10-12 02:55:56 +01:00
2026-10-12 02:00:44 +01:00
2026-10-07 20:13:13 +01:00
2026-10-07 17:23:15 +01:00
2026-10-07 23:48:24 +01:00
2026-10-12 00:37:26 +01:00
2026-10-07 20:39:13 +01:00
2026-10-12 03:59:47 +01:00
2026-09-11 20:15:57 +01:00
2026-09-19 15:08:23 +01:00
2026-08-30 17:10:32 +01:00
2026-08-30 17:10:32 +01:00
2026-10-08 12:02:37 +01:00
2026-10-08 12:32:03 +01:00
2026-10-08 13:23:26 +01:00
2026-09-23 18:09:26 +01:00
2026-09-19 07:16:35 +01:00
2026-09-19 03:32:24 +01:00
2026-09-07 21:00:44 +01:00
2026-10-08 11:32:09 +01:00
2026-09-08 05:54:37 +01:00
2026-09-11 15:36:08 +01:00
2026-09-19 06:12:38 +01:00
2026-10-12 13:13:36 +01:00
2026-10-12 12:45:03 +01:00
2026-10-11 23:07:56 +01:00
2026-10-12 11:56:55 +01:00
2026-10-12 03:46:49 +01:00
2026-10-12 02:17:10 +01:00
2026-10-12 13:58:40 +01:00
2026-10-12 03:59:47 +01:00
2026-09-11 15:36:08 +01:00
2026-10-08 16:16:19 +01:00
2026-10-11 18:58:33 +01:00
2026-09-10 20:08:50 +01:00
2026-09-11 20:15:57 +01:00
2026-10-08 14:59:52 +01:00
2026-09-19 06:12:38 +01:00
2026-09-29 14:47:38 +01:00
2026-09-29 14:47:38 +01:00
2026-10-08 03:19:27 +01:00
2026-10-08 03:19:27 +01:00
2026-09-08 11:26:30 +01:00
2026-09-08 07:12:34 +01:00
2026-09-11 15:36:08 +01:00
2026-09-15 17:02:04 +01:00
2026-10-08 19:50:11 +01:00
2026-09-17 12:56:52 +01:00
2026-09-17 13:06:17 +01:00
2026-09-11 15:36:08 +01:00
2026-09-08 12:31:53 +01:00
2026-09-15 17:02:04 +01:00
2026-09-11 15:36:08 +01:00
2026-10-08 11:32:09 +01:00
2026-09-17 01:38:39 +01:00
2026-10-08 12:27:45 +01:00
2026-09-11 15:36:08 +01:00
2026-09-12 17:03:27 +01:00
2026-10-10 03:41:26 +01:00
2026-10-10 01:45:56 +01:00
2026-09-16 03:32:53 +01:00
2026-09-11 15:36:08 +01:00
2026-09-11 15:36:08 +01:00
2026-09-11 15:36:08 +01:00
2026-09-17 12:56:52 +01:00
2026-10-03 16:20:08 +01:00
2026-09-15 17:02:04 +01:00
2026-09-15 17:02:04 +01:00
2026-10-08 12:32:03 +01:00
2026-09-11 03:16:50 +01:00
2026-10-04 01:08:20 +01:00
2026-09-09 04:12:58 +01:00
2026-09-17 12:56:52 +01:00
2026-09-11 22:33:10 +01:00
2026-10-12 13:53:54 +01:00
2026-10-08 12:32:03 +01:00
2026-10-08 13:30:14 +01:00
2026-09-17 12:56:52 +01:00
2026-09-17 12:56:52 +01:00