You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Refs #138. PR 1 of the three-PR split (Tier 5 contract; backend impl +
SPA impl follow in separate Tier 3 / Tier 4 PRs).
The registry endpoint walks `admin_site.get_app_list(request)` instead
of iterating `_registry` directly. Consumer overrides of `get_app_list`
(a common production pattern for operator-meaningful groupings — e.g.
"Loans" / "Configuration" instead of Django's default app-label
grouping) are honoured 1:1, matching the HTML admin's navigation.
Wire-shape additions to §2 (all additive; existing clients unaffected):
- `apps[].name` — human-readable group name from get_app_list
- `apps[].is_group` — true when the group's app_label is synthetic
(not in apps.get_app_configs()), false otherwise
- `apps[].models[].real_app_label` — the Django model._meta.app_label,
always present; SPA constructs API URLs from it
The reserved-label guard from PR #117 (RESERVED_APP_LABELS) still
applies: the package's session/ + registry/ + schema/ URLs win over
any consumer ModelAdmin with the same `app_label`. Synthetic group
labels collide with neither because the URL space is keyed on
`real_app_label`, not the group label.
Tier 5 — `docs/api-contract.md` touched. Human merge required per
docs/agents/autonomy-policy.md §1.5.
Co-authored-by: Martin Castro Laminrs <mcastro@laminr.ai>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments