When a directory carries a membership marker but its parent cannot be resolved, the parent lookup returns None. The gripspace resolver returns None in turn, and the caller cannot distinguish "the parent lookup failed" from "this directory is not part of any larger workspace." Resolution then falls back to the current directory.
That fallback is a residue, not a decision. The directory holds positive evidence of membership — its own marker — and the resolver answers with silence.
Why it matters
Silently using a local store is how data goes stranded with nothing red anywhere. In one observed case a store accumulated hundreds of entries in a location the rest of the workspace never read, and the split was found only because someone went looking for history that appeared to be missing.
This is distinct from marker precedence, and the two were initially folded into one explanation. They have different triggers and different fixes: precedence never reaches the lookup, while this one reaches it and discards its result. Filed separately so the second cannot hide behind the first.
Proposed
A membership claim that cannot be resolved is a named state surfaced to the caller, not None. What the caller does with it is a separate design call, but the disagreement must be visible at the moment it happens.
Explicitly out of scope: falling back to the current directory with a comment explaining it. That is the present behaviour with better documentation, and it keeps the failure silent.
Acceptance
- An unresolvable membership claim produces a distinguishable signal, not
None.
- A directory with no membership claim is unaffected.
- A resolvable claim is unaffected.
- A witness pins the distinction, so a later change cannot collapse the two cases back together.
The originating investigation is tracked privately and is deliberately not linked here.
When a directory carries a membership marker but its parent cannot be resolved, the parent lookup returns
None. The gripspace resolver returnsNonein turn, and the caller cannot distinguish "the parent lookup failed" from "this directory is not part of any larger workspace." Resolution then falls back to the current directory.That fallback is a residue, not a decision. The directory holds positive evidence of membership — its own marker — and the resolver answers with silence.
Why it matters
Silently using a local store is how data goes stranded with nothing red anywhere. In one observed case a store accumulated hundreds of entries in a location the rest of the workspace never read, and the split was found only because someone went looking for history that appeared to be missing.
This is distinct from marker precedence, and the two were initially folded into one explanation. They have different triggers and different fixes: precedence never reaches the lookup, while this one reaches it and discards its result. Filed separately so the second cannot hide behind the first.
Proposed
A membership claim that cannot be resolved is a named state surfaced to the caller, not
None. What the caller does with it is a separate design call, but the disagreement must be visible at the moment it happens.Explicitly out of scope: falling back to the current directory with a comment explaining it. That is the present behaviour with better documentation, and it keeps the failure silent.
Acceptance
None.The originating investigation is tracked privately and is deliberately not linked here.