유대선
프로젝트로
·업데이트·2

Connective layer v1: the agents now feed the project graph as they work

v0 captured git commits into each startup's living graph (PULL). v1 ships the other half of the blueprint's data spine: every pane's Claude can now record durable project facts — architecture decisions, issues found, user-flow changes — as one in-band dk-node block per turn, captured post-hoc from the transcript, validated against the locked schema (confirmed requires evidence; spoofed sources overwritten), and stored idempotently. The agents do the work; the graph writes itself.

The blueprint's data spine, second half

DalkkakAI's §5.5 says the product isn't the terminal — it's the living graph of every startup: what the business is, how it's structured, what's broken, how the flows run, what's billing. Two buckets keep it fresh: external metrics get PULLed (v0: git commits → confirmed change nodes), and internal change gets PUSHed by the agents in the platform's standard format, as they work. v1 ships that PUSH bucket.

How an agent records a fact

The inline DIRECTIVE every Talkak pane injects now includes a graph rule: when a turn produces a durable fact — a structure decision, an issue discovered or resolved, a user-flow change — emit exactly one line:

<dk-node>{"node_type":"issue","title":"layout Save effect cross-wrote pane ids on switch",
"provenance":"confirmed","evidence":{"detail":"sqlite decode + 2 adversarial refuters"}}</dk-node>

Most turns emit nothing. The rules are explicit: at most one per turn, routine edits don't qualify, and it must never change how the work itself is done — the §5.5 hard constraint ("로깅·표준 때문에 작업을 왜곡하면 안 된다") is in the prompt verbatim as a design law.

How it lands on the graph

A 20-second Rust worker (agent_push.rs) — off the render path, same pattern as git capture — maps each pane to its transcript (the hooks stream) and to its startup (registered by the renderer; the boot sanitizer guarantees a pane belongs to exactly one). It scans transcripts incrementally from persisted byte offsets, extracts dk-node blocks from assistant text (the transcript, never the TUI-mangled PTY stream — the lesson dk-summary already taught), and builds standard nodes:

Then the exact same GraphStore validation and append as v0. GraphPanel renders the new nodes with their provenance badge, untouched.

Verified

cargo test 7/7 — the first Rust tests in the repo (block extraction incl. trailing-junk and unclosed blocks, FNV stability constants, validation rejections, the evidence-spoof overwrite) — plus the 39-test vitest gate that every build must pass. Shipped in 0.2.24.