Compare commits

...
Sign in to create a new pull request.

4 commits

7 changed files with 1940 additions and 150 deletions

View file

@ -1,3 +1,4 @@
{"_type":"issue","id":"islandflow-m3d","title":"fix docs mirroring to github pages","description":"The repository docs folder is supposed to mirror to dirtydishes.github.io for GitHub Pages, but the mirroring is not working. Investigate the docs publishing workflow and repair the configuration or scripts so docs can be published reliably.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-31T22:05:48Z","created_by":"dirtydishes","updated_at":"2026-05-31T22:12:26Z","started_at":"2026-05-31T22:05:56Z","closed_at":"2026-05-31T22:12:26Z","close_reason":"Updated docs Pages workflow to publish into dirtydishes/dirtydishes.github.io under islandflow/docs, tightened docs index generation, regenerated docs index, and documented validation/limitations.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-2op","title":"[bug] Desktop app unclickable and no live data in hosted shell","description":"## Summary\\nDesktop Electron shell appears fully non-interactive (clicks do not work) and no live market data reaches the UI.\\n\\n## Why this matters\\nDesktop wrapper is currently unusable for core workflow and blocks users from validating market streams outside browser.\\n\\n## Scope\\nReproduce issue locally, identify root cause(s) in Electron shell and frontend integration, implement fix, and validate interactivity + data flow end-to-end.\\n\\n## Acceptance Criteria\\n- Desktop app responds to pointer interactions (navigation/actions clickable)\\n- Live data stream connects and updates UI in desktop mode\\n- Regression coverage or guardrails added where practical\\n- Findings and validation documented","status":"in_progress","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-24T04:23:55Z","created_by":"dirtydishes","updated_at":"2026-05-24T04:23:57Z","started_at":"2026-05-24T04:23:57Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-2op","title":"[bug] Desktop app unclickable and no live data in hosted shell","description":"## Summary\\nDesktop Electron shell appears fully non-interactive (clicks do not work) and no live market data reaches the UI.\\n\\n## Why this matters\\nDesktop wrapper is currently unusable for core workflow and blocks users from validating market streams outside browser.\\n\\n## Scope\\nReproduce issue locally, identify root cause(s) in Electron shell and frontend integration, implement fix, and validate interactivity + data flow end-to-end.\\n\\n## Acceptance Criteria\\n- Desktop app responds to pointer interactions (navigation/actions clickable)\\n- Live data stream connects and updates UI in desktop mode\\n- Regression coverage or guardrails added where practical\\n- Findings and validation documented","status":"in_progress","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-24T04:23:55Z","created_by":"dirtydishes","updated_at":"2026-05-24T04:23:57Z","started_at":"2026-05-24T04:23:57Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-jad","title":"Sync docs pages workflow fix to github mirror","description":"GitHub is still running an older docs Pages workflow with configure-pages because github/main is behind forgejo/main. Push the already-fixed workflow commit to the GitHub mirror so Actions runs the gh-pages branch deployment flow instead.","status":"closed","priority":1,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-23T22:27:46Z","created_by":"dirtydishes","updated_at":"2026-05-23T22:28:24Z","started_at":"2026-05-23T22:28:10Z","closed_at":"2026-05-23T22:28:24Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-jad","title":"Sync docs pages workflow fix to github mirror","description":"GitHub is still running an older docs Pages workflow with configure-pages because github/main is behind forgejo/main. Push the already-fixed workflow commit to the GitHub mirror so Actions runs the gh-pages branch deployment flow instead.","status":"closed","priority":1,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-23T22:27:46Z","created_by":"dirtydishes","updated_at":"2026-05-23T22:28:24Z","started_at":"2026-05-23T22:28:10Z","closed_at":"2026-05-23T22:28:24Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-bc7","title":"Fix docs Pages workflow configure-pages failure","description":"Replace the current docs Pages deployment flow so workflow runs succeed even when configure-pages cannot read or enable the site. Keep published docs target behavior for dirtydishes.github.io/islandflow/docs.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-23T22:23:28Z","created_by":"dirtydishes","updated_at":"2026-05-23T22:25:19Z","started_at":"2026-05-23T22:23:31Z","closed_at":"2026-05-23T22:25:19Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-bc7","title":"Fix docs Pages workflow configure-pages failure","description":"Replace the current docs Pages deployment flow so workflow runs succeed even when configure-pages cannot read or enable the site. Keep published docs target behavior for dirtydishes.github.io/islandflow/docs.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-23T22:23:28Z","created_by":"dirtydishes","updated_at":"2026-05-23T22:25:19Z","started_at":"2026-05-23T22:23:31Z","closed_at":"2026-05-23T22:25:19Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
@ -24,6 +25,8 @@
{"_type":"issue","id":"islandflow-ayo","title":"Drop stale backlog events from live fanout","description":"Follow-up to live freshness rollout: /ws/live was still fanning out stale backlog events for freshness-gated channels, which kept tape panes in Live feed behind despite active synthetic ingest. Gate fanout and cache ingest by freshness for options/nbbo/equities/flow.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:26:39Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:26:44Z","started_at":"2026-04-28T21:26:44Z","closed_at":"2026-04-28T21:26:44Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-ayo","title":"Drop stale backlog events from live fanout","description":"Follow-up to live freshness rollout: /ws/live was still fanning out stale backlog events for freshness-gated channels, which kept tape panes in Live feed behind despite active synthetic ingest. Gate fanout and cache ingest by freshness for options/nbbo/equities/flow.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:26:39Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:26:44Z","started_at":"2026-04-28T21:26:44Z","closed_at":"2026-04-28T21:26:44Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-0v6","title":"Fix tape freshness, NBBO coverage, pause controls, and filter popup","description":"Implement the tape fixes requested for synthetic options notional sizing, strict live freshness, live-mode pause/resume behavior, stronger NBBO snapshot coverage, and moving flow filters behind a popup. Includes server-side live cache changes, web terminal state/UI changes, and tests for synthetic pricing, live snapshot freshness/NBBO retention, and live pause/filter interactions.","status":"closed","priority":1,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:02:52Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:13:38Z","started_at":"2026-04-28T21:02:57Z","closed_at":"2026-04-28T21:13:38Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-0v6","title":"Fix tape freshness, NBBO coverage, pause controls, and filter popup","description":"Implement the tape fixes requested for synthetic options notional sizing, strict live freshness, live-mode pause/resume behavior, stronger NBBO snapshot coverage, and moving flow filters behind a popup. Includes server-side live cache changes, web terminal state/UI changes, and tests for synthetic pricing, live snapshot freshness/NBBO retention, and live pause/filter interactions.","status":"closed","priority":1,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:02:52Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:13:38Z","started_at":"2026-04-28T21:02:57Z","closed_at":"2026-04-28T21:13:38Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-e4r","title":"Implement smart-money flow filtering and synthetic firehose modes","description":"Implement the approved multi-surface plan for named synthetic market profiles, options raw-vs-signal filtering, live/API filter contracts, Tape page client-side flow filters, firehose-readiness improvements, tests, and README updates.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T20:10:49Z","created_by":"dirtydishes","updated_at":"2026-04-28T20:29:29Z","started_at":"2026-04-28T20:10:53Z","closed_at":"2026-04-28T20:29:29Z","close_reason":"Implemented synthetic market profiles, options signal-path filtering, signal-aware API/replay contracts, Tape page filters, tests, and README updates. Follow-up tracked in islandflow-biq.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-e4r","title":"Implement smart-money flow filtering and synthetic firehose modes","description":"Implement the approved multi-surface plan for named synthetic market profiles, options raw-vs-signal filtering, live/API filter contracts, Tape page client-side flow filters, firehose-readiness improvements, tests, and README updates.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T20:10:49Z","created_by":"dirtydishes","updated_at":"2026-04-28T20:29:29Z","started_at":"2026-04-28T20:10:53Z","closed_at":"2026-04-28T20:29:29Z","close_reason":"Implemented synthetic market profiles, options signal-path filtering, signal-aware API/replay contracts, Tape page filters, tests, and README updates. Follow-up tracked in islandflow-biq.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-8a6","title":"verify github pages token for docs mirror","description":"The docs mirror workflow now publishes islandflow/docs into dirtydishes/dirtydishes.github.io, but the GitHub Actions secret DOCS_PAGES_TOKEN must exist and have permission to push to that Pages repository. Verify the secret is configured and manually run the Publish Docs workflow after the mirror branch lands.","notes":"Direct manual publish to dirtydishes/dirtydishes.github.io succeeded on 2026-06-01 and https://dirtydishes.github.io/islandflow/docs/ returned HTTP 200. Remaining work is to verify DOCS_PAGES_TOKEN so the islandflow docs mirror workflow can publish future updates automatically.","status":"open","priority":2,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-31T22:12:27Z","created_by":"dirtydishes","updated_at":"2026-06-01T13:45:34Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-5jt","title":"Add anatomy reference page","description":"Create a standalone docs/anatomy.html reference explaining how prints move through ingest, tape, flow packets, smart-money events, classifier hits, and alerts, including diagrams.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-31T21:20:34Z","created_by":"dirtydishes","updated_at":"2026-05-31T21:25:54Z","started_at":"2026-05-31T21:20:44Z","closed_at":"2026-05-31T21:25:54Z","close_reason":"Added the standalone anatomy reference page and linked it from the docs index.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-cig","title":"Expand CI quality gates","description":"Add a more robust CI workflow for the Bun/TypeScript monorepo, including formatting, linting, type checking, builds, and tests where appropriate.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-30T06:29:33Z","created_by":"dirtydishes","updated_at":"2026-05-30T06:34:11Z","started_at":"2026-05-30T06:29:41Z","closed_at":"2026-05-30T06:34:11Z","close_reason":"Expanded CI quality gates with Biome formatting/linting, public API route checks, Docker snapshot validation, tests, typecheck, and web build validation.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-cig","title":"Expand CI quality gates","description":"Add a more robust CI workflow for the Bun/TypeScript monorepo, including formatting, linting, type checking, builds, and tests where appropriate.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-30T06:29:33Z","created_by":"dirtydishes","updated_at":"2026-05-30T06:34:11Z","started_at":"2026-05-30T06:29:41Z","closed_at":"2026-05-30T06:34:11Z","close_reason":"Expanded CI quality gates with Biome formatting/linting, public API route checks, Docker snapshot validation, tests, typecheck, and web build validation.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-3l6","title":"fix ci typecheck bun path resolution","description":"Forgejo CI fails in scripts/typecheck.ts because the script shells out to bunx, which expects bun on PATH. The runner installs Bun by absolute path, so the typecheck helper should use the current Bun executable instead of PATH lookup.","status":"closed","priority":2,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-30T05:34:55Z","created_by":"dirtydishes","updated_at":"2026-05-30T06:00:31Z","started_at":"2026-05-30T05:35:02Z","closed_at":"2026-05-30T06:00:31Z","close_reason":"Fixed the Forgejo CI terminal import mismatch by switching the terminal client component to a namespace import; verified locally and on Forgejo run #56.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-3l6","title":"fix ci typecheck bun path resolution","description":"Forgejo CI fails in scripts/typecheck.ts because the script shells out to bunx, which expects bun on PATH. The runner installs Bun by absolute path, so the typecheck helper should use the current Bun executable instead of PATH lookup.","status":"closed","priority":2,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-30T05:34:55Z","created_by":"dirtydishes","updated_at":"2026-05-30T06:00:31Z","started_at":"2026-05-30T05:35:02Z","closed_at":"2026-05-30T06:00:31Z","close_reason":"Fixed the Forgejo CI terminal import mismatch by switching the terminal client component to a namespace import; verified locally and on Forgejo run #56.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-wtg","title":"Harden drawer dialog focus behavior","description":"Fix terminal drawers so they expose modal dialog semantics, trap keyboard focus while open, and restore focus to the invoking control after close.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T22:55:25Z","created_by":"dirtydishes","updated_at":"2026-05-29T23:09:45Z","started_at":"2026-05-29T22:56:22Z","closed_at":"2026-05-29T23:09:45Z","close_reason":"Implemented modal dialog semantics, focus trapping, Escape dismissal, focus restoration, validation, and turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-wtg","title":"Harden drawer dialog focus behavior","description":"Fix terminal drawers so they expose modal dialog semantics, trap keyboard focus while open, and restore focus to the invoking control after close.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T22:55:25Z","created_by":"dirtydishes","updated_at":"2026-05-29T23:09:45Z","started_at":"2026-05-29T22:56:22Z","closed_at":"2026-05-29T23:09:45Z","close_reason":"Implemented modal dialog semantics, focus trapping, Escape dismissal, focus restoration, validation, and turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0}
@ -96,6 +99,7 @@
{"_type":"issue","id":"islandflow-zs0","title":"Migrate terminal UI to smart-money profiles","description":"Migrate apps/web terminal rendering to consume SmartMoneyEvent directly: primary profile, probability ladder, reason codes, and suppression/abstention state, while preserving legacy alert/classifier displays during the bridge.","status":"closed","priority":2,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-04T21:35:23Z","created_by":"dirtydishes","updated_at":"2026-05-05T05:39:58Z","closed_at":"2026-05-05T05:39:58Z","close_reason":"Completed terminal smart-money profile migration","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-zs0","title":"Migrate terminal UI to smart-money profiles","description":"Migrate apps/web terminal rendering to consume SmartMoneyEvent directly: primary profile, probability ladder, reason codes, and suppression/abstention state, while preserving legacy alert/classifier displays during the bridge.","status":"closed","priority":2,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-04T21:35:23Z","created_by":"dirtydishes","updated_at":"2026-05-05T05:39:58Z","closed_at":"2026-05-05T05:39:58Z","close_reason":"Completed terminal smart-money profile migration","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-igk","title":"Add plan mode","description":"Implement a user-facing plan mode in the application so users can switch into planning before taking action. Scope to be clarified from existing app patterns.","status":"closed","priority":2,"issue_type":"feature","owner":"dishes@dpdrm.com","created_at":"2026-05-04T04:22:37Z","created_by":"dirtydishes","updated_at":"2026-05-04T04:26:18Z","started_at":"2026-05-04T04:22:40Z","closed_at":"2026-05-04T04:26:18Z","close_reason":"Implemented as a global pi extension toggled with Shift+P","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-igk","title":"Add plan mode","description":"Implement a user-facing plan mode in the application so users can switch into planning before taking action. Scope to be clarified from existing app patterns.","status":"closed","priority":2,"issue_type":"feature","owner":"dishes@dpdrm.com","created_at":"2026-05-04T04:22:37Z","created_by":"dirtydishes","updated_at":"2026-05-04T04:26:18Z","started_at":"2026-05-04T04:22:40Z","closed_at":"2026-05-04T04:26:18Z","close_reason":"Implemented as a global pi extension toggled with Shift+P","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-biq","title":"Finish raw live options delivery and filter/backpressure observability","description":"The smart-money signal path and Tape filters are in place, but the next firehose pass should finish server-side selective raw live delivery for options subscriptions and add explicit filtered-out/backpressure observability for API/web counters. This was discovered while landing islandflow-e4r.\n","status":"in_progress","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T20:28:58Z","created_by":"dirtydishes","updated_at":"2026-04-29T03:54:12Z","started_at":"2026-04-29T03:54:12Z","dependencies":[{"issue_id":"islandflow-biq","depends_on_id":"islandflow-e4r","type":"discovered-from","created_at":"2026-04-28T16:28:58Z","created_by":"auto-import","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-biq","title":"Finish raw live options delivery and filter/backpressure observability","description":"The smart-money signal path and Tape filters are in place, but the next firehose pass should finish server-side selective raw live delivery for options subscriptions and add explicit filtered-out/backpressure observability for API/web counters. This was discovered while landing islandflow-e4r.\n","status":"in_progress","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T20:28:58Z","created_by":"dirtydishes","updated_at":"2026-04-29T03:54:12Z","started_at":"2026-04-29T03:54:12Z","dependencies":[{"issue_id":"islandflow-biq","depends_on_id":"islandflow-e4r","type":"discovered-from","created_at":"2026-04-28T16:28:58Z","created_by":"auto-import","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-3f4","title":"Publish May 31 standup git summary","description":"## Summary\nCreate the daily standup HTML summary for 2026-05-31 git activity in docs/general and regenerate any supporting docs index entries.\n\n## Why this matters\nThe team needs a grounded, commit-anchored standup artifact for May 31 repository activity.\n\n## Scope\nInspect May 31 git history, write the summary document in docs/general, update related generated docs metadata if needed, and close out the task.","status":"closed","priority":3,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-06-01T13:02:21Z","created_by":"dirtydishes","updated_at":"2026-06-01T13:04:45Z","started_at":"2026-06-01T13:02:29Z","closed_at":"2026-06-01T13:04:45Z","close_reason":"Added docs/general standup summary for 2026-05-31 and verified docs index discovery.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-6ak","title":"Clarify turn doc diff rendering instructions","description":"Make AGENTS.md explicit that turn documents should render diffs with the @pierre/diffs/ssr library import instead of attempting to run @pierre/diffs through bunx.","status":"closed","priority":3,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-30T02:01:59Z","created_by":"dirtydishes","updated_at":"2026-05-30T02:02:27Z","started_at":"2026-05-30T02:02:00Z","closed_at":"2026-05-30T02:02:27Z","close_reason":"Updated AGENTS.md to require @pierre/diffs/ssr rendering, forbid bunx @pierre/diffs attempts, and include a known-good preloadPatchDiff recipe.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-6ak","title":"Clarify turn doc diff rendering instructions","description":"Make AGENTS.md explicit that turn documents should render diffs with the @pierre/diffs/ssr library import instead of attempting to run @pierre/diffs through bunx.","status":"closed","priority":3,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-30T02:01:59Z","created_by":"dirtydishes","updated_at":"2026-05-30T02:02:27Z","started_at":"2026-05-30T02:02:00Z","closed_at":"2026-05-30T02:02:27Z","close_reason":"Updated AGENTS.md to require @pierre/diffs/ssr rendering, forbid bunx @pierre/diffs attempts, and include a known-good preloadPatchDiff recipe.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-3kn","title":"Summarize 2026-05-28 git activity","description":"Prepare the standup-ready summary of yesterday's git activity, grounded in commits, PRs, and touched files, and store the HTML report in docs/general.","status":"closed","priority":3,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T13:02:25Z","created_by":"dirtydishes","updated_at":"2026-05-29T13:04:23Z","started_at":"2026-05-29T13:02:33Z","closed_at":"2026-05-29T13:04:23Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-3kn","title":"Summarize 2026-05-28 git activity","description":"Prepare the standup-ready summary of yesterday's git activity, grounded in commits, PRs, and touched files, and store the HTML report in docs/general.","status":"closed","priority":3,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T13:02:25Z","created_by":"dirtydishes","updated_at":"2026-05-29T13:04:23Z","started_at":"2026-05-29T13:02:33Z","closed_at":"2026-05-29T13:04:23Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-3ys","title":"Expand Forgejo CI beyond the fast validate path","description":"Add follow-on Forgejo CI jobs after the initial baseline is stable. This should cover deferred work such as Docker image builds for deployment/docker, service-container integration tests for NATS/Redis/ClickHouse paths, and any later deploy or release automation that should not block the first fast PR gate.","status":"open","priority":3,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-24T00:34:09Z","created_by":"dirtydishes","updated_at":"2026-05-24T00:34:09Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-3ys","title":"Expand Forgejo CI beyond the fast validate path","description":"Add follow-on Forgejo CI jobs after the initial baseline is stable. This should cover deferred work such as Docker image builds for deployment/docker, service-container integration tests for NATS/Redis/ClickHouse paths, and any later deploy or release automation that should not block the first fast PR gate.","status":"open","priority":3,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-24T00:34:09Z","created_by":"dirtydishes","updated_at":"2026-05-24T00:34:09Z","dependency_count":0,"dependent_count":0,"comment_count":0}

View file

@ -11,7 +11,7 @@ on:
workflow_dispatch: workflow_dispatch:
permissions: permissions:
contents: write contents: read
concurrency: concurrency:
group: "docs-pages" group: "docs-pages"
@ -20,6 +20,10 @@ concurrency:
jobs: jobs:
publish: publish:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
PAGES_REPOSITORY: dirtydishes/dirtydishes.github.io
PAGES_BRANCH: master
PAGES_PREFIX: islandflow
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v5 uses: actions/checkout@v5
@ -29,26 +33,42 @@ jobs:
- name: Prepare static site payload - name: Prepare static site payload
run: | run: |
rm -rf site
mkdir -p site/docs mkdir -p site/docs
cp -R docs/. site/docs/ cp -R docs/. site/docs/
find site -name .DS_Store -delete
printf '%s\n' '<!doctype html><meta charset="utf-8"><meta http-equiv="refresh" content="0; url=https://dirtydishes.github.io/islandflow/docs/"><title>Islandflow Docs</title><a href="https://dirtydishes.github.io/islandflow/docs/">Continue to docs</a>' > site/index.html printf '%s\n' '<!doctype html><meta charset="utf-8"><meta http-equiv="refresh" content="0; url=https://dirtydishes.github.io/islandflow/docs/"><title>Islandflow Docs</title><a href="https://dirtydishes.github.io/islandflow/docs/">Continue to docs</a>' > site/index.html
touch site/.nojekyll touch site/.nojekyll
- name: Publish to gh-pages branch - name: Checkout GitHub Pages site
env: uses: actions/checkout@v5
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with:
repository: ${{ env.PAGES_REPOSITORY }}
ref: ${{ env.PAGES_BRANCH }}
token: ${{ secrets.DOCS_PAGES_TOKEN }}
path: pages
fetch-depth: 0
- name: Mirror docs into Pages site
run: | run: |
set -euo pipefail set -euo pipefail
rm -rf .gh-pages-tmp rm -rf "pages/${PAGES_PREFIX}"
mkdir .gh-pages-tmp mkdir -p "pages/${PAGES_PREFIX}"
cp -R site/. .gh-pages-tmp/ cp -R site/. "pages/${PAGES_PREFIX}/"
cd .gh-pages-tmp touch pages/.nojekyll
git init - name: Commit and push Pages mirror
git checkout -b gh-pages run: |
set -euo pipefail
cd pages
git config user.name "github-actions[bot]" git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A git add "${PAGES_PREFIX}" .nojekyll
git commit -m "publish docs from ${GITHUB_SHA}"
git push --force "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" gh-pages:gh-pages if git diff --cached --quiet; then
echo "No docs changes to publish."
exit 0
fi
git commit -m "publish islandflow docs from ${GITHUB_SHA}"
git push origin "HEAD:${PAGES_BRANCH}"

893
docs/anatomy.html Normal file
View file

@ -0,0 +1,893 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Islandflow Anatomy: Print to Alert</title>
<style>
:root {
--bg: #06080b;
--bg-2: #091018;
--panel: #101820;
--panel-2: #0d141b;
--line: #22303d;
--line-strong: #3b4d5f;
--text: #e6edf4;
--muted: #9aa8b8;
--faint: #718093;
--amber: #f5a623;
--amber-soft: rgba(245, 166, 35, 0.14);
--blue: #4da3ff;
--blue-soft: rgba(77, 163, 255, 0.14);
--green: #25c17a;
--green-soft: rgba(37, 193, 122, 0.14);
--red: #ff6b5f;
--red-soft: rgba(255, 107, 95, 0.14);
--violet: #b58cff;
--violet-soft: rgba(181, 140, 255, 0.13);
--shadow: rgba(0, 0, 0, 0.36);
color-scheme: dark;
}
* {
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
margin: 0;
background:
radial-gradient(circle at 15% 0%, rgba(77, 163, 255, 0.1), transparent 31rem),
radial-gradient(circle at 85% 4%, rgba(245, 166, 35, 0.1), transparent 28rem),
linear-gradient(180deg, var(--bg), #05070a 52%, #070a0e);
color: var(--text);
font-family: "IBM Plex Sans", "Avenir Next", "Segoe UI", system-ui, sans-serif;
line-height: 1.55;
}
a {
color: var(--blue);
}
code,
pre,
.mono,
.chip,
.nav a,
.diagram text,
.table-label {
font-family: "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;
}
main {
width: min(1180px, calc(100% - 32px));
margin: 0 auto;
padding: 28px 0 64px;
}
.hero {
min-height: 76vh;
display: grid;
align-content: center;
gap: 28px;
padding: 40px 0 24px;
border-bottom: 1px solid var(--line);
}
.eyebrow {
margin: 0;
color: var(--amber);
font: 700 0.78rem/1.2 "IBM Plex Mono", "SFMono-Regular", Consolas, monospace;
letter-spacing: 0.1em;
text-transform: uppercase;
}
h1,
h2,
h3 {
margin: 0;
text-wrap: balance;
}
h1 {
max-width: 12ch;
font-size: clamp(3.1rem, 8vw, 5.8rem);
line-height: 0.96;
letter-spacing: -0.03em;
}
h2 {
font-size: clamp(1.7rem, 3vw, 2.55rem);
line-height: 1.08;
letter-spacing: -0.02em;
}
h3 {
font-size: 1.06rem;
line-height: 1.25;
}
p {
margin: 0;
color: var(--muted);
max-width: 72ch;
}
.lede {
color: #c7d1dd;
font-size: clamp(1rem, 1.5vw, 1.18rem);
max-width: 72ch;
}
.hero-grid {
display: grid;
grid-template-columns: minmax(0, 0.9fr) minmax(360px, 1.1fr);
gap: 32px;
align-items: end;
}
.nav {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 6px;
}
.nav a,
.chip {
display: inline-flex;
align-items: center;
min-height: 32px;
padding: 7px 10px;
border: 1px solid var(--line);
border-radius: 999px;
background: rgba(255, 255, 255, 0.035);
color: var(--text);
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.08em;
text-decoration: none;
text-transform: uppercase;
}
.nav a:hover {
border-color: rgba(245, 166, 35, 0.58);
background: var(--amber-soft);
}
section {
padding: 54px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.section-head {
display: grid;
grid-template-columns: minmax(0, 0.55fr) minmax(320px, 0.45fr);
gap: 32px;
align-items: start;
margin-bottom: 24px;
}
.panel {
border: 1px solid var(--line);
border-radius: 14px;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018));
box-shadow: 0 16px 40px var(--shadow);
}
.diagram-panel {
padding: 16px;
overflow: hidden;
}
.diagram {
width: 100%;
height: auto;
display: block;
}
.diagram .box {
fill: #101820;
stroke: #2d3c4b;
stroke-width: 1.2;
rx: 10;
}
.diagram .box.hot {
fill: rgba(245, 166, 35, 0.12);
stroke: rgba(245, 166, 35, 0.72);
}
.diagram .box.blue {
fill: rgba(77, 163, 255, 0.12);
stroke: rgba(77, 163, 255, 0.64);
}
.diagram .box.green {
fill: rgba(37, 193, 122, 0.12);
stroke: rgba(37, 193, 122, 0.64);
}
.diagram .box.violet {
fill: rgba(181, 140, 255, 0.12);
stroke: rgba(181, 140, 255, 0.64);
}
.diagram .box.red {
fill: rgba(255, 107, 95, 0.12);
stroke: rgba(255, 107, 95, 0.64);
}
.diagram .label {
fill: var(--text);
font-size: 13px;
font-weight: 700;
letter-spacing: 0.02em;
}
.diagram .detail {
fill: var(--muted);
font-size: 11px;
}
.diagram .arrow,
.diagram .branch {
fill: none;
stroke: #647488;
stroke-width: 1.8;
marker-end: url(#arrow);
}
.diagram .branch {
stroke-dasharray: 5 5;
}
.grid {
display: grid;
gap: 14px;
}
.grid.two {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid.three {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.fact {
padding: 16px;
border: 1px solid var(--line);
border-radius: 12px;
background: rgba(13, 20, 27, 0.82);
}
.fact h3 {
margin-bottom: 8px;
}
.fact p {
font-size: 0.92rem;
}
.fact code {
color: #dce7f4;
font-size: 0.86rem;
}
.flow-list {
margin: 0;
padding: 0;
list-style: none;
display: grid;
gap: 12px;
}
.flow-list li {
display: grid;
grid-template-columns: 34px minmax(0, 1fr);
gap: 12px;
align-items: start;
padding: 14px;
border: 1px solid var(--line);
border-radius: 12px;
background: rgba(16, 24, 32, 0.76);
}
.num {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border-radius: 999px;
background: var(--amber-soft);
color: var(--amber);
font-weight: 800;
}
.flow-list strong {
color: var(--text);
}
.flow-list p {
margin-top: 4px;
font-size: 0.92rem;
}
.schema {
display: grid;
gap: 10px;
}
.schema-row {
display: grid;
grid-template-columns: 190px minmax(0, 1fr);
gap: 14px;
padding: 12px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.schema-row:last-child {
border-bottom: 0;
}
.schema-row code {
color: var(--amber);
font-size: 0.86rem;
}
.schema-row span {
color: var(--muted);
}
.matrix {
overflow-x: auto;
}
table {
width: 100%;
min-width: 760px;
border-collapse: collapse;
}
th,
td {
padding: 12px 14px;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
text-align: left;
vertical-align: top;
}
th {
color: var(--text);
background: rgba(255, 255, 255, 0.04);
font-size: 0.76rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
td {
color: var(--muted);
}
td code {
color: #dce7f4;
}
pre {
margin: 0;
padding: 16px;
overflow: auto;
border: 1px solid var(--line);
border-radius: 12px;
background: #070b10;
color: #dce7f4;
font-size: 0.84rem;
line-height: 1.55;
}
.callout {
padding: 18px;
border: 1px solid rgba(245, 166, 35, 0.42);
border-radius: 14px;
background: linear-gradient(135deg, rgba(245, 166, 35, 0.14), rgba(77, 163, 255, 0.08));
}
.callout p {
color: #dce7f4;
}
.small {
color: var(--faint);
font-size: 0.86rem;
}
.legend {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 14px;
}
.legend .chip:nth-child(2) {
border-color: rgba(77, 163, 255, 0.44);
background: var(--blue-soft);
}
.legend .chip:nth-child(3) {
border-color: rgba(37, 193, 122, 0.44);
background: var(--green-soft);
}
.legend .chip:nth-child(4) {
border-color: rgba(181, 140, 255, 0.44);
background: var(--violet-soft);
}
.legend .chip:nth-child(5) {
border-color: rgba(255, 107, 95, 0.44);
background: var(--red-soft);
}
footer {
padding: 32px 0 12px;
color: var(--faint);
}
@media (max-width: 900px) {
main {
width: min(100% - 24px, 760px);
}
.hero {
min-height: auto;
padding-top: 24px;
}
.hero-grid,
.section-head,
.grid.two,
.grid.three {
grid-template-columns: 1fr;
}
h1 {
max-width: 9ch;
font-size: clamp(3rem, 14vw, 4.6rem);
}
section {
padding: 42px 0;
}
}
@media (max-width: 560px) {
.schema-row {
grid-template-columns: 1fr;
gap: 4px;
}
.diagram-panel {
padding: 10px;
}
.nav a,
.chip {
font-size: 0.68rem;
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
}
</style>
</head>
<body>
<main>
<header class="hero">
<div class="hero-grid">
<div class="grid">
<p class="eyebrow">Islandflow system reference</p>
<h1>From print to alert</h1>
<p class="lede">
A compact anatomy map for the path a market print takes through ingest, the live
tape, flow packet construction, smart-money profiling, classifier hits, and alerts.
</p>
<nav class="nav" aria-label="Page sections">
<a href="#pipeline">Pipeline</a>
<a href="#prints">Prints</a>
<a href="#flow-packets">Flow packets</a>
<a href="#smart-money">Smart money</a>
<a href="#classifiers">Classifiers</a>
<a href="#alerts">Alerts</a>
<a href="#traceability">Traceability</a>
</nav>
</div>
<div class="panel diagram-panel" aria-label="High level data flow diagram">
<svg class="diagram" viewBox="0 0 720 420" role="img">
<title>Print to alert overview</title>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#647488"></path>
</marker>
</defs>
<rect class="box blue" x="26" y="42" width="132" height="74"></rect>
<text class="label" x="46" y="73">Ingest</text>
<text class="detail" x="46" y="94">options.prints</text>
<text class="detail" x="46" y="108">equities.prints</text>
<rect class="box hot" x="214" y="42" width="132" height="74"></rect>
<text class="label" x="234" y="73">Tape</text>
<text class="detail" x="234" y="94">signal rows</text>
<text class="detail" x="234" y="108">raw context</text>
<rect class="box green" x="402" y="42" width="132" height="74"></rect>
<text class="label" x="422" y="73">Compute</text>
<text class="detail" x="422" y="94">cluster</text>
<text class="detail" x="422" y="108">join features</text>
<rect class="box violet" x="562" y="42" width="132" height="74"></rect>
<text class="label" x="582" y="73">FlowPacket</text>
<text class="detail" x="582" y="94">members[]</text>
<text class="detail" x="582" y="108">features{}</text>
<path class="arrow" d="M158 79 H212"></path>
<path class="arrow" d="M346 79 H400"></path>
<path class="arrow" d="M534 79 H560"></path>
<rect class="box violet" x="126" y="202" width="150" height="82"></rect>
<text class="label" x="146" y="235">SmartMoney</text>
<text class="detail" x="146" y="256">profile_scores[]</text>
<text class="detail" x="146" y="270">primary_direction</text>
<rect class="box blue" x="330" y="202" width="150" height="82"></rect>
<text class="label" x="350" y="235">ClassifierHit</text>
<text class="detail" x="350" y="256">classifier_id</text>
<text class="detail" x="350" y="270">confidence</text>
<rect class="box red" x="534" y="202" width="150" height="82"></rect>
<text class="label" x="554" y="235">Alert</text>
<text class="detail" x="554" y="256">score + severity</text>
<text class="detail" x="554" y="270">evidence_refs[]</text>
<path class="arrow" d="M628 116 C628 158 202 158 202 200"></path>
<path class="arrow" d="M276 243 H328"></path>
<path class="arrow" d="M480 243 H532"></path>
<rect class="box" x="126" y="338" width="558" height="46"></rect>
<text class="label" x="146" y="366">ClickHouse history + API live fanout + replay cursors</text>
<path class="branch" d="M202 284 V336"></path>
<path class="branch" d="M405 284 V336"></path>
<path class="branch" d="M610 284 V336"></path>
</svg>
<div class="legend">
<span class="chip">ingest</span>
<span class="chip">tape</span>
<span class="chip">derived</span>
<span class="chip">profile</span>
<span class="chip">alert</span>
</div>
</div>
</div>
</header>
<section id="pipeline">
<div class="section-head">
<div>
<h2>The pipeline is two paths that meet again</h2>
</div>
<p>
Ingest publishes the live market row. The API can show that row immediately as tape,
while compute consumes the signal stream and builds slower, richer derived events from
the same traceable print evidence.
</p>
</div>
<ol class="flow-list">
<li>
<span class="num">1</span>
<div>
<strong>Adapters publish raw market events.</strong>
<p>
Options prints, option NBBO, equity prints, and equity quotes land on NATS subjects
such as <code>options.prints</code>, <code>options.nbbo</code>, and
<code>equities.prints</code>. Each event carries <code>source_ts</code>,
<code>ingest_ts</code>, <code>seq</code>, and <code>trace_id</code>.
</p>
</div>
</li>
<li>
<span class="num">2</span>
<div>
<strong>Signal prints become the options tape head.</strong>
<p>
The options ingest path enriches prints with contract metadata, NBBO side,
notional, ETF classification, and <code>signal_pass</code>. Signal-qualified rows
are published to <code>options.prints.signal</code>.
</p>
</div>
</li>
<li>
<span class="num">3</span>
<div>
<strong>Compute clusters print evidence into flow packets.</strong>
<p>
Compute consumes signal prints and NBBO context, groups nearby activity, derives
features, writes <code>flow_packets</code>, and publishes <code>flow.packets</code>.
</p>
</div>
</li>
<li>
<span class="num">4</span>
<div>
<strong>Parent events, hits, and alerts preserve the evidence chain.</strong>
<p>
A flow packet can produce a <code>SmartMoneyEvent</code>, one or more
<code>ClassifierHitEvent</code> rows, and an <code>AlertEvent</code>. The resulting
alert keeps <code>evidence_refs</code> back to packet and print identifiers.
</p>
</div>
</li>
</ol>
</section>
<section id="prints">
<div class="section-head">
<div>
<h2>Prints are the smallest inspectable fact</h2>
</div>
<p>
A print is not yet a theory. It is a timed execution row plus enough enrichment to say
whether it deserves live attention and whether it can support later inference.
</p>
</div>
<div class="grid two">
<div class="fact">
<h3>OptionPrint</h3>
<div class="schema">
<div class="schema-row"><code>option_contract_id</code><span>The contract key, parsed into root, expiry, strike, and right when possible.</span></div>
<div class="schema-row"><code>price + size</code><span>The execution terms used for premium and notional.</span></div>
<div class="schema-row"><code>nbbo_side</code><span>Where the trade printed versus bid, ask, midpoint, missing quote, or stale quote.</span></div>
<div class="schema-row"><code>signal_pass</code><span>Whether the print survives the configured smart-money, balanced, or all mode filter.</span></div>
</div>
</div>
<div class="fact">
<h3>EquityPrint</h3>
<div class="schema">
<div class="schema-row"><code>underlying_id</code><span>The equity symbol or internal underlying identifier.</span></div>
<div class="schema-row"><code>price + size</code><span>The trade terms used for candles and equity context.</span></div>
<div class="schema-row"><code>offExchangeFlag</code><span>A direct flag for off-exchange prints before dark inference adds interpretation.</span></div>
<div class="schema-row"><code>trace_id</code><span>The stable evidence handle used for joins, drawers, history, and replay.</span></div>
</div>
</div>
</div>
</section>
<section id="flow-packets">
<div class="section-head">
<div>
<h2>Flow packets are parent evidence, not final conclusions</h2>
</div>
<p>
Compute creates a <code>FlowPacket</code> when activity is strong enough to inspect as a
grouped unit. It stores member print ids, aggregate features, and join-quality metrics
so later events can explain what they used.
</p>
</div>
<div class="panel diagram-panel" aria-label="Flow packet detail diagram">
<svg class="diagram" viewBox="0 0 900 360" role="img">
<title>Flow packet anatomy</title>
<defs>
<marker id="arrow2" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#647488"></path>
</marker>
</defs>
<rect class="box hot" x="32" y="54" width="176" height="70"></rect>
<text class="label" x="54" y="85">Print A</text>
<text class="detail" x="54" y="106">trace_id: opt-101</text>
<rect class="box hot" x="32" y="144" width="176" height="70"></rect>
<text class="label" x="54" y="175">Print B</text>
<text class="detail" x="54" y="196">trace_id: opt-102</text>
<rect class="box hot" x="32" y="234" width="176" height="70"></rect>
<text class="label" x="54" y="265">Print C</text>
<text class="detail" x="54" y="286">trace_id: opt-103</text>
<rect class="box violet" x="328" y="94" width="240" height="170"></rect>
<text class="label" x="352" y="128">FlowPacket</text>
<text class="detail" x="352" y="153">members: [opt-101, opt-102, opt-103]</text>
<text class="detail" x="352" y="178">features: total_premium, count, dte</text>
<text class="detail" x="352" y="203">nbbo_aggressive_buy_ratio</text>
<text class="detail" x="352" y="228">join_quality: coverage, age, spread</text>
<rect class="box green" x="692" y="78" width="176" height="74"></rect>
<text class="label" x="714" y="110">ClickHouse</text>
<text class="detail" x="714" y="131">flow_packets</text>
<rect class="box blue" x="692" y="206" width="176" height="74"></rect>
<text class="label" x="714" y="238">Live API</text>
<text class="detail" x="714" y="259">channel: flow</text>
<path class="arrow" marker-end="url(#arrow2)" d="M208 89 C258 89 266 139 326 153"></path>
<path class="arrow" marker-end="url(#arrow2)" d="M208 179 H326"></path>
<path class="arrow" marker-end="url(#arrow2)" d="M208 269 C258 269 266 219 326 204"></path>
<path class="arrow" marker-end="url(#arrow2)" d="M568 140 H690"></path>
<path class="arrow" marker-end="url(#arrow2)" d="M568 218 H690"></path>
</svg>
</div>
</section>
<section id="smart-money">
<div class="section-head">
<div>
<h2>Smart-money events turn packet features into profiles</h2>
</div>
<p>
A <code>SmartMoneyEvent</code> is the parent interpretation of a flow packet. It keeps
packet ids and member print ids, then records profile probabilities, direction,
abstention state, and any suppression reasons.
</p>
</div>
<div class="grid three">
<div class="fact">
<h3>Profiles</h3>
<p>
Current profile ids include <code>institutional_directional</code>,
<code>retail_whale</code>, <code>event_driven</code>, <code>vol_seller</code>,
<code>arbitrage</code>, and <code>hedge_reactive</code>.
</p>
</div>
<div class="fact">
<h3>Direction</h3>
<p>
Direction is normalized as <code>bullish</code>, <code>bearish</code>,
<code>neutral</code>, <code>mixed</code>, or <code>unknown</code>, with profile reasons
kept beside the probability.
</p>
</div>
<div class="fact">
<h3>Suppression</h3>
<p>
Special print context, stale quotes, missing NBBO coverage, or cross-like executions
can lower confidence or cause an abstained event rather than a confident call.
</p>
</div>
</div>
</section>
<section id="classifiers">
<div class="section-head">
<div>
<h2>Classifier hits are named detections with reasons</h2>
</div>
<p>
Classifiers look at packet and smart-money context, then emit hit events with a
classifier id, confidence, direction, and explanation strings. They are deliberately
narrower than alerts.
</p>
</div>
<div class="matrix panel">
<table>
<thead>
<tr>
<th class="table-label">Layer</th>
<th class="table-label">Primary input</th>
<th class="table-label">Important fields</th>
<th class="table-label">What the operator sees</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>FlowPacket</code></td>
<td>Signal option prints and quote context</td>
<td><code>members</code>, <code>features</code>, <code>join_quality</code></td>
<td>Grouped flow row, packet drawer, linked member prints</td>
</tr>
<tr>
<td><code>SmartMoneyEvent</code></td>
<td>One flow packet plus event calendar context when available</td>
<td><code>profile_scores</code>, <code>primary_direction</code>, <code>suppressed_reasons</code></td>
<td>Smart-money profile row and profile reasoning</td>
</tr>
<tr>
<td><code>ClassifierHitEvent</code></td>
<td>Derived parent event and packet feature thresholds</td>
<td><code>classifier_id</code>, <code>confidence</code>, <code>direction</code>, <code>explanations</code></td>
<td>Classifier feed row and decorators on linked tape rows</td>
</tr>
<tr>
<td><code>AlertEvent</code></td>
<td>Flow packet plus one or more classifier hits</td>
<td><code>score</code>, <code>severity</code>, <code>hits</code>, <code>evidence_refs</code></td>
<td>Alert row, severity strip, alert context drawer</td>
</tr>
</tbody>
</table>
</div>
</section>
<section id="alerts">
<div class="section-head">
<div>
<h2>Alerts package evidence for action</h2>
</div>
<p>
Alerts do not replace the underlying evidence. They score it, attach severity, and keep
enough references for the UI and API to reconstruct the supporting packet and prints.
</p>
</div>
<div class="grid two">
<pre><code>AlertEvent {
source_ts
ingest_ts
seq
trace_id
score
severity
hits[]
evidence_refs[]
primary_profile_id?
profile_scores?
}</code></pre>
<div class="callout">
<p>
Alert scoring combines packet premium, strongest classifier confidence, and hit count,
then maps the score into <code>low</code>, <code>medium</code>, or <code>high</code>
severity. The important operational detail is that the alert remains reversible:
open it, inspect the hit, inspect the packet, then inspect the print evidence.
</p>
</div>
</div>
</section>
<section id="traceability">
<div class="section-head">
<div>
<h2>Traceability is the contract between live and replay</h2>
</div>
<p>
Every major row carries cursor-friendly time metadata and a trace handle. The live API
uses NATS for fresh events, ClickHouse for snapshots and older history, and the same
schemas for replay.
</p>
</div>
<div class="grid two">
<div class="fact">
<h3>Live channels</h3>
<p>
The terminal subscribes to channels including <code>options</code>, <code>flow</code>,
<code>smart-money</code>, <code>classifier-hits</code>, and <code>alerts</code>. Each
channel can deliver snapshots, events, watermarks, and history cursors.
</p>
</div>
<div class="fact">
<h3>History tables</h3>
<p>
Derived rows are persisted as <code>flow_packets</code>,
<code>smart_money_events</code>, <code>classifier_hits</code>, and
<code>alerts</code>. Alert context lookup resolves evidence references across those
tables and the option print store.
</p>
</div>
</div>
</section>
<footer>
<p class="small">
Reference based on the current Islandflow TypeScript schemas, NATS subjects, compute
service, storage tables, and live API channel names.
</p>
</footer>
</main>
</body>
</html>

View file

@ -0,0 +1,519 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Standup Summary for 2026-05-31</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@500;600&family=IBM+Plex+Sans:wght@400;500;600&family=Quantico:wght@400;700&display=swap"
rel="stylesheet"
/>
<style>
:root {
color-scheme: dark;
--bg: #06080b;
--panel: rgba(17, 24, 32, 0.94);
--panel-2: rgba(13, 20, 27, 0.98);
--line: rgba(255, 255, 255, 0.09);
--text: #e6edf4;
--muted: #90a0b2;
--faint: #6e7b8c;
--amber: #f5a623;
--amber-soft: rgba(245, 166, 35, 0.14);
--blue: #4da3ff;
--blue-soft: rgba(77, 163, 255, 0.12);
--green: #25c17a;
--green-soft: rgba(37, 193, 122, 0.12);
--red: #ff6b5f;
--red-soft: rgba(255, 107, 95, 0.12);
--shadow: 0 24px 64px rgba(0, 0, 0, 0.35);
--radius: 18px;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background:
radial-gradient(circle at top right, rgba(245, 166, 35, 0.14), transparent 28rem),
radial-gradient(circle at top left, rgba(77, 163, 255, 0.1), transparent 24rem),
linear-gradient(180deg, #081018 0%, var(--bg) 34%, #05070a 100%);
color: var(--text);
font-family: "IBM Plex Sans", system-ui, sans-serif;
line-height: 1.6;
}
main {
width: min(1120px, calc(100% - 32px));
margin: 0 auto;
padding: 30px 0 56px;
}
.hero,
section {
border: 1px solid var(--line);
border-radius: var(--radius);
background: linear-gradient(180deg, var(--panel), var(--panel-2));
}
.hero {
padding: 30px;
box-shadow: var(--shadow);
}
section {
margin-top: 18px;
padding: 22px;
}
.eyebrow,
.chip,
h2,
.commit-id,
code,
pre {
font-family: "IBM Plex Mono", monospace;
}
.eyebrow {
display: inline-flex;
padding: 6px 10px;
border-radius: 999px;
background: var(--amber-soft);
color: var(--amber);
font-size: 0.76rem;
letter-spacing: 0.12em;
text-transform: uppercase;
}
h1,
h3 {
margin: 0;
font-family: "Quantico", sans-serif;
letter-spacing: 0.05em;
}
h1 {
margin-top: 16px;
font-size: clamp(2.2rem, 4vw, 3.7rem);
line-height: 1.03;
text-transform: uppercase;
}
h2 {
margin: 0 0 14px;
color: var(--amber);
font-size: 0.84rem;
letter-spacing: 0.12em;
text-transform: uppercase;
}
h3 {
font-size: 1rem;
}
p,
li {
max-width: 80ch;
color: var(--muted);
}
.hero p {
margin: 16px 0 0;
font-size: 1.02rem;
}
.meta {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
gap: 12px;
margin-top: 22px;
}
.meta-card,
.timeline-item,
.summary-item,
.callout {
padding: 16px 18px;
border: 1px solid var(--line);
border-radius: 14px;
background: rgba(255, 255, 255, 0.025);
}
.meta-card strong,
.label {
display: block;
margin-bottom: 6px;
color: var(--text);
font-size: 0.74rem;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.summary-list,
.timeline {
display: grid;
gap: 12px;
}
.timeline-meta {
display: flex;
flex-wrap: wrap;
gap: 10px 14px;
margin-bottom: 10px;
}
.commit-id {
color: var(--blue);
font-size: 0.76rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.timestamp {
color: var(--faint);
font-size: 0.76rem;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.chip-row,
.file-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.chip,
.file-pill {
display: inline-flex;
align-items: center;
padding: 6px 10px;
border-radius: 999px;
border: 1px solid var(--line);
background: rgba(255, 255, 255, 0.03);
color: var(--text);
font-size: 0.74rem;
letter-spacing: 0.04em;
}
.good {
background: var(--green-soft);
color: var(--green);
}
.info {
background: var(--blue-soft);
color: var(--blue);
}
.risk {
background: var(--red-soft);
color: var(--red);
}
ul {
margin: 0;
padding-left: 1.2rem;
}
li + li {
margin-top: 8px;
}
code {
color: #ffd596;
}
pre {
margin: 12px 0 0;
padding: 14px 16px;
overflow-x: auto;
border-radius: 12px;
border: 1px solid var(--line);
background: rgba(5, 10, 15, 0.96);
color: var(--text);
font-size: 0.86rem;
}
a {
color: #8bc1ff;
}
@media (max-width: 720px) {
main {
width: min(100%, calc(100% - 20px));
padding: 18px 0 28px;
}
.hero,
section {
padding: 18px;
}
}
</style>
</head>
<body>
<main>
<header class="hero">
<span class="eyebrow">Daily Git Summary</span>
<h1>Standup Summary for 2026-05-31</h1>
<p>
Three commits landed on Sunday, May 31, 2026. The days git-visible work centered on
documentation operations: repo guidance was trimmed in <code>AGENTS.md</code>, a new
standalone <code>docs/anatomy.html</code> reference page was added, and the GitHub Pages
mirror workflow was retargeted to publish into <code>dirtydishes.github.io/islandflow</code>.
</p>
<div class="meta">
<div class="meta-card">
<strong>Commits inspected</strong>
3 on 2026-05-31
</div>
<div class="meta-card">
<strong>Files touched</strong>
6 unique files
</div>
<div class="meta-card">
<strong>Tracked issues</strong>
<code>islandflow-5jt</code>, <code>islandflow-m3d</code>
</div>
<div class="meta-card">
<strong>Open follow-up</strong>
<code>islandflow-8a6</code>
</div>
</div>
</header>
<section>
<h2>Summary</h2>
<div class="summary-list">
<article class="summary-item">
<h3>Repo turn-document rules were tightened and shortened.</h3>
<p>
Commit <code>ab35533289b4</code> removed most duplicated repository-specific turn-doc
prose from <code>AGENTS.md</code> and replaced it with references back to the global
Codex instructions plus a smaller repo override block.
</p>
</article>
<article class="summary-item">
<h3>An anatomy explainer page was added to the docs set.</h3>
<p>
Commit <code>5074b7eeaa9e</code> created <code>docs/anatomy.html</code>, updated the
generated docs index, and closed Beads task <code>islandflow-5jt</code>.
</p>
</article>
<article class="summary-item">
<h3>The docs mirror workflow was pointed at the actual Pages target.</h3>
<p>
Commit <code>8933e29ae83d</code> rewired <code>.github/workflows/docs-pages.yml</code>
to check out <code>dirtydishes/dirtydishes.github.io</code>, mirror
<code>site/docs</code> under <code>islandflow</code>, and push to that repositorys
<code>master</code> branch. The same commit closed <code>islandflow-m3d</code> and
left <code>islandflow-8a6</code> open for token verification.
</p>
</article>
</div>
</section>
<section>
<h2>Changes Made</h2>
<div class="timeline">
<article class="timeline-item">
<div class="timeline-meta">
<span class="commit-id">ab35533289b4</span>
<span class="timestamp">2026-05-31 09:29 EDT</span>
<span class="chip info">docs policy trim</span>
</div>
<p>
<strong>trim repo turn doc guidance</strong> reduced <code>AGENTS.md</code> by
removing duplicated turn-document instructions and keeping only the repo-specific
overrides: <code>docs/turns</code> location, <code>impeccable</code> usage,
<code>@pierre/diffs/ssr</code> for diff rendering, the minor/trivial exemption list,
and the completion checklist.
</p>
<div class="file-list">
<span class="file-pill">AGENTS.md</span>
</div>
</article>
<article class="timeline-item">
<div class="timeline-meta">
<span class="commit-id">5074b7eeaa9e</span>
<span class="timestamp">2026-05-31 17:26 EDT</span>
<span class="chip good">new docs surface</span>
</div>
<p>
<strong>add anatomy reference page</strong> added a new standalone docs page and
updated the generated docs landing page so <code>anatomy.html</code> appears in the
root document listing. The Beads state added and closed
<code>islandflow-5jt</code> with the note that the page had been linked from the docs
index.
</p>
<div class="file-list">
<span class="file-pill">docs/anatomy.html</span>
<span class="file-pill">docs/index.html</span>
<span class="file-pill">.beads/issues.jsonl</span>
</div>
</article>
<article class="timeline-item">
<div class="timeline-meta">
<span class="commit-id">8933e29ae83d</span>
<span class="timestamp">2026-05-31 18:13 EDT</span>
<span class="chip good">docs deploy fix</span>
</div>
<p>
<strong>fix docs pages mirror target</strong> changed the GitHub Actions workflow
from pushing a local <code>gh-pages</code> branch to checking out
<code>dirtydishes/dirtydishes.github.io</code>, copying the generated docs into
<code>pages/islandflow</code>, and pushing back to the Pages repos
<code>master</code> branch. It also tightened the generated HTML formatting in
<code>scripts/generate-docs-index.mjs</code>, regenerated <code>docs/index.html</code>,
and added turn doc
<code>docs/turns/2026-05-31-fix-docs-pages-mirror.html</code>.
</p>
<div class="file-list">
<span class="file-pill">.github/workflows/docs-pages.yml</span>
<span class="file-pill">scripts/generate-docs-index.mjs</span>
<span class="file-pill">docs/index.html</span>
<span class="file-pill">docs/turns/2026-05-31-fix-docs-pages-mirror.html</span>
<span class="file-pill">.beads/issues.jsonl</span>
</div>
</article>
</div>
</section>
<section>
<h2>Context</h2>
<p>
This report is anchored to local git history whose commit dates fall between
<code>2026-05-31 00:00:00 -0400</code> and <code>2026-06-01 00:00:00 -0400</code>. No PR
merges appear in that window, so the summary is commit-first and file-first. Beads issue
references are only included where they were visible in the inspected commit diffs.
</p>
</section>
<section>
<h2>Important Implementation Details</h2>
<ul>
<li>
<code>AGENTS.md</code> kept the repo-specific overrides but stopped restating the global
turn-document policy in full, which should reduce drift between the repo file and
<code>~/.codex/AGENTS.md</code>.
</li>
<li>
The anatomy page landed as a standalone HTML asset at the docs root rather than under
<code>docs/turns</code> or <code>docs/general</code>, and the generated docs index was
updated so it appears under the root category.
</li>
<li>
The docs mirror workflow now uses these environment values inside the workflow job:
<code>PAGES_REPOSITORY=dirtydishes/dirtydishes.github.io</code>,
<code>PAGES_BRANCH=master</code>, and <code>PAGES_PREFIX=islandflow</code>.
</li>
<li>
The mirror job now depends on <code>DOCS_PAGES_TOKEN</code> rather than the default
<code>GITHUB_TOKEN</code>, because it pushes to a different repository.
</li>
<li>
The docs index generator change was mostly structural formatting: the rendered HTML for
list items and sections became tighter without changing the indexs overall categories or
sorting behavior.
</li>
</ul>
<pre><code>Docs Pages mirror target after 8933e29ae83d:
PAGES_REPOSITORY=dirtydishes/dirtydishes.github.io
PAGES_BRANCH=master
PAGES_PREFIX=islandflow</code></pre>
</section>
<section>
<h2>Expected Impact for End-Users</h2>
<ul>
<li>
Contributors working with Codex repo instructions should see less duplicated policy in
<code>AGENTS.md</code> and clearer repo-only overrides.
</li>
<li>
Readers browsing project docs now have a dedicated anatomy reference page linked from the
docs index.
</li>
<li>
Once the external token is configured, GitHub Pages visitors should get the current docs
from <code>dirtydishes.github.io/islandflow/docs/</code> instead of relying on a
mismatched branch target.
</li>
</ul>
</section>
<section>
<h2>Validation</h2>
<ul>
<li>
Used <code>git log</code> scoped to May 31, 2026 to enumerate the three commits included
in this standup window.
</li>
<li>
Used <code>git show --stat</code> and targeted <code>git show</code> diffs to anchor the
changed files, workflow behavior, and visible Beads issue IDs for each commit.
</li>
<li>
For the docs mirror fix, reused validation already recorded in committed turn doc
<code>docs/turns/2026-05-31-fix-docs-pages-mirror.html</code>: local
<code>node scripts/generate-docs-index.mjs</code>, <code>node --check</code> on the
generator, YAML parsing for <code>.github/workflows/docs-pages.yml</code>, and
<code>git diff --check</code>.
</li>
<li>
No separate automated validation was visible in the inspected May 31 commits for the
<code>AGENTS.md</code> trim or the anatomy page beyond the committed file additions and
docs index linkage.
</li>
</ul>
</section>
<section>
<h2>Issues, Limitations, and Mitigations</h2>
<div class="chip-row">
<span class="chip risk">commit-history only</span>
<span class="chip risk">token still required</span>
</div>
<ul>
<li>
This summary only reflects landed git history for May 31 and does not include uncommitted
work, discussion, or operational checks performed outside the repository.
</li>
<li>
The anatomy page commit did not include a companion turn document, so its validation
notes here are limited to what the commit itself showed: file creation, docs index update,
and Beads closure text.
</li>
<li>
The docs mirror workflow fix is not fully effective until the GitHub mirror repository
secret <code>DOCS_PAGES_TOKEN</code> is present and valid. That gap is already tracked in
<code>islandflow-8a6</code>.
</li>
</ul>
</section>
<section>
<h2>Follow-up Work</h2>
<ul>
<li>
<code>islandflow-8a6</code>: verify the GitHub Pages token for the docs mirror so the
updated workflow can push to <code>dirtydishes/dirtydishes.github.io</code>.
</li>
<li>
No additional Beads follow-up was visible for the trimmed repo guidance commit
<code>ab35533289b4</code> in the inspected history.
</li>
</ul>
</section>
</main>
</body>
</html>

View file

@ -207,100 +207,274 @@
</header> </header>
<section class="toolbar"> <section class="toolbar">
<div class="stats"><strong id="visible-count">35</strong> of <strong>35</strong> files shown</div> <div class="stats"><strong id="visible-count">65</strong> of <strong>65</strong> files shown</div>
<input id="doc-search" class="search" type="search" placeholder="Filter by filename or folder..." autocomplete="off" /> <input id="doc-search" class="search" type="search" placeholder="Filter by filename or folder..." autocomplete="off" />
<nav class="chips"><a class="chip" href="#category-turns">turns <span>28</span></a> <nav class="chips"><a class="chip" href="#category-turns">turns <span>52</span></a>
<a class="chip" href="#category-daily-git">daily-git <span>1</span></a> <a class="chip" href="#category-daily-git">daily-git <span>1</span></a>
<a class="chip" href="#category-general">general <span>2</span></a> <a class="chip" href="#category-general">general <span>7</span></a>
<a class="chip" href="#category-plans">plans <span>2</span></a> <a class="chip" href="#category-plans">plans <span>2</span></a>
<a class="chip" href="#category-root">root <span>2</span></a></nav> <a class="chip" href="#category-root">root <span>3</span></a></nav>
</section> </section>
<section class="groups" id="groups"> <section class="groups" id="groups"> <section class="group" id="category-turns">
<section class="group" id="category-turns"> <h2>turns <span>52</span></h2>
<h2>turns <span>28</span></h2>
<ul class="doc-list"> <ul class="doc-list">
<li class="doc-item" data-search="turns/2026-05-31-fix-docs-pages-mirror.html turns">
<li class="doc-item" data-search="turns/2026-05-19-publish-docs-pages-index.html turns"> <a class="doc-link" href="./turns/2026-05-31-fix-docs-pages-mirror.html">turns/2026-05-31-fix-docs-pages-mirror.html</a>
<a class="doc-link" href="./turns/2026-05-19-publish-docs-pages-index.html">turns/2026-05-19-publish-docs-pages-index.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>6.7 KB</span> <span>203 KB</span>
<span>May 19, 2026, 2:59 PM</span> <span>Jun 1, 2026, 9:45 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-30-expand-ci-quality-gates.html turns">
<a class="doc-link" href="./turns/2026-05-30-expand-ci-quality-gates.html">turns/2026-05-30-expand-ci-quality-gates.html</a>
<li class="doc-item" data-search="turns/2026-05-18-native-public-edge-cutover.html turns">
<a class="doc-link" href="./turns/2026-05-18-native-public-edge-cutover.html">turns/2026-05-18-native-public-edge-cutover.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>19 KB</span> <span>135 KB</span>
<span>May 19, 2026, 2:48 PM</span> <span>May 31, 2026, 5:18 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-30-fix-forgejo-ci-test-mocks.html turns">
<a class="doc-link" href="./turns/2026-05-30-fix-forgejo-ci-test-mocks.html">turns/2026-05-30-fix-forgejo-ci-test-mocks.html</a>
<div class="meta">
<span class="tag">html</span>
<span>99 KB</span>
<span>May 31, 2026, 5:18 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-29-fix-electron-node-gyp-install-resolution.html turns">
<a class="doc-link" href="./turns/2026-05-29-fix-electron-node-gyp-install-resolution.html">turns/2026-05-29-fix-electron-node-gyp-install-resolution.html</a>
<div class="meta">
<span class="tag">html</span>
<span>7.9 KB</span>
<span>May 31, 2026, 5:18 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-29-remove-frontend-cooker.html turns">
<a class="doc-link" href="./turns/2026-05-29-remove-frontend-cooker.html">turns/2026-05-29-remove-frontend-cooker.html</a>
<div class="meta">
<span class="tag">html</span>
<span>8.1 KB</span>
<span>May 29, 2026, 9:52 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-29-configure-impeccable-live-mode.html turns">
<a class="doc-link" href="./turns/2026-05-29-configure-impeccable-live-mode.html">turns/2026-05-29-configure-impeccable-live-mode.html</a>
<div class="meta">
<span class="tag">html</span>
<span>8.4 KB</span>
<span>May 29, 2026, 4:05 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-29-add-typecheck-to-ci.html turns">
<a class="doc-link" href="./turns/2026-05-29-add-typecheck-to-ci.html">turns/2026-05-29-add-typecheck-to-ci.html</a>
<div class="meta">
<span class="tag">html</span>
<span>7.0 KB</span>
<span>May 29, 2026, 2:29 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-29-add-typecheck-command.html turns">
<a class="doc-link" href="./turns/2026-05-29-add-typecheck-command.html">turns/2026-05-29-add-typecheck-command.html</a>
<div class="meta">
<span class="tag">html</span>
<span>8.4 KB</span>
<span>May 29, 2026, 2:19 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-28-redesign-home-command-deck.html turns">
<a class="doc-link" href="./turns/2026-05-28-redesign-home-command-deck.html">turns/2026-05-28-redesign-home-command-deck.html</a>
<div class="meta">
<span class="tag">html</span>
<span>319 KB</span>
<span>May 28, 2026, 5:58 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-28-dashboard-mock-routes.html turns">
<a class="doc-link" href="./turns/2026-05-28-dashboard-mock-routes.html">turns/2026-05-28-dashboard-mock-routes.html</a>
<div class="meta">
<span class="tag">html</span>
<span>63 KB</span>
<span>May 28, 2026, 5:58 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-23-forgejo-ci-baseline.html turns">
<a class="doc-link" href="./turns/2026-05-23-forgejo-ci-baseline.html">turns/2026-05-23-forgejo-ci-baseline.html</a>
<div class="meta">
<span class="tag">html</span>
<span>16 KB</span>
<span>May 28, 2026, 5:58 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-23-rename-tape-options-drawer.html turns">
<a class="doc-link" href="./turns/2026-05-23-rename-tape-options-drawer.html">turns/2026-05-23-rename-tape-options-drawer.html</a>
<div class="meta">
<span class="tag">html</span>
<span>22 KB</span>
<span>May 28, 2026, 5:58 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-23-default-turn-doc-diffs.html turns">
<a class="doc-link" href="./turns/2026-05-23-default-turn-doc-diffs.html">turns/2026-05-23-default-turn-doc-diffs.html</a>
<div class="meta">
<span class="tag">html</span>
<span>5.4 KB</span>
<span>May 23, 2026, 6:53 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-23-update-github-pages-docs-target.html turns">
<a class="doc-link" href="./turns/2026-05-23-update-github-pages-docs-target.html">turns/2026-05-23-update-github-pages-docs-target.html</a>
<div class="meta">
<span class="tag">html</span>
<span>4.9 KB</span>
<span>May 23, 2026, 5:18 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-23-address-forgejo-issue-10-security-cves.html turns">
<a class="doc-link" href="./turns/2026-05-23-address-forgejo-issue-10-security-cves.html">turns/2026-05-23-address-forgejo-issue-10-security-cves.html</a>
<div class="meta">
<span class="tag">html</span>
<span>11 KB</span>
<span>May 23, 2026, 4:23 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-22-forgejo-primary-agent-workflow.html turns">
<a class="doc-link" href="./turns/2026-05-22-forgejo-primary-agent-workflow.html">turns/2026-05-22-forgejo-primary-agent-workflow.html</a>
<div class="meta">
<span class="tag">html</span>
<span>6.5 KB</span>
<span>May 23, 2026, 4:23 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-22-publish-standup-summary-2026-05-21.html turns">
<a class="doc-link" href="./turns/2026-05-22-publish-standup-summary-2026-05-21.html">turns/2026-05-22-publish-standup-summary-2026-05-21.html</a>
<div class="meta">
<span class="tag">html</span>
<span>5.5 KB</span>
<span>May 22, 2026, 9:04 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-21-publish-standup-summary-2026-05-20.html turns">
<a class="doc-link" href="./turns/2026-05-21-publish-standup-summary-2026-05-20.html">turns/2026-05-21-publish-standup-summary-2026-05-20.html</a>
<div class="meta">
<span class="tag">html</span>
<span>5.0 KB</span>
<span>May 21, 2026, 9:05 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-20-refresh-readme-github-description.html turns">
<a class="doc-link" href="./turns/2026-05-20-refresh-readme-github-description.html">turns/2026-05-20-refresh-readme-github-description.html</a>
<div class="meta">
<span class="tag">html</span>
<span>7.7 KB</span>
<span>May 20, 2026, 9:54 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-20-remote-backfill-sync.html turns">
<a class="doc-link" href="./turns/2026-05-20-remote-backfill-sync.html">turns/2026-05-20-remote-backfill-sync.html</a>
<div class="meta">
<span class="tag">html</span>
<span>4.3 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-20-fix-alert-flow-packet-history.html turns">
<a class="doc-link" href="./turns/2026-05-20-fix-alert-flow-packet-history.html">turns/2026-05-20-fix-alert-flow-packet-history.html</a>
<div class="meta">
<span class="tag">html</span>
<span>14 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-19-reconcile-pr-conflicts.html turns"> <li class="doc-item" data-search="turns/2026-05-19-reconcile-pr-conflicts.html turns">
<a class="doc-link" href="./turns/2026-05-19-reconcile-pr-conflicts.html">turns/2026-05-19-reconcile-pr-conflicts.html</a> <a class="doc-link" href="./turns/2026-05-19-reconcile-pr-conflicts.html">turns/2026-05-19-reconcile-pr-conflicts.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>9.8 KB</span> <span>9.8 KB</span>
<span>May 19, 2026, 2:48 PM</span> <span>May 20, 2026, 9:26 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-18-native-fast-iterative-deploy.html turns">
<a class="doc-link" href="./turns/2026-05-18-native-fast-iterative-deploy.html">turns/2026-05-18-native-fast-iterative-deploy.html</a>
<div class="meta">
<span class="tag">html</span>
<span>9.0 KB</span>
<span>May 19, 2026, 2:48 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-0805-clarify-repo-turn-doc-rules.html turns">
<a class="doc-link" href="./turns/2026-05-19-0805-clarify-repo-turn-doc-rules.html">turns/2026-05-19-0805-clarify-repo-turn-doc-rules.html</a>
<div class="meta">
<span class="tag">html</span>
<span>6.4 KB</span>
<span>May 19, 2026, 8:05 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-0739-update-readme-current-state.html turns">
<a class="doc-link" href="./turns/2026-05-19-0739-update-readme-current-state.html">turns/2026-05-19-0739-update-readme-current-state.html</a>
<div class="meta">
<span class="tag">html</span>
<span>9.8 KB</span>
<span>May 19, 2026, 7:39 AM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-upgrade-nextjs-16.html turns"> <li class="doc-item" data-search="turns/2026-05-19-upgrade-nextjs-16.html turns">
<a class="doc-link" href="./turns/2026-05-19-upgrade-nextjs-16.html">turns/2026-05-19-upgrade-nextjs-16.html</a> <a class="doc-link" href="./turns/2026-05-19-upgrade-nextjs-16.html">turns/2026-05-19-upgrade-nextjs-16.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>9.0 KB</span> <span>9.0 KB</span>
<span>May 19, 2026, 7:31 AM</span> <span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-harden-native-ssh-deploy-checks.html turns">
<a class="doc-link" href="./turns/2026-05-19-harden-native-ssh-deploy-checks.html">turns/2026-05-19-harden-native-ssh-deploy-checks.html</a>
<div class="meta">
<span class="tag">html</span>
<span>7.0 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-native-options-recovery-guardrails.html turns">
<a class="doc-link" href="./turns/2026-05-19-native-options-recovery-guardrails.html">turns/2026-05-19-native-options-recovery-guardrails.html</a>
<div class="meta">
<span class="tag">html</span>
<span>7.7 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-publish-docs-pages-index.html turns">
<a class="doc-link" href="./turns/2026-05-19-publish-docs-pages-index.html">turns/2026-05-19-publish-docs-pages-index.html</a>
<div class="meta">
<span class="tag">html</span>
<span>6.7 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-0739-update-readme-current-state.html turns">
<a class="doc-link" href="./turns/2026-05-19-0739-update-readme-current-state.html">turns/2026-05-19-0739-update-readme-current-state.html</a>
<div class="meta">
<span class="tag">html</span>
<span>9.8 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-0805-clarify-repo-turn-doc-rules.html turns">
<a class="doc-link" href="./turns/2026-05-19-0805-clarify-repo-turn-doc-rules.html">turns/2026-05-19-0805-clarify-repo-turn-doc-rules.html</a>
<div class="meta">
<span class="tag">html</span>
<span>6.4 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-19-fix-native-alpaca-news.html turns">
<a class="doc-link" href="./turns/2026-05-19-fix-native-alpaca-news.html">turns/2026-05-19-fix-native-alpaca-news.html</a>
<div class="meta">
<span class="tag">html</span>
<span>12 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-18-native-fast-iterative-deploy.html turns">
<a class="doc-link" href="./turns/2026-05-18-native-fast-iterative-deploy.html">turns/2026-05-18-native-fast-iterative-deploy.html</a>
<div class="meta">
<span class="tag">html</span>
<span>9.0 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div>
</li>
<li class="doc-item" data-search="turns/2026-05-18-native-public-edge-cutover.html turns">
<a class="doc-link" href="./turns/2026-05-18-native-public-edge-cutover.html">turns/2026-05-18-native-public-edge-cutover.html</a>
<div class="meta">
<span class="tag">html</span>
<span>19 KB</span>
<span>May 20, 2026, 9:26 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-18-news-wire-view.html turns"> <li class="doc-item" data-search="turns/2026-05-18-news-wire-view.html turns">
<a class="doc-link" href="./turns/2026-05-18-news-wire-view.html">turns/2026-05-18-news-wire-view.html</a> <a class="doc-link" href="./turns/2026-05-18-news-wire-view.html">turns/2026-05-18-news-wire-view.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>7.0 KB</span> <span>7.0 KB</span>
<span>May 18, 2026, 4:54 PM</span> <span>May 20, 2026, 9:26 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-17-forgejo-deploy-remote-resolution.html turns"> <li class="doc-item" data-search="turns/2026-05-17-forgejo-deploy-remote-resolution.html turns">
<a class="doc-link" href="./turns/2026-05-17-forgejo-deploy-remote-resolution.html">turns/2026-05-17-forgejo-deploy-remote-resolution.html</a> <a class="doc-link" href="./turns/2026-05-17-forgejo-deploy-remote-resolution.html">turns/2026-05-17-forgejo-deploy-remote-resolution.html</a>
<div class="meta"> <div class="meta">
@ -309,8 +483,6 @@
<span>May 17, 2026, 11:22 PM</span> <span>May 17, 2026, 11:22 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-17-add-fast-deploy-mode.html turns"> <li class="doc-item" data-search="turns/2026-05-17-add-fast-deploy-mode.html turns">
<a class="doc-link" href="./turns/2026-05-17-add-fast-deploy-mode.html">turns/2026-05-17-add-fast-deploy-mode.html</a> <a class="doc-link" href="./turns/2026-05-17-add-fast-deploy-mode.html">turns/2026-05-17-add-fast-deploy-mode.html</a>
<div class="meta"> <div class="meta">
@ -319,8 +491,6 @@
<span>May 17, 2026, 10:53 PM</span> <span>May 17, 2026, 10:53 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-17-1101-clickhouse-alert-context.html turns"> <li class="doc-item" data-search="turns/2026-05-17-1101-clickhouse-alert-context.html turns">
<a class="doc-link" href="./turns/2026-05-17-1101-clickhouse-alert-context.html">turns/2026-05-17-1101-clickhouse-alert-context.html</a> <a class="doc-link" href="./turns/2026-05-17-1101-clickhouse-alert-context.html">turns/2026-05-17-1101-clickhouse-alert-context.html</a>
<div class="meta"> <div class="meta">
@ -329,8 +499,6 @@
<span>May 17, 2026, 10:21 PM</span> <span>May 17, 2026, 10:21 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-17-clickhouse-alert-context.html turns"> <li class="doc-item" data-search="turns/2026-05-17-clickhouse-alert-context.html turns">
<a class="doc-link" href="./turns/2026-05-17-clickhouse-alert-context.html">turns/2026-05-17-clickhouse-alert-context.html</a> <a class="doc-link" href="./turns/2026-05-17-clickhouse-alert-context.html">turns/2026-05-17-clickhouse-alert-context.html</a>
<div class="meta"> <div class="meta">
@ -339,8 +507,6 @@
<span>May 17, 2026, 10:21 PM</span> <span>May 17, 2026, 10:21 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-17-deploy-allowlist-pr-packaging.html turns"> <li class="doc-item" data-search="turns/2026-05-17-deploy-allowlist-pr-packaging.html turns">
<a class="doc-link" href="./turns/2026-05-17-deploy-allowlist-pr-packaging.html">turns/2026-05-17-deploy-allowlist-pr-packaging.html</a> <a class="doc-link" href="./turns/2026-05-17-deploy-allowlist-pr-packaging.html">turns/2026-05-17-deploy-allowlist-pr-packaging.html</a>
<div class="meta"> <div class="meta">
@ -349,8 +515,6 @@
<span>May 17, 2026, 10:21 PM</span> <span>May 17, 2026, 10:21 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-17-configure-beads-dolt-remote.html turns"> <li class="doc-item" data-search="turns/2026-05-17-configure-beads-dolt-remote.html turns">
<a class="doc-link" href="./turns/2026-05-17-configure-beads-dolt-remote.html">turns/2026-05-17-configure-beads-dolt-remote.html</a> <a class="doc-link" href="./turns/2026-05-17-configure-beads-dolt-remote.html">turns/2026-05-17-configure-beads-dolt-remote.html</a>
<div class="meta"> <div class="meta">
@ -359,8 +523,6 @@
<span>May 17, 2026, 10:07 AM</span> <span>May 17, 2026, 10:07 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-16-live-tape-scroll-hold-history.html turns"> <li class="doc-item" data-search="turns/2026-05-16-live-tape-scroll-hold-history.html turns">
<a class="doc-link" href="./turns/2026-05-16-live-tape-scroll-hold-history.html">turns/2026-05-16-live-tape-scroll-hold-history.html</a> <a class="doc-link" href="./turns/2026-05-16-live-tape-scroll-hold-history.html">turns/2026-05-16-live-tape-scroll-hold-history.html</a>
<div class="meta"> <div class="meta">
@ -369,8 +531,6 @@
<span>May 17, 2026, 5:06 AM</span> <span>May 17, 2026, 5:06 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-17-0331-fix-live-tape-scroll-stability.html turns"> <li class="doc-item" data-search="turns/2026-05-17-0331-fix-live-tape-scroll-stability.html turns">
<a class="doc-link" href="./turns/2026-05-17-0331-fix-live-tape-scroll-stability.html">turns/2026-05-17-0331-fix-live-tape-scroll-stability.html</a> <a class="doc-link" href="./turns/2026-05-17-0331-fix-live-tape-scroll-stability.html">turns/2026-05-17-0331-fix-live-tape-scroll-stability.html</a>
<div class="meta"> <div class="meta">
@ -379,8 +539,6 @@
<span>May 17, 2026, 5:06 AM</span> <span>May 17, 2026, 5:06 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-16-1725-durable-options-tape-history.html turns"> <li class="doc-item" data-search="turns/2026-05-16-1725-durable-options-tape-history.html turns">
<a class="doc-link" href="./turns/2026-05-16-1725-durable-options-tape-history.html">turns/2026-05-16-1725-durable-options-tape-history.html</a> <a class="doc-link" href="./turns/2026-05-16-1725-durable-options-tape-history.html">turns/2026-05-16-1725-durable-options-tape-history.html</a>
<div class="meta"> <div class="meta">
@ -389,8 +547,6 @@
<span>May 17, 2026, 5:06 AM</span> <span>May 17, 2026, 5:06 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-16-1752-speed-up-docker-deploys.html turns"> <li class="doc-item" data-search="turns/2026-05-16-1752-speed-up-docker-deploys.html turns">
<a class="doc-link" href="./turns/2026-05-16-1752-speed-up-docker-deploys.html">turns/2026-05-16-1752-speed-up-docker-deploys.html</a> <a class="doc-link" href="./turns/2026-05-16-1752-speed-up-docker-deploys.html">turns/2026-05-16-1752-speed-up-docker-deploys.html</a>
<div class="meta"> <div class="meta">
@ -399,8 +555,6 @@
<span>May 17, 2026, 5:06 AM</span> <span>May 17, 2026, 5:06 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-16-2159-fix-durable-options-history-routing.html turns"> <li class="doc-item" data-search="turns/2026-05-16-2159-fix-durable-options-history-routing.html turns">
<a class="doc-link" href="./turns/2026-05-16-2159-fix-durable-options-history-routing.html">turns/2026-05-16-2159-fix-durable-options-history-routing.html</a> <a class="doc-link" href="./turns/2026-05-16-2159-fix-durable-options-history-routing.html">turns/2026-05-16-2159-fix-durable-options-history-routing.html</a>
<div class="meta"> <div class="meta">
@ -409,8 +563,6 @@
<span>May 17, 2026, 5:06 AM</span> <span>May 17, 2026, 5:06 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-15-add-duplicate-vps-compose-warning.html turns"> <li class="doc-item" data-search="turns/2026-05-15-add-duplicate-vps-compose-warning.html turns">
<a class="doc-link" href="./turns/2026-05-15-add-duplicate-vps-compose-warning.html">turns/2026-05-15-add-duplicate-vps-compose-warning.html</a> <a class="doc-link" href="./turns/2026-05-15-add-duplicate-vps-compose-warning.html">turns/2026-05-15-add-duplicate-vps-compose-warning.html</a>
<div class="meta"> <div class="meta">
@ -419,8 +571,6 @@
<span>May 15, 2026, 9:28 PM</span> <span>May 15, 2026, 9:28 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-15-clarify-docker-first-deploy-workflow.html turns"> <li class="doc-item" data-search="turns/2026-05-15-clarify-docker-first-deploy-workflow.html turns">
<a class="doc-link" href="./turns/2026-05-15-clarify-docker-first-deploy-workflow.html">turns/2026-05-15-clarify-docker-first-deploy-workflow.html</a> <a class="doc-link" href="./turns/2026-05-15-clarify-docker-first-deploy-workflow.html">turns/2026-05-15-clarify-docker-first-deploy-workflow.html</a>
<div class="meta"> <div class="meta">
@ -429,8 +579,6 @@
<span>May 15, 2026, 9:12 PM</span> <span>May 15, 2026, 9:12 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-15-dual-runtime-deploy-workflow.html turns"> <li class="doc-item" data-search="turns/2026-05-15-dual-runtime-deploy-workflow.html turns">
<a class="doc-link" href="./turns/2026-05-15-dual-runtime-deploy-workflow.html">turns/2026-05-15-dual-runtime-deploy-workflow.html</a> <a class="doc-link" href="./turns/2026-05-15-dual-runtime-deploy-workflow.html">turns/2026-05-15-dual-runtime-deploy-workflow.html</a>
<div class="meta"> <div class="meta">
@ -439,8 +587,6 @@
<span>May 15, 2026, 8:52 PM</span> <span>May 15, 2026, 8:52 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-15-deploy-preflight-docker-workspace-check.html turns"> <li class="doc-item" data-search="turns/2026-05-15-deploy-preflight-docker-workspace-check.html turns">
<a class="doc-link" href="./turns/2026-05-15-deploy-preflight-docker-workspace-check.html">turns/2026-05-15-deploy-preflight-docker-workspace-check.html</a> <a class="doc-link" href="./turns/2026-05-15-deploy-preflight-docker-workspace-check.html">turns/2026-05-15-deploy-preflight-docker-workspace-check.html</a>
<div class="meta"> <div class="meta">
@ -449,8 +595,6 @@
<span>May 15, 2026, 7:03 PM</span> <span>May 15, 2026, 7:03 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-15-fix-docker-workspace-lockfile-sync.html turns"> <li class="doc-item" data-search="turns/2026-05-15-fix-docker-workspace-lockfile-sync.html turns">
<a class="doc-link" href="./turns/2026-05-15-fix-docker-workspace-lockfile-sync.html">turns/2026-05-15-fix-docker-workspace-lockfile-sync.html</a> <a class="doc-link" href="./turns/2026-05-15-fix-docker-workspace-lockfile-sync.html">turns/2026-05-15-fix-docker-workspace-lockfile-sync.html</a>
<div class="meta"> <div class="meta">
@ -459,8 +603,6 @@
<span>May 15, 2026, 6:56 PM</span> <span>May 15, 2026, 6:56 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-15-quiet-terminal-view.html turns"> <li class="doc-item" data-search="turns/2026-05-15-quiet-terminal-view.html turns">
<a class="doc-link" href="./turns/2026-05-15-quiet-terminal-view.html">turns/2026-05-15-quiet-terminal-view.html</a> <a class="doc-link" href="./turns/2026-05-15-quiet-terminal-view.html">turns/2026-05-15-quiet-terminal-view.html</a>
<div class="meta"> <div class="meta">
@ -469,8 +611,6 @@
<span>May 15, 2026, 6:55 PM</span> <span>May 15, 2026, 6:55 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-14-1824-adapt-terminal-view.html turns"> <li class="doc-item" data-search="turns/2026-05-14-1824-adapt-terminal-view.html turns">
<a class="doc-link" href="./turns/2026-05-14-1824-adapt-terminal-view.html">turns/2026-05-14-1824-adapt-terminal-view.html</a> <a class="doc-link" href="./turns/2026-05-14-1824-adapt-terminal-view.html">turns/2026-05-14-1824-adapt-terminal-view.html</a>
<div class="meta"> <div class="meta">
@ -479,8 +619,6 @@
<span>May 15, 2026, 6:55 PM</span> <span>May 15, 2026, 6:55 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-14-1833-reconcile-pr-conflicts.html turns"> <li class="doc-item" data-search="turns/2026-05-14-1833-reconcile-pr-conflicts.html turns">
<a class="doc-link" href="./turns/2026-05-14-1833-reconcile-pr-conflicts.html">turns/2026-05-14-1833-reconcile-pr-conflicts.html</a> <a class="doc-link" href="./turns/2026-05-14-1833-reconcile-pr-conflicts.html">turns/2026-05-14-1833-reconcile-pr-conflicts.html</a>
<div class="meta"> <div class="meta">
@ -489,8 +627,6 @@
<span>May 15, 2026, 6:55 PM</span> <span>May 15, 2026, 6:55 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="turns/2026-05-14-harden-terminal-view.html turns"> <li class="doc-item" data-search="turns/2026-05-14-harden-terminal-view.html turns">
<a class="doc-link" href="./turns/2026-05-14-harden-terminal-view.html">turns/2026-05-14-harden-terminal-view.html</a> <a class="doc-link" href="./turns/2026-05-14-harden-terminal-view.html">turns/2026-05-14-harden-terminal-view.html</a>
<div class="meta"> <div class="meta">
@ -499,42 +635,72 @@
<span>May 15, 2026, 6:55 PM</span> <span>May 15, 2026, 6:55 PM</span>
</div> </div>
</li> </li>
</ul> </ul>
</section> </section>
<section class="group" id="category-daily-git"> <section class="group" id="category-daily-git">
<h2>daily-git <span>1</span></h2> <h2>daily-git <span>1</span></h2>
<ul class="doc-list"> <ul class="doc-list">
<li class="doc-item" data-search="daily-git/2026-05-19-standup-summary-2026-05-18.html daily-git">
<li class="doc-item" data-search="daily-git/2026-05-19-standup-summary-2026-05-18.html daily-git">
<a class="doc-link" href="./daily-git/2026-05-19-standup-summary-2026-05-18.html">daily-git/2026-05-19-standup-summary-2026-05-18.html</a> <a class="doc-link" href="./daily-git/2026-05-19-standup-summary-2026-05-18.html">daily-git/2026-05-19-standup-summary-2026-05-18.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>16 KB</span> <span>16 KB</span>
<span>May 19, 2026, 2:55 PM</span> <span>May 20, 2026, 9:26 PM</span>
</div> </div>
</li> </li>
</ul> </ul>
</section> </section>
<section class="group" id="category-general"> <section class="group" id="category-general">
<h2>general <span>2</span></h2> <h2>general <span>7</span></h2>
<ul class="doc-list"> <ul class="doc-list">
<li class="doc-item" data-search="general/2026-06-01-standup-summary-2026-05-31.html general">
<a class="doc-link" href="./general/2026-06-01-standup-summary-2026-05-31.html">general/2026-06-01-standup-summary-2026-05-31.html</a>
<div class="meta">
<span class="tag">html</span>
<span>17 KB</span>
<span>Jun 1, 2026, 9:04 AM</span>
</div>
</li>
<li class="doc-item" data-search="general/2026-05-29-standup-summary-2026-05-28.html general">
<a class="doc-link" href="./general/2026-05-29-standup-summary-2026-05-28.html">general/2026-05-29-standup-summary-2026-05-28.html</a>
<div class="meta">
<span class="tag">html</span>
<span>16 KB</span>
<span>May 29, 2026, 9:04 AM</span>
</div>
</li>
<li class="doc-item" data-search="general/2026-05-25-standup-summary-2026-05-24.html general">
<a class="doc-link" href="./general/2026-05-25-standup-summary-2026-05-24.html">general/2026-05-25-standup-summary-2026-05-24.html</a>
<div class="meta">
<span class="tag">html</span>
<span>11 KB</span>
<span>May 28, 2026, 5:58 PM</span>
</div>
</li>
<li class="doc-item" data-search="general/2026-05-22-standup-summary-2026-05-21.html general">
<a class="doc-link" href="./general/2026-05-22-standup-summary-2026-05-21.html">general/2026-05-22-standup-summary-2026-05-21.html</a>
<div class="meta">
<span class="tag">html</span>
<span>11 KB</span>
<span>May 22, 2026, 9:04 AM</span>
</div>
</li>
<li class="doc-item" data-search="general/2026-05-21-standup-summary-2026-05-20.html general">
<a class="doc-link" href="./general/2026-05-21-standup-summary-2026-05-20.html">general/2026-05-21-standup-summary-2026-05-20.html</a>
<div class="meta">
<span class="tag">html</span>
<span>16 KB</span>
<span>May 21, 2026, 9:05 AM</span>
</div>
</li>
<li class="doc-item" data-search="general/2026-05-18-standup-summary-2026-05-17.html general"> <li class="doc-item" data-search="general/2026-05-18-standup-summary-2026-05-17.html general">
<a class="doc-link" href="./general/2026-05-18-standup-summary-2026-05-17.html">general/2026-05-18-standup-summary-2026-05-17.html</a> <a class="doc-link" href="./general/2026-05-18-standup-summary-2026-05-17.html">general/2026-05-18-standup-summary-2026-05-17.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>19 KB</span> <span>19 KB</span>
<span>May 18, 2026, 9:05 AM</span> <span>May 20, 2026, 9:26 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="general/2026-05-17-standup-summary-2026-05-16.html general"> <li class="doc-item" data-search="general/2026-05-17-standup-summary-2026-05-16.html general">
<a class="doc-link" href="./general/2026-05-17-standup-summary-2026-05-16.html">general/2026-05-17-standup-summary-2026-05-16.html</a> <a class="doc-link" href="./general/2026-05-17-standup-summary-2026-05-16.html">general/2026-05-17-standup-summary-2026-05-16.html</a>
<div class="meta"> <div class="meta">
@ -543,25 +709,19 @@
<span>May 17, 2026, 10:07 AM</span> <span>May 17, 2026, 10:07 AM</span>
</div> </div>
</li> </li>
</ul> </ul>
</section> </section>
<section class="group" id="category-plans"> <section class="group" id="category-plans">
<h2>plans <span>2</span></h2> <h2>plans <span>2</span></h2>
<ul class="doc-list"> <ul class="doc-list">
<li class="doc-item" data-search="plans/2026-05-18-native-fast-iterative-deploy-plan.html plans">
<li class="doc-item" data-search="plans/2026-05-18-native-fast-iterative-deploy-plan.html plans">
<a class="doc-link" href="./plans/2026-05-18-native-fast-iterative-deploy-plan.html">plans/2026-05-18-native-fast-iterative-deploy-plan.html</a> <a class="doc-link" href="./plans/2026-05-18-native-fast-iterative-deploy-plan.html">plans/2026-05-18-native-fast-iterative-deploy-plan.html</a>
<div class="meta"> <div class="meta">
<span class="tag">html</span> <span class="tag">html</span>
<span>3.8 KB</span> <span>3.8 KB</span>
<span>May 19, 2026, 2:48 PM</span> <span>May 20, 2026, 9:26 PM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="plans/2026-05-16-1711-durable-options-tape-history.html plans"> <li class="doc-item" data-search="plans/2026-05-16-1711-durable-options-tape-history.html plans">
<a class="doc-link" href="./plans/2026-05-16-1711-durable-options-tape-history.html">plans/2026-05-16-1711-durable-options-tape-history.html</a> <a class="doc-link" href="./plans/2026-05-16-1711-durable-options-tape-history.html">plans/2026-05-16-1711-durable-options-tape-history.html</a>
<div class="meta"> <div class="meta">
@ -570,15 +730,19 @@
<span>May 17, 2026, 5:06 AM</span> <span>May 17, 2026, 5:06 AM</span>
</div> </div>
</li> </li>
</ul> </ul>
</section> </section>
<section class="group" id="category-root"> <section class="group" id="category-root">
<h2>root <span>2</span></h2> <h2>root <span>3</span></h2>
<ul class="doc-list"> <ul class="doc-list">
<li class="doc-item" data-search="anatomy.html root">
<a class="doc-link" href="./anatomy.html">anatomy.html</a>
<div class="meta">
<span class="tag">html</span>
<span>28 KB</span>
<span>May 31, 2026, 5:24 PM</span>
</div>
</li>
<li class="doc-item" data-search="clickhouse-reset-runbook.md root"> <li class="doc-item" data-search="clickhouse-reset-runbook.md root">
<a class="doc-link" href="./clickhouse-reset-runbook.md">clickhouse-reset-runbook.md</a> <a class="doc-link" href="./clickhouse-reset-runbook.md">clickhouse-reset-runbook.md</a>
<div class="meta"> <div class="meta">
@ -587,8 +751,6 @@
<span>May 17, 2026, 5:06 AM</span> <span>May 17, 2026, 5:06 AM</span>
</div> </div>
</li> </li>
<li class="doc-item" data-search="terminal-audit-2026-05-14-0432.html root"> <li class="doc-item" data-search="terminal-audit-2026-05-14-0432.html root">
<a class="doc-link" href="./terminal-audit-2026-05-14-0432.html">terminal-audit-2026-05-14-0432.html</a> <a class="doc-link" href="./terminal-audit-2026-05-14-0432.html">terminal-audit-2026-05-14-0432.html</a>
<div class="meta"> <div class="meta">
@ -597,10 +759,8 @@
<span>May 15, 2026, 6:55 PM</span> <span>May 15, 2026, 6:55 PM</span>
</div> </div>
</li> </li>
</ul> </ul>
</section> </section></section>
</section>
<p class="empty" id="empty-state">No files match that filter.</p> <p class="empty" id="empty-state">No files match that filter.</p>
</main> </main>

File diff suppressed because one or more lines are too long

View file

@ -129,8 +129,7 @@ function renderDocument(items) {
.map((entry) => { .map((entry) => {
const extension = path.extname(entry.relativePath).replace(".", "") || "file"; const extension = path.extname(entry.relativePath).replace(".", "") || "file";
const searchable = `${entry.relativePath} ${category}`.toLowerCase(); const searchable = `${entry.relativePath} ${category}`.toLowerCase();
return ` return ` <li class="doc-item" data-search="${escapeHtml(searchable)}">
<li class="doc-item" data-search="${escapeHtml(searchable)}">
<a class="doc-link" href="${docsHref(entry.relativePath)}">${escapeHtml( <a class="doc-link" href="${docsHref(entry.relativePath)}">${escapeHtml(
entry.relativePath entry.relativePath
)}</a> )}</a>
@ -139,19 +138,16 @@ function renderDocument(items) {
<span>${escapeHtml(formatBytes(entry.sizeBytes))}</span> <span>${escapeHtml(formatBytes(entry.sizeBytes))}</span>
<span>${escapeHtml(dateFormatter.format(entry.modifiedAt))}</span> <span>${escapeHtml(dateFormatter.format(entry.modifiedAt))}</span>
</div> </div>
</li> </li>`;
`;
}) })
.join("\n"); .join("\n");
return ` return ` <section class="group" id="category-${escapeHtml(category)}">
<section class="group" id="category-${escapeHtml(category)}">
<h2>${escapeHtml(category)} <span>${entries.length}</span></h2> <h2>${escapeHtml(category)} <span>${entries.length}</span></h2>
<ul class="doc-list"> <ul class="doc-list">
${entryMarkup} ${entryMarkup}
</ul> </ul>
</section> </section>`;
`;
}) })
.join("\n"); .join("\n");