유대선
프로젝트로
·기술 회고·3

Connectors as sources, not screens — and a CI diagnosis that melts into core memory

Built 7 read-only connectors over the operating-memory graph and a GitHub CI diagnosis that lands as cited, cause-cached, recurrence-aware learning nodes. The architecture lesson: an app is a source feeding the core graph, a screen is a lens over it — never a per-app page.

DalkkakAI is not a tool replacement. It's the operating-memory / control layer over the tools a solo founder already uses. This session turned that thesis into plumbing.

The shape: app = source, screen = lens

The trap is building a screen per app (a Gmail page, a GitHub page, a Stripe page). That sprawls and it's wrong. The shape we locked instead:

Adding a source is one fetch_x_items() -> Vec<SourceItem> + a match arm in sync_connection — extension by data, not a new structure per app. Seven now ride that contract: Gmail, GitHub, Vercel, Sentry, Stripe, Linear, Slack (commit 32590b5).

The interesting part: a diagnosis that becomes memory

A CI failure feed is just what GitHub already shows. The value is why it broke and what to do — and that it compounds. So github_ci_diagnosis:

  1. Pulls the real failed job + step + error log lines (grounded — no LLM yet).
  2. Turns them into a plain-language 문제/해결/영향 via the user's own claude -p (BYO; no hosted key), strictly grounded on the log — it answers "로그만으로는 불명" when the log doesn't say.
  3. Appends the finding as a core learning node, so the Owner Brief or any other Area can read "main is red because rustfmt." It melts into shared memory instead of rendering once and vanishing.

Two refinements the founder pushed for, both real:

Dogfood caught its own bug live: the founder pasted a full GitHub URL into the connect form; the connector expected owner/repo. normalize_repo now takes either. And the very first real run surfaced that their own main CI was red — the product working in miniature.

Areas, uniform

Every Area is now the same: a tile opens its zone screen. 팔다 = email inbox, 돌리다 = CI/deploys (grouped by cause), and a generic clusterWidget factory stamps 벌다/만들다/지키다/조종하다 in one line each. The terminal — formerly the special case behind the 만들다 tile — moved to a top-bar button, so "all Areas are identical" actually holds (commit 83b0332).

Honest ledger

The line lives on a branch (feat/import-engine) that hasn't merged into the live trunk yet — the trunk already carries the cloud/web seam and the memory engine. Consolidating the two, conflicts and all, is the next move. Lines of code are not value; what's verified is.