Skip to content

An install can finish with a node missing from the copy, and nothing says which one #2012

Description

@rbuergi

A learner's course copy came out missing exactly one node — the exercise workbench — with no error logged at the point of failure. The install correctly never recorded itself as complete, so the Store's sequencing is not at fault; what is missing is any signal naming what did not land.

Evidence

MeshWeaver.Education run 32503778979, shard 2, portal sha256:88eb1afc… (3.0.0-rc5.ci.4547). The copy of ThinkInStreams into e2e-admin runs 16:52:07.7 → 16:52:12.1.

The absent node — raised while rendering the learner's page, 16 minutes later:

17:08:38  DeliveryFailureException: No node found at
          'e2e-admin/ThinkInStreams/09-RxVersusIx/Exercise/OperatorForge/Source/OperatorForge'
17:08:38  Area  target is gone (routing NotFound) — rendering unavailable placeholder

It is the only one of lesson 09's ten nodes with no Node created at line. Its structural twin in the same lesson, 09-RxVersusIx/Solution/OperatorForge/Source/OperatorForgeSolved, has one — both are the same {Page}/Source/{Id} shape under the same declared root.

No install record. e2e-admin/_Install/Systemorph-MeshWeaver.Education is never created, for the remaining 17 minutes the job runs. That is the design working — the manifest is the last phase, so a partial install cannot record itself as installed.

It is not the normal outcome. On 2026-08-19, the same course copied into the same user landed 11,9,10,10,9,9,9,9,10 = 86 nodes with that node present and rendering (156 references in that run's portal log).

Nothing failed loudly. Grepping the copy window for error|fail|refus|abort|timeout|denied|exceed turns up only unrelated ObjectPolymorphicConverter and SYNC_STREAM warnings. There is no line saying the install stopped, which root it was on, or which node it could not write.

Why this is worth a fix even though the record was withheld

The two states are indistinguishable from outside:

  • an install still in flight, and
  • an install that stopped partway and will never finish,

and both present to the learner as a course whose pages render prose with the workbench missing. The absent record means "not installed", which is correct but not actionable — nobody can tell which node is missing without diffing the partition against the repo by hand, which is what I had to do.

What would have made this diagnosable in seconds:

  1. A terminal line naming the failure — the phase, the root, and the node path — when the chain stops. Right now the last thing in the log is an ordinary create, then silence.
  2. The verify phase reporting the DIFF, not just a pass/fail. It knows the declared roots and what landed; the set difference is the answer.

I have deliberately not guessed at the cause — the log does not support one, and I would rather file the observation than a theory. Happy to hand over the artifacts.

Found while getting MeshWeaver.Education's main green (Systemorph/MeshWeaver.Education#191, #192). Related: #1996 (a hub recycle leaving an open page dead) came out of the same investigation.

🤖 Generated with Claude Code

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