Replies: 1 comment
|
Thank you @Ericality — this is a careful report, and the part that will save other people the most pain is the sandbox result you volunteered at the end. Restating your diagnosis so it is clear what I verified: opening a v0 log written by an older harness fails with Both causes reproduced, with the refusal produced by the official functionI did not re-implement the decision rule. To avoid the trap of hand-built events failing for the wrong reason (a missing required member, a bad semantic type), I started from real logs the validator already accepts and changed exactly one thing. 12 of the 32 v0 logs in my corpus are clean; the fixtures come from those:
So both of your causes reproduce exactly, and your const ignorableCurrent = !allowLegacySteering && !currentKnown && record["ignorable"] === true
The second cause is structural too: One correction, and it is about how many people this hitsI could not reproduce your measured impact, and I want to be explicit about which half that is. Your 128 of 243 sessions (52.7%), including 16 of the last 24 hours, is measured on an instance whose plugins write their own event types. My corpus is a different population and contains neither shape — it has the descriptor-version failure and nothing else — so I built the two fixtures above rather than claiming a rate. The mechanism is population-wide; the incidence is per-plugin, and it scales with how many of your sessions were written by plugins that declare their own event types. That does not weaken your report, but a reader should measure their own logs before concluding they are affected: a log is refused only if it actually contains one of the two shapes. An independent bug the cross-check exposed in my own toolI ran the official validator over my whole corpus and compared its verdict with
Final state: 41 logs, 32 at format v0, validator refuses 20, the scanner refuses 20, 0 disagreements. Worth reporting because the same population mistake applied to the scanner was worse: What is published
They are not mirror implementations. They call
Your verify-it-yourself command: npx -y dsh-session-check scan ~/.dsh/sessionsOn your write-back findingI did not reproduce your sandbox experiment, so it stays quoted as yours. What I did verify is the mechanism that makes it credible, because it is the reason I put the warning in the tool rather than only in a README:
On asks 1 and 3Both are upstream's, and I have no way to land them (external PRs are not accepted). Two notes that may help whoever does:
Also worth knowingWhile verifying a separate report I measured that a plugin's Not verified
The full evidence, including the two fixtures' construction and the corpus comparison with the first-run bug recorded: |
Uh oh!
There was an error while loading. Please reload this page.
What we observe on
0.1.5-rc.2Opening a session written by an older harness (
0.1.2-rc.1, i.e. a v0 log) fails with:permission/preset.data.origin(value"default", written by an earlier harness build, apparently benign); union = 128 sessions (52.7%), including 16 of the 49 sessions touched in the last 24h. Blocks are listed by "last write day", so this is not only ancient history.Two independent causes, both in the frozen v0 inventory
notice/banner, out-of-repo ⇒ "outside the list by construction").permission/preset.data.origin) — rejected ashas unexpected member "origin".Writer-side fix (#1538) does not rescue already-written v0 logs
We verified in a sandbox that patching the frozen v0 inventory makes those logs readable, but the session then cannot be written: appends returned success while nothing landed on disk and no v3 was derived (silent data loss). A clear refusal is strictly safer than that half-fixed state — worth keeping in mind if the v0 edge is ever relaxed.
Asks
ignorablewriter surface proposed in Out-of-repo plugins cannot mark session events `ignorable` — every log they touch becomes unreadable (extensibility gap + minimal fix) #1538 (accepts{ ignorable?: true }for non-surface events). This also removes the "uninstall poisons previously written logs" class and matches how our events are already being read today (they are read while the plugin registers the type in-process).ignorableon the v0 edge as well (today it refuses evenignorable: true), orWhat we can provide
Sanitized repro: two sample logs (one with the unknown event type, one with the extra payload member), the exact error strings, and the minimal patch we used to prove the read/write asymmetry — all on request.
All reactions