August 23, 2026
65 recorded commits · 8 named repos · 6 private repos
- Private work 6 private repos
Activity was recorded across 6 private repos. Names, subjects, counts, and links stay private.
- statelog20 changes
- new repocreated repo Fimeg/statelog7:51 p.m. · forge event · internal Gitea record only
- make the host port a deploy variable7:04 p.m. · 5b7e9f6 · internal Gitea record only
RedFlag holds 3302 on the deploy host and appears in no compose file here, so the sweep that called 3302 free could not have seen it. The tree cannot answer this question; ss on the host can.
- bind the host address and rejoin the pangolin network6:59 p.m. · 59dc63e · internal Gitea record only
Pangolin runs on a different machine, so a loopback bind is unreachable from it -- forgejo-public binds its host address explicitly and joins the network for exactly this reason. An earlier commit removed the network block by reading a service that Pangolin does not front.
- record that neither repository is a publication candidate5:23 p.m. · 999bc74 · internal Gitea record only
A sweep classifying repos for the public forge must not pick these up. The site is a rendered projection; serving it is a different act from publishing the source or the archive, and custody may never leave raw.
- rename custody to main before the first push, not after5:21 p.m. · 42d8778 · internal Gitea record only
The custody repo is on master while the source repo, both workflows and forge-init's default_branch are on main. Renaming after a push leaves a stray branch and an empty default on the forge.
- check custody from a clone, not the copy that wrote it5:20 p.m. · 624dd7c · internal Gitea record only
The clone found the second checkpoint uncommitted -- it seals 104 observations where the working store has 173, so a forge capture would have chained from cf5f8d6b and orphaned 374c8822. forge-verify.py reads deploy-key permissions back rather than trusting the create request.
- write the migration off the laptop12:28 p.m. · 2a30d19 · internal Gitea record only
Twelve steps, six of which stop at a credential or a live host. The acceptance test is that the laptop can be powered off and custody still grows; until step 8 is green the timer stays on, because Canada cannot be reconstructed backwards.
- render read-only, deploy through restricted verbs12:28 p.m. · 3d6766b · internal Gitea record only
A capture push cannot trigger this workflow, so it carries its own schedule rather than widening the capture identity to defeat that. The image is built on the runner and shipped by docker save; the host builds nothing and holds no forge credential.
- capture appends under a key scoped to custody alone12:28 p.m. · d0b7f5b · internal Gitea record only
Write deploy key, one repository, not an account token and not Casey. The runner image is bare, so python3, git and ssh install first. Clone, sweep, checkpoint and push are one step, so the key's lifetime is one step and the trap fires on failure too.
- drop the pangolin network from compose12:28 p.m. · 95b0bfa · internal Gitea record only
Samaritan Portal has no network block -- Pangolin reaches it through the host port. caseytunturi attaches one; the newer pattern is the one to follow, and an external network that does not exist fails the container at start.
- restore the deploy pattern and the port record12:28 p.m. · 9c06024 · internal Gitea record only
Samaritan Portal binds 3304 and is the pattern this follows; the repo I read instead was a superseded dev tree. Both the wrong correction and the sweep that missed every variable-prefixed bind are recorded in the file rather than quietly replaced.
- enable linger so the sweep survives logout12:10 p.m. · 7006c8d · internal Gitea record only
Without it the user manager dies with the login session and the timer only exists while someone is signed in. On a laptop that travels, a day nobody logs in is a hole Canada cannot backfill.
- correct the deploy pattern and the port claim12:10 p.m. · 4b4cf5e · internal Gitea record only
The pattern came from caseytunturi.com and souveraine-website. Samaritan runs a React dev server and was never it, and nothing in the tree binds 3304, the port 3302 was said to clear.
- name the custody remote and split its two credentials12:10 p.m. · 45b5892 · internal Gitea record only
Read for the site build, write for the sweep. The site renders evidence and must never be able to alter it. forge-init.py creates both repositories -- push-to-create is off on this installation.
- deploy the tree CI verified, not a rebuild of it12:10 p.m. · de60f75 · internal Gitea record only
The host gets dist/ and its build context in one tar, so it holds no forge credential. CI reads /.build-sha and /.custody-checkpoint back off the running container and fails unless both match what it built.
- stamp each page with its build and custody checkpoint12:10 p.m. · 9a376ec · internal Gitea record only
Two identifiers a reader can check without asking: which code rendered the page, which custody state it was rendered against. The footer also names the gap -- no digest published outside the authority holding custody -- so "verifies" cannot read as "tamper-proof".
- render the public site from custody; containerise for statelog subdomain11:48 a.m. · 83e13a1 · internal Gitea record only
Site is a projection: counts, hashes, diffs and provenance are read from the capture store at build time, so a claim without a capture cannot render. nginx-alpine behind Pangolin, loopback bind, build-sha verified. Route, port and runner remain Casey's to set.
- custody checkpoints, notice determination, relational projection11:18 a.m. · 25c9184 · internal Gitea record only
Split the agency's own label from a determination about the record: 18 of 35 final rules touching 8 CFR 1208 have no prior proposed rule under the same RIN. Parser v2 disambiguates 9 duplicate provision paths, rederived from held bytes with no refetch. Projection rebuilds byte-identical from custody alone.
- custody store, canadian capture loop, federal register join11:11 a.m. · 75cd7ba · internal Gitea record only
Every fetch now preserves raw bytes, retrieval time, hash, and a derivative keyed to parser version; rederive reparses held objects with no refetch. First Canadian custody point: 26 acts and regs, 13,545 provisions. The join resolves 31 of 33 amendment dates for 8 CFR 1208 and prints what it cannot match.
- statelog: source register, core schema, ecfr diff engine, first two pages11:11 a.m. · 29d3b43 · internal Gitea record only
eCFR versioner gives point-in-time federal text with no key; Canada serves only current consolidation, so archive-on-ingest is mandatory. First artifact page renders the 8 CFR 1208.3 asylum fee change with full provenance.
- souveraine-viewtop14 changes
- survive a transient lookup while assembling the sysroot9:30 p.m. · 4a54f06 · internal Gitea record only
The gate failed on name resolution for the package archive after apt had already succeeded in the same job -- intermittent, not configuration.
- project the tested ref onto the public forge9:10 p.m. · d277802 · internal Gitea record only
- add the cross libc the aarch64 link needs9:07 p.m. · 8ec3aa5 · internal Gitea record only
gcc-aarch64-linux-gnu ships the compiler, not the target startup files; without libc6-dev-arm64-cross ld cannot find Scrt1.o.
- retrigger: the smithay dependency is now public8:59 p.m. · 493322d · internal Gitea record only
- prove the phone binary carries nothing from the build host6:53 p.m. · 4b1d8a0 · internal Gitea record only
Eight checks after the link: AArch64 ELF, expected loader, no embedded RPATH, and every DT_NEEDED resolving to an aarch64 object inside the constructed sysroot. CI builds that sysroot in runner temp from empty, so nothing survives between runs to become part of the contract again.
- assemble the phone sysroot from declared inputs6:43 p.m. · 9aca46f · internal Gitea record only
It was a directory on one machine with no record of its contents, which made the only build that can take the panel reproducible by one person. 155 arm64 packages now resolve from 12 requirements derived from the kms feature, each verified against the archive index.
- stop tracking the mechanism's bytecode6:00 p.m. · 9e9e433 · internal Gitea record only
Compiled copies of the scanner carry its rule literals into the tree as bytes no reviewer reads, and they change on every run. Ignored.
- run the public gate on the ordinary runner class6:00 p.m. · 684e456 · internal Gitea record only
Toolchain, aarch64 target, cross linker and smithay's dependency list are declared here instead of assumed from the build host. The phone KMS build is named as absent and why -- it needs a target sysroot no workflow can declare.
- mechanism v1, matrix-capable gate evaluator5:47 p.m. · 505a322 · internal Gitea record only
Selection for matrix gates is an explicit enumeration; the prefix count is a tripwire only. The pinned digest moves with it, so an un-updated copy stops the job rather than changing what "checked" means.
- deps: pin the fork tip that explains itself11:44 a.m. · 18d3781 · internal Gitea record only
Same code; the revision now lands on the commit carrying the fork rationale, so a reader following the dependency arrives at the explanation.
- publication: bless the gate's own install commit11:39 a.m. · dd9f5ea · internal Gitea record only
- publication: install the gate and bless the history11:39 a.m. · e1bf4d9 · internal Gitea record only
Twenty commits carry internal topology in their diffs and two in their subjects. No secrets, and the tree at HEAD is clean, so the accepted history cannot excuse anything live.
- public: cut the internal half out of the projection11:38 a.m. · 4adf8c0 · internal Gitea record only
Build and test stay; packaging, signing and archive publication do not, and neither does the operator harness. Four references to the build host become generic, package URLs point at the public forge, checkout is SHA-pinned.
- deps: point smithay at the published fork11:38 a.m. · a6859d8 · internal Gitea record only
The dependency was pinned to a host no one outside the house can reach, so a public clone could not resolve it. Same five patches, same tree; the revision moved because two commit identities were corrected before first publication.
- souveraine8 changes
- project the tested ref onto the public forge9:21 p.m. · db593a2 · internal Gitea record only
- flush the pending queue before returning9:20 p.m. · 1216373 · internal Gitea record only
tokio's File buffers; an append that returned Ok could still be in memory when the next take() read the file. Caught by multiple_appends_accumulate on a runner, never on a developer machine.
- retrigger: runner could not pull its image8:42 p.m. · 12235cf · internal Gitea record only
The previous run failed resolving docker.gitea.com; nothing in the tree changed.
- run the gates on the public branch too8:10 p.m. · 57898f8 · internal Gitea record only
The candidate ref never triggered anything, so a push to public produced no run and therefore no gate proof.
- review the commit that installs the gate8:08 p.m. · 18144e2 · internal Gitea record only
The mechanism carries the credential patterns it enforces, so the diff that adds it matches its own rules. The tree is exempted by manifest; the commit is reviewed here.
- install the publication mechanism8:07 p.m. · e1eede9 · internal Gitea record only
- keep the packaging half off the public branch7:43 p.m. · 2f685fa · internal Gitea record only
primary still carries the whole workflow; the public projection carries the three portable gates and nothing that names the build host.
- split the public gates from the internal packaging half7:42 p.m. · 76846fe · internal Gitea record only
The three portable jobs stay; the [host] packaging and archive publish move to packages.yml, which the public branch does not carry. The handoff document is operator archaeology and does not travel.
- smithay8 changes
- project the tested ref onto the public forge8:54 p.m. · 2e2dfc3 · internal Gitea record only
Fast-forward checked before the push, exact SHA read back after. Gitea is the only thing that publishes.
- take instead of drain-collect, twice8:40 p.m. · 73a3bea · internal Gitea record only
clippy's drain_collect fires under -D warnings on a newer toolchain than upstream pins. Two lines, same semantics.
- rustfmt the fork's own patches8:20 p.m. · 53c6f45 · internal Gitea record only
The gate runs cargo fmt --check and the five patches were not formatted to upstream's style.
- run the public gate on the ordinary runner class6:00 p.m. · dbb6cf1 · internal Gitea record only
builder was a placeholder invented to keep an internal host name out of a public tree, and nothing serves it. The workflow now declares the toolchain and upstream's own dependency list for test_all_features, so the build contract is in the file rather than on one machine.
- review the one commit the gate flags5:49 p.m. · 20ddbd0 · internal Gitea record only
The mechanism install carries the scanner's own rule definitions; a gate cannot enter a repository it protects without its patterns appearing in that diff. The tree is exempted by manifest, the commit is reviewed here.
- install the publication mechanism, pinned5:48 p.m. · aeb3c97 · internal Gitea record only
The gate travels with the repository because this installation cannot read a reusable workflow from a private repo. The pin makes drift a hard stop rather than a silent change in what "checked" means.
- ci: one gate that validates the five patches11:56 a.m. · 9945db1 · internal Gitea record only
Upstream checks with test_all_features and the patches live in the paths that flag compiles, so the fork borrows that choice rather than inventing one. Anvil, Smallvil and the cache dance stay upstream's problem.
- readme: say why this fork exists11:43 a.m. · 227c7e4 · internal Gitea record only
Five patches on a named upstream base, each with the failure it fixes. A reader should not have to diff 4000 commits to find 332 lines.
- upower5 changes
- project the tested ref onto the public forge8:55 p.m. · 4a53185 · internal Gitea record only
Fast-forward checked before the push, exact SHA read back after.
- add gettext for msgfmt8:23 p.m. · ca47424 · internal Gitea record only
meson's policy/meson.build needs msgfmt to build the polkit policy file.
- review the commit that installs the gate8:15 p.m. · 58d4e88 · internal Gitea record only
- carry the publication gate on the candidate ref8:15 p.m. · 3a63993 · internal Gitea record only
- add the publication gate this fork lacked7:41 p.m. · 9617021 · internal Gitea record only
Upstream ships no CI in this tree, so the gate is meson's own contract: configure, build, test, with the optional introspection and idevice halves switched off so every run proves the same thing.
- SouveraineOS4 changes
- gate every push to the candidate ref2 distinct commits share this description9:01 p.m. · 03ec301 · internal Gitea record only9:00 p.m. · ce6c4d0 · internal Gitea record only
A paths filter meant a push touching only the gate itself ran nothing.
- review the commit that installs the gate8:59 p.m. · a1d0b27 · internal Gitea record only
- carry the publication gate on the candidate ref8:43 p.m. · 6bcc308 · internal Gitea record only
- souveraine-updater4 changes
- project the tested ref onto the public forge8:55 p.m. · a818692 · internal Gitea record only
Fast-forward checked before the push, exact SHA read back after.
- review the commit that installs the gate8:15 p.m. · ec226b4 · internal Gitea record only
- carry the publication gate on the candidate ref8:14 p.m. · 07aed52 · internal Gitea record only
- describe the updater and point its urls at the public forge7:39 p.m. · 14481d9 · internal Gitea record only
The repository had no README, which policy requires, and both Cargo.toml and the package recipe named the internal forge -- a current-tree finding the candidate scan cannot forgive.
- statelog-custody4 changes
- custody: seal the second checkpoint before the repository leaves this machine7:51 p.m. · 244655d · internal Gitea record only
- new repocreated repo Fimeg/statelog-custody7:51 p.m. · forge event · internal Gitea record only
- custody: sweep 2026-08-23, parser v2 derivatives11:18 a.m. · 2011658 · internal Gitea record only
172 observations, 75 objects, first checkpoint cf5f8d6ba5ba.
- custody: first archive, canada and us federal11:14 a.m. · fcf5b6d · internal Gitea record only
26 canadian acts and regulations, us federal captures, 104 observations.