Skip to content

fix(registry): allowlist error detail metadata - #1075

Merged
bokelley merged 1 commit into
mainfrom
issue-1031-registry-error-envelope
Aug 24, 2026
Merged

fix(registry): allowlist error detail metadata#1075
bokelley merged 1 commit into
mainfrom
issue-1031-registry-error-envelope

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • expose public typed RegistryErrorDetails and RegistryValidationIssue envelopes
  • project only bounded machine-readable registry error fields while dropping remote prose, rejected values, credentials, and unknown nested data
  • preserve bounded retry metadata and documented legacy recovery codes for authenticated write/feed workflows

Validation

  • uv run pytest -q tests/test_registry.py tests/test_public_api.py (194 passed)
  • make lint typecheck
  • uv run pytest -q (7179 passed, 41 skipped, 9 deselected, 1 xfailed)
  • commit hooks: Black, Ruff, mypy, adopter fixtures, Bandit, JSON/YAML and repository hygiene checks
  • independent code and protocol/security expert reviews: approved

Refs #1031

@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 — no blocking or medium findings.

This PR replaces the raw-body RegistryError.details with a fail-closed allowlist projection in registry.py: only bounded machine tokens (code/field/ids/retry hints/valid_values/validation_issues) survive, while remote prose, rejected inputs, credentials, and secret-shaped codes are dropped, with per-list incremental budgets plus a final 4KB size backstop. Retry-hint parsing still reads the raw payload (registry.py:357), so retry behavior is unchanged. Change is well tested (secret leakage, prose rejection, legacy-code promotion, bounds).

Checks applied:

  • No critical/high findings (row 1 clear).
  • gated_paths: false, so row 2 does not apply despite review_decision: REVIEW_REQUIRED.
  • high_risk: true is driven solely by src/adcp/__init__.py (modified), with no medium-or-higher finding on that file — row 5 does not fire; row 3 (deleted) and row 4 (medium data-loss/schema/infra) do not apply.
  • No author no-auto-approve team match (row 7 clear).
  • No prior decision.
  • Only one finding, severity low, so row 8 (≥3 medium) does not apply.

Medium findings: none.

The single low finding (exceptions.py:198 — details narrows public content) is a deliberate, intended tightening consistent with the fail-closed security goal and is omitted per the low-severity policy. Falls through to row 9 — approve.

@bokelley
bokelley merged commit 5e48c93 into main Aug 24, 2026
27 checks passed
@bokelley
bokelley deleted the issue-1031-registry-error-envelope branch August 24, 2026 10:05
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.

1 participant