Skip to study content
Counterfact

Optional properties become required when their nested schemas contain required properties

A property omitted from its parent schema’s required list was emitted without a TypeScript optional marker when that property’s nested object had required children.

This page traces one detailed external-report case through the available source and release evidence. The public-record census includes additional discovery channels and separately identified recurrences.

Report
Issue #1506
Reporter
nkincy
Reported
February 25, 2026
Reported version
Not specified
Matched window
Outside matched window
First affected release entered matched window
No
Origin classification
Pre-existing before 2026
Classification confidence
High
Chronology confidence
High
Accepted correction
PR #1507
First fixed release
2.0.0
Report to release
1.15 elapsed daysReport: 2026-02-25T17:17:56Z; corrected publication: 2026-02-26T20:50:41.958Z.

Finding

The responsible condition entered the generator in 2022 and is present in releases well before the 2025 boundary. No 2026 change created the behavior.

Evidence trail

Origin

Exact origin: 2af86557, committed September 10, 2022; first affected release 0.8.0. The schema encoder began deciding optionality from the child schema’s own required array instead of the parent object’s required list.

Source history and behavioral evidence

Rename-aware history traces the faulty required-property check to the 2022 schema-type encoder implementation. The fix changes that decision to use the parent object’s required list and adds the reporter’s nested-object shape as a test.

Release chronology

The origin commit is contained in 0.8.0; the accepted fix shipped in 2.0.0 one day after the report.

Primary sources

  1. Issue #1506
  2. Accepted correction, PR #1507
  3. Origin or earliest confirmed affected commit
  4. Release 2.0.0