You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(cloud-connection,cli): LocalManifestSource.list() reports the ledger entries it could not read (#5413) (#5424)
A truncated / unreadable / unparseable file under
`.objectstack/installed-packages/` was dropped in an un-bound per-file `catch`
and `list()` returned a bare array, so a short list was indistinguishable from a
complete one: no difference in the return value, no log, no count. All three
consumers gave a confidently wrong answer — `rehydrate()` left the installed app
unregistered (gone from the app switcher, its objects nonexistent) with nothing
in the log, `handleList()` served the console a list that looked whole with
`success: true`, and `os doctor` printed a clean `✓ Unique scope` over manifests
it had never parsed.
Skipping a corrupt file stays correct — one bad manifest must not stop a runtime
booting the packages that are fine. Skipping it SILENTLY was the defect.
`list()` now returns `{ entries, skipped }` (option A of the issue's decision
point): reporting is the caller's job, and "I read only half the ledger" becomes
a fact in the type rather than an absence. Enumerating the DIRECTORY still
throws — a different fact from "some files in it would not parse", and #5412
already reports the two as separate rows.
Wiring, per triage:
- `rehydrate()` warns per skipped file, before the empty-entries early return
(an all-corrupt ledger is the worst case, not the exempt one), naming the file,
the consequence and the thrower's own words.
- `handleList()` logs the same; the WIRE SHAPE is deliberately unchanged —
putting the skip in the response body is a separate schema decision.
- `os doctor` turns `skipped` into a `Unique scope` warning row and withholds
the `✓` success line, alongside the directory-level row from #5412.
#5414's `⚠ SCOPE BOUNDARY` test went red exactly as its own comment predicted
and is rewritten as the positive assertion.
Claude-Session: https://claude.ai/code/session_016FNvXhtSdnEGEfLEsMmvxh
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments