43 lines
2.7 KiB
Markdown
43 lines
2.7 KiB
Markdown
# TODO
|
|
|
|
Durable backlog. Agents append here instead of leaving `TODO` comments in source.
|
|
Small, specific, independently actionable. Remove only when actually done.
|
|
|
|
## Now
|
|
- [ ] Choose a linter/formatter (e.g. Biome), then add `lint` to `package.json`, `AGENTS.md` and `docs/PERMISSIONS.md`.
|
|
- [ ] Add CI on Gitea Actions: install, typecheck, and test on SQLite and Postgres. Add a guard that fails if `AGENTS.md` is over 150 lines.
|
|
|
|
## Next
|
|
- [ ] Phase 2 and Phase 3 plans (spec §12).
|
|
- [ ] Generate image thumbnails for attachments (Phase 1 sizes images with CSS).
|
|
|
|
## Someday
|
|
|
|
## Recurring
|
|
- [ ] Maintain `AGENTS.md`:
|
|
- **Add a rule only in response to a real failure.** When an agent repeatedly gets something wrong,
|
|
that is a gap; add one line, ideally with a code example. Do not pre-empt hypothetical mistakes.
|
|
- **Update in the same PR as the convention change.** A stale rules file is worse than none, because
|
|
it actively misleads.
|
|
- **Prune quarterly.** Delete rules whose convention has changed or whose mistake no longer occurs.
|
|
- **Optional, cheap validation:** run the same task twice in clean sessions, with and without the
|
|
file, and compare steps and token use.
|
|
|
|
## Known issues
|
|
- [ ] Sync: two concurrent runs of the same connection can both insert a new `source_records` row for one key
|
|
(one fails on the unique key and is logged as a record error). The job worker should lock per connection.
|
|
- [ ] Restore: a new child work whose parent+position collides with an existing child of a re-matched parent fails
|
|
with `ImportError("conflict")` instead of being merged or repositioned.
|
|
- [ ] Restore: an unlink of identical attachment bytes between the pre-write and the commit could remove the file;
|
|
mitigated by re-writing after commit, not locked.
|
|
- [ ] Export bundles hold attachment bytes in memory; very large libraries need a streaming zip.
|
|
- [ ] Admin merge does not merge colliding children recursively; colliding children stay under the tombstoned parent.
|
|
- [ ] Matching: a shared parent resolved without external IDs or position (title/year reuse in
|
|
`packages/core/src/matching.ts`) has no unique key, so concurrent matches can create it twice.
|
|
- [ ] Library search (`q`) and the title sort use the work's title, not the user's `overrides.title`
|
|
(overrides are a JSON text column). The `tag` filter matches the JSON text with LIKE.
|
|
- [ ] Library hierarchy rollup and orphan detection look three levels deep; deeper trees are not rolled up.
|
|
- [ ] Undoing a per-user move does not move copies or list items back, nor restore aliases that the move
|
|
re-pointed.
|
|
- [ ] `bun run typecheck` fails with TS18003 until source files exist under `apps/`, `packages/` or `plugins/`.
|