Compare commits

..

8 commits

Author SHA1 Message Date
cc5a662d1a remove readme mirror notice
Some checks are pending
CI / Validate (push) Waiting to run
2026-06-06 06:05:17 -04:00
b26ea54eda move mirror notice above logo
Some checks are pending
CI / Validate (push) Waiting to run
2026-06-06 06:04:22 -04:00
73b3d530d1 add mirror notice to readme
Some checks are pending
CI / Validate (push) Waiting to run
2026-06-06 05:32:08 -04:00
1357ddaaee bd: sync server issues
All checks were successful
CI / Validate (push) Successful in 1m20s
2026-06-01 13:53:02 -04:00
d7a34f36b6 bd: update sync.remote
All checks were successful
CI / Validate (push) Successful in 1m20s
2026-06-01 09:58:47 -04:00
1133f0e705 bd: clear sync.remote 2026-06-01 09:58:47 -04:00
8ee7cbecb4 bd: update sync.remote 2026-06-01 09:58:47 -04:00
aae904f334 bd: clear sync.remote 2026-06-01 09:58:47 -04:00
4 changed files with 63 additions and 953 deletions

View file

@ -53,7 +53,4 @@
# - github.org
# - github.repo
sync:
remote: git+https://git.deltaisland.io/dirtydishes/islandflow.git
sync.remote: "git+https://github.com/dirtydishes/islandflow.git"
sync.remote: "http://dolt.deltaisland.io/islandflow"

View file

