Each finding from the docs pass now names the commit that fixed it. The two limits of search that stay — ranks from two indexes, no PDF text — say why they stay.
4.1 KiB
Findings, possible bugs, and what comes next
Written on 2026-10-21, after the seven slices of the feature plan had landed
(trash 8ffad63, revisions fc2be66, links a42f907, capture tokens
f629f5a, diary 824f2bb, recurring cards 6673298, search in files
909abf5). That plan has fully landed, and git keeps it.
These came out of writing the wiki, taking the screenshots against a fresh workspace, and probing the API on a throwaway server. All of them are fixed now, except two limits of search noted at the end of the list.
Fixed
| finding | fix | |
|---|---|---|
| 1 | A rename sent the whole node without the version it had seen, so it could write a stale draft over a save made elsewhere. | 3a6ad94: a rename sends the name alone, with the tile's updated_at when the document is open, and is refused like :w when it was saved since. |
| 2 | PUT /api/nodes/{id} without body emptied the document. |
3a6ad94: every field changes only when it is sent. |
| 3 | A search of only punctuation answered with the list of spaces. | a1f6f60: it finds nothing. |
| 4 | The agenda grouped cards and opened itself by the browser's day, not WORKSPACE_TIMEZONE, and took a day to be 24 hours. |
0e0d215: the agenda answer carries today with its bounds, from the same day_bounds the mails use. |
| 5 | Two spaces could share a name. | a1f6f60: refused, in any case or by slug, for a new space, a rename, and mkdir at the root of the mount. |
| 6 | Names had no length limit. | a1f6f60: at most 200 characters. |
| 7 | A hard-wrapped paragraph rendered with a break in every line. | 767dd07: a paragraph that looks wrapped at a width has its soft breaks read as spaces; hand-broken lines and explicit breaks stay. |
| 8 | A fresh clone did not compile before the frontend was built. | a59ba4a: allow_missing on the embed. |
| 9 | Indexing a file walked every file node on each write, and the excerpt did not mark the match. | c72b65f: a write reads only the folder it wrote into, and the matched words are lit. |
Still open, on purpose
- Results from documents and from files are ranked by two separate BM25 indexes, so their order relative to each other is approximate. A shared rank would mean one index for both, which costs more than it gives for a list this short.
- PDFs and office documents are not read for search. That needs a parser crate, and waits until it is missed.
Docs and tooling, done in this pass
- An icon,
~/and a block cursor, as the favicon, the touch icon, and the mark in the bar, the login and the share page. - A README that opens with the banner, the badges, screenshots and the features grouped by what they are for.
- A wiki in
docs/wiki: a getting-started page, a guide that walks through a day, a page per part of the app, and three reference pages generated from the code (scripts/wiki.ts). - Screenshots in
docs/images, taken byscripts/screenshots.tsagainst a throwaway workspace, so they can be taken again when the UI changes. - CI:
.github/workflows/ci.ymlruns the Rust checks, svelte-check and the wiki check on every push..github/workflows/wiki.ymlpublishes the wiki on every push tomain.
Before the first wiki publish: GitHub creates a wiki's repository only when its first page is saved, so save any page once in the repository's Wiki tab. The workflow replaces it on its first run.
Next, unplanned
Carried over from the last plan, still not started:
- Install the app on a phone (a PWA: manifest plus a service worker for the
app shell, CSP
worker-src 'self'), with a share target that posts into capture. The new icon is ready for the manifest. - Task lists: toggle
- [ ]in the reader, and:tasksgathers the open ones in a space. - A daily review in the agenda: yesterday's entry, what was finished this week,
and cards in
doingfor more than 14 days. - Marks:
ma…mzper document,'ato jump. This clashes withmfor picking nodes up, so choose the keys first. - Mail-in capture: IMAP polling of a plus-address into the inbox.
Suggested next: the PWA, which the new icon makes cheap.