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:
- agent nodes may be
identity | structure | issue | flow | metric—changestays git-exclusive, because a change node's evidence is a re-verifiable commit hash; confirmedrequires evidence, andevidence.sourceis force-set to"agent"— an agent claimingsource: "git"gets overwritten (provenance can't be spoofed);node_idis a deterministic content hash (hand-rolled FNV-1a — std's hasher is run-randomized), so re-scans dedup to zero duplicates.
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.