mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-15 20:53:23 +02:00
## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - Contributors use the feature map to understand and verify product capabilities. > - Agents need APIs and usable entry points within their permission boundaries. > - Product recipes and agent access need separate records with shared capability IDs. > - This pull request establishes that contract and gives maintenance ownership of both maps. > - The benefit is repeatable access review without changing product behavior or permissions. ## Linked Issues or Issue Description Refs: #15983, which added the portable verification skills and updated the feature map. This is its contract-only follow-up. Related: #15288 added the original feature map. **Issue type** Missing documentation and maintenance contract. **Where is the issue?** The product map, its missing agent access companions, and the verification skills. **What's wrong?** There is no shared convention for API presence, agent entry points, permission boundaries, access gaps, or evidence. An API declaration does not prove that a permitted native or remote agent can use it. **Suggested fix** Keep the product and agent access maps as siblings under `maps/`. Reuse capability IDs. Record representative source inventory separately from operation review and live proof. Keep both maps aligned through the maintenance skill. ## What Changed - Move the existing product map to `maps/feature-map/`. Preserve its recipes and Poteto format. Update relative links and add companion links. - Add `maps/agent-access-map/` with 35 area files and 171 matching capability IDs. Seed representative API operations, agent paths, policies and known gaps from the reviewed source inventory. Mark entries as `baseline`, `source-only`, and live verification `not-run`. - Define the shared contract in `maps/README.md`. Track API presence, agent availability, policy, evidence and review depth separately. Require operation enumeration before marking a broad capability operation-reviewed. - Extend `maintain-verification-skill` to reconcile both maps and inspect actual route policy and production tool admission. Update creation, verification, notices and contributor references to use the shared contract. - Add `scripts/check-maps.mjs` and ten regression tests. Check matching areas/IDs, indexes, references, contract fields, API method/path examples, justified exceptions and evidence-state consistency. - Keep the coverage inventory unchanged. Preserve skill invocation policies and both MIT license blocks. No product API, permission, UI, runtime helper, migration, dependency or workflow changes. ## Verification - Passed: `node scripts/check-maps.mjs` reports 35 paired areas and 171 matching capability IDs. All local map references resolve. - Passed: `node --test scripts/check-maps.test.mjs` runs ten tests. Fixtures cover missing companions, renamed/orphan/duplicate IDs, broken references, missing operation fields, empty exceptions, missing API examples, empty policy fields, and verified evidence without passed verification. - Passed: metadata validation for all three verification skills. Skill and contributor links resolve. Invocation policies and both license blocks are unchanged. - Compared relocated recipes with current master. Contents differ only in relative links and companion links. `coverage.json` is byte-for-byte unchanged. Master's updated read-only interaction test reference is retained. - Passed: `git diff --check`. The branch starts from current master and contains only this contract change. - Repository-wide typecheck, tests and build were not run locally for this documentation and Node structural-check scope. Live agent access was not exercised. Those gaps are explicit in the baseline entries; the structural check does not certify behavior. CI and automated review are pending. ## Risks - The companions are representative source baselines. They are not complete operation inventories or passed agent journeys. - The checker cannot establish actual permissions, native tool admission, operation completeness or truthful live evidence. Maintenance must inspect source and verify with the actual permitted agent context. - External links to the old product-map directory may need updates. Repository references have been updated. - Existing access gaps and board/user restrictions remain recorded. This contract does not change authority or implement missing paths. ## Model Used OpenAI GPT-6 through Codex assisted with this change. The session does not expose the exact serving model ID, configured context-window size, or reasoning setting. Capabilities used: source analysis, file edits, shell commands, and structural regression tests. ## 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 - [ ] All Paperclip CI gates are green - [ ] 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>
136 lines
7.6 KiB
Markdown
136 lines
7.6 KiB
Markdown
# Paperclip maps
|
|
|
|
The maps describe the same capabilities from two perspectives:
|
|
|
|
- [Feature map](feature-map/README.md): what a person can do, where to reach it,
|
|
and how to verify the user journey. Preserve its Poteto format.
|
|
- [Agent access map](agent-access-map/README.md): the APIs and agent entry points
|
|
for those capabilities, their permission boundaries, and access verification.
|
|
|
|
These are sibling directories under `maps/`. Each feature file has a same-named
|
|
agent access companion. Reuse the product map's sub-feature IDs, so `tasks/create`
|
|
identifies the same capability in both maps. Product behavior remains governed by
|
|
[the implementation spec](../doc/SPEC-implementation.md); a map cannot grant
|
|
authority or redefine a permission denial as success.
|
|
|
|
## Access contract
|
|
|
|
Every business operation needs both an API and a usable agent entry point for an
|
|
actor authorized to perform it. A dedicated tool is optional when REST, the CLI,
|
|
an assigned MCP client, or native `search_api` / `call_api` already provides the
|
|
operation. Record which agent surfaces actually have that path; an installed CLI
|
|
or optional MCP package cannot be assumed available to every native/remote run.
|
|
|
|
Track these independently:
|
|
|
|
| Dimension | Values and meaning |
|
|
| --- | --- |
|
|
| API | `present`, `missing`, `not-applicable`, or `unreviewed`. Use exact methods/paths; distinguish protocols from REST. |
|
|
| Agent access | `available`, `partial`, `missing`, `restricted`, `operator-only`, `not-applicable`, or `unreviewed`. Name the supported surface and actual entry point. |
|
|
| Policy | Actor, action/grant, company/resource/ownership scope, responsible-user intersection, run requirements, work modes, and gates relevant to the operation. |
|
|
| Evidence | `source-only`, `verified`, `failed`, `blocked`, or `not-run`. Source presence and successful board calls are not agent verification. |
|
|
| Review depth | `baseline` records representative operations and known gaps; `operation-reviewed` enumerates the capability's meaningful operations and their individual access contracts. |
|
|
|
|
Broad capabilities such as task properties must be split into operations before
|
|
they count as operation-reviewed: renaming, metadata edits, assignment,
|
|
dependencies, and lifecycle changes can use different tools and permission rules.
|
|
An available read path cannot certify a write path. List/get/create/update/delete,
|
|
execution/control, credential handling, and resolution are separate where their
|
|
authority or transport differs. Do not duplicate request schemas from OpenAPI.
|
|
|
|
### Exceptions and restrictions
|
|
|
|
Presentation-only state, static developer fixtures, and pre-start/local operator
|
|
work may use `not-applicable` for a domain API, with a concrete reason and the
|
|
existing local path. When a capability combines shared data with presentation,
|
|
split the operations: browser recents do not exempt resource lookup from API
|
|
coverage. Promoting local state to a shared feature requires revisiting the entry.
|
|
|
|
A board-only endpoint is `restricted` for agent identity, not an automatic
|
|
exception or a missing API. Cite the enforced policy and record whether the
|
|
agent can request the authorized human's action and observe its result. An
|
|
unresolved delegation question remains in **Gaps**. Company access, a job title,
|
|
a personal assistant's OAuth grant, or an accepted interaction does not grant
|
|
board identity. Keep budget, approval, secret and execution authority intact.
|
|
|
|
Check actual route/service authorization and production tool admission. OpenAPI
|
|
actor labels and scenario/evaluation tool declarations are supporting metadata;
|
|
record disagreements rather than using them as proof of access. Native API
|
|
fallback restrictions, tool field/scope limits, and rollout settings are part of
|
|
the agent path, even when a legacy agent can call the REST endpoint directly.
|
|
|
|
## Companion file format
|
|
|
|
Each `agent-access-map/<area>.md` has an H1, a relative link to its product file,
|
|
review date and source commit, followed by one H2 backticked ID per product
|
|
sub-feature. Each capability contains these fields:
|
|
|
|
- **Review:** `baseline` or `operation-reviewed`.
|
|
- **API:** presence state and exact operation IDs, or a reasoned exception.
|
|
- **Agent access:** availability state and concrete entry points by surface.
|
|
- **Policy:** relevant permission and runtime boundaries, with source references.
|
|
- **Evidence:** evidence state, reviewed commit and sources or executed proof.
|
|
- **Verification:** allowed/denied assertions and observable result; record what
|
|
has actually run separately from the proposed recipe.
|
|
- **Gaps:** missing APIs/paths, discovery drift, unreviewed operations or policy
|
|
decisions; use `none` only for the enumerated scope that was reviewed.
|
|
|
|
For an operation-reviewed capability, use H3 backticked operation IDs and repeat
|
|
API, Agent access, Policy, Evidence, Verification and Gaps for each operation.
|
|
Use small operation names such as `create`, `update`, `read`, or `run-now`.
|
|
The enclosing capability has `Review: operation-reviewed` only after its
|
|
meaningful operations have been enumerated. The following excerpt shows one
|
|
operation; include the others before using that review label:
|
|
|
|
```markdown
|
|
## `definition`
|
|
|
|
Review: `operation-reviewed`.
|
|
|
|
### `create`
|
|
|
|
API: `present` — POST /api/companies/{companyId}/routines.
|
|
Agent access: `partial` — agent REST and CLI routine create; default native
|
|
mutation binding missing, and call_api blocks routine mutations.
|
|
Policy: same company; assigneeAgentId must be the calling agent; cite the
|
|
routine authorization and native API policy sources.
|
|
Evidence: `source-only` — reviewed commit and source links; no live proof.
|
|
Verification: `not-run` — create an owned routine; reject assignment to another
|
|
agent; inspect saved configuration, attribution and retry behavior.
|
|
Gaps: default native create path; verify using the real permitted agent context.
|
|
```
|
|
|
|
## Keeping the maps synchronized
|
|
|
|
When a change adds/removes a capability or changes its behavior, API, permission,
|
|
tool binding, CLI support, or work mode, update the affected companion and product
|
|
recipe as appropriate in the same change. Preserve IDs across renames where the
|
|
capability is unchanged; update both indexes and cross-links together. An API-only
|
|
change may update the companion without rewriting unchanged user instructions.
|
|
|
|
[maintain-verification-skill](../.agents/skills/maintain-verification-skill/SKILL.md)
|
|
owns reconciliation of both maps. It follows changed source and authorization,
|
|
checks real agent reachability, and records product gaps without implementing
|
|
them during a maintenance pass. The creation skill uses this structure.
|
|
[verify-paperclip](../.agents/skills/verify-paperclip/SKILL.md) consumes the relevant
|
|
recipes and reports evidence/drift; map editing belongs to maintenance.
|
|
|
|
Run the structural check after map changes:
|
|
|
|
```sh
|
|
node scripts/check-maps.mjs
|
|
```
|
|
|
|
It checks paired areas/IDs, indexes, required fields, and local references. It
|
|
does not certify endpoint authorization, production bindings, operation
|
|
completeness, or live behavior. Source audits must check those against the
|
|
existing API and tool contracts; avoid a second schema catalog or runtime.
|
|
|
|
For live access proof, use Paperclip's existing API/runner/MCP fixtures or an owned
|
|
isolated instance. Use the actual agent identity, target and work mode. Assert the
|
|
allowed result and relevant denial (another company/private resource, wrong
|
|
owner, missing grant, invalid run, restricted mode or resolver). Mutations also
|
|
need persisted state/attribution and retry behavior. Capture evidence using the
|
|
[existing artifact workflow](../doc/AGENT-ARTIFACTS.md); keep executed run results
|
|
separate from product-map `coverage.json`, which records documentation scope.
|