Files
PaperClipAI/maps/feature-map/access.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

5.7 KiB
Raw Blame History

navigation
navigation
section sectionOrder order
Getting started and access 10 20

Login, invitations, and access

People and agents enter the correct instance and company with the permissions granted to their identity. Login, membership, resource access, and CLI authorization have separate controls.

Feature ID: access.

Implementation: auth page, company members, invitation.

Agent access: companion.

Sub-features

  • login: access/login — sign in or claim the board in the configured deployment mode.
  • invitations: access/invitations — join through a valid invite and handle expired or already-used links.
  • membership: access/membership — review join requests and manage company/instance membership and permissions.
  • resources: access/resources — respect company and resource boundaries on deep links and mutations.
  • cli-auth: access/cli-auth — authorize a CLI session and revoke or replace credentials.

How to get to it (user POV)

login

Open /auth; first-owner bootstrap uses /board-claim/:token when configured.

invite-members

Open /invite/:token; operators manage members in company settings and join requests at /inbox/requests. Create/revoke human links at Members → Invites (/company/settings/members?tab=invites). Human invitees receive the chosen role after sign-in; agent invitations still use join-request approval.

cli-authorization

Start the CLI auth/connect flow and approve its /cli-auth/:id browser page; instance access is under Settings when visible.

Driving it with Playwright and the Paperclip CLI

Preconditions: follow the baseline. For login tests use authenticated mode and two test users; local-trusted mode does not prove session enforcement. Use two companies for isolation checks.

login

Automated: auth UI and session routes cover their respective layers.

Manual: Sign in, reload a company deep link, sign out, and revisit it. Confirm the browser requests authentication rather than showing cached company data. Test an invalid claim separately on disposable state.

invite-members

Automated: member UI and invite replay provide component and route evidence.

Manual: Accept an invite as the intended user, inspect the resulting company and permissions, then reuse and expire disposable invites. Change a member permission, reload as that member, and verify a denied operation on another company remains denied.

cli-authorization

Automated: board auth client and token commands cover the client contracts.

Manual: Authorize the intended CLI context, make a read-only company request, then revoke its token and retry. Verify failure is explicit and does not silently fall back to another identity.

Use auth login, auth whoami, and auth revoke-current with explicit context. Retry with the same bearer to prove revocation; deleting local credentials with logout alone does not establish that server revocation succeeded.

Gotchas

  • External assistants use their own browser/device consent and personal MCP grants. Human CLI tokens and agent bearer keys have separate authorization paths.
  • Settings visibility is not authorization; direct requests still need permission checks.
  • An agent bearer key must not gain another company’s access.
  • Never put invite tokens, session cookies, or API keys in verification evidence.

Storybook verification

login

Capability ID: access/login.

Scope: ui Storybook: Sign-in form, pending and invalid credentials, deployment-mode claim gate, expired claim. Production: Authenticate and reload company deep link; sign out and confirm session enforcement; reject invalid bootstrap claim. Sources: Source: Auth.tsx, BoardClaim.tsx, board-claim.ts. Tests: Auth.test.tsx, auth-session-route.test.ts, board-claim.test.ts

membership

Capability ID: access/membership.

Scope: ui Storybook: Member and join-request lists; editable versus read-only roles; pending change, rejected request, revoked invite. Production: Persist role/membership changes; enforce actual actor authority, invite replay/expiry and cross-company denial. Sources: Source: CompanyAccess.tsx, authz.ts. Tests: CompanyAccess.test.tsx, invite-accept-replay.test.ts, multi-user-authenticated.spec.ts

cli-auth

Capability ID: access/cli-auth.

Scope: ui Storybook: CLI authorization approval, pending, expired/denied and already-authorized states. Production: Authorize intended CLI identity/context, make scoped request, revoke current server token and retry same bearer; logout alone is insufficient. Sources: Source: CliAuth.tsx. Tests: cli-auth-routes.test.ts, board-auth.test.ts, token.test.ts