handoff: Phase 3 complete (all production .cs <= 500), push pending for A-E + docs
Rewrite HANDOFF.md: Phase 2 is pushed at 1f4624c (stale claim corrected);
Phase 3 commit rows A-E + Controls/index.md listed as local-only, push pending
on explicit approval. Records the re-structuring principle (split by concern,
500-line count is a ceiling not the goal) and the session's truncation-accident
lesson. MyMistakes.md gains the never-awk-into-the-source-you-read rule.
This commit is contained in:
@@ -44,3 +44,26 @@ packages, high-quality downscale via `TransformedBitmap`. Screenshots compress
|
||||
4. Point `README.md` at the `.jpg` (not `.png`).
|
||||
|
||||
**Result:** 3.2MB screenshot → 1400×794 → **188KB** `ytLlive-preview.jpg` in `docs/`.
|
||||
|
||||
---
|
||||
|
||||
## Splitting a large file into partials — NEVER `awk … > SRC` while awking SRC
|
||||
|
||||
(2026-08-31, Commit D) Tried to split `SocialsDialogViewModel.cs` in one line:
|
||||
`{ awk '…' SRC; echo ""; awk '…2…' SRC; } > SRC`. The **first write truncated
|
||||
SRC to 1 line**, so the second `awk` read the already-truncated file → the whole
|
||||
source was lost (1 line left). Recovered with `git checkout -- SRC`, then redid
|
||||
it, but the same bug could have meant making it up from scratch.
|
||||
|
||||
**Rule:** when a cut needs N blocks from one source into N files, never write a
|
||||
block back onto the source that the `awk`s still read. Instead:
|
||||
1. Read the source **once** at the start into temp files (`mktemp -d`, one file
|
||||
per block), with a `$D` variable you carry forward.
|
||||
2. Verify block sizes (`wc -l`) and brace balance (`python3 -c` counting `{`/`}`)
|
||||
before touching any real file.
|
||||
3. Then assemble each new file from `cat D/block …` — never truncating the source
|
||||
until every read is done.
|
||||
|
||||
`git status` can't save you here if you don't notice until the file is gone —
|
||||
`git checkout -- <path>` from the last commit is the recovery. Cheap insurance:
|
||||
restore-then-retry, do it atomically from temp files the first time.
|
||||
|
||||
Reference in New Issue
Block a user