17 — Feature Package Audit
Section titled “17 — Feature Package Audit”Generated: 2026-04-24 Status: Active
This document audits the current packages/feature-* surface against the app-owned UI model.
Scope:
- current
packages/feature-*packages only - no historical migration log
- explicit
keeporreducedecision per package
Current inventory
Section titled “Current inventory”| Package | Major contents | pages/ present | Reusable logic present | Current consumers |
|---|---|---|---|---|
feature-activity | api.ts, queries.ts, query-keys.ts, formatting.ts, timeline/filter/dialog components, types.ts | no | queries, formatting, types, reusable UI blocks | activity pages, admin activity, workspace-settings, publications package, people package |
feature-people | api.ts, queries.ts, mutations.ts, query-keys.ts, shared people types | no | queries, mutations, shared types | people pages, workspace-settings sections |
feature-publications | api.ts, queries.ts, mutations.ts, search-params.ts, query-keys.ts, shared types | no | queries, mutations, search helpers, types | publications pages, dashboard overview, import page, people page |
Decision categories
Section titled “Decision categories”| Decision | Operational meaning |
|---|---|
keep | The package is a stable reusable feature-logic owner with clear boundaries and active multi-consumer use. |
reduce | Keep only reusable feature logic in the package; all dashboard page composition remains app-owned. |
Package decisions
Section titled “Package decisions”feature-activity—keep: continue as shared feature logic and reusable UI primitives.feature-people—reduced and kept: dashboard ingestion toast orchestration moved into the app; package now owns reusable people query/mutation/types only.feature-publications—reduced and kept: dashboard ingestion polling and resync toast orchestration moved into the app; package now owns reusable publications query/mutation/search/types only.
Guardrails
Section titled “Guardrails”- Do not place dashboard page components in any
packages/feature-*package. - Keep route composition in
apps/dashboard/src/features/*. - Keep package exports explicit through
packages/feature-*/src/index.ts. - Prefer app-local ownership for single-screen orchestration.
Follow-up exceptions
Section titled “Follow-up exceptions”feature-activityremains the only surviving package with exported feature UI. That is still justified because the same cards/dialogs are consumed by both the dedicated activity feature and the admin activity screen.feature-peopleis thinner after removing dashboard ingestion helpers. If additional consumers do not emerge, it is a reasonable future fold-back candidate once its query/mutation surface stabilizes.feature-publicationsremains defensible because its search/query/mutation surface is shared across multiple dashboard screens, but the package should not accumulate more dashboard workflow hooks.
Steady state
Section titled “Steady state”The current feature package model is smaller and stricter:
- keep:
feature-activity - reduced and kept:
feature-people,feature-publications
No further page or route ownership should remain in packages/feature-*.