chore(kb): record the force_the_failure doctrine
Four findings on this branch were the same shape: an unchecked status on an operation whose failure produces a usable-looking value rather than an error, so the next line carries on and the whole thing reports success. bd init exits non-zero but still leaves an empty database behind mv unchecked, so the new tracker lands INSIDE the old directory jq status swallowed by a process substitution, reads as "no inputs" mktemp empty TMP turns "$TMP/$NAME" into a path at the filesystem root Reading the failure paths found none of them, because each one reads plausibly. Forcing the failure found all four: stubbing mv and mktemp is what exposed the last two. The fact also records that chmod a-w proves nothing when the tests run as root -- that attempt returned 0 and looked like a pass, which is the same failure mode one level up. Sits alongside check_the_checker, which says the same thing about checks rather than about error handling. Verified with trealla from the flake's own pinned nixpkgs, which the seeding script on this branch makes reachable: kb_consistent passes, the new fact is queryable, and an injected bad layer/2 still trips kb_report -- so the check is not passing vacuously. 19 doctrine facts now. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DyHK7L8S1XDX3EihTnSKaX
This commit is contained in:
@@ -548,3 +548,6 @@ kb_issue_found(duplicated_active_view,'adding ViewState::active_view created a s
|
||||
work_done('improvise-cqi',feature,'crates/improvise-protocol created. ViewState, ViewCursor, ViewFrame, AppMode, Panel, MinibufferConfig, MinibufColor, HELP_PAGE_COUNT and the key types moved there; improvise-command re-exports them so no caller path changed. Command + reduce_view + RenderCache/CellDisplay/Snapshot added with 15 tests. Added to the CI wasm job.').
|
||||
work_unblocked('improvise-cqi','improvise-gxi','reduce_full can now live in improvise-command taking a protocol Command, with no cycle').
|
||||
doctrine(derive_the_enum_from_the_effects,'when a wire vocabulary must mirror an existing mutation set, enumerate the mutations and let that be the enum; inventing variants ahead of the mutations produces a protocol nobody can implement against').
|
||||
|
||||
% ── Cloud-session tooling (PR #7) ───────────────────────────────────────────
|
||||
doctrine(force_the_failure,'an unchecked status whose failure yields a usable-looking value is not a style nit: force the failure and look at what the next line does with it. Four on one branch -- bd init exits non-zero but still leaves an empty database behind, an unchecked mv lands the new tracker INSIDE the old directory and reports success, jq status swallowed by a process substitution reads as "no inputs found" and exits 0, and a failed mktemp turns "$TMP/$NAME" into an absolute path at the filesystem root. Every one looked like success at runtime, so reading the failure paths found none of them; stubbing mv and mktemp to fail is what exposed them. Note chmod a-w proves nothing when the tests run as root -- it returned 0 and looked like a pass.').
|
||||
|
||||
Reference in New Issue
Block a user