Repository navigation
Conversation
trissim
left a comment
There was a problem hiding this comment.
Accepted source checkpoint. The private hook ran before abstract-class exclusion and could hand a working Read alias to an uninstantiable specialization. Existing RegisteredWireMeta now owns that lifecycle; the private types map and hook are deleted. I read the metaclass/library contract, both real Claude/OpenCode consumers, all concrete alias declarations and the fresh-declaration controls. External spellings, input refusal behavior and recorded edit presentation remain at their existing owners. Exact duplicate tuples fail at declaration; partial alias overlaps fail at decode before validation can disguise the collision as invalid input. No declaration-time partial-overlap claim is made. Independently replayed actual CLI-family and edit-evidence cases: 21 passed in 0.47s. The plan also stops demanding deletion of independent producer ABI coverage and corrects its stale ThreadRename/backend-MRO instructions. Remaining registries/name/sigil/path work and installed qualification remain open.
An abstract subclass of
CliReadArgumentsinherits its external aliases and the old__init_subclass__hook immediately overwrites theReaddecoder with that uninstantiable class. A normal read then raisesTypeError. Replaying the integration-base source reproduces this exact failure.CliToolArgumentsnow uses the existingRegisteredWireMetaand oneRegistryConfig, keyed by each declaration's externalcli_namestuple. Registration happens after Pydantic/ABC construction. Decode derives matching shapes from that registry; the privatetypesdictionary and registration hook are deleted. The same registry object is exposed through the normal library-owned view, without another alias map, metaclass or production class.Claude
ToolUse.calland OpenCodeToolState.callretain their shared decode entrypoint. Seven shapes preserve all 13 case-sensitive external spellings, field aliases, extra input, canonical records and edit patches. Unknown names and invalid arguments remain the original call. Exact duplicate alias tuples fail at declaration through the library. Overlapping nonidentical tuples fail explicitly at decode before validation; declaration-time overlap detection is not claimed. The new-case edit count remains one declaration, as before; the gain is correct shared lifecycle and collision handling.Plan 6.4 now preserves the independent Pi producer ABI versus converter-coverage comparison, removes the bogus external-manifest deletion target, corrects the still-live
ThreadRename.kindsentry and fixes the backend capability MRO instruction. Four other registration owners and name/sigil/path work remain. Shared phase-proof changes belong to #2627; this does not close the whole phase.Source evidence uses NRA's original class census and compact family projection across Core/hooks/tests/tools, paired Toad and installed metaclass-registry/Pydantic source. Before/after: 1,643/1,644 modules, 7,434/7,438 original classes, 7,144 projected classes each, zero parse omissions. The 290/294 unprojected originals remain explicit, including four new function-local declaration controls. The compact index does not resolve the
AutoRegisterMetapackage re-export as a base ofRegisteredWireMeta; source inspection and a fresh runtime MRO read confirm composition withModelMetaclass. This is source evidence plus bounded runtime checks, not a global equivalence proof.Validation:
ToolCall/transcript owner; original failed output is retained.git diff --checkpasses. Receipts, baseline reproduction and runtime MRO are in/home/ts/.cache/agent-scratch/cli-tool-argument-family.No live install or installed qualification was performed by this branch. The paired integration owner retains that handoff.