Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

All notable changes to the Toolpath workspace are documented here.

## toolpath 0.7.2 — 2026-08-21

Adds an optional `title` field to `StepMeta`, completing the set:
`GraphMeta` and `PathMeta` already had it. A short human-readable title
for the step, first-class in the JSON Schema and typed structs; existing
documents are unaffected.

## toolpath 0.7.1 — 2026-08-14

Adds an optional `description` field to `StepMeta`, `PathMeta`, and
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ edition = "2024"
license = "Apache-2.0"

[workspace.dependencies]
toolpath = { version = "0.7.1", path = "crates/toolpath" }
toolpath = { version = "0.7.2", path = "crates/toolpath" }
toolpath-convo = { version = "0.11.1", path = "crates/toolpath-convo" }
toolpath-git = { version = "0.6.0", path = "crates/toolpath-git" }
toolpath-claude = { version = "0.12.2", path = "crates/toolpath-claude", default-features = false }
Expand Down
1 change: 1 addition & 0 deletions RFC.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ paths.

| Field | Description |
| ------------- | -------------------------------------------------- |
| `title` | Short human-readable title |
| `kind` | Path kind — see [Document Kind](#document-kind) (paths only) |
| `intent` | The initial goal of the work |
| `description` | Human-readable summary of the object itself |
Expand Down
2 changes: 1 addition & 1 deletion crates/toolpath/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "toolpath"
version = "0.7.1"
version = "0.7.2"
edition.workspace = true
license.workspace = true
repository = "https://github.com/empathic/toolpath"
Expand Down
4 changes: 4 additions & 0 deletions crates/toolpath/schema/toolpath.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,10 @@
"type": "object",
"description": "Optional metadata for a step",
"properties": {
"title": {
"type": "string",
"description": "Human-readable title"
},
"intent": {
"type": "string",
"description": "The initial goal of the work"
Expand Down
29 changes: 28 additions & 1 deletion crates/toolpath/src/jsonl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,8 @@ fn write_line<W: Write>(w: &mut W, line: &JsonlLine) -> Result<(), JsonlError> {
}

fn step_meta_is_empty(m: &StepMeta) -> bool {
m.intent.is_none()
m.title.is_none()
&& m.intent.is_none()
&& m.description.is_none()
&& m.source.is_none()
&& m.refs.is_empty()
Expand Down Expand Up @@ -1212,6 +1213,32 @@ mod tests {
assert_eq!(canonical_json(&p), canonical_json(&back));
}

#[test]
fn roundtrip_step_title() {
let mut step = make_step("s1", None);
step.meta = Some(StepMeta {
title: Some("Rename config field".into()),
..Default::default()
});
let p = Path {
path: PathIdentity {
id: "p".into(),
base: None,
head: "s1".into(),
graph_ref: None,
},
steps: vec![step],
meta: None,
};
let jsonl = p.to_jsonl_string().unwrap();
let back = Path::from_jsonl_str(&jsonl).unwrap();
assert_eq!(canonical_json(&p), canonical_json(&back));
// Typed field, not the extra catch-all.
let meta = back.steps[0].meta.as_ref().unwrap();
assert_eq!(meta.title.as_deref(), Some("Rename config field"));
assert!(meta.extra.is_empty());
}

#[test]
fn roundtrip_description() {
let mut step = make_step("s1", None);
Expand Down
2 changes: 2 additions & 0 deletions crates/toolpath/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,8 @@ pub struct StructuralChange {
/// Step metadata
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StepMeta {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub intent: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
Expand Down
2 changes: 1 addition & 1 deletion site/_data/crates.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[
{
"name": "toolpath",
"version": "0.7.1",
"version": "0.7.2",
"description": "Core types, builders, and query API",
"docs": "https://docs.rs/toolpath",
"crate": "https://crates.io/crates/toolpath",
Expand Down
Loading