Skip to content

Install verify expects a phantom node when the fixed-segment root exists only as a virtual folder #2157

Description

@meshweaver-cloud

What is failing

Localizer.VerifyInstalled is failing the Verify install phase (step 4/7 of the localize plan) on a node that the install had no reason to write — the rebased path of the declared install root itself when that root is a fixed-target segment (Harness / Skill / Agent) whose source subtree carries only children, not a node at the root. No manifest is written, and the retry the error text suggests can never succeed: the source declaration has no node at that path either.

Concretely, for the ClaudeCode package installing into sglauser:

  • Package declares installPaths: [], so Localizer.FixedSegmentsWithContent picks the Harness segment and resolves the install root to ClaudeCode/Harness.
  • The ClaudeCode subtree contains ClaudeCode and ClaudeCode/Harness/ClaudeCodethere is no node at ClaudeCode/Harness.
  • CopyRoot correctly copies only ClaudeCode/Harness/ClaudeCodesglauser/Harness/ClaudeCode.
  • ExpectedInstalledPaths nevertheless adds declaredRoots.Select(root => InstalledPathOf(root, coursePath, target, viewer)), i.e. sglauser/Harness, to what verify asserts must exist.
  • The path:sglauser/Harness scope:subtree scan finds only the child copy (there is no segment-root node), so the diff is exactly one missing path — sglauser/Harness — and the phase fails with the NotPersistedDiffText message.

Probable cause — high confidence

The evidence is definitive: five near-identical samples across two packages (ClaudeCode, Copilot), same viewer, always the same missing path sglauser/Harness, and both source packages provably lack a node at their {pkg}/Harness root (verified against the mesh: ClaudeCode/Harness and Copilot/Harness are Not found; only the {pkg}/Harness/{harnessId} children exist). The Localizer source is explicit that ExpectedInstalledPaths includes the declared root's rebased path unconditionally, and there is no phase that would write a segment-root node in this shape.

The defect is in Localizer.ExpectedInstalledPaths (and/or its callers in VerifyInstalled): the declared-root rebased path must not be asserted when the source declaration has no node at that root — otherwise a fixed-segment root that exists only as a virtual folder in source always fails verify. The fromSource contribution (ExpectedFromSource) already handles this correctly; the declaredRoots.Select(InstalledPathOf) contribution is what over-reaches.

The same shape is silently benign when the viewer's target home for that segment already exists from a previous install (e.g. sglauser/Skill and sglauser/Agent do exist for this user, from earlier Essentials installs — those verified fine). It fails hard on the first package to install into a segment the viewer has never populated.

Impact

Small burst, high severity for the affected user. 6 occurrences in ~52 s on one pod, one namespace (memex-cloud), one victim (sglauser), across two different harness packages — this is the same person retrying, and every retry fails identically. No harness install can ever succeed for a user who has no {viewer}/Harness node yet, which is every user's first harness install. Any package that declares no installPaths and whose fixed segment (Skill/Agent/Harness) is a pure container in source hits the same trap on first install.

The failure is fully user-visible: install dialog reports the phase error verbatim ("Install did not persist 1 node(s): 'sglauser/Harness' …"), no manifest is written, the retry advice is unactionable.

Where to look

  • Store/Installer/Source/LocalizerExpectedInstalledPaths (the over-reaching expectation) and VerifyInstalled (its caller). The fix is likely to drop the declaredRoots.Select(InstalledPathOf) line and trust fromSource + expectedCopies + the target root, or to gate the declared-root expectation on whether the source actually has a node at that root.
  • Store/Publishing/Source/Provisioning — where LogCategory = "ProvisionPlan" is defined; useful only for the log correlation.
  • Packages that reproduce the shape: ClaudeCode, Copilot — both declare installPaths: [] and carry only {pkg}/Harness/{id} in source.

Evidence

Fingerprint 05f47831e3b7d6cd
Category ProvisionPlan
Severity Error
Namespace memex-cloud
Pods memex-portal-deployment-867dc45877-lgskl
Occurrences 6
First seen 2026-08-24 14:28:14Z
Last seen 2026-08-24 14:29:06Z
Recent log lines
2026-08-24 14:28:15Z memex-portal-deployment-867dc45877-lgskl fail: ProvisionPlan[0]
      [ProvisionPlan] 'ClaudeCode' FAILED in phase 4/7 'Verify install': Install did not persist 1 node(s): 'sglauser/Harness' — the copies were accepted but not stored (a transient hub error?), or the source enumeration that planned them was short. No manifest was written; please retry the install.
2026-08-24 14:28:18Z memex-portal-deployment-867dc45877-lgskl fail: ProvisionPlan[0]
      [ProvisionPlan] 'Copilot' FAILED in phase 4/7 'Verify install': Install did not persist 1 node(s): 'sglauser/Harness' — the copies were accepted but not stored (a transient hub error?), or the source enumeration that planned them was short. No manifest was written; please retry the install.
2026-08-24 14:28:18Z memex-portal-deployment-867dc45877-lgskl fail: ProvisionPlan[0]
      [ProvisionPlan] 'Copilot' FAILED in phase 4/7 'Verify install': Install did not persist 1 node(s): 'sglauser/Harness' — the copies were accepted but not stored (a transient hub error?), or the source enumeration that planned them was short. No manifest was written; please retry the install.
2026-08-24 14:29:02Z memex-portal-deployment-867dc45877-lgskl fail: ProvisionPlan[0]
      [ProvisionPlan] 'ClaudeCode' FAILED in phase 4/7 'Verify install': Install did not persist 1 node(s): 'sglauser/Harness' — the copies were accepted but not stored (a transient hub error?), or the source enumeration that planned them was short. No manifest was written; please retry the install.
2026-08-24 14:29:06Z memex-portal-deployment-867dc45877-lgskl fail: ProvisionPlan[0]
      [ProvisionPlan] 'Copilot' FAILED in phase 4/7 'Verify install': Install did not persist 1 node(s): 'sglauser/Harness' — the copies were accepted but not stored (a transient hub error?), or the source enumeration that planned them was short. No manifest was written; please retry the install.

Opened automatically from Admin/_LogIncident/05f47831e3b7d6cd. Recurrences are folded into this issue rather than opening new ones.

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