Code intent, grounded

From session intent
to function decisions.

Your past investigations, attached to the functions they describe, down to every branch — with proof.

DesignGraph keeps your past investigations, pins them to the functions they describe, and zooms into every branch — every condition, caller, and state write with evidence.

Journey map: session intent carried across sessions, pinned to function intent, zoomed into decisions with evidence
Intent across sessions, decisions inside functions.
Built for engineers who care about the why

The graph

From code shape
to code understanding.

Controller chains

Trace the conditions and branches that guard a decision, including the recovery arms around it.

Follow the path

State ownership

Find the canonical write sites behind a state variable and see who truly owns its behavior.

Find the source

Session memory

Intent doesn't die with the session — the next session starts from accumulated intent, not from memory.

Continue the thread

Intent that travels

Keep durable claims close to the functions they describe, across sessions and reviews.

Read the claims

Deep dive

Each feature,
up close.

Controller chains

A call graph shows who calls whom. Ours shows the decisions guarding every call: the enclosing if/for/try chain from the call site inward — and the callers above whose guards reach down to you.

fn approve(order) {
  if signed_in(user)          // guard
  && within_limit(order) {    // guard
    charge(order)             // branch
  } else {
    queue_review(order)       // recovery arm
  }
}

Illustrative example — real output shows the actual guards in your code.

Follow the path

Try the journey

Start with intent.
Zoom into decisions.

One group, three functions, one job — then zoom from what it is for into how it decides.

L0 · group intent — quoted verbatim

What this means: one group, one job, in words — before a single line of code.

media-encode-decode
"the low-latency media path: benchmark driver,
 D3D11 encode bridge, and ffmpeg decoder"

  M1  "encode_frame_d3d11 writes base_qsv_encode_ms
       alongside the per-frame encode rows"
  M2  "main writes the all_key/bitrate/case_name
       accumulation rows of the low-latency bench"

  members:
    scripts/libvpx_low_latency_bench.c::main
    layer3_driver/src/bridge.rs::encode_frame_d3d11
    layer3_driver/src/ffmpeg/decoder.rs::push_to_decoder

Authored group intent from an archived benchmark corpus — quoted verbatim. Project name withheld; member paths unchanged.

Three functions, one job: get frames through the pipe fast. The claims say why they belong together — each one verified against the code. Now watch one member decide. Zoom into the controller

Intent above from the archive; decisions below from a live run on DesignGraph itself — the same zoom works on your code.

L1 · controller — illustrative

What this means: a group member, opened into its decision paths.

Zoom diagram: encode member flowing through a guard into the decoder member, with state write and claims attached
Illustrative — the shape of a real chain (member → guard → member), not tool output. Live chains carry budget + truncation markers, never silent.

What this means: one decision, with its guard and proof attached.

1 · the sort call — no guard above it
{
  "call_site": {
    "callee": "sort_by",
    "column": 4,
    "line": 158,
    "source_line": "sorted.sort_by(|a, b| a.file_path.cmp(&b.file_path))"
  },
  "caller": {
    "file_path": "src/db/mod.rs",
    "function_name": "sorted_manifest_and_hash",
    "language": "rust"
  },
  "chain": [],
  "direction": "down",
  "freshness": {
    "manifest_hash": "2e00f20d83d601d7bac3cc9b25eee287fafecfda91b7e1fa853711badec999e0",
    "pin_provenance": {
      "manifest_hash": "2e00f20d83d601d7bac3cc9b25eee287fafecfda91b7e1fa853711badec999e0"
    },
    "source": "daemon-freshness.json",
    "state": "fresh"
  },
  "line_ref": "working_tree"
}

Live capture — controller_chain on DesignGraph itself (sorted_manifest_and_hash, src/db/mod.rs), 2026-09-04. An empty chain: no guard above this call. 1 of 11 emitted entries, shown complete.

L3 · source — src/db/mod.rs:158 (call-site line from the live run; line_ref: working_tree).

2 · the loop guard — the decision, up close
{"branch": "body", "caught_exceptions": [], "condition": null, "end_line": 165, "is_negated": false, "iteration_max": null, "iteration_min": null, "iteration_range": null, "level": 0, "polarity": "positive", "scope_depth": 1, "source_text": "for r in &sorted {\n        hasher.update(r.file_path.as_bytes());\n        hasher.update([0u8]);\n        hasher.update(r.content_hash.as_bytes());\n        hasher.update([0u8]);\n    }", "start_line": 160, "type": "for"}

Live capture — the guard level from the same run, 2026-09-04. Single-line form; keys, order, and values identical to the emitted level (same shape shown on /features/controller-chains.html).

L3 · source — src/db/mod.rs:160–165 (for-guard start/end lines from the live run; line_ref: working_tree).

3 · the guarded update — guard and proof attached
{
  "call_site": {
    "callee": "update",
    "column": 8,
    "line": 161,
    "source_line": "hasher.update(r.file_path.as_bytes())"
  },
  "caller": {
    "file_path": "src/db/mod.rs",
    "function_name": "sorted_manifest_and_hash",
    "language": "rust"
  },
  "chain": [
    {
      "branch": "body",
      "caught_exceptions": [],
      "condition": null,
      "end_line": 165,
      "is_negated": false,
      "iteration_max": null,
      "iteration_min": null,
      "iteration_range": null,
      "level": 0,
      "polarity": "positive",
      "scope_depth": 1,
      "source_text": "for r in &sorted {\n        hasher.update(r.file_path.as_bytes());\n        hasher.update([0u8]);\n        hasher.update(r.content_hash.as_bytes());\n        hasher.update([0u8]);\n    }",
      "start_line": 160,
      "type": "for"
    }
  ],
  "direction": "down",
  "freshness": {
    "manifest_hash": "2e00f20d83d601d7bac3cc9b25eee287fafecfda91b7e1fa853711badec999e0",
    "pin_provenance": {
      "manifest_hash": "2e00f20d83d601d7bac3cc9b25eee287fafecfda91b7e1fa853711badec999e0"
    },
    "source": "daemon-freshness.json",
    "state": "fresh"
  },
  "line_ref": "working_tree"
}

Live capture — same run, 2026-09-04. The chain carries the for-guard above with its source text. 1 of 11 emitted entries, shown complete.

L3 · source — src/db/mod.rs:161 (call-site line from the live run; line_ref: working_tree).

Make the invisible
legible.

Start with the graph Explore on GitHub