Incomplete: no test run recorded yet
senku. qa.html
Family QA

Two players, two phones

This is the test script my household runs against its own mission control: six checks, each naming who acts, what to do and what PASS looks like. O is Oleg. R is Roman. Every family test runs from a phone, because the phone is the device the family actually holds. The laptop appears once, at the very bottom, fenced off for the operator. The people the system serves are the ones testing it, which is the only QA that counts.

STAGE, AT A GLANCE

The system under test was built between 2026-08-01 and 2026-08-03, three days old when this script was written on 2026-08-03, before its first run, so nothing below is a result. It was rewritten the same day, and the reason stays on the page: the first draft handed O terminal commands as if they were family tests. The house rule that forced the rewrite: a family app is tested from the family's own device, the phone. Whatever needs a terminal is operator work and now sits in a fence at the bottom. Every failure the run finds is a deliverable, not an embarrassment. When the first run happens, its outcome will be published here.

system built 08-01 to 08-03 players 2 tests 6 terminals for players 0 runs recorded 0 known untestable 4
01 / SETUP, ONCE

One install for R, nothing at all for O

One value is deliberately not printed on this page. A notification topic name is a bearer key: whoever holds it can read the stream and post into it, so the script points at the private setup note instead. Everything else is here in full.

  1. O installs nothing. His alerts already arrive on his phone as Compass web-pushes, rerouted there on 2026-08-03 and verified with a live push the same evening. A push prefixed ALARM or TURN is the board speaking, not a person. This step used to say: install ntfy and subscribe to the board-inbox topic. The reroute made that stale the day it was written, so the correction stays here in place.
  2. R installs the ntfy app on his phone and subscribes to his own topic, the one his cases page derives. That is the one unprinted value; the assistant holds the name, and the setup note carries it. R's stream is deliberately not on his father's phone: that separation is a safety decision, so each player's channel stays exactly one person's.

The old step three, a laptop paste that turns on the recurring pushes, was operator work wearing a family costume. It now lives in the operator fence at the bottom, and on the morning of 2026-08-04 the operator landed its turn-push half: installed and loaded, though not yet watched through a single quiet interval. T3 starts after that first watched interval, not before.

02 / THE SIX TESTS

Each one names who acts and what PASS is

Run them in order, every one from a phone. The tick under each test saves only in this browser, so a stranger reading this page always sees an unticked list. The record that matters goes to the assistant in chat, per the reporting section.

T1

Your turn, on your own device

R phoneO view built, dark on his phone5 min

R opens cases.senku.im on his phone. O still has no move here, but the reason changed on 2026-08-04, and the old sentence stays because corrections live on this page: it used to say his phone turn view does not exist yet. It exists, inside his own Decisions app, and that morning it was proven end to end: the board sealed his turn into an encrypted feed and the operator decrypted it back independently, one card on his turn, three running on stated defaults, R present only as a count, and the count was zero. What his phone shows is still nothing, honestly labelled: the deployed app holds no decryption key, so the live view answers not yet connected. One command places the key, a one-line environment grant into the deployed app; the assistant's own tooling refuses to run it for an agent, and both ends of that key are set by O's hand. Until then his turn reaches him as Compass pushes only, and the stand-in command stays in the operator fence, not with him as a player.

PASS  R sees his page with his six questions and nothing about O's cards. Each player's view is theirs alone, and the sealed feed obeys the same wall: R rides in it as a count, never as text. The unreachable half is item one of the untestable list below, one operator command from closing, not worked around with a terminal.
T2

The answer loop, the real collaboration test

O phone + chatR phone10 min

R picks one of his six questions and posts his answer to his own topic from his phone. That topic is deliberately not on O's phone, so O never reads R's stream directly; he tells the assistant in chat, also from the phone, and the board recompiles. What O then confirms is the board speaking: the turn change landing on his phone as a Compass push. Whether the question actually moved on the board is confirmed in the operator fence afterwards, by the operator, not by the players.

PASS  The answer crossed from R's phone to the board and came back to O as the board's own push, with nobody in the middle relaying it by voice. That loop is what multiplayer means here.
T3

Silence is golden

O passiveR passive30+ min

With the operator's unlock step done (see the fence below), both do nothing. The notifier speaks only when the set of things-on-your-turn changes, never on a timer. Then O answers or changes something real.

PASS  No push arrives while nothing changes; a push during quiet is a bug. After the real change, exactly one push lands within thirty minutes, carrying a click URL.
T4

