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

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
2 of 2
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 I1031

majordomus plan verify I1031

majordomus plan done I1031

What 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.