diff --git a/run.json b/run.json index 53a4b95b8..1de98a0f1 100644 --- a/run.json +++ b/run.json @@ -216,7 +216,7 @@ "status_updated_at": "2026-05-07T14:20:52.454231Z", "pending_control": null, "checkpoint": { - "timestamp": "2026-05-07T14:21:09.511703Z", + "timestamp": "2026-05-07T14:21:15.257887Z", "current_node": "greet", "completed_nodes": [ "start", @@ -224,23 +224,23 @@ ], "node_retries": {}, "context_values": { - "internal.fidelity": "compact", - "current_node": "greet", - "internal.retry_count.greet": 0, - "failure_class": "", - "internal.thread_id": "start", + "last_response": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core i", "graph.goal": "Say hello and demonstrate a basic Fabro workflow", + "current_node": "greet", + "internal.work_dir": "/home/daytona/workspace", + "last_stage": "greet", + "failure_class": "", + "internal.retry_count.start": 0, + "internal.retry_count.greet": 0, + "internal.thread_id": "start", + "outcome": "succeeded", + "internal.fidelity": "compact", + "internal.run_id": "01KR1CZJHTBWHFD0QQT4C823JZ", "thread.start.current_node": "greet", "failure_signature": "", - "internal.node_visit_count": 1, - "internal.work_dir": "/home/daytona/workspace", "graph.rankdir": "LR", - "internal.retry_count.start": 0, - "internal.run_id": "01KR1CZJHTBWHFD0QQT4C823JZ", - "outcome": "succeeded", - "last_stage": "greet", - "last_response": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core i", - "response.greet": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core idea in three lines:\n- **Line 1 (5):** AI agents do the heavy lifting\n- **Line 2 (7):** Workflow graphs impose structure and predictability\n- **Line 3 (5):** The human stays in control at the final gate\n\nIt's placed as a blockquote just before the prose description, so it greets visitors right at the top without disrupting the rest of the document's flow." + "response.greet": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core idea in three lines:\n- **Line 1 (5):** AI agents do the heavy lifting\n- **Line 2 (7):** Workflow graphs impose structure and predictability\n- **Line 3 (5):** The human stays in control at the final gate\n\nIt's placed as a blockquote just before the prose description, so it greets visitors right at the top without disrupting the rest of the document's flow.", + "internal.node_visit_count": 1 }, "node_outcomes": { "start": { @@ -284,9 +284,10 @@ } }, "next_node_id": "exit", + "git_commit_sha": "ff923c909fb4e0f5b1bcec001edaf0dca33700ad", "node_visits": { - "start": 1, - "greet": 1 + "greet": 1, + "start": 1 } }, "checkpoints": [ @@ -324,9 +325,117 @@ "start": 1 } } + ], + [ + 41, + { + "timestamp": "2026-05-07T14:21:15.257887Z", + "current_node": "greet", + "completed_nodes": [ + "start", + "greet" + ], + "node_retries": {}, + "context_values": { + "last_response": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core i", + "graph.goal": "Say hello and demonstrate a basic Fabro workflow", + "current_node": "greet", + "internal.work_dir": "/home/daytona/workspace", + "last_stage": "greet", + "failure_class": "", + "internal.retry_count.start": 0, + "internal.retry_count.greet": 0, + "internal.thread_id": "start", + "outcome": "succeeded", + "internal.fidelity": "compact", + "internal.run_id": "01KR1CZJHTBWHFD0QQT4C823JZ", + "thread.start.current_node": "greet", + "failure_signature": "", + "graph.rankdir": "LR", + "response.greet": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core idea in three lines:\n- **Line 1 (5):** AI agents do the heavy lifting\n- **Line 2 (7):** Workflow graphs impose structure and predictability\n- **Line 3 (5):** The human stays in control at the final gate\n\nIt's placed as a blockquote just before the prose description, so it greets visitors right at the top without disrupting the rest of the document's flow.", + "internal.node_visit_count": 1 + }, + "node_outcomes": { + "start": { + "status": "succeeded", + "usage": null + }, + "greet": { + "status": "succeeded", + "context_updates": { + "last_stage": "greet", + "last_response": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core i", + "response.greet": "Done! Here's what was added to the README, right below the tagline:\n\n```\n> *Agents write the code*\n> *Graphs keep the process on track*\n> *You review, then ship*\n```\n\nThe haiku captures Fabro's core idea in three lines:\n- **Line 1 (5):** AI agents do the heavy lifting\n- **Line 2 (7):** Workflow graphs impose structure and predictability\n- **Line 3 (5):** The human stays in control at the final gate\n\nIt's placed as a blockquote just before the prose description, so it greets visitors right at the top without disrupting the rest of the document's flow." + }, + "notes": "Stage completed: greet", + "usage": { + "input": { + "usage": { + "model": { + "provider": "anthropic", + "model_id": "claude-sonnet-4-6" + }, + "tokens": { + "input_tokens": 4703, + "output_tokens": 525, + "reasoning_tokens": 0, + "cache_read_tokens": 25129, + "cache_write_tokens": 12474 + } + }, + "facts": { + "provider": "anthropic", + "cache_write_5m_tokens": 12474, + "cache_write_1h_tokens": 0 + } + }, + "total_usd_micros": 76299 + }, + "files_touched": [ + "/home/daytona/workspace/README.md" + ] + } + }, + "next_node_id": "exit", + "git_commit_sha": "ff923c909fb4e0f5b1bcec001edaf0dca33700ad", + "node_visits": { + "greet": 1, + "start": 1 + } + } ] ], - "conclusion": null, + "conclusion": { + "timestamp": "2026-05-07T14:21:15.292429Z", + "status": "succeeded", + "duration_ms": 22808, + "final_git_commit_sha": "ff923c909fb4e0f5b1bcec001edaf0dca33700ad", + "stages": [ + { + "stage_id": "start", + "stage_label": "start", + "duration_ms": 0, + "retries": 0 + }, + { + "stage_id": "greet", + "stage_label": "greet", + "duration_ms": 13742, + "billing_usd_micros": 76299, + "retries": 0 + } + ], + "billing": { + "input_tokens": 4703, + "output_tokens": 525, + "total_tokens": 42831, + "reasoning_tokens": 0, + "cache_read_tokens": 25129, + "cache_write_tokens": 12474, + "total_usd_micros": 76299 + }, + "total_retries": 0 + }, "retro": null, "retro_prompt": null, "retro_response": null, @@ -347,7 +456,12 @@ "first_event_seq": 19, "prompt": null, "response": null, - "completion": null, + "completion": { + "outcome": "succeeded", + "notes": "Stage completed: greet", + "failure_reason": null, + "timestamp": "2026-05-07T14:21:09.511578Z" + }, "provider_used": { "mode": "agent", "provider": "anthropic", @@ -360,7 +474,8 @@ "stdout": null, "stderr": null, "started_at": "2026-05-07T14:20:55.769098Z", - "state": "running" + "duration_ms": 13742, + "state": "succeeded" }, "start@1": { "first_event_seq": 15, @@ -382,6 +497,27 @@ "started_at": "2026-05-07T14:20:55.767077Z", "duration_ms": 0, "state": "succeeded" + }, + "exit@1": { + "first_event_seq": 44, + "prompt": null, + "response": null, + "completion": { + "outcome": "succeeded", + "notes": null, + "failure_reason": null, + "timestamp": "2026-05-07T14:21:15.261960Z" + }, + "provider_used": null, + "diff": null, + "script_invocation": null, + "script_timing": null, + "parallel_results": null, + "stdout": null, + "stderr": null, + "started_at": "2026-05-07T14:21:15.261883Z", + "duration_ms": 0, + "state": "succeeded" } } } \ No newline at end of file diff --git a/stages/002-greet@1/diff.patch b/stages/002-greet@1/diff.patch new file mode 100644 index 000000000..30055621a --- /dev/null +++ b/stages/002-greet@1/diff.patch @@ -0,0 +1,22 @@ +diff --git a/README.md b/README.md +index 0a3caeec..4e240ee6 100644 +--- a/README.md ++++ b/README.md +@@ -4,6 +4,10 @@ + + ## The open source dark software factory for expert engineers + ++> *Agents write the code* ++> *Graphs keep the process on track* ++> *You review, then ship* ++ + AI coding agents are powerful but unpredictable. You either babysit every step or review a 50-file diff you don't trust. Fabro gives you a middle path: define the process as a graph, let agents execute it, and intervene only where it matters. [Why Fabro?](https://docs.fabro.sh/getting-started/why-fabro) + + [![Rust](https://github.com/fabro-sh/fabro/actions/workflows/rust.yml/badge.svg)](https://github.com/fabro-sh/fabro/actions/workflows/rust.yml) +@@ -190,4 +194,4 @@ If you need a capability which is not in-scope for Fabro, you always have the op + + ## License + +-Fabro is licensed under the [MIT License](LICENSE.md). ++Fabro is licensed under the [MIT License](LICENSE.md). +\ No newline at end of file diff --git a/stages/002-greet@1/status.json b/stages/002-greet@1/status.json new file mode 100644 index 000000000..426053693 --- /dev/null +++ b/stages/002-greet@1/status.json @@ -0,0 +1,6 @@ +{ + "outcome": "succeeded", + "notes": "Stage completed: greet", + "failure_reason": null, + "timestamp": "2026-05-07T14:21:09.511578Z" +} \ No newline at end of file diff --git a/stages/003-exit@1/status.json b/stages/003-exit@1/status.json new file mode 100644 index 000000000..304c552b7 --- /dev/null +++ b/stages/003-exit@1/status.json @@ -0,0 +1,6 @@ +{ + "outcome": "succeeded", + "notes": null, + "failure_reason": null, + "timestamp": "2026-05-07T14:21:15.261960Z" +} \ No newline at end of file