Skip to main content

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:

CheckWhen it runsWho writes the card
Daily checkupEvery day at 8:00healthcheck.py
Link and routing checkMondays at 8:30vault-lint-check.py
Self-repair checkEvery 30 minutesselfrepair_card.py

What happens, step by step​

  1. On Monday morning the link check runs. It fixes the safe things itself, such as a link it can repair with no doubt.
  2. 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.
  3. At the end of its run it writes a card. It writes one even on a quiet week.
  4. The owner opens the Health tab. The row for the link check is amber with a 1.
  5. The owner taps the row and reads the finding, in plain words written by the check.
  6. 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​

PartWhat it does
healthcheck.pyThe daily checkup. Writes its card at the end of each run.
vault-lint-check.pyThe weekly link and routing check. Writes its card at the end of each run.
selfrepair_card.pyWrites the self-repair card. It reads the same numbers as the repair job, but decides nothing and fixes nothing.
health_state.pyThe shared card format. Every check writes the same shape.
/api/healthReads the cards for the page. A recheck button asks a check to run again.
inventory.jsPaints 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​

No model writes the card

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​