Files
felhom.eu/STATUS.md
T
admin 5c97fbc397
gates / gates (push) Successful in 8s
docs: R-166 SHIPPED — the desired/in-flight/observed split (D-b)
Controller v0.189.0 implements operator decision D-b. Docs only here; no hub
change and no hub version bump.

- architecture/02-controller-module-map.md §0a — NEW, and it is the S-1 contract:
  desired (app.yaml) / in-flight (own marker file) / observed (not persisted),
  with the rule that ties them — never derive one from another. Absent desired
  state means UNKNOWN, never "running". One file, one writer. D-b's binding
  safety rule quoted verbatim.
- 00-capability-map.md — the boot-recovery row now rests on a recorded signal,
  with the three live flows from 9201. The interrupted-operation half is marked
  IMPLEMENTED, not PROVEN-LIVE: nobody killed the controller mid-backup on metal.
- OPEN-ITEMS/ROADMAP — R-166 SHIPPED with both blocking facts and their answers;
  R-157 mechanism B CLOSED and A restated as the whole item; R-170 NEW (the
  drive-backed boot gate still infers a Stop from a container count).
- STATUS.md — the "an app can stay switched off and nothing says so" line
  rewritten to what is actually left: timing.
- CLAUDE.md — end-of-session checklist gains: confirm your own last push's CI run
  went green, BY RUN ID. The failure email is a push signal; this is the pull check.
- CONTEXT.md S-12 — the rulings, and the two lessons worth carrying: a test that
  constructs the thing it should prove the caller constructs is hollow (its
  red-proof will say so), and a field-by-field struct rebuild in a save path is a
  defect on sight.
2026-08-02 18:58:27 +02:00

85 lines
5.4 KiB
Markdown

# STATUS — what works, what's broken, what's next
**Updated 2026-08-02.**
> **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.
## What's broken
**After a power cut, an app can stay switched off — and the machine may look too early to notice.**
It now knows the difference between an app the customer switched off and one that simply didn't come
back: the customer's choice is written down, so an app meant to be running is started again however
it went missing. What is left is timing — it looks about five seconds after starting, while the
system is still coming up, and never looks again. *(R-157; the "decided the customer switched it off"
half is fixed — R-166, 2026-08-02. The same guess still lives in one other place, for apps kept on a
plug-in drive — R-170.)*
**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)*
**Three apps out of fifty-three kept their data where backups never looked.** They reported healthy;
the data would vanish on the next update. Two are fixed, the third is now clear to fix because it is
installed nowhere. *(R-156)*
**Local backups get 20 GB while apps get 50 GB.** An app that outgrows the smaller space stops being
backed up locally — and the off-site copy is made from the local one, so that stops too. Nothing is
lost: the last good copy is kept intact. *(R-163)*
**When that happens, only one page says so** — no email, no alert. The page that answers "is this app
backed up?" is the one that stays silent. *(R-158)*
**The checks now have two nets, and the second one emails you.** Every repository has one command
that runs all of its checks; it runs by itself before every push and refuses a push that fails. That
one lives on the workstation and can be skipped. So the build server now runs the same checks again,
on a machine that does not care who pushed or what they typed — and **when they fail it sends you an
email**, because a red mark on a page nobody watches is not a warning. Proven with a real broken
change, not assumed. The one thing it still cannot do is *stop* the change: every change here goes
straight to the main copy with no review step, so there is no point in the road for it to stand at.
It notices, quickly, and tells you. *(R-29, R-161, R-168, R-169)*
## What we're working on
- **Now:** the last app whose data was never saved; today's decisions written down.
- **Next:** merging the small backup partition into the large one, with the drive-filling warning and
the backup-failure alert in the same step.
- **After:** rebuilding how the machine records whether an app is meant to be running.
## Waiting on you
- **How a new version reaches a machine.** Pushing the installer publishes it — half a minute later
every new machine downloads it, with no staging and no way back but another push. And publishing is
a step we remember rather than one the release performs, forgotten twice: a fix can be live here
and still not reach a new machine. Nothing is installing today, so this is the cheapest moment to
settle both. *(R-110, R-115)*
- **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)*
## Changed since last update
- **2026-08-02** — Fixed and then doubled: thirteen mechanical checks had built up across the four
repositories and nothing ran most of them; two were failing quietly, one since 14 July. Both fixed.
Every repository now has one command that runs all its checks, it runs automatically before every
push, and the build server re-runs it after every push and **emails you when it fails** — proven
with a real broken change. One of the two failures was the setup page claiming the installer was
version 1.19.0 while machines got 1.22.0; that number is now **gone** rather than corrected,
because the page cannot know it — the installer is fetched fresh each run, so any number there is a
guess. A check refuses to let one be added back.
- **2026-08-02** — Decided: the 20 GB backup partition goes away and shares space with app data. That
changes the disk layout, so it happens before any machine is installed outside the house.
- **2026-08-02** — Decided: only this machine and the tester's box are protected; every other box,
demo boxes included, may be broken or reinstalled freely. Two of the three apps that never saved
their data are fixed; this page created.