I4155 — The follower's shared board and page caches are keyed by the repository they read
The process-wide BOARD and PAGE caches in apps/majordomus-cli/src/http/follow.rs carry the Context they were read for in their key, so two Contexts in one process never answer each other's snapshot or latest cursor.
BLOCKED wave 1 · p2 · implementation profile · parallel safe
Blocked. This issue cannot start until I4154 is done. The status is derived from that, not declared.
Objective
The process-wide BOARD and PAGE caches in apps/majordomus-cli/src/http/follow.rs carry the Context they were read for in their key, so two Contexts in one process never answer each other's snapshot or latest cursor.
Why
Found while diagnosing I4154: the keys are \"repository\" and \"latest|<sources>|<reader>|\", which do not identify the Context. Tests in one process run in parallel, and one can be served another repository's snapshot or cursor when it was read at the same or a higher generation within 30 s. A production server serves one Context today, so this is a test-isolation hazard first.
Current state
BOARD and PAGE are statics keyed without the Context's identity.
Desired state
Each key names the Context (its repository root or identity), and a case or unit test reads two Contexts in one process and gets each its own answer.
Scope
- apps/majordomus-cli/src/http/follow.rs
- .ai/repo/project/issues/I4155.yaml
Dependencies
Acceptance criteria
- Two Contexts read through the shared caches in one process each get their own snapshot and cursor
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib http::follow::tests
Evidence required
- suite
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
A key that is too narrow defeats the share the caches exist for; key by the Context, not by the caller.
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/I4155.yaml. Read it back with majordomus plan show I4155.