mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-21 00:21:27 +00:00
The Git-target grammar (slug, branch, and SHA rules plus the derived origin URL) was implemented twice with no shared code path: once in server admission and again in sandbox start, so the two could drift and disagree about which persisted targets are valid. Own it once as RunTarget::validate() in fabro-types, next to the primitives it uses, returning the canonical target together with its derived GitContext projection. Admission consumes it directly, and the start path re-derives the expected clone source from the same rules before checking the persisted projection against it. The start path now also moves the derived strings into the sandbox spec instead of cloning them. While reordering admission around the shared validator, run the pure, in-memory checks (target grammar, environment id) before the blob-store closure fetch and lowering so malformed requests no longer pay for version-store I/O. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| migrations | ||
| src | ||
| tests | ||
| build.rs | ||
| Cargo.toml | ||