From f6cf39a6ea96a85ff7814ace4047f4c19ca23f6a Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sun, 15 Mar 2026 11:04:04 -0400 Subject: [PATCH] cleanup workflows --- fabro/workflows/daytona-check/check.fabro | 12 - fabro/workflows/daytona-check/run.toml | 34 - fabro/workflows/factory/README.md | 156 ----- fabro/workflows/factory/architect.fabro | 18 - fabro/workflows/factory/architect.png | Bin 28044 -> 0 bytes fabro/workflows/factory/expand.fabro | 19 - fabro/workflows/factory/expand.png | Bin 20604 -> 0 bytes fabro/workflows/factory/implement.fabro | 33 - fabro/workflows/factory/implement.png | Bin 30148 -> 0 bytes .../factory/prompts/architect/blueprint.md | 37 - .../factory/prompts/architect/diagram.md | 8 - .../factory/prompts/expand/execute.md | 8 - .../factory/prompts/expand/propose.md | 16 - .../factory/prompts/implement/fix.md | 8 - .../factory/prompts/implement/implement.md | 14 - .../factory/prompts/implement/plan.md | 17 - .../factory/prompts/implement/review.md | 16 - .../factory/prompts/implement/validate.md | 13 - fabro/workflows/factory/prompts/seed/draft.md | 10 - .../workflows/factory/prompts/seed/ingest.md | 10 - .../factory/prompts/specify/clarify.md | 12 - .../factory/prompts/specify/require.md | 26 - fabro/workflows/factory/prompts/sync/apply.md | 7 - .../workflows/factory/prompts/sync/detect.md | 18 - .../workflows/factory/prompts/sync/propose.md | 8 - fabro/workflows/factory/seed.fabro | 18 - fabro/workflows/factory/seed.png | Bin 21173 -> 0 bytes fabro/workflows/factory/specify.fabro | 18 - fabro/workflows/factory/specify.png | Bin 26303 -> 0 bytes fabro/workflows/factory/sync.fabro | 23 - fabro/workflows/factory/sync.png | Bin 39567 -> 0 bytes .../golden-gate/Dockerfile.golden-gate | 64 -- fabro/workflows/golden-gate/prompt.md | 13 - fabro/workflows/golden-gate/workflow.fabro | 14 - fabro/workflows/golden-gate/workflow.toml | 35 - fabro/workflows/hello/workflow.fabro | 11 - fabro/workflows/hello/workflow.toml | 5 - .../workflows/imagegen-openai/workflow.fabro | 10 - fabro/workflows/imagegen-openai/workflow.toml | 18 - fabro/workflows/imagegen/Dockerfile.imagegen | 69 -- fabro/workflows/imagegen/workflow.fabro | 11 - fabro/workflows/imagegen/workflow.toml | 18 - fabro/workflows/implement/prompts/simplify.md | 46 -- fabro/workflows/implement/workflow.toml | 16 +- .../playwright-demo/browse-prompt.md | 14 - .../workflows/playwright-demo/workflow.fabro | 13 - fabro/workflows/playwright-demo/workflow.toml | 28 - fabro/workflows/repl/workflow.fabro | 14 - fabro/workflows/repl/workflow.toml | 8 - fabro/workflows/solitaire/workflow.fabro | 170 ----- fabro/workflows/solitaire/workflow.toml | 2 - .../workflows/spec/spec-dod-multimodel.fabro | 655 ------------------ fabro/workflows/spec/spec-dod-multimodel.png | Bin 154520 -> 0 bytes fabro/workflows/spec/spec-dod.fabro | 254 ------- fabro/workflows/vnc-demo/Dockerfile.vnc | 27 - fabro/workflows/vnc-demo/browse-prompt.md | 16 - fabro/workflows/vnc-demo/workflow.fabro | 16 - fabro/workflows/vnc-demo/workflow.toml | 33 - .../workflows/web-game-demo/verify-prompt.md | 14 - fabro/workflows/web-game-demo/workflow.fabro | 14 - fabro/workflows/web-game-demo/workflow.toml | 28 - 61 files changed, 1 insertion(+), 2194 deletions(-) delete mode 100644 fabro/workflows/daytona-check/check.fabro delete mode 100644 fabro/workflows/daytona-check/run.toml delete mode 100644 fabro/workflows/factory/README.md delete mode 100644 fabro/workflows/factory/architect.fabro delete mode 100644 fabro/workflows/factory/architect.png delete mode 100644 fabro/workflows/factory/expand.fabro delete mode 100644 fabro/workflows/factory/expand.png delete mode 100644 fabro/workflows/factory/implement.fabro delete mode 100644 fabro/workflows/factory/implement.png delete mode 100644 fabro/workflows/factory/prompts/architect/blueprint.md delete mode 100644 fabro/workflows/factory/prompts/architect/diagram.md delete mode 100644 fabro/workflows/factory/prompts/expand/execute.md delete mode 100644 fabro/workflows/factory/prompts/expand/propose.md delete mode 100644 fabro/workflows/factory/prompts/implement/fix.md delete mode 100644 fabro/workflows/factory/prompts/implement/implement.md delete mode 100644 fabro/workflows/factory/prompts/implement/plan.md delete mode 100644 fabro/workflows/factory/prompts/implement/review.md delete mode 100644 fabro/workflows/factory/prompts/implement/validate.md delete mode 100644 fabro/workflows/factory/prompts/seed/draft.md delete mode 100644 fabro/workflows/factory/prompts/seed/ingest.md delete mode 100644 fabro/workflows/factory/prompts/specify/clarify.md delete mode 100644 fabro/workflows/factory/prompts/specify/require.md delete mode 100644 fabro/workflows/factory/prompts/sync/apply.md delete mode 100644 fabro/workflows/factory/prompts/sync/detect.md delete mode 100644 fabro/workflows/factory/prompts/sync/propose.md delete mode 100644 fabro/workflows/factory/seed.fabro delete mode 100644 fabro/workflows/factory/seed.png delete mode 100644 fabro/workflows/factory/specify.fabro delete mode 100644 fabro/workflows/factory/specify.png delete mode 100644 fabro/workflows/factory/sync.fabro delete mode 100644 fabro/workflows/factory/sync.png delete mode 100644 fabro/workflows/golden-gate/Dockerfile.golden-gate delete mode 100644 fabro/workflows/golden-gate/prompt.md delete mode 100644 fabro/workflows/golden-gate/workflow.fabro delete mode 100644 fabro/workflows/golden-gate/workflow.toml delete mode 100644 fabro/workflows/hello/workflow.fabro delete mode 100644 fabro/workflows/hello/workflow.toml delete mode 100644 fabro/workflows/imagegen-openai/workflow.fabro delete mode 100644 fabro/workflows/imagegen-openai/workflow.toml delete mode 100644 fabro/workflows/imagegen/Dockerfile.imagegen delete mode 100644 fabro/workflows/imagegen/workflow.fabro delete mode 100644 fabro/workflows/imagegen/workflow.toml delete mode 100644 fabro/workflows/implement/prompts/simplify.md delete mode 100644 fabro/workflows/playwright-demo/browse-prompt.md delete mode 100644 fabro/workflows/playwright-demo/workflow.fabro delete mode 100644 fabro/workflows/playwright-demo/workflow.toml delete mode 100644 fabro/workflows/repl/workflow.fabro delete mode 100644 fabro/workflows/repl/workflow.toml delete mode 100644 fabro/workflows/solitaire/workflow.fabro delete mode 100644 fabro/workflows/solitaire/workflow.toml delete mode 100644 fabro/workflows/spec/spec-dod-multimodel.fabro delete mode 100644 fabro/workflows/spec/spec-dod-multimodel.png delete mode 100644 fabro/workflows/spec/spec-dod.fabro delete mode 100644 fabro/workflows/vnc-demo/Dockerfile.vnc delete mode 100644 fabro/workflows/vnc-demo/browse-prompt.md delete mode 100644 fabro/workflows/vnc-demo/workflow.fabro delete mode 100644 fabro/workflows/vnc-demo/workflow.toml delete mode 100644 fabro/workflows/web-game-demo/verify-prompt.md delete mode 100644 fabro/workflows/web-game-demo/workflow.fabro delete mode 100644 fabro/workflows/web-game-demo/workflow.toml diff --git a/fabro/workflows/daytona-check/check.fabro b/fabro/workflows/daytona-check/check.fabro deleted file mode 100644 index 0821a1029..000000000 --- a/fabro/workflows/daytona-check/check.fabro +++ /dev/null @@ -1,12 +0,0 @@ -digraph DaytonaCheck { - graph [goal="Run cargo test in a Daytona sandbox and summarize results"] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - run_tests [label="Run Tests", shape=parallelogram, script="cargo test --workspace 2>&1 || true"] - report [label="Report", prompt="Summarize the test results"] - - start -> run_tests -> report -> exit -} diff --git a/fabro/workflows/daytona-check/run.toml b/fabro/workflows/daytona-check/run.toml deleted file mode 100644 index c6ca50922..000000000 --- a/fabro/workflows/daytona-check/run.toml +++ /dev/null @@ -1,34 +0,0 @@ -version = 1 -goal = "Run cargo check in a Daytona cloud sandbox" -graph = "check.fabro" - -[llm] -model = "claude-sonnet" - -[sandbox] -provider = "daytona" - -[sandbox.env] -CARGO_INCREMENTAL = "0" - -[sandbox.daytona] -auto_stop_interval = 60 - -[sandbox.daytona.labels] -project = "attractor-rust" - -[sandbox.daytona.snapshot] -name = "attractor-rust-check-dev" -cpu = 4 -memory = 8 -disk = 10 -dockerfile = """ -FROM rust:1.85-slim-bookworm -RUN apt-get update && apt-get install -y --no-install-recommends \ - pkg-config libssl-dev cmake git curl ca-certificates ripgrep \ - && rm -rf /var/lib/apt/lists/* -RUN rustup update stable && rustup default stable -RUN useradd -m -s /bin/bash daytona -USER daytona -WORKDIR /home/daytona -""" diff --git a/fabro/workflows/factory/README.md b/fabro/workflows/factory/README.md deleted file mode 100644 index 05c435e41..000000000 --- a/fabro/workflows/factory/README.md +++ /dev/null @@ -1,156 +0,0 @@ -# Software Factory Pipelines - -Six Attractor pipelines that implement a spec-driven software factory. Markdown docs are the source of truth — code is a derived artifact. - -## Document Structure - -The factory operates on three layers: - -1. **Product** — what to build (requirements, acceptance criteria) -2. **Architecture** — how to build it (blueprints, diagrams, stack decisions) -3. **Code** — the implementation (derived from the first two) - -The first two layers are markdown docs. The third is generated from them. - -``` -files-internal/ - product/ Layer 1: WHAT to build - business-problem.md - personas.md - product-description.md - current-state.md - success-metrics.md - technical-requirements.md - features/ - NNN-feature.md per-feature requirements + acceptance criteria - - architecture/ Layer 2: HOW to build it - foundation-blueprints/ - backend.md stack-wide backend decisions - data-layer.md stack-wide data decisions - frontend.md stack-wide frontend decisions - system-diagrams/ - entity-relationship-diagram.md - sequence-diagram.md - system-architecture.md - features/ - NNN-feature.md per-feature blueprint (data model, API, UI) - -src/ Layer 3: the implementation (generated) -``` - -## Pipelines - -### 1. Seed - -Bootstrap product context from raw inputs. Run once per product. - -**Input:** Conversations, notes, designs, existing code — anything unstructured. -**Output:** Filled `product/` docs. - -![Seed pipeline](seed.png) - -[seed.fabro](seed.fabro) | Prompts: [ingest](prompts/seed/ingest.md), [draft](prompts/seed/draft.md) - ---- - -### 2. Specify - -Define what a feature does in implementation-agnostic terms. Run once per feature. - -**Input:** Product context docs + a feature idea (passed as `goal`). -**Output:** `product/features/NNN-feature.md` with user stories and acceptance criteria. - -![Specify pipeline](specify.png) - -[specify.fabro](specify.fabro) | Prompts: [clarify](prompts/specify/clarify.md), [require](prompts/specify/require.md) - ---- - -### 3. Architect - -Translate approved requirements into a technical blueprint. Run once per feature, after Specify. - -**Input:** `product/features/NNN-feature.md` + foundation blueprints + codebase. -**Output:** `architecture/features/NNN-feature.md` + updated system diagrams. - -![Architect pipeline](architect.png) - -[architect.fabro](architect.fabro) | Prompts: [blueprint](prompts/architect/blueprint.md), [diagram](prompts/architect/diagram.md) - ---- - -### 4. Implement - -Generate working code from a feature blueprint. Run once per feature, after Architect. No human gate — the blueprint is the approved plan, and the validate/fix loop converges autonomously. - -**Input:** Feature blueprint + foundation blueprints + codebase. -**Output:** Committed code (migrations, models, API, UI, tests). - -![Implement pipeline](implement.png) - -[implement.fabro](implement.fabro) | Prompts: [plan](prompts/implement/plan.md), [implement](prompts/implement/implement.md), [validate](prompts/implement/validate.md), [fix](prompts/implement/fix.md) - -All nodes share `fidelity="full"` with `thread_id="impl"` so the agent maintains full context across the loop. `goal_gate=true` on Validate ensures the pipeline cannot exit until all acceptance criteria pass. - ---- - -### 5. Sync - -Detect and resolve drift between the three layers. Run continuously (after merges, on schedule, or on demand). - -**Input:** A change to any layer (code, product docs, or architecture docs). -**Output:** Updated docs or code that restore alignment. - -![Sync pipeline](sync.png) - -[sync.fabro](sync.fabro) | Prompts: [detect](prompts/sync/detect.md), [propose](prompts/sync/propose.md), [apply](prompts/sync/apply.md) - -Short-circuits to Exit when no drift is detected, avoiding unnecessary human interaction. - ---- - -### 6. Expand - -Evolve the product by adding, modifying, or removing features. Run as needed. - -**Input:** Human intent (passed as `goal`), e.g. "split feature X" or "add Y". -**Output:** Updated document tree, ready for Implement. - -![Expand pipeline](expand.png) - -[expand.fabro](expand.fabro) | Prompts: [propose](prompts/expand/propose.md), [execute](prompts/expand/execute.md) - ---- - -## How They Compose - -``` -Seed ──→ Specify ──→ Architect ──→ Implement - (1x) (1x per (1x per (1x per - feature) feature) feature) - ↕ ↕ ↕ - Sync ←────── Sync ←────── Sync - (continuous) - ↕ - Expand - (as needed) -``` - -- **Seed** runs once to bootstrap product context -- **Specify** and **Architect** run once per feature to produce requirements and blueprints -- **Implement** runs once per feature to produce code -- **Sync** runs continuously to keep all three layers aligned -- **Expand** runs when the product evolves (new features, splits, removals) - -The docs are always the source of truth. If you delete all code and run Implement for every feature, you get the system back. - -## Prompt References - -DOT files reference prompts with `@`-style paths relative to the DOT file: - -```dot -plan [label="Plan Implementation", prompt="@prompts/implement/plan.md"] -``` - -The `@` prefix tells the engine to read the file contents as the prompt. Prompts support `$goal` variable expansion. diff --git a/fabro/workflows/factory/architect.fabro b/fabro/workflows/factory/architect.fabro deleted file mode 100644 index 83e58ec69..000000000 --- a/fabro/workflows/factory/architect.fabro +++ /dev/null @@ -1,18 +0,0 @@ -digraph architect { - graph [ - goal="", - label="Architect" - ] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - blueprint [label="Write Blueprint", prompt="@prompts/architect/blueprint.md", reasoning_effort="high"] - diagram [label="Update Diagrams", prompt="@prompts/architect/diagram.md"] - approve [shape=hexagon, label="Approve Architecture"] - - start -> blueprint -> diagram -> approve - approve -> exit [label="[A] Accept"] - approve -> blueprint [label="[R] Revise"] -} diff --git a/fabro/workflows/factory/architect.png b/fabro/workflows/factory/architect.png deleted file mode 100644 index 4340128365cb2cdc9f136905c85d7f9b4e55fd3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28044 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 diff --git a/fabro/workflows/factory/expand.fabro b/fabro/workflows/factory/expand.fabro deleted file mode 100644 index 434c1c5ae..000000000 --- a/fabro/workflows/factory/expand.fabro +++ /dev/null @@ -1,19 +0,0 @@ -digraph expand { - graph [ - goal="", - label="Expand" - ] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - propose [label="Propose Changes", prompt="@prompts/expand/propose.md", reasoning_effort="high"] - approve [shape=hexagon, label="Approve Changes"] - execute [label="Execute Changes", prompt="@prompts/expand/execute.md"] - - start -> propose -> approve - approve -> execute [label="[A] Accept"] - approve -> propose [label="[R] Revise"] - execute -> exit -} diff --git a/fabro/workflows/factory/expand.png b/fabro/workflows/factory/expand.png deleted file mode 100644 index 84546dd44927e457835c6ad7682a5512fb4195df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20604 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 Pp2QI?Jr-)F8{jH diff --git a/fabro/workflows/factory/implement.fabro b/fabro/workflows/factory/implement.fabro deleted file mode 100644 index 03bb75f04..000000000 --- a/fabro/workflows/factory/implement.fabro +++ /dev/null @@ -1,33 +0,0 @@ -digraph implement { - graph [ - goal="", - label="Implement" - ] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - strategy [shape=hexagon, label="Choose decomposition strategy:"] - - subgraph cluster_impl { - label="Implementation Loop" - node [fidelity="full", thread_id="impl"] - - plan [label="Plan Implementation", prompt="@prompts/implement/plan.md", reasoning_effort="high"] - implement [label="Implement", prompt="@prompts/implement/implement.md"] - review [label="Review", prompt="@prompts/implement/review.md"] - validate [label="Validate", prompt="@prompts/implement/validate.md", goal_gate=true] - fix [label="Fix Failures", prompt="@prompts/implement/fix.md", max_visits=3] - } - - start -> strategy - strategy -> plan [label="[L] Layer-by-layer"] - strategy -> plan [label="[F] Feature slice"] - strategy -> plan [label="[P] Embarrassingly parallel"] - strategy -> plan [label="[S] Sequential / linear"] - plan -> implement -> review -> validate - validate -> exit [condition="outcome=success"] - validate -> fix [condition="outcome!=success", label="Fix"] - fix -> validate -} diff --git a/fabro/workflows/factory/implement.png b/fabro/workflows/factory/implement.png deleted file mode 100644 index e3ab57abc2de90a20804f6bf1a6d8fa22627f2f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30148 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%0D+m{)9l`|x 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 ingest -> draft -> review - review -> exit [label="[A] Accept"] - review -> draft [label="[R] Revise"] -} diff --git a/fabro/workflows/factory/seed.png b/fabro/workflows/factory/seed.png deleted file mode 100644 index 18a19ba20fe9ed3ab934f85931a03870e9918356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21173 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 clarify -> require -> approve - approve -> exit [label="[A] Accept"] - approve -> require [label="[R] Revise"] -} diff --git a/fabro/workflows/factory/specify.png b/fabro/workflows/factory/specify.png deleted file mode 100644 index 32fec7cb4fcd01ba9fe6e324f1a0d9429da092bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26303 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 diff --git a/fabro/workflows/factory/sync.fabro b/fabro/workflows/factory/sync.fabro deleted file mode 100644 index dd74fbdfe..000000000 --- a/fabro/workflows/factory/sync.fabro +++ /dev/null @@ -1,23 +0,0 @@ -digraph sync { - graph [ - goal="Detect and resolve drift between product docs, architecture docs, and code", - label="Sync" - ] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - detect [label="Detect Drift", prompt="@prompts/sync/detect.md", reasoning_effort="high"] - propose [label="Propose Changes", prompt="@prompts/sync/propose.md"] - review [shape=hexagon, label="Review Changes"] - apply [label="Apply Changes", prompt="@prompts/sync/apply.md"] - - start -> detect - detect -> exit [condition="context.drift_found=false", label="No drift"] - detect -> propose [condition="context.drift_found=true", label="Drift found"] - propose -> review - review -> apply [label="[A] Accept"] - review -> propose [label="[R] Revise"] - apply -> exit -} diff --git a/fabro/workflows/factory/sync.png b/fabro/workflows/factory/sync.png deleted file mode 100644 index 19262f8f8f561e230b89874b80344afb6104d27c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39567 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

