Skip to content

Track sealed methods promoted from hidden embedded receivers #119

Description

@ben-ranford

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:coreSemantic, action, state, replay, and public core contractspriority:p2Normal milestone prioritytype:verificationExecutable compatibility, testing or release verification

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions