Skip to content

17 — Feature Package Audit

Migrated from root technical docs.

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 keep or reduce decision per package
PackageMajor contentspages/ presentReusable logic presentCurrent consumers
feature-activityapi.ts, queries.ts, query-keys.ts, formatting.ts, timeline/filter/dialog components, types.tsnoqueries, formatting, types, reusable UI blocksactivity pages, admin activity, workspace-settings, publications package, people package
feature-peopleapi.ts, queries.ts, mutations.ts, query-keys.ts, shared people typesnoqueries, mutations, shared typespeople pages, workspace-settings sections
feature-publicationsapi.ts, queries.ts, mutations.ts, search-params.ts, query-keys.ts, shared typesnoqueries, mutations, search helpers, typespublications pages, dashboard overview, import page, people page
DecisionOperational meaning
keepThe package is a stable reusable feature-logic owner with clear boundaries and active multi-consumer use.
reduceKeep only reusable feature logic in the package; all dashboard page composition remains app-owned.
  • feature-activitykeep: continue as shared feature logic and reusable UI primitives.
  • feature-peoplereduced and kept: dashboard ingestion toast orchestration moved into the app; package now owns reusable people query/mutation/types only.
  • feature-publicationsreduced and kept: dashboard ingestion polling and resync toast orchestration moved into the app; package now owns reusable publications query/mutation/search/types only.
  • 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.
  • feature-activity remains 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-people is 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-publications remains defensible because its search/query/mutation surface is shared across multiple dashboard screens, but the package should not accumulate more dashboard workflow hooks.

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-*.