egress fast-follows: record the raw paths + build hygiene - #86
Open
huximaxi wants to merge 4 commits into
Open
Conversation
huximaxi
force-pushed
the
feat/egress-hardening
branch
from
September 9, 2026 11:12
6518995 to
949f94c
Compare
huximaxi
marked this pull request as ready for review
September 9, 2026 11:12
huximaxi
force-pushed
the
feat/egress-tauri-writer
branch
from
September 9, 2026 11:43
bec1ab3 to
37a387f
Compare
Close the two dormant raw-egress paths (call_ollama, embed_text) that egressed content with no WAL frame, and unify recording: - note_egress() is the single recording path: honors LOCI_WAL_DISABLED (stamps egress.disabled) and stamps egress.degraded on write failure. The decorator + call_ollama + embed_text all record through it. - egress_class_for_host() shared by the backend and the raw paths. - EgressLogged::new is now pub(crate) (defense-in-depth; the ollama()/claude() factories are the only public constructors).
- VERSION 0.2.0 -> 0.6.0-beta (matches tauri.conf.json) - drop the dead .github/workflows/release.yml reference - state plainly the build is UNSIGNED (notarization wiring is a follow-up)
validate_ollama_url accepted any 100.x host whose second octet was >= 64, which also permits 100.128.0.0 through 100.255.255.255 (public IP space) despite the comment and error message both claiming the CGNAT range is 100.64 to 100.127. A base_url pointing at a routable public host in 100.128+ passed the SSRF gate and was classified as LocalNetwork egress. Bound the second octet to 64..=127. Add url_validation_tests covering the CGNAT edges, public space above and below the range, and non-permitted hosts and schemes.
The macOS build path already prints an unsigned-binary notice before notarization; the --windows NSIS path had none, so a user who only ever cross-builds for Windows got no signing-risk warning at all. Also drops the stale "v0.2.0" references in the header/output-path comments now that VERSION is 0.6.0-beta.
huximaxi
force-pushed
the
feat/egress-hardening
branch
from
September 9, 2026 11:44
949f94c to
c2efccd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Fast-follows surfaced by the #85 pre-deploy loop. Stacked on #85 (base is
feat/egress-tauri-writer; merge after it).call_ollama,embed_text) that POST content to Ollama with no WAL frame: they now record through a sharednote_egress(), which also honorsLOCI_WAL_DISABLEDand theegress.degraded/egress.disabledmarkers.egress_class_for_host()is shared by the backend and the raw paths;EgressLogged::newis nowpub(crate)(theollama()/claude()factories stay the only public constructors).100.64.0.0/8-shaped range as trusted; bound it to the actual CGNAT block,100.64.0.0/10(100.64.0.0–100.127.255.255), so public addresses in100.128.0.0/9no longer get misclassified as local. Covered by four new tests hitting both bounds, above, below, and the wrong scheme.build.shVERSION0.2.0→0.6.0-beta(matchestauri.conf.json); dropped the dead.github/workflows/release.ymlreference; states plainly the build is UNSIGNED on both the macOS and Windows paths now.Why these, and not the rest
Included the fast-follows that are cheap, safe, and self-contained. Deferred, with reasons:
loci auditcap is ~58 years at human pace (~7 months at agent pace). Its own PR.wal.enabledconfig flag — theLOCI_WAL_DISABLEDenv var + the surfacedegress.disabledmarker already give a reversible, non-silent off-ramp; a config field isn't worth the plumbing for beta.build.shnow states unsigned plainly on the default path.Unknownegress class) — has a serialize edge; low value, deferred.Verified
loci-wal/loci-cliuntouched by this PR.Boundary
Public; no new dependencies; no private-core terms (local bleed-guard clean).