The status page's overview (M6.6c) #182

Merged
dongar merged 1 commits from overview into main 2026-10-26 16:11:57 +00:00
Collaborator

Slice c of the status page (#109): the home page now answers "what is each agent doing, what's waiting, and why?".

What it shows, per agent

  • Right now: the run under way (kind, role, item, turns, a link to the latest turn), or "idle since T". A run left open with no call for 15 minutes shows as maybe interrupted, since a crash leaves its run open.
  • Active item, then the open items grouped:
    • nisse-dev: Running, Queue (your "do #N next" first, then oldest, as _queue runs them; items whose build VM is blocked are held out of line, unless it's a question), Parked (wait, note, grace deadline, pending action, held merge), Blocked (each dependency, linked).
    • nisse-review: Running, Due, Draft/WIP, Watching, At the round cap, Failed, Stopped, with rounds, failed attempts and sign-off.
    • Unknown positions go under "Other" by their raw name.
  • Blocked build VMs (host, cause, reason, the item that found it, since).
  • Recently closed: the last 10, with outcome.
  • Kept benchmark runs are listed below the agents.

Links

--config NAME=YAML takes the agent's own config file. The page reads only gitea.url, matrix.room_id, and per project repo and build_host.address/.user. The build VM settings are one more than the plan named: they're needed to tell which queued items sit on a blocked VM. It never resolves ${…}; a setting given that way counts as unset. Without a config, items show with no links and nothing is held. Any address that reaches an href must be http(s).

Refresh

<meta http-equiv="refresh" content="60">, so still no script. ?refresh=0 stops it, with a link on the page.

Tests

  • nisse-ui/tests/test_ui_overview.py: items written by nisse-dev's items.save/Loop/block_vm and nisse-review's PR/data(). They cover groups and reasons, queue order, VM holds (including the question exemption), links with and without config, running / maybe interrupted / idle, no call record, refresh on/off, unknown positions and fields, an unreadable store shown as a problem, escaping (javascript: never becomes a link), files unchanged after browsing, and the config reader (a planted secret is never held). The CLI rejects a --config with no matching source.
  • nisse-core: CallReader.last_call().
  • Mutation checks, all caught: queue order reversed, question exemption dropped, http(s) check dropped, staleness never true, refresh switch ignored, conversation wait not named.

Live check

I ran it against this box's bring-up stores (nisse-dev in /root/nisse-e2e, nisse-review in /root/nisse-review) with their configs. The parked conversation and 5 closed dev items have issue and thread links, and the 10 closed reviews link to their PRs on gitea.dongar.net. Both predate the call record, so they say "no call record". Every page returned 200.

Docs

X6 says which config settings the page reads. M6.6b is marked done (#181) and M6.6c done.

To view: uv run nisse-ui --source dev=STATE_DB --config dev=YAML ... and tunnel to 127.0.0.1:8765, as before.

🤖 Generated with Claude Code

https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk

Slice c of the status page (#109): the home page now answers "what is each agent doing, what's waiting, and why?". ## What it shows, per agent - **Right now:** the run under way (kind, role, item, turns, a link to the latest turn), or "idle since T". A run left open with no call for 15 minutes shows as **maybe interrupted**, since a crash leaves its run open. - **Active item**, then the open items grouped: - nisse-dev: Running, **Queue** (your "do #N next" first, then oldest, as `_queue` runs them; items whose build VM is blocked are held out of line, unless it's a question), **Parked** (wait, note, grace deadline, pending action, held merge), **Blocked** (each dependency, linked). - nisse-review: Running, Due, Draft/WIP, Watching, At the round cap, Failed, Stopped, with rounds, failed attempts and sign-off. - Unknown positions go under "Other" by their raw name. - **Blocked build VMs** (host, cause, reason, the item that found it, since). - **Recently closed:** the last 10, with outcome. - Kept benchmark runs are listed below the agents. ## Links `--config NAME=YAML` takes the agent's own config file. The page reads only `gitea.url`, `matrix.room_id`, and per project `repo` and `build_host.address`/`.user`. The build VM settings are one more than the plan named: they're needed to tell which queued items sit on a blocked VM. It never resolves `${…}`; a setting given that way counts as unset. Without a config, items show with no links and nothing is held. Any address that reaches an `href` must be http(s). ## Refresh `<meta http-equiv="refresh" content="60">`, so still no script. `?refresh=0` stops it, with a link on the page. ## Tests - `nisse-ui/tests/test_ui_overview.py`: items written by nisse-dev's `items.save`/`Loop`/`block_vm` and nisse-review's `PR`/`data()`. They cover groups and reasons, queue order, VM holds (including the question exemption), links with and without config, running / maybe interrupted / idle, no call record, refresh on/off, unknown positions and fields, an unreadable store shown as a problem, escaping (`javascript:` never becomes a link), files unchanged after browsing, and the config reader (a planted secret is never held). The CLI rejects a `--config` with no matching source. - `nisse-core`: `CallReader.last_call()`. - Mutation checks, all caught: queue order reversed, question exemption dropped, http(s) check dropped, staleness never true, refresh switch ignored, conversation wait not named. ## Live check I ran it against this box's bring-up stores (nisse-dev in `/root/nisse-e2e`, nisse-review in `/root/nisse-review`) with their configs. The parked conversation and 5 closed dev items have issue and thread links, and the 10 closed reviews link to their PRs on gitea.dongar.net. Both predate the call record, so they say "no call record". Every page returned 200. ## Docs X6 says which config settings the page reads. M6.6b is marked done (#181) and M6.6c done. To view: `uv run nisse-ui --source dev=STATE_DB --config dev=YAML ...` and tunnel to 127.0.0.1:8765, as before. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
dev-agent added 1 commit 2026-10-26 04:45:53 +00:00
The status page's overview (M6.6c)
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 2m35s
CI / e2e (pull_request) Successful in 4m6s
d02f8c1fbb
The home page now shows, per agent: the run under way (or idle since
when, and runs a crash may have left open), the active item, nisse-dev's
queue in its own order with items on a blocked build VM held out, parked
items with their wait and note, blocked items and VM blocks, review PRs
by position, and the last ten closed. Kept benchmark runs follow.

Item data is read tolerantly (nisse-dev's own parser refuses unknown
fields); contract tests write items with the agents' own code. Links to
issues, PRs and threads come from --config NAME=YAML, reading only the
Gitea address, the Matrix room and each project's repo and build VM.
The page reloads every minute by meta refresh; ?refresh=0 stops it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
dongar approved these changes 2026-10-26 16:11:54 +00:00
dongar merged commit 516a328618 into main 2026-10-26 16:11:57 +00:00
dongar deleted branch overview 2026-10-26 16:11:57 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dev/nisse#182