{"number":128,"title":"oxy doctor checks the trust policy (#127)","body":"Closes #127 (reported by RSTAR: `oxy doctor` said \"Everything looks right\" in a checkout whose every fetch warned \"no trust policy; nothing fetched from it was verified\").\n\n`oxy doctor` gains a **trust** line:\n- **no policy** → Warn: \"no trust policy: changes and bookmark moves fetched here are not verified\", hint: the repository's owner runs `oxy policy init`, `oxy policy grant FILE` per contributor, `oxy policy grant-subject --issuer HUB_KEY agent:NAME@ACCOUNT` per keyless agent, then `oxy push`;\n- **policy** → Ok: \"policy #… serial N: R roots, M rules, expires in D days\"; Warn within 30 days of expiry; Fail once expired; Fail if it doesn't load.\n- In `--json` like every check.\n\nSpec §21.2 and the guide updated. Test: `doctor_names_problems_and_what_to_do` covers no policy (Warn with the hint) and a fresh `policy_init` (Ok, serial 1, 1 root). Gate green: fmt, clippy, 390 tests.","author":"andymccall","state":"landed","target":"main","source":{"kind":"bookmark","bookmark":"doctor-trust"},"changes":[{"hash":"ad2496f7e608641053085dd305d3a7e821d7aaebf4ca47f5a4b170837437af85","message":"oxy doctor checks the trust policy\n\nA repository without one was 'Everything looks right' while every fetch\nwarned that nothing was verified. Now a trust line: no policy is a\nwarning naming who sets one and how; a policy shows its serial, roots,\nrules and expiry, warning within 30 days and failing once expired.\n\nCloses #127","author":{"name":"Andy McCall","email":"mailme@andymccall.co.uk","key":"4cd9916c150f426895a390868c6999314e0ef4955d657f30d2805647c747fc65","account":null,"note":"signed by a key not linked to any account; its owner links it under Settings → Keys (/settings/keys)"},"when_ms":1792419963096,"deps":["387335ff7f4d4a02548c947b566d78f3f9d3a748f58e81dbe47d491b10609a0b","3e5772ccf9daacd64ace802c1885630b75e7a38812e9dec982bd62e473b8cca3","982864068a598f2092b46c1fc9f1a9d4ea3f078266fadede4e710f76109dd5db","c863c7a7a2d14078197b5c87df8250057cc367a60ddf08b97988f1bcf27a41c1","ee06a6c557b7207430d0e0ddb398c8f4bfbbefc691cce83d4ba98d4fece2f58d","ff0af1ee299d64b3ca59b3a9f70da9645e199e3e13c338c2c29a4fb300939220"],"head":false,"signature":{"status":"valid","key":"2c2ee26d69a7f0048018c0b539b16d366e2e7726ec34696ea79bddad0e4f2c8b","sealed":true,"revoked":false},"via":{"name":"agent:claude@andymccall","key":"2c2ee26d69a7f0048018c0b539b16d366e2e7726ec34696ea79bddad0e4f2c8b","scope":"changes,refs,seal","expires_ms":1792420563742,"revoked":false}}],"projected_heads":["0912a0337a955864e1038da409ef794f111dd80f7fc7b050c989c74d588a4600","0a45ba84393a414958a777d344221d68fcd00cf1ae560dbdccb5a8b3c92dbb01","11c958021e1ac07456b98ec07bdcba77fca6d8e957276082c97b73257c9b834d","11e2b98a3a3991fea689a5458f7fb26b249dc6067d5cea967af0581fc7171818","141b1fb2ebe91e4ebe083fbe919785bab6cd42ad4a597c3e06e879d5f738dde9","192b06f8c6d08f8262d1f550300caeb08718a479c604d2fcae14427a7841c58f","2cd6bf89adb40edea6e55e0254b24e00c44f47e9b7b6b5901d223d5665000788","30644f1ecb7b499d52f0c882211bffea40b8a2f1273a54c8faec1ff05d80d2ac","30d5fac7560dea15f032e006ddd6d00a693ff81a8b1eb33875be65836fee74c2","30fc48081b941a61eb77e97b8e816a5458716fea7019ec9295e3f3525864269e","3652104ae7d3a03e79396c304e66cec0b979896bb6be16e45c7f74d327b52d5e","37f1914b62a82076d723fc4ece9a6ab745908f160d5842dfecf8d5e6bf307ae4","396891fd2dda456eea4460d8a1c83c852873c64254fb6cffc862b98387991850","3a4b3e01832633d68dc6f1bcfbff0abfedecf2dad03daa1d8b49513c316d3d74","3d7120efe04a01af36050193cedae1e21359375635e20b5f348974f387a16312","44f1ebe7aa5b73866f02f4194eb0d41266d4d7f4d47486b63ba9c78f7e1f58ae","4afab467e35f35023c84f531f79824cb10e31c242baa279de8b934177f8c84f1","4f22a8fd0ed4632a2791f76e2ff490f6331a911135a90c8c07832452755ace05","51d4862a16d8de259898ae8d07a48ad1887fc810ee30de0e46b1cddaa8f6e95e","543bbf64d127d15e7be2d6692d8f5c8e155f48cc555c4f53dbaf89f07957e749","5ad2b56544c58c4ae28564f1e8bc6758eaabb4b97ae37d2c6304a65d1e5e155e","5f661562b3a40a970261ee737f225c646ce7f918bdac7ad5d8b2ccde1bde8f53","60a1223c894fc10e022c0ce16abdbdf27064ca478400353c117f8d8f70caf951","68dcf21fe055a74837d05b252985fd4b9fecf236720f013ada16a50516e9c5be","733ea16a97015ecb5ff67ee729582786169fbcd577e3e27cfc9392d23e2daae7","73d592e763abec60d9d504caf0407322a8401fdf2fd9c4c8dc9aa5d26f1fd4ce","74b4a3c62ea49a14291109dfc144c7f840f6af35c6a9e8f150ce53528fdf6e04","767ac6cd0545ed1a1ef3f45bbfdd1bebcff222df95616f20491d0bb68c188570","7df9007b163c8b03c6f89e9d1b93aab6d66f76d5f18f51b41746a1f845a2a25a","8177f8177a07410928f06692eeb2ffb9d53c5949c4a9ed99cfb1770dadb8ccb5","82739cfbafe29cdcabc52aee6ffe481a2a6ae7c7565707e9636452c0a21c11ce","8349c327fe830af77bf0a837f70ad5dee39ef26819619b06be67aeb3b8364165","87322662f6071da6c4163ee07cbafab7424b9095628ff14cd67ccbf6e290575c","89a1d0243544537006a3c66ba182443c1c6edfbdb8b68ef29a97d19b2bef0aab","8b7986dd3cb0152e7e433b24701abaea443209e81be3effd7cdcb6457431b5ce","8d6cf1f236944bd170021f69e38430235045d604941dc4aff5814a6feeadea7e","8e9c64d16ded10f83455c73635f23906f0098ce76eb0760b15fed866715a1e00","930e5f3f16823c4b878fd19597948548f9a8f9b6c75080b3524a08b900e01892","94cdbc576ce181f578a696089134a0c52f5d91057d9e80c8553d9ea4d889a0f2","99cdbaeea274a3fb2e503f36fb928dea63ba2cc9dd5c7b2d790de467397d9983","99e3e0af08df756ceeb08da32e0c1d5aed950cb1606339cdc94a8295a4691cf9","a451982b1d34e567b7200db20846faf5a3d8fa1497159efffb3a66f905d35b47","abaa8d517631ec656cc019738283b6c4dceeea9b6f9e1d8423936b8dbd5c4daa","ac4af91530fc84e9bf7046bc313a902afa2b07d6c5226db2c51e959baa3509d9","ad2496f7e608641053085dd305d3a7e821d7aaebf4ca47f5a4b170837437af85","adec9a0796b863e2dc79a20917011fd4e5bd733068b0bfe54bf7a441a2fe526b","b0a0c9afae2d5c2af470c2ce8a932d5e7438b2416e7bcc929214d0c873f17938","b288cd254343a8c981e7c891d9cbd4472d208a1cb643e9be69c71c479b4c3fa8","b2ef93bb2366af7658bb16e7663d67b55087f3221ba2f43f16e15fa31bb6ec21","b4fa2bc1ca6aabed7a2a89cc41b8d9b83993164eba99008d2a1bd74374784dce","b9bf7eec1f2d11a8260d422b2f8d03c74572b0fa2b0b87784f13a98ad17dd2ff","bbe654f95806a1c7a59671d7bef45801e5b12398161b48ea42733a257d74b4f7","bd40c0e3feba0e8a9a7fb13ced437383733b0535c26067228111e20bd668b567","bd445775b94e79c197aace767807c4c63d7b11e1dcce111cd1bb20656dbff36b","bdd894b548e4a5754c62fb1342a480eb0d7a5d411935bb3567d8caa991ea10db","c2e1d09047db8ed90b2f4ccf0bcdb26a2b1f5df68962ee04b5fa914604ac8112","c6e69e4b8d8f6fe6e7bec5dabc9d471c19c32bc457e05de8975a45100349af44","c96354484bd96287c36037349c6bd02e0018bf790bfc04663f8c4efb894d0c13","d2e3c39da1b150343bde2a7956571b058c46a912286fba8dfa73285b02f2b3f3","d36ba2f79f959ad0e4a2264335c3c2971913fe5fade9d39441c99ec1b27b755a","dfe1658773454ebdcebc24bf1492064f02ff2dfdd0c44dc3c221bf847133cd07","e0d56dfca51d391b5cdf8acd3bc3ce489c307dfac17b865a48462d93380114e6","e5f8920bc8d0acad095a8d2b3b747481bd148e01456a7505967158dbff1fae8d","e8c8b34d8348f3bda78b1d5ef63e8b19d929c6a55e0d0974876e96e928650096","ef26f9a287909e999d87d7aa269e357d85c99115ddea145f9f4a20ab61f379ee","f0406c3b40ed1bbaa0b43a820106cf033f1c636d9805b06882d4bb0f2a8406d2","f57bf6702628cfd73668d771071a01c34e4a363eb9029e74b434799743df934b","faa9cd0579d37845979389ccc2816e166c7907359a3975e23942dd8f7634f252"],"projected_state":"84131a3dba53e55438d2014675cfa9288eac34d6bcaeaa9675e69e4e8f5e1e03","conflicted":false,"approvals":[],"landable":false,"blockers":[],"created_ms":1792419975094,"updated_ms":1792421667966,"url":"https://oxygenhub.io/andymccall/oxygen/proposal/128","repository_url":"https://oxygenhub.io/andymccall/oxygen","source_url":null,"landed":{"by":"andymccall","via":"push","when_ms":1792421667966},"auto_land":null,"requested_reviewers":[],"labels":[{"name":"gap","colour":"#8592ad","description":"Found by using the platform for real"}]}