Problem
#3221 adds generated Go runtime ABI facts alongside the existing generated offsets.json. The files are separate because go-offsets-tracker discovers only struct-field offsets and replaces its complete output, while the ABI generator also needs type sizes and constants.
The current workflow is safe for #3221: make update-offsets runs both generators, the scheduled workflow only commits after both succeed, and runtime decoding rejects an ungenerated future Go minor. However, maintaining two versioned artifacts for the same moduledata decoder creates a longer-term consistency risk. Their Go version coverage could drift, and an interrupted local update can temporarily leave only one artifact refreshed.
Goal
Make Go field-offset and runtime-ABI generation atomic, or enforce an equivalent invariant that prevents mismatched Go version coverage from being published or consumed.
Possible approaches
- extend
go-offsets-tracker to support type sizes and constants, allowing one generated artifact;
- add one orchestration command that collects both result sets and invokes the tracker writer once;
- retain separate artifacts but stage updates atomically and add explicit cross-artifact version validation.
The implementation should avoid duplicating the tracker's version discovery, caching, and third-party module behavior unless the benefits justify owning that logic.
Acceptance criteria
- a mismatch between moduledata offset coverage and runtime ABI coverage fails generation or validation;
- adding a stable Go minor updates all required metadata together;
- existing standard-library and third-party offset tracking and caching remain intact;
- an ungenerated future Go minor cannot silently use stale runtime ABI metadata;
make update-offsets and the scheduled update workflow use the resulting atomic or validated path.
Problem
#3221 adds generated Go runtime ABI facts alongside the existing generated
offsets.json. The files are separate becausego-offsets-trackerdiscovers only struct-field offsets and replaces its complete output, while the ABI generator also needs type sizes and constants.The current workflow is safe for #3221:
make update-offsetsruns both generators, the scheduled workflow only commits after both succeed, and runtime decoding rejects an ungenerated future Go minor. However, maintaining two versioned artifacts for the same moduledata decoder creates a longer-term consistency risk. Their Go version coverage could drift, and an interrupted local update can temporarily leave only one artifact refreshed.Goal
Make Go field-offset and runtime-ABI generation atomic, or enforce an equivalent invariant that prevents mismatched Go version coverage from being published or consumed.
Possible approaches
go-offsets-trackerto support type sizes and constants, allowing one generated artifact;The implementation should avoid duplicating the tracker's version discovery, caching, and third-party module behavior unless the benefits justify owning that logic.
Acceptance criteria
make update-offsetsand the scheduled update workflow use the resulting atomic or validated path.