| Age | Commit message (Expand) | Author | Files | Lines |
| 16 hours | docs: record the fourth property and the contacts command | Danilo M. | 4 | -33/+170 |
| 16 hours | test: make the offline resolve check tamper-evident | Danilo M. | 1 | -0/+7 |
| 16 hours | test: prove the suite still opens no socket | Danilo M. | 1 | -0/+76 |
| 16 hours | fix: keep ":" literal so an IPv6 query is not over-encoded | Danilo M. | 2 | -10/+34 |
| 16 hours | feat: add the contacts subcommand | Danilo M. | 2 | -1/+126 |
| 16 hours | fix: percent-encode the component interpolated into an RDAP query | Danilo M. | 2 | -2/+112 |
| 16 hours | fix: refuse an ipv6 scope id, and say why a value was refused | Danilo M. | 2 | -11/+112 |
| 16 hours | fix: validate a query host at the one point a query is admitted | Danilo M. | 2 | -1/+152 |
| 16 hours | test: make two rdap tests able to fail, and cover the hostile bootstrap | Danilo M. | 1 | -2/+106 |
| 16 hours | fix: treat the IANA bootstrap as hostile, not as trusted input | Danilo M. | 1 | -9/+60 |
| 17 hours | feat: resolve the worklist to abuse contacts | Danilo M. | 2 | -0/+186 |
| 17 hours | feat: build the contacts worklist, host only | Danilo M. | 2 | -0/+221 |
| 17 hours | docs: correct the Accept header and the dependency claim | Danilo M. | 2 | -6/+11 |
| 17 hours | docs: amend the contacts plan after task 1 to 5 | Danilo M. | 1 | -4/+26 |
| 17 hours | feat: query RDAP, walking up the labels for a registrable domain | Danilo M. | 2 | -0/+133 |
| 17 hours | feat: read abuse addresses from a jCard, strictly | Danilo M. | 2 | -0/+172 |
| 17 hours | feat: select an RDAP server by longest prefix and by TLD | Danilo M. | 2 | -0/+103 |
| 17 hours | feat: cache the IANA bootstrap, and prefer a stale copy to none | Danilo M. | 2 | -0/+132 |
| 17 hours | feat: add the RDAP transport, with a redirect cap and no downgrade | Danilo M. | 2 | -0/+128 |
| 17 hours | docs: plan the contacts implementation | Danilo M. | 2 | -4/+1989 |
| 17 hours | docs: spec the contacts subcommand | Danilo M. | 2 | -0/+349 |
| 33 hours | docs: record the real-mail sweep and open a backlog | Danilo M. | 2 | -0/+78 |
| 33 hours | feat: report List-Unsubscribe urls and a differing Sender | Danilo M. | 4 | -2/+53 |
| 33 hours | feat: flag an address spoofed into a display name | Danilo M. | 2 | -1/+64 |
| 33 hours | fix: take the sender domain from the address, not the display name | Danilo M. | 3 | -4/+38 |
| 35 hours | fix: prefer the observed address over an attacker's HELO literal | Danilo M. | 2 | -9/+49 |
| 35 hours | fix: re-bracket an IPv6 host when stripping URL userinfo | Danilo M. | 2 | -2/+24 |
| 35 hours | fix: redact a valueless query token whole, not as a kept name | Danilo M. | 3 | -5/+63 |
| 35 hours | test: wire leaky.eml into the anti-leak suite (red, defect 2) | Danilo M. | 2 | -1/+29 |
| 35 hours | docs: AGENTS.md, with CLAUDE.md pointing at it | Danilo M. | 2 | -0/+259 |
| 35 hours | docs: README covers init and parse | Danilo M. | 1 | -10/+83 |
| 35 hours | fix: validate each setup answer at the prompt that asked for it | Danilo M. | 1 | -34/+101 |
| 36 hours | feat: command line for init and parse | Danilo M. | 3 | -0/+401 |
| 36 hours | feat: first-run config builder | Danilo M. | 2 | -0/+480 |
| 36 hours | fix: reject non-list relays and empty cases values | Danilo M. | 2 | -2/+49 |
| 36 hours | feat: read and validate the config | Danilo M. | 2 | -0/+174 |
| 36 hours | refactor: one URL scan serving both the report and the flagging | Danilo M. | 1 | -29/+24 |
| 36 hours | feat: assemble IOCs in the manifest's shape | Danilo M. | 2 | -0/+168 |
| 36 hours | feat: case directory with an atomically written manifest | Danilo M. | 2 | -0/+234 |
| 36 hours | feat: extract URLs and attachment hashes, fetching nothing | Danilo M. | 2 | -0/+181 |
| 36 hours | feat: extract sender domains and auth verdicts | Danilo M. | 2 | -1/+100 |
| 36 hours | feat: walk the Received chain to the trust boundary | Danilo M. | 2 | -0/+182 |
| 36 hours | fix: redact fragment and strip userinfo, flag hidden query in path | Danilo M. | 2 | -11/+111 |
| 36 hours | feat: redact recipient identifiers inside URLs | Danilo M. | 2 | -0/+211 |
| 36 hours | test: fixtures for the parser, documentation ranges only | Danilo M. | 4 | -0/+81 |
| 36 hours | feat: package skeleton | Danilo M. | 3 | -0/+45 |
| 36 hours | plan: add Namecheap Private Email to the provider table | Danilo M. | 1 | -0/+26 |
| 37 hours | plan: take the provider ranges from SPF, not from memory | Danilo M. | 1 | -16/+88 |
| 37 hours | plan: implementation plan for init and parse | Danilo M. | 2 | -2/+2404 |
| 37 hours | spec: retry deferred destinations from cron, not by hand | Danilo M. | 1 | -12/+123 |