aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ASKLIST.md41
1 files changed, 41 insertions, 0 deletions
diff --git a/ASKLIST.md b/ASKLIST.md
index f393bbf..2854efe 100644
--- a/ASKLIST.md
+++ b/ASKLIST.md
@@ -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`** |
---