I3018 — The intent workspace borrows the plan instead of copying it on every request
/ui/idd and the intent inspector it embeds read plan.issues and plan.roadmap through view::items, a borrow, wherever they only read, instead of view::list, which copies the whole answer: the issues serving the intent, the records the prose may name, the intent's own issues and its milestones.
READY wave 0 · p1 · implementation profile · parallel safe
Part of M004 — Performance is executable evidence, and the hot path does no canonical work twice.
Ready. Every dependency is done, so majordomus plan start I3018 will be accepted.
Objective
/ui/idd and the intent inspector it embeds read plan.issues and plan.roadmap through view::items, a borrow, wherever they only read, instead of view::list, which copies the whole answer: the issues serving the intent, the records the prose may name, the intent's own issues and its milestones.
Why
Master's validate went red in ui on 2026-10-20 and 21 (runs 39485870890 on 91c0b5d5658 and 39504455062 on 573df967bb5): system.http.ui.idd and system.http.live.ui.idd warm p95 105.8 and 106.5 ms against a 100 ms budget, right after the W0 records grew the DONE set, with commits that only added records. The screen deep-copied the 805 full issue records at least four times per request (idd.rs serving and known, intent.rs known and serving), so its cost grew with every record the plan gained.
Current state
idd.rs and intent.rs call view::list on plan.issues and plan.roadmap, a to_vec of the whole answer, on every request.
Desired state
They borrow the answer; only the intent's own issues are cloned, and the screen's cost no longer grows with the plan's other records.
Scope
- apps/majordomus-cli/src/ui/idd.rs
- apps/majordomus-cli/src/ui/intent.rs
- .ai/repo/project/issues/I3018.yaml
- site
- docs
Out of scope
- The budget itself, which stays at 100 ms
- Other screens that copy plan.issues (issues.rs, prs.rs, work.rs, milestone.rs): a follow-up if their budgets move
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- idd.rs and intent.rs read plan.issues and plan.roadmap through view::items wherever they only read them
- system.http.ui.idd and system.http.live.ui.idd warm p95 are within their 100 ms budget in the ui job
Validation
- cargo test --lib ui::
- majordomus bench system.http.ui.idd --transport system --profile ci --no-write --check
Evidence required
- ui_idd_within_budget
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3018.yaml. Read it back with majordomus plan show I3018.