June 28, 2026
Pydantic DTO sweep; dormant stacks removed
The Pydantic DTO migration rolls across the remaining CRUD namespaces
The Pydantic DTO migration rolls across the remaining CRUD namespaces. Lists completes the work with 9 id-addressed endpoints (GET/POST /lists, GET/PUT/DELETE /lists/
Dormant code leaves the tree in three rips. The Intent stack — api/intents.py, IntentService, CognitiveIntent, and three intent-only tests — goes away, since its only reference consumer (ambient wrapper) was already deleted and the live A2A channel (MCP talk_to_chalie, REST signals/updates/query) is independent of it. The /api/updates wrapper write-back follows: the belief and memory endpoints had no callers, the update permission grant is dropped from MCP default permissions, and api/updates.py is later pruned of its intent-outcome feedback route. Finally /api/query and /api/signals go with the wrapper authz layer — wrapper tokens are now opaque bearer credentials and check_permission/update_capabilities disappear from WrapperAuthService, with SchemaConvergenceService auto-dropping the dead columns.
Smaller dead-code cleanups close the door on placeholder surfaces: api/stubs.py (six 501 placeholder routes) and the unused GET /api/context endpoint are deleted, and the url_map shrinks accordingly. Test quality gets a real-request refactor — test_wrapper_auth_service now drives validate_bearer through create_app() instead of a MagicMock faking Werkzeug headers, and the valid-token case asserts last_seen_at slides off NULL.
Two hygiene passes finish the day. Internal spec-anchor references (§N, AC-N, Decision N, etc.) are scrubbed from all remaining production docstrings across the channels dir, then across services/, abilities/, and api/, leaving backend code anchor-clean with the unit gate green. Namespace variables are renamed *_bp → *_ns across 26 namespaces and 9 test fixtures; namespace name strings and path= values are untouched so the 140-rule url_map is byte-identical.
-
Lists namespace completes on Pydantic DTOs: 9 id-addressed CRUD ops plus id-addressed ListService methods alongside the content-addressed batch API
-
Voice, personality, scheduler, and skills namespaces all migrated to @expects/@responds with normalized error codes
-
Dormant Intent stack and /api/updates wrapper write-back ripped out, including intent feedback route
-
/api/query and /api/signals deleted; wrapper tokens are now opaque bearer credentials, authz layer gone (-643 LOC)
-
Dead stubs namespace and unused /api/context endpoint removed; validate_bearer test now uses a real Flask request
-
Namespace vars renamed *_bp to *_ns across 26 files with url_map byte-identical at 140 rules