flan/HANDOFF.md

76 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Handoff — 2026-09-19 (written before a full /clear)
Read this, then delete it. Style: user wants extreme concision, plain language,
no filler, decisions discussed one at a time BEFORE dispatching, agents
dispatched one at a time. No commit watermarks. `dune test` stays fast.
## State of the repo
- Branch `dev-loop`, tip `73ab213` (merge of the x86 dyn + conditions lane).
All green after merge: dune test 287/0, @x86 137 match / 0 differ,
@sanitize clean.
- dyn now works on the default x86 dev daemon. handler-bind is now a value
(body's last form) on both backends.
- `sand.flan` is the author's UNCOMMITTED WIP. Never commit it. Stash around
merges (`git stash push sand.flan -m wip`, pop after). `game-data.edn`
untracked, leave it.
- Known open hole (flagged, not fixed): `dune test` exits 0 even when
test_acceptance prints failures — nothing surfaces them.
## In flight: M2 item 1 — dyn maps + keywords
Agent worktree: `.claude/worktrees/agent-a3009901a950e8daa`
(branch `worktree-agent-a3009901a950e8daa`). NOT committed yet — uncommitted
changes across lib/{ast,check,emit,load,parse,prelude}.ml, runtime/flan_dyn.{h,c},
test/dune; it was writing checker/parse tests in test/test_flan.ml when it hit
the session limit (resets 7:20pm Asia/Bangkok).
To finish: spawn an agent IN THAT WORKTREE (don't reset it) with: "Finish the
in-progress dyn maps + keywords lane. Read the uncommitted diff first to see
what exists. Remaining: tests in test_flan.ml, acceptance rows (LLVM, -O0,
--x86; run programs for real output, never guess wording; no double-quotes in
OCaml comments), then ONCE at the end: dune test --force, dune build @x86
--force, dune build @sanitize --force. Commit in the repo's prose voice."
Then: stash sand.flan, merge, run the three sweeps, pop stash.
## M2 queue (FIX.org "M2 queue" section, line ~408) — dispatch ONE AT A TIME
1. dyn maps + keywords (in flight, above)
2. per-type descriptors — use Opus-class agent (representation change)
3. typed containers into dyn as views (rides on 2)
4. nil↔None at (Option T)
5. typed =/!= grow strings
6. defclass = named dyn map + CLOS/Clojure dispatch (after 1)
7. dyn if truthiness
8. return slot stays mandatory — decision only, no work
Model plan agreed with user: session on Opus, Sonnet agents for items 38,
Opus agents for item 2 and for reviews of merges.
## Not yet recorded in FIX.org (do this early, cheap)
Append a section on the syntax-family discussion (2026-09-19):
- User wants an F#-ish indentation/ML surface syntax, side by side with
s-exprs. Languages that "disappear" for them: Python > Odin > F#.
- Agreed architecture if it happens: one AST (the existing forms), second
reader; macros stay usable from both; Nim-style quote-block could allow
writing macros in ML syntax too.
- Middle options discussed: Parinfer (editor-only), wisp/sweet-exprs
(indentation-implied parens), simplified in-paren syntax. Rhombus = the
maximal reference.
- DECISION: deferred, no spike queued. User's current hypothesis: their
Clojure friction may be immutability/planning-ahead, not parens — they
will write imperative Flan as-is and see if parens still grate. Revisit
with that evidence.
## Environment notes
- /tmp (7.6G tmpfs) was 100% full; freed ~470M of stale dune test dirs, now
~95%. Remaining bulk: 2.6G Refold-Defold Claude scratch + ~850M numeric
JVM/Defold dirs — user hasn't said whether that session is closed; ask
before deleting.
- Verify agents' worktree bases: every past agent arrived stale. Prompt must
demand git log check + reset to dev-loop tip.
- Repeated full sweeps are the main time sink — tell agents to verify
incrementally, full sweeps once at the end.