Commit graph

4921 commits

Author SHA1 Message Date
Scott Werner
16c4d671be
Merge pull request #826 from fabro-sh/codex/run-intent-producer-support
Add local RunIntent producer support
2026-08-31 15:00:28 -04:00
Scott Werner
bf05b01ba6 Simplify session owner lookup and migration preflight
- Drop the post-decode run_id/session_id/event-body checks in
  find_session_owner: decode_event_row already verifies every stored
  column against the decoded envelope, and the WHERE clause pins
  session_id and event_name to the requested values.
- Build the lookup query from SELECT_EVENT_COLUMNS like the sibling
  event queries instead of duplicating the column list.
- Carry the stored run_id text in the unparseable-id error instead of
  an "<invalid>" placeholder.
- Fetch applied migration versions once per migrate() and share the
  set between the session-owner preflight and the pre-migration
  snapshot; check the applied version first so steady-state startups
  skip the sqlite_master probe. Mark the preflight as removable with
  the run-history compatibility window.
- Restore session_by_id_key as a #[cfg(test)] helper so tests stop
  hand-rolling the legacy reverse-index key shape.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 14:59:38 -04:00
Scott Werner
3411199103 Index session ownership from creation events 2026-08-31 14:16:58 -04:00
Scott Werner
011876edd1 Harden local RunIntent target observation 2026-08-31 14:08:35 -04:00
Scott Werner
0b46e1d735 Simplify local RunIntent producer support
Share canonicalize_location and resolve_existing_workflow_location
between the local package resolver and the version collector, drop the
redundant package-root pre-check and the PackageFileReadError enum in
favor of anyhow context, and read HEAD's SHA from git2 instead of a
separate rev-parse subprocess.

Make GitRunTargetObservation a plain struct, replace the repo-info
tuple with a named struct, tighten the closure view trait, avoid
deep-cloning the root workflow during collected validation, remove the
unused into_closure accessor, and dedupe test helpers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 14:08:35 -04:00
Scott Werner
52ff7b2ef2 Add local RunIntent producer support 2026-08-31 14:08:35 -04:00
Scott Werner
b4165a3b4e Update workflow source migration test version 2026-08-31 13:55:02 -04:00
Scott Werner
b7d32b9e83 Renumber automation workflow source migration 2026-08-31 13:51:07 -04:00
Scott Werner
39c018c430 Harden automation workflow source handling 2026-08-31 13:45:08 -04:00
Scott Werner
b61d309aa3
Merge pull request #827 from fabro-sh/codex/run-intent-registration-spine
Add RunIntent registration support
2026-08-31 13:44:08 -04:00
Scott Werner
7514e676e0 Prove workflow version registration order 2026-08-31 13:24:25 -04:00
Scott Werner
05fb173767
Merge pull request #823 from fabro-sh/codex/sqlite-run-history-activation
Activate atomic SQLite run history storage
2026-08-31 12:53:11 -04:00
Scott Werner
c68e67c841 Harden SQLite activation and run history consistency 2026-08-31 12:19:16 -04:00
Scott Werner
637d6a0d84 Simplify workflow version registration client and tests
Move the content-derived id check into create_workflow_version so every
caller gets it, drop the redundant expected_id parameter from
register_workflow_versions, and collapse the duplicated httpmock setups
and ordering machinery in the client tests. Use in-scope imports and the
neighbouring reader idiom in the server intent tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-31 10:20:58 -04:00
fabro-releases[bot]
3a5c683fbf Bump version to 0.342.0-nightly.0 2026-08-31 09:41:11 +00:00
Scott Werner
305381e2c2 Simplify automation workflow-source materialization
Collapse the role-paired materializer error variants into
`Credentials`/`Checkout` tagged with a `CheckoutRole`, route both
checkouts through one resolve-then-prepare helper, and replace the
test-only clone-URL field on the production materializer with a
`GitRemote` resolver seam. A workflow source in the target's repository
now reuses the already-resolved credentials instead of minting a second
token.

Also inline the one-line workflow-source normalizer, drop the `as_str`
wrapper on the new kind enum, remove the unused migration constant, move
rather than clone scheduler fields, and deduplicate the web form's
ref-validity rule and per-kind copy into a single table.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 13:17:15 -04:00
Scott Werner
03f81d1f25 Add independent workflow sources to automations 2026-08-30 13:14:11 -04:00
Scott Werner
dbe2e7564e
Merge pull request #828 from fabro-sh/codex/automation-environment-selector
Add environment selector to automations
2026-08-30 12:58:33 -04:00
Scott Werner
ed2da065ec Drop unused CREATABLE_PROVIDERS import from the environment form
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 12:36:30 -04:00
Scott Werner
7c261f2ae6 Move environment provider helpers into a lib module
Importing them from the environment form component pulled headlessui
Disclosure into the automation form, which the automations-new test mocks
without it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 12:30:58 -04:00
Scott Werner
88dae80c6d Consolidate automation environment helpers and trim redundant work
- Share the clone-based provider predicate and provider label between the
  automation form and environment settings instead of duplicating them
- Hoist repeated environments query state in the new-automation route
- Normalize empty environment ids to None so validation needs one check
- Merge the scheduler's record/clear error helpers and skip the clearing
  write when no error is stored
- Guard the environment backfill with a cheap existence query
- Drop an unneeded id clone and a no-op migrator comment

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 12:25:16 -04:00
Scott Werner
e87130ae23 Require a server-managed environment for automations
Automations now store an environment_id that must reference an enabled
Docker or Daytona environment. Each trigger fire resolves the current
environment definition and snapshots its settings into the run, and
deleting an environment still referenced by an automation is rejected
with a conflict.

Existing automations are backfilled conservatively: a compatible
environment named default is selected when present, otherwise the sole
compatible environment. Anything ambiguous is left incomplete and cannot
run until an operator selects an environment in the web UI.

Scheduler failures are recorded on the automation as last_error and
cleared after the next successful scheduled run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-30 09:58:13 -04:00
Scott Werner
1a1c5ab29d Add RunIntent registration support 2026-08-28 20:40:38 -04:00
Scott Werner
0574c818cf Share activation backup helpers and trim run-history residue
Hoist the SQLite backup/integrity helpers duplicated between the blob and
run-history activation migrations into one shared module, drop the
write-only recent-events buffer and other dead state left behind by the
SQLite cutover, reuse existing helpers for projection bootstrap, sequence
allocation, catalog keys, and test pool construction, and collapse the
tombstone and activation-marker plumbing to single statements.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 17:20:05 -04:00
fabro-releases[bot]
775b62b500 Bump version to 0.339.0-nightly.1 2026-08-28 20:41:40 +00:00
Bryan Helmkamp
9dd47a8cd3
Merge pull request #819 from fabro-sh/codex/daytona-image-snapshots
Allow Daytona snapshots from Docker images
2026-08-28 16:24:55 -04:00
Bryan Helmkamp
5ebf3ebd35
Model the Daytona snapshot source as an enum
`DaytonaSnapshotSettings` carried two independent `Option`s (`image` and
`dockerfile`) that every consumer had to re-validate. Replace them with a
single `source: DaytonaSnapshotSource { Image, Dockerfile }` so the
both-set and neither-set states are unrepresentable at the sandbox layer.
This removes four unreachable error arms in `canonical_manifest` and
`create_snapshot_params`, the `.filter(...)` guard in `initialize`, and
the presence guard in `daytona_config_from_environment`. The
mutual-exclusion rule now lives only in fabro-config, which owns the
`image.docker` / `image.dockerfile` keys the old messages named.

Merge `ImageSnapshotManifest` into `SnapshotManifest` via a flattened
`SourceManifest` enum. The dockerfile case serializes to the same bytes
as before, so existing snapshot names are unchanged; the pinned identity
test still passes. Pin the image-case identity as well so a future
manifest change cannot silently orphan image snapshots.

Fold `validate_daytona_image_settings` into the existing Daytona arm of
`validate_provider_capabilities`; both callers already invoke it right
after `resolve_environment_fields`, so error order is unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-28 16:19:56 -04:00
Scott Werner
3e6a88625c Stabilize SQLite-backed server tests 2026-08-28 15:54:23 -04:00
Bryan Helmkamp
ccca32ea42
Merge pull request #815 from fabro-sh/code-review-calibration
Install the code-review workflow and first repository review rules
2026-08-28 15:51:01 -04:00
Bryan Helmkamp
85a0b70c98
Merge pull request #822 from fabro-sh/fix-nested-blob-resolution
Hydrate nested structured blob references
2026-08-28 15:47:46 -04:00
Scott Werner
aa9c468d3e Wait for SQLite writer lock when deleting runs 2026-08-28 15:46:13 -04:00
Scott Werner
5cd69e9c66
Merge pull request #820 from fabro-sh/codex/automation-run-intent
Move automation runs to workflow versions and RunIntent
2026-08-28 15:43:31 -04:00
Bryan Helmkamp
15a1188bb9
Keep engine fix in separate pull request 2026-08-28 15:32:01 -04:00
Bryan Helmkamp
a125596681
Resolve nested blobs concurrently 2026-08-28 15:31:21 -04:00
Scott Werner
f073684227 Activate atomic SQLite run history storage 2026-08-28 15:18:25 -04:00
Bryan Helmkamp
5485bb1e93
Hydrate nested structured blob references 2026-08-28 15:15:39 -04:00
Bryan Helmkamp
c2ac1a8500
Fix large parallel review inputs 2026-08-28 15:07:39 -04:00
Bryan Helmkamp
7416745cd7
Harden code review workflow release 2026-08-28 14:32:33 -04:00
Bryan Helmkamp
81d714d8b7
Add focused publisher canary fixture 2026-08-28 14:14:29 -04:00
Bryan Helmkamp
1c35efb495
Refresh structured code review comments 2026-08-28 13:53:59 -04:00
Scott Werner
9edcc780d6
Merge pull request #821 from fabro-sh/codex/strict-run-history-importer
Import and verify legacy run history
2026-08-28 11:23:20 -04:00
Bryan Helmkamp
afa7298071
Refresh the code-review workflow (bodyless review posts)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WqM6MiUp32js5YrbiW777k
2026-08-28 11:04:30 -04:00
Scott Werner
4922fec45a Support historical run events during migration 2026-08-28 10:49:43 -04:00
Scott Werner
3591315ba6 Harden legacy run history verification 2026-08-28 10:13:03 -04:00
Bryan Helmkamp
aa09341f4e
Refresh the code-review workflow (acceptance-run fixes)
Syncs the post-acceptance state from lithoscomputer/code-review: the
wiring simplification pass, the smoke-variant inputs the shared graph's
publish_pr node now requires, the hunk-header parsing hardening, the
root-commit diff base, and the verified-missing retry. These include the
fixes for what the publisher's own first live run reported on PR #815.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WqM6MiUp32js5YrbiW777k
2026-08-28 10:04:40 -04:00
Bryan Helmkamp
9827efaaa6
Refresh the code-review workflow (SARIF output, P1 PR publisher)
Syncs the workflow from lithoscomputer/code-review: the SARIF renderer,
the deterministic PR publisher (publish_pr.py plan/apply plus the opt-in
publish_pr graph node and post_pr inputs), the GitHub permissions grant
that has Fabro inject a scoped GITHUB_TOKEN, and a planted-bug probe
fixture so this refresh commit itself yields inline-postable findings
for the publisher's live acceptance run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WqM6MiUp32js5YrbiW777k
2026-08-28 09:22:50 -04:00
fabro-releases[bot]
f87ece704b Bump version to 0.339.0-nightly.0 2026-08-28 13:11:14 +00:00
Scott Werner
a98c0db713 Import and verify legacy run history 2026-08-27 17:27:47 -04:00
Scott Werner
9bd499cdbe
Merge pull request #817 from fabro-sh/codex/run-record-sql-foundation
Some checks failed
Rust / Test (Linux) (push) Has been cancelled
Rust / Test (macOS) (push) Has been cancelled
Rust / Format (push) Has been cancelled
Rust / Clippy (push) Has been cancelled
Rust / Generated Docs (push) Has been cancelled
TypeScript / Typecheck (push) Has been cancelled
TypeScript / Test (push) Has been cancelled
TypeScript / Build (push) Has been cancelled
Add inactive SQL run event storage foundation
2026-08-27 16:30:05 -04:00
Scott Werner
077d020223 Simplify automation workflow-version packaging
Share the RunIntent shape between the scheduler and the API trigger via
AutomationRunMaterialized::into_run_intent, drop the pass-through
packaging wrappers and the unreachable VersionIdMismatch error, and move
the config-path and version-ID derivations onto WorkflowVersion so the
server, validator, and collector stop re-deriving them.

The collector now owns the collected sources (moving file contents
instead of cloning them), resolves the workflow location once, and shares
the not-found probe with build_run_manifest. The bundler reads a goal
file once instead of twice.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-27 16:29:45 -04:00