Find yourself on the public board

O phoneR phone5 min, play it as a game

Both open board.senku.im on their phones. R hunts for any trace of himself: name, his questions, when he was last active, anything at all. O hunts for the family.

PASS  Neither finds a person. The page shows work as a workshop, four stations, never people. This is the member wall being tested by the people it protects.
T5

Read the board together

O + R phones, same room5 min

The public board claims a reader gets the state of the operation in about ten seconds. Test the claim: both open board.senku.im together, and each says out loud, with no help, where the bottleneck is and what is waiting. This test replaced a laptop ritual, which was tooling, not family; the ritual lives on in the fence.

PASS  Both point at the same bottleneck, and nobody needed a narrator. The board reads like a story of the day that both can follow.
T6

Judge the public story

O + R phones5 min

Both read the mission page with one question each: does it claim anything we have not actually seen work today?

PASS  No. Anything oversold is a bug of the worst kind. Say so.
03 / NOT TESTABLE YET

What cannot be tested, honestly

  1. O's phone turn view, built and proven but dark on his phone. This item said the view did not exist; corrected 2026-08-04, it had been in his Decisions app all along, and its first sealed turn feed was written and independently decrypted back that morning. What stays untestable is the phone half: the deployed app holds no decryption key, answers not yet connected, and only O's own hand places the key. One environment grant, his to run, separates this item from deletion. Until then his turn arrives as Compass pushes only, and T1 records the gap as a finding instead of hiding it behind a terminal command.
  2. Recurring pushes, until one quiet interval is watched. The unlock in the fence below was run on the morning of 2026-08-04, while this page was being corrected and while that work was still landing: the turn-push scheduler is installed and loaded, and nobody has yet observed it through a single interval. That observation is what T3 waits on now.
  3. R's turn view carries nothing right now, and the 2026-08-04 sealed feed measured his count at exactly zero. That is the true state of the board, not a bug; T2 exists to create real motion instead of faking some.
  4. A kids' station does not exist on the board, and cannot until its two preconditions and O's consent. R can verify its absence in T4, which is the point.
04 / REPORTING

Every failure is one line in chat

Every FAIL, every oddity, every "this felt wrong" goes to the assistant in chat, one line each, from the phone like everything else. That channel is the bug tracker; the board's current round of fixes all started as exactly such one-liners. After the first full run, this page gets its results section: what passed, what failed, what got fixed.

Why a family checklist is public at all: the house rule is that everything built here gets a public page, and a QA script is a thing that was built. The three redactions on this page are pointers, not holes. A household that wants to test its own board can copy the shape whole: two players, six phone tests, a named PASS for each, an honest list of what cannot be tested yet, and a fence that keeps operator tooling out of the players' hands.

script written 2026-08-03 against a system built 2026-08-01 to 08-03 · rewritten the same day so every family test is phone-only · setup corrected the same evening: O's alerts are Compass web-pushes now, not ntfy · corrected 2026-08-04: O's turn view exists and its first sealed feed was proven that morning; the phone half waits on one key placed by his hand · the turn-push scheduler landed the same morning, unwatched so far · runs recorded: 0 · results will be published on this page, including the failures
05 / THE FENCE

Operator checks. Not part of the family test

LAPTOP ONLY · ASSISTANT OR OLEG-AS-OPERATOR · NEVER A PLAYER

Everything below needs the laptop, and none of it is the family's job. The assistant runs these, or Oleg wearing the operator hat, never Oleg as a player. If a family member is ever asked to type anything in this list, that is a bug in the process, and it gets reported like any other FAIL.

  1. The unlock for T3: the launchd paste from the setup note. Its turn-push half, the one T3 depends on, was run on the morning of 2026-08-04 and the scheduler is installed and loaded; the rest of the paste had not landed at the time of writing. Confirming it holds before T3 stays operator work. The plist names stay in the setup note, off this page.
  2. The stand-in while O's phone view waits on its key: node bin/whose-turn.js oleg in the project repo. Expected, as sealed and measured on 2026-08-04: exactly one card on his turn and three more running on a stated default. Which card it is stays off this page; he will know it when he sees it.
  3. After T2: node bin/standup.js should show R's answered question moved. Then node bin/standup.js --mark sets the new baseline, and node bin/groom.js should propose nothing to kill. If it proposes something, it goes to the family in chat as a question, never as a done deed.