Files
PaperClipAI/maps/feature-map/navigation-preferences.md
T
DottaandPaperclip 3bbc2104b6 docs: map missing product and operator capabilities (#16990)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - The feature map records product entry points and verification
recipes.
> - The paired agent access map records APIs and permission boundaries
for the same capability IDs.
> - The new index in #16987 made several missing capabilities easier to
find.
> - Those gaps hid existing assistant, privacy, cost, and operator
workflows.
> - This pull request adds 15 capabilities with source references, test
scope, and manual checks.
> - Readers can find these workflows without treating documentation or
structural checks as live proof.

## Linked Issues or Issue Description

Refs: #16987. Related map work: #16025 and #16214. A search of related
pull requests found no duplicate of these additions.

**Issue type**

Missing documentation.

**Where is the issue?**

`maps/feature-map/` and `maps/agent-access-map/`.

**What's wrong?**

The maps omit public assistant MCP connections, private task and project
sharing, subscription fees, cost-recording recovery, agent API keys,
keyboard entry points, and several operator CLI workflows.

**Suggested fix**

Add product recipes and matching access records. Show the full
capability IDs in the README index and each page. Keep the existing ID
format and all 175 existing IDs. Exclude AI account pools.

## What Changed

- Add the `assistant-connections` family with setup, consent, device
login, client use, and revocation.
- Add `tasks/privacy`, `projects/privacy`,
`budgets-costs/subscriptions`, and `budgets-costs/accounting-recovery`.
- Add `agents/api-keys`, `agents/managed-agent-setup`, and
`navigation-preferences/command-palette`.
- Add `cli-operations/feedback-export`, `chat-channels/outbound-email`,
and `instance-operations/runtime-setup`.
- Pair all 15 additions with access rules, source evidence, manual
checks, and explicit coverage gaps. Update the visible index to 35
families and 190 capability IDs.
- Add cross-links from existing access, connection setup, search, and
CLI recipes. Do not change the schema or add AI account pools.
- Clarify that the task Share sheet displays direct and inherited
access. Manage inherited access at its ancestor or project source.

## Verification

- `node scripts/check-maps.mjs` passes: 35 areas and 190 paired
capability IDs, with valid references and contract fields.
- `node --test scripts/check-maps.test.mjs
scripts/storybook-feature-index.test.mjs` passes: 17 tests.
- `node scripts/storybook-feature-index.mjs` and `git diff --check`
pass.
- A comparison with the base confirms all 175 existing IDs remain and
exactly the intended 15 IDs were added. The README index matches the
discovered feature metadata.
- `node scripts/storybook-catalog.mjs` cannot run because this checkout
lacks `storybook/internal/csf-tools` and installed workspace
dependencies.
- `pnpm -r typecheck`, `pnpm test:run`, and `pnpm build` were attempted.
All stopped before their task ran: the pnpm 9.15.4 bootstrap could not
fetch and verify its registry packages in this environment.
- Source review covers the documented UI, CLI, routes, services, and
existing tests. No live browser, provider, or authorization journey was
run. New access records remain `baseline`, `source-only`, and `not-run`.
- Greptile and the Paperclip reviewer both rate current commit
`bb8eb797b0a1dc26256faf2f0e57cbe7abc9adcf` 5/5. The inherited-access
review thread is resolved.
- [GitHub
CI](https://github.com/paperclipai/paperclip/actions/runs/39466772379)
passes for that commit, including typecheck, build, unit tests, Runner
checks, and browser tests. Browser shard 7 passed after one retry for a
runner shutdown. All PR checks are successful, neutral, or skipped.

## Risks

- Low runtime risk: this change only edits maps. No application
behavior, API, dependency, or schema changes.
- Source-reviewed recipes can drift or miss deployment-specific
behavior. The records state their limits and require live checks before
a capability is marked verified.

> For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and
discuss it in `#dev` before opening the PR. Feature PRs that overlap
with planned core work may need to be redirected — check the roadmap
first. See `CONTRIBUTING.md`.

## Model Used

- OpenAI Codex, model ID `gpt-6.1-sol`, 475,000-token context window,
xhigh reasoning effort, with tool use and code execution.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

---------

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-10-20 12:47:41 -05:00

7.6 KiB
Raw Blame History

navigation
navigation
section sectionOrder order
Oversight and operation 70 30

Navigation, profile, and announcements

People organize their sidebar, move between company resources, maintain their profile, and dismiss product announcements with the correct persistence and identity scope.

Feature ID: navigation-preferences.

Implementation: sidebar, profile, announcements.

Agent access: companion.

Sub-features

  • navigation: navigation-preferences/navigation — use current sidebar links, favorites, recents, and available layout controls.
  • preferences: navigation-preferences/preferences — persist supported ordering/collapse choices for the intended user/company.
  • profile: navigation-preferences/profile — edit personal identity and inspect public profile links.
  • announcements: navigation-preferences/announcements — inspect and dismiss an announcement with its intended instance-wide user scope.
  • fallbacks: navigation-preferences/fallbacks — handle missing resources and old deep links without presenting another resource as the target.
  • command-palette: navigation-preferences/command-palette — open quick search and creation actions with keyboard shortcuts, then carry query/filter intent into full search.

How to get to it (user POV)

Use starred/recent/sidebar links and direct company-prefixed URLs.

profile-announcements

Use Settings → Profile, /u/:userSlug, and the announcement well when a publication is available.

palette-shortcuts

Press Cmd/Ctrl+K to open the command palette. / focuses the current page search or opens quick search; ? opens shortcut help. Outside an input or modal, c starts New task and g then i opens Inbox/My work. In the palette, use Search all or Cmd/Ctrl+Enter for the full results page.

Driving it with Playwright and the Paperclip CLI

Preconditions: follow the baseline. Use two test users and companies; record the selected UI shell and any client-local preference storage.

Automated: sidebar and sidebar preference routes cover UI/server behavior.

Manual: Star and reorder supported resources, collapse a section, navigate and reload. Switch company/user and inspect the intended preference scope. Open an unavailable resource and a legacy route; verify clear fallback or correct redirect without leaking another company’s state.

Record persistence separately: section collapse is in-memory and reopens after reload; global sidebar collapse is disabled. Streamlined starred projects sort alphabetically. Recents are browser-local by user/company; stars and supported ordering are saved server-side. Local-trusted mode does not prove two-user isolation.

profile-announcements

Automated: profile page, announcement hook, and announcement routes cover separate UI/persistence layers.

Manual: Change a disposable user’s display details, reload, and inspect an attributed profile link. Dismiss a fixture announcement, switch companies, and verify it remains dismissed for that user; check another user still has their own dismissal state.

palette-shortcuts

Automated: Command palette, shortcut hook, shortcut rules, and cheatsheet test components and keyboard rules. Company search covers search contracts; browser focus and identity transitions still need a live check.

Manual: Use uniquely named visible and private task/project fixtures. Open the palette, find a permitted result, follow it, and reload the destination. Enter text with quick-filter chips such as assignee:me, is:open, and updated:>7d; use Search all and Cmd/Ctrl+Enter in separate attempts and verify the resulting query and filters. Switch person/company and confirm private results do not leak. Test / on a page with search and a page without it; inspect ?, c, and g i. Type those keys inside an editor and a modal: they must not unexpectedly navigate or create work. Test a create action through its normal dialog and inspect the actual saved resource separately.

Sources: Command palette, shortcut hook, query parser, and search routes.

Gotchas

  • Cmd/Ctrl+B is not a supported global sidebar shortcut. Use the current shortcut help and verify that typing and modal focus suppress navigation chords.

  • Announcement dismissals are intentionally instance-wide user preferences, unlike company-scoped domain data.

  • Legacy/production shells need their own navigation check when affected.

  • A route redirect is part of the journey; do not document a removed screen as if it still renders.

Storybook verification

preferences

Capability ID: navigation-preferences/preferences.

Scope: ui Storybook: Mount Sidebar using real preference boundary with stars/order/collapse/recents state. Clearly distinguish in-memory section collapse, browser-local recents and server-saved stars/order. Production: GET/PUT /sidebar-preferences/me and /companies/{id}/sidebar-preferences/me plus stars must retain intended user/company isolation across reload and switch. Section collapse reopens after reload; global collapse is disabled. Sources: Source: Sidebar.tsx, sidebar-preferences.ts, sidebar-preferences.ts. Tests: Sidebar.test.tsx, sidebar-preferences-routes.test.ts

fallbacks

Capability ID: navigation-preferences/fallbacks.

Scope: browser Storybook: A NotFound rendering story can help polish, but missing-resource/legacy-deep-link capability principally needs real App/router/browser scenarios preserving company and query intent. Production: Cold-open invalid company/resource and retired URL; verify explicit fallback or correct canonical redirect without silently targeting a different resource/company. Sources: Source: NotFound.tsx, App.tsx, company-routes.ts. Tests: App.activity-routing.test.tsx, App.cases-routing.test.tsx, App.test.tsx, company-routes.test.ts

Recent task refresh performance

Saved recent tasks render immediately. One summary batch refreshes at most five IDs per company/account without passive full-detail or workspace inspection. Successful omissions remove unavailable entries; failed reads preserve history. Verify rename, inbox archive, pause/restart, reload, cross-tab updates and account switches. Inbox archive does not remove the task from recent history.