Repository navigation
P3a-1: eliminate three production self-fork homonyms (KeySource, JsonValue, YamlValue) - #7509
Conversation
…ction renames Revert MechanismBit and InterpCondition/WeatherCondition — those families are measurement artifacts from the forced whole-corpus closure, not production co-resolution defects. Record hold disposition in gunbc.p3a1_self_fork_homonym_disposition. Retains SubstrateKeySource, JsonSchemaCarrierValue, YamlSchemaCarrierValue renames. Co-authored-by: Cursor <cursoragent@cursor.com>
Record msg_766977de detail: MechanismBit rename is ineffective because the diagnostic is on B0/B1 variant names; Condition distinct renames would work but are still measurement-artifact churn. Co-authored-by: Cursor <cursoragent@cursor.com>
Reply to review 45577: outer-type renames address the measured duplicate-type rows; shared variant spellings are a per-module co-import question with no production site today. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Response to review 45577 (codex REQUEST_CHANGES on variant-level homonyms) The Bit hold note is being read across a scope boundary. It documents why a shared type rename fails for four fixtures that all declare P3a-1's measured rows for JsonValue, YamlValue, and KeySource were duplicate unqualified type declarations across the Shared variant spellings ( Verified on current head:
So the outer-type rename does collapse the measured duplicate-type homonym for this lane. Renaming every shared variant arm would be carrier unification / format-design work (parent explicitly scoped List-vs-Map object representation out of this PR), not the homonym-rename slice. Recorded in |
Summary
Eliminates three measured production self-fork homonyms surfaced by the namespace-only binding rule: two declarations sharing an unqualified type name in one closure now refuse instead of pool-coincidence binding.
The whole-corpus census cannot prove any production pair is genuinely co-resolved in a real closure — the synthetic root forces everything together. The authoritative ambiguity population comes later from the compiler fold over real closures. These three renames are safe because they are live production carriers with verified overlapping consumers, not because the census count alone established co-resolution.
None of the five P3a-1 families were byte-structurally equivalent, so mechanical delete-and-repoint was unsound everywhere. This PR applies homonym elimination (rename) only where production modules diverge:
SubstrateKeySource(std.effects.KeySourcekeeps the name; String-vs-Symbol unification stays grants-lane)JsonSchemaCarrierValue(extdeps.languages.json.emit.JsonValuekeeps production emission; List-vs-Map object representation is a separate format-design lane)YamlSchemaCarrierValue(extdeps.languages.yaml.types.YamlValuekeeps workflow YAML)HOLD (no rename) — measurement artifacts from the forced whole-corpus closure, not production co-resolution defects:
nest_d1..d4each declaretype Bit = B0 | B1in four modules that never co-resolve). A shared rename (e.g. MechanismBit) is ineffective: the diagnostic is on variant namesB0/B1, not the type name — collision survives verbatim. Four distinct names would change the outcome but is churn; under namespace-only,nest_d1.Bitvsnest_d2.Bitdiffer and the collision dissolves for free.interp_test,weather) that never import each other. Distinct renames would technically clear it but are the same artifact class.Disposition recorded in
gunbc.p3a1_self_fork_homonym_dispositioncarrier notes.No alias keeps the bare name as a second namespace candidate.
Test plan
type KeySourcein v2.std.effects; no v2JsonValue/YamlValuetype decls outside note strings