The Health tab
The Health tab shows what the box's health checks found, not just whether they ran. A check that found 17 real problems can never show up as a green tick.
Where you see it
At the top is one headline, like "18 things need you" or "All clear". Under it is one row for each check.
- Amber with a number means the check found things.
- Green means it found nothing.
- Dashed means the check could not report, so the box is not sure.
Tap a row to open its card. The card says what the check looks at, what it found, and sometimes a proposed fix. Buttons at the bottom: Approve, Decline, and Talk about it.
There are three checks:
| Check | When it runs | Who writes the card |
|---|---|---|
| Daily checkup | Every day at 8:00 | healthcheck.py |
| Link and routing check | Mondays at 8:30 | vault-lint-check.py |
| Self-repair check | Every 30 minutes | selfrepair_card.py |
What happens, step by step
- On Monday morning the link check runs. It fixes the safe things itself, such as a link it can repair with no doubt.
- It finds two notes with the same name and cannot tell which one a link means. That is a judgment call, so it leaves it alone.
- At the end of its run it writes a card. It writes one even on a quiet week.
- The owner opens the Health tab. The row for the link check is amber with a 1.
- The owner taps the row and reads the finding, in plain words written by the check.
- The owner taps Talk about it. The finding drops into the chat box, and now Claude can explain it and suggest what to do.
What powers it
| Part | What it does |
|---|---|
healthcheck.py | The daily checkup. Writes its card at the end of each run. |
vault-lint-check.py | The weekly link and routing check. Writes its card at the end of each run. |
selfrepair_card.py | Writes the self-repair card. It reads the same numbers as the repair job, but decides nothing and fixes nothing. |
health_state.py | The shared card format. Every check writes the same shape. |
/api/health | Reads the cards for the page. A recheck button asks a check to run again. |
inventory.js | Paints the tab. |
The cards are small files kept on the box only. They are live state, not saved in git.
Why it works this way
Every word on a card is written by the check's own code. It says the same thing the same way each time. So you can trust what you read at a glance. A model only joins in when you tap Talk about it, and then it is plainly a chat.
Why almost nothing has an Approve button. An item gets Approve only when the fix is a pure lookup with no judgment. But each check already makes those safe fixes before it writes its card. So what is left on a card is, by design, the judgment calls: a rename, or picking between two files with the same name. Putting an Approve button on a guess would be wrong. In practice, nothing carries one today.
Why the self-repair card is its own program. The repair job must stay very simple and quiet. Teaching it to also write a card would give it new work and a new way to fail. So a separate small program reports on it instead.
Two more care points. A card is never trusted about its own freshness. If the routine that writes it is no longer scheduled, the row says it is not sure. And because a card is written on every run, a quiet week and a dead check never look the same.
The email did not go away. It is still the "come look" ping. The tab is where you act.
Connected to
- The daily checkup: what the 8:00 check looks at.
- Self-repair: the job behind the 30-minute card.
- The Working for you panel: the panel this tab lives in.
- Housekeeping: keeping the vault's links in order.
- Approvals: how approving works elsewhere.