docs(contracts): state the offline limit of checkout removal - #129
Merged
rldyourmnd merged 1 commit intoSep 10, 2026
Merged
Conversation
`gds repository remove-checkout` is documented as a working lifecycle, and it cannot run against any ordinary checkout. Proving publication reads the remote ref; the mutation runner executes every Git command with `protocol.allow=never` and accepts only a locally resolvable URL, so any `https://` or `ssh://` origin is refused as GDS_WORKSPACE_REMOVE_UNSAFE with the message "network Git mutation is disabled before the live provider stage". That is the runner's offline stance, not a property of the checkout, and the message names the runner rather than the cause. Materialization already carries its local-only caveat one paragraph above; removal now carries its own, with the evidence a device-local retirement has to gather instead. ADR 0025 gains the price of its own accepted finding: because the complete relationship index demands an anchor on every boundary under the analysed root, one unanchored external checkout makes `gds repository delete` unusable for the whole tree. The documented escape is narrowing `--inventory-root`, which is sound because the planner stores it as `analysis_root` and apply reuses exactly that. Claude-Session: https://claude.ai/code/session_01CKXKXND4zAgWisTtatyTHX
rldyourmnd
deleted the
docs/state-the-offline-limit-of-checkout-removal
branch
September 10, 2026 19:17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
gds repository remove-checkoutis documented as a working lifecycle, and it cannot run against any ordinary checkout.Proving publication reads the remote ref. The mutation runner executes every Git command with
protocol.allow=neverand accepts only a locally resolvable URL, so a checkout whoseoriginis an ordinaryhttps://orssh://remote is refused withGDS_WORKSPACE_REMOVE_UNSAFEcarrying the message "network Git mutation is disabled before the live provider stage". That is the runner's offline stance, not a property of the checkout, and the message names the runner rather than the cause — which cost a real retirement an hour of diagnosis today.Materialization already carries its local-only caveat one paragraph above. Removal now carries its own, plus the evidence a device-local retirement has to gather instead: clean status,
@{u}neither ahead nor behind, no stashes, no commits reachable only locally, and no tags the remote does not have. The last of those is not hypothetical — it caught two unpublished tags in a tree that every other check called clean.ADR 0025 gains the price of its own accepted finding. Because the complete relationship index demands an anchor on every boundary under the analysed root, one unanchored
externalcheckout makesgds repository deleteunusable for the whole tree, not just for that checkout. The documented escape is narrowing--inventory-root, which is sound because the planner stores it asanalysis_rootand the apply path reuses exactly that value — so the narrowed scope is bound into the plan and into the approval that signs it.Documentation only. Verification:
scripts/validate_shell.shexits 0,scripts/validate_go_core.sh --quickexits 0, and no generated state changed.https://claude.ai/code/session_01CKXKXND4zAgWisTtatyTHX