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
docs(audits): correct the app badge/separator finding — NavigationRenderer exists
My first pass claimed NavigationRenderer had been deleted; it has not. The
component (layout/src/NavigationRenderer.tsx, 1327 lines) is publicly exported
and SDUI-registered as `navigation-renderer`, and fully implements separator
(:906) + badge/badgeVariant (:983-985, :1024-1025). The error came from a
truncated grep (head -3 showed only CHANGELOG/ROADMAP hits).
Corrected classification: badge/badgeVariant/separator are SURFACE-CONDITIONAL,
not dead — they render through the SDUI component but not through
UnifiedSidebar, which is what actually renders app.navigation in the console.
Disposition flips from enforce-or-prune to port-the-three-branches.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/audits/2026-07-naming-drift-recheck.md
+10-6Lines changed: 10 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,7 +31,7 @@ stale. Three real problems remain, two of them a coupled pair that produces
31
31
| 5 |**page `label` → `title`**|**🔴 FORWARD-DRIFT — live**| spec `label` is required (`page.zod.ts:303`); the region/SDUI renderer reads `schema.title` with no fallback (`page.tsx:503-507`). Zero `schema.label` reads in `page.tsx`|
| 8 | app `accentColor` / `badgeVariant` / `separator`|**SPLIT** — `accentColor` aligned; the other two **decayed**|#1894 declared all three in the spec to match objectui's `NavigationRenderer`. `accentColor` is still consumed (`app-shell/src/layout/ConsoleLayout.tsx:171`, `PageHeader.tsx:46`, `apps/console/src/hooks/useBranding.ts:25`). But**`NavigationRenderer` no longer exists** — the live nav is `UnifiedSidebar`, which renders neither `badgeVariant`**nor `badge` itself**, and has no `separator` branch (`separator` is only recognized as "no href" by `AppContent.tsx:849` and excluded by `nav-target.ts:17`) |
34
+
| 8 | app `accentColor` / `badgeVariant` / `separator`|**SPLIT** — `accentColor` aligned; the other two are **surface-conditional**|#1894 declared all three to match objectui's `NavigationRenderer`. `accentColor` is consumed on the live path (`app-shell/src/layout/ConsoleLayout.tsx:171`, `PageHeader.tsx:46`, `apps/console/src/hooks/useBranding.ts:25`). `badge`/`badgeVariant`/`separator`**are fully implemented** — but only in `layout/src/NavigationRenderer.tsx` (`:906` separator, `:983-985`/`:1024-1025` badge), which is a *publicly exported, SDUI-registered* component (`navigation-renderer`),**not** the console's own app sidebar. `UnifiedSidebar` — the component that actually renders `app.navigation` in the console — renders no badge and has no separator branch (`separator` is merely recognized as "no href" by `AppContent.tsx:849` and excluded by `nav-target.ts:17`) |
35
35
| 9 | action `disabled` → `enabled`|**RESOLVED 2026-07**| fixed across all six rendering surfaces (objectui#2863); showcase specimen `showcase_archive_task` (#3643) |
| — | skill `requiredPermissions` vs `permissions`|**NOT A DRIFT** — mis-filed |`requiredPermissions`**never existed** on `SkillSchema`; the spec key is and was `permissions` (`ai/skill.zod.ts:121`). The original audit described prose/label drift in the docs, not a spec-vs-runtime mismatch |
@@ -87,11 +87,15 @@ fix for this whole class; the per-item wiring below is the tactical one.
87
87
instead of the live `lookupFilters` — corrected (framework).
88
88
89
89
**Recorded, not fixed (each needs an owner decision):**
90
-
4.**app `badgeVariant` + nav `separator`** — a #1894 reverse-drift fix that
91
-
**decayed** when `NavigationRenderer` was replaced by `UnifiedSidebar`.
92
-
Enforce-or-prune: either the sidebar renders nav badges + separators (they are
93
-
ordinary nav affordances), or both keys leave the spec. Note `badge` itself is
94
-
also unrendered, so this is "nav badges are gone", not merely a variant key.
90
+
4.**app `badge`/`badgeVariant` + nav `separator` — surface-conditional, do NOT
91
+
prune.** The capability is fully built in `NavigationRenderer` (public export
92
+
+ SDUI `navigation-renderer`); what is missing is the same three affordances
93
+
in `UnifiedSidebar`, the component that actually renders `app.navigation` in
94
+
the console. So an author's `badge: '3'` works if the nav is rendered through
95
+
the SDUI component and silently vanishes in the console shell — a
96
+
*surface-dependent* no-op, the hardest kind to diagnose. Disposition: port the
97
+
three branches into `UnifiedSidebar` (reference implementations already exist
98
+
at `NavigationRenderer.tsx:906,983-985`), not prune the keys.
95
99
5.**`skill.permissions` has no gate** — mis-filed as naming drift; it is an
96
100
aspirational-config item (§4). The ledger marks it `live` on the evidence of a
97
101
*preview renderer* while the identically-unenforced `tool.permissions` is
field `maxLength`/`minLength`/`referenceFilters`/`maxRating`; page `type`→`pageType` & `label`→`title` & `visibility`; dashboard `title` vs `label`; app `accentColor`/`badgeVariant`/`separator` (renderer reads, **not in spec**); action `disabled`→`enabled`; flow `http` vs `http_request`; skill `requiredPermissions` vs `permissions`; agent `knowledge.{topics→sources}`; webhook `object`→`object_name`, `isActive`→`active`.
49
49
50
-
**✅ Rechecked 2026-07-27 — six of nine were already resolved; the list was stale, not the code.** Closed: `referenceFilters` (→ `lookupFilters`, #2377), `maxRating` (→ `max`), page `visibility` (→ `visibleWhen`), dashboard `title`/`label` (renderer dual-reads; widget keys hard-fail via `.strict()`, #1894), flow `http` (canonical), agent `knowledge.topics` (alias folded, #1891), webhook keys (#3489); action `disabled` fixed across all six rendering surfaces (objectui#2863 + #3643); skill `requiredPermissions` was **never a drift** (mis-filed prose drift). **Still real, fixed in the recheck pass:** the coupled page pair `type`→`pageType` + `label`→`title` (mis-renders every non-record page today) and two snake-only `max_length` readers. **Left as decisions:** app `badgeVariant` + nav `separator` decayed when `NavigationRenderer` was replaced by `UnifiedSidebar`; `skill.permissions` has no gate (belongs in §4); `agent.knowledge` is inert at runtime. Full per-item evidence: [`2026-07-naming-drift-recheck.md`](./2026-07-naming-drift-recheck.md).
50
+
**✅ Rechecked 2026-07-27 — six of nine were already resolved; the list was stale, not the code.** Closed: `referenceFilters` (→ `lookupFilters`, #2377), `maxRating` (→ `max`), page `visibility` (→ `visibleWhen`), dashboard `title`/`label` (renderer dual-reads; widget keys hard-fail via `.strict()`, #1894), flow `http` (canonical), agent `knowledge.topics` (alias folded, #1891), webhook keys (#3489); action `disabled` fixed across all six rendering surfaces (objectui#2863 + #3643); skill `requiredPermissions` was **never a drift** (mis-filed prose drift). **Still real, fixed in the recheck pass:** the coupled page pair `type`→`pageType` + `label`→`title` (mis-renders every non-record page today) and two snake-only `max_length` readers. **Left as decisions:** app `badge`/`badgeVariant` + nav `separator` are implemented in `NavigationRenderer` (SDUI) but missing from `UnifiedSidebar`, the console's own app sidebar — a surface-dependent no-op, port rather than prune; `skill.permissions` has no gate (belongs in §4); `agent.knowledge` is inert at runtime. Full per-item evidence: [`2026-07-naming-drift-recheck.md`](./2026-07-naming-drift-recheck.md).
51
51
52
52
### 4. 🟠 Aspirational config (rich spec, zero runtime) — prune or mark `experimental`
0 commit comments