Repository navigation
refactor(agent-registry): use semantic agent identifiers - #1516
seonghobae wants to merge 23 commits into
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (4)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe agent registry now uses ChangesAgent Registry Semantic Identifier Migration
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to This PR renames agent registry fields while preserving historical JSON and Python access patterns through compatibility adapters, without changing task mapping or execution authority. No actionable merge-blocking risk remains after normal checks and review. 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
PR governance metadata gate is not ready for
|
|
Exact-head RCA update for
No predecessor evidence is transferred, and no queued/cancelled/skipped state is being counted as success. |
|
@cwl-noema-review review Re-review the unchanged exact head |
There was a problem hiding this comment.
Noema LLM review
The refactor successfully transitions the agent registry to semantic identifiers while maintaining a robust, bidirectional compatibility layer for legacy consumers. The implementation of _SemanticRawDict and _LegacyRawDict ensures that mutations to either the semantic raw_entry or the legacy raw property are synchronized, preserving reference identity and JSON serializability. All previously identified regressions (constructor compatibility, dataclass serialization, and mutation synchronization) have been addressed and verified by the expanded test suite in backend/tests/test_agent_registry.py.
Reviewed changed lines
backend/services/agent_registry.py:141 (RIGHT): Correctly implements the write-through synchronization from legacy keys to semantic keys in the authoritative raw_entry.backend/services/agent_registry.py:273 (RIGHT): The custom init correctly reconciles legacy and semantic constructor arguments, preventing TypeErrors for legacy callers.backend/services/agent_registry.py:411 (RIGHT): The property 'raw' returns the retained _legacy_raw_dict, ensuring reference identity across multiple accesses.
Adversarial validation
backend/tests/test_agent_registry.py:245 (RIGHT)falsified: Mutating a retained reference to agent.raw will be observed by a second reference to the same agent's raw property. — test_retained_raw_references_share_one_coherent_dictionary verifies 'first_raw is second_raw' and that mutations are shared.backend/tests/test_agent_registry.py:318 (RIGHT)falsified: Calling dataclasses.asdict() on RegisteredAgent will crash due to the _LegacyRawDict constructor expecting a _SemanticRawDict. — test_registered_agent_asdict_exposes_only_semantic_dataclass_state verifies that asdict succeeds and excludes internal synchronization state.- Residual risk: Low. The only remaining fragility is pickle support, which is explicitly declared as unsupported and not used in the codebase.
Findings
- No blocking findings.
- Result: APPROVE
- Head SHA:
c65c3c2db6398ce771e52c2e464f95c3f0961c00 - Reviewer credential:
noema-review-github-app-refresh - Actor:
cwl-noema-review[bot]
Preserve the semantic agent-registry delta while ordinary-merging naruon#1828's repository-wide PyJWT, AnyIO, oauthlib, Next.js, Sharp, Starlette, HTTPX2, lock-ownership, RCA, and contract repairs. Exact rerun 33841625646 proved the stale head's Trivy failure; no finding is suppressed. Verification: backend 1,816 passed / 33 optional skips; frontend 437 passed; Ruff, package compatibility, ESLint, TypeScript, and production build passed.
Current exact-head security integration (2026-09-30)
This section supersedes the older exact-identity and queued-state notes below.
c5b6c926bc2937a87aa12e24e8178705ca66cc89(treeae855b5364a3d784f324401e579de0dd1d1fb8f2).71ea032006665ebb63f0b5616b764e63d63a897f) and carries canonical security ownernaruon#1828@e725203385a6381040b22231281fc63d9ed09f62; no force-push or rebase was used.109906894968, proved the predecessor head's Trivy failure: ten PyJWT 2.13.0 findings, three AnyIO findings, two oauthlib findings, two Next.js findings, and one Sharp finding. fix(security): repair shared dependency scan failures #1828 advances the shared manifests/locks to PyJWT 2.14.0, AnyIO 4.15.1, oauthlib 4.0.0, Next.js 16.3.6, and Sharp 0.35.4, plus the Starlette/HTTPX2 warning-clean boundary and disjoint lock-ownership contract.1,816 passed, 33 skippedunder warnings-as-errors with inherited proxy variables removed; frontend437 passed; focused registry/dependency contracts14 passed; Ruff, installed-package compatibility, ESLint, TypeScript, and the production build passed. A first backend run exposed the execution sandbox's injected SOCKS proxy without optionalsocksio; the exact failing test passed when only those external proxy variables were removed. No source or gate was changed for that environment condition.Owner and reuse boundary
ContextualWisdomLab/naruonowns the workspace agent registry consumed by task-to-agent resolution and Noema integration. Canonical organization-owned vocabulary is semantic:agent_name,agent_framework,agent_entrypoint,agent_description,agent_capabilities,agent_enabled, andraw_entry. Historical generic names remain only at bounded compatibility surfaces.TDD / current repair lineage
53c6f80db9b185e3038ac8302ba4d3be9d31d36crequired the semantic registry vocabulary.dataclasses.asdict()traversal.c65c3c2db6398ce771e52c2e464f95c3f0961c00keepsRegisteredAgenta frozen dataclass with semantic dataclass fields, supplies a bounded custom constructor accepting historicalname/framework/entrypoint/description/capabilities/enabled/rawkeywords, fails closed when legacy and semantic forms disagree, and keeps_legacy_raw_dictoutside dataclass field traversal while preserving the retained synchronized dictionary pair.71ea032006665ebb63f0b5616b764e63d63a897fremoves mutation side effects from assertion expressions, separatessetdefault/pop/popitemoperations from assertions, and normalizesservices.agent_registryimports to one style. Production semantics are unchanged.Compatibility boundary
Historical JSON keys are accepted on ingress and canonicalized into semantic
raw_entry. Historical Python scalar properties and the real mutablerawdictionary remain available as compatibility adapters.rawandraw_entryremain shallow synchronized mappings; frozen typed fields retain load-time values. The constructor accepts either vocabulary but rejects contradictory dual specification.The pickle note is informational rather than an established product defect: repository search found no
RegisteredAgentpickle/persistence consumer contract, so this PR does not invent an unsupported persisted-object format. A future real persisted-object consumer requires an explicit compatibility contract and RED regression before source changes.DDD / documentation
docs/doctoring/agent-registry-semantic-identifiers.mdrecords the Workspace Agent Registry bounded context,RegisteredAgentaggregate, anti-corruption boundary, stable-reference compatibility invariant, and APA 7 traceability.Exact identity
develop@042b0c70531b229af3acbd0421a2f23098d848b3fix/agent-registry-semantic-identifiers71ea032006665ebb63f0b5616b764e63d63a897fThe PR was returned from Ready to Draft on 2026-09-04 after a fresh exact-head sweep found live non-passing governance evidence and unresolved current-head review findings. This is a lifecycle repair, not a source rollback.
Current-head review state
The three GitHub Code Quality source findings on predecessor head
c65c3c2...were repaired by direct child71ea032..., replied to with exact-head evidence, and resolved. The source delta is bounded tobackend/tests/test_agent_registry.py: predecessor→current is one commit, one file, +17/-14.One Devin analysis thread remains open intentionally: its review environment lacked
pytest, so hosted verification must prove the focused compatibility suite on the new exact head before that analysis is closed.Noema's
APPROVEDreview was submitted for predecessor headc65c3c2db6398ce771e52c2e464f95c3f0961c00. Because the test repair advanced the head, that approval is now predecessor evidence and is not transferred to71ea032006665ebb63f0b5616b764e63d63a897f.Current-head verification state
Fresh repository-owned workflow runs were created for exact head
71ea032006665ebb63f0b5616b764e63d63a897f. At the latest refetch, Application CI, Security Scan, Dependency Review, SAST Semgrep, Bandit Security Scan, and Build and Publish Docker Images are all queued. No predecessor GREEN is promoted to this head.Protected
developremains042b0c70531b229af3acbd0421a2f23098d848b3and currently requires, among other contexts,backend (Python 3.14),frontend,security, CodeQL analyses,required-workflow-bootstrap,scorecard,osv-scan,trivy-fs,strix,coverage-source-tree,coverage-evidence, image validations,opencode-review, and authoritative dependency review.On predecessor head
c65c3c2..., the latest Strix and OpenCode review checks were cancelled. Those results neither prove a Naruon source defect nor authorize a bypass; the new exact head requires fresh central owner verdicts.Merge boundary
Queued, in-progress, cancelled, neutral, absent, stale, predecessor, model-only, status-only and author-only evidence is non-passing. Merge only if the unchanged then-current exact head satisfies every live required repository/organization check, all valid findings/threads are resolved, and any qualifying independent non-author approval required by live governance is current after the latest push. No force-push, destructive rebase, self-approval, bypass, gate weakening, or predecessor evidence transfer.