fb652024ea
gates / gates (push) Successful in 7s
R-181 CLOSED (controller v0.193.0 + v0.193.1) and proven live on demo-hp for BOTH reserve terms. The reserve is now a per-app, per-run ADMISSION decision taken before the app's first write and covering all three write legs, and it gained a size term. The refusal's wording was not weakened; the behaviour moved so it became true, verified by sha256 tree fingerprint. R-156 CLOSED — papra's template mounts the app's own data root. Precondition re-measured rather than inherited (both boxes were wiped today). Part 4, documentation only, nothing built: - R-110 WAITING-ON-OPERATOR -> READY. Ruling: option (b), the installer's publish channel moves to a TAG. Recorded with the condition that decides whether it works at all — it must cover BOTH the /scripts/ git-sync and the nine files the installer fetches from raw/branch/main. - R-115 WAITING-ON-OPERATOR -> READY. Ruling: mechanism (b), a build-side gate refusing to deploy or vouch an unpublished version. The third instance (agent v0.120.0) would have silently downgraded both demo boxes while succeeding. R-182 NEW: the periodic status refresh has no admission scope, so a refused app re-alerts on every poll (measured: a second alert pair 13s after the run's). Pre-existing in v0.192.0; deliberately not fixed in the R-181 task. capability map: the local-backup row moves to PROVEN-LIVE in BOTH halves. ROADMAP: R-165 collapses to CLOSED; R-181 collapsed into it. 07-backup-architecture.md: the reserve's contract stated as what the code provides (S-1 — an architectural contract changed in the same session). STATUS.md trimmed 150 -> 111 lines, "What's broken" no longer holds shipped work, and the stale "After:" line (pointing at work that shipped on 2 August) is fixed.
112 lines
7.4 KiB
Markdown
112 lines
7.4 KiB
Markdown
# STATUS — what works, what's broken, what's next
|
|
|
|
**Updated 2026-08-03.**
|
|
|
|
> **A view, not a source.** `documentation/backlog/OPEN-ITEMS.md` is the authority on open work; this
|
|
> page restates part of it in plain words, and **nothing may exist only here**. **Not `CONTEXT.md`**,
|
|
> which is technical state written for Claude Code — keep the two separate. **Maintenance:** update
|
|
> at the end of every session in which something shipped, broke, or was decided. One screen; cut
|
|
> items rather than extend it.
|
|
|
|
## What works right now
|
|
|
|
A blank machine boots the Felhom disc, installs itself unattended, and is claimed by the customer,
|
|
who sets their own password. They install apps from a catalogue of fifty-three, share files over the
|
|
home network, and open apps from a launcher or a shared link. Backups run on their own to three
|
|
places — the machine's drive, a second drive, and an encrypted off-site copy — and a customer can
|
|
restore files and app data from the drive alone. Proven end to end on real hardware.
|
|
|
|
**Apps come back after a power cut.** The machine tells an app the customer switched off from one
|
|
that simply did not come back, and waits for the system to finish starting before deciding instead of
|
|
glancing once, five seconds in. Hard-reset the demo box six times in a row: everything came back every
|
|
time, and an app switched off deliberately stayed off every time.
|
|
|
|
## What's broken
|
|
|
|
**The off-site copy can be erased by the machine that made it** — the credential that writes it can
|
|
also delete it. A daily snapshot is armed as a stopgap, and we have never restored from that copy.
|
|
*(R-95, R-87)*
|
|
|
|
**A full disk emails you repeatedly instead of once.** When the reserve refuses an app's backup you
|
|
are told once by the backup run — correctly — but the page showing backup status re-checks on a timer
|
|
and sends the same message again each time. Not new: as old as the reserve itself, and seen only
|
|
because we watched the alerts closely while proving the fix below. Harmless if the hub already
|
|
collapses repeats — which a comment claims and nobody has checked. *(R-182)*
|
|
|
|
## What shipped recently
|
|
|
|
**The backup partition is gone, and both demo machines run on the new shape.** Wiped and rebuilt on
|
|
3 August and taken through the whole customer journey — set up, install an app, back it up, restore
|
|
it. One storage area instead of two; the space a backup can use went from 19 GB to 65 GB on the small
|
|
machine and 45 GB to 233 GB on the big one. Three reboots each, correct every time. The two were
|
|
rebuilt deliberately differently — one from a local copy of the image, one by the ordinary customer
|
|
route with the published fingerprint checked — so the disk shape and the delivery route are both
|
|
proven, rather than one proven twice. Their previous demo apps and data are gone; that was the point
|
|
of a wipe, and you approved it. *(R-165, R-178)*
|
|
|
|
**What replaced the wall — and it now watches the right moment.** The wall was quietly doing a second
|
|
job: keeping a runaway backup from eating the space the machine needs to keep running. That job is now
|
|
explicit, and as first built it was checked too late — the big write happened first, unchecked, and
|
|
only the small write after it was refused, while the message still promised your last good copy was
|
|
untouched. **Fixed and proven on 3 August.** The machine now decides once, per app, **before it writes
|
|
anything at all**, and that one answer covers all three steps: a refused app writes nothing, is not
|
|
restarted, and the promise is now literally true — checked by fingerprinting every file before and
|
|
after. It also stopped being blind to size, so an app is no longer waved through at 96% full and then
|
|
allowed to write two gigabytes. Proven by deliberately filling a demo machine, once for each way it
|
|
can refuse. Nothing is ever deleted to make room: every app has only one local copy, so "delete the
|
|
oldest" would always mean destroying some other app's only copy. *(R-181)*
|
|
|
|
**The last of the three apps that never saved their data is fixed.** Installed nowhere, so nothing was
|
|
stranded — checked on both demo machines and in the fleet list rather than assumed. Proven by the check
|
|
that caught it, run in both directions: it clears the fixed version and still convicts the old one.
|
|
*(R-156)*
|
|
|
|
**A filling disk warns the customer before anything breaks, and a failed backup reaches you** — the
|
|
customer while there is still room to act, naming the drive and the space left; you when one app's
|
|
backup fails, with the disk figures. The customer is deliberately not told about the second: they can
|
|
free space, but they can do nothing about a failed backup. Both proven by filling a real disk. There
|
|
are two rules and not one because the serious warning fired on free space while the disk was only 91%
|
|
full — a percentage alone would have missed it. *(R-167, R-158)*
|
|
|
|
**The checks have two nets and the second emails you.** Every repository has one command that runs all
|
|
its checks, before every push. That one can be skipped, so the build server runs them again and emails
|
|
you on failure. It cannot *stop* a change — everything goes straight to the main copy with no review
|
|
step — but it notices quickly and tells you. *(R-29, R-161, R-168, R-169)*
|
|
|
|
## What we're working on
|
|
|
|
- **Now:** both of today's items are done — the reserve and the last unsaved app. Your two decisions
|
|
are written down and are ours to build.
|
|
- **Next:** building those two — moving the installer onto a labelled version so publishing is one
|
|
step you can undo, and a check that refuses to install a version nobody can download *(R-110, R-115)*.
|
|
- **After:** the off-site copy that the machine making it can still erase *(R-95, R-87)*.
|
|
|
|
## Waiting on you
|
|
|
|
- **A job, not a decision: the hub password needs changing.** A diagnostic command printed it into a
|
|
session log; nothing suggests anyone else saw it. *(R-132)*
|
|
- **Nothing else.** You settled both open questions on 3 August — the installer moves onto a labelled
|
|
version, and a check will refuse to install a version nobody can download. Both are written down and
|
|
are ours to build. *(R-110, R-115)*
|
|
|
|
## Changed since last update
|
|
|
|
- **2026-08-03** — The reserve now guards the step that fills the disk, and its promise is true; the
|
|
last app whose data was never saved is fixed. Both proven on a demo machine, not just in tests.
|
|
Earlier the same day: both demo machines wiped and rebuilt from the new base image and taken through
|
|
set-up → install an app → back it up → restore it, with the backup space ceiling gone and measured.
|
|
|
|
- **2026-08-02** — The false "host offline" warning is fixed. The hub's database was supposed to be in
|
|
a mode where reading a page cannot block a machine's status update; a one-word difference meant that
|
|
setting had **never taken effect**, for the hub's whole life. Fixed and verified live. **Also found:
|
|
the hub's own database is in no automatic backup** — it holds every machine's emergency password.
|
|
Filed, not yet fixed.
|
|
|
|
- **2026-08-02** — Boot recovery finished; six hard resets, everything back every time. Two instances
|
|
of the same hole — starting an app whose external drive was missing — were found by reading the code
|
|
and fixed the same day.
|
|
|
|
- **2026-08-02** — Thirteen mechanical checks had built up and nothing ran most of them; two were
|
|
failing quietly. Fixed. Decided the same day: the 20 GB backup partition goes away; and only this
|
|
machine and the tester's box are protected, every other box may be broken or reinstalled freely.
|