Skip to content

writ deploy leaves the links of removed sources dangling and drops them from the record: reconcile then reports a clean machine #960

Open

Description

@David-Noble-at-work

The operation that ran was writ deploy, not writ upgrade (the owner, 2026-09-27: "we deployed. we did not upgrade."). Measured 2026-09-26 on DANOBLE-UD24-1: personal#232 deleted sixteen files from the layer; the next writ deploy (graph 64ee1699, 20:04Z) correctly stopped planning them, then replaced the record (#922) and left their links on disk, dangling, in no record. writ reconcile reads only the current record, so it reports the machine clean while ~/.local/bin/git-protect-encrypted-files, its man page and both completions, and the ~/.Personal-secrets links point at nothing. deploy.go has no stale, orphan or prune step.

Deploy is the operation that replaces the record, so it is the one that knows, at that moment, which links the replaced lifetime made and which of their sources are gone. The defect is that it drops them silently. What deploy does instead — unlink them, carry them into the new record for upgrade (#845's orphan row) to remove, or at least report them — is the design to rule on; a link whose target is no longer what writ made is never removed.

Plan and design documents

Kind Document
Plan Not yet opened

Epic: #450 · Feature: #845

Activity

  1. changed the title [-]writ upgrade unlinks orphans: a link writ made whose source left the layer is removed, not left dangling and dropped from the record[/-] [+]writ deploy leaves the links of removed sources dangling and drops them from the record: reconcile then reports a clean machine[/+] on Sep 26, 2026
  2. David-Noble-at-work commented on Sep 28, 2026

    @David-Noble-at-work
    ContributorAuthor

    Folded into #971 (lane 17 of #916), 2026-09-28, agreed with the session that held this as its schedule #949's lane 15. Deploy loses a removed source precisely because it replaces the lifetime, so the fix is designed once, against kept snapshots (#847). personal#236 waits on it; its dangling links can be removed by hand meanwhile, and only reconcile's false clean waits for #971 and #972.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Epic:ReconciliationReconciliation and drift detectionbugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions