Handoff — 2026-09-20 — files changed on disk reload into their windows (v1.0.3)
State
- Feature in place and green:
app/watch.go, wired intotickandRun;reloadFromDiskshared with the tools reload. Ten tests,make checkgreen,go test -race ./appgreen, quality gate #31 PASS. release.envsaysTAG="v1.0.3". Not committed, not tagged.
Next steps
- Review the diff (
git diff,git status), commit, then./01-release.tag.shfrom a machine that reaches Rickub. - Re-pin every editor:
go get rickub.com/turbo-editors/turbo-core@v1.0.3 && go mod tidy && GOWORK=off make check, then each./01-release.tag.sh. - When re-pinning, each editor's user docs could gain one paragraph: files rewritten outside the editor are reloaded; windows with unsaved changes are kept and told. turbo-go's
docs/*/explanation/go-tools.mdandhow-to/run-go-commands.mdalready describe the narrower tools reload and are the natural place.
Traps
- The stamp is size + mtime. A test that rewrites a file with content of the same length within the same second may be invisible on a filesystem with 1 s mtime granularity — every test in
watch_test.gochanges the length for that reason. Do the same in editor-level tests. watchFilesis started byRunonly. A test drivingtick()by hand gets no wake and needs none; a test of the wake setsa.fileWatchIntervalshort and polls the simulation screen for*tcell.EventInterrupt(wokeWithin).- Anything that writes a file on the loop's behalf must call
a.stampFile(path)afterwards or the next turn will re-read it (harmless —Reloadcompares text — but a wasted read, and aReloadedmessage would not appear since nothing changed). - Not run against a real terminal in this session (no TTY in the sandbox): the wake → reload → redraw chain is asserted with the simulation screen, never watched.
Also this session
The umbrella turbo-editors/README.md (one directory up, its own git repository with no .memory/) gained a section on testing a turbo-core change from the editors through a root go.work. Note the root has no .gitignore, so a go.work created there shows up as untracked — the section says not to commit it.
Also this session — the agent window's box wraps (same v1.0.3)
acp/input.go+acp/input_test.go;drawInputand the↑/↓cases inview_events.gochanged. Everything green (make check, quality #32).- Trap for tests: a view 30 wide gives rows of 27 runes; the box's first screen row in a 12-high view is row 9.
drawWithCursorininput_test.gois the helper to reuse — the olddrawdoes not report the cursor, and the cursor is where the old defect showed. - Trap for the layout: the row that breaks keeps its space (
endis one past it), so a row can bewidth+1runes;TextLimitedis givenwidth+1for that reason. Do not "fix" that towidth— it would put…back. - Not tried on a real terminal (no TTY here). Mouse clicks in the box still only give it the focus; they do not place the cursor — unchanged, and worth doing if somebody asks.
- The editors' agent-window docs (turbo-go
docs/*/reference/acp.md,how-to/talk-to-an-agent.md, and the same files in the other editors) list the box's keys; when re-pinning, a line saying the box wraps and↑↓move by row belongs there.
Also this session — ticket #28, pastes into the agent window (same v1.0.3)
- Done and green:
acp/paste.go,acp/paste_test.go,app/paste.go,app/paste_test.go;Session.PromptWith; bracketed paste enabled for the whole editor. Quality #34 PASS. - Ticket
.tickets/issues/28.yamlis stillstate: open— close it once tried in a real terminal. - Not tried in a real terminal (no TTY here). Two things to check first: that the terminal actually brackets (iTerm2, Terminal.app, kitty, WezTerm, GNOME Terminal all do; tmux needs
set -g set-clipboard/passes\e[200~through by default), and that a paste with tabs and CRLF lands as one token with the right line count. - Behaviour to know: a single-line paste ≤ 200 runes is typed inline (a path, a command); anything longer or with a newline is a token. The thresholds are
pasteInlineLimitinacp/paste.go. A token longer than the box's row wraps at its·spaces — ugly but correct; making it unbreakable was left out. - Trap:
app/app.gosits just under qlty's file-complexity threshold (50 → smell). Anything new for the event loop should go in its own file, aspaste.godid. - The editors' agent-window docs (turbo-go
docs/*/reference/acp.md,how-to/talk-to-an-agent.md) should gain: the box wraps,↑↓move by row, a long paste becomes a token that Backspace removes whole, Ctrl-V / Shift-Ins paste the editor's clipboard.
Also this session — ticket #25, configrepo and -load-config in every editor (same v1.0.3)
configrepo/here;-load-configin each editor'smain.go. Editors'go.modstill pin v1.0.2: release order matters — tag turbo-core v1.0.3 first, then in each editorgo get rickub.com/turbo-editors/turbo-core@v1.0.3 && go mod tidy && GOWORK=off make check, then their releases.- To rebuild everything against this checkout meanwhile: from
turbo-editors/,go work init ./turbo-core ./turbo-go ./turbo-rust ./turbo-python ./turbo-moonbit ./turbo-golo ./turbo-js ./turbo-go/demo ./turbo-go/bin— the two nested modules must be listed orgofails inside them. Removego.workafterwards; the root has no.gitignore. - The sample repository holds only
.turbo-go; a-load-configfrom turbo-rust against it correctly ends inErrNotFound. Add arust-init/.turbo-rustthere to try the others. rickub.com/api/v1wants a PAT even for public reads (measured 401). If that ever changes, an API path could replace the clone; nothing else in the design depends on git.- Ticket #25 is closed in
.tickets/issues/0025-turbo-load-config.yaml; #28 is still open (left for the user to try first). - Note on the workspace: turbo-go already carries its own
go.work(.+../turbo-core, dated 2026-09-19, gitignored), so it builds against this checkout on its own; the root workspace is only needed for the five others. Final verification was done that way: rootgo.workoverturbo-coreand the five, removed afterwards. - Observed, not caused by this session as far as can be told: during the last test passes the tracked files
turbo-go/demo/{README.md,go.mod,index.html,index.js,main.go}disappeared from the working tree (git showsD; dotfiles indemo/survived; no git operation in the reflog; the tree is a kDrive-synced folder on which the user was active — tickets changed at the same time). A 6.9 MBturbo-go/demo-golangbinary appeared at the same moment. Nothing was restored:git checkout -- demoin turbo-go puts the files back if the deletion was not deliberate.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|