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
{{ message }}
Repository navigation
Generator: DescriptionTargetCatalog misses the stream-cause marker rule, so a dead descriptions row passes #405
DescriptionTargetCatalog.DeclaresMarker (tools/OpenCode.Sdk.Tools/Generator/Binding/DescriptionTargetCatalog.cs:91-104) decides whether a union declares its marker member, so it can tell whether a descriptions row targeting that member is valid. It walks BaseTypeName through the generated unions only.
The emitter's twin, UnionEmitter.InheritsMarker (Generator/Emission/UnionEmitter.cs:129-146), has one more rule. A chain that ends at the hand-written IOpenCodeStreamFailureCause inherits the _tag string marker from it. That is D-A4, merged in #398: Tag lives on the hand-written marker.
So for IStreamFailureCause:
the catalog reports the marker as declared;
the emitter declares nothing: src/OpenCode.Sdk/Common/Errors/IStreamFailureCause.cs has an empty body.
Why it matters
A descriptions row for IStreamFailureCause.Tag passes validation and emits nothing. That is a silently dead curation row, which GEN-E2's contract exists to refuse. Nothing at the pin has such a row, so today's output is unaffected.
Proposed fix
There should be one owner for the chain question. GEN-E4 step 1 puts the resolved chain on the plan (U7-27), and both the catalog and the emitters read it there, with the stream-cause terminal base represented in the chain. Until then, the minimal fix is the same terminal check in DeclaresMarker, plus a test row that a descriptions row for that member is refused.
Found by the GEN-E4 facts survey (2026-10-17, faz4/GEN-E4/gen-e4-facts.md §3.6). It belongs to GEN-E4.
Activity