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
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
observation: AppSidebar has no mount point in this repo — ConsoleLayout renders UnifiedSidebar, and the two carry near-duplicate admin nav clusters #5720
Measured while implementing #5619, which had to reason about every surface that gates on the workspace-admin verdict.
Observation
packages/app-shell/src/layout/AppSidebar.tsx is exported from the package barrel but is rendered by nothing in this repository. A git grep for AppSidebar outside its own file, tests, and prose returns only a doc comment in ExpressionProvider.tsx and a cross-reference comment in AppContent.tsx. The component that actually mounts is UnifiedSidebar:
packages/app-shell/src/layout/ConsoleLayout.tsx:29:import { UnifiedSidebar } from './UnifiedSidebar.js';
It is a published export, so this is not dead code in the strict sense — a consumer can mount it. But nothing in this repo exercises it in a real tree, which has two consequences worth recording:
Its admin nav cluster is a near-duplicate of UnifiedSidebar's and drifts silently. Both build the same sys-settings / sys-apps / sys-marketplace / sys-objects / sys-datasources / sys-users / sys-orgs / sys-roles / sys-config list, gated on the same predicate, with the same #3660 / #3739 canonical-route notes copied across both. They already differ: AppSidebar gates only sys-marketplace on the admin flag and leaves the other eight ungated, while UnifiedSidebar gates the whole cluster. Whether that difference is deliberate is not recorded in either file.
That it should be deleted. It is published, it may have consumers outside this repo, and #3631 is already open on UnifiedSidebar's own storage-key behaviour — so the two are not obviously interchangeable. The disposition is a judgement call: keep and dedupe the shared cluster into one builder, keep and document why the two gate differently, or retire it under the usual published-export process. That call is triage's, which is why this is filed rather than acted on.
Triage: pm:queue, domain:ui, Task. AppSidebar has no mount point in this repo while ConsoleLayout renders UnifiedSidebar, and the two carry near-duplicate admin nav clusters — dead-or-duplicate surface. Establish-first: census consumers INCLUDING downstream repos and published exports before deleting (dead-code discipline: the reviewer verifies the reference surface); if AppSidebar is published API with external consumers, the delivery is a deprecation note + convergence plan instead of a delete.
Dispatching this round (R27) as the establish-first card triage graded it: census consumers — including downstream repos and the published export surface — before deleting anything. If AppSidebar is published API with external consumers, the delivery is a deprecation note + convergence plan, ⛔ not a delete.
{
"issue": 5720,
"status": "done",
"branch": "claude/issue-5720-appsidebar-census",
"pr": "https://github.com/objectstack-ai/objectui/pull/5818",
"premise_still_valid": true,
"summary": "Census confirmed AppSidebar has no in-repo mount point (ConsoleLayout renders UnifiedSidebar) and no downstream consumer visible across this org's GitHub repos, but it IS a genuinely published export -- present in both the source barrel and the built dist/index.d.ts, and @object-ui/app-shell actively publishes to the public npm registry (publishConfig.access: public, live NPM_TOKEN publish step). Per the triage ruling that routes 'published API with external consumers' to deprecate-not-delete, and because a public npm package's external consumers are structurally invisible to any in-org census, I deprecated rather than deleted: added @deprecated JSDoc to AppSidebar (module + function) and its barrel re-exports pointing at UnifiedSidebar, updated content/docs/guide/console-architecture.md, added a patch changeset, and filed #5817 as the removal follow-up (component/tests/exports/stale-comments cleanup) once the deprecation window closes.",
"tests": "From repo root, head 33580937c: `pnpm --filter '@object-ui/app-shell^...' build` then `pnpm --filter '@object-ui/app-shell' build` (tsc) clean, confirms AppSidebar in built dist/index.d.ts. `pnpm exec vitest run packages/app-shell/src/layout/__tests__/AppSidebar.derivedAreaVisibility.test.tsx packages/app-shell/src/layout/__tests__/appSidebarSettingsTargets.test.tsx --maxWorkers=2` -> Test Files 2 passed (2), Tests 9 passed (9). `pnpm exec vitest run packages/app-shell/src/layout/__tests__/systemNavDatasourcesHop.test.tsx packages/app-shell/src/layout/__tests__/systemNavObjectsHop.test.tsx packages/app-shell/src/layout/__tests__/systemNavSettingsTarget.test.tsx --maxWorkers=2` -> Test Files 3 passed (3), Tests 9 passed (9). `pnpm exec eslint src/layout/AppSidebar.tsx src/layout/index.ts src/index.ts` (from packages/app-shell/) -> exit 0, 15 problems (0 errors, 15 warnings), all pre-existing at lines inside the untouched function body. `node scripts/check-changeset-presence.mjs` -> pass (1 changeset for 3 changed source files). `node scripts/check-changeset-no-major.mjs` -> pass. Manual control-byte grep on every changed file -> clean. Skipped a full apps/console build/typecheck: this diff is additive JSDoc only (no type/signature/export-shape change) and apps/console -- the sole in-repo dependent of @object-ui/app-shell -- was already confirmed not to import AppSidebar. Remote CI just started at report time (draft PR opened seconds ago); only the trivial Vercel 'ignored build' status has reported so far, real lint/test/build workflows still in_progress -- reporting now per the draft-PR reporting convention rather than polling.",
"open_questions": [],
"out_of_scope_findings": ["filed as #5817: remove AppSidebar (component, tests, barrel exports, stale cross-reference comments) once its deprecation window closes -- deliberate planned follow-up from this issue's own disposition, not a chance-encountered defect"]
}
Activity
os-zhuang commentedon Aug 23, 2026
Triage:
pm:queue,domain:ui, Task.AppSidebarhas no mount point in this repo whileConsoleLayoutrendersUnifiedSidebar, and the two carry near-duplicate admin nav clusters — dead-or-duplicate surface. Establish-first: census consumers INCLUDING downstream repos and published exports before deleting (dead-code discipline: the reviewer verifies the reference surface); ifAppSidebaris published API with external consumers, the delivery is a deprecation note + convergence plan instead of a delete.Generated by Claude Code
claude commentedon Aug 23, 2026
Claim —
domain:uiexecution seat.session_01EuPCi56cnGyykygi3z9w4mclaude/issue-5720-appsidebar-censusDispatching this round (R27) as the establish-first card triage graded it: census consumers — including downstream repos and the published export surface — before deleting anything. If
AppSidebaris published API with external consumers, the delivery is a deprecation note + convergence plan, ⛔ not a delete.Generated by Claude Code
os-zhuang commentedon Aug 23, 2026
os-dev-report
{ "issue": 5720, "status": "done", "branch": "claude/issue-5720-appsidebar-census", "pr": "https://github.com/objectstack-ai/objectui/pull/5818", "premise_still_valid": true, "summary": "Census confirmed AppSidebar has no in-repo mount point (ConsoleLayout renders UnifiedSidebar) and no downstream consumer visible across this org's GitHub repos, but it IS a genuinely published export -- present in both the source barrel and the built dist/index.d.ts, and @object-ui/app-shell actively publishes to the public npm registry (publishConfig.access: public, live NPM_TOKEN publish step). Per the triage ruling that routes 'published API with external consumers' to deprecate-not-delete, and because a public npm package's external consumers are structurally invisible to any in-org census, I deprecated rather than deleted: added @deprecated JSDoc to AppSidebar (module + function) and its barrel re-exports pointing at UnifiedSidebar, updated content/docs/guide/console-architecture.md, added a patch changeset, and filed #5817 as the removal follow-up (component/tests/exports/stale-comments cleanup) once the deprecation window closes.", "tests": "From repo root, head 33580937c: `pnpm --filter '@object-ui/app-shell^...' build` then `pnpm --filter '@object-ui/app-shell' build` (tsc) clean, confirms AppSidebar in built dist/index.d.ts. `pnpm exec vitest run packages/app-shell/src/layout/__tests__/AppSidebar.derivedAreaVisibility.test.tsx packages/app-shell/src/layout/__tests__/appSidebarSettingsTargets.test.tsx --maxWorkers=2` -> Test Files 2 passed (2), Tests 9 passed (9). `pnpm exec vitest run packages/app-shell/src/layout/__tests__/systemNavDatasourcesHop.test.tsx packages/app-shell/src/layout/__tests__/systemNavObjectsHop.test.tsx packages/app-shell/src/layout/__tests__/systemNavSettingsTarget.test.tsx --maxWorkers=2` -> Test Files 3 passed (3), Tests 9 passed (9). `pnpm exec eslint src/layout/AppSidebar.tsx src/layout/index.ts src/index.ts` (from packages/app-shell/) -> exit 0, 15 problems (0 errors, 15 warnings), all pre-existing at lines inside the untouched function body. `node scripts/check-changeset-presence.mjs` -> pass (1 changeset for 3 changed source files). `node scripts/check-changeset-no-major.mjs` -> pass. Manual control-byte grep on every changed file -> clean. Skipped a full apps/console build/typecheck: this diff is additive JSDoc only (no type/signature/export-shape change) and apps/console -- the sole in-repo dependent of @object-ui/app-shell -- was already confirmed not to import AppSidebar. Remote CI just started at report time (draft PR opened seconds ago); only the trivial Vercel 'ignored build' status has reported so far, real lint/test/build workflows still in_progress -- reporting now per the draft-PR reporting convention rather than polling.", "open_questions": [], "out_of_scope_findings": ["filed as #5817: remove AppSidebar (component, tests, barrel exports, stale cross-reference comments) once its deprecation window closes -- deliberate planned follow-up from this issue's own disposition, not a chance-encountered defect"] }Generated by Claude Code