Daily Git Summary

Standup summary for Monday, May 18, 2026

Git history for May 18 shows four commits. One feature commit introduced an Alpaca-backed news wire across ingest, storage, API, and web surfaces; the other three commits updated workflow docs, beads state, and the previous standup summary.

Commits
4
Files Touched
35
Insertions
1963
Deletions
52

Summary

Primary Delivery

Commit 906fe411 added a new services/ingest-news service, news persistence in packages/storage, API endpoints in services/api, and a live news view in apps/web/app/terminal.tsx plus apps/web/app/news/page.tsx.

Docs And Workflow

Commits 62aae708, 687a2170, and 04baeceb updated the previous standup report, beads state, deployment/docker/workspace-root/package.json, and the repo-level AGENTS.md instructions.

Standup Framing

Yesterday’s visible product work centered on making live Alpaca news available end to end. The remaining activity was project hygiene and documentation.

Changes Made

update beads 687a2170 2026-05-18 03:15 -0400 1 file

Added one line to deployment/docker/workspace-root/package.json. The local git history does not show more context beyond the file touch and commit subject.

docs(general): add 2026-05-17 standup summary 62aae708 2026-05-18 09:05 -0400 2 files

Added the prior day’s report at docs/general/2026-05-18-standup-summary-2026-05-17.html and updated .beads/issues.jsonl.

docs/general/2026-05-18-standup-summary-2026-05-17.html .beads/issues.jsonl
add alpaca news wire across ingest api and web 906fe411 2026-05-18 16:55 -0400 31 files +1407 / -50
  • Added a new ingest service in services/ingest-news/src/index.ts that backfills Alpaca news, subscribes to the Alpaca news websocket, resolves symbols, and publishes NewsStory payloads to NATS.
  • Extended shared contracts in packages/types/src/events.ts and packages/types/src/live.ts, plus new storage support in packages/storage/src/news.ts and packages/storage/src/clickhouse.ts.
  • Wired the API to store, fan out, and expose news via /news and /history/news in services/api/src/index.ts and live-session updates in services/api/src/live.ts.
  • Added a web route in apps/web/app/news/page.tsx, a news pane and drawer in apps/web/app/terminal.tsx, and related styling in apps/web/app/globals.css.
  • Updated runtime packaging and local/dev deployment surfaces, including deployment/docker/docker-compose.yml, Dockerfiles, scripts/dev.ts, and scripts/deploy.ts.
  • Added tests in packages/storage/tests/news.test.ts, services/ingest-news/tests/symbols.test.ts, and adjusted apps/web/app/terminal.test.ts plus packages/types/tests/live.test.ts.
services/ingest-news/src/index.ts packages/storage/src/news.ts services/api/src/index.ts apps/web/app/terminal.tsx apps/web/app/news/page.tsx apps/web/app/globals.css
update turn docs and beads workflow 04baeceb 2026-05-18 21:32 -0400 1 file

Edited AGENTS.md to update turn-document and beads workflow guidance.

Context

This summary is based on local git history between 2026-05-18 00:00 -0400 and 2026-05-19 00:00 -0400. The repository uses Bun, TypeScript, NATS/JetStream, ClickHouse, and a Next.js web app, so the main feature commit spans service ingestion, shared types, persistence, API delivery, and the UI.

Important Implementation Details

News ingestion was introduced as a first-class service

services/ingest-news/src/index.ts authenticates against Alpaca, backfills recent news, subscribes to live updates, resolves symbols, validates payloads with NewsStorySchema, and publishes them onto the repo’s bus layer.

const backfill = await fetchBackfill();
for (const item of backfill.reverse()) {
  await publishStory(item);
}

if (msg === "authenticated") {
  ws.send(JSON.stringify({ action: "subscribe", news: ["*"] }));
}

API and live session support were expanded for news

services/api/src/index.ts now ensures the news table exists, subscribes to a news consumer, fans out live updates, and exposes both recent and paginated history endpoints.

if (req.method === "GET" && url.pathname === "/news") {
  const limit = parseLimit(url.searchParams.get("limit") ?? "100");
  const data = await fetchRecentNews(clickhouse, limit);
  return jsonResponse({ data });
}

The web terminal gained a dedicated news surface

apps/web/app/terminal.tsx added a live-only news pane, a per-story drawer, history loading, and a new /news route entry point via apps/web/app/news/page.tsx.

if (features.news) {
  subscriptions.push({ channel: "news", snapshot_limit: LIVE_OPTIONS_HEAD_LIMIT });
}

export function NewsRoute() {
  const state = useTerminal();
  return (
    <PageFrame title="News">
      <div className="page-grid page-grid-news">
        <NewsPane state={state} className="news-pane-full" />
      </div>
    </PageFrame>
  );
}

Expected Impact for End-Users

Live Terminal

Users now have a dedicated news wire surface in the web terminal, including summary rows, story details, and a direct link to the source article.

Coverage

News is now available alongside the repo’s existing live feeds, with shared symbol resolution and storage that make the data retrievable through API history endpoints.

Current Boundary

The UI copy in the news pane explicitly marks news as live-only in v1, so replay users should not expect the same behavior there yet.

Validation

Issues, Limitations, and Mitigations

Follow-up Work