Skip to main content

Crate toolpath

Crate toolpath 

Source
Expand description

§Toolpath — artifact transformation provenance

Toolpath records who changed what, why, what they tried that didn’t work, and how to verify all of it. Think “git blame, but for everything that happens to code — including the stuff git doesn’t see.”

§Three core objects

Step      ← a single atomic change (one actor, one timestamp, one or more artifacts)
  └─ Path      ← a sequence of steps forming a DAG (e.g. a pull request)
       └─ Graph      ← a collection of paths (e.g. a release)

Steps are the leaves. Each step records an actor ("human:alex", "agent:claude-code", "tool:rustfmt"), a timestamp, and a set of artifact changes (keyed by path or URL). Steps link to their parents, forming a DAG — abandoned branches become implicit dead ends.

A Path groups steps under a shared context: a repo base, a head step, and optional metadata like title, intent, and external references.

A Graph collects related paths (inline or by reference) to represent a larger unit of work such as a release.

§Quick start

use toolpath::v1::{Step, Document};

let step = Step::new("step-001", "human:alex", "2026-01-29T10:00:00Z")
    .with_raw_change("src/main.rs", "@@ -1 +1 @@\n-old\n+new")
    .with_intent("Fix greeting");

let doc = Document::Step(step);
let json = doc.to_json_pretty().unwrap();
assert!(json.contains("\"Step\"")); // externally tagged
assert!(json.contains("step-001"));

All public types live under v1.

Modules§

v1
Versioned public API for Toolpath types and queries.