diff options
| -rw-r--r-- | ASKLIST.md | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -10,6 +10,46 @@ transcript with nothing removed. --- +## Follow-up: found after that session + +Not part of the session transcript. These came out of the `src/` and history +cleanup that followed, and they are now blocking work. + +### `make` cannot bootstrap from a clean checkout + +**Written up in [`docs/BOOTSTRAP-OWNERSHIP.md`](docs/BOOTSTRAP-OWNERSHIP.md)**, +linked from `docs/BORROW.md`, with a TODO entry. Reproduce with +`bash src/tools/bootstrap-check.sh`. + +The second bootstrap stage runs the lifetime checker over the compiler's own +source and reports 8 errors, so `bin/mkgenome` reads the diagnostics as if they +were an image: + +``` +mkgenome: input is not a genome for this map +``` + +Two ownership completeness limits are responsible: + +1. **No move between two locals.** Every accepted move originates at a call + (`m*rt.new(...)`, `m*inc_open(...)`, `chk_resize(...)`). An owned value held + in a local can be disposed with `d*`, but cannot be handed to another local, + and cannot replace one. The documented `rt.free(buffer); buffer = + replacement;` rule only fires when the replacement comes from a call. +2. **A local cannot be lent to a global.** Redirecting the output stream at a + scratch buffer is a borrow, but every spelling is a transfer, so the buffer + must live at module scope — which costs reentrancy safety. + +Neither limit accepts an unsafe program; both refuse correct ones. So it is a +completeness gap, not a soundness bug. A verified partial fix (promoting the +scratch buffer to a module global, the existing `sgb` idiom) removes 5 of the +8 errors. + +Also found along the way: `lookup_raw` compared against `K_VAR`, a constant that +was never declared, so `make genome` could not run at all before that. + +--- + ## 0. Standing instructions (apply to everything) ### Commands must be single-line @@ -592,6 +632,7 @@ and on the hover format itself: | CLI | `--help` for compiler, LSP, etc. | | Tests | ACCEPT + REJECT + regression for every unchecked todo item, written *before* the work; extensive LSP/compiler/toolchain tests afterward | | Process | one-line commands, delegate busywork to 6-luna subagents, small test intervals, work it yourself, don't stop until done | +| **Post-session** | **bootstrap blocked: owned values can't move between locals, and locals can't be lent to globals — see `docs/BOOTSTRAP-OWNERSHIP.md`** | --- |
