docs: localisation slice 2 CLOSED (controller v0.254.0) — R-577, R-578, and a probe rule
gates / gates (push) Successful in 23s
gates / gates (push) Successful in 23s
10-localisation.md §10.3: the saved notes follow the box language at write time, with the one-night consequence stated rather than hidden; the globe, and the table of WHO reads which page and where its globe posts — getting that wrong makes the button do nothing, which it did on /recovery until the live probe found it. Decision 6 superseded a second time; decision 8 (a claim carries the visitor's language) recorded. Decision 5 of §11's anonymous-surface line: changing what a VISITOR reads is within what an anonymous request may do; changing anything the household owns is not, and POST /lang can do only the first. R-578 — the deadlock, and why it is a row rather than a fixed bug: UpdateOffboxStatus holds the settings write lock while running its callback, boxLang() wants the read lock, sync.RWMutex is not reentrant. On a real box an off-site run would have hung FOREVER holding that lock. The symptom was a test suite going from 8 minutes to a 25-minute timeout. Fixed and guarded, but the guard covers one package and three helper names; the class needs a gate. R-577 — a guest share visitor still has no way to pick a language, and the household's setting is the wrong default for a stranger. Deliberately left, pinned by a test, and the operator's to decide because it is a promise the share feature makes. .claude/rules/live-probes.md, unconditional: never send a deploy request for an app that is not installed, not even expecting a refusal — the endpoint accepts first and validates later. Two sessions made that mistake in two days, the second WITH a prompt line forbidding it. A prompt is read once; a rule file is loaded every session. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -1,55 +1,46 @@
|
||||
# STATUS — what works, what's broken, what's next
|
||||
|
||||
**Updated 2026-09-18 (evening) — the sentences the program writes now follow the language, error messages included.**
|
||||
**Updated 2026-09-18 (night) — the language work is finished, and the switch is now a globe.**
|
||||
|
||||
> **Ready for a volunteer: yes, unchanged.** A Hungarian household sees exactly what it saw
|
||||
> yesterday. I did not read the pages to decide that — I compared them, letter by letter.
|
||||
> **Ready for a volunteer: yes.** A Hungarian household sees what it saw yesterday, apart from one
|
||||
> deliberate change: the two small "Magyar / English" links at the bottom of the menu are now a globe.
|
||||
|
||||
**Decisions I took.** None you have to reverse. One choice you were asked for stayed on its own
|
||||
stated default: notes saved to disk overnight will be written in the box's language at the time they
|
||||
are written, so a household that switches sees last night's note in the old language until the next
|
||||
run. That is what the plan says happens if nobody decides.
|
||||
**Decisions I took.** One you were asked for, taken on its own stated default: **if someone switches
|
||||
the claim page to English and then claims the box, the box becomes English.** They chose it, and the
|
||||
first screen they see should be in it. You can reverse it; nothing else depends on it.
|
||||
|
||||
**What I did.** Two releases. The first moved the sentences the program writes into the pages — the
|
||||
little green line after you press a button, the yellow banners, the country names, the answers the
|
||||
page fetches in the background. The second did the **error messages**: about 180 sentences that are
|
||||
written deep inside the program and printed by whatever catches them. All of them now travel with a
|
||||
short code, so the page that shows them writes them in your language. **None are left in Hungarian
|
||||
only.**
|
||||
**What I did today.** Three releases, and the language job is done.
|
||||
|
||||
**My mistake, and what I did about it.** My first test of an error message asked the box to install an
|
||||
app with nothing filled in, expecting a refusal — and it installed the app instead, because that
|
||||
particular one needs nothing filled in. **This is the same mistake the session before mine made and
|
||||
wrote down, and I repeated it.** I stopped the app and removed it the way a customer would, with its
|
||||
data, and checked: no container, no folder, no leftover storage. The 23 apps that should be running
|
||||
are all running. The real lesson is sharper than "pick a different app": that button accepts first and
|
||||
checks afterwards, so it cannot be used to test a refusal at all. The tests were rewritten to use
|
||||
requests that are refused before anything is created.
|
||||
1. The sentences the program writes into the pages.
|
||||
2. The error messages — about 180 of them, written deep inside the program.
|
||||
3. Today's last piece: **the notes the box saves overnight**, and **the globe**.
|
||||
|
||||
**How I know Hungarian did not change.** A check freezes every Hungarian sentence as it stood before I
|
||||
started — 7 467 of them — and refuses any that is not exactly that, down to a comma. Then on the box:
|
||||
ten Hungarian pages before and after, six identical, the other four differing only in a clock ticking
|
||||
over, an app unhealthy for a minute, and the "update available" line.
|
||||
**The globe.** Two text links at the bottom of the menu asked you to recognise two words as links,
|
||||
and they wrapped. Now there is one globe — the symbol everyone already reads as "language". Click it
|
||||
and a small list opens: Magyar, English, with the current one ticked. **The sign-in page and the claim
|
||||
page have it too**, which matters: someone who cannot read Hungarian could not previously find their
|
||||
way out of Hungarian before signing in. Their choice is kept in their own browser only — it never
|
||||
changes what the household has chosen, and a signed-in household never picks up a stranger's choice.
|
||||
|
||||
**Two things went wrong in my own tools, and I am naming them rather than tidying them away.** My
|
||||
bulk converter quietly dropped the second half of sentences that were written across two lines — seven
|
||||
of them — and **the freeze-check did not notice**, because each surviving half really was a real old
|
||||
sentence. What caught it was two tests that read the sentence a customer would see. And my counting
|
||||
script ignored capital letters, so it told me "none left" while five were. Both are written down with
|
||||
a number.
|
||||
**One thing to expect, and it is the choice you were offered.** The notes saved overnight are written
|
||||
in the box's language at the moment they are written. If you switch language, last night's note stays
|
||||
in the old language until the next night rewrites it.
|
||||
|
||||
**What is left.** The notes saved to disk overnight — one more release. Plus a handful of small gaps,
|
||||
each with a number.
|
||||
**What broke, and what I did about it.** **I introduced a freeze.** The code that writes the overnight
|
||||
note asked the box "what language are you?" at a moment when that question could not be answered —
|
||||
and it would have hung there **forever, holding a lock the rest of the box needs**. On a real machine
|
||||
an overnight cloud backup would have stopped and taken everything else with it. The test run caught it
|
||||
by taking 25 minutes instead of 8. It is fixed, and there is now a check that names the exact line in
|
||||
a second instead of hanging. I also found and fixed a second one before it shipped: the recovery
|
||||
screen's globe would have looked like it worked and done nothing.
|
||||
|
||||
**Rows.** One closed, five opened across the day. The register went from **264** to **269** open rows.
|
||||
**Rows.** One closed (the whole language job), two opened. The register went from **269** to **271**.
|
||||
|
||||
**The floor is raised, as you asked.** The fleet minimum went from 0.250.0 to **0.253.0**. The N100
|
||||
demo box took it by itself in about twenty seconds and is healthy, with its other four apps still
|
||||
running; the HP demo box already had it. **The two boxes that are switched off did not get it** — Peti's
|
||||
has been off for 65 days on a much older version, and Tester 1 for a day. They will take it on their own
|
||||
whenever they come back, which is how a floor always works, and neither has been tried on this version.
|
||||
|
||||
**Needs you.** Nothing. If you do nothing: the two sleeping boxes update themselves when they wake.
|
||||
**Needs you — one decision.** **Raise the floor to 0.254.0?**
|
||||
- **If you do:** every box gets the globe on its next check-in, and the saved notes start following
|
||||
the language. The two sleeping boxes take it whenever they wake.
|
||||
- **If you do nothing:** households keep the two text links. Nothing breaks, and nothing is at risk.
|
||||
- I would raise it — this release changes what every household sees, and seeing it is the point.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user