Skip to content

fix(reporting): isolate handler registrations for each installation - #1847

Merged
bokelley merged 2 commits into
mainfrom
claude/issue-1846-reporting-install-names
Nov 3, 2026
Merged

bokelley merged 2 commits into
mainfrom
claude/issue-1846-reporting-install-names

Conversation

@bokelley

@bokelley bokelley commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

A reporting service currently gives every installed handler a class name derived from the service's address. Installing two sellers with different tool sets on the same service fails registration; a later service can also reuse a previous address. Allocate a fresh UUID for each new installation while preserving same-platform reinstall identity and strict conflicting-registration refusal.

The public regression installs sellers with distinct advertised tools, checks their delegation and reinstall behavior, and verifies explicit registry conflicts still fail without changing the original surface. This fixes the latent collision exposed by beta.10 Python 3.13 CI without changing protocol schemas, registry rules, dependencies or released artifacts. A proper cherry-pick -x forward-port to next will follow the stable source merge.

Validation:

  • Original public same-service case reproduces the failure; repaired reporting/registry suites pass 176 tests. Independent protocol/security review passed 33 related cases; independent Claude Opus 5.5 code/security/DX review approved.
  • make lint typecheck-all validate-generated and all applicable normal commit hooks pass.
  • Full required UV_NO_CACHE=1 make test passed: 18,865 passed, 2,819 skipped, 10 deselected and one existing xfail; 92.16% coverage. All tests and normal coverage gates ran unchanged.
  • Final-head required CI is awaiting only Python 3.12 coverage; this PR remains Draft until all required checks pass and fresh review completes. The separate non-required central-ledger checkout timed out before its policy script; the required IPR Policy / Signature check passed.

Fixes #1846

Give each newly installed reporting handler its own UUID-backed class name.
Service addresses can be reused, and one service can install sellers with
separate advertised tool sets. Preserve same-platform reinstall identity and
strict conflicting handler registration checks.

Fixes #1846
@bokelley
bokelley marked this pull request as ready for review November 3, 2026 19:12

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve — clean, well-scoped fix.

This PR swaps the installed reporting-handler class name from id(self):x to uuid4().hex (service.py:1433), fixing the beta.10 Py3.13 collision (#1846) where two sellers of the same original class with distinct per-instance tool sets produced an identical installed_name, tripping the "called twice with different tool sets" guard in __init_subclass__ → register_handler_tools. uuid4 guarantees a unique install name; the same-platform reinstall early-return (service.py:1324) still bounds registry growth to one entry per distinct install, and method qualnames preserve the stable original.__name__, so nothing that parses the class name regresses.

The new test (tests/test_reporting_install_identity.py) exercises same/different-service installs, distinct tool surfaces, delegation, and confirms the conflict guard still fires. Correctly labeled fix(reporting): — no public-surface, wire-shape, schema, layering, forward-compat, or credential changes; no semver or version-pathway obligation triggered.

No reviewer findings. Not gated (gated_paths: false), not high-risk, no author team gate. review_decision is REVIEW_REQUIRED but that only blocks when gated_paths is true, which it is not here. Falls through to row 9.

@bokelley
bokelley merged commit 86302d0 into main Nov 3, 2026
47 of 49 checks passed
@bokelley
bokelley deleted the claude/issue-1846-reporting-install-names branch November 3, 2026 19:18
@aao-ipr-bot aao-ipr-bot Bot mentioned this pull request Nov 3, 2026
bokelley added a commit that referenced this pull request Nov 3, 2026
…1849)

Forward-port the stable reporting installation fix from #1847.

Allocate a fresh class name for each reporting installation while preserving
same-platform reinstall identity, each seller's tool surface, and strict
conflicting-registration refusal. The port changes only the qualified service
lines and the same public regression; NEXT wire, schema, account, principal,
managed/production and dependency behavior remain unchanged.

(cherry picked from commit 86302d0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(reporting): allocate unique handler names for each installation

1 participant