Commit graph

3974 commits

Author SHA1 Message Date
Fabro
9b85653a2d fabro(01KY7Y01REECZ24XXTMBZ3PPV9): simplify_sol (succeeded)
Fabro-Run: 01KY7Y01REECZ24XXTMBZ3PPV9
Fabro-Completed: 7
Fabro-Checkpoint: 334aea8fdc

⚒️ Generated with [Fabro](https://fabro.sh)
2026-07-23 20:29:19 +00:00
Fabro
56119990be fabro(01KY7Y01REECZ24XXTMBZ3PPV9): simplify_fable (succeeded)
Fabro-Run: 01KY7Y01REECZ24XXTMBZ3PPV9
Fabro-Completed: 6
Fabro-Checkpoint: 497f92f4d9

⚒️ Generated with [Fabro](https://fabro.sh)
2026-07-23 19:10:39 +00:00
Fabro
1a2bd7966d fabro(01KY7Y01REECZ24XXTMBZ3PPV9): implement (succeeded)
Fabro-Run: 01KY7Y01REECZ24XXTMBZ3PPV9
Fabro-Completed: 5
Fabro-Checkpoint: 1f2ff54692

⚒️ Generated with [Fabro](https://fabro.sh)
2026-07-23 17:41:29 +00:00
Fabro
1879fe0906 fabro(01KY7Y01REECZ24XXTMBZ3PPV9): preflight_lint (succeeded)
Fabro-Run: 01KY7Y01REECZ24XXTMBZ3PPV9
Fabro-Completed: 4
Fabro-Checkpoint: bb25ac7d9f

⚒️ Generated with [Fabro](https://fabro.sh)
2026-07-23 16:52:52 +00:00
Fabro
dfddfb747b fabro(01KY7Y01REECZ24XXTMBZ3PPV9): preflight_compile (succeeded)
Fabro-Run: 01KY7Y01REECZ24XXTMBZ3PPV9
Fabro-Completed: 3
Fabro-Checkpoint: 4bc92b4b11

⚒️ Generated with [Fabro](https://fabro.sh)
2026-07-23 16:50:14 +00:00
Fabro
a2650503e8 fabro(01KY7Y01REECZ24XXTMBZ3PPV9): toolchain (succeeded)
Fabro-Run: 01KY7Y01REECZ24XXTMBZ3PPV9
Fabro-Completed: 2
Fabro-Checkpoint: 970f0d7912

⚒️ Generated with [Fabro](https://fabro.sh)
2026-07-23 16:47:50 +00:00
Bryan Helmkamp
30d770046a
chore(workflows): use xhigh for implement-plan 2026-07-23 12:46:36 -04:00
Bryan Helmkamp
1874497056
Merge pull request #596 from fabro-sh/test-strip-force-color
fix(test): strip inherited color-forcing env vars in brew upgrade tests
2026-07-23 12:16:01 -04:00
Bryan Helmkamp
d213e23dc6
Merge pull request #595 from fabro-sh/validate-inert-attributes
feat(validate): warn on inert node and edge attributes
2026-07-23 12:12:26 -04:00
Bryan Helmkamp
f02ee6aaed
fix(validate): handle custom types and inherited threads 2026-07-23 11:19:44 -04:00
Bryan Helmkamp
edbd25f67c
fix(test): strip inherited color-forcing env vars in brew upgrade tests
The brew_command helper inherits the developer's environment (unlike
context.command(), which env_clears), so an exported FORCE_COLOR or
CLICOLOR_FORCE overrides the NO_COLOR=1 the harness sets and the CLI
renders ANSI codes into snapshot output, failing
upgrade_brew_install_refuses_and_prints_brew_command and
upgrade_brew_install_rejects_version_flag on any machine with
FORCE_COLOR exported.

Remove FORCE_COLOR, CLICOLOR_FORCE, and CLICOLOR from the spawned
command's env, and add the FORCE_COLOR constant to EnvVars.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 11:19:01 -04:00
Bryan Helmkamp
3af4335098
fix(validate): name every parallel parent in branch diagnostics
A branch node reachable from multiple parallel nodes previously had its
warning and fix hint name an arbitrary first parent. Collect all unique
parallel parents (sorted) and render the full list in both.

Addresses review feedback on #595.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 11:04:14 -04:00
Bryan Helmkamp
0748d0c6b8
feat(validate): warn on inert node and edge attributes
Add two lint rules so the graph format stops silently accepting
attributes that nothing reads:

- inert_attribute: handler-specific attributes (script, language,
  duration, join_policy, max_parallel, output_schema, prompt) placed on
  node types that never read them. Attributes read by several handlers
  (timeout), resolved for every node (fidelity, retry_policy), or
  injectable via model stylesheets (model, reasoning_effort, ...) are
  deliberately excluded.
- parallel_branch_inert_attribute: fidelity/thread_id on parallel
  branch nodes and fork->branch edges. Branch dispatch bypasses the
  fidelity lifecycle, so these are dead letters today; the warning
  points at the parallel node, where fidelity does take effect.

Also reconcile the loop_restart docs with actual executor behavior:
taking a loop_restart edge restarts from the target with a fresh empty
context (visit counts preserved), on success as well as failure; the
transient_infra guard applies only to failure crossings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 10:48:18 -04:00
Bryan Helmkamp
7b52b3b6ba
Merge pull request #584 from andremw/fix/parallel-branch-stage-stuck-running
Finalize parallel branch stages instead of leaving them Running
2026-07-23 09:45:49 -04:00
Bryan Helmkamp
580ee156b2
Merge pull request #594 from fabro-sh/preserve-provider-costs
Preserve provider-reported workflow costs
2026-07-23 08:10:18 -04:00
Bryan Helmkamp
08cef66ec8
Saturate billing cost accumulation 2026-07-23 07:53:01 -04:00
Bryan Helmkamp
5b0cfd4050
Tighten parallel branch projection tests
Assert ParallelBranchStarted seeds started_at (the live-timer half of
the fix) and cover the failed-status fold to a Failed terminal state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 07:37:34 -04:00
Bryan Helmkamp
4d2712b8db
Consolidate provider-reported cost handling into fabro-model
Replace the billed_model_usage_from_llm_with_cost wrapper with a
with_reported_cost method on BilledModelUsage and BilledTokenCounts, and
centralize the optional-cost fold as UsdMicros::accumulate so fabro-agent
and fabro-workflow share one implementation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 07:21:17 -04:00
Bryan Helmkamp
7f25689fb6
Preserve provider-reported workflow costs 2026-07-23 07:08:04 -04:00
Bryan Helmkamp
f8ed856959
Add regression test for authoritative provider billing 2026-07-23 06:59:48 -04:00
Bryan Helmkamp
f00a2ed1ea
Merge pull request #593 from fabro-sh/codex/openrouter-gpt56-claude-catalog
Add current GPT and Claude models to OpenRouter catalog
2026-07-23 06:57:38 -04:00
Bryan Helmkamp
e6c92aeb27
Add current GPT and Claude models to OpenRouter catalog 2026-07-23 06:50:26 -04:00
fabro-releases[bot]
e9a571da2e Bump version to 0.303.0-nightly.2 2026-07-23 10:06:14 +00:00
Bryan Helmkamp
b505833ccd
Update implement-plan workflow models 2026-07-22 22:51:35 -04:00
fabro-releases[bot]
d9282e66f9 Bump version to 0.303.0-nightly.1 2026-07-23 01:49:45 +00:00
Bryan Helmkamp
b39e3767a3
Fix legacy token billing projection 2026-07-22 21:37:13 -04:00
fabro-releases[bot]
3c4ed41d57 Bump version to 0.303.0-nightly.0 2026-07-23 00:17:24 +00:00
Bryan Helmkamp
b765940f8c
Track implement-plan simplify prompt 2026-07-22 19:50:31 -04:00
Bryan Helmkamp
d629816c3b
Merge pull request #589 from fabro-sh/codex/glm-5-2-support
Add GLM 5.2 direct and OpenRouter support
2026-07-22 19:47:21 -04:00
Bryan Helmkamp
3fd4b44d6e
Rename reasoning stream snapshot 2026-07-22 19:29:16 -04:00
Bryan Helmkamp
c8d175e3a5
Merge pull request #590 from fabro-sh/feat/poolside-laguna-provider
Some checks are pending
Rust / Format (push) Waiting to run
Rust / Clippy (push) Waiting to run
Rust / Generated Docs (push) Waiting to run
Rust / Test (Linux) (push) Waiting to run
Rust / Test (macOS) (push) Waiting to run
feat(llm): add Poolside Laguna models
2026-07-22 19:15:07 -04:00
Bryan Helmkamp
911f26f8e5
Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Bryan Helmkamp <19+brynary@users.noreply.github.com>
2026-07-22 19:14:54 -04:00
Bryan Helmkamp
8f47275d84
feat(llm): add Poolside Laguna models
Add Poolside as a built-in OpenAI-compatible provider and expose Laguna S 2.1 and XS 2.1 both directly and through OpenRouter. Include vault/env credential registration, secret redaction, live coverage, catalog tests, and user documentation.
2026-07-22 18:49:16 -04:00
Bryan Helmkamp
8a243085d0
Merge remote-tracking branch 'origin/main' into codex/glm-5-2-support
# Conflicts:
#	lib/crates/fabro-llm/tests/integration.rs
#	lib/crates/fabro-model/src/catalog.rs
2026-07-22 18:37:15 -04:00
Bryan Helmkamp
04f55666f9
Merge pull request #588 from fabro-sh/codex/openrouter-kimi-k3
Add Kimi K3 via OpenRouter
2026-07-22 18:29:47 -04:00
Bryan Helmkamp
1511c84f48
Test GLM 5.2 through Z.AI 2026-07-22 17:26:37 -04:00
Bryan Helmkamp
d8613fa052
Merge pull request #568 from thewoolleyman/push-credential-refresh-ahead
feat(workflow): keep push credentials fresh across long ACP turns
2026-07-22 17:20:40 -04:00
Bryan Helmkamp
c67cfef141
Add GLM 5.2 model support 2026-07-22 17:19:16 -04:00
Bryan Helmkamp
129c893c86
Add Kimi K3 via OpenRouter 2026-07-22 16:59:25 -04:00
Bryan Helmkamp
03b1b790d1
Merge pull request #587 from fabro-sh/codex/kimi-k3-openai-compat
Add Kimi K3 support and fix OpenAI-compatible tools
2026-07-22 16:45:46 -04:00
Bryan Helmkamp
5d345cf393
Fix OpenAI-compatible parity fixture 2026-07-22 16:37:32 -04:00
Bryan Helmkamp
ca11cac25d
Add Kimi K3 catalog support 2026-07-22 16:23:40 -04:00
Bryan Helmkamp
a96f90bbd8
Fix OpenAI-compatible agent tools 2026-07-22 15:31:17 -04:00
Bryan Helmkamp
25f1f64aee
Merge pull request #586 from fabro-sh/fix/repo-init-default-environment
Let repo init use the target server default environment
2026-07-22 14:51:24 -04:00
Bryan Helmkamp
49c30aa4a6
Let repo init use the server default environment 2026-07-22 14:44:43 -04:00
Scott Werner
8e8aef854c
Merge pull request #572 from fabro-sh/sqlite-runs-read-model
Add SQLite runs read model
2026-07-22 14:03:04 -04:00
Bryan Helmkamp
2843b33d92 Simplify runs read model: single-source mappings, leaner queries
Consolidate duplicated logic from the SQLite runs read model review:

- Derive the status sort CASE and board-column filter from a new
  RunStatusKind::board_rank(), replacing three hand-maintained copies
  of the status/column mapping; add a test upserting every status
  variant so the migration CHECK can't silently drift
- Share RunSize bucket thresholds between from_total_usd_micros and
  the generated size-sort CASE via RunSize::BUCKET_MAX_USD_MICROS
- Resolve run selectors from a lean identity query instead of
  decoding every stored summary per request
- Delete the RunsSortKey/RunsSortDirection adapter enums; the store
  sort enums now carry the wire serde names
- Consolidate the workflow display-name fallback chain into
  WorkflowRef::display_name() (store, CLI, run lookup)
- Share pagination clamping and the paginated list envelope across
  handlers
- Reconcile now skips rows whose source seq is unchanged and
  batch-deletes stale rows; drop the two indexes no query can use
- Hold the summary store OnceLock cell in RunDatabaseInner instead of
  a snapshot so late attachment reaches already-open writers
- Misc: expect() on COUNT(*) sign, %err logging, shared wall-time
  helper, shared SQLite test fixture, dead billing fallback removed

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 13:55:22 -04:00
Bryan Helmkamp
22844300af Add SQLite runs read model 2026-07-22 13:55:22 -04:00
Scott Werner
a71bd1ad33
Merge pull request #573 from fabro-sh/sqlite-storage-migration
Migrate secrets and automations storage to SQLite
2026-07-22 13:53:44 -04:00
Bryan Helmkamp
736e302636 Add internal parallelization strategy doc
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 13:37:31 -04:00