Skip to content

Tags

Tags

v0.10.16

Toggle v0.10.16's commit message
fix(cpp): filter skip fields out of metadata.common_input before op i…

…nit (CI review)

CI diff-fuzz on this PR found a new go-vs-cpp divergence (seed
1784954760 divergence_000076) that the fixture-level fix did not cover.

pine-go's SetMetadata (pine.go:159-168) filters skip control fields
out of metadata.common_input before handing it to the operator via
MetadataAware; the operator sees only business fields. My earlier Liam0205#174
fix gated OperatorInput::common on the excluded_common set — the
skip field's VALUE returns nil — but I never filtered the field NAME
out of the list handed to operator init(). Ops that iterate
cfg.metadata.common_input to build a salt/hash (reorder_shuffle_by_salt
loops over common_inputs_ in execute()) then see an extra entry:

  Go   common_input=[count]         salt = "17|"
  cpp  common_input=[count,_skip]   salt = "17||"

Same downstream cascade as Liam0205#174: different salt → different shuffle
order → cascading downstream item order divergence.

Fix: at engine construction, filter cfg.skip out of
op_cfg.metadata.common_input before calling op->init(cfg). Matches
Go's SetMetadata filter step and applies to every operator uniformly,
not just shuffle. DAG dependency inference sees the unfiltered read
set via CommonReadFields at plan time, so wiring is unaffected.

Verified: the failing CI seed 1784954760 100 rounds is now 100/0;
seed 20260725 500 rounds also 100/0; nightly divergence Liam0205#174/Liam0205#177
regressions still pass; cross-validate 3/9 → 98/98 + 91/91.

pine-go/v0.10.16

Toggle pine-go/v0.10.16's commit message
fix(cpp): filter skip fields out of metadata.common_input before op i…

…nit (CI review)

CI diff-fuzz on this PR found a new go-vs-cpp divergence (seed
1784954760 divergence_000076) that the fixture-level fix did not cover.

pine-go's SetMetadata (pine.go:159-168) filters skip control fields
out of metadata.common_input before handing it to the operator via
MetadataAware; the operator sees only business fields. My earlier Liam0205#174
fix gated OperatorInput::common on the excluded_common set — the
skip field's VALUE returns nil — but I never filtered the field NAME
out of the list handed to operator init(). Ops that iterate
cfg.metadata.common_input to build a salt/hash (reorder_shuffle_by_salt
loops over common_inputs_ in execute()) then see an extra entry:

  Go   common_input=[count]         salt = "17|"
  cpp  common_input=[count,_skip]   salt = "17||"

Same downstream cascade as Liam0205#174: different salt → different shuffle
order → cascading downstream item order divergence.

Fix: at engine construction, filter cfg.skip out of
op_cfg.metadata.common_input before calling op->init(cfg). Matches
Go's SetMetadata filter step and applies to every operator uniformly,
not just shuffle. DAG dependency inference sees the unfiltered read
set via CommonReadFields at plan time, so wiring is unaffected.

Verified: the failing CI seed 1784954760 100 rounds is now 100/0;
seed 20260725 500 rounds also 100/0; nightly divergence Liam0205#174/Liam0205#177
regressions still pass; cross-validate 3/9 → 98/98 + 91/91.

v0.10.15

Toggle v0.10.15's commit message
docs(llmdoc): record type-tag dispatch and fuzz blind-spot lessons (L…

…iam0205#175)

Reflection: luaj's is*() family implements coercion queries, not type
predicates — same-looking APIs across the three Lua host libraries have
opposite semantics (gopher-lua type switch / wangshu kind tags = tags,
luaj is* = coercion). The deeper lesson: the differential fuzzer never
emitted flow_contract, so engines projected all outputs to {} and the
comparison never saw a computed field value — measure effective
visibility at the comparison surface, not shape occurrence.

Promoted to stable docs: operator-contract.md (scalar dispatch must use
real type tags, three-host-library semantics table), ci-quality-baseline.md
(new-fuzz-dimension signal-reaches-comparison-surface rule + red/green
verification recipe), cross-layer-validation.md (fixture comparator
semantics define what each layer can pin). index.md synced.

pine-go/v0.10.15

Toggle pine-go/v0.10.15's commit message
docs(llmdoc): record type-tag dispatch and fuzz blind-spot lessons (L…

…iam0205#175)

Reflection: luaj's is*() family implements coercion queries, not type
predicates — same-looking APIs across the three Lua host libraries have
opposite semantics (gopher-lua type switch / wangshu kind tags = tags,
luaj is* = coercion). The deeper lesson: the differential fuzzer never
emitted flow_contract, so engines projected all outputs to {} and the
comparison never saw a computed field value — measure effective
visibility at the comparison surface, not shape occurrence.

Promoted to stable docs: operator-contract.md (scalar dispatch must use
real type tags, three-host-library semantics table), ci-quality-baseline.md
(new-fuzz-dimension signal-reaches-comparison-surface rule + red/green
verification recipe), cross-layer-validation.md (fixture comparator
semantics define what each layer can pin). index.md synced.

v0.10.14

Toggle v0.10.14's commit message
bump: v0.10.14

pine-go/v0.10.14

Toggle pine-go/v0.10.14's commit message
bump: v0.10.14

v0.10.13

Toggle v0.10.13's commit message
bump: v0.10.13

pine-go/v0.10.13

Toggle pine-go/v0.10.13's commit message
bump: v0.10.13

v0.10.12

Toggle v0.10.12's commit message
bump: v0.10.12

pine-go/v0.10.12

Toggle pine-go/v0.10.12's commit message
bump: v0.10.12