fabro/docs/superpowers/plans
Bryan Helmkamp 2ba04be181
feat(template): add source-aware diagnostics (#292)
## Summary

Template failures from `fabro run` and structural warnings from `fabro
validate` now preserve source provenance through rendering, workflow
transforms, API serialization, and CLI display. Diagnostics can point at
the actual workflow, import, or prompt file with node/attribute context
instead of surfacing MiniJinja's generic `<string>` source.

## What Changed

- Added named MiniJinja render APIs plus miette-aware `TemplateError`
metadata for source names, source text, spans, and labels.
- Reworked workflow template expansion so inline attributes, imported
workflows, and `@prompt` files render with file and owner context.
- Split strict run behavior from structural validate behavior: run-start
still hard-fails on missing inputs, while validate emits source-aware
warnings and continues linting.
- Extended validation diagnostics through Rust structs, OpenAPI, server
DTO mapping, and CLI rendering with optional source path, line, column,
span, and related metadata.
- Added regression coverage across template rendering, workflow
transforms, CLI output, and the server validate endpoint.

## Verification

- `cargo nextest run -p fabro-template`
- `ulimit -n 4096 && cargo nextest run -p fabro-workflow --no-fail-fast`
- `cargo nextest run -p fabro-cli
bare_fabro_with_unbound_inputs_validates_structurally_with_warning
run_rejects_unbound_template_inputs_before_creating_remote_run`
- `cargo nextest run -p fabro-server
validate_endpoint_returns_template_source_coordinates`
- `cargo build -p fabro-api`
- `cargo +nightly-2026-04-14 fmt --check --all`
- `cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D
warnings`

---

[![Compound
Engineering](https://img.shields.io/badge/Compound_Engineering-6366f1)](https://github.com/EveryInc/compound-engineering-plugin)
🤖 Generated with GPT-5 via [Codex](https://openai.com/codex)

---------

Co-authored-by: Aleksi Asikainen <1086393+salieri@users.noreply.github.com>
2026-05-16 18:47:37 -04:00
..
2026-04-29-metadata-snapshot-events.md feat(workflow): emit metadata snapshot events 2026-04-29 19:31:13 -04:00
2026-04-30-duplicate-type-unification.md docs(plans): add command output streaming and type unification plans 2026-04-30 08:36:00 -04:00
2026-04-30-preserve-exec-failure-diagnostics.md fix(workflow): preserve exec failure diagnostics 2026-05-01 08:45:50 -04:00
2026-05-02-event-module-split.md refactor(workflow): split event module by responsibility 2026-05-02 14:52:10 -04:00
2026-05-02-server-readiness-timeouts.md fix(cli): bound server readiness probes 2026-05-02 20:13:18 -04:00
2026-05-02-settings-driven-llm-providers-models.md docs(llm): finish configurable provider cleanup (#260) 2026-05-13 17:17:54 -04:00
2026-05-04-cross-tab-sse-coordination.md chore: add plan 2026-05-04 16:09:12 -04:00
2026-05-04-model-test-bounded-concurrency.md chore: update plan 2026-05-04 12:55:19 -04:00
2026-05-04-unique-git-checkpoint-commit-message-path.md chore: add plan 2026-05-04 11:12:40 -04:00
2026-05-05-clean-pierre-virtualizer-integration.md chore: plan 2026-05-06 07:15:18 -04:00
2026-05-05-decouple-interrupts-from-steering.md Wire end-to-end steering for running agents (#209) 2026-05-05 15:34:16 -04:00
2026-05-06-cli-input-overrides.md feat(cli): support sparse input overrides (#222) 2026-05-09 10:00:35 -04:00
2026-05-06-improve-cli-api-error-display.md fix(cli): preserve API error details 2026-05-06 14:03:12 -04:00
2026-05-06-polished-foreground-tty-logging.md feat(cli): polish foreground TTY logs 2026-05-06 15:31:25 -04:00
2026-05-08-generated-typescript-api-client-migration.md feat(web): migrate to generated API client 2026-05-08 07:44:33 -07:00
2026-05-08-run-owned-sandbox-lifecycle.md chore: plan run-owned sandbox lifecycle 2026-05-08 14:45:56 -07:00
2026-05-09-daytona-run-terminal.md chore: plan 2026-05-09 19:02:03 -04:00
2026-05-09-fixed-project-workflow-directory.md fix(workflow): ignore deprecated project directory 2026-05-09 10:55:56 -04:00
2026-05-09-inline-markdown-run-titles.md chore: plans 2026-05-08 18:59:49 -07:00
2026-05-09-live-stage-token-projection.md feat(billing): project live stage token usage 2026-05-09 15:25:51 -04:00
2026-05-09-remove-local-worktree-mode.md refactor(workflow): remove local worktree mode 2026-05-09 11:04:23 -04:00
2026-05-09-run-files-diff-scope-picker.md feat(run-files): add sandbox diff scopes 2026-05-09 13:00:14 -04:00
2026-05-10-auth-sessions-backend.md feat(auth): add unified session API 2026-05-10 14:16:23 -04:00
2026-05-10-auth-sessions-frontend.md chore: plans 2026-05-10 23:40:02 -04:00
2026-05-10-live-events-page.md feat(web): build live events page in settings 2026-05-10 14:05:10 -04:00
2026-05-10-sandbox-services-backend.md feat(server): list sandbox services 2026-05-10 11:24:39 -04:00
2026-05-10-sandbox-services-frontend.md feat(web): add Services tab to sandbox page 2026-05-10 11:56:05 -04:00
2026-05-11-automations-end-to-end.md chore: plans 2026-05-10 23:40:02 -04:00
2026-05-13-path-based-daytona-dockerfiles.md feat(manifest): support path-based Daytona Dockerfiles (#258) 2026-05-13 12:32:15 -04:00
2026-05-13-sandbox-repo-layout-plan.md feat(sandbox): prepare clone layout for multi-repo runs (#250) 2026-05-14 09:38:20 -04:00
2026-05-14-optional-llm-install.md feat(install): make LLM setup optional in web installer and CLI (#265) 2026-05-14 22:34:39 -04:00
2026-05-15-sandbox-network-details.md feat(sandbox): surface provider links and network policy (#275) 2026-05-16 10:16:18 -04:00
2026-05-16-chats-new-fabro-web-port.md feat(fabro-web): port /chats/new + /chats/:id from prototype (#289) 2026-05-16 17:10:16 -04:00
2026-05-16-source-aware-template-diagnostics.md feat(template): add source-aware diagnostics (#292) 2026-05-16 18:47:37 -04:00