Outcome
Detect removal of private methods that are promoted through hidden embedded receivers into an exported concrete type used to satisfy a sealed interface.
Evidence
Codex review on PR #88 at a1cce3b: #88
With type Sealed interface { seal() }, type hidden struct{}, func (hidden) seal() {}, and type Token struct{ hidden }, external var _ api.Sealed = api.Token{} compiles. Removing hidden.seal breaks that consumer, but the current inventory filter records required private methods only for declared exported receivers, so both inventories remain equal. The review finding is in scripts/rigor/cmd/rigor/main.go at the exported receiver filter.
Acceptance
- Compile the same external consumer against independent immutable baseline and candidate fixtures; removal of the promoted sealed method must change the inventory and reject the candidate.
- Follow the effective method sets of exported concrete types through hidden embedded receivers, including value and pointer method-set controls. Preserve Go selector ambiguity rules.
- Exclude unrelated hidden receivers and methods that cannot affect an exported method set or reachable sealed-interface contract.
- Keep inventory output deterministic across source/declaration order; run focused positive and negative controls at the minimum and current Go toolchains.
- Document the precise supported method-set boundary. Do not absorb cross-package hidden alias loading or unrelated Go type-system coverage into this change.
Scope relationship
This is new Go method-set coverage beyond issue #58's bounded declaration and consumer fixture set. It is adjacent to #113 (reachable hidden interface requirements) and #114 (promoted selector ambiguity), but neither tracks this removal case. Keep it outside v1.1.0. Until implemented, changes involving private methods on hidden embedded receivers require explicit compatibility review and external consumer compilation evidence; a passing inventory comparison alone is insufficient.
Outcome
Detect removal of private methods that are promoted through hidden embedded receivers into an exported concrete type used to satisfy a sealed interface.
Evidence
Codex review on PR #88 at a1cce3b: #88
With
type Sealed interface { seal() },type hidden struct{},func (hidden) seal() {}, andtype Token struct{ hidden }, externalvar _ api.Sealed = api.Token{}compiles. Removinghidden.sealbreaks that consumer, but the current inventory filter records required private methods only for declared exported receivers, so both inventories remain equal. The review finding is inscripts/rigor/cmd/rigor/main.goat the exported receiver filter.Acceptance
Scope relationship
This is new Go method-set coverage beyond issue #58's bounded declaration and consumer fixture set. It is adjacent to #113 (reachable hidden interface requirements) and #114 (promoted selector ambiguity), but neither tracks this removal case. Keep it outside v1.1.0. Until implemented, changes involving private methods on hidden embedded receivers require explicit compatibility review and external consumer compilation evidence; a passing inventory comparison alone is insufficient.