Decisions

Numbered, append-only, cited from source by number. A decision here is a choice that constrained something afterwards - not a summary of what the code does, which the code already says.

The same discipline as the sibling projects: if a citation in a comment points at a number, this file explains it, and a number that duplicates another makes every citation of it ambiguous.

D016-D024 carry no date. Dating stopped after D015 (2026-08-26); those entries were made on or after that day and nothing narrower is recoverable. Entries after them carry one.

This table is generated. Edit an entry under decisions/, then run tools/split-decisions.sh --index prosperous. A number resolves to exactly one file.

# decision status date
🟢 D001 Prosperous exists, and it is a library with two consumers decided 2026-08-25
🟢 D002 A target's answer is read on its own terms, and a refusal is not a failure decided 2026-08-25
🟢 D003 The fake blocks on accept and knocks to stop, because polling was measured and was terrible measured 2026-08-26
🟢 D004 What cannot be checked is refused by name, in both places it comes up decided 2026-08-26
🟢 D005 The command line holds nothing, and its exit codes are part of what it holds decided 2026-08-26
🟢 D006 Continuous integration runs the one dev command, and nothing else decided 2026-08-26
🟡 D007 The target is a manifest source, and the path is asked for rather than assumed assumed 2026-08-26
🟢 D008 The frame grabber is a resident payload with its own port, and its protocol is written down before it is built decided 2026-08-26
🟢 D009 The window matches orbistoun's, deliberately, down to the version decided 2026-08-26
🟢 D010 Two more columns, and neither of them may lie about what was not looked at decided 2026-08-26
🟢 D011 The library, backups, and what a copy has to promise decided 2026-08-26
🟢 D012 The window is a sidebar of sections, and streaming is somebody else's program decided 2026-08-26
🟢 D013 A target answered, and three guesses became measurements while two rules turned out wrong decided 2026-08-26
🟢 D014 Downloading is built, because a target handed over digests to check it against decided 2026-08-26
🟢 D015 Names come from the target, and are never invented decided 2026-08-26
⚪ D016 The manifest format is one tool's file, and port is ours unrecorded ~2026-08-26..08-30
🟢 D017 Five lists, one mechanism, and what an honest list can contain measured ~2026-08-26..08-30
⚪ D018 A save transfer decides before it moves anything unrecorded ~2026-08-26..08-30
⚪ D019 The first write to a target, and what it had to earn unrecorded ~2026-08-26..08-30
🟢 D020 What the target is, measured rather than looked up measured ~2026-08-26..08-30
🟢 D021 Package installation was a shell builtin, not a service measured ~2026-08-26..08-30
🟢 D022 This project sends and supervises; it does not drive hardware ~2026-08-26..08-30
⚪ D023 Two pad models, on purpose unrecorded ~2026-08-26..08-30
⚪ D024 Three ways to make something run on a target, and three buttons unrecorded ~2026-08-26..08-30
🟢 D025 pros-link takes the logging facade, and the empty dependency table goes decided 2026-08-30
🟢 D026 The window ships its own manual decided 2026-08-30
🟢 D027 Process control is prosperous work, not obSCEne's decided 2026-09-04
meaning
🟢 settled, and the reasoning rests on something checkable
🟡 assumed or proposed - made without input, and in the review queue
🔴 reversed, superseded or blocked
⚪ no status recorded

A date with ~ is not recorded - it is worked out from the dated entries either side, because an entry between two of them was written between their dates. ~ alone is a day both neighbours agree on; ~a..b is a span, and no day inside it is claimed; ~>a and ~<a are entries with a dated neighbour on only one side. A bare - has no dated entry either side to reason from.