Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 18 additions & 15 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 11 additions & 6 deletions docs/kanban.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
---

kanban-plugin: board

---

## Todo

- [ ] [[todos/telegram-login-link|Simplify Telegram bot auth with login link]]
- [ ] [[todos/e2e-do-sync-testing|E2E testing for DO-to-DO sync]]
- [ ] [[todos/remove-undici-override|Remove undici 7.18.2 override]]
- [ ] [[todos/livestore-testing-ui|Livestore UI feature tests (RTL)]]
- [ ] [[todos/progress-tracker-sqlite-review|Review stateful SQLite ProgressTracker]]
- [ ] [[todos/managed-effect-runtime-do|Explore ManagedRuntime for LinkProcessorDO]]
- [ ] [[todos/links-list-performance|Fix links list rendering performance at 150+ links]]
- [ ] Rethink app design (inspiration: shiori.sh)
- [ ] Develop CLI for ingestion and management
- [ ] Review and consolidate rate limiting / usage limits


## In Progress

- [ ] Rethink app design (inspiration: shiori.sh)
- [ ] [[todos/links-list-performance|Fix links list rendering performance at 150+ links]]


## Done

- [ ] [[todos/publish-raycast-extension|Publish Raycast extension to Store]]
Expand All @@ -42,10 +46,11 @@ kanban-plugin: board
- [x] [[todos/done/monorepo-conversion|Convert project to monorepo]]
- [x] [[todos/done/raycast-ingestion|Add Raycast ingestion path]]

%% kanban:settings



%% kanban:settings
```
{"kanban-plugin":"board"}
```

%%
%%
24 changes: 24 additions & 0 deletions docs/todos/e2e-do-sync-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,27 @@ Unit tests can't cover the DO's subscription-driven concurrency because it requi
6. **Queue batch concurrency** — send batch of 5 messages → verify `ingestAndProcess` called concurrently (not sequentially)

See [[incidents/2026-04-link-processor-sync-bug]] for full context.

## Current status — blocked on upstream

PR [#46](https://github.com/bohdanbirdie/cloudstash/pull/46) implements 12 miniflare-based e2e tests covering cold/warm boot sync, duplicate detection, concurrent ingests, cross-org isolation, fetch trigger path, and queue batch handling via real DOs. Tests pass locally on macOS but CI on Linux hangs indefinitely.

### Root cause

`vitest-pool-workers` per-test storage isolation snapshots/pops DO SQLite state between tests. LinkProcessorDO's livestore opens SQLite in WAL mode, creating `.sqlite-shm`/`.sqlite-wal` sidecars. The pool's pop logic asserts filenames end in `.sqlite` and throws on the sidecars (`AssertionError: Expected .sqlite, got ...sqlite-shm`). After that, the livestore push fiber is left mid-push against inconsistent state and retries forever — that's the hang.

Passes on macOS because SQLite checkpoints WAL more eagerly than Linux, so sidecars usually don't exist at pop time. Environmental flake, not a test bug.

### Upgrade path blocked

- `@cloudflare/vitest-pool-workers@0.13+` removes isolated storage entirely (would fix this)
- 0.13+ requires `vitest ^4.1.0`
- `@effect/vitest` stable is pinned to `vitest ^3.2.0` — no stable release supports vitest 4 yet (only 4.0.0-beta tags)

### Plan

Leave PR #46 open. When `@effect/vitest` stable supports vitest 4, upgrade `vitest` + `@cloudflare/vitest-pool-workers` together and unblock.

Alternatives rejected: `isolatedStorage: false` loosens isolation for all e2e tests; skipping on CI defeats the purpose.

Related: [workers-sdk#11031](https://github.com/cloudflare/workers-sdk/issues/11031).
20 changes: 0 additions & 20 deletions docs/todos/remove-undici-override.md

This file was deleted.

7 changes: 2 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
"zustand": "5.0.12"
},
"devDependencies": {
"@cloudflare/vite-plugin": "1.32.2",
"@cloudflare/vite-plugin": "1.32.3",
"@cloudflare/vitest-pool-workers": "0.12.21",
"@cloudflare/workers-types": "4.20260414.1",
"@effect/language-service": "0.81.0",
Expand Down Expand Up @@ -138,10 +138,7 @@
"vite-tsconfig-paths": "6.1.1",
"vitest": "3.2.4",
"web-vitals": "^5.1.0",
"wrangler": "4.82.2"
},
"overrides": {
"undici": "7.18.2"
"wrangler": "4.83.0"
},
"packageManager": "bun@1.3.11",
"cloudflare": {
Expand Down
Loading