@ -1,3 +1,5 @@
{"_type":"issue","id":"islandflow-9ur","title":"address forgejo issue 15 tmp cve","description":"Track remediation for Forgejo issue #15: update tmp from vulnerable 0.2.5 to patched 0.2.6+ via root override and refreshed Bun lockfile, then validate with audit/tests.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-06-01T17:32:18Z","created_by":"dirtydishes","updated_at":"2026-06-01T17:36:01Z","started_at":"2026-06-01T17:32:23Z","closed_at":"2026-06-01T17:36:01Z","close_reason":"Resolved Forgejo issue #15 by bumping the tmp override to ^0.2.6, refreshing bun.lock to tmp@0.2.7, and validating with bun audit, bun why tmp, and bun test.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_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-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}
@ -9,6 +11,7 @@
{"_type":"issue","id":"islandflow-yza","title":"Persist historical flow packets for alert detail replay","description":"## Why\nAlert details can show a missing persisted flow packet when the packet is no longer present in the Redis hot cache, even though the associated historical alert and evidence were loaded from ClickHouse.\n\n## What needs to be done\nTrace the API path that resolves alert detail flow packets, compare Redis hot-cache lookups with ClickHouse historical fetches, and ensure historical flow packet payloads are treated as first-class persisted data with context preserved when replaying or loading older alerts.\n\n## Acceptance Criteria\n- Alert detail flow packets load for historical alerts even when the packet is absent from Redis hot cache\n- Historical ClickHouse-backed flow packet responses preserve the context required by the UI\n- Relevant automated tests cover the regression or the gap is explicitly documented","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-20T06:52:04Z","created_by":"dirtydishes","updated_at":"2026-05-20T06:59:26Z","started_at":"2026-05-20T06:52:09Z","closed_at":"2026-05-20T06:59:26Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-jor","title":"Support Forgejo pull request status in desktop git panel","description":"The desktop app currently reports pull request status unavailable when a repository only has a Forgejo remote. Add native Forgejo/Gitea-style remote detection and pull request status lookup so Forgejo-only repositories can show PR state in the Codex app git panel.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-19T20:55:15Z","created_by":"dirtydishes","updated_at":"2026-05-19T20:59:46Z","started_at":"2026-05-19T20:55:25Z","closed_at":"2026-05-19T20:59:46Z","close_reason":"Patched the installed Codex desktop app bundle with a Forgejo PR status fallback and documented the local change.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-g3a","title":"Reconcile PR merge conflicts","description":"Resolve the current pull request conflicts for the nextjs-upgrade branch, validate the result, document the turn, and push the reconciled branch.","status":"closed","priority":1,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-19T18:44:51Z","created_by":"dirtydishes","updated_at":"2026-05-19T18:47:35Z","started_at":"2026-05-19T18:44:56Z","closed_at":"2026-05-19T18:47:35Z","close_reason":"Merged forgejo/main into nextjs-upgrade, resolved README and Beads conflicts, updated JetStream retention tests, validated deploy help, Docker workspace sync, API/bus tests, and web build, and added turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-9rc","title":"Implement native fast iterative deploy plan","description":"Implement the checked-in plan at plans/2026-05-18-native-fast-iterative-deploy-plan.md. Cover deploy-phase timing instrumentation, native deployment operational assets, deploy guardrails, validation/cutover documentation, and any required live VPS remediation that is safely actionable from this session. Track follow-up items separately if anything cannot be completed in-repo or on the live host.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T07:15:19Z","created_by":"dirtydishes","updated_at":"2026-05-18T07:34:03Z","started_at":"2026-05-18T07:15:25Z","closed_at":"2026-05-18T07:34:03Z","close_reason":"Implemented the native fast iterative deploy plan with deploy timing summaries, worker-only native fast mode, edge-cutover guardrails, local-on-server execution support, checked-in native ops assets, live audit findings, and turn documentation. Remaining cutover work is tracked in islandflow-vvw.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-jbi","title":"Hydrate alert evidence details from ClickHouse","description":"Alert detail drawers need to fetch persisted alert context from ClickHouse by trace id, including linked flow packets, option prints, preserved execution context, and explicit missing refs for UI diagnostics.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-17T14:55:43Z","created_by":"dirtydishes","updated_at":"2026-05-17T15:01:58Z","started_at":"2026-05-17T14:55:53Z","closed_at":"2026-05-17T15:01:58Z","close_reason":"Implemented ClickHouse-backed alert context hydration across storage, API, terminal drawer, tests, and turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-8kj","title":"Configure persistent beads Dolt remote on deltaisland server","description":"Install the beads and Dolt CLIs on the server, configure a persistent Dolt sync remote backed by the server-hosted Forgejo repository, verify refs/dolt/data publication, and document Nginx Proxy Manager / firewall considerations.","status":"closed","priority":1,"issue_type":"task","assignee":"delta","created_at":"2026-05-17T10:31:31Z","created_by":"delta","updated_at":"2026-05-17T10:37:47Z","started_at":"2026-05-17T10:32:16Z","closed_at":"2026-05-17T10:37:47Z","close_reason":"Installed bd and dolt on the server, configured the Forgejo-backed Dolt remote, published refs/dolt/data, and documented the setup.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-200","title":"Implement durable options tape history","description":"Implement the plan from docs/plans/2026-05-16-1711-durable-options-tape-history.html: durable ClickHouse-backed options history, signal/all prints view selection, preserved execution context, stale semantics limited to live health, reset runbook, tests, and turn documentation.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-16T21:21:30Z","created_by":"dirtydishes","updated_at":"2026-05-16T21:26:51Z","started_at":"2026-05-16T21:21:33Z","closed_at":"2026-05-16T21:26:51Z","close_reason":"Implemented durable options tape history, signal/raw view selection, reset runbook, tests, and turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0}
@ -24,6 +27,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-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-xmi","title":"Resolve conflicts in PR 45","description":"Resolve the merge conflicts blocking Forgejo PR 45, validate the affected code paths, and push the reconciled branch back to Forgejo.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-06-06T03:33:52Z","created_by":"dirtydishes","updated_at":"2026-06-06T03:35:16Z","started_at":"2026-06-06T03:33:58Z","closed_at":"2026-06-06T03:35:16Z","close_reason":"Resolved the PR 45 merge conflict in .beads/issues.jsonl and validated the reconciled tracker file.","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-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}
@ -45,6 +50,8 @@
{"_type":"issue","id":"islandflow-kgu","title":"Reconcile PR #8 branch with current main","description":"Why this issue exists and what needs to be done: user requested reconciliation for PR #8. Identify the PR #8 branch, merge/rebase with current main, resolve conflicts, validate, and push the updated branch so the PR can merge cleanly.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-23T20:14:36Z","created_by":"dirtydishes","updated_at":"2026-05-23T20:24:29Z","started_at":"2026-05-23T20:14:39Z","closed_at":"2026-05-23T20:24:29Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-l9h","title":"stop persisting non-signal option prints in clickhouse","description":"Why: non-signal option prints are storage noise and should not be persisted by default.\\n\\nWhat: add OPTIONS_PERSIST_SIGNAL_ONLY env flag (default true), gate option_print inserts in ingest-options, add tests for persistence behavior, update env examples, and document one-off cleanup SQL for existing non-signal rows.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-23T03:02:32Z","created_by":"dirtydishes","updated_at":"2026-05-23T03:06:34Z","started_at":"2026-05-23T03:02:35Z","closed_at":"2026-05-23T03:06:34Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-2cj","title":"Add Forgejo-first agent workflow guidance to AGENTS.md","description":"Why this issue exists and what needs to be done:\\n- The repositorys canonical home is Forgejo at git.deltaisland.io, but AGENTS.md does not currently direct agents to prefer Forgejo-specific workflows.\\n- Update AGENTS.md so agents treat Forgejo as primary and use the fj CLI for pull request workflows.\\n- Keep existing Beads and completion instructions intact while clarifying remote preference and command usage.","status":"closed","priority":2,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-23T02:51:31Z","created_by":"dirtydishes","updated_at":"2026-05-23T02:55:42Z","closed_at":"2026-05-23T02:55:42Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-6ub","title":"Fix LiveStateManager default hot-head test expectation after recent API changes","description":"bun test v1.3.13 (bf2e2cec) currently fails on the case after the latest pulled changes. The failure appears unrelated to the server-load tuning work and should be investigated separately so targeted validation can pass cleanly again.","status":"open","priority":2,"issue_type":"bug","owner":"dishes@dpdrm.com","created_at":"2026-05-22T06:09:44Z","created_by":"dirtydishes","updated_at":"2026-05-22T06:09:44Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-qke","title":"Tune healthchecks and Redis flush cadence to reduce server load","description":"Containerd and dockerd are consuming significant CPU due to frequent Docker healthcheck exec churn across multiple stacks, and the host Islandflow Redis instance is hot from aggressive live-cache rewrite behavior. Tune external stack healthcheck intervals and Islandflow Redis flush cadence to reduce steady-state load while preserving service behavior.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-22T06:06:58Z","created_by":"dirtydishes","updated_at":"2026-05-22T06:11:40Z","started_at":"2026-05-22T06:07:03Z","closed_at":"2026-05-22T06:11:40Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-xc5","title":"One-time bidirectional git remote backfill between github and forgejo","description":"Perform a one-time sync so github and forgejo contain the same branch/tag refs and historical commits, including pre-transition github history and newer forgejo commits. Document exact commands and validation results.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-21T01:25:05Z","created_by":"dirtydishes","updated_at":"2026-05-21T01:26:19Z","started_at":"2026-05-21T01:25:16Z","closed_at":"2026-05-21T01:26:19Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-y7b","title":"Fix false browser fallback in Electron renderer","description":"Why this issue exists and what needs to be done:\\nElectron sessions can briefly or permanently render browser-only fallback copy when runtime detection depends on async desktop AI state loading.\\n\\nImplement a runtime snapshot that is resolved synchronously on the client (shell marker + bridge presence) and kept independent from bridge.ai state fetch/subscribe behavior. Add bounded runtime resync/retry and lifecycle-triggered resync on focus/pageshow so late bridge exposure flips to desktop mode.\\n\\nUpdate desktop-ai tests to cover: runtime marker present before AI state resolves, bridge present with pending/rejected getState, and late runtime availability. Keep preload/IPC contract unchanged unless a verified failure requires it.","status":"closed","priority":2,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-21T00:06:52Z","created_by":"dirtydishes","updated_at":"2026-05-21T00:11:21Z","started_at":"2026-05-21T00:06:55Z","closed_at":"2026-05-21T00:11:21Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-xtg","title":"implement ai alert copilot ux refinements","description":"Implement the AI alert Copilot UX plan: markdown result rendering, reusable task result states, in-session result caching with regenerate, task cancellation through the desktop bridge, tests, and required turn documentation.","status":"closed","priority":2,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-20T23:30:50Z","created_by":"dirtydishes","updated_at":"2026-05-20T23:37:58Z","started_at":"2026-05-20T23:30:58Z","closed_at":"2026-05-20T23:37:58Z","close_reason":"Implemented markdown Copilot rendering, session result caching, regenerate controls, task cancellation plumbing, tests, and turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0}
@ -61,12 +68,16 @@
{"_type":"issue","id":"islandflow-lm6","title":"Clarify repo turn documentation scope","description":"Update AGENTS.md so repository turn documentation clearly uses repo-local docs/turns and impeccable styling, without inheriting global non-repo computer-task styling.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-19T12:05:07Z","created_by":"dirtydishes","updated_at":"2026-05-19T12:06:12Z","started_at":"2026-05-19T12:05:14Z","closed_at":"2026-05-19T12:06:12Z","close_reason":"Verified AGENTS.md now scopes repo turn docs to docs/turns and makes impeccable the styling authority; added turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-6iq","title":"Update README for current project state","description":"Resolve README merge conflicts and document the current project state, including the smart money classification taxonomy, Next.js update, and deployment workflow changes.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-19T11:37:24Z","created_by":"dirtydishes","updated_at":"2026-05-19T11:40:01Z","started_at":"2026-05-19T11:37:31Z","closed_at":"2026-05-19T11:40:01Z","close_reason":"README conflict resolved and current project state documented, including smart-money taxonomy, Next.js update, and deployment workflow.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-lib","title":"Upgrade apps/web to Next.js 16.2.6","description":"Upgrade the web app dependency stack to Next.js 16.2.6 with React 19, refresh Bun and mirrored Docker workspace lockfiles, keep runtime behavior unchanged, fix any focused web test fallout, validate the web build and targeted route tests, and document the completed work.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-19T11:04:51Z","created_by":"dirtydishes","updated_at":"2026-05-19T11:31:23Z","started_at":"2026-05-19T11:04:57Z","closed_at":"2026-05-19T11:31:23Z","close_reason":"Upgraded apps/web to Next.js 16.2.6 with React 19, refreshed Bun lockfiles including the Docker workspace mirror, fixed the React 19 nullable ref type issue, and validated the web build, focused tests, Docker workspace sync, and route smoke checks.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-fl5","title":"Decide final public posture for api.flow.deltaisland.io after native cutover","description":"Why this issue exists and what needs to be done:\\n- Native cutover now works end-to-end through Nginx Proxy Manager and the public API hostname now resolves directly to the VPS\\n- The API hostname was left DNS-only in Cloudflare during incident resolution, while the web hostname still uses the Cloudflare proxy\\n- We need to decide whether api.flow.deltaisland.io should remain direct-to-origin or be re-proxied through Cloudflare, then validate TLS, websocket, and operational behavior for the chosen posture","status":"open","priority":2,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-18T23:51:21Z","created_by":"dirtydishes","updated_at":"2026-05-18T23:51:21Z","dependencies":[{"issue_id":"islandflow-fl5","depends_on_id":"islandflow-vvw","type":"discovered-from","created_at":"2026-05-18T19:52:32Z","created_by":"dirtydishes","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-8fn","title":"implement alpaca-backed news wire view","description":"Why this issue exists and what needs to be done:\\nAdd an Alpaca-powered live news pipeline, API, storage, and web experience, including a dedicated /news route, Home preview, live fanout, history pagination, ticker resolution, and replay-mode live-only empty states.\\n\\nAcceptance criteria:\\n- normalized NewsStory contract and live channel exist\\n- ingest-news service backfills and streams Alpaca news\\n- API persists, serves, and fans out news\\n- web app exposes /news plus Home preview and drawer\\n- tests cover types, storage, API, and key UI behaviors\\n- turn documentation is added\\n\\nDesign:\\nReuse Islandflow drawer, chips, panes, and terminal styling; keep news live-only in v1 replay mode.\\n\\nNotes:\\nImplement client-side ticker filtering in v1 and expose latest revision only per provider+story_id.","status":"closed","priority":2,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T20:37:13Z","created_by":"dirtydishes","updated_at":"2026-05-18T20:55:11Z","started_at":"2026-05-18T20:37:20Z","closed_at":"2026-05-18T20:55:11Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-k8i","title":"Fix duplicate alert context import in API entrypoint","description":"Recent alert-context work introduced a duplicate fetchAlertContextByTraceId import in services/api/src/index.ts, which risks breaking TypeScript compilation and API startup. Remove the duplicate import and validate the affected API/web tests.","status":"closed","priority":2,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T13:01:58Z","created_by":"dirtydishes","updated_at":"2026-05-18T13:03:40Z","started_at":"2026-05-18T13:02:02Z","closed_at":"2026-05-18T13:03:40Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-lk9","title":"Fix PR creation workflow after Forgejo migration","description":"## Why\\nCreating pull requests with fails after the repository moved primary collaboration from GitHub to Forgejo. The current workflow still assumes GitHub GraphQL PR creation semantics, which do not work against the Forgejo remote.\\n\\n## What\\nInvestigate the current PR creation path, identify remaining GitHub-specific assumptions, and update the repo workflow/scripts/docs so contributors can reliably publish branches and open PRs in the Forgejo-based setup.\\n\\n## Acceptance Criteria\\n- The repo no longer instructs contributors to use a broken GitHub-specific PR creation path for Forgejo branches\\n- There is a documented and preferably scripted way to create the equivalent review request against Forgejo\\n- Validation demonstrates the new workflow behaves correctly or clearly documents any remaining platform limitation","status":"in_progress","priority":2,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T10:26:47Z","created_by":"dirtydishes","updated_at":"2026-05-18T10:26:53Z","started_at":"2026-05-18T10:26:53Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-vvw","title":"Stage native public-edge cutover after worker soak","description":"Why this issue exists and what needs to be done:\\n- The native deploy path is now provisioned for worker-first iteration, with checked-in user units, rollback helpers, and edge guardrails\\n- Remaining work is to enable and soak native worker units, validate duplicate-processing behavior, then deliberately cut over the public web/api edge if warranted\\n- Final acceptance should include deciding whether Docker or native becomes the default runtime after operational evidence","notes":"2026-05-18: native infra, native app services, NPM public-edge retargeting, Docker rollback helpers, and Cloudflare/DNS API hostname recovery were implemented and verified. Public checks now pass for flow.deltaisland.io and api.flow.deltaisland.io. Remaining follow-up: decide whether api.flow.deltaisland.io should remain DNS-only or be re-proxied through Cloudflare under islandflow-fl5.","status":"in_progress","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T07:32:35Z","created_by":"dirtydishes","updated_at":"2026-05-18T23:52:32Z","started_at":"2026-05-18T23:51:20Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-bsg","title":"Fix public /replay/options proxy regression","description":"Restore correct public routing for GET /replay/options on flow.deltaisland.io. The app currently serves HTML for that API path, which indicates edge/proxy routing drift. Update the live proxy topology or deployment assets as needed, then validate with bun run scripts/check-public-api-routes.ts.","status":"closed","priority":2,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T07:15:19Z","created_by":"dirtydishes","updated_at":"2026-05-18T07:32:51Z","started_at":"2026-05-18T07:15:24Z","closed_at":"2026-05-18T07:32:51Z","close_reason":"Audited the live VPS and reverse proxy on 2026-05-18: public /replay/options now returns JSON, bun run scripts/check-public-api-routes.ts passes, and the active Nginx Proxy Manager config includes /replay in the API route matcher. No in-repo app code change was required.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-1ei","title":"Make deploy helper remote-aware for Forgejo","description":"Why: scripts/deploy.ts hardcodes git remote name origin for fetch/pull/push and branch verification, but this repository now uses forgejo/github remotes and may not have an origin remote. What: update deploy.ts to resolve the deploy git remote robustly (Forgejo-aware), use it across local prechecks, branch publish, and remote rollout git operations, and keep behavior explicit in output.","status":"closed","priority":2,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T03:20:12Z","created_by":"dirtydishes","updated_at":"2026-05-18T03:22:39Z","started_at":"2026-05-18T03:20:16Z","closed_at":"2026-05-18T03:22:39Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-xod","title":"Add --fast mode to deploy helper","description":"Why: full main deploys rebuild all images and run full verification, which is slow for routine rollouts. What: add a --fast flag to scripts/deploy.ts with explicit behavior that short-circuits slow steps while preserving basic safety checks; update help text/docs for discoverability.","status":"closed","priority":2,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T02:50:47Z","created_by":"dirtydishes","updated_at":"2026-05-18T02:53:41Z","started_at":"2026-05-18T02:50:50Z","closed_at":"2026-05-18T02:53:41Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-cif","title":"hydrate alert evidence context from clickhouse","description":"Implement alert detail hydration from ClickHouse with a new context endpoint and frontend drawer evidence resolution. Includes storage lookup by alert trace_id/evidence refs, unresolved refs diagnostics, API route GET /flow/alerts/:trace_id/context, terminal evidence hydration + loading states/copy updates, and tests across storage/api/web.","status":"closed","priority":2,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-18T00:15:55Z","created_by":"dirtydishes","updated_at":"2026-05-18T00:17:38Z","started_at":"2026-05-18T00:16:00Z","closed_at":"2026-05-18T00:17:38Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-9j5","title":"Prepare PR for deploy allowlist cleanup","description":"Why this issue exists and what needs to be done:\\n- Package current deploy allowlist cleanup into a reviewable PR with multiple commits\\n- Add required turn documentation in docs/turns\\n- Run validation and push all artifacts","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-17T15:44:12Z","created_by":"dirtydishes","updated_at":"2026-05-17T15:53:55Z","started_at":"2026-05-17T15:44:22Z","closed_at":"2026-05-17T15:53:55Z","close_reason":"Packaged deploy allowlist cleanup into multi-commit PR branch with required turn documentation and push workflow.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-4e9","title":"Polish terminal view","description":"Improve the Islandflow web terminal view with a focused UI polish pass aligned to the product design system.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-17T15:18:18Z","created_by":"dirtydishes","updated_at":"2026-05-17T15:25:02Z","started_at":"2026-05-17T15:18:21Z","closed_at":"2026-05-17T15:25:02Z","close_reason":"Polished terminal shell styling, responsive Tape actions, and documented the turn.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-lyt","title":"Summarize 2026-05-16 git activity for standup","description":"Create a grounded standup summary for yesterday's git activity, anchored to commits, changed files, and any linked PR context if present. Produce the required HTML document in docs/general and complete the beads + git handoff workflow.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-17T14:02:57Z","created_by":"dirtydishes","updated_at":"2026-05-17T14:05:37Z","started_at":"2026-05-17T14:03:09Z","closed_at":"2026-05-17T14:05:37Z","close_reason":"Created docs/general standup summary for 2026-05-16 git activity, grounded to commits and changed files, and prepared the repo handoff workflow.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-sz8","title":"Fix public /replay/options proxy regression","description":"## Summary\nThe new deploy-time public route checker added in commit 1424a27 (\"fix durable options history routing\") currently fails against https://flow.deltaisland.io because GET /replay/options returns HTML instead of JSON.\n\n## Evidence\n- `bun run scripts/check-public-api-routes.ts https://flow.deltaisland.io` fails on `/replay/options?view=signal\u0026after_ts=0\u0026after_seq=0\u0026limit=1` with `returned non-JSON content (text/html; charset=UTF-8)`\n- `services/api/src/index.ts` implements `GET /replay/options`, so the HTML response indicates the request is landing on the web app instead of the API service\n- `deployment/docker/README.md` documents that same-origin proxy mode must include `/replay/*` in the API route matcher\n\n## Minimal Fix\nUpdate the live reverse proxy / edge route matcher for flow.deltaisland.io so `/replay/*` is forwarded to the API host, then rerun `bun run check:public-api-routes`.\n\n## Notes\nThis looks like a production proxy configuration regression rather than an in-repo application bug.","status":"open","priority":2,"issue_type":"bug","owner":"dishes@dpdrm.com","created_at":"2026-05-17T13:06:11Z","created_by":"dirtydishes","updated_at":"2026-05-17T13:06:11Z","dependency_count":0,"dependent_count":0,"comment_count":0}
@ -97,6 +108,8 @@
{"_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-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-5rt","title":"Summarize June 2 git activity for standup","description":"Create the daily standup summary in docs/general for 2026-06-02 activity, anchored to yesterday's commits and touched files.","status":"closed","priority":3,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-06-03T16:30:03Z","created_by":"dirtydishes","updated_at":"2026-06-03T16:31:33Z","started_at":"2026-06-03T16:31:26Z","closed_at":"2026-06-03T16:31:33Z","close_reason":"Closed","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-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}
@ -114,4 +127,6 @@
{"_type":"issue","id":"islandflow-zsy","title":"Expose Forgejo SSH on a direct DNS hostname","description":"git.deltaisland.io currently resolves through Cloudflare's proxy, so SSH on port 2222 does not complete even though the Forgejo container is listening on the host. If SSH-based git/beads workflows are desired, add a DNS-only hostname (or adjust the existing record) that points directly at the server for Forgejo SSH.","status":"open","priority":3,"issue_type":"task","created_at":"2026-05-17T10:34:06Z","created_by":"delta","updated_at":"2026-05-17T10:34:06Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-38p","title":"Add native deployment unit templates and rollback helpers","description":"The deploy helper now supports --runtime native, but the repo still relies on operator-managed systemd units and manual rollback. Add checked-in native deployment templates or provisioning guidance for the expected units, and consider lightweight rollback/smoke-test helpers once the host-native path is exercised on the real VPS.","status":"open","priority":3,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-15T23:46:42Z","created_by":"dirtydishes","updated_at":"2026-05-15T23:46:42Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-575","title":"Document smart-money event calendar env","description":"Document smart-money event-calendar environment configuration in env examples and README.\n","status":"closed","priority":3,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-05T06:57:14Z","created_by":"dirtydishes","updated_at":"2026-05-05T06:57:57Z","started_at":"2026-05-05T06:57:17Z","closed_at":"2026-05-05T06:57:57Z","close_reason":"Documented event-calendar env variables","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-a1m","title":"Publish June 3 standup summary","description":"Why this issue exists and what needs to be done:\\n- Produce the daily standup summary for git activity on 2026-06-03.\\n- Ground every statement in commits and touched files only.\\n- Save the HTML artifact under docs/general and complete the automation handoff workflow.","status":"closed","priority":4,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-06-04T13:02:04Z","created_by":"dirtydishes","updated_at":"2026-06-04T13:03:43Z","started_at":"2026-06-04T13:03:34Z","closed_at":"2026-06-04T13:03:43Z","close_reason":"Created docs/general/2026-06-04-standup-summary-2026-06-03.html with a commit-grounded summary of June 3 git activity.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-0jb","title":"Publish June 1 standup summary","description":"Why this issue exists and what needs to be done:\\n- Produce the daily standup summary for git activity on 2026-06-01.\\n- Ground every statement in commits and touched files only.\\n- Save the HTML artifact under docs/general and complete the automation handoff workflow.","status":"closed","priority":4,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-06-02T13:03:01Z","created_by":"dirtydishes","updated_at":"2026-06-02T13:05:51Z","started_at":"2026-06-02T13:03:16Z","closed_at":"2026-06-02T13:05:51Z","close_reason":"Created docs/general/2026-06-02-standup-summary-2026-06-01.html with a commit-grounded June 1 standup summary.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-1tu","title":"Publish 2026-05-24 standup summary","description":"Why this issue exists and what needs to be done\n\nCreate the daily standup summary for git activity on 2026-05-24, grounded in commits and touched files, then store the HTML report in docs/general.","status":"closed","priority":4,"issue_type":"task","owner":"dishes@dpdrm.com","created_at":"2026-05-25T13:02:56Z","created_by":"dirtydishes","updated_at":"2026-05-25T13:04:31Z","closed_at":"2026-05-25T13:04:31Z","close_reason":"Closed","dependency_count":0,"dependent_count":0,"comment_count":0}

View file

@ -1,893 +0,0 @@
<!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

@ -207,20 +207,20 @@
</header>
<section class="toolbar">
<div class="stats"><strong id="visible-count">36</strong> of <strong>36</strong> files shown</div>
<div class="stats"><strong id="visible-count">35</strong> of <strong>35</strong> files shown</div>
<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>
<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-plans">plans <span>2</span></a>
<a class="chip" href="#category-root">root <span>3</span></a></nav>
<a class="chip" href="#category-root">root <span>2</span></a></nav>
</section>
<section class="groups" id="groups">
<section class="group" id="category-turns">
<h2>turns <span>28</span></h2>
<ul class="doc-list">
<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">
@ -229,7 +229,7 @@
<span>May 19, 2026, 2:59 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>
@ -239,7 +239,7 @@
<span>May 19, 2026, 2:48 PM</span>
</div>
</li>
<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>
@ -249,7 +249,7 @@
<span>May 19, 2026, 2:48 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>
@ -259,7 +259,7 @@
<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>
@ -269,7 +269,7 @@
<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>
@ -279,7 +279,7 @@
<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">
<a class="doc-link" href="./turns/2026-05-19-upgrade-nextjs-16.html">turns/2026-05-19-upgrade-nextjs-16.html</a>
@ -289,7 +289,7 @@
<span>May 19, 2026, 7:31 AM</span>
</div>
</li>
<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>
@ -299,7 +299,7 @@
<span>May 18, 2026, 4:54 PM</span>
</div>
</li>
<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>
@ -309,7 +309,7 @@
<span>May 17, 2026, 11:22 PM</span>
</div>
</li>
<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>
@ -319,7 +319,7 @@
<span>May 17, 2026, 10:53 PM</span>
</div>
</li>
<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>
@ -329,7 +329,7 @@
<span>May 17, 2026, 10:21 PM</span>
</div>
</li>
<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>
@ -339,7 +339,7 @@
<span>May 17, 2026, 10:21 PM</span>
</div>
</li>
<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>
@ -349,7 +349,7 @@
<span>May 17, 2026, 10:21 PM</span>
</div>
</li>
<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>
@ -359,7 +359,7 @@
<span>May 17, 2026, 10:07 AM</span>
</div>
</li>
<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>
@ -369,7 +369,7 @@
<span>May 17, 2026, 5:06 AM</span>
</div>
</li>
<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>
@ -379,7 +379,7 @@
<span>May 17, 2026, 5:06 AM</span>
</div>
</li>
<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>
@ -389,7 +389,7 @@
<span>May 17, 2026, 5:06 AM</span>
</div>
</li>
<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>
@ -399,7 +399,7 @@
<span>May 17, 2026, 5:06 AM</span>
</div>
</li>
<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>
@ -409,7 +409,7 @@
<span>May 17, 2026, 5:06 AM</span>
</div>
</li>
<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>
@ -419,7 +419,7 @@
<span>May 15, 2026, 9:28 PM</span>
</div>
</li>
<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>
@ -429,7 +429,7 @@
<span>May 15, 2026, 9:12 PM</span>
</div>
</li>
<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>
@ -439,7 +439,7 @@
<span>May 15, 2026, 8:52 PM</span>
</div>
</li>
<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>
@ -449,7 +449,7 @@
<span>May 15, 2026, 7:03 PM</span>
</div>
</li>
<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>
@ -459,7 +459,7 @@
<span>May 15, 2026, 6:56 PM</span>
</div>
</li>
<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>
@ -469,7 +469,7 @@
<span>May 15, 2026, 6:55 PM</span>
</div>
</li>
<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>
@ -479,7 +479,7 @@
<span>May 15, 2026, 6:55 PM</span>
</div>
</li>
<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>
@ -489,7 +489,7 @@
<span>May 15, 2026, 6:55 PM</span>
</div>
</li>
<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>
@ -499,15 +499,15 @@
<span>May 15, 2026, 6:55 PM</span>
</div>
</li>
</ul>
</section>
<section class="group" id="category-daily-git">
<h2>daily-git <span>1</span></h2>
<ul class="doc-list">
<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>
<div class="meta">
@ -516,15 +516,15 @@
<span>May 19, 2026, 2:55 PM</span>
</div>
</li>
</ul>
</section>
<section class="group" id="category-general">
<h2>general <span>2</span></h2>
<ul class="doc-list">
<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>
<div class="meta">
@ -533,7 +533,7 @@
<span>May 18, 2026, 9:05 AM</span>
</div>
</li>
<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>
@ -543,15 +543,15 @@
<span>May 17, 2026, 10:07 AM</span>
</div>
</li>
</ul>
</section>
<section class="group" id="category-plans">
<h2>plans <span>2</span></h2>
<ul class="doc-list">
<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>
<div class="meta">
@ -560,7 +560,7 @@
<span>May 19, 2026, 2:48 PM</span>
</div>
</li>
<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>
@ -570,24 +570,15 @@
<span>May 17, 2026, 5:06 AM</span>
</div>
</li>
</ul>
</section>
<section class="group" id="category-root">
<h2>root <span>3</span></h2>
<h2>root <span>2</span></h2>
<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">
<a class="doc-link" href="./clickhouse-reset-runbook.md">clickhouse-reset-runbook.md</a>
<div class="meta">
@ -596,7 +587,7 @@
<span>May 17, 2026, 5:06 AM</span>
</div>
</li>
<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>
@ -606,7 +597,7 @@
<span>May 15, 2026, 6:55 PM</span>
</div>
</li>
</ul>
</section>
</section>