Email me
Progress update, 21 Aug 2026
← Automating Garage Dreams

· Update · AI summary

Progress update, 21 Aug 2026

A short bullet-point summary of project progress up to 21 Aug 2026.

Updates are bullet-point summaries generated with AI from my commits and build notes, then checked by me. Project articles and learning notes are written by me.

  • The finding of the session: a green rollback suite that had never rolled anything back. Twenty-four passing tests, and every failure case aborted during validation, before a single byte was written. Undoing nothing always succeeds. Added a seam that injects a failure mid-batch and tests that assert every article is byte-identical afterwards, rather than merely that something threw.
  • Cloud sync had renamed two tracked files, leaving them as deletions with byte-identical (1) twins beside them. Both are named by the build or the test script, so three gates would have failed and every failure would have read as a defect in the new code I was about to commit. Confirm the tree is the tree you think it is before believing a gate failure.
  • git diff --cached --stat caught a test fixture staged as Bin 0 -> 10214 bytes: a literal NUL byte written where the escape \u0000 was meant. Two other fixtures held literal zero-width characters, which are valid UTF-8 and would not have tripped the check at all, while being invisible to every reviewer. Control characters get written as escapes from now on.
  • Sharp refused an oversized image from inside the metadata read, which made the explicit pixel-count check unreachable and left “could not be decoded” as the only reportable cause. Judging the declared dimensions first refuses the image before a pixel is read and names the real reason. The decode limit stays as a backstop for a header that lies about its own size.
  • Image shape is judged after EXIF orientation is applied, not before. A portrait photograph tagged sideways is still a portrait photograph.
  • Article titles reach the image prompt, so they are treated as data: the prompt declares the fenced block non-instructional before the block appears, each fence marker occurs exactly once, and evidence containing a marker is rejected. The blocklist is documented as defence in depth behind the fence, not as the defence.
  • Made “do not invent specifics” checkable instead of merely intended. The fixed half of the recipe contains no year, model, trim or place, and a test asserts every number in a finished prompt traces back to the article. Editing the style block to mention an era now fails that test.