host
06e4e16bbb
refactor: audit batch 3 (I-3 capability verdict, I-4 policy merge)
...
- I-3: new models.evaluate_capability returning a CapabilityVerdict
(ok/missing/unknown from check, known/unknown_missing from split,
status/verb derivations); decide_routing, worker gateway check,
worker persisted recheck, dry-run tier+gateway checks and server
shadow endpoint all call it. Blocking rules stay at the call
sites (gateway has no worker-default fallback, recheck blocks
only on known, dry-run/shadow never block); all user-visible
audit details, dry-run notes and shadow notes are byte-identical.
- I-4: new models.merge_policy_documents shared by
load_routing_policy and dry_run_from_env; the old tiers-update
block is kept verbatim (it was a no-op after update(): JSON
tiers replace the whole map, file tiers absent from JSON are
dropped -- preserved, not fixed, as that would be a behaviour
change). dropped_tiers/partial_failures remain load-time
records, not merge products.
- Tests: test_audit_batch3.py, 13 tests (verdict matrix + parity
with check/split, decide/dry-run wording, merge boundaries +
300 seeded random pairs + loader/dry-run agreement).
Full suite: 1694 OK (skipped=11), baseline 1681 + 13, 0 failures.
2026-11-04 18:02:23 +00:00
..
2026-11-04 18:02:22 +00:00
2026-11-04 18:01:44 +00:00
2026-11-04 18:01:44 +00:00
2026-11-04 18:01:44 +00:00
2026-11-04 18:01:44 +00:00
2026-10-26 16:27:42 +08:00
2026-10-26 16:47:55 +08:00
2026-10-27 15:53:50 +08:00
2026-10-27 15:53:50 +08:00
2026-11-04 18:02:10 +00:00
2026-11-04 18:02:22 +00:00
2026-11-04 18:02:22 +00:00
2026-11-04 18:02:23 +00:00
2026-11-04 18:02:21 +00:00
2026-11-04 18:02:21 +00:00
2026-11-04 18:02:21 +00:00
2026-11-04 18:02:21 +00:00
2026-11-04 18:02:22 +00:00
2026-11-04 18:02:22 +00:00
2026-11-04 18:02:22 +00:00
2026-11-04 18:02:21 +00:00
2026-10-30 00:49:03 +08:00
2026-10-28 12:12:10 +08:00
2026-10-30 01:55:59 +08:00
2026-10-27 15:53:50 +08:00
2026-10-27 15:53:50 +08:00
2026-10-29 00:19:30 +08:00
2026-10-27 16:27:50 +00:00
2026-10-27 15:53:50 +08:00
2026-10-29 07:01:57 +08:00
2026-10-30 06:00:31 +00:00
2026-10-29 05:27:22 +08:00
2026-10-27 16:27:50 +00:00
2026-11-01 09:06:28 +00:00
2026-11-01 08:16:48 +00:00
2026-10-29 06:32:38 +08:00
2026-10-30 01:32:35 +08:00
2026-10-28 08:57:05 +00:00
2026-11-04 18:01:44 +00:00
2026-10-30 05:11:06 +08:00
2026-10-26 03:23:06 +08:00
2026-10-26 01:32:57 +08:00
2026-11-04 18:01:44 +00:00
2026-10-26 10:26:21 +08:00
2026-10-30 04:17:09 +08:00
2026-11-04 18:02:20 +00:00
2026-10-26 06:19:01 +08:00
2026-10-30 02:53:46 +08:00
2026-10-27 16:27:50 +00:00
2026-10-29 06:32:38 +08:00
2026-10-29 16:45:07 +08:00
2026-10-27 10:56:08 +08:00
2026-10-29 16:32:58 +08:00
2026-10-29 14:21:18 +08:00
2026-10-26 08:39:57 +08:00
2026-10-28 03:43:02 +08:00
2026-10-30 02:53:30 +08:00
2026-10-30 04:05:00 +08:00
2026-11-01 09:06:28 +00:00
2026-10-30 01:32:35 +08:00
2026-10-30 15:39:55 +08:00
2026-10-30 07:15:05 +08:00
2026-10-28 10:13:40 +00:00
2026-10-29 04:40:47 +08:00
2026-10-30 14:46:11 +08:00
2026-10-27 19:10:49 +00:00
2026-10-26 01:23:21 +08:00
2026-10-30 12:58:41 +08:00
2026-11-04 18:01:44 +00:00
2026-10-27 15:35:23 +00:00
2026-10-29 16:45:07 +08:00
2026-10-26 16:27:42 +08:00
2026-10-26 16:27:42 +08:00
2026-10-26 01:32:57 +08:00
2026-10-26 23:51:54 +08:00
2026-10-26 07:42:14 +08:00
2026-10-27 15:35:23 +00:00
2026-10-29 15:31:07 +08:00
2026-10-27 16:27:50 +00:00
2026-10-29 12:42:19 +08:00
2026-10-29 06:32:38 +08:00
2026-11-04 18:02:21 +00:00
2026-10-27 14:12:28 +08:00
2026-10-27 14:12:28 +08:00
2026-11-04 18:02:22 +00:00
2026-11-01 09:06:28 +00:00
2026-11-01 09:06:28 +00:00
2026-11-04 17:30:07 +01:00
2026-11-01 09:06:28 +00:00
2026-11-01 08:34:13 +00:00
2026-10-28 22:49:06 +08:00
2026-10-26 03:23:06 +08:00
2026-10-26 16:47:55 +08:00
2026-10-26 15:20:02 +08:00
2026-10-28 11:14:10 +08:00
2026-10-27 19:10:49 +00:00
2026-10-26 17:01:47 +08:00
2026-10-29 17:46:12 +08:00
2026-10-30 04:15:54 +08:00
2026-10-28 10:12:57 +00:00
2026-10-27 03:05:15 +08:00
2026-10-30 04:18:09 +08:00
2026-10-30 05:11:06 +08:00
2026-10-30 05:11:06 +08:00
2026-10-27 19:10:49 +00:00
2026-10-28 11:09:29 +08:00
2026-10-30 02:46:37 +08:00
2026-10-27 05:40:30 +08:00
2026-10-27 01:44:53 +08:00
2026-11-02 03:30:57 +00:00
2026-11-01 19:01:39 +00:00
2026-11-02 03:30:57 +00:00
2026-11-02 03:30:57 +00:00
2026-10-27 15:53:50 +08:00
2026-10-27 15:53:50 +08:00
2026-11-04 18:02:21 +00:00
2026-11-04 18:01:44 +00:00
2026-11-04 18:02:21 +00:00
2026-11-04 18:01:44 +00:00
2026-10-29 05:41:35 +08:00
2026-11-04 17:11:23 +01:00
2026-10-26 23:17:25 +08:00
2026-10-27 16:27:50 +00:00
2026-10-26 02:46:10 +08:00
2026-10-27 15:35:23 +00:00
2026-10-26 16:47:55 +08:00
2026-10-26 06:46:20 +08:00
2026-10-29 23:16:01 +08:00
2026-10-30 14:46:11 +08:00
2026-10-27 15:35:23 +00:00
2026-10-30 07:15:05 +08:00
2026-10-30 07:08:51 +00:00
2026-10-30 06:00:31 +00:00
2026-10-27 16:37:28 +00:00
2026-10-30 06:33:25 +00:00
2026-10-27 23:09:22 +08:00
2026-10-27 04:30:43 +08:00
2026-10-27 04:40:11 +08:00
2026-10-29 06:32:38 +08:00
2026-10-27 03:17:51 +08:00
2026-10-30 05:11:06 +08:00
2026-10-30 02:25:48 +08:00
2026-10-30 00:39:13 +08:00
2026-10-28 11:14:10 +08:00
2026-10-28 11:25:17 +08:00
2026-10-27 12:58:24 +08:00
2026-10-29 06:32:38 +08:00
2026-10-26 07:24:54 +08:00
2026-10-28 04:56:22 +08:00
2026-10-27 16:37:28 +00:00
2026-10-28 05:36:18 +08:00
2026-10-28 06:10:02 +08:00
2026-10-28 04:33:20 +08:00
2026-10-30 05:11:06 +08:00
2026-11-04 18:02:20 +00:00
2026-10-30 14:46:11 +08:00
2026-10-26 01:23:21 +08:00
2026-10-30 01:16:49 +08:00
2026-11-01 14:15:54 +00:00
2026-11-01 14:15:54 +00:00
2026-10-30 01:16:49 +08:00
2026-11-01 14:15:54 +00:00
2026-10-26 06:46:20 +08:00
2026-10-27 14:12:28 +08:00
2026-10-28 11:25:17 +08:00
2026-10-30 14:46:11 +08:00
2026-10-30 01:38:01 +08:00