LaGAEpAw@_@XNmc{Lafg8*?hYmWC%eAW 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 diff --git a/fabro/workflows/golden-gate/Dockerfile.golden-gate b/fabro/workflows/golden-gate/Dockerfile.golden-gate deleted file mode 100644 index c62621d31..000000000 --- a/fabro/workflows/golden-gate/Dockerfile.golden-gate +++ /dev/null @@ -1,64 +0,0 @@ -FROM node:22-bookworm-slim - -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl jq git ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -RUN printf '%s\n' \ - '#!/usr/bin/env bash' \ - 'set -euo pipefail' \ - '' \ - 'usage() {' \ - ' echo "Usage: imagegen [output.png]" >&2' \ - ' echo "" >&2' \ - ' echo "Generate an image from a text prompt using OpenAI gpt-image-1." >&2' \ - ' echo "Output defaults to '"'"'output.png'"'"' if not specified." >&2' \ - ' exit 1' \ - '}' \ - '' \ - 'if [[ $# -lt 1 ]] || [[ "${1:-}" == "--help" ]] || [[ "${1:-}" == "-h" ]]; then' \ - ' usage' \ - 'fi' \ - '' \ - 'if [[ -z "${OPENAI_API_KEY:-}" ]]; then' \ - ' echo "Error: OPENAI_API_KEY not set" >&2' \ - ' exit 1' \ - 'fi' \ - '' \ - 'PROMPT="$1"' \ - 'OUTPUT="${2:-output.png}"' \ - 'MODEL="${IMAGEGEN_MODEL:-gpt-image-1}"' \ - 'API_URL="https://api.openai.com/v1/images/generations"' \ - '' \ - 'echo "Generating image for: ${PROMPT}" >&2' \ - 'echo "Model: ${MODEL}" >&2' \ - '' \ - 'RESPONSE=$(curl -s --fail-with-body -X POST "$API_URL" \' \ - ' -H "Content-Type: application/json" \' \ - ' -H "Authorization: Bearer ${OPENAI_API_KEY}" \' \ - ' -d "$(jq -n --arg prompt "$PROMPT" --arg model "$MODEL" '"'"'{' \ - ' model: $model,' \ - ' prompt: $prompt,' \ - ' n: 1,' \ - ' size: "1024x1024"' \ - ' }'"'"')")' \ - '' \ - 'ERROR=$(echo "$RESPONSE" | jq -r '"'"'.error.message // empty'"'"')' \ - 'if [[ -n "$ERROR" ]]; then' \ - ' echo "API error: $ERROR" >&2' \ - ' exit 1' \ - 'fi' \ - '' \ - 'IMAGE_DATA=$(echo "$RESPONSE" | jq -r '"'"'.data[0].b64_json // empty'"'"')' \ - '' \ - 'if [[ -z "$IMAGE_DATA" ]]; then' \ - ' echo "No image in response. Raw:" >&2' \ - ' echo "$RESPONSE" | jq . >&2' \ - ' exit 1' \ - 'fi' \ - '' \ - 'echo "$IMAGE_DATA" | base64 -d > "$OUTPUT"' \ - 'echo "Saved to ${OUTPUT}" >&2' \ - > /usr/local/bin/imagegen && chmod +x /usr/local/bin/imagegen - -WORKDIR /root diff --git a/fabro/workflows/golden-gate/prompt.md b/fabro/workflows/golden-gate/prompt.md deleted file mode 100644 index 2c34d8c04..000000000 --- a/fabro/workflows/golden-gate/prompt.md +++ /dev/null @@ -1,13 +0,0 @@ -Use the /develop-web-game skill and the `imagegen` CLI tool. - -Create a hyperrealistic interactive 3D experience of the San Francisco Golden Gate Bridge that the user can fly around freely. The environment should include realistic lighting, water, fog, atmosphere, suspension cables, traffic, surrounding coastline, and city context, with a cinematic sense of scale and detail. Let the user smoothly navigate through the scene with intuitive flight controls and multiple viewpoints, including close-up structural passes and wide scenic flyovers. Prioritize realism, immersion, and visual fidelity. - -Use `imagegen` to generate source material and surface textures. For example: -``` -imagegen "photorealistic golden gate bridge tower close-up, red steel, rivets, fog" output/textures/tower.png -imagegen "san francisco bay water surface, realistic ocean waves, sunlight reflections" output/textures/water.png -``` - -When playtesting with Playwright, fly around the bridge from multiple distances and angles, verify that navigation is smooth and stable, and confirm that the world looks convincing both up close and from afar. The result should look high fidelity and smooth, almost like a photo — not clunky or block-like. There should be realistic cars going over the bridge too. - -Take your time and iterate until the experience is polished. diff --git a/fabro/workflows/golden-gate/workflow.fabro b/fabro/workflows/golden-gate/workflow.fabro deleted file mode 100644 index 362395bf3..000000000 --- a/fabro/workflows/golden-gate/workflow.fabro +++ /dev/null @@ -1,14 +0,0 @@ -digraph GoldenGate { - graph [ - goal="Create a hyperrealistic interactive 3D Golden Gate Bridge flight experience", - model_stylesheet="* { model: gpt-5.4;}" - ] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - build [label="Build Experience", prompt="@prompt.md"] - - start -> build -> exit -} diff --git a/fabro/workflows/golden-gate/workflow.toml b/fabro/workflows/golden-gate/workflow.toml deleted file mode 100644 index 152cce8be..000000000 --- a/fabro/workflows/golden-gate/workflow.toml +++ /dev/null @@ -1,35 +0,0 @@ -version = 1 -goal = "Create a hyperrealistic interactive 3D Golden Gate Bridge flight experience" -graph = "workflow.fabro" - -[llm] -model = "gpt-5.4" - -[sandbox] -provider = "daytona" - -[sandbox.env] -OPENAI_API_KEY = "${env.OPENAI_API_KEY}" - -[sandbox.daytona] -auto_stop_interval = 30 - -[sandbox.daytona.labels] -project = "golden-gate" - -[sandbox.daytona.snapshot] -name = "golden-gate-v3" -cpu = 4 -memory = 8 -disk = 10 -dockerfile = { path = "Dockerfile.golden-gate" } - -[assets] -include = ["output/**"] - -[mcp_servers.playwright] -type = "sandbox" -command = ["npx", "@playwright/mcp@latest", "--port", "3100", "--headless", "--browser", "chromium"] -port = 3100 -startup_timeout_secs = 60 -tool_timeout_secs = 120 diff --git a/fabro/workflows/hello/workflow.fabro b/fabro/workflows/hello/workflow.fabro deleted file mode 100644 index e6915a19e..000000000 --- a/fabro/workflows/hello/workflow.fabro +++ /dev/null @@ -1,11 +0,0 @@ -digraph Hello { - graph [goal="Say hello and demonstrate a basic Fabro workflow"] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - greet [label="Greet", prompt="Say hello! Introduce yourself and explain that this is a test of the fabro workflow engine."] - - start -> greet -> exit -} diff --git a/fabro/workflows/hello/workflow.toml b/fabro/workflows/hello/workflow.toml deleted file mode 100644 index 7cae89273..000000000 --- a/fabro/workflows/hello/workflow.toml +++ /dev/null @@ -1,5 +0,0 @@ -version = 1 -graph = "workflow.fabro" - -[sandbox] -provider = "local" diff --git a/fabro/workflows/imagegen-openai/workflow.fabro b/fabro/workflows/imagegen-openai/workflow.fabro deleted file mode 100644 index 62b393217..000000000 --- a/fabro/workflows/imagegen-openai/workflow.fabro +++ /dev/null @@ -1,10 +0,0 @@ -digraph ImageGenOpenAI { - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - generate [label="Generate Image", prompt="Generate an image of: $goal\n\nRun: mkdir -p output && imagegen \"$goal\" output/generated.png\n\nThen verify the file exists with: ls -la output/generated.png"] - - start -> generate -> exit -} diff --git a/fabro/workflows/imagegen-openai/workflow.toml b/fabro/workflows/imagegen-openai/workflow.toml deleted file mode 100644 index f4bec7465..000000000 --- a/fabro/workflows/imagegen-openai/workflow.toml +++ /dev/null @@ -1,18 +0,0 @@ -version = 1 -graph = "workflow.fabro" - -[sandbox] -provider = "daytona" - -[sandbox.env] -OPENAI_API_KEY = "${env.OPENAI_API_KEY}" - -[sandbox.daytona.snapshot] -name = "imagegen-openai-v1" -cpu = 4 -memory = 8 -disk = 10 -dockerfile = { path = "../golden-gate/Dockerfile.golden-gate" } - -[assets] -include = ["output/**"] diff --git a/fabro/workflows/imagegen/Dockerfile.imagegen b/fabro/workflows/imagegen/Dockerfile.imagegen deleted file mode 100644 index 03af80f5a..000000000 --- a/fabro/workflows/imagegen/Dockerfile.imagegen +++ /dev/null @@ -1,69 +0,0 @@ -FROM ubuntu:22.04 -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl jq git ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -RUN printf '%s\n' \ - '#!/usr/bin/env bash' \ - 'set -euo pipefail' \ - '' \ - 'usage() {' \ - ' echo "Usage: imagegen [output.png]" >&2' \ - ' echo "" >&2' \ - ' echo "Generate an image from a text prompt using Gemini." >&2' \ - ' echo "Output defaults to '"'"'output.png'"'"' if not specified." >&2' \ - ' exit 1' \ - '}' \ - '' \ - 'if [[ $# -lt 1 ]] || [[ "${1:-}" == "--help" ]] || [[ "${1:-}" == "-h" ]]; then' \ - ' usage' \ - 'fi' \ - '' \ - 'if [[ -z "${GEMINI_API_KEY:-}" ]]; then' \ - ' echo "Error: GEMINI_API_KEY not set" >&2' \ - ' exit 1' \ - 'fi' \ - '' \ - 'PROMPT="$1"' \ - 'OUTPUT="${2:-output.png}"' \ - 'MODEL="${IMAGEGEN_MODEL:-gemini-2.5-flash-image}"' \ - 'API_URL="https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${GEMINI_API_KEY}"' \ - '' \ - 'echo "Generating image for: ${PROMPT}" >&2' \ - 'echo "Model: ${MODEL}" >&2' \ - '' \ - 'RESPONSE=$(curl -s -X POST "$API_URL" \' \ - ' -H "Content-Type: application/json" \' \ - ' -d "$(jq -n --arg prompt "$PROMPT" '"'"'{' \ - ' contents: [{ parts: [{ text: $prompt }] }],' \ - ' generationConfig: { responseModalities: ["TEXT", "IMAGE"] }' \ - ' }'"'"')")' \ - '' \ - 'ERROR=$(echo "$RESPONSE" | jq -r '"'"'.error.message // empty'"'"')' \ - 'if [[ -n "$ERROR" ]]; then' \ - ' echo "API error: $ERROR" >&2' \ - ' exit 1' \ - 'fi' \ - '' \ - 'IMAGE_DATA=$(echo "$RESPONSE" | jq -r '"'"'' \ - ' .candidates[0].content.parts[]' \ - ' | select(.inlineData)' \ - ' | .inlineData.data' \ - ''"'"' | head -1)' \ - '' \ - 'if [[ -z "$IMAGE_DATA" ]]; then' \ - ' TEXT=$(echo "$RESPONSE" | jq -r '"'"'.candidates[0].content.parts[] | select(.text) | .text // empty'"'"')' \ - ' if [[ -n "$TEXT" ]]; then' \ - ' echo "Model response (no image): $TEXT" >&2' \ - ' else' \ - ' echo "No image in response. Raw:" >&2' \ - ' echo "$RESPONSE" | jq . >&2' \ - ' fi' \ - ' exit 1' \ - 'fi' \ - '' \ - 'echo "$IMAGE_DATA" | base64 -d > "$OUTPUT"' \ - 'echo "Saved to ${OUTPUT}" >&2' \ - > /usr/local/bin/imagegen && chmod +x /usr/local/bin/imagegen - -WORKDIR /root diff --git a/fabro/workflows/imagegen/workflow.fabro b/fabro/workflows/imagegen/workflow.fabro deleted file mode 100644 index 12f9a2cd2..000000000 --- a/fabro/workflows/imagegen/workflow.fabro +++ /dev/null @@ -1,11 +0,0 @@ -digraph ImageGen { - graph [goal="A cute robot painting a landscape"] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - generate [label="Generate Image", prompt="Generate an image of: $goal\n\nRun: mkdir -p output && imagegen \"$goal\" output/generated.png\n\nThen verify the file exists with: ls -la output/generated.png"] - - start -> generate -> exit -} diff --git a/fabro/workflows/imagegen/workflow.toml b/fabro/workflows/imagegen/workflow.toml deleted file mode 100644 index b2505c847..000000000 --- a/fabro/workflows/imagegen/workflow.toml +++ /dev/null @@ -1,18 +0,0 @@ -version = 1 -graph = "workflow.fabro" - -[sandbox] -provider = "daytona" - -[sandbox.env] -GEMINI_API_KEY = "${env.GEMINI_API_KEY}" - -[assets] -include = ["output/**"] - -[sandbox.daytona.snapshot] -name = "imagegen-tools-v6" -cpu = 4 -memory = 8 -disk = 10 -dockerfile = { path = "Dockerfile.imagegen" } diff --git a/fabro/workflows/implement/prompts/simplify.md b/fabro/workflows/implement/prompts/simplify.md deleted file mode 100644 index 4b8b86473..000000000 --- a/fabro/workflows/implement/prompts/simplify.md +++ /dev/null @@ -1,46 +0,0 @@ -# Simplify: Code Review and Cleanup - -Review all changed files for reuse, quality, and efficiency. Fix any issues found. - -## Phase 1: Identify Changes - -Run git diff (or git diff HEAD if there are staged changes) to see what changed. If there are no git changes, review the most recently modified files that the user mentioned or that you edited earlier in this conversation. - -## Phase 2: Launch Three Review Agents in Parallel - -Use the Agent tool to launch all three agents concurrently in a single message. Pass each agent the full diff so it has the complete context. - -### Agent 1: Code Reuse Review - -For each change: - -1. Search for existing utilities and helpers that could replace newly written code. Use Grep to find similar patterns elsewhere in the codebase — common locations are utility directories, shared modules, and files adjacent to the changed ones. -2. Flag any new function that duplicates existing functionality. Suggest the existing function to use instead. -3. Flag any inline logic that could use an existing utility — hand-rolled string manipulation, manual path handling, custom environment checks, ad-hoc type guards, and similar patterns are common candidates. - -### Agent 2: Code Quality Review - -Review the same changes for hacky patterns: - -1. Redundant state: state that duplicates existing state, cached values that could be derived, observers/effects that could be direct calls -2. Parameter sprawl: adding new parameters to a function instead of generalizing or restructuring existing ones -3. Copy-paste with slight variation: near-duplicate code blocks that should be unified with a shared abstraction -4. Leaky abstractions: exposing internal details that should be encapsulated, or breaking existing abstraction boundaries -5. Stringly-typed code: using raw strings where constants, enums (string unions), or branded types already exist in the codebase - -### Agent 3: Efficiency Review - -Review the same changes for efficiency: - -1. Unnecessary work: redundant computations, repeated file reads, duplicate network/API calls, N+1 patterns -2. Missed concurrency: independent operations run sequentially when they could run in parallel -3. Hot-path bloat: new blocking work added to startup or per-request/per-render hot paths -4. Unnecessary existence checks: pre-checking file/resource existence before operating (TOCTOU anti-pattern) — operate directly and handle the error -5. Memory: unbounded data structures, missing cleanup, event listener leaks -6. Overly broad operations: reading entire files when only a portion is needed, loading all items when filtering for one - -## Phase 3: Fix Issues - -Wait for all three agents to complete. Aggregate their findings and fix each issue directly. If a finding is a false positive or not worth addressing, note it and move on — do not argue with the finding, just skip it. - -When done, briefly summarize what was fixed (or confirm the code was already clean). \ No newline at end of file diff --git a/fabro/workflows/implement/workflow.toml b/fabro/workflows/implement/workflow.toml index 19bb24bed..2ebc2a05d 100644 --- a/fabro/workflows/implement/workflow.toml +++ b/fabro/workflows/implement/workflow.toml @@ -1,15 +1 @@ -version = 1 -graph = "workflow.fabro" - -[sandbox] -provider = "local" -# provider = "daytona" - -# [sandbox.env] -# CARGO_INCREMENTAL = "0" - -# [sandbox.daytona.snapshot] -# name = "daytona-large" - -[sandbox.local] -worktree_mode = "always" \ No newline at end of file +version = 1 \ No newline at end of file diff --git a/fabro/workflows/playwright-demo/browse-prompt.md b/fabro/workflows/playwright-demo/browse-prompt.md deleted file mode 100644 index 4f63f1311..000000000 --- a/fabro/workflows/playwright-demo/browse-prompt.md +++ /dev/null @@ -1,14 +0,0 @@ -You have Playwright MCP tools available. Do the following: - -1. First, call the `browser_install` tool to ensure the browser is installed. -2. Create the screenshots directory: `mkdir -p /home/daytona/workspace/screenshots` -3. Use `browser_navigate` to go to https://news.ycombinator.com -4. Use `browser_snapshot` to capture the page content -5. Use `browser_take_screenshot` to save a screenshot to `/home/daytona/workspace/screenshots/01-hn-front-page.png` -6. Click on the first story link -7. Use `browser_take_screenshot` to save a screenshot to `/home/daytona/workspace/screenshots/02-first-story.png` -8. Use `browser_navigate_back` to go back to the front page -9. Click on the "new" link in the nav bar -10. Use `browser_take_screenshot` to save a screenshot to `/home/daytona/workspace/screenshots/03-newest.png` - -After capturing screenshots, write a brief summary of what you found on Hacker News today. diff --git a/fabro/workflows/playwright-demo/workflow.fabro b/fabro/workflows/playwright-demo/workflow.fabro deleted file mode 100644 index 3b31c25f4..000000000 --- a/fabro/workflows/playwright-demo/workflow.fabro +++ /dev/null @@ -1,13 +0,0 @@ -digraph PlaywrightDemo { - graph [goal="Use Playwright MCP to browse Hacker News and take screenshots", model_stylesheet="* { model: claude-sonnet-4-6;}"] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - install_browser [label="Install Browser", shape=parallelogram, script="npx playwright install --with-deps chromium 2>&1 || true"] - - browse [label="Browse Hacker News", prompt="@browse-prompt.md"] - - start -> install_browser -> browse -> exit -} diff --git a/fabro/workflows/playwright-demo/workflow.toml b/fabro/workflows/playwright-demo/workflow.toml deleted file mode 100644 index ea32034cc..000000000 --- a/fabro/workflows/playwright-demo/workflow.toml +++ /dev/null @@ -1,28 +0,0 @@ -version = 1 -goal = "Browse Hacker News with Playwright MCP and capture screenshots" -graph = "workflow.fabro" - -[llm] -model = "claude-sonnet-4-6" - -[sandbox] -provider = "daytona" - -[sandbox.daytona] -auto_stop_interval = 30 - -[sandbox.daytona.labels] -project = "playwright-demo" - -[sandbox.daytona.snapshot] -name = "daytona-medium" - -[assets] -include = ["screenshots/**"] - -[mcp_servers.playwright] -type = "sandbox" -command = ["npx", "@playwright/mcp@latest", "--port", "3100", "--headless", "--browser", "chromium"] -port = 3100 -startup_timeout_secs = 60 -tool_timeout_secs = 120 diff --git a/fabro/workflows/repl/workflow.fabro b/fabro/workflows/repl/workflow.fabro deleted file mode 100644 index e7984d4aa..000000000 --- a/fabro/workflows/repl/workflow.fabro +++ /dev/null @@ -1,14 +0,0 @@ -digraph REPL { - graph [goal="Interactive REPL: execute user prompts in a loop"] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - prompt [shape=hexagon, label="Enter prompt"] - agent [shape=tab, label="Agent", fidelity="summary:high", prompt="Execute the user's request. Their prompt is in the current context (human.gate.text) from the previous human gate. (Ignore diagnostic information about the pipeline and stages -- just talk normally to the user like a friendly assistant.)"] - - start -> prompt - prompt -> agent [freeform=true] - agent -> prompt -} diff --git a/fabro/workflows/repl/workflow.toml b/fabro/workflows/repl/workflow.toml deleted file mode 100644 index 717c72b75..000000000 --- a/fabro/workflows/repl/workflow.toml +++ /dev/null @@ -1,8 +0,0 @@ -version = 1 -graph = "workflow.fabro" - -[sandbox] -provider = "local" - -[sandbox.local] -worktree_mode = "never" diff --git a/fabro/workflows/solitaire/workflow.fabro b/fabro/workflows/solitaire/workflow.fabro deleted file mode 100644 index d30e3cbc7..000000000 --- a/fabro/workflows/solitaire/workflow.fabro +++ /dev/null @@ -1,170 +0,0 @@ -digraph BuildSolitaire { - graph [ - goal="Build a terminal-based solitaire (Klondike) game in Python", - rankdir=LR, - default_max_retry=3, - retry_target="impl_setup", - fallback_retry_target="impl_logic", - model_stylesheet=" - * { model: claude-sonnet;} - .hard { model: claude-opus; } - .verify { model: claude-haiku; } - " - ] - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - // Phase 0: Expand the goal into a detailed spec - expand_spec [ - label="Expand Spec", - prompt="Expand the goal into a detailed spec covering:\n\ - - Game rules and data structures (Card, Deck, Pile types)\n\ - - Terminal rendering approach (curses library)\n\ - - Input handling and move validation\n\ - - Win/loss detection\n\ - - UI layout\n\ - - Test strategy\n\n\ - Write the spec to spec.md." - ] - - // Phase 1: Project setup - impl_setup [ - label="Setup Project", - prompt="Read spec.md. Create the Python project structure:\n\ - pyproject.toml, src/ directory, tests/ directory, main.py stub.\n\ - Run: python3 -m py_compile src/*.py" - ] - - verify_setup [label="Verify Setup", class="verify", - prompt="Verify project setup: check pyproject.toml exists,\n\ - source directories exist, and files compile without errors.\n\ - Run: python3 -m py_compile src/*.py" - ] - - check_setup [shape=diamond, label="Setup OK?"] - - // Phase 2: Core data structures - impl_data [ - label="Data Structures", - prompt="Read spec.md. Implement Card, Deck, and Pile types\n\ - with unit tests. Run: python3 -m pytest tests/ -v" - ] - - verify_data [label="Verify Data", class="verify", - prompt="Verify data structures: build, run tests, check that\n\ - Card, Deck, and Pile types are defined and basic operations work.\n\ - Run: python3 -m pytest tests/ -v" - ] - - check_data [shape=diamond, label="Data OK?"] - - // Phase 3: Game logic (hardest phase) - impl_logic [ - label="Game Logic", - class="hard", - max_retries=2, - prompt="Read spec.md and the data structure files.\n\ - Implement Klondike rules: initial deal, move validation,\n\ - auto-complete detection, win condition, undo.\n\ - Write tests for legal/illegal moves, win detection, edge cases.\n\ - Run: python3 -m pytest tests/ -v" - ] - - verify_logic [label="Verify Logic", class="verify", - prompt="Verify game logic: run all tests, check move validation,\n\ - win detection, and undo.\n\ - Run: python3 -m pytest tests/ -v" - ] - - check_logic [shape=diamond, label="Logic OK?"] - - // Phase 4: Terminal UI - impl_ui [ - label="Terminal UI", - class="hard", - max_retries=2, - prompt="Read spec.md and game logic files.\n\ - Implement terminal UI with curses: card rendering (ASCII art),\n\ - board layout, keyboard input, move selection, help text.\n\ - Run: python3 -m pytest tests/ && python3 -m py_compile src/*.py" - ] - - verify_ui [label="Verify UI", class="verify", - prompt="Verify terminal UI: build, run tests, check that\n\ - renderer and input handler exist, game can be instantiated.\n\ - Run: python3 -m pytest tests/" - ] - - check_ui [shape=diamond, label="UI OK?"] - - // Phase 5: Integration - impl_integration [ - label="Integrate", - prompt="Wire up main.py to start the game loop.\n\ - Connect UI input to game logic. Add game over screen,\n\ - help menu, and README with build/run instructions.\n\ - Run: python3 -m pytest tests/" - ] - - verify_integration [label="Verify Integration", class="verify", - prompt="Verify integration: build, run all tests, check README\n\ - exists, verify the game starts without errors.\n\ - Run: python3 -m pytest tests/" - ] - - check_integration [shape=diamond, label="Integration OK?"] - - // Phase 6: Final review (goal gate) - review [ - label="Final Review", - class="hard", - goal_gate=true, - prompt="Read spec.md in full. Review the complete implementation:\n\ - - All Klondike rules correctly implemented\n\ - - Terminal UI works and is intuitive\n\ - - Tests comprehensive and passing\n\ - - README clear and accurate\n\n\ - Run the full test suite. Write a review to review.md.\n\ - Run: python3 -m pytest tests/ -v" - ] - - check_review [shape=diamond, label="Review OK?"] - - // Wiring: linear phases with verify-gate loops - start -> expand_spec -> impl_setup -> verify_setup -> check_setup - - check_setup -> impl_data [condition="outcome=success"] - check_setup -> impl_setup [condition="outcome=fail", label="Retry"] - check_setup -> impl_setup - - impl_data -> verify_data -> check_data - - check_data -> impl_logic [condition="outcome=success"] - check_data -> impl_data [condition="outcome=fail", label="Retry"] - check_data -> impl_data - - impl_logic -> verify_logic -> check_logic - - check_logic -> impl_ui [condition="outcome=success"] - check_logic -> impl_logic [condition="outcome=fail", label="Retry"] - check_logic -> impl_logic - - impl_ui -> verify_ui -> check_ui - - check_ui -> impl_integration [condition="outcome=success"] - check_ui -> impl_ui [condition="outcome=fail", label="Retry"] - check_ui -> impl_ui - - impl_integration -> verify_integration -> check_integration - - check_integration -> review [condition="outcome=success"] - check_integration -> impl_integration [condition="outcome=fail", label="Retry"] - check_integration -> impl_integration - - review -> check_review - - check_review -> exit [condition="outcome=success"] - check_review -> impl_ui [condition="outcome=fail", label="Fix"] - check_review -> impl_ui -} diff --git a/fabro/workflows/solitaire/workflow.toml b/fabro/workflows/solitaire/workflow.toml deleted file mode 100644 index a66507eb1..000000000 --- a/fabro/workflows/solitaire/workflow.toml +++ /dev/null @@ -1,2 +0,0 @@ -version = 1 -graph = "workflow.fabro" \ No newline at end of file diff --git a/fabro/workflows/spec/spec-dod-multimodel.fabro b/fabro/workflows/spec/spec-dod-multimodel.fabro deleted file mode 100644 index ac4fbbca9..000000000 --- a/fabro/workflows/spec/spec-dod-multimodel.fabro +++ /dev/null @@ -1,655 +0,0 @@ -digraph SpecDoDMultiModel { - graph [ - goal="Satisfy every Definition of Done checkbox across all three attractor specs (unified-llm-spec.md, coding-agent-loop-spec.md, attractor-spec.md). The implementation is in Rust under crates/. Do NOT modify the spec files. Only modify implementation code. Uses multi-model consensus: Opus 4.6 and GPT-5.2 compete on audits and planning, GPT-5.2-codex and Opus 4.6 alternate on implementation.", - default_max_retry="3", - retry_target="triage_merge", - default_fidelity="full", - model_stylesheet=" - * { model: claude-opus-4-6;} - .opus { model: claude-opus-4-6;reasoning_effort: high; } - .gpt { model: gpt-5.2; reasoning_effort: high; } - .codex { model: gpt-5.2-codex; reasoning_effort: high; } - .merge { model: claude-opus-4-6; reasoning_effort: high; } - " - ] - - start [shape=Mdiamond] - exit [shape=Msquare] - - /*======================================================================== - * PHASE 1 — Dual Independent Audits (interleaved, fidelity-isolated) - * - * Each spec is audited by both models before moving to the next spec. - * Audit nodes use fidelity="truncate" so they only see the graph goal - * and NOT each other's responses — prevents anchoring bias. - * Full responses are still stored as response. for later use. - *======================================================================*/ - - /* ---- LLM spec: both models ---- */ - - audit_llm_opus [ - label="Opus: Audit LLM DoD", - shape=box, - class="opus", - fidelity="truncate", - prompt="Read docs/specs/unified-llm-spec.md Section 8 (Definition of Done) in full. Then read every source file under crates/llm/src/. - -For EACH checkbox in sections 8.1 through 8.10, evaluate whether the current Rust implementation satisfies it. Be strict — a checkbox is only checked if the feature is fully implemented and would work correctly at runtime. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"unified-llm\", - \"model\": \"opus\", - \"sections\": { - \"8.1\": { \"title\": \"Core Infrastructure\", \"items\": [ {\"text\": \"...\", \"pass\": true/false, \"reason\": \"...\"} ] }, - ... - }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"8.2\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - audit_llm_gpt [ - label="GPT-5.2: Audit LLM DoD", - shape=box, - class="gpt", - fidelity="truncate", - prompt="Read docs/specs/unified-llm-spec.md Section 8 (Definition of Done) in full. Then read every source file under crates/llm/src/. - -For EACH checkbox in sections 8.1 through 8.10, evaluate whether the current Rust implementation satisfies it. Be strict — a checkbox is only checked if the feature is fully implemented and would work correctly at runtime. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"unified-llm\", - \"model\": \"gpt-5.2\", - \"sections\": { - \"8.1\": { \"title\": \"Core Infrastructure\", \"items\": [ {\"text\": \"...\", \"pass\": true/false, \"reason\": \"...\"} ] }, - ... - }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"8.2\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - /* ---- Agent spec: both models ---- */ - - audit_agent_opus [ - label="Opus: Audit Agent DoD", - shape=box, - class="opus", - fidelity="truncate", - prompt="Read docs/specs/coding-agent-loop-spec.md Section 9 (Definition of Done) in full. Then read every source file under crates/agent/. - -For EACH checkbox in sections 9.1 through 9.13, evaluate whether the current Rust implementation satisfies it. Be strict. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"coding-agent-loop\", - \"model\": \"opus\", - \"sections\": { ... }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"9.1\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - audit_agent_gpt [ - label="GPT-5.2: Audit Agent DoD", - shape=box, - class="gpt", - fidelity="truncate", - prompt="Read docs/specs/coding-agent-loop-spec.md Section 9 (Definition of Done) in full. Then read every source file under crates/agent/. - -For EACH checkbox in sections 9.1 through 9.13, evaluate whether the current Rust implementation satisfies it. Be strict. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"coding-agent-loop\", - \"model\": \"gpt-5.2\", - \"sections\": { ... }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"9.1\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - /* ---- Attractor spec: both models ---- */ - - audit_attractor_opus [ - label="Opus: Audit Attractor DoD", - shape=box, - class="opus", - fidelity="truncate", - prompt="Read docs/specs/attractor-spec.md Section 11 (Definition of Done) in full. Then read every source file under crates/attractor/. - -For EACH checkbox in sections 11.1 through 11.13, evaluate whether the current Rust implementation satisfies it. Be strict. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"attractor\", - \"model\": \"opus\", - \"sections\": { ... }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"11.1\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - audit_attractor_gpt [ - label="GPT-5.2: Audit Attractor DoD", - shape=box, - class="gpt", - fidelity="truncate", - prompt="Read docs/specs/attractor-spec.md Section 11 (Definition of Done) in full. Then read every source file under crates/attractor/. - -For EACH checkbox in sections 11.1 through 11.13, evaluate whether the current Rust implementation satisfies it. Be strict. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"attractor\", - \"model\": \"gpt-5.2\", - \"sections\": { ... }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"11.1\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - /*======================================================================== - * PHASE 2 — Cross-Critique (fidelity=full to see all response.* keys) - * - * Each model reviews the other's audit. Like megaplan's Compete phase: - * independent work first, then adversarial review. - *======================================================================*/ - - critique_by_gpt [ - label="GPT-5.2: Critique Opus Audits", - shape=box, - class="gpt", - fidelity="full", - prompt="You have all six audit reports available in context. The full outputs are in these context keys: - -OPUS AUDITS: -- response.audit_llm_opus — Opus's audit of unified-llm-spec.md Section 8 -- response.audit_agent_opus — Opus's audit of coding-agent-loop-spec.md Section 9 -- response.audit_attractor_opus — Opus's audit of attractor-spec.md Section 11 - -GPT AUDITS (your own): -- response.audit_llm_gpt — your audit of unified-llm-spec.md Section 8 -- response.audit_agent_gpt — your audit of coding-agent-loop-spec.md Section 9 -- response.audit_attractor_gpt — your audit of attractor-spec.md Section 11 - -Compare them item by item. For every DoD checkbox where the two models DISAGREE (one says pass, the other says fail), re-read the relevant spec section and source file to determine who is correct. - -Also identify items that one model flagged but the other missed entirely. - -Respond with JSON (not by writing out a file): -{ - \"agreements\": { \"both_pass\": N, \"both_fail\": N }, - \"disagreements\": [ - { - \"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", - \"opus_says\": \"pass|fail\", \"gpt_says\": \"pass|fail\", - \"verdict\": \"pass|fail\", - \"reasoning\": \"...\" - } - ], - \"missed_by_opus\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\"} ], - \"missed_by_gpt\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be rigorous. When in doubt, fail the checkbox — strictness prevents false confidence." - ] - - critique_by_opus [ - label="Opus: Critique GPT-5.2 Audits", - shape=box, - class="opus", - fidelity="full", - prompt="You have all six audit reports available in context. The full outputs are in these context keys: - -GPT AUDITS: -- response.audit_llm_gpt — GPT-5.2's audit of unified-llm-spec.md Section 8 -- response.audit_agent_gpt — GPT-5.2's audit of coding-agent-loop-spec.md Section 9 -- response.audit_attractor_gpt — GPT-5.2's audit of attractor-spec.md Section 11 - -OPUS AUDITS (your own): -- response.audit_llm_opus — your audit of unified-llm-spec.md Section 8 -- response.audit_agent_opus — your audit of coding-agent-loop-spec.md Section 9 -- response.audit_attractor_opus — your audit of attractor-spec.md Section 11 - -Compare them item by item. For every DoD checkbox where the two models DISAGREE (one says pass, the other says fail), re-read the relevant spec section and source file to determine who is correct. - -Also identify items that one model flagged but the other missed entirely. - -Respond with JSON (not by writing out a file): -{ - \"agreements\": { \"both_pass\": N, \"both_fail\": N }, - \"disagreements\": [ - { - \"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", - \"opus_says\": \"pass|fail\", \"gpt_says\": \"pass|fail\", - \"verdict\": \"pass|fail\", - \"reasoning\": \"...\" - } - ], - \"missed_by_opus\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\"} ], - \"missed_by_gpt\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be rigorous. When in doubt, fail the checkbox — strictness prevents false confidence." - ] - - /*======================================================================== - * PHASE 3 — Audit Consensus - * - * Merge all findings into a single agreed-upon truth. - * Like megaplan's Merge phase: best ideas from both, disagreements resolved. - *======================================================================*/ - - audit_consensus [ - label="Merge: Audit Consensus", - shape=box, - class="merge", - fidelity="full", - prompt="You have all prior audit and critique outputs in context. The key inputs are: - -SIX AUDIT REPORTS (context keys response.audit_llm_opus, response.audit_agent_opus, response.audit_attractor_opus, response.audit_llm_gpt, response.audit_agent_gpt, response.audit_attractor_gpt) - -TWO CROSS-CRITIQUES (context keys response.critique_by_gpt, response.critique_by_opus) - -Produce a single definitive audit result. Resolution rules: -1. If BOTH models agree a checkbox passes → pass -2. If BOTH models agree a checkbox fails → fail -3. If they DISAGREE, use the cross-critique verdicts. If the critiques also disagree, re-read the spec and code yourself and make the call. When in doubt, fail it. -4. Include any items that were missed by one model but caught by the other. - -Respond with JSON (not by writing out a file): -{ - \"spec_results\": { - \"unified-llm\": { \"total\": N, \"passed\": M, \"failed\": K, \"failed_items\": [...] }, - \"coding-agent-loop\": { ... }, - \"attractor\": { ... } - }, - \"consensus_total\": N, - \"consensus_passed\": M, - \"consensus_failed\": K, - \"disagreements_resolved\": N, - \"all_failed_items\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\", \"agreed_by\": \"both|opus_only|gpt_only|resolved\"} ] -}" - ] - - /*======================================================================== - * PHASE 4 — Dual Triage - * - * Both models independently prioritize the failures, then merge. - * Different models weight different risks differently — consensus is stronger. - *======================================================================*/ - - triage_opus [ - label="Opus: Triage & Prioritize", - shape=box, - class="opus", - fidelity="full", - prompt="The consensus audit results are in context key response.audit_consensus. Parse the all_failed_items list from that JSON and triage every failing DoD checkbox. - -Group failures into: -1. IMPLEMENTABLE — can be fixed by writing/modifying Rust code (functions, handlers, logic) -2. STRUCTURAL — requires new files, new modules, or significant architecture changes -3. DEFERRED — requires external resources (real API keys, network access, interactive testing) that cannot be done in a code-only pass - -For each IMPLEMENTABLE item, identify the exact file(s) to modify and briefly describe the fix. Rank them by impact (most important first). - -Respond with JSON (not by writing out a file): -{ - \"model\": \"opus\", - \"total_failing\": N, - \"implementable\": [ {\"rank\": 1, \"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"files\": [\"...\"], \"fix\": \"...\", \"impact\": \"high|medium|low\"} ], - \"structural\": [ ... ], - \"deferred\": [ ... ] -}" - ] - - triage_gpt [ - label="GPT-5.2: Triage & Prioritize", - shape=box, - class="gpt", - fidelity="full", - prompt="The consensus audit results are in context key response.audit_consensus. Parse the all_failed_items list from that JSON and triage every failing DoD checkbox. - -Group failures into: -1. IMPLEMENTABLE — can be fixed by writing/modifying Rust code (functions, handlers, logic) -2. STRUCTURAL — requires new files, new modules, or significant architecture changes -3. DEFERRED — requires external resources (real API keys, network access, interactive testing) that cannot be done in a code-only pass - -For each IMPLEMENTABLE item, identify the exact file(s) to modify and briefly describe the fix. Rank them by impact (most important first). - -Respond with JSON (not by writing out a file): -{ - \"model\": \"gpt-5.2\", - \"total_failing\": N, - \"implementable\": [ {\"rank\": 1, \"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"files\": [\"...\"], \"fix\": \"...\", \"impact\": \"high|medium|low\"} ], - \"structural\": [ ... ], - \"deferred\": [ ... ] -}" - ] - - triage_merge [ - label="Merge: Triage Consensus", - shape=box, - class="merge", - fidelity="full", - prompt="You have two triage reports in context: response.triage_opus and response.triage_gpt. Merge them into a single prioritized work plan. - -Resolution rules: -1. If both models classify an item the same way (IMPLEMENTABLE/STRUCTURAL/DEFERRED) → keep that classification -2. If they disagree on classification → take the MORE ACTIONABLE classification (prefer IMPLEMENTABLE over STRUCTURAL over DEFERRED) -3. For ranking, average the ranks and re-sort. If one model identified files/fixes the other didn't, include all suggestions. -4. Deduplicate items that both models identified. - -Respond with JSON (not by writing out a file): -{ - \"total_failing\": N, - \"implementable\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"files\": [\"...\"], \"fix\": \"...\", \"opus_rank\": N, \"gpt_rank\": N} ], - \"structural\": [ ... ], - \"deferred\": [ ... ], - \"classification_disagreements\": N, - \"verdict\": \"all_clear\" | \"has_fixes\" | \"only_deferred\" -} - -If total_failing == 0 or verdict == \"only_deferred\", set preferred_next_label to \"Done\". -Otherwise set preferred_next_label to \"Fix\"." - ] - - /*======================================================================== - * PHASE 5 — Multi-Model Implementation - * - * Codex implements, Opus reviews and corrects, Codex validates. - * Like megaplan's draft→critique→merge but for code. - *======================================================================*/ - - fix_codex [ - label="Codex: Implement Fixes", - shape=box, - class="codex", - goal_gate=true, - fidelity="full", - prompt="The merged triage report is in context key response.triage_merge. It contains a prioritized list of IMPLEMENTABLE DoD failures. - -Pick the top 5 most impactful items (or all if fewer than 5) and implement the fixes in Rust. - -Begin by making sure the build is green with `cargo test` - -For each fix: -1. Read the relevant source file(s) -2. Make the minimal change needed to satisfy the DoD checkbox -3. Write the modified file(s) -- update tests as needed -4. Verify the fix and the tests pass (`cargo test`) - -Constraints: -- Do NOT modify any files under docs/specs/ (those are the specs) -- Do NOT add external dependencies beyond what's already used -- Keep changes minimal and focused — one checkbox per fix -- Maintain the existing code style - -Respond with JSON (not by writing out a file): -{ - \"model\": \"codex\", - \"fixes_applied\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"files_changed\": [\"...\"], \"description\": \"...\"} ], - \"count\": N, - \"remaining_implementable\": M -}" - ] - - review_fix_opus [ - label="Opus: Review & Fix", - shape=box, - class="opus", - goal_gate=true, - fidelity="full", - prompt="Codex just implemented a batch of fixes. Its report is in context key response.fix_codex. - -PART A — Review Codex's work: -1. Read every file that Codex modified (check the files_changed lists in response.fix_codex) -2. For each fix, verify it actually satisfies the DoD checkbox it claims to address -3. Check for: correctness, edge cases, style consistency, missing error handling -4. If a fix is wrong or incomplete, rewrite it correctly - -PART B — Implement additional fixes: -5. From the remaining IMPLEMENTABLE items (see response.triage_merge for the full list), pick up to 5 more and implement them -6. Follow the same constraints as Codex (Rust, no new deps, minimal changes) - -Respond with JSON (not by writing out a file): -{ - \"model\": \"opus\", - \"codex_fixes_reviewed\": N, - \"codex_fixes_correct\": N, - \"codex_fixes_corrected\": [ {\"spec\": \"...\", \"section\": \"...\", \"issue\": \"...\", \"correction\": \"...\"} ], - \"additional_fixes\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"files_changed\": [\"...\"], \"description\": \"...\"} ], - \"total_fixes_this_round\": N, - \"remaining_implementable\": M -}" - ] - - review_codex [ - label="Codex: Validate All Changes", - shape=box, - class="codex", - fidelity="full", - prompt="Opus reviewed your fixes and implemented additional ones. Its report is in context key response.review_fix_opus. Your original report is in response.fix_codex. - -Validate the full set of changes from this round: -1. Read every file modified in this round (check files_changed in both response.fix_codex and response.review_fix_opus) -2. Check each change for correctness: does it satisfy its DoD checkbox? -3. Check for regressions: did any fix break something else? -4. Check for consistency: do all the changes work together? - -Respond with JSON (not by writing out a file): -{ - \"model\": \"codex\", - \"total_changes_reviewed\": N, - \"all_correct\": true/false, - \"issues_found\": [ {\"file\": \"...\", \"issue\": \"...\", \"severity\": \"critical|minor\"} ], - \"remaining_implementable\": M -} - -If issues_found contains any critical items, set preferred_next_label to \"More fixes needed\". -If remaining_implementable > 0 and no critical issues, set preferred_next_label to \"More fixes needed\". -Otherwise set preferred_next_label to \"Ready for build\"." - ] - - /*======================================================================== - * PHASE 6 — Build Verification - *======================================================================*/ - - build_check [ - label="Build & Smoke Test", - shape=parallelogram, - script="cd /Users/bhelmkamp/p/brynary/attractor-rust && cargo build 2>&1 && echo '---BUILD OK---' && ./target/debug/attractor run --dry-run test/simple.dot 2>&1 && ./target/debug/attractor run --dry-run test/branching.dot 2>&1 && ./target/debug/attractor run --dry-run test/styled.dot 2>&1 && ./target/debug/attractor run --dry-run test/parallel.dot 2>&1 && ./target/debug/attractor run --dry-run test/conditions.dot 2>&1 && echo '---ALL TESTS PASSED---'", - timeout="120s" - ] - - build_fix [ - label="Opus: Fix Build Errors", - shape=box, - class="opus", - fidelity="full", - prompt="The build or smoke tests failed. The build output is in context key command.output. Diagnose the compilation errors or test failures and fix them. - -Read the relevant source files, identify the issue, and write corrected versions. Common issues: -- Missing includes -- Type mismatches -- Undeclared functions - -Output the fixes applied and ensure the code will compile cleanly with: cargo build" - ] - - /*======================================================================== - * PHASE 7 — Dual Final Audit (interleaved, fidelity-isolated) - * - * Both models independently verify the fixes worked. - * If either model finds a remaining failure, it counts. - *======================================================================*/ - - final_audit_opus [ - label="Opus: Final Verification", - shape=box, - class="opus", - fidelity="full", - prompt="This is a verification pass. The items that were previously failing are listed in context key response.triage_merge (the implementable list). The fixes applied are in response.fix_codex and response.review_fix_opus. - -Re-read all three spec DoD sections: -- docs/specs/unified-llm-spec.md Section 8 -- docs/specs/coding-agent-loop-spec.md Section 9 -- docs/specs/attractor-spec.md Section 11 - -And re-read the implementation files that were changed in this iteration. - -Check ONLY the items that were previously failing. Have they been fixed? - -Respond with JSON (not by writing out a file): -{ - \"model\": \"opus\", - \"verified_fixed\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\"} ], - \"still_failing\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\"} ], - \"newly_broken\": [ ... ], - \"remaining_total\": N -}" - ] - - final_audit_gpt [ - label="GPT-5.2: Final Verification", - shape=box, - class="gpt", - fidelity="full", - prompt="This is a verification pass. The items that were previously failing are listed in context key response.triage_merge (the implementable list). The fixes applied are in response.fix_codex and response.review_fix_opus. - -Re-read all three spec DoD sections: -- docs/specs/unified-llm-spec.md Section 8 -- docs/specs/coding-agent-loop-spec.md Section 9 -- docs/specs/attractor-spec.md Section 11 - -And re-read the implementation files that were changed in this iteration. - -Check ONLY the items that were previously failing. Have they been fixed? - -Respond with JSON (not by writing out a file): -{ - \"model\": \"gpt-5.2\", - \"verified_fixed\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\"} ], - \"still_failing\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\"} ], - \"newly_broken\": [ ... ], - \"remaining_total\": N -}" - ] - - final_consensus [ - label="Merge: Final Consensus", - shape=box, - class="merge", - fidelity="full", - prompt="You have final audit results from both models in context: response.final_audit_opus and response.final_audit_gpt. Merge them into a definitive status. - -Rules: -1. An item is only \"verified_fixed\" if BOTH models agree it's fixed -2. If EITHER model says an item is still failing, it counts as still failing -3. Union all newly_broken items from both models - -Respond with JSON (not by writing out a file): -{ - \"verified_fixed\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"agreed_by\": \"both|opus_only|gpt_only\"} ], - \"still_failing\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"flagged_by\": \"both|opus_only|gpt_only\", \"reason\": \"...\"} ], - \"newly_broken\": [ ... ], - \"remaining_total\": N -} - -If remaining_total == 0 (ignoring DEFERRED items), set preferred_next_label to \"Complete\". -Otherwise set preferred_next_label to \"More work needed\"." - ] - - /*======================================================================== - * PHASE 8 — Human Gate - *======================================================================*/ - - review_gate [ - label="A) Accept & finish\nB) Push for another round", - shape=hexagon - ] - - /*======================================================================== - * EDGES — Serial interleaved chain - * - * The engine is single-path, so we interleave model audits per-spec. - * fidelity="truncate" on audit nodes prevents cross-model anchoring. - *======================================================================*/ - - /* Phase 1: Interleaved audits (Opus then GPT for each spec) */ - start -> audit_llm_opus - audit_llm_opus -> audit_llm_gpt - audit_llm_gpt -> audit_agent_opus - audit_agent_opus -> audit_agent_gpt - audit_agent_gpt -> audit_attractor_opus - audit_attractor_opus -> audit_attractor_gpt - - /* Phase 2: Cross-critique (now sequential — GPT critiques Opus, then Opus critiques GPT) */ - audit_attractor_gpt -> critique_by_gpt - critique_by_gpt -> critique_by_opus - - /* Phase 3: Consensus */ - critique_by_opus -> audit_consensus - - /* Phase 4: Dual triage (sequential — Opus then GPT then merge) */ - audit_consensus -> triage_opus - triage_opus -> triage_gpt - triage_gpt -> triage_merge - - /* Triage decision */ - triage_merge -> exit [label="Done", condition="preferred_label=Done"] - triage_merge -> fix_codex [label="Fix", condition="preferred_label=Fix", weight=10] - triage_merge -> exit [label="Only deferred remain"] - - /* Phase 5: Multi-model implementation (sequential alternation) */ - fix_codex -> review_fix_opus - review_fix_opus -> review_codex - - /* Implementation loop */ - review_codex -> fix_codex [label="More fixes needed", condition="preferred_label=More fixes needed", loop_restart=true] - review_codex -> build_check [label="Ready for build", condition="preferred_label=Ready for build"] - - /* Phase 6: Build */ - build_check -> final_audit_opus [label="Build OK", condition="outcome=success"] - build_check -> build_fix [label="Build failed", condition="outcome=fail"] - build_fix -> build_check - - /* Phase 7: Dual final audit (sequential — Opus then GPT then consensus) */ - final_audit_opus -> final_audit_gpt - final_audit_gpt -> final_consensus - - /* Final decision */ - final_consensus -> review_gate [label="Complete", condition="preferred_label=Complete"] - final_consensus -> triage_merge [label="More work needed", condition="preferred_label=More work needed"] - - /* Phase 8: Human gate */ - review_gate -> exit [label="A) Accept"] - review_gate -> triage_merge [label="B) Another round"] -} diff --git a/fabro/workflows/spec/spec-dod-multimodel.png b/fabro/workflows/spec/spec-dod-multimodel.png deleted file mode 100644 index 15c2116c4b008b8dd930530e3782933e1b7846fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154520 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 G!u|(b1XZ&D diff --git a/fabro/workflows/spec/spec-dod.fabro b/fabro/workflows/spec/spec-dod.fabro deleted file mode 100644 index d3311e20c..000000000 --- a/fabro/workflows/spec/spec-dod.fabro +++ /dev/null @@ -1,254 +0,0 @@ -digraph SpecDoD { - graph [ - goal="Satisfy every Definition of Done checkbox across all three attractor specs (unified-llm-spec.md, coding-agent-loop-spec.md, attractor-spec.md). The implementation is in Rust under crates/. Do NOT modify the spec files. Only modify implementation code.", - default_max_retry="3", - retry_target="triage", - model_stylesheet=" - * { model: claude-opus-4-6;} - .audit { reasoning_effort: high; } - .fix { model: claude-opus-4-6; reasoning_effort: high; } - #final_audit { reasoning_effort: high; } - " - ] - - start [shape=Mdiamond] - exit [shape=Msquare] - - /*------------------------------------------------------------------------ - * Phase 1: Baseline audit — read every DoD checkbox, check the code - *----------------------------------------------------------------------*/ - - audit_llm [ - label="Audit: Unified LLM Client DoD", - shape=box, - class="audit", - prompt="Read docs/specs/unified-llm-spec.md Section 8 (Definition of Done) in full. Then read every source file under crates/llm/src/. - -For EACH checkbox in sections 8.1 through 8.10, evaluate whether the current Rust implementation satisfies it. Be strict — a checkbox is only checked if the feature is fully implemented and would work correctly at runtime. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"unified-llm\", - \"sections\": { - \"8.1\": { \"title\": \"Core Infrastructure\", \"items\": [ {\"text\": \"...\", \"pass\": true/false, \"reason\": \"...\"} ] }, - ... - }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"8.2\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - audit_agent [ - label="Audit: Coding Agent Loop DoD", - shape=box, - class="audit", - prompt="Read docs/specs/coding-agent-loop-spec.md Section 9 (Definition of Done) in full. Then read every source file under crates/agent/. - -For EACH checkbox in sections 9.1 through 9.13, evaluate whether the current Rust implementation satisfies it. Be strict. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"coding-agent-loop\", - \"sections\": { ... }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"9.1\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - audit_attractor [ - label="Audit: Attractor Pipeline DoD", - shape=box, - class="audit", - prompt="Read docs/specs/attractor-spec.md Section 11 (Definition of Done) in full. Then read every source file under crates/attractor/. - -For EACH checkbox in sections 11.1 through 11.13, evaluate whether the current Rust implementation satisfies it. Be strict. - -Respond with ONLY a JSON object (no prose) -- don't write it out as a file: -{ - \"spec\": \"attractor\", - \"sections\": { ... }, - \"total\": N, - \"passed\": M, - \"failed\": K, - \"failed_items\": [ {\"section\": \"11.1\", \"text\": \"...\", \"reason\": \"...\"} ] -} - -Be thorough. Check every single checkbox." - ] - - /*------------------------------------------------------------------------ - * Phase 2: Triage — merge results, prioritize failures, decide next step - *----------------------------------------------------------------------*/ - - triage [ - label="Triage & Prioritize", - shape=box, - prompt="You have three audit reports in context (from audit_llm, audit_agent, audit_attractor). Merge them into a single prioritized list of ALL failing DoD checkboxes. - -Group failures into: -1. IMPLEMENTABLE — can be fixed by writing/modifying Rust code (functions, handlers, logic) -2. STRUCTURAL — requires new files, new modules, or significant architecture changes -3. DEFERRED — requires external resources (real API keys, network access, interactive testing) that cannot be done in a code-only pass - -For each IMPLEMENTABLE item, identify the exact file(s) to modify and briefly describe the fix. - -Respond with JSON (not by writing out a file): -{ - \"total_failing\": N, - \"implementable\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"files\": [\"...\"], \"fix\": \"...\"} ], - \"structural\": [ ... ], - \"deferred\": [ ... ], - \"verdict\": \"all_clear\" | \"has_fixes\" | \"only_deferred\" -} - -If total_failing == 0 or verdict == \"only_deferred\", set preferred_next_label to \"Done\". -Otherwise set preferred_next_label to \"Fix\"." - ] - - /*------------------------------------------------------------------------ - * Phase 3: Fix — implement the highest-priority fixes - *----------------------------------------------------------------------*/ - - fix_batch [ - label="Implement Fixes", - shape=box, - class="fix", - goal_gate=true, - prompt="The triage report identified IMPLEMENTABLE DoD failures. Pick the top 5 most impactful items (or all if fewer than 5) and implement the fixes in Rust. - -Begin by making sure the build is green with `cargo test` - -For each fix: -1. Read the relevant source file(s) -2. Make the minimal change needed to satisfy the DoD checkbox -3. Write the modified file(s) -- update tests as needed -4. Verify the fix and the tests pass (`cargo test`) - -Constraints: -- Do NOT modify any files under docs/specs/ (those are the specs) -- Do NOT add external dependencies beyond what's already used -- Keep changes minimal and focused — one checkbox per fix -- Maintain the existing code style - -Respond with JSON (not by writing out a file): -{ - \"fixes_applied\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"files_changed\": [\"...\"], \"description\": \"...\"} ], - \"count\": N, - \"remaining_implementable\": M -} - -If remaining_implementable > 0, set preferred_next_label to \"More fixes needed\". -Otherwise set preferred_next_label to \"Re-audit\"." - ] - - /*------------------------------------------------------------------------ - * Phase 4: Build verification - *----------------------------------------------------------------------*/ - - build_check [ - label="Build & Smoke Test", - shape=parallelogram, - script="cd /Users/bhelmkamp/p/brynary/attractor-rust && cargo build 2>&1 && echo '---BUILD OK---' && ./target/debug/attractor run --dry-run test/simple.dot 2>&1 && ./target/debug/attractor run --dry-run test/branching.dot 2>&1 && ./target/debug/attractor run --dry-run test/styled.dot 2>&1 && ./target/debug/attractor run --dry-run test/parallel.dot 2>&1 && ./target/debug/attractor run --dry-run test/conditions.dot 2>&1 && echo '---ALL TESTS PASSED---'", - timeout="120s" - ] - - /*------------------------------------------------------------------------ - * Phase 5: Build failure recovery - *----------------------------------------------------------------------*/ - - build_fix [ - label="Fix Build Errors", - shape=box, - class="fix", - prompt="The build or smoke tests failed. Read the build output from context (command.output key). Diagnose the compilation errors or test failures and fix them. - -Read the relevant source files, identify the issue, and write corrected versions. Common issues: -- Missing includes -- Type mismatches -- Undeclared functions - -Output the fixes applied and ensure the code will compile cleanly with: cargo build" - ] - - /*------------------------------------------------------------------------ - * Phase 6: Final audit to confirm fixes worked - *----------------------------------------------------------------------*/ - - final_audit [ - label="Final Verification Audit", - shape=box, - prompt="This is a verification pass. Re-read all three spec DoD sections: -- docs/specs/unified-llm-spec.md Section 8 -- docs/specs/coding-agent-loop-spec.md Section 9 -- docs/specs/attractor-spec.md Section 11 - -And re-read the implementation files that were changed in this iteration. - -Check ONLY the items that were previously failing. Have they been fixed? - -Respond with JSON (not by writing out a file): -{ - \"verified_fixed\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\"} ], - \"still_failing\": [ {\"spec\": \"...\", \"section\": \"...\", \"text\": \"...\", \"reason\": \"...\"} ], - \"newly_broken\": [ ... ], - \"remaining_total\": N -} - -If remaining_total == 0 (ignoring DEFERRED items), set preferred_next_label to \"Complete\". -Otherwise set preferred_next_label to \"More work needed\"." - ] - - /*------------------------------------------------------------------------ - * Phase 7: Human gate — confirm completion or push for another round - *----------------------------------------------------------------------*/ - - review_gate [ - label="A) Accept & finish\nB) Push for another round", - shape=hexagon - ] - - /*------------------------------------------------------------------------ - * Edges - *----------------------------------------------------------------------*/ - - start -> audit_llm - - /* Sequential audit chain */ - audit_llm -> audit_agent - audit_agent -> audit_attractor - audit_attractor -> triage - - /* Triage decision */ - triage -> exit [label="Done", condition="preferred_label=Done"] - triage -> fix_batch [label="Fix", condition="preferred_label=Fix", weight=10] - triage -> exit [label="Only deferred remain"] - - /* Fix -> build check */ - fix_batch -> build_check - - /* Build check outcomes */ - build_check -> final_audit [label="Build OK", condition="outcome=success"] - build_check -> build_fix [label="Build failed", condition="outcome=fail"] - - /* Build fix loops back to build check */ - build_fix -> build_check - - /* Fix batch can loop for more fixes */ - fix_batch -> fix_batch [label="More fixes needed", condition="preferred_label=More fixes needed", loop_restart=true] - - /* Final audit outcomes */ - final_audit -> review_gate [label="Complete", condition="preferred_label=Complete"] - final_audit -> triage [label="More work needed", condition="preferred_label=More work needed"] - - /* Human review gate */ - review_gate -> exit [label="A) Accept"] - review_gate -> triage [label="B) Another round"] -} diff --git a/fabro/workflows/vnc-demo/Dockerfile.vnc b/fabro/workflows/vnc-demo/Dockerfile.vnc deleted file mode 100644 index 596006376..000000000 --- a/fabro/workflows/vnc-demo/Dockerfile.vnc +++ /dev/null @@ -1,27 +0,0 @@ -FROM node:22-bookworm-slim - -RUN apt-get update && apt-get install -y --no-install-recommends \ - # VNC & desktop - xvfb \ - xfce4 \ - xfce4-terminal \ - x11vnc \ - novnc \ - dbus-x11 \ - # X11 libraries - libx11-6 \ - libxrandr2 \ - libxext6 \ - libxrender1 \ - libxfixes3 \ - libxss1 \ - libxtst6 \ - libxi6 \ - # Utilities - curl \ - git \ - ca-certificates \ - procps \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /root diff --git a/fabro/workflows/vnc-demo/browse-prompt.md b/fabro/workflows/vnc-demo/browse-prompt.md deleted file mode 100644 index 91e262a8b..000000000 --- a/fabro/workflows/vnc-demo/browse-prompt.md +++ /dev/null @@ -1,16 +0,0 @@ -You have Playwright MCP tools available running in headed mode — a user is watching via VNC. - -1. Call the `browser_install` tool to ensure the browser is installed. -2. Use `browser_navigate` to go to https://news.ycombinator.com -3. Use `browser_snapshot` to capture the page content -4. Use `browser_take_screenshot` to save a screenshot to `/root/output/01-hn-front-page.png` -5. Click on the first story link -6. Wait a moment, then use `browser_take_screenshot` to save to `/root/output/02-first-story.png` -7. Use `browser_navigate_back` to go back -8. Click on the "new" link in the nav bar -9. Use `browser_take_screenshot` to save to `/root/output/03-newest.png` -10. Navigate to https://en.wikipedia.org/wiki/Golden_Gate_Bridge -11. Use `browser_take_screenshot` to save to `/root/output/04-golden-gate.png` -12. Scroll down to see images, then take another screenshot to `/root/output/05-golden-gate-scrolled.png` - -Take your time between actions so the VNC viewer can see what's happening. Write a brief summary of what you found. diff --git a/fabro/workflows/vnc-demo/workflow.fabro b/fabro/workflows/vnc-demo/workflow.fabro deleted file mode 100644 index 03a2950ac..000000000 --- a/fabro/workflows/vnc-demo/workflow.fabro +++ /dev/null @@ -1,16 +0,0 @@ -digraph VNCDemo { - graph [ - goal="Browse the web with Playwright while user watches via VNC", - model_stylesheet="* { model: claude-sonnet-4-6;}" - ] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - start_vnc [label="Start VNC", shape=parallelogram, script="setsid sh -c 'Xvfb :99 -screen 0 1920x1080x24 &\nsleep 1\nexport DISPLAY=:99\nstartxfce4 &\nsleep 1\nx11vnc -display :99 -forever -nopw -rfbport 5900' /dev/null 2>&1 &\nsleep 3\nmkdir -p /root/output\necho 'VNC ready on display :99'"] - - browse [label="Browse the Web", prompt="@browse-prompt.md"] - - start -> start_vnc -> browse -> exit -} diff --git a/fabro/workflows/vnc-demo/workflow.toml b/fabro/workflows/vnc-demo/workflow.toml deleted file mode 100644 index 917290bf7..000000000 --- a/fabro/workflows/vnc-demo/workflow.toml +++ /dev/null @@ -1,33 +0,0 @@ -version = 1 -goal = "Browse the web with Playwright while user watches via VNC" -graph = "workflow.fabro" - -[llm] -model = "claude-sonnet-4-6" - -[sandbox] -provider = "daytona" - -[sandbox.daytona] -auto_stop_interval = 30 - -[sandbox.daytona.labels] -project = "vnc-demo" - -[sandbox.daytona.snapshot] -name = "vnc-demo-v1" -cpu = 4 -memory = 8 -disk = 10 -dockerfile = { path = "Dockerfile.vnc" } - -[assets] -include = ["output/**"] - -[mcp_servers.playwright] -type = "sandbox" -command = ["npx", "@playwright/mcp@latest", "--port", "3100", "--no-headless", "--browser", "chromium"] -port = 3100 -startup_timeout_secs = 60 -tool_timeout_secs = 120 -env = { DISPLAY = ":99" } diff --git a/fabro/workflows/web-game-demo/verify-prompt.md b/fabro/workflows/web-game-demo/verify-prompt.md deleted file mode 100644 index 12edc2343..000000000 --- a/fabro/workflows/web-game-demo/verify-prompt.md +++ /dev/null @@ -1,14 +0,0 @@ -Your task is to verify that the develop-web-game skill is properly set up. - -1. Call the `browser_install` Playwright MCP tool to ensure the browser is installed. -2. Call the `use_skill` tool with skill_name "develop-web-game" to load the skill instructions. -3. Read the skill instructions and identify the asset file paths referenced in them. -4. Verify the following files exist and are readable: - - `skills/develop-web-game/scripts/web_game_playwright_client.js` - - `skills/develop-web-game/references/action_payloads.json` - - `skills/develop-web-game/SKILL.md` -5. Read the contents of `action_payloads.json` and confirm it contains valid JSON with a "steps" array. -6. Read the first 10 lines of `web_game_playwright_client.js` and confirm it imports playwright. -7. Write a summary report to `output/skill-verification.md` with the results. - -Report success or failure for each check. diff --git a/fabro/workflows/web-game-demo/workflow.fabro b/fabro/workflows/web-game-demo/workflow.fabro deleted file mode 100644 index c5e18beff..000000000 --- a/fabro/workflows/web-game-demo/workflow.fabro +++ /dev/null @@ -1,14 +0,0 @@ -digraph WebGameDemo { - graph [ - goal="Verify develop-web-game skill setup with asset files", - model_stylesheet="* { model: claude-sonnet-4-6;}" - ] - rankdir=LR - - start [shape=Mdiamond, label="Start"] - exit [shape=Msquare, label="Exit"] - - verify_skill [label="Verify Skill Setup", prompt="@verify-prompt.md"] - - start -> verify_skill -> exit -} diff --git a/fabro/workflows/web-game-demo/workflow.toml b/fabro/workflows/web-game-demo/workflow.toml deleted file mode 100644 index e09936cbc..000000000 --- a/fabro/workflows/web-game-demo/workflow.toml +++ /dev/null @@ -1,28 +0,0 @@ -version = 1 -goal = "Verify the develop-web-game skill is properly set up with its asset files" -graph = "workflow.fabro" - -[llm] -model = "claude-sonnet-4-6" - -[sandbox] -provider = "daytona" - -[sandbox.daytona] -auto_stop_interval = 30 - -[sandbox.daytona.labels] -project = "web-game-demo" - -[sandbox.daytona.snapshot] -name = "daytona-medium" - -[assets] -include = ["output/**"] - -[mcp_servers.playwright] -type = "sandbox" -command = ["npx", "@playwright/mcp@latest", "--port", "3100", "--headless", "--browser", "chromium"] -port = 3100 -startup_timeout_secs = 60 -tool_timeout_secs = 120