diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index cd3805a..b1ab2c6 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -27,7 +27,6 @@ {"_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-9ns","title":"Refine command deck header","description":"Simplify the overview command deck header after live visual iteration, keeping live status, last tick, replay switching, and active filter controls prominent at the top of the page.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-06-06T11:30:15Z","created_by":"dirtydishes","updated_at":"2026-06-06T11:32:07Z","started_at":"2026-06-06T11:30:25Z","closed_at":"2026-06-06T11:32:07Z","close_reason":"accepted compact command deck header from live iteration, added active filter chips with hover clear controls, and validated web build/tests","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} diff --git a/apps/web/app/globals.css b/apps/web/app/globals.css index e278adc..a670c6f 100644 --- a/apps/web/app/globals.css +++ b/apps/web/app/globals.css @@ -854,118 +854,6 @@ h3 { flex-wrap: wrap; } -.compact-command-bar { - display: flex; - flex-direction: column; - align-items: stretch; - gap: 8px; - padding: 10px 12px; - border-radius: 10px; - background: linear-gradient(180deg, oklch(0.17 0.013 250 / 0.95), oklch(0.13 0.011 250 / 0.95)); -} - -.compact-command-topline, -.compact-command-context { - min-width: 0; - display: flex; - align-items: center; - justify-content: space-between; - gap: 10px; -} - -.compact-command-title, -.compact-command-controls, -.compact-command-context { - min-width: 0; - display: flex; - align-items: center; - gap: 8px; - flex-wrap: wrap; -} - -.compact-command-title span, -.compact-command-context > span { - color: var(--text-faint); - font-family: var(--font-mono), monospace; - font-size: 0.68rem; - letter-spacing: 0.12em; - text-transform: lowercase; -} - -.compact-command-title strong { - color: var(--text); - font-family: var(--font-display), sans-serif; - font-size: 1.05rem; - letter-spacing: 0.02em; - text-transform: uppercase; -} - -.compact-command-context strong { - color: var(--text); - font-family: var(--font-mono), monospace; - font-size: 0.8rem; -} - -.command-filter-tooltip { - position: relative; - min-width: 0; - max-width: min(360px, 38vw); - min-height: 32px; - display: inline-flex; - align-items: center; - gap: 7px; - padding: 5px 8px 5px 10px; - border: 1px solid var(--border-strong); - border-radius: 999px; - background: oklch(0.78 0.12 74 / 0.09); - color: var(--text); - font-family: var(--font-mono), monospace; - font-size: 0.68rem; - text-transform: uppercase; -} - -.command-filter-tooltip span { - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.command-filter-tooltip button { - width: 20px; - height: 20px; - display: inline-flex; - align-items: center; - justify-content: center; - border: 0; - border-radius: 999px; - background: oklch(0.97 0.008 250 / 0.08); - color: var(--text-dim); - cursor: pointer; - font-family: var(--font-mono), monospace; - font-size: 0.62rem; - opacity: 0; - transform: translateX(3px); - transition: - background-color 150ms ease, - color 150ms ease, - opacity 150ms ease, - transform 150ms ease; -} - -.command-filter-tooltip:hover button, -.command-filter-tooltip:focus-within button { - opacity: 1; - transform: translateX(0); -} - -.command-filter-tooltip button:hover, -.command-filter-tooltip button:focus-visible { - background: oklch(0.78 0.12 74 / 0.17); - color: var(--text); - outline: none; -} - .command-chip { min-height: 32px; display: inline-flex; @@ -2589,7 +2477,6 @@ h3 { .interval-button, .overlay-toggle, .drawer-close, - .command-filter-tooltip button, .status-inline-counter, .missed-count, .synthetic-control-gear { @@ -2619,10 +2506,6 @@ h3 { grid-template-columns: minmax(220px, 0.8fr) minmax(240px, 1fr); } - .compact-command-topline { - justify-content: flex-start; - } - .command-deck-controls { grid-column: 1 / -1; justify-content: flex-start; @@ -2791,20 +2674,6 @@ h3 { justify-content: center; } - .compact-command-bar .command-chip, - .compact-command-bar .terminal-button, - .command-filter-tooltip { - width: auto; - max-width: 100%; - justify-content: center; - } - - .compact-command-topline, - .compact-command-context { - align-items: flex-start; - flex-direction: column; - } - .command-ticker-track { grid-auto-columns: minmax(164px, 78vw); } diff --git a/apps/web/app/terminal.tsx b/apps/web/app/terminal.tsx index 88736e4..d7afe6e 100644 --- a/apps/web/app/terminal.tsx +++ b/apps/web/app/terminal.tsx @@ -8738,59 +8738,34 @@ const buildCommandDeckTickers = (state: TerminalState): CommandDeckTicker[] => { const CommandDeckHeader = ({ state }: { state: TerminalState }) => { const focus = state.activeTickers.length > 0 ? state.activeTickers.join(", ") : state.chartTicker; - const activeTickerFilter = state.filterInput.trim(); - const activeContractFilter = - state.selectedInstrument?.kind === "option-contract" ? state.selectedInstrumentLabel : null; + const selected = state.selectedInstrumentLabel ?? "No contract lock"; const connectionLabel = state.mode === "live" ? statusLabel(state.liveSession.status, false, state.mode) : "Replay"; return ( -
-
-
- islandflow - Command Deck -
-
- - {state.mode === "live" ? "Live" : "Replay"}: {connectionLabel} - - - Last {state.lastSeen ? formatTime(state.lastSeen) : "waiting"} - - +
+
+
-
+
Evidence console {focus} - {activeContractFilter ? ( - - {activeContractFilter} - - - ) : activeTickerFilter.length > 0 ? ( - - Ticker: {activeTickerFilter} - - - ) : ( - No active filter - )} + {selected} +
+
+ + {state.mode === "live" ? "Live" : "Replay"}: {connectionLabel} + + + Last {state.lastSeen ? formatTime(state.lastSeen) : "waiting"} + +
); diff --git a/docs/turns/2026-06-06-0730-refine-command-deck-header.html b/docs/turns/2026-06-06-0730-refine-command-deck-header.html deleted file mode 100644 index be592f6..0000000 --- a/docs/turns/2026-06-06-0730-refine-command-deck-header.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - Command Deck Header Refinement - - - -
-
-

Islandflow turn document ยท 2026-06-06 07:30

-

Command Deck Header Refinement

-

Simplified the overview command deck header into a compact status bar that keeps live state, last tick time, replay switching, and active filter context near the top of the page.

-
- -
-

Summary

-

The accepted live-mode variant replaces the heavier command deck header with a calmer two-line command bar. The top line now carries the product label, live connection chip, last-update chip, and replay toggle. The second line keeps the evidence-console context, focused ticker, and the active filter state.

-
- -
-

Changes Made

-
    -
  • Reworked CommandDeckHeader markup from a three-column brand/brief/control layout into a compact two-line status bar.
  • -
  • Added active filter chips for selected option contracts and ticker filters, with hover/focus clear buttons.
  • -
  • Moved accepted live styling into globals.css and removed temporary live-mode wrappers, scripts, and session files.
  • -
  • Added responsive overrides so compact status chips wrap without becoming full-width controls on mobile.
  • -
-
- -
-

Context

-

This change came from an Impeccable live session on the overview page. The selected element was the command deck header. The accepted direction was variant 2, a simplified command bar that keeps operational controls close to the top while reducing decorative weight.

-
- -
-

Important Implementation Details

-
-
Contract filtersWhen an option contract is focused, the header renders its label and clears with setSelectedInstrument(null).
-
Ticker filtersWhen ticker text is active, the header renders Ticker: value and clears with setFilterInput("").
-
Filter affordanceThe clear button appears on hover or focus-within, preserving a quieter default chip while staying keyboard reachable.
-
MotionThe hover transition is included in the existing reduced-motion terminal control block.
-
-
- -
-

Relevant Diff Snippets

-

Rendered with @pierre/diffs/ssr using preloadPatchFile. These are the focused file diffs for the accepted header implementation.

- -
-

Diff 1

-
- -
-
- -
-

Diff 2

-
- -
-
-
- -
-

Expected Impact for End-Users

-

Users get a quieter command deck with live status, last update, and replay switching preserved in the first scan line. Active filters become easier to notice and clear without adding another permanent button to the header.

-
- -
-

Validation

-
    -
  • Passed bun --cwd=apps/web run build, including production compile and TypeScript.
  • -
  • Verified live session cleanup removed temporary Impeccable source markers and the injected live script.
  • -
  • Observed existing browser fetch failures for unavailable local backend endpoints; these were not introduced by this change.
  • -
-
- -
-

Issues, Limitations, and Mitigations

-
    -
  • The live browser continued logging existing failed fetches for option support and alert evidence while backend services were unavailable. The web production build still passed.
  • -
  • The no-filter state remains textual: No active filter. This keeps the status explicit, but it can be revisited if the header should hide inactive filter context entirely.
  • -
-
- -
-

Follow-up Work

-
    -
  • Beads: islandflow-9ns tracks this completed refinement.
  • -
  • Consider aligning the topbar ticker input and command deck filter chip language if the same filter state should appear in both places.
  • -
-
-
- -