boshu
287c2797eb
feat(pawl): surface the embedded bundle stamp in ao pawl doctor — trust-honest (age-pawl-intent-zhndq.19)
...
F4 stamped the embedded pawl bundle with a deterministic content hash; this surfaces it in
`ao pawl doctor` so the landed!=installed class (an installed ao silently running OLD pawl scripts —
it bit this very session) is diagnosable.
THE DESIGN IS THE LESSON. Two cross-family codex refutes killed the obvious implementation:
round 1 — I hashed any repo containing scripts/pawl-*.sh and reported STALE. A stranger repo with
same-named files would be falsely failed.
round 2 — I gated that on "identity markers" (the verdict schema + pawls contract). Codex refuted
again, correctly: FILE PRESENCE IS NOT IDENTITY. Every marker is attacker-controlled and
spoofable, so no marker list can ever make it safe.
The real fix is not a better marker list — it is a TRUST BOUNDARY. A staleness FAILURE must never be
asserted against a repo the binary does not trust. So:
- trusted dogfood path (untrustedRoot == "", i.e. the ao binary lives inside the checkout — the ONE
trust decision the whole pawl surface is built on): the LIVE scripts run in place, so there is
nothing to compare and nothing to warn about;
- untrusted/installed path: surface the stamp INFORMATIONALLY (so the operator can diagnose
landed!=installed themselves and rebuild), and assert NO verdict about a repo we cannot trust.
This is the honest feature, not a weaker one: the diagnostic signal is preserved while doctor cannot
be weaponized into failing on an untrusted tree.
Tests: TestPawlBundleStaleness — dogfood surfaces the stamp and never says STALE; an untrusted repo
is never reported STALE *whatever it contains*, including a repo that SPOOFS every identity marker a
naive check might have used.
Claude-Session: https://claude.ai/code/session_01RDWPYn4ZS2SyBkcBvAM18u
2026-07-11 19:49:05 -04:00
..
2026-05-15 15:42:37 -04:00
2026-06-16 17:42:09 -04:00
2026-06-22 01:24:02 -04:00
2026-07-08 19:01:58 -04:00
2026-07-10 20:44:30 -04:00
2026-07-01 02:28:07 -04:00
2026-04-19 10:37:58 -04:00
2026-06-22 11:18:16 -04:00
2026-07-10 22:12:53 -04:00
2026-07-10 19:30:53 -04:00
2026-07-01 18:27:08 -04:00
2026-07-09 12:20:53 -04:00
2026-07-01 20:01:11 -04:00
2026-07-01 19:07:52 -04:00
2026-07-10 21:29:10 -04:00
2026-07-04 17:46:24 -04:00
2026-05-22 12:09:28 -04:00
2026-05-30 00:37:21 -04:00
2026-05-29 20:03:37 -04:00
2026-07-07 08:23:13 -04:00
2026-06-27 11:46:36 -04:00
2026-04-26 05:40:22 +00:00
2026-06-18 20:15:29 -04:00
2026-03-14 02:27:41 -04:00
2026-05-28 01:55:18 -04:00
2026-05-21 00:37:27 +00:00
2026-04-15 15:53:15 -04:00
2026-04-15 15:53:15 -04:00
2026-05-28 17:19:15 -04:00
2026-06-07 09:51:03 -04:00
2026-05-23 22:41:56 -04:00
2026-06-26 21:39:46 -04:00
2026-07-01 19:13:55 -04:00
2026-05-17 09:56:32 -04:00
2026-04-26 23:04:10 -04:00
2026-06-04 08:09:24 -04:00
2026-06-17 10:45:32 -04:00
2026-06-16 16:38:48 -04:00
2026-07-10 22:12:53 -04:00
2026-06-05 02:45:53 -04:00
2026-06-12 18:47:14 -04:00
2026-06-12 15:50:41 -04:00
2026-06-13 13:19:19 -04:00
2026-07-10 10:52:06 -04:00
2026-07-06 08:51:12 -04:00
2026-07-10 19:30:53 -04:00
2026-05-01 09:01:35 -04:00
2026-05-13 22:55:54 -04:00
2026-07-09 12:20:53 -04:00
2026-04-22 04:56:28 +00:00
2026-06-23 09:41:56 -04:00
2026-06-23 09:41:56 -04:00
2026-04-26 19:32:13 -04:00
2026-05-26 08:19:50 -04:00
2026-07-06 08:50:42 -04:00
2026-07-08 19:01:58 -04:00
2026-06-15 15:42:05 -04:00
2026-06-04 14:11:55 -04:00
2026-06-22 14:46:37 -04:00
2026-07-10 21:43:21 -04:00
2026-07-10 21:11:45 -04:00
2026-07-10 20:04:31 -04:00
2026-07-01 19:23:34 -04:00
2026-05-12 15:31:37 -04:00
2026-07-09 12:20:53 -04:00
2026-05-16 12:10:12 -04:00
2026-07-01 18:39:34 -04:00
2026-04-22 11:43:15 +00:00
2026-07-11 09:23:37 -04:00
2026-06-03 19:09:36 +00:00
2026-03-07 10:55:11 -05:00
2026-04-04 20:56:17 -04:00
2026-05-12 19:09:20 -04:00
2026-05-26 08:19:50 -04:00
2026-05-05 06:50:20 +00:00
2026-05-04 06:44:06 +00:00
2026-06-16 18:05:30 -04:00
2026-07-07 18:58:33 -04:00
2026-06-11 08:52:28 -04:00
2026-04-22 06:40:46 +00:00
2026-07-11 13:25:12 -04:00
2026-07-11 10:32:22 -04:00
2026-07-02 10:08:52 -04:00
2026-07-01 18:31:23 -04:00
2026-07-09 12:20:53 -04:00
2026-04-17 07:04:54 +00:00
2026-04-17 07:01:48 +00:00
2026-05-02 10:00:53 -04:00
2026-07-02 09:23:55 -04:00
2026-07-10 23:45:18 -04:00
2026-06-13 23:15:53 -04:00
2026-07-10 20:15:37 -04:00
2026-06-16 23:25:23 -04:00
2026-07-04 10:07:06 -04:00
2026-06-21 18:19:23 -04:00
2026-07-01 16:53:26 -04:00
2026-05-24 11:19:37 -04:00
2026-05-26 08:19:50 -04:00
2026-07-10 20:27:32 -04:00
2026-05-04 06:47:34 +00:00
2026-05-28 20:44:39 -04:00
2026-06-15 15:59:32 -04:00
2026-07-10 10:52:06 -04:00
2026-05-21 12:21:51 -04:00
2026-06-17 16:48:21 -04:00
2026-07-10 10:52:06 -04:00
2026-07-10 10:52:06 -04:00
2026-05-29 16:48:30 -04:00
2026-06-25 21:24:02 -04:00
2026-05-02 08:15:51 -04:00
2026-07-11 14:46:41 -04:00
2026-04-17 07:04:54 +00:00
2026-05-20 23:57:47 +00:00
2026-05-31 12:49:54 -04:00
2026-07-01 18:45:32 -04:00
2026-07-01 17:41:51 -04:00
2026-06-17 07:32:11 -04:00
2026-05-31 14:07:45 -04:00
2026-05-11 09:35:49 -04:00
2026-06-06 10:17:12 -04:00
2026-05-18 14:19:16 +00:00
2026-05-03 10:28:07 -04:00
2026-06-19 22:00:07 -04:00
2026-05-18 01:14:33 +00:00
2026-05-02 18:46:12 -04:00
2026-05-16 09:43:08 -04:00
2026-05-02 14:30:37 -04:00
2026-07-09 12:20:53 -04:00
2026-07-10 21:29:10 -04:00
2026-07-10 21:03:21 -04:00
2026-06-23 10:23:34 -04:00
2026-05-20 23:27:12 +00:00
2026-07-07 16:30:13 -04:00
2026-03-07 13:26:49 -05:00
2026-06-16 09:00:47 -04:00
2026-07-10 10:52:06 -04:00
2026-07-08 07:53:30 -04:00
2026-06-26 21:12:24 -04:00
2026-05-19 10:52:40 +00:00
2026-07-09 10:45:45 -04:00
2026-06-15 09:01:21 -04:00
2026-07-10 10:52:06 -04:00
2026-07-10 10:52:06 -04:00
2026-05-27 23:22:53 -04:00
2026-05-02 19:16:48 -04:00
2026-05-03 11:27:43 -04:00
2026-06-25 09:54:23 -04:00
2026-03-05 07:32:07 -05:00
2026-05-08 14:08:40 -04:00
2026-07-01 17:22:50 -04:00
2026-07-02 22:39:47 -04:00
2026-07-01 18:56:43 -04:00
2026-05-31 14:30:28 -04:00
2026-06-07 23:06:34 -04:00
2026-06-12 18:55:00 -04:00
2026-06-13 14:20:45 -04:00
2026-07-06 08:51:12 -04:00
2026-06-07 18:52:05 -04:00
2026-04-15 15:53:15 -04:00
2026-07-09 12:20:53 -04:00
2026-06-05 02:24:15 -04:00
2026-05-19 13:44:32 +00:00
2026-06-26 16:04:45 -04:00
2026-07-10 10:52:06 -04:00
2026-04-26 19:32:13 -04:00
2026-07-01 18:39:34 -04:00
2026-05-07 12:03:22 -04:00
2026-03-04 14:47:23 -05:00
2026-05-20 19:28:45 +00:00
2026-07-08 23:29:25 -04:00
2026-05-20 22:28:13 +00:00
2026-06-30 09:25:16 -04:00
2026-06-17 22:04:03 -04:00
2026-06-22 06:11:21 -04:00
2026-06-22 09:33:16 -04:00
2026-06-17 16:35:00 -04:00
2026-06-17 07:32:11 -04:00
2026-06-10 11:29:06 -04:00
2026-07-01 18:39:34 -04:00
2026-07-01 18:39:34 -04:00
2026-05-04 15:04:20 -04:00
2026-07-04 10:10:00 -04:00
2026-07-01 18:39:34 -04:00
2026-05-02 12:15:11 -04:00
2026-05-28 17:19:15 -04:00
2026-04-26 05:26:56 +00:00
2026-05-16 10:25:08 -04:00
2026-05-02 12:15:11 -04:00
2026-05-13 23:23:05 -04:00
2026-05-13 09:21:00 -04:00
2026-03-07 14:40:31 -05:00
2026-05-20 23:57:47 +00:00
2026-05-20 22:07:16 +00:00
2026-05-28 05:01:18 -04:00
2026-07-06 22:03:33 -04:00
2026-05-31 12:43:43 -04:00
2026-07-02 00:46:05 -04:00
2026-05-26 11:41:38 -04:00
2026-07-08 21:52:31 -04:00
2026-07-10 10:52:06 -04:00
2026-04-13 10:50:44 -04:00
2026-07-02 10:55:15 -04:00
2026-07-10 10:52:06 -04:00
2026-06-13 13:19:19 -04:00
2026-05-24 20:47:04 -04:00
2026-07-11 10:24:44 -04:00
2026-05-19 10:52:40 +00:00
2026-04-11 14:09:00 -04:00
2026-06-21 21:58:09 -04:00
2026-05-24 12:29:22 -04:00
2026-07-03 00:09:11 -04:00
2026-04-12 23:40:17 -04:00
2026-04-26 19:26:04 -04:00
2026-07-03 00:09:11 -04:00
2026-03-18 16:19:51 -04:00
2026-07-04 12:30:18 -04:00
2026-05-24 11:19:37 -04:00
2026-06-08 00:38:35 -04:00
2026-07-06 21:49:04 -04:00
2026-06-16 17:43:57 -04:00
2026-07-02 16:29:46 -04:00
2026-05-04 20:03:54 -04:00
2026-03-02 06:49:16 -05:00
2026-07-09 12:20:53 -04:00
2026-06-12 18:47:14 -04:00
2026-07-01 23:49:12 -04:00
2026-06-15 23:29:23 -04:00
2026-06-27 10:46:45 -04:00
2026-07-06 08:51:12 -04:00
2026-06-27 10:06:16 -04:00
2026-07-02 13:47:31 -04:00
2026-06-27 10:06:16 -04:00
2026-07-02 13:47:31 -04:00
2026-07-02 09:23:55 -04:00
2026-05-20 21:56:07 +00:00
2026-07-08 10:17:12 -04:00
2026-03-04 20:42:38 -05:00
2026-03-21 21:46:38 -04:00
2026-07-02 16:42:02 -04:00
2026-07-10 23:45:18 -04:00
2026-05-15 07:21:34 -04:00
2026-06-16 10:36:32 -04:00
2026-05-03 19:16:06 -04:00
2026-06-23 09:31:33 -04:00
2026-05-03 00:22:41 -04:00
2026-06-15 15:41:43 -04:00
2026-05-02 12:18:55 -04:00
2026-05-31 12:35:00 -04:00
2026-07-10 19:30:53 -04:00
2026-07-11 14:32:40 -04:00
2026-07-11 19:32:24 -04:00
2026-07-11 19:49:05 -04:00
2026-06-26 07:44:19 -04:00
2026-02-27 07:25:00 -05:00
2026-07-01 17:22:50 -04:00
2026-04-29 15:16:30 -04:00
2026-05-03 19:16:06 -04:00
2026-07-10 19:30:53 -04:00
2026-07-08 07:53:30 -04:00
2026-03-22 16:04:52 -04:00
2026-03-08 11:05:33 -04:00
2026-05-19 10:52:40 +00:00
2026-06-07 10:46:26 -04:00
2026-06-21 22:30:31 -04:00
2026-06-16 17:19:47 -04:00
2026-03-24 10:09:27 -04:00
2026-03-07 13:26:49 -05:00
2026-07-02 10:51:45 -04:00
2026-06-19 11:06:14 -04:00
2026-06-17 10:45:33 -04:00
2026-07-07 08:23:13 -04:00
2026-07-10 19:30:53 -04:00
2026-05-03 23:00:11 -04:00
2026-06-19 22:00:07 -04:00
2026-07-04 12:30:18 -04:00
2026-05-28 20:44:39 -04:00
2026-05-17 01:06:53 -04:00
2026-05-18 01:14:33 +00:00
2026-06-07 09:51:03 -04:00
2026-04-13 10:38:41 -04:00
2026-07-09 12:20:53 -04:00
2026-05-19 13:44:32 +00:00
2026-07-01 18:39:34 -04:00
2026-05-20 22:15:50 +00:00
2026-05-25 11:23:43 -04:00
2026-07-10 10:52:06 -04:00
2026-06-07 18:22:34 -04:00
2026-05-11 08:57:38 -04:00
2026-07-01 23:49:12 -04:00
2026-05-31 19:51:07 +00:00
2026-07-02 13:48:18 -04:00
2026-07-07 14:04:22 -04:00
2026-06-06 12:39:15 -04:00
2026-07-10 10:52:06 -04:00
2026-06-05 01:00:52 -04:00
2026-07-07 11:24:45 -04:00
2026-05-20 19:39:18 +00:00
2026-07-01 18:39:34 -04:00
2026-05-26 08:19:50 -04:00
2026-02-27 07:30:52 -05:00
2026-06-16 16:38:48 -04:00
2026-05-03 19:16:06 -04:00
2026-05-07 19:42:29 -04:00
2026-06-08 01:27:21 -04:00
2026-05-06 16:41:07 -04:00
2026-03-07 11:59:18 -05:00
2026-05-07 17:50:17 -04:00
2026-07-10 15:01:55 -04:00
2026-06-06 11:23:49 -04:00
2026-05-21 01:05:02 +00:00
2026-07-09 12:20:53 -04:00
2026-07-10 10:52:06 -04:00
2026-06-19 22:34:07 -04:00
2026-06-12 09:49:02 -04:00
2026-06-03 21:22:18 -04:00
2026-07-01 18:39:34 -04:00
2026-03-24 10:09:27 -04:00
2026-07-01 18:39:34 -04:00
2026-07-10 10:52:06 -04:00
2026-04-01 13:10:42 -04:00
2026-04-03 09:33:31 -04:00
2026-07-08 13:28:13 -04:00
2026-07-01 01:44:09 -04:00
2026-04-24 21:45:15 -04:00
2026-07-08 12:25:39 -04:00
2026-06-18 20:15:29 -04:00
2026-04-01 13:10:42 -04:00
2026-05-15 16:32:48 -04:00
2026-06-25 21:46:01 -04:00
2026-07-10 19:30:53 -04:00
2026-06-20 10:49:10 -04:00
2026-06-07 12:38:23 -04:00
2026-03-08 19:36:32 -04:00
2026-03-08 22:39:09 -04:00
2026-06-04 16:38:57 -04:00
2026-07-02 11:08:23 -04:00
2026-07-02 11:08:23 -04:00
2026-05-30 07:07:36 -04:00
2026-05-17 01:46:45 -04:00
2026-06-13 20:05:54 -04:00
2026-05-18 01:14:33 +00:00
2026-05-25 11:23:43 -04:00
2026-05-02 20:10:30 -04:00
2026-07-08 17:33:46 -04:00
2026-07-08 17:33:46 -04:00
2026-06-13 13:19:19 -04:00
2026-07-02 10:47:03 -04:00
2026-05-12 10:35:30 -04:00
2026-03-07 13:26:49 -05:00
2026-03-07 12:14:08 -05:00
2026-07-01 00:26:41 -04:00
2026-06-18 13:15:32 -04:00
2026-05-24 20:47:04 -04:00
2026-05-21 00:48:38 +00:00
2026-04-15 16:48:17 -04:00
2026-06-12 18:47:14 -04:00
2026-07-06 19:04:00 -04:00
2026-05-23 00:54:37 -04:00
2026-07-10 19:30:53 -04:00
2026-06-12 09:49:02 -04:00
2026-06-22 05:44:05 -04:00
2026-05-16 09:43:08 -04:00
2026-05-31 14:39:13 -04:00