ID

R64

Status

Backlog

Bucket

cleanup

Priority

9

Theme

model-cleanup

buildRuntimeStub accepts Rejection.Deferred directly

SplitRowsMethodEmitter.unsupportedReason returns Optional<Rejection.Deferred> (per R58 Phase C, commit 68a062c). Each of the four buildFor* callers immediately calls .message() on the result to feed the String reason parameter of buildRuntimeStub, discarding the typed EmitBlockReason the sealed Deferred arm carries:

  • SplitRowsMethodEmitter.java:289 (SplitTableField)

  • SplitRowsMethodEmitter.java:341 (SplitLookupTableField)

  • SplitRowsMethodEmitter.java:375 (RecordTableField)

  • SplitRowsMethodEmitter.java:410 (RecordLookupTableField)

The lift: buildRuntimeStub accepts Rejection.Deferred directly (or the EmitBlockReason it wraps) instead of a free-form String. Same shape as the R58 Phase C consolidation that made the rest of the deferred-stub plumbing typed end-to-end.

Surfaced during the R22 post-shipping review (commit 181c28f), but lives in R58’s domain not R22’s; tracked separately so it doesn’t get lost when R22 closed.

Promote to Spec when an implementer picks it up; the design space is small (swap a String parameter for a typed one and update four call sites).