Skip to content

recall: an unresolvable membership claim degrades silently into "not a member" #972

Description

@laynepenney

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions