feat(engine): refuse work-unit-level fields that shadow the phases tree#520
Merged
Conversation
This was referenced Jul 23, 2026
Merged
Merged
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 10:58
ea49972 to
0b5fde8
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 10:58
6f3c0f8 to
ff08a02
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 11:05
0b5fde8 to
c91eb0a
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 11:05
ff08a02 to
13cda6c
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:29
c91eb0a to
b9e62e6
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:29
13cda6c to
ae55a70
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:30
b9e62e6 to
3bb9cd7
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:30
ae55a70 to
213feca
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:31
3bb9cd7 to
fe451bc
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:31
213feca to
7f90ec4
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:32
fe451bc to
820ae9c
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:32
7f90ec4 to
98df577
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:33
820ae9c to
354c6f9
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:33
98df577 to
6e3eb31
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:33
354c6f9 to
42860f1
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:33
6e3eb31 to
638c7ca
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:34
42860f1 to
29e19da
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:34
638c7ca to
b869699
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:35
29e19da to
a400c27
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:35
b869699 to
bcc92d9
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:35
a400c27 to
72a24c7
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:35
bcc92d9 to
cff9f0f
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:36
72a24c7 to
3bde245
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:36
cff9f0f to
b1c6df6
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:36
3bde245 to
43a5184
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:36
b1c6df6 to
af74feb
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:37
43a5184 to
8a8ed23
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:37
af74feb to
a7e576e
Compare
leeovery
force-pushed
the
fix/triage-superseded-strip
branch
from
July 23, 2026 12:37
8a8ed23 to
03237e5
Compare
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:37
a7e576e to
4243045
Compare
set/push/apply accepted a work-unit-level field whose first segment names a phase — `set wu specification.foo bar` built a root specification object beside phases that no read ever joins, silently. The mutation surface now refuses phase-name-headed fields at work-unit level with a pointer to the canonical dot-path; reads and delete stay free so a stray tree can still be inspected and repaired. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
leeovery
force-pushed
the
feat/wu-field-shadow-guard
branch
from
July 23, 2026 12:38
4243045 to
651ee61
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
manifest set pay specification.foo barsucceeded and created a rootspecification: {foo: "bar"}object besidephases— an unvalidated shadow tree invisible to every phase-level read. The typo class ({wu} specification.xfor{wu}.specification.{topic} x) landed garbage silently.set(both grammars),push, andapplyset-ops now refuse work-unit-level fields whose first segment is a phase name, with a pointer to the canonical dot-path. Reads anddeletestay free so a stray tree can be inspected and repaired.phases.*-headed fields stay permitted — they resolve into the real tree through full validation (and the contract suite pins that for fixture setup).Test plan
test-engine-manifest-fields.cjs: refusal in both set grammars + push + apply (nothing persisted), repair paths free, phase/topic-level and legit root fields untouched.npm test1575 pass;test:cli, typecheck green.🤖 Generated with Claude Code
Stack