Configure Impeccable live mode
Some checks are pending
CI / Validate (push) Waiting to run

This commit is contained in:
dirtydishes 2026-05-29 04:05:31 -04:00
parent f237916291
commit 510b5f5222
4 changed files with 230 additions and 0 deletions

View file

@ -24,6 +24,7 @@
{"_type":"issue","id":"islandflow-ayo","title":"Drop stale backlog events from live fanout","description":"Follow-up to live freshness rollout: /ws/live was still fanning out stale backlog events for freshness-gated channels, which kept tape panes in Live feed behind despite active synthetic ingest. Gate fanout and cache ingest by freshness for options/nbbo/equities/flow.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:26:39Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:26:44Z","started_at":"2026-04-28T21:26:44Z","closed_at":"2026-04-28T21:26:44Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-ayo","title":"Drop stale backlog events from live fanout","description":"Follow-up to live freshness rollout: /ws/live was still fanning out stale backlog events for freshness-gated channels, which kept tape panes in Live feed behind despite active synthetic ingest. Gate fanout and cache ingest by freshness for options/nbbo/equities/flow.","status":"closed","priority":1,"issue_type":"bug","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:26:39Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:26:44Z","started_at":"2026-04-28T21:26:44Z","closed_at":"2026-04-28T21:26:44Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-0v6","title":"Fix tape freshness, NBBO coverage, pause controls, and filter popup","description":"Implement the tape fixes requested for synthetic options notional sizing, strict live freshness, live-mode pause/resume behavior, stronger NBBO snapshot coverage, and moving flow filters behind a popup. Includes server-side live cache changes, web terminal state/UI changes, and tests for synthetic pricing, live snapshot freshness/NBBO retention, and live pause/filter interactions.","status":"closed","priority":1,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:02:52Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:13:38Z","started_at":"2026-04-28T21:02:57Z","closed_at":"2026-04-28T21:13:38Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-0v6","title":"Fix tape freshness, NBBO coverage, pause controls, and filter popup","description":"Implement the tape fixes requested for synthetic options notional sizing, strict live freshness, live-mode pause/resume behavior, stronger NBBO snapshot coverage, and moving flow filters behind a popup. Includes server-side live cache changes, web terminal state/UI changes, and tests for synthetic pricing, live snapshot freshness/NBBO retention, and live pause/filter interactions.","status":"closed","priority":1,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T21:02:52Z","created_by":"dirtydishes","updated_at":"2026-04-28T21:13:38Z","started_at":"2026-04-28T21:02:57Z","closed_at":"2026-04-28T21:13:38Z","close_reason":"Completed","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-e4r","title":"Implement smart-money flow filtering and synthetic firehose modes","description":"Implement the approved multi-surface plan for named synthetic market profiles, options raw-vs-signal filtering, live/API filter contracts, Tape page client-side flow filters, firehose-readiness improvements, tests, and README updates.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T20:10:49Z","created_by":"dirtydishes","updated_at":"2026-04-28T20:29:29Z","started_at":"2026-04-28T20:10:53Z","closed_at":"2026-04-28T20:29:29Z","close_reason":"Implemented synthetic market profiles, options signal-path filtering, signal-aware API/replay contracts, Tape page filters, tests, and README updates. Follow-up tracked in islandflow-biq.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-e4r","title":"Implement smart-money flow filtering and synthetic firehose modes","description":"Implement the approved multi-surface plan for named synthetic market profiles, options raw-vs-signal filtering, live/API filter contracts, Tape page client-side flow filters, firehose-readiness improvements, tests, and README updates.","status":"closed","priority":1,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-04-28T20:10:49Z","created_by":"dirtydishes","updated_at":"2026-04-28T20:29:29Z","started_at":"2026-04-28T20:10:53Z","closed_at":"2026-04-28T20:29:29Z","close_reason":"Implemented synthetic market profiles, options signal-path filtering, signal-aware API/replay contracts, Tape page filters, tests, and README updates. Follow-up tracked in islandflow-biq.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-ep2","title":"Configure Impeccable live mode","description":"Initialize the repository's Impeccable live-mode configuration so future design iteration can start without first-time setup.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T08:03:47Z","created_by":"dirtydishes","updated_at":"2026-05-29T08:05:01Z","started_at":"2026-05-29T08:03:52Z","closed_at":"2026-05-29T08:05:01Z","close_reason":"Configured Impeccable live mode and documented validation.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-9en","title":"Install Impeccable skill for Codex","description":"Install the Impeccable skill in the Codex-compatible project locations after the upstream installer selected unused harness folders.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T07:59:10Z","created_by":"dirtydishes","updated_at":"2026-05-29T07:59:22Z","started_at":"2026-05-29T07:59:18Z","closed_at":"2026-05-29T07:59:22Z","close_reason":"Installed Impeccable into .agents and mirrored it into .codex/skills for Codex use.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-9en","title":"Install Impeccable skill for Codex","description":"Install the Impeccable skill in the Codex-compatible project locations after the upstream installer selected unused harness folders.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T07:59:10Z","created_by":"dirtydishes","updated_at":"2026-05-29T07:59:22Z","started_at":"2026-05-29T07:59:18Z","closed_at":"2026-05-29T07:59:22Z","close_reason":"Installed Impeccable into .agents and mirrored it into .codex/skills for Codex use.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-444","title":"Add typecheck to Forgejo CI","description":"Forgejo CI already validates PRs and pushes to main, but it does not run the new repository-wide typecheck gate. Add bun run typecheck before tests so type drift fails early in CI.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T06:27:47Z","created_by":"dirtydishes","updated_at":"2026-05-29T06:29:33Z","started_at":"2026-05-29T06:27:49Z","closed_at":"2026-05-29T06:29:33Z","close_reason":"Added repository typecheck to the Forgejo PR/main CI workflow.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-444","title":"Add typecheck to Forgejo CI","description":"Forgejo CI already validates PRs and pushes to main, but it does not run the new repository-wide typecheck gate. Add bun run typecheck before tests so type drift fails early in CI.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T06:27:47Z","created_by":"dirtydishes","updated_at":"2026-05-29T06:29:33Z","started_at":"2026-05-29T06:27:49Z","closed_at":"2026-05-29T06:29:33Z","close_reason":"Added repository typecheck to the Forgejo PR/main CI workflow.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"islandflow-wvz","title":"Add repository typecheck command","description":"The repository has TypeScript tsconfig files across apps, services, and packages, but no root command that runs typechecking consistently. Add a Bun-first typecheck entry point and validate it.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T06:11:57Z","created_by":"dirtydishes","updated_at":"2026-05-29T06:19:09Z","started_at":"2026-05-29T06:12:02Z","closed_at":"2026-05-29T06:19:09Z","close_reason":"Added and validated a repository-wide Bun typecheck command.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"islandflow-wvz","title":"Add repository typecheck command","description":"The repository has TypeScript tsconfig files across apps, services, and packages, but no root command that runs typechecking consistently. Add a Bun-first typecheck entry point and validate it.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-29T06:11:57Z","created_by":"dirtydishes","updated_at":"2026-05-29T06:19:09Z","started_at":"2026-05-29T06:12:02Z","closed_at":"2026-05-29T06:19:09Z","close_reason":"Added and validated a repository-wide Bun typecheck command.","dependency_count":0,"dependent_count":0,"comment_count":0}

1
.gitignore vendored
View file

@ -17,6 +17,7 @@ apps/desktop/out/
# Local assistant artifacts # Local assistant artifacts
session-ses_*.md session-ses_*.md
token-usage-output.txt token-usage-output.txt
.impeccable/live/server.json
# Beads / Dolt files (added by bd init) # Beads / Dolt files (added by bd init)
.dolt/ .dolt/

View file

@ -0,0 +1,6 @@
{
"files": ["apps/web/app/layout.tsx"],
"insertBefore": "</body>",
"commentSyntax": "jsx",
"cspChecked": true
}

View file

@ -0,0 +1,222 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Configure Impeccable Live Mode</title>
<style>
:root {
color-scheme: dark;
--bg: #06080b;
--surface: #0b1016;
--pane: #111820;
--pane-soft: #0d141b;
--border: rgba(255, 255, 255, 0.12);
--text: #e6edf4;
--muted: #90a0b2;
--faint: #6e7b8c;
--accent: #f5a623;
--accent-soft: rgba(245, 166, 35, 0.14);
--blue: #4da3ff;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background:
radial-gradient(circle at 18% 0%, rgba(245, 166, 35, 0.08), transparent 30rem),
linear-gradient(180deg, var(--surface), var(--bg));
color: var(--text);
font: 16px/1.55 IBM Plex Sans, Inter, ui-sans-serif, system-ui, sans-serif;
}
main {
width: min(980px, calc(100vw - 32px));
margin: 0 auto;
padding: 48px 0 64px;
}
header {
padding-bottom: 24px;
border-bottom: 1px solid var(--border);
}
h1,
h2,
h3 {
font-family: IBM Plex Mono, ui-monospace, SFMono-Regular, Menlo, monospace;
line-height: 1.15;
letter-spacing: 0;
}
h1 {
max-width: 760px;
margin: 0 0 12px;
font-size: clamp(2rem, 4vw, 3.25rem);
}
h2 {
margin: 32px 0 12px;
color: var(--accent);
font-size: 1rem;
}
p {
max-width: 75ch;
margin: 0 0 14px;
}
ul {
margin: 0;
padding-left: 1.2rem;
}
li {
margin: 0 0 8px;
}
code,
pre {
font-family: IBM Plex Mono, ui-monospace, SFMono-Regular, Menlo, monospace;
}
pre {
overflow: auto;
padding: 14px;
border: 1px solid var(--border);
border-radius: 10px;
background: var(--pane-soft);
color: var(--text);
}
.summary {
margin-top: 20px;
padding: 16px 18px;
border: 1px solid rgba(245, 166, 35, 0.24);
border-radius: 12px;
background: var(--accent-soft);
}
.meta {
color: var(--muted);
font-family: IBM Plex Mono, ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: 0.82rem;
}
.section {
padding: 2px 0;
}
.note {
color: var(--muted);
}
a {
color: var(--blue);
}
</style>
</head>
<body>
<main>
<header>
<p class="meta">Turn document · 2026-05-29 04:04 EDT · Beads issue islandflow-ep2</p>
<h1>Configure Impeccable Live Mode</h1>
<div class="summary">
<p>Initialized Impeccable live-mode configuration for the Next.js app router so future visual iteration can inject the picker through <code>apps/web/app/layout.tsx</code> without a first-time setup detour.</p>
</div>
</header>
<section class="section">
<h2>Summary</h2>
<p>The repository already had <code>PRODUCT.md</code> and <code>DESIGN.md</code>, so initialization preserved the existing Islandflow design context and added the missing live-mode configuration.</p>
</section>
<section class="section">
<h2>Changes Made</h2>
<ul>
<li>Added <code>.impeccable/live/config.json</code> for a Next.js App Router project.</li>
<li>Configured live injection to target <code>apps/web/app/layout.tsx</code> before <code>&lt;/body&gt;</code> using JSX comment syntax.</li>
<li>Marked CSP as checked after the detector reported no Content Security Policy to patch.</li>
<li>Ignored the local runtime file <code>.impeccable/live/server.json</code>, which is regenerated when the live helper starts.</li>
<li>Created and claimed Beads issue <code>islandflow-ep2</code> for the setup work.</li>
</ul>
</section>
<section class="section">
<h2>Context</h2>
<p>The Impeccable setup flow found existing product and design documents. The project register is <code>product</code>, and the UI conventions are already established around a dark evidence-console interface with amber as a sparse action and attention signal.</p>
</section>
<section class="section">
<h2>Important Implementation Details</h2>
<ul>
<li>The app uses the Next.js App Router, so the canonical live target is <code>apps/web/app/layout.tsx</code>.</li>
<li>The app shell already loads Quantico, IBM Plex Sans, and IBM Plex Mono, matching the documented Islandflow Terminal design system.</li>
<li>CSP detection returned <code>{"shape": null, "signals": []}</code>, so no source-level CSP patch was needed.</li>
<li>Running <code>live.mjs</code> creates <code>.impeccable/live/server.json</code> locally and temporarily injects a live script marker into <code>layout.tsx</code>; the source marker was removed after validation because the committed setup should stay configuration-only.</li>
</ul>
</section>
<section class="section">
<h2>Relevant Diff Snippets</h2>
<p class="note"><code>@pierre/diffs</code> could not be run in this environment because the package did not expose a detectable executable, so this section uses a plain labeled diff fallback.</p>
<pre><code>diff --git a/.impeccable/live/config.json b/.impeccable/live/config.json
new file mode 100644
--- /dev/null
+++ b/.impeccable/live/config.json
@@
+{
+ "files": ["apps/web/app/layout.tsx"],
+ "insertBefore": "&lt;/body&gt;",
+ "commentSyntax": "jsx",
+ "cspChecked": true
+}
diff --git a/.gitignore b/.gitignore
@@
# Local assistant artifacts
session-ses_*.md
token-usage-output.txt
+.impeccable/live/server.json</code></pre>
</section>
<section class="section">
<h2>Expected Impact for End-Users</h2>
<p>This does not change the Islandflow web UI for normal users. It improves the design workflow for contributors by letting <code>$impeccable live</code> start against the existing app shell and preserve the documented product/design identity during visual iteration.</p>
</section>
<section class="section">
<h2>Validation</h2>
<ul>
<li>Ran <code>node .agents/skills/impeccable/scripts/context.mjs</code> and confirmed existing <code>PRODUCT.md</code> and <code>DESIGN.md</code>.</li>
<li>Read <code>reference/init.md</code>, <code>reference/product.md</code>, and the live-mode setup guidance.</li>
<li>Ran <code>node .agents/skills/impeccable/scripts/detect-csp.mjs</code>; no CSP was detected.</li>
<li>Ran <code>node .agents/skills/impeccable/scripts/live.mjs</code>; it returned <code>"ok": true</code>, <code>pageFiles: ["apps/web/app/layout.tsx"]</code>, and <code>configDrift: null</code>.</li>
<li>Confirmed and removed the temporary live script injection from <code>apps/web/app/layout.tsx</code> so production source is not coupled to a localhost helper port.</li>
</ul>
</section>
<section class="section">
<h2>Issues, Limitations, and Mitigations</h2>
<ul>
<li><code>@pierre/diffs</code> was unavailable as a runnable CLI, so the documentation includes a plain diff fallback.</li>
<li>The live helper was only boot-validated. No interactive browser live session was started because the request was initialization, not variant generation.</li>
<li>Future <code>$impeccable live</code> runs may temporarily reinject the localhost script marker while live mode is active; review that diff before committing unrelated UI work.</li>
<li>The generated <code>server.json</code> file is intentionally ignored to avoid committing local helper state.</li>
</ul>
</section>
<section class="section">
<h2>Follow-up Work</h2>
<ul>
<li>Run <code>$impeccable live</code> during the next UI iteration to select elements in the browser and generate on-brand variants.</li>
<li>Run <code>$impeccable critique apps/web/app/terminal.tsx</code> if you want a scored review of the main terminal surface.</li>
<li>No Beads follow-up issue was created because this task completed the requested initialization.</li>
</ul>
</section>
</main>
</body>
</html>