84 lines
4.1 KiB
Markdown
84 lines
4.1 KiB
Markdown
|
|
# Rescue: unversioned source copy on archdev
|
||
|
|
|
||
|
|
Found 2026-08-11 while auditing archdev for uncommitted work.
|
||
|
|
|
||
|
|
## What it is
|
||
|
|
|
||
|
|
`/home/casey/souveraine` on archdev (10.10.20.123) is a **full copy of this
|
||
|
|
repo with no `.git` directory at all**. 236 Rust files, a live `souveraine.toml`
|
||
|
|
and `souveraine.log`, newest source files timestamped **2026-08-09 21:07**.
|
||
|
|
|
||
|
|
It is not a worktree and not a clone. Nothing tracks it. Anything written there
|
||
|
|
was one `rm -rf` away from being gone, with no reflog and no remote.
|
||
|
|
|
||
|
|
Not to be confused with `/home/casey/Projects/souveraine` on the same box,
|
||
|
|
which *is* a git repo (branch `primary`, HEAD `d2f51e9`, 107 commits behind).
|
||
|
|
That tree's 499-line uncommitted sessiond diff was checked line by line and is
|
||
|
|
**already upstream** — 356 of 359 substantive added lines present at HEAD, the
|
||
|
|
3 misses being later refinements. No loss there.
|
||
|
|
|
||
|
|
## How it was audited
|
||
|
|
|
||
|
|
Every file under `src/ surfaces/ packaging/ tools/ docs/ scripts/` in the copy
|
||
|
|
was hashed with `git hash-object` and tested against this repo's object
|
||
|
|
database with `git cat-file -e`. Content that has ever been committed —
|
||
|
|
on any branch, at any point — is known to the object db. What isn't known has
|
||
|
|
never been committed anywhere.
|
||
|
|
|
||
|
|
1545 files checked. 175 unknown, of which 165 belong to the vendored
|
||
|
|
`packaging/upower-souveraine` submodule (separate object db — expected).
|
||
|
|
|
||
|
|
**Ten files remained.** Two are identical to HEAD (untracked paths). The rest
|
||
|
|
are below.
|
||
|
|
|
||
|
|
This method generalises: to prove a stray tree holds nothing new, hash its
|
||
|
|
files and ask the object db. Timestamps and `diff` cannot tell "never
|
||
|
|
committed" from "committed then superseded". Blob identity can.
|
||
|
|
|
||
|
|
## What is actually unique
|
||
|
|
|
||
|
|
The copy sits just after `b2774c8` (*sessiond: a power seam that cannot report
|
||
|
|
an outcome it does not have*, Aug 9 19:31) and carries follow-up work done at
|
||
|
|
21:07 that was never committed. That commit's own message says "Session.qml
|
||
|
|
keeps the legacy executor until this is exercised on hardware" — this is the
|
||
|
|
next step, orphaned.
|
||
|
|
|
||
|
|
Roughly 50 substantive lines with no upstream equivalent:
|
||
|
|
|
||
|
|
- `device_state.rs` — `power_request_failed()`. Releases the in-flight power
|
||
|
|
latch **only on the failure path**, because success is the machine going
|
||
|
|
down. Without it a refused suspend (lid policy, a blocking inhibitor) leaves
|
||
|
|
the latch set and deafens the verb for the rest of the uptime.
|
||
|
|
- `protocol.rs` — `logind_capability()` plumbing for the capability query.
|
||
|
|
- `server.rs` — `logind_can()`: ask logind live (`CanPowerOff` etc.) before
|
||
|
|
firing a power verb, and refuse honestly instead of firing one the machine
|
||
|
|
cannot honour. Deliberately not cached: hibernate depends on swap that can
|
||
|
|
change after boot, and a cached answer would be exactly the shadow copy
|
||
|
|
doctrine §4 forbids. Carries a parse fix — an earlier version lived in `sh`
|
||
|
|
behind two escaping layers, matched a literal `\"` busctl never emits, and
|
||
|
|
left every capability reading "unknown" on the phone.
|
||
|
|
- `HidController.qml` — 8 lines, `_notReadyReason()` threading.
|
||
|
|
|
||
|
|
Superseded, do not resurrect: `Action::Dim => brightnessctl set 10`. That is
|
||
|
|
the absolute-value form `eb0292c` replaced with a percentage twelve minutes
|
||
|
|
after this copy was made. `Face.qml`'s `joinHands` landed upstream already.
|
||
|
|
|
||
|
|
## Contents here
|
||
|
|
|
||
|
|
- `files/` — the ten files verbatim as found on archdev.
|
||
|
|
- `vs-HEAD-517d8c1.diff` — their delta against this repo at rescue time.
|
||
|
|
|
||
|
|
**Not merged.** The tree has moved 100+ commits since; applying this needs a
|
||
|
|
human who knows the sessiond power seam. Preserved so the decision can be made
|
||
|
|
later instead of never.
|
||
|
|
|
||
|
|
## Follow-ups
|
||
|
|
|
||
|
|
- Decide whether the logind capability gate lands. If yes it wants rebasing by
|
||
|
|
hand, not `git apply`.
|
||
|
|
- Delete or convert `/home/casey/souveraine` once the decision is made — an
|
||
|
|
unversioned copy of the repo on a build box is a standing hazard.
|
||
|
|
- `/home/casey/Projects/souveraine` on archdev is 107 commits behind and holds
|
||
|
|
`.git.broken-2026-07-29/`. Worth reconciling.
|
||
|
|
- Paths differ per machine: the souveraine remote is `gitea` on the laptop and
|
||
|
|
`origin` on archdev. Check `git remote -v` before blaming the network.
|