aboutsummaryrefslogtreecommitdiffstats
path: root/docs/BACKLOG.md
AgeCommit message (Collapse)AuthorFilesLines
39 hoursfeat: ask for the reporter identity during initDanilo M.1-0/+28
Each answer is validated at the prompt that asked for it, and a skipped answer is absent from the file rather than an empty string. Two defects fixed beyond the plan, both in the carry-across rule. Sections build() does not produce are preserved verbatim, and that rule was written when [general] was the only section it produced. Emitting [reporter] as well made preservation emit it TWICE, and tomllib refuses a duplicate table outright, so the rewritten file became unreadable and took the preserved [misp] key with it. Dropping [reporter] unconditionally instead would have been the opposite defect: an init that skips all three questions would silently delete an identity set by hand. What is dropped is now read back off the rendered text, so it is what this run actually wrote rather than what it might have written, and a section added to the builder later cannot be forgotten here. The email check is deliberately not an RFC 5322 validator. What a typo costs is a report whose reply address bounces, and the answers that produce that are a name with no @ at all, a spelled-out "at", and a stray space from a copy-paste. Anything stricter starts rejecting addresses that work. Skipping the address is allowed but warned about at the prompt: it is the one field a report cannot be built without, since it becomes the From. report.build() raises a bare KeyError on that identity today, which the three prompts made reachable from a config file for the first time; logged as backlog item 5 rather than fixed here, because where the check belongs is the report subcommand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LByBnw83xr9YP85nskzkyE
2 daysdocs: log the unverified x-arf Report-Type valueDanilo M.1-0/+25
Every other field in the machine-readable part was checked against RFC 5965 itself. This one follows the design document's worked example and no primary x-arf source was reachable to confirm it, so it is recorded rather than left as an assumption in the code. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xj1ayFRSUQ2u7cwb3S4axE
3 daysdocs: point at the author's idea note, and log its first itemDanilo M.1-0/+42
The author keeps ideas in an Obsidian note outside this repository. Nothing in the repo pointed at it, so a fresh session would never find it and the backlog would look complete while ideas sat unread. AGENTS.md now names the path and the rule: the note is the inbox, the backlog is the tracked list, and they are reconciled in both directions. Item 3 is that note's one open idea, an API letting qtmaildir tag incoming mail by resemblance to a kept case. It is recorded unsized and explicitly marked as having no verified cause, because unlike items 1 and 2 there is nothing built to verify. The entry records the real tension rather than just the request: this tool has been deliberately mechanical, reporting what a message declared and refusing rather than guessing, and a resemblance score would be its first opinion. It also notes that source.eml is unredacted, so matching must not become a route by which a stored recipient identifier reaches a comparison. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wrfqr2xqQfhtXCscU7zrdz
3 daysdocs: record the fourth property and the contacts commandDanilo M.1-0/+29
An RDAP query discloses what the user is looking at, and property 1 covers only what is published, so the query rule needed stating in its own right beside the other three. The section records the three leaks it came from, because each one was the same shape: validation applied per branch, forgotten on the next. Also moves rdap.py's imports into one block at the top. Pure move, the suite is 192 either side of it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wrfqr2xqQfhtXCscU7zrdz
3 daysdocs: record the real-mail sweep and open a backlogDanilo M.1-0/+40
A synthetic fixture only ever holds the shapes someone thought of, and the shapes nobody thought of are the ones that leak. Sweeping the user's own tag:spam is the only source of those, and it earned its place: the first message found a header the parser did not read, and the corpus exercised a spoofed Reply-To display name no fixture had. AGENTS.md records it under Testing, beside the fixture rule it is the deliberate exception to: ask first, work from the scratchpad, compare every address in the raw source against the whole ioc output, and let only counts and stripped domains out. A finding becomes a synthetic fixture; the real message never enters the repository. BACKLOG.md opens with the one thing the sweep found that was not worth fixing blind: boilerplate namespace urls (w3.org doctypes) reported as indicators. Noise rather than a defect, and the argument for leaving it alone is real, so it is written down with both sides rather than built. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019NHaqA1Rz5ybed7wFUeQbK