Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

I2483

The UI is published as a snapshot: read once at the published commit and carried by the site at /ui

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
2
Waiting on
none
Holds back
Behind it in all
1
Evidence
4 of 4
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I2483

majordomus plan verify I2483

majordomus plan done I2483

What it is

Objective
Let a person who has not cloned the repository open majordomus ui on the public site: the UI's own answers for every screen and panel, and for the inspectors they link to up to a bound, written as static files at the commit the site publishes, every page saying it is a snapshot and none of them leading to nothing.
Why
The owner asked on 2026-10-12 that majordomus ui be on GitHub Pages and chose a static snapshot read at a pinned commit over documentation only (ADR 0141). Until now the web topology declared the UI served-only, the site never named it, and the product's primary surface (ADR 0135) could be seen only by running a server in a checkout.
Now
The UI is a native route of the shared server and of nothing else. gh-pages holds no /ui. A static copy made by saving the pages would keep links to routes and queries a file host cannot answer, and its script would read the page again from a host that ignores the query.
Wanted
`majordomus web report ui-snapshot [--limit N] [--budget-seconds S]` asks the UI in-process for every screen and panel and then, one page per family in turn until the page bound or the time budget is reached, for the pages they link to, and writes each answer under target/web/ui-snapshot: links between pages relative, an inspector's query a directory of its own, a link only a process answers led to the snapshot's page about the live UI with the path it meant, a link to a published surface kept, the assets copied, the body marked data-snapshot so the script reads nothing again, and every page stamped with the commit, the time and the executable. The producer's surface.json declares it published-only at /ui, built from this commit, so the topology holds it beside the served UI without a collision. The Pages workflow builds it in a job of its own beside rustdoc and the deploy job places it at /ui after the site's checks, refusing a snapshot of another commit. docs/MAJORDOMUS_UI.md and docs/GITHUB_PAGES_ARCHITECTURE.md say what a visitor sees and what a snapshot cannot know.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • the snapshot holds every screen its own navigation names, and a second run with a smaller bound leaves no page of the first
  • no page keeps an absolute link under /ui, and every relative link names a file the snapshot holds
  • a link to the Cockpit, the API or a form leads to the page about the live UI, carrying the path it meant
  • every page says the commit it was read at, and the script fetches no panel and refreshes nothing in a snapshot
  • the declaration is a published-only surface at /ui built from this commit, and the topology validates with it beside the served UI
  • the Pages deploy places the snapshot of the commit it publishes at /ui and refuses one of another commit
Validation
cargo test --lib web::report::snapshottest/run.sh 1092_the_ui_snapshot_holds_every_screentest/run.sh 1093_the_ui_snapshot_links_nothing_absenttest/run.sh 97_pages_fast_pathtest/run.sh 26_ci_wiring
Evidence required
ui_snapshot_unit_testsui_snapshot_case_1092ui_snapshot_case_1093ui_snapshot_on_pages
Evidence present
ui_snapshot_unit_testsui_snapshot_case_1092ui_snapshot_case_1093ui_snapshot_on_pages

Scope

Touches
apps/majordomus-cli/src/web/report/snapshot.rsapps/majordomus-cli/src/web/report/mod.rsapps/majordomus-cli/src/commands/web.rsapps/majordomus-cli/src/cli.rsshare/ui/ui.js.github/workflows/pages.yml.ai/repo/adrs/0141-the-ui-is-published-as-a-snapshot-read-at-one-commit.md.ai/repo/project/issues/I2483.yamldocs/MAJORDOMUS_UI.mddocs/GITHUB_PAGES_ARCHITECTURE.mdtest/cases/1092_the_ui_snapshot_holds_every_screen.shtest/cases/1093_the_ui_snapshot_links_nothing_absent.sh
Not
unknown: the record declares no `non_scope`
Depends on
Priority
p1
Profile
implementation
Parallel safe
false
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-10-12
Updated
2026-10-13T12:49:21Z
Started
2026-10-13T12:47:49Z
Verified
2026-10-13T12:48:08Z
Completed
2026-10-13T12:49:21Z

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

Nothing is wrong with these records.