mirror of
https://github.com/narrrl/narl-workspace.git
synced 2026-11-03 16:41:27 +01:00
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.
70 lines
4.1 KiB
Markdown
70 lines
4.1 KiB
Markdown
# 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 by `scripts/screenshots.ts` against a
|
|
throwaway workspace, so they can be taken again when the UI changes.
|
|
- CI: `.github/workflows/ci.yml` runs the Rust checks, svelte-check and the
|
|
wiki check on every push. `.github/workflows/wiki.yml` publishes the wiki on
|
|
every push to `main`.
|
|
|
|
**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 `:tasks` gathers the open ones
|
|
in a space.
|
|
- A daily review in the agenda: yesterday's entry, what was finished this week,
|
|
and cards in `doing` for more than 14 days.
|
|
- Marks: `ma` … `mz` per document, `'a` to jump. This clashes with `m` for
|
|
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.
|