I0604 — Prove the offline guarantee survives sharing
Prove with cases and a doctrine that no path introduced by shared policy reaches a network, and that an unavailable shared source degrades to a named refusal rather than a fetch or a silent local fallback.
BLOCKED wave 3 · p3 · debugging profile · runs alone
Part of shared-policy — Shared policy across repositories and workers.
Blocked. This issue cannot start until I0603, milestone:shared-policy are done. The status is derived from that, not declared.
Objective
Prove with cases and a doctrine that no path introduced by shared policy reaches a network, and that an unavailable shared source degrades to a named refusal rather than a fetch or a silent local fallback.
Why
Every guarantee this tool makes rests on it being local and offline. Sharing policy across repositories is the exact feature that historically converts a local tool into a client of something, and it has to be refused structurally rather than by intention.
Current state
Resolution, override and drift reporting all exist and are documented as filesystem-only. Nothing enforces that they stay so.
Desired state
A doctrine refuses a network call in the policy resolution path, cases cover an unavailable source, and the refusal names the doctrine.
Scope
- share
- lib
- test/cases
Out of scope
- Any offline cache of a remote source, which would be a fetch with extra steps
Dependencies
What waits on this
Acceptance criteria
- A doctrine declares the rule, its validator exists, and doctor proves it reaches the command that runs it
- A case shows an unavailable shared source producing a named refusal, with nothing fetched and no fallback
- CI runs the case
Validation
- bash test/run.sh
- bin/majordomus doctor
Evidence required
- suite
- doctor
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
The pressure to add a remote source arrives with the first user who has repositories on two machines; the doctrine is what makes that a decision rather than a patch.
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/I0604.yaml. Read it back with majordomus plan show I0604.