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
I1031
A served surface says which checkout it is serving
Where it stands
devtask.issue- Readiness
- review implementation is declared finished and completion is not recorded
- Status
- VERIFY
- Can start
- not now
- Milestone
- Milestone status
- ACTIVE
- Wave
0- Waiting on
- none
- Holds back
- none
- Behind it in all
0- Evidence
2of2
Moves
plan.transitionWhat it is
- Objective
- Make every surface a process serves name the repository it is serving — its root and its identity — so that a reader can tell at a glance whether the answers in front of them come from the tree they are working in.
- Why
- This cost a real hour. A browser held a Swagger page from a server that had exited, its requests failed with a message blaming CORS, and the live server on another port turned out to be serving a scratchpad worktree of a different session entirely — so even the document being read was that other tree's, including a sentence about the routes that this tree had already corrected. Nothing on the page said which checkout answered it. Several sessions share one machine and each may bind its own server; a surface that does not name its tree invites exactly this conclusion, that the tool is broken, when the tool is fine and the address is wrong.
- Now
- Half of this landed on 2026-09-10 outside the plan. ADR 0035 added repository::git_identity, and the home page and the index route answer it beside the checkout's own repository_id and linked_worktree, so a reader can tell which repository and which checkout answered; the identity comes from the repository model and names no host path (PR #153, PR #164). Two criteria are still open: the interactive API shell (apps/majordomus-cli/src/http/swagger.rs) names neither root nor identity, and no test serves two roots and proves each surface names its own. Measured on master 6042f4286, 2026-09-10.
- Wanted
- Every served surface carries the repository root and identity it is answering for, close enough to the content that a reader sees it without asking for it.
- Done when
- unknown: the record declares no `completion`
- Risk
- The obvious fix — printing the root — is the one to refuse: it would leak the host's directory layout to whoever can reach the socket, and the incident is solved by saying which checkout answered, not where it lives.
Acceptance
- The home page names the repository root and identity the process is serving, not only the surfaces it exposes
- The interactive API shell names the same root, so a page fetched from one server cannot be mistaken for another's
- The identity comes from the repository model rather than from a second inspection
- No surface names the repository's location on the host: the identity says which checkout answered, never where it sits, and a test proves no served or published output carries an absolute path
- The behaviour is exercised by a test that serves two roots and proves each surface names its own
- Validation
cargo test --workspace --all-featuresbash test/run.sh- Evidence required
identity_on_surfacespublished_carries_no_path- Evidence present
identity_on_surfacespublished_carries_no_path
Scope
- Touches
apps/majordomus-cli/src/http/router.rsapps/majordomus-cli/src/http/swagger.rsapps/majordomus-cli/src/web/home.rstest/cases/3110_a_served_surface_names_its_checkout.sh- Not
Publishing an absolute developer path to anything but a loopback surfaceA second identity beside the one the repository model already holdsChanging what any surface serves; this changes only what it says about itself- Depends on
- none
- Priority
- p1
- Profile
- implementation
- Parallel safe
- true
- Owner
- unknown: the record declares no `owner`
The work so far
- Branches
- none
- Merged
- none
- Commits
0- Trunk
- master
- Sessions
- none
- Created
- 2026-09-06
- Updated
- 2026-10-16T13:51:16Z
- Started
- 2026-10-16T11:59:02Z
- Verified
- 2026-10-16T13:51:16Z
- Completed
- unknown: the record declares no `completed_at`
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.