diff options
| author | Claude <noreply@anthropic.com> | 2026-02-16 23:03:41 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-02-16 23:03:41 +0000 |
| commit | f67c07b178cd90539f1cc934def5a99be203e44a (patch) | |
| tree | ae8fd06bc8294029d39fb9c2cb73f12606d88e05 /.thicket | |
| parent | 2321d5bcf17e416244e75f5727f0710f9cdd9a1a (diff) | |
| download | neko-f67c07b178cd90539f1cc934def5a99be203e44a.tar.gz neko-f67c07b178cd90539f1cc934def5a99be203e44a.tar.bz2 neko-f67c07b178cd90539f1cc934def5a99be203e44a.zip | |
Exclude full_content from stream list API responses
The /stream endpoint now skips selecting full_content and header_image
from the database, reducing memory allocation and response payload size
for list views. Full content remains available via /item/:id endpoint.
Adds omitempty to JSON tags so empty fields are omitted from responses,
and a test verifying full_content is excluded from stream responses.
https://claude.ai/code/session_019Z4VJxzY7tcAuNkPAkvry9
Diffstat (limited to '.thicket')
| -rw-r--r-- | .thicket/tickets.jsonl | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/.thicket/tickets.jsonl b/.thicket/tickets.jsonl index e7690e5..14e600b 100644 --- a/.thicket/tickets.jsonl +++ b/.thicket/tickets.jsonl @@ -65,6 +65,7 @@ {"id":"NK-ed1iah","title":"Make feed crawling async in API","description":"Currently, POST /api/feed triggers an immediate crawl which blocks the response (or at least keeps the goroutine alive). Refactor the crawling architecture to be truly async with a job queue or status updates, improving API responsiveness and reliability.","type":"cleanup","status":"icebox","priority":4,"labels":null,"assignee":"","created":"2026-02-13T04:26:55.908243985Z","updated":"2026-02-13T04:26:55.908243985Z"} {"id":"NK-edahin","title":"v3: cut \"FILTERS\" text","description":"there's no header needed above unread/read/starred, just cut that please","type":"task","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-16T15:48:13.470233363Z","updated":"2026-02-16T16:21:21.828382936Z"} {"id":"NK-ek0cox","title":"Implement Item Interactions","description":"Add ability to toggle read/unread and star/unstar status for items. Use PUT /item/:id","type":"","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-13T14:55:14.825454967Z","updated":"2026-02-13T14:58:18.307521003Z"} +{"id":"NK-ekxfvv","title":"Seed full_content in benchmarks to measure real payload savings","description":"The stream benchmark seeds items without full_content, so B/op doesn't reflect the real-world improvement from excluding full_content. Add seeded full_content to benchmark items so we can quantify the actual memory/payload savings.","type":"task","status":"open","priority":4,"labels":null,"assignee":"","created":"2026-02-16T23:03:28.808266923Z","updated":"2026-02-16T23:03:28.808266923Z"} {"id":"NK-eqduq1","title":"run the performance test suite and provide some benchmarks","description":"Create a document in DOCS after running the perf test suite with findings and potential improvements.","type":"task","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-16T19:48:08.40974488Z","updated":"2026-02-16T22:05:48.66181541Z"} {"id":"NK-exyau3","title":"check coverage again","description":"check test coverage again and see if more tests are needed","type":"task","status":"closed","priority":3,"labels":null,"assignee":"","created":"2026-02-15T00:07:39.320521992Z","updated":"2026-02-15T05:31:22.48357749Z"} {"id":"NK-f64ocp","title":"Refactor routing logic for consistent settings exit","description":"Instead of checking 'if currentRoute.path == /settings' in every click handler, maybe centralize this logic in the router or a helper function to ensure consistent behavior when navigating away from settings.","type":"cleanup","status":"open","priority":4,"labels":null,"assignee":"","created":"2026-02-16T16:17:36.299928698Z","updated":"2026-02-16T16:17:36.299928698Z"} @@ -102,7 +103,7 @@ {"id":"NK-k1p9ij","title":"Evaluate E2E test harness","description":"Evaluate the current E2E test harness (Cleaning up test environment...\nCleanup complete.\nBuilding backend...\nCreating data directory...\nStarting mock feed server on port 9090...\nMock Server PID: 166494\nMock server is up.\nStarting backend on port 4994...\nBackend PID: 166520\nWaiting for backend to start...\nWaiting...\nBackend is up!\nRunning E2E tests...\n\n\u003e frontend@0.0.0 test:e2e\n\u003e playwright test\n\n\nRunning 13 tests using 1 worker\n\n\u001b[1A\u001b[2K[1/13] [chromium] › tests/auth.spec.ts:12:5 › Authentication - No Password Required › should allow direct access to dashboard without login\n\u001b[1A\u001b[2K[2/13] [chromium] › tests/auth.spec.ts:25:5 › Authentication - No Password Required › should allow login with empty password\n\u001b[1A\u001b[2K[3/13] [chromium] › tests/auth.spec.ts:38:5 › Authentication - No Password Required › should report authenticated status via API when no password\n\u001b[1A\u001b[2K[4/13] [chromium] › tests/auth.spec.ts:53:10 › Authentication - Password Required › should redirect to login when accessing protected routes\n\u001b[1A\u001b[2K[5/13] [chromium] › tests/auth.spec.ts:64:10 › Authentication - Password Required › should reject incorrect password\n\u001b[1A\u001b[2K[6/13] [chromium] › tests/auth.spec.ts:79:10 › Authentication - Password Required › should accept correct password and redirect to dashboard\n\u001b[1A\u001b[2K[7/13] [chromium] › tests/auth.spec.ts:93:10 › Authentication - Password Required › should persist authentication across page reloads\n\u001b[1A\u001b[2K[8/13] [chromium] › tests/auth.spec.ts:109:10 › Authentication - Password Required › should logout and redirect to login page\n\u001b[1A\u001b[2K[9/13] [chromium] › tests/auth.spec.ts:128:10 › Authentication - Password Required › should report unauthenticated status via API\n\u001b[1A\u001b[2K[10/13] [chromium] › tests/auth.spec.ts:142:5 › Authentication - Complete Flow › should handle complete user flow without password\n\u001b[1A\u001b[2K[11/13] [chromium] › tests/crawl.spec.ts:4:5 › Crawl Integration › should add a feed and see items after crawl\n\u001b[1A\u001b[2K[12/13] [chromium] › tests/e2e.spec.ts:4:3 › Neko Reader E2E › should allow login, viewing feeds, and logout\n\u001b[1A\u001b[2K[chromium] › tests/e2e.spec.ts:4:3 › Neko Reader E2E › should allow login, viewing feeds, and logout\nStep 5: Navigate to Home\n\n\u001b[1A\u001b[2KStep 6: Logout\n\n\u001b[1A\u001b[2K[13/13] [chromium] › tests/font.spec.ts:4:5 › Font Theme Settings › should change font family when theme starts\n\u001b[1A\u001b[2K 6 skipped\n 7 passed (5.2s)\n\nTo open last HTML report run:\n\u001b[36m\u001b[39m\n\u001b[36m npx playwright show-report\u001b[39m\n\u001b[36m\u001b[39m\nTests passed!\nCleaning up...\nCleaning up test environment...\nCleanup complete.) which is brittle and resource intensive. Consider alternative approaches or refactoring.","type":"task","status":"closed","priority":4,"labels":null,"assignee":"","created":"2026-02-15T16:23:52.252436663Z","updated":"2026-02-15T19:14:31.772890559Z"} {"id":"NK-k2fh32","title":"scroll mark as read broken in V3 UI","description":"j/k properly select and mark an item as read, but scrolling it off the screen on desktop and mobile don't seem to mark it as read.","type":"bug","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-16T15:32:42.579032595Z","updated":"2026-02-16T15:37:20.993241382Z"} {"id":"NK-k4y597","title":"[feature] light/dark/black toggle","description":"Add in a simple [light | dark | black] theme toggler like in the legacy version.","type":"feature","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-14T00:45:55.312953906Z","updated":"2026-02-14T01:29:20.073659889Z"} -{"id":"NK-k9otuy","title":"Exclude full_content from stream list API responses","description":"Benchmarks show ~380KB/op allocation for stream endpoint, largely from serializing full_content field that is not displayed in list views. Excluding this field from list responses would reduce memory allocation and improve API response times. Full content is already available via the /api/item/:id/content scrape endpoint.","type":"task","status":"open","priority":3,"labels":null,"assignee":"","created":"2026-02-16T22:08:15.014135834Z","updated":"2026-02-16T22:08:15.014135834Z"} +{"id":"NK-k9otuy","title":"Exclude full_content from stream list API responses","description":"Benchmarks show ~380KB/op allocation for stream endpoint, largely from serializing full_content field that is not displayed in list views. Excluding this field from list responses would reduce memory allocation and improve API response times. Full content is already available via the /api/item/:id/content scrape endpoint.","type":"","status":"closed","priority":3,"labels":null,"assignee":"","created":"2026-02-16T22:08:15.014135834Z","updated":"2026-02-16T23:03:03.193816656Z"} {"id":"NK-kdn1m2","title":"Optimize observer creation in renderItems","description":"We currently recreate IntersectionObservers every time renderItems is called. We should investigate if this impacts performance and potentially reuse the observer or optimize the logic.","type":"task","status":"open","priority":4,"labels":null,"assignee":"","created":"2026-02-16T15:37:41.915993277Z","updated":"2026-02-16T15:37:41.915993277Z"} {"id":"NK-kqt9oc","title":"docker support","description":"add support so people can self-host this in docker and (maybe) test it yourself. maybe keep it in a docker directory with separate docs etc.","type":"epic","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-13T20:19:10.70328135Z","updated":"2026-02-14T01:03:35.363466842Z"} {"id":"NK-kra45a","title":"enhance github ci/cq","description":"Make sure we have the right CI/CQ things in the github workflow. Can it test our docker compose for us too maybe","type":"feature","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-15T00:08:25.732991582Z","updated":"2026-02-15T01:04:54.350079542Z"} @@ -159,6 +160,7 @@ {"id":"NK-uy90he","title":"UI Styling: Feed Items (Spacing, Dateline)","description":"","type":"","status":"closed","priority":2,"labels":null,"assignee":"","created":"2026-02-13T18:05:17.289457994Z","updated":"2026-02-13T18:11:46.255816698Z"} {"id":"NK-uywybr","title":"https://computer.rip/rss.xml fails to importa","description":"running neko -a https://computer.rip/rss.xml gave an error. debug it and add test case to catch.","type":"bug","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-13T20:12:28.54350403Z","updated":"2026-02-14T01:03:02.755247954Z"} {"id":"NK-v9e7r3","title":"consistency in sidebar","description":"With the new sidebar styling, SETTINGS and LOGOUT and the light/dark look really different than the rest. Let's make them more consistent from a style perspective.","type":"feature","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-14T23:55:51.554786606Z","updated":"2026-02-15T00:22:33.826814528Z"} +{"id":"NK-vztuud","title":"Sanitize HTML at ingest time instead of on every read","description":"The Filter function runs bluemonday sanitization on every query result. Moving sanitization to item creation/crawl time would reduce per-request CPU cost, especially for frequently-read items.","type":"task","status":"open","priority":4,"labels":null,"assignee":"","created":"2026-02-16T23:03:28.861761558Z","updated":"2026-02-16T23:03:28.861761558Z"} {"id":"NK-wibjlg","title":"update README.md","description":"Ensure the build, configuration, etc are up too date.\nNote the git change when we started to vibe-code this in the history (with dates etc.)","type":"task","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-13T20:18:08.790048498Z","updated":"2026-02-13T22:36:07.717448961Z"} {"id":"NK-wj8m4v","title":"Fix pre-existing safehttp test failure","description":"TestSafeClient in internal/safehttp fails: private IP check returns nil error instead of blocking. The test expects an error for 10.0.0.1 but gets nil.","type":"","status":"closed","priority":2,"labels":null,"assignee":"","created":"2026-02-16T19:09:38.775620083Z","updated":"2026-02-16T22:07:45.904161737Z"} {"id":"NK-wjats7","title":"v3 ui: takes 3 presses of 'j' to move to next item","description":"Is there some weird timer before it's scrolling it -- after that it's fine. Or a delay to setup the listener or something","type":"bug","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-16T16:20:01.7097349Z","updated":"2026-02-16T18:53:59.531388427Z"} @@ -204,6 +206,7 @@ {"id":"NK-dk4vq5o","from_ticket_id":"NK-uy90he","to_ticket_id":"NK-mwf9q2","type":"created_from","created":"2026-02-13T18:05:17.305248863Z"} {"id":"NK-dkhu8ov","from_ticket_id":"NK-mwf9q2","to_ticket_id":"NK-0ppv3f","type":"created_from","created":"2026-02-13T15:04:12.449401674Z"} {"id":"NK-dl8clj9","from_ticket_id":"NK-0nf7hu","to_ticket_id":"NK-9hx0y7","type":"created_from","created":"2026-02-13T05:50:46.769436228Z"} +{"id":"NK-dlg1gco","from_ticket_id":"NK-ekxfvv","to_ticket_id":"NK-k9otuy","type":"created_from","created":"2026-02-16T23:03:28.824814398Z"} {"id":"NK-dlvmiyc","from_ticket_id":"NK-7tzbql","to_ticket_id":"NK-bsdwqz","type":"created_from","created":"2026-02-13T05:02:57.392616851Z"} {"id":"NK-dm35o6g","from_ticket_id":"NK-d4c8jv","to_ticket_id":"NK-chns2b","type":"created_from","created":"2026-02-14T04:46:32.151239137Z"} {"id":"NK-dm75oc8","from_ticket_id":"NK-3om7x2","to_ticket_id":"NK-zt4e32","type":"created_from","created":"2026-02-13T05:59:46.169842933Z"} @@ -215,6 +218,7 @@ {"id":"NK-dnw8qnj","from_ticket_id":"NK-qwef98","to_ticket_id":"NK-mwf9q2","type":"created_from","created":"2026-02-13T18:05:18.469080925Z"} {"id":"NK-do2cces","from_ticket_id":"NK-ngokc3","to_ticket_id":"NK-oqd24q","type":"created_from","created":"2026-02-16T15:56:34.653005025Z"} {"id":"NK-dofihuz","from_ticket_id":"NK-0ppv3f","to_ticket_id":"NK-t0nmbj","type":"created_from","created":"2026-02-13T05:44:01.640770816Z"} +{"id":"NK-drbilma","from_ticket_id":"NK-vztuud","to_ticket_id":"NK-k9otuy","type":"created_from","created":"2026-02-16T23:03:28.877255067Z"} {"id":"NK-ds03bw7","from_ticket_id":"NK-0oti10","to_ticket_id":"NK-pwogze","type":"created_from","created":"2026-02-14T20:44:37.268882219Z"} {"id":"NK-dspotwc","from_ticket_id":"NK-kdn1m2","to_ticket_id":"NK-k2fh32","type":"created_from","created":"2026-02-16T15:37:41.946633536Z"} {"id":"NK-dumpdcp","from_ticket_id":"NK-59kbij","to_ticket_id":"NK-ek0cox","type":"created_from","created":"2026-02-13T14:58:18.351925575Z"} |
