Skip to content

docs(plan): AnyEntry claims; the resource-construction campaign converges - #623

Merged
David-Noble-at-work merged 1 commit into
developfrom
any-entry-claims
Aug 23, 2026
Merged

David-Noble-at-work merged 1 commit into
developfrom
any-entry-claims

Conversation

@David-Noble-at-work

Copy link
Copy Markdown
Contributor

Two documentation changes that belong together: the resource-construction campaign's closure, and the
plan for the feature its last phase exposed.

The AnyEntry plan (#616)

docs/plans/any-entry-claims.md — six phases, eleven judgment scenarios, and an audit of all 27
announced file-provider methods.

Give the claim surface the permissive option the discovery surface already has. A mutation target's kind
is not the author's business — a move moves whatever is there — but the claim's Go type is the kind
assertion, so a kind-indifferent operation must either name a kind it does not care about or multiply
into one method per kind. file.AnyEntry asserts existence and nothing else, and resolves to the
observed kind inside the Pending → Active transition (Gone leaves it unasserted, because nothing was
observed) — the moment the model already consults the disk, through the seam op.RootBinder established
and the ledger swap rebindEntry already performs.

The payoff: file.move moves any kind again from a plain authored path, file.move_directory retires,
and a symbolic link can be moved — a capability that regressed when kind-honest activation landed (#611).

The surface audit found three more defects: file.remove's *Regular type contradicts its own
documentation ("file or empty directory"); file.unlink is the same operation as remove and retires;
file.remove_all is already rm -rf in its body, with the *Directory claim the only thing keeping it
off a file or a link. The removal family ends split by blast radius, never by kind — the stdlib's
split (os.Remove deliberately does not ask the kind; os.RemoveAll opens by calling Remove), which
is why Go never needed an Unlink. Also ruled: move loses on_missing (a nil product hands downstream
consumers a nil promise — the pathology that dropped Skip), and policy parameters go last.

Tasks: #617 – #622.

Resource-construction closure (#587)

The campaign converges. 4-resource-management.status.md states it — the design and the tree agree, and
the divergence table has no surviving row — with per-PR completion rows and an Outstanding list carrying
only what outlives the campaign. 4-resource-management.md's header reads implementation complete;
3.5.4-file-provider.md gains file.discover/file.resolve, file.move_directory, and the
kind-honest-claims paragraph; the transport plan's supersession note is finalized — what replaced
"recreate from slot URIs" is now named, so that plan's Goal holds for every addressing.

Docs only; no code changes. Closes #587. Refs #581, #616.

Gate: make test 103 ok / 0 fail; gofmt -l clean.

@David-Noble-at-work David-Noble-at-work self-assigned this Aug 23, 2026
@David-Noble-at-work
David-Noble-at-work merged commit bc32d09 into develop Aug 23, 2026
8 checks passed
@David-Noble-at-work
David-Noble-at-work deleted the any-entry-claims branch August 23, 2026 18:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Closure: sketches removed, statuses updated, pins committed green

1 participant