Skip to content

fix: restore widest-version base struct alias (#149)#150

Merged
pedrosakuma merged 1 commit into
mainfrom
fix/v1.2.0-base-struct-regression-149
Apr 25, 2026
Merged

fix: restore widest-version base struct alias (#149)#150
pedrosakuma merged 1 commit into
mainfrom
fix/v1.2.0-base-struct-regression-149

Conversation

@pedrosakuma
Copy link
Copy Markdown
Owner

Closes #149.

Regressão

v1.2.0 colapsou o alias canônico {Message}Data (namespace V0) para o layout V0 estrito, removendo todos os campos adicionados em versões posteriores. Consumidores como o B3 UMDF que liam campos pós-V0 pelo alias canônico passaram a quebrar com CS1061 (ex.: SnapshotFullRefresh_Header_30Data.LastSequenceVersion).

Causa raiz

Ao implementar #146 (VersionMap), o widening de versão (effectiveVersion) introduzido em v1.1.4 (#143) foi removido por engano enquanto eu adicionava o cálculo de blockLength por versão. As duas preocupações são independentes:

  • Struct canônico (V0 ns) → versão mais ampla, contém todos os campos com sinceVersion ≤ schemaVersion.
  • Entradas do VersionMap → blockLength próprio de cada versão (16/24/25 no schema de teste).

Fix

Restaurado o widening apenas para a geração da struct, mantendo a coleta per-versão de blockLength para o VersionMap.

Testes

VersioningIntegrationTests.V0Type_HasOnlyBaseFields foi renomeado para V0Type_IsWidestStruct_IncludesAllSinceVersionFields e invertido para refletir o contrato documentado (V0 = 25 bytes no schema de teste, com orderId+price+quantity+side).

187 + 126 testes verdes.

v1.2.0 silently regressed the unsuffixed {Message}Data alias to map to
the baseline V0 layout, dropping every field added in later schema
versions. Consumers that read post-V0 fields via the unsuffixed alias
(e.g. SnapshotFullRefresh_Header_30Data.LastSequenceVersion in the B3
UMDF consumer) hit CS1061 after upgrading.

Root cause: while implementing #146 the per-version blockLength compute
for the VersionMap was added at the cost of accidentally removing the
'effectiveVersion' widening introduced in v1.1.4 (#143). The widening
restored — base struct includes all fields up to schema version, while
the VersionMap continues to expose each version's own blockLength.

Updated VersioningIntegrationTests.V0Type_HasOnlyBaseFields (renamed to
V0Type_IsWidestStruct_IncludesAllSinceVersionFields) to reflect the
documented behavior. 187 + 126 tests green.

Closes #149.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@pedrosakuma pedrosakuma merged commit 78fc98a into main Apr 25, 2026
1 check passed
@pedrosakuma pedrosakuma deleted the fix/v1.2.0-base-struct-regression-149 branch April 25, 2026 02:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Regression v1.2.0: unsuffixed message alias collapsed to baseline (V0) instead of latest schema version

2 participants