100 Commits
Author SHA1 Message Date
Aron PrinsandClaude Opus 5.5 ee9de7fb26 Screenshots: recapture all for v2026.1106.0 (#174)
Recaptures every docs screenshot against `v2026.1106.0` (`d69631b0`).
196 of 278 were stale, and some contradicted the text, such as the
removed **Run with provider trace** button and the old roster tabs.

## What changed

- **Images:** 276 of 276 captured in both themes; 271 PNGs changed.
Every registry entry is stamped `v2026.1106.0`.
- **Pipeline:** `seed.mjs`, `capture.mjs`, `routes.mjs`, `config.mjs`
and `github-review-fixture.mjs` now match this release's UI. No targets
were dropped.
- **Caption:** `experimental/file-viewer.md` now describes what its
image shows.

## Check these

- **Staged state:** the budget banner is removed in the browser on
`dashboard/dashboard-overview`, `experimental/server-info` and
`onboarding/sidebar-new-company-button`. The budget pages keep their
real incidents. The seed also turns off hard stops outside the Budget
Demo agents, and marks agents stuck in `verifying` as ready, so demo
pages aren't paused.
- **`experimental/file-viewer-browse`:** opening the task **Files** tab
crashed the app at the tag on the seeded instance (`Maximum update depth
exceeded` in `SidePanelTabs`), so the image shows a file open in its
side panel instead. `file-viewer.md` still lists `g f` as an entry
point.

## Review coverage

All 140 light images were checked at contact-sheet size, so fine text
wasn't readable that way. 44 images from the final run, 24 light and 20
dark, were opened at full size. The remaining dark images weren't
viewed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-11-07 16:41:26 +01:00
Aron PrinsandClaude Opus 5.5 c4608da865 Hotfix: Google tool names and project Environment note (v2026.1106.0) (#173)
Fixes two errors in the live docs for `v2026.1106.0`, both checked
against the tag (`d69631b0`).

- **Google tool names.** Calendar, Chat, Docs, Drive, People, Sheets,
Slides and Workspace Search listed tools with dashes, such as
`send-message`. The code and the **Permissions** tab use underscores
(`packages/shared/src/google-workspace-connectors.ts`), which is what
`gmail.md` and `google-workspace.md` already show.
- **Project Environment dropdown.** `experimental/environments.md` said
the dropdown saves the choice and the task's workspace card shows it.
Neither is reliable: `parseProjectExecutionWorkspacePolicy` drops the
value, and the card's project-default label is effectively unreachable.
The note now only says the dropdown doesn't pick where runs go.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-11-07 13:34:48 +01:00
d627632874 Release docs for paperclip v2026.1106.0 (#172)
Docs for parent release `v2026.1106.0` (`d69631b0`), up from
`v2026.1023.0` (`1b4c8038`): 515 parent commits.

## How this branch was built

The tag is 914 commits behind what `nightly` has drafted, so this branch
isn't cut from `nightly` HEAD. It starts at nightly commit `1952052`
(parent `043f2514`), 19 commits before the tag, then adds:

- the `main` hotfix (#160)
- the sync tooling from `nightly`
- docs for those 19 commits

Later nightly drafts stay on `nightly`, so no pages had to be removed.
No `nightly-draft/*` PRs are open.

## What changed

- **Runner by default:** new Claude, Codex, OpenCode and Pi agents start
on Paperclip Runner on supported hosts, with **Legacy runner** and
**Upgrade runner**.
- **Workspaces:** cleanup of finished workspaces, optional Git
expiration, and restore points for unsaved work. Restore points are off
by default.
- **New pages:** Prompt injection prevention, Google Workspace, GitHub
Copilot, Speko, Braintrust, Daytona, Ditto and Unikraft.
- **Breaking and upgrade notes:** the run history limit, Sentry run
failures off by default and the DSN variables, the Docker start command
for custom images, `--yes` on `instructions-file:delete`, and slower
migrations on large instances.
- **Also covered:** project repositories as skill sources, roster bulk
edit, Artifacts V1 (experimental, off by default), composer dismissal,
`expectedStatusVersion`, `unexecuted_review_stage`, and plugin workspace
providers.
- **Changelog:** a v2026.1106.0 entry in `reference/changelog.md`.

## Older text corrected

These were wrong at the tag, and most are also wrong on the live site:

- which permissions let an agent read a peer's configuration or change
instructions (`api/agents.md`)
- `decideNowCount`, which doesn't exist; the field is `deskBadgeCount`
- `file-resources` routes, which are board-only
- the **Create project** dialog fields, a CEO rule the code doesn't
enforce, and where a terminated agent's reports appear
- `instructions-file:put` and `:delete` examples that always failed
(`cli/agent.md`)
- a curl example that returned `422` (`api/cases.md`)
- Google Workspace **Reconnect** instructions, which claimed it reopens
the service picker
- the `permissionKey` table, which listed 8 of 21 keys
- drafting text at the end of `api/agents.md`

## ⚠ Please check these

- **Product behaviour that may be a parent bug.** The docs now describe
the tag's code, which you may prefer to fix upstream:
- The project **Environment** dropdown saves a choice, but runs ignore
it (`experimental/environments.md`).
- `environments:manage` is granted by roles but no environment route
checks it.
- `suggest-changes` is documented as agent-only, because only agents
have a consent path. Company skill policy decides skill edits.
- **Reader-visible mismatches in the parent UI.** The docs follow the
code. Upstream copy still mentions a "Built-in agents tab", says Copilot
"awaits qualification", and tells people to "Reconnect Google Workspace
to change access".

## ⚠ Post-tag leaks removed

Nothing to remove from an already-drafted page: post-tag surfaces such
as 1Password, Vercel, Supabase deploy, custom gateway onboarding and
Artifacts V1 as default never came onto this branch. Authors left out
post-tag hunks of the next nightly draft, and the reasons are in the run
notes.

## ⚠ Drift

None. Zero findings at the tag, from a full parent snapshot.

## ⚠ Verification Failures

The tag-accuracy gate reports one leak and nine review entries. None is
a real failure:

- **Leak:** `reference/cli/service.md`, `paperclipai payload and`. This
is a false positive; it's prose from a real message at
`cli/src/commands/service.ts:184`.
- **Review, 8 new connector pages:** the gate can't confirm new pages.
Reviewers confirmed each surface exists at the tag.
- **Review, `local_tools`:** an example value from the tag's Runner
README.

Not provable from code, and kept deliberately:

- `sandbox-providers.md` uses `sandbox.yaml`. The tag's README says
`install.yaml`, which returned 404 when checked. The upstream fix is
post-tag.
- The Google Workspace row about older OAuth brokers rests on release
notes and a design doc. The broker isn't in this repo.
- External claims about provider behaviour (for example Braintrust,
Daytona, Unikraft and Google scopes).

## ↻ Renames detected

None. The rename helper wasn't run: the 19-commit delta adds no new
adapter, skill, or plugin directories that it would check.

## Verification

All checks read a checkout pinned to the tag.

- **First round:** authors, a release-notes audit, an audit of
corrections stranded on `nightly`, an audit of 321 lines the last
realign dropped from `main` (about 130 checked directly in code), and
six fresh verifiers.
- **Second round:** seven new verifiers re-checked every changed area,
tracing behaviour rather than matching labels, and fixed about 50 more
defects. That volume means more may remain.
- **Limits of that second round:**
- Each verifier reported what it only string-matched. That includes
parts of Artifacts V1, the **Upgrade runner** notice, Copilot run
behaviour, and some Plugin SDK contract text.
  - The second-round fixes themselves weren't reviewed by a third round.
- **Gates:** `docs:build`, `docs:test` and `sync:check` pass.
- **Nothing was run against a live instance.** All of this comes from
reading code.

## Screenshots

**196 of 278 screenshots are stale and none were recaptured.** The list
is in `SCREENSHOTS_PENDING.md`. Some visibly differ from the text, such
as the removed **Run with provider trace** button and the old roster
tabs.

## After merge

1. Keep the PR title as is: `tag-docs-release.yml` reads the version
from it.
2. Confirm the `docs/v2026.1106.0` tag exists.
3. Run `node scripts/sync/realign-nightly.mjs release/v2026.1106.0
--push`, then audit for dropped lines and duplicated paragraphs, and set
`nightly` state back to `branch_mode: nightly`.
4. Check that `docs.paperclip.ing` serves the release: a new page, a new
claim, and the changelog's top entry.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-11-07 13:02:42 +01:00
Aron PrinsandClaude Opus 5.5 dc84da0476 Hotfix: document database connection pool settings (v2026.1023.0) (#160)
The released docs were missing five connection-pool environment
variables that ship in paperclip `v2026.1023.0`, and the Hosted
PostgreSQL section told readers to edit `packages/db/src/client.ts` to
disable prepared statements, though `DATABASE_PREPARED_STATEMENTS=false`
already does that.

- `deploy/database.md`: replaces the code-edit snippet with the env var;
adds a **Connection Pool Settings** section (defaults, startup
validation, `pg_stat_activity` lookup, `max_connections` sizing,
shutdown behaviour).
- `deploy/environment-variables.md`: rows for
`DATABASE_PREPARED_STATEMENTS` and the five pool variables.

Checked line by line against `packages/db/src/client.ts` and
`server/src/index.ts` at the `v2026.1023.0` tag. Two things that exist
only on parent master are deliberately left out and stay in nightly
(#159): the `paperclip-controller-lease` liveness pool and the
`DATABASE_PREPARED_STATEMENTS=true` mode that also prepares ORM queries.

`docs:build` and `sync:lint-links` pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-27 14:02:02 +01:00
0ea1994fa7 Release docs for paperclip v2026.1023.0 (#156)
## Summary

Release docs for Paperclip **v2026.1023.0** (parent tag commit
`1b4c8038`).

- **Window:** `v2026.1012.0` → `v2026.1023.0`. The tag was cut from
parent `master` at 2026-10-12, so the cumulative window is the
merge-base `22a3ea34` → `1b4c8038`. That's 200 commits and 2,501 files,
with no compare truncation.
- **Branch:** cut from `nightly` (`1b81e21`). Nightly had drafted
against parent master up to `043f2514` (Oct 22), which is 496 commits
past the tag. Most of nightly's #151–#155 work is post-tag.
- **Review:** six reviewers checked all 161 changed pages hunk by hunk
against a local checkout of the tag, using post-tag history
(`1b4c8038..043f2514`) to date each claim. The tag-accuracy gate was
then re-run on the result.

**Headline doc changes:**
- **New pages (21):**
  - [Custom model providers](docs/connectors/custom-model-providers.md)
  - [Decision Models API](docs/reference/api/decision-models.md)
  - [Cases](docs/experimental/cases.md)
  - [External agents: OpenAI Dot](docs/experimental/external-agents.md)
  - [Agent cryptographic identity](docs/guides/org/agent-identity.md)
- [Agent complaints and
suggestions](docs/administration/agent-commentary.md)
  - [Runtime Commands](docs/reference/cli/runtime.md)
- 14 connector guides: Bitly, Calendly, Context7, Enterpret, Exa,
Firecrawl, Gauge, GSC Wizard, Make, Parallel Search, Superagent, Tavily,
Telem.AI and Windsor.ai
- **Updated pages:**
  - Private tasks and projects, with sharing and inherited privacy.
- Costs: estimated, unpriced and subscription spend, the Overview
breakdowns, provider cost reports, and the Decisions view.
  - Operators get default company editing permissions (#15377).
  - Agent setup checks and your primary agent.
  - Slack: automatic setup and **Require at-mention**.
  - The simplified dedicated GitHub App setup.
  - Cursor and Pi on Paperclip Runner, and the **Harness** label.
  - Expanded assistant MCP tools and the `paperclip:configure` scope.
  - CSV and HTML artifact previews.
  - The plugin agent lifecycle contract.
- Server-host AI sign-in, and new Linear, Airtable and Hugging Face
methods.
- A changelog entry, and 102 pages stamped `paperclip_version:
v2026.1023.0`.

### ⚠ Post-tag leaks removed

These document parent `master` features that are **not in
v2026.1023.0**. They stay on `nightly` for a later release.

- **Pages removed (7):**
  - `connectors/github-copilot.md` (92b23813)
  - `connectors/google-workspace.md` (23b2ceb0)
  - `connectors/braintrust.md` (92cfd701)
  - `connectors/daytona.md` (0b62c736)
  - `connectors/ditto.md` (a1e2173c)
  - `connectors/speko.md` (22d05644)
  - `connectors/prompt-injection-prevention.md` (2c96f767)

Their nav entries and catalog rows are already removed, and no page
links to them.
- **Reverted to `main`:**
  - 54 pages whose nightly changes were all post-tag. That includes:
- The Google per-app "no longer listed" notes and Gmail archive
(23b2ceb0, e4ce9890).
- The skills guide and the company-skill-policy API (repository packages
and auto-updates: a9830414, 473c80d1, df4ee06e).
    - The Cases API (handoffs and workflows: 505e1a55, 0a5f1546).
- The companies API (observability and prompt injection: ac9459ba,
2c96f767).
- `deploy/docker.md`, the claude-code and hermes adapters, and
`cli/agent.md` / `cli/service.md` (`--runner`, managed-shim guard).
  - The rest only changed Sources-link SHAs or had nightly-only wording.
- **Sections trimmed:**
- The Runner-default rollout, its upgrade notice and `runner` fields
(adb69e8f, 8193abb9, 39e44a9d, 734c2653).
  - Grok Bot and Muse (b8ffeb97, e6dcc6b0).
  - Task workspaces and plugin project storage (f329b24e, 8b4ab65b).
  - Task Retry and recovery status lines (d33b40a5).
- The commentary read API, `commentary:view`, and Pipelines removal
(e6dcd1e8, e5927e1d, 90777488).
  - Scoped and async budget enforcement (30b753f6).
- Plugin WebSocket routes, agent detail tabs, resource-lifecycle
delivery and Runner tasks (42715d45, db65a086, 33cc567f).
- Slack managed Cloud setup and DM at-mention changes (f0e12c85,
df06df23).
- Review-bot queued-comment, reconnect and naming changes (3b8324a2,
52459590, 7eea9d82).
  - OpenRouter attribution headers (9179d8dc).
  - Agent, project and routine search (7b9334cd).
  - Artifacts upload (762d680d).
- Env-var rows: `NATIVE_HARNESS_BACKUP_*`, `WORKSPACE_COMPACTION_*`,
`GIT_CACHE_*`/`GIT_BASE_*`, `SKILL_VERSION_RETENTION_*`, `NATIVE_MCP_*`
and `SENTRY_RUN_FAILURES`.
  - `/api/liveness` (a0651c96).
- Source links pinned to post-tag commits now point at the tag commit.

### ⚠ Drift

Checked against the tag (`check-drift --against 1b4c8038`). There are 33
candidates, the same set as the last nightly runs:
- **High:** `PAPERCLIP_WORKSPACE_GIT_SCAN_*`,
`PAPERCLIP_WORKSPACE_GIT_SNAPSHOT_TIMEOUT_MS`, `PAPERCLIP_RUNNER_API_*`,
`PAPERCLIP_MCP_AUTHORIZATION_ORIGIN` and `PAPERCLIP_CLOUD_CONNECTOR_*`
are known false positives. They're read through helpers or `env.`
receivers the checker doesn't scan.
- **High:** `PAPERCLIP_ID_CONNECTOR_*` is documented as retired, which
is intentional.
- Verify: `agent-avatars` (`:file` param), `companies/import/transfers*`
(constant route path), `chats/{agentRef}` (`router[method]` loop), and
`mcp/requests/{id}` plus the Dot pairing routes (array registration in
`public-mcp.ts`). These are known false positives.

### ⚠ Verification Failures / review notes

- **Tag-accuracy gate false positives:**
- `cli/runtime.md`: `--sha256` is a `.requiredOption` in
`cli/src/commands/runtime.ts`. `SSL_CERT_FILE`, `SSL_CERT_DIR` and
`NODE_EXTRA_CA_CERTS` are passed through by key list in
`buildPiSetupEnvironment`.
- `plugins/sdk.md`: `ENVIRONMENT_ACQUISITION_PROVIDER_STATES` is an SDK
export.
- `skills.md`: `PAPERCLIP_HELPER_STATE_DIR` is read in the skill's
upload script.
- `adapters/cursor-local.md`: the `acpx*` fields are validated in
`paperclip-runner-permissions.ts`.
- **New pages the gate can't auto-confirm:** each was confirmed by hand
at the tag, against the app definitions, routes and UI.
- **Claims kept on weaker evidence (commit message or UI string, not
code) — please eyeball:**
  - "a new bot starts in mentions-only mode" (github-setup).
  - "Mentions work in issue and PR descriptions" (review-bot setup).
  - Airtable's "HTTPS or localhost" sign-in note.
  - The "37 tools" figure on assistant-connections.
  - Reservation semantics on the costs guide.

### Screenshots

142 of 278 screenshots depend on UI files changed in this window (see
`SCREENSHOTS_PENDING.md`). They were last captured against v2026.1012.0
(#150), and a recapture is still pending.

### Checks

`docs:build` and `sync:check` pass: no broken links, and the only
orphans are the four pre-existing ones (`you-com`, `hosted-beta` and the
two intentional CLI redirect pages). All eight `docs:test` suites pass.

### After merge

1. Confirm the `docs/v2026.1023.0` tag was created.
2. Run `node scripts/sync/realign-nightly.mjs release/v2026.1023.0
--push`.
3. Re-apply this branch's decisions on `nightly`.
4. Flip `nightly`'s state back to `branch_mode: nightly`.
5. Verify docs.paperclip.ing serves the changelog entry and new pages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-10-24 13:01:34 +02:00
Aron PrinsandClaude Opus 5.5 d811a89622 Screenshots: recapture all for v2026.1012.0 and align guides with the release UI (#150)
## Summary

Every docs screenshot is retaken from Paperclip **v2026.1012.0**, in
light and dark. Verifying them showed that about 50 guides described UI
the release had moved or renamed, so those guides are updated too.

**Screenshots**
- 138 automated captures (276 PNGs), all stamped `v2026.1012.0`
(`bba6a45`). The final run had no failed steps or skipped captures, and
the luminance and theme check passes on all 278 files.
- Four independent reviewers checked every light shot against its
caption, then a fix round cleared the findings.
- 37 captures (74 PNGs) are retired: none is embedded on any page, or
the screen no longer exists in the release.
- The capture pipeline (`scripts/screenshots/*`) is fixed for the
release UI:
- turns off the remote "Introducing Connectors" announcement that
covered most shots;
  - masks local temp paths as `~/acme/…`;
- keeps the demo company quiet during capture (no recovery loops, no
capture-created activity rows);
- seeds the states the guides describe: status cards, 50/80/100%
budgets, a blocked inbox, schedule triggers, a checkbox confirmation,
skills-capable agents and more;
- uses updated routes and steps for the moved UI, and gains
`scrollToTop`, `readyText`, per-target `experimental` flags, and comma
lists for `--only`.
- **The budget shots show a fixed incident card.** In v2026.1012.0 a
warning-threshold incident is labelled "hard stop · This scope is
paused", which is wrong. The fix is
[paperclipai/paperclip#16201](https://github.com/paperclipai/paperclip/pull/16201).
The costs and budget shots were captured from v2026.1012.0 with that
patch applied, and the budget guides say so and explain what
v2026.1012.0 itself shows.

**Docs aligned with the release UI**
- **Audit:** costs, budgets, runs and the timeline moved under Audit.
That covers Costs and Budgets, Activity Log, Work Timeline, Set a
monthly budget, and Dashboard.
- **Agents:** the agent page's side menu (**Overview**, **Harness /
Runtime**), the two-step **New agent** dialog, **Run now**, and the org
chart as a view toggle. That covers Agents, Your first agent, Watching
agents work, Key concepts, Org structure, Agent adapters and Adapters.
- **Projects, routines, tasks, approvals:** current tabs, buttons and
flows.
- **Skills, plugins, company, settings:** current labels, including
instant-join invites, the Experimental settings list, and **Settings →
Experimental** paths on 21 pages.
- **Removed features:** Auto-Create Recovery Tasks and Cloud Sync are
marked as removed in this release.
- Every rewrite was checked against the v2026.1012.0 UI source, then by
two independent verifiers. A changelog entry is added under
v2026.1012.0.

## Checks
- [x] `npm run docs:build`
- [x] `npm run docs:test` (all suites)
- [x] `sync:lint-links` and `sync:verify-nav`: only the 4 intentional
orphans remain
- [x] SEO metadata and crawlable links

## Known, accepted
- The activity feeds lead with agent setup events rather than task
events.
- The dashboard agent strip shows two cards for Ada.
- Agent budgets can only be created from the CLI or API in this release,
and the guides say so.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-13 18:44:53 +02:00
2535f6c99c Release docs for paperclip v2026.1012.0 (#149)
## Summary

Release docs for Paperclip **v2026.1012.0** (parent tag commit
`bba6a45f`).

- **Window:** `v2026.1005.0` → `v2026.1012.0`. That is 132 commits and
1,242 files, with no compare truncation.
- **Branch:** cut from `nightly` (`fe556e1`). Nightly had drafted
against parent master up to `abbd8800`. The release was cut from master
at `22a3ea3` (Oct 6), so nightly's last 39 commits are post-tag.
- **Review:** every changed page was checked by hand against a checkout
of the tag. The tag-accuracy gate was then re-run on the result.

**Headline doc changes:**
- **New pages:**
- [Assistant connections
(MCP)](docs/experimental/assistant-connections.md), with the [Assistant
MCP API](docs/reference/api/assistant-mcp.md) and [`paperclipai
mcp`](docs/reference/cli/mcp.md) references
- [Saved connection
instructions](docs/connectors/connection-instructions.md)
  - [Check AI account usage](docs/connectors/ai-usage.md)
- [Task-pinned AI routing](docs/experimental/task-pinned-ai-routing.md)
  - [Neon](docs/connectors/neon.md)
- **Breaking changes documented:**
- Restore locks moved to SQLite (#14869). [Update
Paperclip](docs/how-to/update-paperclip.md) now has a "stop everything
first" upgrade and rollback flow.
- Stored tool grants are enforced as written (#14915). This is covered
in the [Tool Gateway API](docs/reference/api/tool-gateway.md) and the
[Access model](docs/connectors/access-model.md).
- **Other release coverage:**
- The connection-instructions contract for HTTP and process adapters
(`connectionInstructions`, `PAPERCLIP_CONNECTION_INSTRUCTIONS_FILE`).
- Much shorter default instructions, and default config grants for new
agents.
  - The `update_skill` tool.
  - Aggregator accounts gathered into one catalog.
  - Chat-first navigation and the combined inbox.
  - The rebuilt New task dialog.
  - "Model at capacity" and "Model unavailable".
  - Sonnet 5.5, GPT-6.1 Sol and new harness pins.
- The supported remote Codex range, and Codex resuming after a server
restart.
  - Watchdog thresholds of 5 and 15 minutes.
  - `tool_discovery_busy`.
  - The Docker provider pack.
- A changelog entry, and 75 pages stamped `paperclip_version:
v2026.1012.0`.

### ⚠ Post-tag leaks removed

These document parent `master` features that are **not in
v2026.1012.0**. They stay on `nightly` for the next release.

- **Pages removed (7):**
  - `administration/agent-commentary.md` (b508a05c)
  - `guides/org/agent-identity.md` (a590ab76)
  - `reference/cli/runtime.md` (a6306ba6)
  - `connectors/custom-model-providers.md` (9f7057e1)
  - `connectors/enterpret.md` (88ff98b8)
  - `connectors/superagent.md` (8cbd21b3)
  - `connectors/telem.md` (f77fcbf4)

Their nav entries and catalog rows are already removed, and no page
links to them.
- **Reverted to `main`:**
- `roles-and-permissions.md`, `administration/company.md` and
`add-a-human-teammate.md`. Operator's 14 default keys come from
582911ba.
- The costs guide and `api/costs.md`. Durable accounting, by-user costs
and per-account quota come from 799e4d55, eab93fd4 and 892b0b36.
  - `adapters/cursor-local.md` (a6306ba6)
- `deploy/database.md` and `deploy/environment-variables.md`, which
carried agent identity and complaints.
  - `browser-use-cloud.md`
  - `back-up-and-restore-a-company.md`
- **Sections trimmed:**
- The assistant MCP pages now match the tag:
`paperclip:read`/`paperclip:write`/`offline_access` only, 10 direct
tools, and no file transfer (2d0c1381, 99a9de99).
- Server-host sign-in for Anthropic, OpenAI and xAI is back to the
terminal-command flow (e38d6d16, 2ca0d26a).
  - OpenRouter is OpenCode-only again (9f7057e1).
  - Requested vs granted OAuth scopes are removed (ea8e6861).
  - PR review waits are removed (228f0e28).
- Historical-question reminders and "No project" in the composer are
removed (faa8e452, ee3c728b).
  - Plugin lifecycle hooks are removed (1cebdd4c).
  - Cursor on the Runner is removed (a6306ba6).
  - The aggregator "Waiting for sign-in" status is removed.
  - Source links pinned to post-tag commits now point at the tag commit.

### ⚠ Drift

Checked against the tag:
- **High:** the `operator` default grants were **real** drift. Fixed by
reverting the post-tag tables.
- **High:** the agent-identity paths and env vars were real at nightly
but are post-tag. They're removed (see above).
- **High:** `PAPERCLIP_WORKSPACE_GIT_SCAN_*`,
`PAPERCLIP_WORKSPACE_GIT_SNAPSHOT_TIMEOUT_MS`, `PAPERCLIP_RUNNER_API_*`
and `PAPERCLIP_CLOUD_CONNECTOR_*` are known false positives. They are
read through helpers the checker doesn't scan.
- **High:** `PAPERCLIP_ID_CONNECTOR_*` is documented as retired, which
is intentional.
- Verify: the `/accounting/*`, `costs/by-user` and
`agents/{id}/identity` routes are no longer documented, because they're
post-tag.
- Verify: `agent-avatars`, `companies/import/transfers*` and
`chats/{agentRef}` are known param/constant-registration false
positives.

### ⚠ Verification Failures / review notes

- **`reference/cli/mcp.md`:** the gate flags `--device` and `--url`.
This is a false positive: both are `requiredOption`s in
`cli/src/commands/mcp.ts` at the tag.
- **New pages the gate can't auto-confirm:** each was verified by hand
at the tag. They are assistant-connections, task-pinned-ai-routing,
ai-usage and connection-instructions.
- **`neon.md`:** says "open **Connectors**", following the Supabase
guide. The parent's notes call the screen "Apps → Browse".
- **`connection-intents.md`:** the AgentMail card details ("shares the
key with every person in the company", "resumes after reload") are only
partly confirmed.
- **`task-chat.md`:** the queued-message details came from an earlier
nightly and couldn't be traced to a specific commit.
- **Upstream inconsistency:** the Codex adapter's in-code doc string
(`codex-local/src/index.ts:181`) contradicts the code about the bypass
flag. Our docs follow the code.

### Screenshots

**126 of 350 screenshots are stale** across 26 routes (see
`SCREENSHOTS_PENDING.md`). None were recaptured in this PR.

### Other open PRs

- **#143** (Browser Use Cloud + Neon, targets `main`): both are now
covered here. Suggest closing it.
- **#140** (Enterpret, targets `main`): Enterpret is post-tag
(88ff98b8). Suggest retargeting it to `nightly` or closing it.

## Checks

- [x] `npm run docs:build`
- [x] `npm run docs:test` (all suites)
- [x] `sync:lint-links` and `sync:verify-nav`. The only orphans are the
7 pages above plus 4 intentional ones.
- [x] `check-tag-accuracy` re-run. The only remaining flags are the ones
explained above.
- [x] Removed the 7 post-tag pages listed above (`cbece5b`), plus fixes
from a second, independent verification pass
- [ ] After the squash-merge, run `node scripts/sync/realign-nightly.mjs
release/v2026.1012.0 --push`, then flip `nightly`'s `.sync-state.json`
back to `branch_mode: nightly`.
- [ ] Confirm the `docs/v2026.1012.0` tag and that docs.paperclip.ing
serves the new changelog entry.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-10-13 13:45:13 +02:00
3679b7e739 Release docs for paperclip v2026.1005.0 (#147)
## Summary

Release docs for Paperclip **v2026.1005.0** (parent tag commit
`467125fa`).
- **Window:** `v2026.1001.0` → `v2026.1005.0`, 179 commits, 1,645 files,
compare truncation 0.
- **Branch:** cut from `nightly` (`c42305a`). Nightly had drafted
against parent master up to `a6306ba6`, which is 159 commits past the
tag.
- **Review:** every changed page was checked by hand against a checkout
of the tag.

**Headline doc changes:**
- **New pages:**
  - [Browser Use Cloud](docs/connectors/browser-use-cloud.md)
- [Memory connectors](docs/connectors/memory-connectors.md), plus
Cognee, Honcho, Supermemory and Zep
  - [Agent Chat](docs/experimental/agent-chat.md)
  - [Paperclip Runner](docs/reference/adapters/paperclip-runner.md)
- **Breaking changes applied:**
- @-mentions no longer start a run (#14577). Ten pages that still said
they did are fixed.
- Keyboard shortcuts are always on, and `/api/auth/preferences` is gone.
  - Connector setup is one screen (#14811).
- Agent files that persist across tasks, a GitHub skill **Sources** tab,
aggregators on by default, two-way Slack, Grok Build on the Runner,
refreshed model catalogs, and the new env vars, including
`PAPERCLIP_RUNNER_API_TOOLS_ENABLED` / `_COMPANY_IDS`.
- A changelog entry, and 113 pages stamped `paperclip_version:
v2026.1005.0`.

### ⚠ Post-tag leaks removed

These document parent `master` features that are **not in
v2026.1005.0**. They stay on `nightly` for the next release.

- **Pages removed entirely (9):**
  - `connectors/ai-usage.md` (7d59de61)
  - `connectors/custom-model-providers.md` (9f7057e1)
  - `connectors/connection-instructions.md` (4857799a)
  - `administration/agent-commentary.md` (b508a05c)
- `experimental/assistant-connections.md`,
`reference/api/assistant-mcp.md` and `reference/cli/mcp.md` (e34abee6,
22a3ea34, 2d0c1381)
  - `guides/org/agent-identity.md` (a590ab76)
  - `reference/cli/runtime.md` (a6306ba6)
- **Reverted to `main`:**
  - `agentmail.md` (6c1a75da)
  - `openrouter.md`; only the released access-line change was re-applied
- `asana.md` (4ac37410); only the released access-line change was
re-applied
  - `delegation.md` and `team-catalog.md` (862a5758, b17019e1)
  - `adapters/overview.md` (a6306ba6)
  - `api/tool-gateway.md`, the GET → 405 change
- **Sections trimmed (~50 pages):**
  - AgentMail as a default connection
  - **Check usage**
  - aggregator account sync and grouping (b43073d1)
  - MCP `offline_access` (839cac13) and readable test results (6d654f63)
  - saved connection guidance
- the **Update skill** tool (eb049aeb) and managed-checkout import roots
(427e0484)
  - low-trust scoped work and owner-chat edits (0829d94a, 4039d4f0)
  - reduced default instructions (b17019e1)
  - Chat leading the nav and the combined inbox (1c07b590)
  - steer/interrupt recovery (cc67d4e1)
  - branch artifacts without a remote (db72ad4c)
  - Cursor on the Runner (a6306ba6)
  - Claude/Codex model ordering (92ad158c, d9b64ee2)
  - Daytona stalled-log polling (4e524632)
  - the agent identity env vars
  - the shared task composer for new tasks (2c43b391)

### ⚠ Drift

Checked against the tag. **No real drift remains:**
- **Env vars that exist at the tag but are read through helpers the
checker doesn't scan (false positives):**
  - `PAPERCLIP_WORKSPACE_GIT_SCAN_*`
  - `PAPERCLIP_WORKSPACE_GIT_SNAPSHOT_TIMEOUT_MS`
  - `PAPERCLIP_RUNNER_API_COMPANY_CAPTURE_MAX_BYTES`
  - `PAPERCLIP_CLOUD_CONNECTOR_*`
- `PAPERCLIP_ID_CONNECTOR_*` are documented as **retired**, which is
correct.
- Verify: `/api/companies/{companyId}/chats/{agentRef}` is registered
dynamically (`router[method]`, `issues.ts:17185`). False positive.
- Verify: `/api/agent-avatars/...png` and
`/api/companies/import/transfers*` are known false positives from
constant or param registration.

### ⚠ Verification Failures / review notes

- **Asana:** `asana.md` keeps "register your own Asana OAuth app". The
tag's `asana.json` advertises "Sign in with Asana" (DCR), but Asana's v2
MCP server needs a registered app, and sign-in only works after post-tag
#14756. Confirm you're happy with that wording.
- **Google Docs/Sheets/Slides/Calendar:** the "Reconnect after the scope
change" paragraph isn't confirmed in code.
- **`grok-local.md`:** "Intel Mac rejected" and "subscription sign-in,
no automatic fallback" are only partly confirmed.
- **`paperclip-runner.md`:** "Grok cannot automatically approve
Paperclip tool calls under narrower ACP modes" isn't confirmed directly.
- **`cognee.md`:** the tag's setup text says `uv` is required, which
contradicts `tool-access.ts:3560`. The page follows the code.
- **`work-modes.md`:** the per-reply mode chip was removed because it
couldn't be found at the tag.
- **`browser-use-cloud.md`:** the `frame-src` CSP advice is general
advice, not code-backed.

### Screenshots

**180 of 350 screenshots are stale**, across 41 routes (see
`SCREENSHOTS_PENDING.md`). None were recaptured in this PR; refresh
separately with `npm run screenshots:refresh`.

### Other open PRs

- **#143** (Browser Use Cloud + Neon, targets `main`): Browser Use Cloud
is covered here, and Neon is post-tag (5b8b2b38). Suggest closing it or
retargeting it to `nightly`.

## Checks

- `docs:build` passes.
- `sync:check` passes, with no broken internal links.
- `docs:test` passes in full: SEO metadata, crawlable links (275
routes), doc link resolution (2,198 checks), static routes, asset
fingerprints, skills nav, and skill source blocks.

## After merge (Phase 9)

- [ ] `docs/v2026.1005.0` tag is created by the workflow (keep the PR
title as is).
- [ ] `node scripts/sync/realign-nightly.mjs release/v2026.1005.0
--push`. The nine removed pages stay on `nightly`.
- [ ] Flip `nightly`'s `.sync-state.json` back to `branch_mode:
nightly`.
- [ ] docs.paperclip.ing serves the release: the changelog's top entry
reads v2026.1005.0, and `/connectors/browser-use-cloud/` returns 200.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-10-07 09:19:28 +02:00
186095cd39 Release docs for paperclip v2026.1001.0 (#142)
Release docs for paperclip **v2026.1001.0** (tag `8f8a0ab7`, 77 commits
from the `v2026.916.1` merge-base `dffc2b3`).

## What's in the release

Agent characters across the app, a rebuilt Slack setup, safe routine
webhooks, experimental MCP aggregators (default-off
`enableMcpAggregators`), Railway and You.com connectors, the CreateOS
sandbox provider, queued answers during active runs, and runner-created
company skills. Two breaking changes are documented: coding agents now
run in full auto by default, and the legacy Composio broker is retired.

## How this branch was built

This branch was cut from `nightly`, with `main` merged in. Nightly had
drafted parent `master` up to `0f14d261`, which is **93 commits past the
tag**. So every page changed against `main` was checked line by line
against the tag source, and post-tag content was reverted to what ships.

**Merge with `main`:** `main` published Fireflies, Railway, and You.com
guides in #138/#141 while nightly drafted its own versions. This branch
keeps `main`'s live versions. Nightly's Fireflies and Railway drafts
describe post-tag behaviour anyway.

## Changes

- 37 doc pages vs `main`, all stamped `paperclip_version: v2026.1001.0`.
One new page: `connectors/mcp-aggregators.md`.
- `docs/reference/changelog.md`: v2026.1001.0 entry. It also rounds up
the six connector guides published since v2026.916.1.
- Zapier, Arcade, Composio, and Executor pages and catalog rows now say
they need the experimental **MCP aggregators** setting. At the tag, all
four are filtered out of **Connectors** until it is on
(`packages/shared/src/remote-mcp-connectors.ts`). This is new for
Zapier, which used to be visible to everyone.
- The connector-model version notes in `connectors.md`,
`recognized-providers.md`, and `slack.md` are moved to v2026.1001.0.
- `SCREENSHOTS_PENDING.md`: regenerated for the release window. 194 of
350 screenshots are flagged across 40 routes (file-change flags only).
- `.sync-state.json`: base moved to `v2026.1001.0`.

### ⚠ Post-tag leaks removed

Present on `master`, absent at `v2026.1001.0`. These stay on `nightly`
for a later release.

- **Memory connectors** (Zep, Supermemory, Cognee, Honcho) and the
toggle, from `18dac1e1`: `connectors.md`, `connections-apps.md`,
`mem0.md`.
- **MCP aggregators on by default** and agent provider choice, from
`8781f06a`, `aa8fc863`, `b41ccf09`, `4721f558`: `mcp-aggregators.md`,
`connectors.md`. The `--retry-provider-choice`, `--target-service`, and
`--selection-interaction-id` flags are removed from
`cli/connections.md`.
- **Slack** governed tools, personal search, Idle state, scheduled
messages and `im:write`, message mirroring, channels enabled by default,
and the MCP-access troubleshooting row, from `a10702a8`, `b0155a68`,
`8725d6ce`, `a7d3b17a`: `slack.md`,
`wire-slack-discord-notifications.md`.
- **Fireflies routine signing**: the `app_webhook` and `fireflies_hmac`
modes, payload data blocks, and the Fireflies example, from `24429024`:
`routines.md` (guide and API) and `create-a-daily-routine.md`.
- **Tasks**: the artifact media gallery (`1ccae464`), Ancestors in the
Tasks panel (`2788f20f`), retry-budget escalation to `blocked`
(`6bc830b6`), and alphabetized experimental settings (`794b09f8`).
- **Settings**: per-user keyboard shortcuts and `/api/auth/preferences`
(`01d9a121`), the `PAPERCLIP_HIDDEN_SETTINGS` `instance.experimental.*`
wildcard (`e2f1a66a`), Cloud **Invite people** on Members (`c341588b`),
and the Cloud lifecycle routes (`8c6cc7dc`).
- **Plugin SDK**: the `organizationSwitcher` slot (`7badae69`) and the
environment-creation cleanup helpers (`1dbffb4c`).
- **Agents and adapters**: the model and reasoning-effort refresh
(`cdf04a33`), covering Opus 5.5, `gpt-6-sol`/`luna`, Gemini 3.8 Flash,
Grok 4.x, Kimi K3 256k, and the Cursor/OpenCode model lists. Also Grok
in the Cloud picker (`83abfa46`) and `inheritRuntimeFrom: "caller"`
(`7944ed3d`).
- **Retired `PAPERCLIP_WAKE_PAYLOAD_JSON`** (`4b8ec588`): restored in
`environment-variables.md` and `reference/skills.md`.

### ⚠ Verification Failures

For a reviewer to confirm:

- **Codex full auto on the ACP engine.** Per the verifier, at the tag
Codex's approval-and-sandbox bypass applies on the CLI lane, while the
default ACP engine keeps Codex in its workspace sandbox with network on.
`codex.md` now says so. `agent-adapters.md` → "Agents run in full auto
by default" still lists Codex without that qualifier.
- `GET /api/agent-avatars/{version}/{palette}/{pose}.png`
(`api/agents.md`) is medium-confidence drift. It is confirmed at the tag
in `server/src/routes/agent-avatars.ts`.

The mechanical tag-accuracy gate reported **0 high-confidence leaks**,
even on the unfixed nightly content. Every leak above is behavioural or
prose, and was caught by a per-page adversarial pass against the tag
source.

### ⚠ Drift

All pre-existing and known false positives:

- env-var-missing (high):
`PAPERCLIP_WORKSPACE_GIT_SCAN_{CONCURRENCY,QUEUE_CAPACITY,TIMEOUT_MS,CACHE_TTL_MS}`
and
`PAPERCLIP_ID_CONNECTOR_{BASE_URL,ENVIRONMENT,INSTANCE_ID,SIGN_PRIVATE_KEY,SEAL_PRIVATE_KEY}`,
which sit in grouped or commented `.env.example` blocks.
- Verify: rest-route-missing (medium): the five
`/api/companies/import/transfers*` routes, registered through
`COMPANY_IMPORT_TRANSFERS_ROUTE_PATH`.

### Open nightly-draft PRs

Local branches `nightly-draft/2a99de8-sandbox-and-routine-triggers` and
`nightly-draft/3e63a7e-acp-engine` are not part of this release.

### ☐ Before merge

- Delete the duplicate `docs/connectors/you-com.md` (nightly's draft;
`main`'s `youcom.md` is the registered page). It is an orphan with a
duplicate `seo_title`; the automated run could not delete files.
- Optionally run `npm run screenshots:refresh` on this branch.

## Checks

`docs:build`, `docs:test` (all six gates), `sync:lint-links`,
`sync:verify-nav`, and `sync:verify-screenshots` all pass locally. The
only new orphan is the duplicate `docs/connectors/you-com.md`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-10-03 09:04:25 +02:00
Aron PrinsandClaude Opus 5.5 478d24ce5d ci: tag docs releases automatically on merge to main (#133)
Tags every docs release automatically, so the `docs/vX.Y.Z` tag stops
depending on someone remembering to create it after the merge. So far,
11 of 16 releases were never tagged.

## What changes

- **New workflow, `.github/workflows/tag-docs-release.yml`.** It runs on
every push to `main`. For each new commit titled `Release docs for
paperclip vYYYY.MDD.P`, it tags that commit `docs/vYYYY.MDD.P`.
  - Anything after a space in the title, such as `(#132)`, is ignored.
  - Pre-release versions like `-beta.1` are skipped.
  - Tags that already exist are left alone.
- **`skills/sync-docs/SKILL.md` (Phase 9) and
`maintenance/runbook.md`.** The after-merge step now checks that the tag
exists instead of creating it by hand. It also tells you to keep the
release PR title format, because the workflow reads the version from it.

## Tested

I ran the version matching against all 16 release squash-commit titles
on `main` and it matched every one, including `(content + screenshot
overhaul) (#95)` and titles with no PR number. It rejects `-beta.1`. The
workflow itself hasn't run on GitHub yet; the next release merge will be
its first run.

## Needs

The workflow needs permission to push tags: `permissions: contents:
write`. If the repo's Actions permissions are read-only and that can't
be changed per workflow, the first run will fail with a clear error. Fix
it in Settings → Actions → Workflow permissions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-26 13:37:31 +02:00
Aron PrinsandClaude Opus 5.5 a3368fb06b Release docs for paperclip v2026.916.1 (#132)
Release docs for paperclip **v2026.916.1**, a patch on top of
v2026.916.0.

## What's in the release

One upstream commit,
[#13562](https://github.com/paperclipai/paperclip/pull/13562): the task
conversation's send button no longer starts out disabled while the pause
check loads. The same commit repairs how the server classifies duplicate
document inserts. No doc page described the broken behavior, so no
content needed editing.

## Changes

- `docs/reference/changelog.md`: a v2026.916.1 entry. It also lists the
pages published on `main` since v2026.916.0: Set Up HTTPS, Understanding
GitHub PR review bots, and Set up a GitHub review bot, plus updates to
Trust & Low-Trust Review and the GitHub connector pages.
- `SCREENSHOTS_PENDING.md`: 24 task-detail screenshots whose
dependencies changed. These are file-change flags, not confirmed visual
changes, so recapturing is optional.
- `.sync-state.json`: base moved to `v2026.916.1`.

This branch was cut from `main`, not `nightly`. Everything on `nightly`
was drafted from parent `master` after the tag, so none of it is
included.

### ⚠ Post-tag leaks removed

The following nightly drafts are absent at `v2026.916.1` and were
deliberately left out:

- `docs/reference/adapters/sandbox-providers.md`: the CreateOS provider.
The tag-accuracy gate flagged it as a leak.
- `docs/guides/projects-workflow/routines.md` and
`docs/reference/api/routines.md`: webhook setup-pending and test
deliveries. `routines.ts` at the tag has no webhook handling.

### ⚠ Verification Failures

For review: the tag-accuracy gate could not confirm the surface of
`docs/connectors/github-review-bot-setup.md` or
`docs/connectors/understanding-github-review-bots.md` at the tag. Both
are marked experimental and already live.

### ⚠ Drift

These items predate this patch; they shipped with v2026.916.0.

- env-var-missing (high):
`PAPERCLIP_WORKSPACE_GIT_SCAN_{CONCURRENCY,QUEUE_CAPACITY,TIMEOUT_MS,CACHE_TTL_MS}`
and
`PAPERCLIP_ID_CONNECTOR_{BASE_URL,ENVIRONMENT,INSTANCE_ID,SIGN_PRIVATE_KEY,SEAL_PRIVATE_KEY}`
in `environment-variables.md`. These may be runtime-injected false
positives.
- Verify: rest-route-missing (medium): the five
`/api/companies/import/transfers*` routes in `api/companies.md:426-430`.

## Checks

`docs:build`, `sync:check`, and `docs:test` all pass locally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-26 12:48:24 +02:00
c65bc9a9bf Release docs for paperclip v2026.916.0 (#125)
Brings **paperclip-docs** in line with paperclip **v2026.916.0**,
shipping the `v2026.831.1 → v2026.916.0` cycle drafted on `nightly`,
stamped to the release tag, with a documentation changelog entry.

This branch was cut from `nightly` **after** merging `origin/main` into
it, so it sits on top of the operator-first connectors catalog (#124)
rather than reverting it.

## Manifest

**New pages (4)**
- `docs/reference/api/connection-intents.md` — Connection Intents API
- `docs/reference/cli/connections.md` — `connections` command
- `docs/reference/cli/managed-agent.md` — `managed-agent` command
- `docs/reference/cli/test-drive.md` — `test-drive` command

**Updated pages (17)**
- Roles & Permissions + Company Administration — `tools:*` role-default
changes
- Connect an Agent to GitHub — managed GitHub connection (Connectors),
Option C
- Agents API — Managed/Remote Agent Profiles, `***REDACTED***` env
serialization
- Tool Gateway API — agent self-authorization (`start-authorization`,
`token`)
- Instance Admin API — instance-settings + task-drain routes
- Plugin SDK — `ctx.access` + `ctx.authorization` clients,
login-PTY/duplex streaming
- Environment Variables — Paperclip ID Connector block + HTTP adapter
allowlist var
- Adapters: Codex (`gpt-5.6-sol` default, Fast mode, auth cache), Claude
Code (Fable 5.1 + CLI floor), Grok Local (SuperGrok subscription auth),
HTTP (SSRF guard), Sandbox Providers (Daytona warm runner), OpenCode
(model pre-flight)
- CLI: `adapter detect-model`, `onboard` tool-action signing secret
- Command palette — recent tasks in sidebar
- `docs/reference/changelog.md` — new `v2026.916.0` accordion entry

All 21 touched pages stamped `paperclip_version: v2026.916.0`.

## Verification

**Tag-accuracy gate (Phase 5.7)** — `check-tag-accuracy.mjs --tag
v2026.916.0 --base main --head nightly` flagged 5 pages, **every one
verified present in the code at the release tag** and cleared as known
`verify-edit` false-positive classes. No content was quarantined; **no
post-tag leaks**:

| Page | Flagged claim(s) | Verified at tag |
|---|---|---|
| `cli/connections.md` | `PAPERCLIP_RUNTIME_TOOLS_*` (3) | present in
`cli/src/commands/client/connections.ts` (runtime-injected env) |
| `cli/managed-agent.md` | `--profile-key`, `--api-key-secret-id` |
present in `cli/src/commands/managed-agent.ts`
(`.requiredOption`/`.option`) |
| `cli/test-drive.md` | `--harness` | present in
`cli/src/commands/test-drive.ts` (`new Option`) |
| `deploy/environment-variables.md` | `PAPERCLIP_ID_CONNECTOR_*` (5) |
present in `.env.example` at tag |
| `plugins/sdk.md` | `PLUGIN_*` (6) | present in
`packages/plugins/sdk/src/index.ts` (exported constants) |

Rationale: nightly's drafts were authored from parent `af8439a`, **226
commits inside the tag**, so they document in-tag surfaces by
construction.

### ⚠ Drift
`check-drift.mjs --against v2026.916.0` returned 14 records — **all
verified present at the tag** (checker false positives), listed here for
the reviewer to confirm:

- **env-var (9, high-confidence in the tool, verified present):**
`PAPERCLIP_WORKSPACE_GIT_SCAN_{CONCURRENCY,QUEUE_CAPACITY,TIMEOUT_MS,CACHE_TTL_MS}`
and
`PAPERCLIP_ID_CONNECTOR_{BASE_URL,ENVIRONMENT,INSTANCE_ID,SIGN_PRIVATE_KEY,SEAL_PRIVATE_KEY}`
— all present in `.env.example` at the tag; the drift scanner's scoped
file scan missed them.
- **Verify: rest-route (5, medium-confidence):** `POST/PUT/GET
/api/companies/import/transfers*` — present at the tag in
`server/src/routes/companies.ts`, registered via the
`COMPANY_IMPORT_TRANSFERS_ROUTE_PATH` prefix constant (the documented
prefix/dynamic-registration blind spot).

### ⚠ Verification Failures
None. All tag-accuracy and drift flags above were verified present at
the tag.

### ↻ Renames detected
None. The connectors catalog (`docs/connectors/**`) arrived via the
`main` merge (#124), not as a renamed surface; no new top-level draft
directories were introduced this cycle.

## Screenshots
**238 of 342 screenshots** flagged stale across 50 routes (see
`SCREENSHOTS_PENDING.md`). This is a wide 16-day window touching ~921 UI
files, so most are dependency-touch flags rather than confirmed visual
changes. Recommend `npm run screenshots:refresh` on this release branch
as a dedicated follow-up before merge; PNGs go to a separate PR for
human review.

## Build gates (all green on this branch)
- `npm run docs:build` — 257 pages
- `npm run docs:test` — SEO metadata, crawlable-links (71,749 links
resolve), doc-link-resolution, skill-source-blocks, static-routes,
hierarchical-nav

## Post-merge checklist (Phase 9 — do NOT skip)
- [ ] Squash-merge this PR (repo is squash-only)
- [ ] `git checkout main && git pull`
- [ ] `git tag docs/v2026.916.0 && git push --tags`
- [ ] `node scripts/sync/realign-nightly.mjs release/v2026.916.0 --push`
(restore ancestry; keep nightly post-tag drafts)
- [ ] Flip `nightly` `.sync-state.json` back to `"branch_mode":
"nightly"` (leave `base_release_tag` at `v2026.916.0`)
- [ ] Verify `docs.paperclip.ing` serves the release: a new page
(`/reference/cli/test-drive/`), a changed page, and the changelog top
entry reads `Docs for v2026.916.0`
- [ ] If production is stale, republish: `npm run docs:build && npx
wrangler pages deploy .site --project-name paperclip-docs --branch main`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-09-17 11:15:48 +02:00
Aron PrinsandClaude Opus 4.8 27d7a5ab4c Release docs for paperclip v2026.831.1 (#120)
Syncs docs to parent release **v2026.831.1** (cumulative from
`v2026.824.1`, via merge-base `664052f`). Authored fresh against the
release tag; every claim verified at the tag.

## What changed

**New**
- **Kimi Code adapter** (`kimi_local`) — new reference page, wired into
the adapters overview, nav, and anchor-map source mapping.

**Reference**
- **Env vars** — `PAPERCLIP_WORKSPACE_REAPER_COOLDOWN_DAYS`, opt-in
`SENTRY_DSN`, and the operator controls `PAPERCLIP_HIDDEN_SETTINGS` /
`PAPERCLIP_SETTING_DEFAULTS`.
- **Instance Settings** — new "operator controls for hosted deployments"
section (hide surfaces / override defaults).
- **Node.js floor → 24.11.0** across installation, setup,
local-development, plugin dev, Modal, and the getting-started/terminal
guides.
- **Grok adapter** — `permissionMode` no longer defaults to `dontAsk`;
when unset no flag is passed, and `--always-approve` is the unattended
policy.
- **CLI `agent`** — Kimi skills install path (`~/.kimi-code/skills`) +
`KIMI_CODE_HOME`.

**Guides**
- **Onboarding** — rebuilt around a single-card wizard that opens on
creating your agent; the mission step is gone, the goal is set
afterward.
- **Settings unification** — Invites folded into a Members tab, one
shared settings nav, and the company brand color + per-company
attachment size limit removed (also reflected in the Companies and Cases
APIs).
- **Governance behavior** — silent-run detection and stranded-task
recovery no longer act on their own; agent thought text is excluded from
automatic comments; invalid agent credentials now return `401`.

**Changelog** — entry added for v2026.831.1.

## Gates

- `docs:build`, SEO metadata, crawlable-links, sitemap-lastmod
(194/194), lint-links, verify-nav — all pass.
- **Edit verification:** every new high-confidence claim verified at the
tag.
- **Tag-accuracy gate:** 31 files checked, **0 post-tag leaks**, 30
clean, 1 review (below).

## ⚠ Drift (Verify before acting — not auto-resolved)

Medium-confidence REST-route drift in `docs/reference/api/companies.md`
— the import-transfer routes may no longer exist at these paths (likely
a false negative from prefix/dynamic registration; confirm before
editing):

- `POST /api/companies/import/transfers`
- `PUT /api/companies/import/transfers/{transferId}/parts/{partIndex}`
- `GET /api/companies/import/transfers/{transferId}`
- `POST /api/companies/import/transfers/{transferId}/preview`
- `POST /api/companies/import/transfers/{transferId}/apply`

## ⚠ Review

- `docs/reference/adapters/kimi-local.md` — new page; the only flagged
claim is the `secret-id` JSON **example placeholder** (not a real
identifier). Authored directly from the adapter's config surface at the
tag.

## Screenshots (deferred)

288 of 342 registered screenshots are stale (org-wide rename +
settings/onboarding rewrites), tracked in `SCREENSHOTS_PENDING.md`.
Recapture is a follow-up pass — **the merged pages describe the new
onboarding/settings UI while screenshots still show the old flow until
then.**

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-09-02 13:06:00 +02:00
Aron PrinsandClaude Opus 5 4644dda3a3 test: guard sitemap lastmod against shallow clones and metadata sweeps (#119)
Picks up the regression test from #104 (@cryppadotta) — closed as
superseded, but its fixture design was the best part of it and worth
landing on its own.

## Why this gap mattered

The sitemap `lastmod` bug shipped twice, and **neither failure was
detectable by any check in `docs:test`**:

| | Symptom | Why nothing caught it |
|---|---|---|
| #117 | 0 dates in production for weeks | Shallow checkout doesn't make
`git log` *fail* — it succeeds, returning one date per file |
| #118 | 192 concurrent `git fetch --unshallow` fighting over
`.git/shallow.lock`, dateless sitemap | Reproduces only on a shallow
clone — never locally, never in CI |

Both are Cloudflare-only failure modes. The only detector we had was
reading the live sitemap, which is how this whole thread started.

## What landed

`scripts/verify-sitemap-lastmod-history.mjs`, wired into `docs:test`.
Three cases against **real depth-1 clones** — the fixture design and
`--no-local` insight are @cryppadotta's:

1. Full history publishes real per-document dates
2. Shallow clone that can reach origin recovers history
3. Shallow clone with unreachable origin omits dates rather than lying

Two changes on top of the original:

**Overlay the working-tree builder into the clone.** The clone carries
committed HEAD, so without this the shallow cases silently test the last
commit instead of the change being made. No-op in CI; the difference is
real locally, and it is what makes the check usable while iterating.

**Assert no single date covers >75% of pages.** The existing "more than
one distinct date" assertion passes at *2* distinct dates — precisely
the state #118 fixed, where 190 of 193 pages carried the date of a
frontmatter-only sweep. Bounding the largest cluster catches that class
without pinning a date that legitimate edits will move.

## Verified by breaking it

A check that has never failed proves nothing, so I reverted each fix in
turn:

**Revert body-aware dating (#118):**
```
  ok  lastmod values vary across documents (2 distinct) rather than one build date
FAIL  full history: no single date dominates (2026-08-25 covers 190/193, 98% <= 75%)
```
Note the pre-existing assertion passing right above the failure — that
is the gap this closes.

**Revert the single-flight memo (#118):**
```
FAIL  unshallowed build dates every route (2/193)
FAIL  unshallowed build produces varied dates (1 distinct)
```
The `.git/shallow.lock` race, caught by Case 2 and nothing else.

Restored, clean run is green: 193/193 dated, 31 distinct, largest
cluster 28%.

## Cost

**~55s** added to `docs:test` for three builds (`docs-test` was 32s).
Steep for a test suite, and worth flagging rather than burying — but the
alternative detector for this failure class is noticing the live sitemap
is wrong.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-29 11:10:35 +02:00
Aron PrinsandClaude Opus 5 c593c23233 seo: date sitemap entries by body changes, not frontmatter sweeps (#118)
Follow-up to #117. That PR got `<lastmod>` publishing at all; this one
makes the dates worth resubmitting.

## The problem

**190 of 193 pages read `2026-08-25`** — the date of #115, which added
`seo_title`/`seo_description` to all 192 pages. Here is everything it
changed in a representative file:

```diff
+---
+seo_title: "Key Concepts: Companies, Agents, Tasks"
+seo_description: The seven ideas behind Paperclip — company, agent, task...
+---
+
 # Key Concepts
```

Not a word of prose. `lastmod` is meant to carry the date a page's
**content** last changed, so resubmitting this hands Search Console the
"whole site changed at once" signal that `dropUniformLastmod` and the
shallow-checkout guard both exist to prevent. It cleared
`dropUniformLastmod` only because 3 pages happened to differ.

## The fix

Walk each file's history and report the newest commit that changed the
**rendered body** — comparing `parseFrontmatter().body` across
consecutive commits, so frontmatter-only commits are skipped. Reusing
the build's own parser means the body compared is exactly the body the
site renders.

| | Before | After |
|---|---|---|
| Distinct dates | **2** | **31** |
| Largest single-date cluster | 190 pages | 54 pages |
| Range | 2 days | 2026-04-17 → 2026-08-27 |

Top of the new distribution:

| Date | Pages |
|---|---|
| 2026-08-18 | 54 |
| 2026-06-04 | 21 |
| 2026-08-25 | 17 |
| 2026-07-08 | 16 |
| 2026-07-20 | 15 |
| 2026-04-22 | 12 |

Spot-checked both directions:

- `key-concepts.md` — last touched by the frontmatter sweep, now dates
to **2026-07-08**, the commit that changed "Claude Local" to "Claude
Code" in the body.
- `day-to-day/issues.md` — **keeps 2026-08-25**, because release commit
`6c4519a` that day added a real "Who may resolve a card" section. Its
frontmatter-only `paperclip_version` bump in the same release was
correctly skipped.

## Two supporting fixes

**Concurrency.** ~600 git round-trips in series cost 40s. Resolving them
in parallel: **11s**.

**A race the concurrency exposed** — and the reason this is worth
reading closely. `hasTrustworthyGitHistory()` memoised its *resolved
value*, so once all 192 pages asked at once, every one of them passed
the guard before the first resolved:

```
Could not deepen the shallow checkout: fatal: Unable to create '.git/shallow.lock': File exists.
Still shallow: omitting sitemap <lastmod> rather than dating every page alike.
   × 192
```

192 concurrent `git fetch --unshallow` calls fighting over the lock, and
**a sitemap with no dates at all**. This only reproduces on a shallow
clone — which is to say only on Cloudflare Pages, never locally or in
`docs-test`. Fixed by memoising the promise (single-flight).

## Verification

| Scenario | Result |
|---|---|
| Full clone | 193 dates, 31 distinct, 11s |
| `git clone --depth 1` (reproduces CF) | one unshallow, **193 dates, 31
distinct** |
| Shallow + unreachable remote | no dates, exit 0 |
| `npm run docs:test` (6 suites) | pass |
| `npm run sync:test` | 39 pass, 0 fail (+1 new) |

New unit test covers the `--follow --name-status` rename parsing — 55
docs files have been renamed, and reading the wrong field silently drops
their pre-rename history.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-29 10:55:32 +02:00
Aron PrinsandClaude Opus 5 fe81cdf5a9 seo: publish sitemap lastmod dates from Cloudflare Pages builds (#117)
## The problem

`https://docs.paperclip.ing/sitemap.xml` contains **zero `<lastmod>`
elements** — 192 pages plus the root, none dated. It has never shipped
one.

The empty line after each `<loc>` is the tell: production *is* running
the current template, it just has nothing to emit.

```xml
  <url>
    <loc>https://docs.paperclip.ing/guides/welcome/key-concepts/</loc>

  </url>
```

## Why

Dates come from per-file git history. The guard added in #113 suppresses
them on a shallow checkout, and it is right to — with one commit, `git
log -1` reports that commit's date for *every* file, so the sitemap
would claim the whole site changed at once and Google would learn to
discount the signal.

Cloudflare Pages builds from a depth-1 clone, and **its clone depth is
not configurable from this repo**. `docs-checks.yml` sets `fetch-depth:
0` for exactly this reason, but that workflow only checks the build —
Pages' Git integration is what deploys. So the guard fired on every
production deploy since #113.

Reproduced locally:

| Build environment | `lastmod` entries |
|---|---|
| Full history | 193, real varied dates |
| `git clone --depth 1` | 0 — output byte-identical to production |

## The change

Try `git fetch --unshallow` (90s timeout) before giving up, and log
which branch it took so the Cloudflare build log answers the question
directly.

## Verification

| Scenario | Result |
|---|---|
| Shallow clone, fetchable remote | 1 commit → 257, **193 dates
emitted** |
| Shallow clone, unreachable remote | logs the git error, omits dates,
**exit 0** |
| Full clone (unchanged path) | unaffected |
| `npm run docs:test` (6 suites) + `npm run sync:test` (38 tests) | pass
|

## What this PR cannot prove

The local test cloned from a `file://` remote, which can always fetch.
**Whether Cloudflare's build container keeps usable credentials for the
remote it cloned from is the entire open question**, and only a real
deploy answers it — hence this PR and its preview.

- Works → preview `sitemap.xml` carries dates, build log says `Full
history fetched`.
- Doesn't → build log says `Could not deepen the shallow checkout:
<reason>`, sitemap is exactly what we ship today. No regression either
way; fall back to deploying from Actions with `fetch-depth: 0`.

## Known, not fixed here

Even with full history, **190 of 193 pages date to `2026-08-25`** —
325c9eb rewrote frontmatter across all 192 pages that day. Truthful, but
nearly signal-free, and it clears `dropUniformLastmod` only because 3
pages differ. It self-heals as pages get edited individually. Widening
that guard to a percentage threshold would suppress dates again today,
so I left it alone.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-29 10:30:03 +02:00
Aron PrinsandClaude Opus 4.8 5457a4ff38 Release docs for paperclip v2026.824.1 (#116)
Release docs sync for **paperclip v2026.824.1** (cumulative window
`v2026.824.0 → v2026.824.1`, 4 commits / 12 files). This patch release
repairs the onboarding background-service flow end to end.

## Change manifest

| Watcher | Parent files | Kind | Docs target |
|---|---|---|---|
| cli-commands | `cli/src/commands/onboard.ts`,
`cli/src/onboard-service.ts` | modified |
`docs/reference/cli/setup-commands.md` |

**`docs/reference/cli/setup-commands.md`** (`onboard` section) — once
the background service is installed, onboarding now hands you off to the
running instance: it waits for the port the service actually bound
(fallback port if the configured one is busy), prints the dashboard URL,
and opens it in your browser on interactive terminals. Headless runs
print the URL; the new **`PAPERCLIP_NO_BROWSER=1`** opts out of the
browser launch. If the service doesn't come up, onboarding points at
`paperclipai service logs` instead of claiming success.
`paperclip_version` bumped to `v2026.824.1`.

**`docs/reference/changelog.md`** — new `v2026.824.1` docs-changelog
entry.

Not doc-worthy this window: `run.ts` runtime-info plumbing, the
`paperclipai doctor` diagnostic-message refinements, and the test files
— no new or now-wrong surface in our docs.

## Verification

- `docs:build` ✓ · `sync:check` ✓ · full `docs:test` (6/6) ✓
- **verify-edit** against `v2026.824.1`: **47 claims verified, 0
unverified, 0 suspicious**. `PAPERCLIP_NO_BROWSER` and `paperclipai
service logs` both confirmed in parent code at the tag.
- **Tag-accuracy (Phase 5.7):** self-contained release — `nightly`
carries no doc drafts (only `.sync-state.json` differs from `main`), so
there are no post-tag leaks to quarantine.
- **Screenshots:** window touched only `cli/**`, no `ui/src/**` —
nothing stale.

## ⚠ Drift

Investigated against `v2026.824.1`. The two previously high-confidence
CLI findings (`paperclipai binary`, `paperclipai into`) were **scanner
false positives** — the drift scanner was reading `paperclipai <word>`
out of `seo_description` frontmatter prose. Fixed in this PR
(`scripts/sync/check-drift.mjs` now skips the YAML frontmatter block);
both disappear.

Remaining (5, medium, `Verify:` — **confirmed correct, no action
needed**):

- `POST /api/companies/import/transfers` ·
`docs/reference/api/companies.md:433`
- `PUT /api/companies/import/transfers/{transferId}/parts/{partIndex}` ·
:434
- `GET /api/companies/import/transfers/{transferId}` · :435
- `POST /api/companies/import/transfers/{transferId}/preview` · :436
- `POST /api/companies/import/transfers/{transferId}/apply` · :437

These routes **exist** at `v2026.824.1`
(`server/src/routes/companies.ts` lines 696/762/825/944/958), registered
via the `COMPANY_IMPORT_TRANSFERS_ROUTE_PATH` constant from
`@paperclipai/shared`. The scanner only matches string-literal paths, so
constant/template-literal registration reads as a false negative — a
known medium-tier limitation. The docs are accurate; nothing to change.
(A follow-up could teach the resolver to follow cross-package path
constants.)

## Checklist

- [x] Cumulative diff from last release tag
- [x] Edits verified against the release tag
- [x] Build + link + SEO + crawlable gates pass
- [x] Drift investigated; false positives fixed at the scanner, false
negatives confirmed correct
- [x] Docs-changelog entry added
- [ ] After merge: tag `docs/v2026.824.1`, realign `nightly`, verify
`docs.paperclip.ing` serves the release

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-08-27 12:55:02 +02:00
Aron PrinsandClaude Opus 5 325c9eb819 seo: hand-write titles and descriptions for all 192 pages (#115)
## Why

The build derived `<title>` from the **sidebar label** and the
description from the **first paragraph clipped to 220 characters**. Both
are the wrong source. A sidebar label is written for a 240px-wide nav
that supplies its own context; a search result has none.

On production that produced:

- **7 pages titled "Overview"**, and 32 pages sharing a title with
another page
- **109 of 193 descriptions cut off mid-word**, and 174 over 160
characters (where Google truncates)

```
/guides/welcome/key-concepts/
  BEFORE (220):  ...and if you misunderstand them early, the product wi
```

Near-identical titles are the weak-differentiation signal behind
"crawled — currently not indexed", which is the exact symptom on this
property.

## What changed

`seo_title` and `seo_description` frontmatter on **every one of the 192
pages**, written by hand against each page's real content and optimised
for the click — lead with what the reader can do, name the concrete
things covered, no keyword stuffing, no repeating the title.

| | Before | After |
|---|---|---|
| Duplicate titles | 32 pages | **0** |
| Duplicate descriptions | — | **0** |
| Descriptions cut mid-word | 109 | **0** |
| Descriptions over 160 chars | 174 | **0** |
| Title length (incl. suffix) | up to "Overview" | **26–60** |
| Description length | 31–240 | **122–158** |

**No prose was rewritten.** I measured content overlap between the
colliding pairs first — only 17–23%, so these were always distinct pages
wearing the same label, not duplicate content. The `docs/` diff is **564
insertions, zero deletions**.

### Examples

```
BEFORE — all seven identical:  "Overview | Paperclip Docs"
AFTER:  "Adapters Overview"      "API Overview"        "CLI Overview"
        "Deployment Overview"    "Bundled Skills"      "Optional Skills"
        "Experimental Features"

BEFORE — both identical:  "Issues | Paperclip Docs"
AFTER:  "Issues: Creating and Tracking Work"   /guides/day-to-day/issues/
        "Issues API"                           /reference/api/issues/
```

```
/guides/getting-started/five-minute-path/
BEFORE (220):  The shortest route from a running Paperclip instance to an agent that has
               just completed work for you. After Paperclip is installed, the path takes
               about 5 minutes: create a company, hire a CEO agent, approve its first s
AFTER  (131):  Install Paperclip, create a company, hire a CEO agent, and approve its
               first strategy — a working AI company in about five minutes.
```

## Plumbing

- **`site/build-release.mjs`** prefers the authored fields; the derived
path stays only as a fallback the CI gate prevents ever reaching.
`<title>`, `<meta name="description">`, and the `TechArticle` JSON-LD
all read from the same source.
- **`site/app.js`** uses the same fields, so a client-side transition
cannot leave a different title on screen than the crawler was served.
Verified in-browser: navigating `/guides/day-to-day/issues/` →
`/reference/api/issues/` swaps to exactly the server-rendered values, no
JS errors.
- **`scripts/verify-seo-metadata.mjs`** (new) enforces presence,
uniqueness, length, complete-sentence endings, and the
frontmatter-safety rules. Wired into `docs:test` and CI as its own step.

I negative-tested the gate rather than assuming it works — it correctly
fails on a duplicate title, a mid-word description, and a missing field,
and passes again once restored.

## Automating it going forward

`skills/sync-docs/SKILL.md` now:

- gains an **"Authored SEO metadata"** section: why the fields exist,
the enforced rules as a table, and how to actually write them (title
names the subject not the nav position; description writes for the
click; never generate mechanically from the first paragraph — *that is
the fallback the gate exists to prevent*).
- requires both fields in the **page-authoring instruction** given to
every subagent, with guidance on when to update an existing description
versus leave it.
- runs `docs:test:seo-metadata` and `docs:test:crawlable-links` as
**fail-loud gates in Phase 7** before commit.
- documents all six build gates in the files/gates section.

So once this lands, a new page cannot ship without hand-written
metadata, and a title collision cannot reach production.

## Verified

All six verifiers pass:

```
Static route verification passed
Asset fingerprint verification passed
Hierarchical Skills nav verification passed
Skill source block verification passed (11 skill pages, 1 control page)
Crawlable-link contract passed: 40886 internal links across 194 pages resolve in one hop
Authored-SEO contract passed: 192 pages carry a unique, hand-written seo_title and seo_description
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-25 22:51:42 +02:00
Aron PrinsandClaude Opus 5 5fa6e1dcbf docs: render the simplified-english skill source block (#114)
Fixes the last red check on `main`.

## What was wrong

`docs/reference/skills/optional/content/simplified-english.md` was left
on the pre-#89 layout — parsed `### Skill frontmatter` bullets plus a
`### Skill instructions` section — so it was the only per-skill page
without an embedded `SKILL.md`. `docs:test:skill-source-blocks` has
failed on it since release #95:

```
docs/reference/skills/optional/content/simplified-english.md:
  expected exactly one skill-source block, found 0
```

## The fix

Replaces both legacy sections with the authoritative `SKILL.md` in a
single ` ```markdown skill-source ` block, matching every other
per-skill page.

Source copied verbatim from `paperclipai/paperclip` at `9964b03`, path
`packages/skills-catalog/catalog/optional/content/simplified-english/SKILL.md`.
**No guidance changed** — the upstream file's content is identical to
what the page already described in its parsed form, so this is purely a
layout conversion.

## Bonus: duplicate H1

The old layout rendered two H1s — the page title, then the `SKILL.md`'s
own `# Simplified English` under "Skill instructions". That's the same
duplicate-H1 defect #87 fixed elsewhere, surviving on this one page.

```
BEFORE: h1=2  skill-download-blocks=0
AFTER:  h1=1  skill-download-blocks=1
```

## Verified

All five docs verifiers pass — the first fully green run:

```
Static route verification passed (5 representative routes + /guides/welcome/this-route-does-not-exist/, root and /paperclip-docs/ builds).
Asset fingerprint verification passed (bundle app.9b5b423f039c.js, 1 bundle, headers checked).
Hierarchical Skills nav verification passed.
Crawlable-link contract passed: 40886 internal links across 194 pages resolve in one hop, the server-rendered sidebar covers all 192 manifest routes, and sitemap dates are not uniform.
Skill source block verification passed (11 skill pages, 1 control page).
```

Note the verifier now covers **11** skill pages rather than 10 — this
page previously fell out of the contract entirely.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-25 22:10:20 +02:00
Aron PrinsandClaude Opus 5 29beedeb6a seo: make the docs link graph crawlable (#113)
## Why

Google has indexed effectively nothing on `docs.paperclip.ing`. Search
Console over 3 months: **8 of 192 URLs** have ever drawn an impression,
**681 of 975 impressions (70%) go to
`/guides/agent-developer/comments-and-communication`** — a legacy URL
that 301s and isn't in the sitemap. Strip that, the homepage, and the
team's own `site:` queries, and the canonical docs corpus earned **~7
organic impressions in 90 days**.

It isn't an eligibility problem. Pages are fetchable, self-canonical,
`index, follow`, and identical under a Googlebot UA. It's the internal
link graph.

## What was actually broken

**1. Every relative markdown link 404'd.** Authors write
`./glossary.md`, but pages are served from trailing-slash route
directories, so links resolved one level too deep:

```
page: /guides/welcome/key-concepts/   href: ./glossary.md
  → /guides/welcome/key-concepts/glossary.md   404
  ( /guides/welcome/glossary.md would be 200 )
```

Crawled all 192 live pages: **all 742 unique `.md` targets return 404**.
That's **1,283 of 1,306 in-body internal links — 98% — broken**, leaving
**0.1 working in-body links per page**.

It went unnoticed because `app.js:postProcessInternalLinks` repairs
these at runtime. Crawlers index the pre-render.

**2. The sidebar wasn't server-rendered.** Interior pages shipped `<div
id="sb-sections"></div>`, filled by JS. So the raw HTML offered the
logo, prev, next — and ~7 dead links. No link equity reached deep pages.
Search Console classified 98% of crawling as refresh, 2% as discovery.

Net effect: a crawler saw every page as a dead end that was 98% broken
links. Crawl demand collapsed — 14 crawled of 184, 15% of crawl
responses 404.

## Changes

- **Rewrite markdown links to canonical routes at build time**, and fail
the build on any link no nav page publishes. (Passed first run with zero
unresolved — every link had a valid destination, just emitted in a
404ing form.)
- **Server-render the sidebar and breadcrumb** into every interior route
from the manifest `app.js` already uses. `app.js` detects
`data-server-rendered` and keeps the DOM rather than re-rendering
identical markup. The mobile drawer stays client-built — it's
`inert`/`aria-hidden` until a JS toggle opens it, so rendering it
duplicated 192 links/page (~41KB) for no crawl benefit.
- **Intercept canonical route links in articles** so in-page navigation
stays a soft transition instead of a full reload.
- **Omit sitemap `<lastmod>` when git history is untrustworthy.**
Reproduced the real mechanism: in a `--depth=1` clone, `git log -1`
returns the single fetched commit's date for *every* file. Two files
that differ locally (`2026-08-18` / `2026-07-08`) both come back
`2026-08-25` shallow. That is exactly the live `192 × 2026-08-20`.
Cloudflare Pages shallow-clones by default.
- **Ship `redirects.json`** — `app.js` fetches it at boot and it 404'd.
- **Canonicalise the footer's `/reference/api/overview`** link, which
spent a 301 on all 193 pages.
- **Add `scripts/verify-crawlable-links.mjs` + CI**, gating on raw `.md`
hrefs, missing targets, redirecting targets, relative hrefs, an
unrendered sidebar, and uniform sitemap dates.

The last two were both caught by the new verifier on its first run.

## Result

| | Before (production) | After (generated bundle) |
|---|---|---|
| Broken in-body links | 1,283 (98%) | **0** |
| Working in-body links | 23 | **1,501** |
| Crawlable nav links/page | 0 | **192** |
| Distinct sitemap dates | 1 | **24** (0 on shallow CI) |

`Crawlable-link contract passed: 41078 internal links across 194 pages
resolve in one hop.`

## Verified

Built and driven in a real browser at `localhost:4321`:

- Raw HTML (crawler / no-JS view): 192 inline sidebar links, breadcrumb
rendered, **0 local `.md` hrefs**, single H1. Remaining empty containers
are JS-only UI (search modal, drawer, runtime status).
- SPA intact, no reloads, no JS errors: in-article links, prev/next,
sidebar links, mobile drawer (opens, 192 links, closes on navigate),
search (8 results for "adapter"). Breadcrumb and active-link state
follow correctly throughout.
- Subpath build for gh-pages emits correct `/paperclip-docs/...` hrefs.
- Homepage unchanged: 15 landing cards, 192 directory links.
- Shallow-clone build confirmed to warn and emit zero `<lastmod>`.

## Notes for review

- **This can't ship until the Cloudflare GitHub App is unsuspended.**
Everything here is verified against a local build only.
- **CI will be red on one pre-existing, unrelated failure**:
`docs:test:skill-source-blocks` on
`docs/reference/skills/optional/content/simplified-english.md` (missing
its skill-source block, from release #95). Confirmed failing on clean
`main`. Left in the aggregate rather than weakening the suite — fixing
it needs the real `SKILL.md` from the parent repo, which is sync-docs
work.
- **Production will now ship no `lastmod` at all** on Cloudflare's
shallow clone. Correct versus lying. To get real dates back, set the
Pages build command to `git fetch --unshallow || true; npm run
docs:build` — documented in the generated `DEPLOY.md`.
- Page weight 67KB → 109KB from the inlined nav. Highly repetitive,
compresses well, but it is a real increase.
- Weak/duplicate titles were deliberately skipped, per the plan's own
ranking (secondary).
- Plan item 4 (contextual links from high-authority surfaces to 20–25
priority pages) is a `paperclip-website` change plus editorial judgment,
so it's out of scope here. Worth noting that fixing the internal graph
recovers most of what that item was meant to buy — the dominant
authority failure was internal, not off-site.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-25 21:57:07 +02:00
Aron PrinsandClaude Opus 5 63e10a3cd6 sync-docs: require verifying the release is live before calling it shipped (#112)
## What happened

Today's `v2026.824.0` release **did** write its docs-changelog entry.
The accordion is on `main` in `docs/reference/changelog.md`, every one
of the 15 pages the release touched is listed, and `npm run docs:build`
renders it correctly with exactly one open accordion.

What didn't happen is publication. `docs.paperclip.ing` is still serving
the build from `ebbab07` (#100, the pre-release hotfix):

| Check | Expected | Live |
|---|---|---|
| `/reference/deploy/tailscale-https-broker/` | `200` | `404` |
| `paperclipai channels` on `/reference/cli/installation/` | present |
absent |
| top changelog entry | `v2026.824.0` | `v2026.817.0` |

The `main`-branch Pages preview is stale in the same way, so neither
commit pushed to `main` today (#110, #111) deployed. `npm run
docs:build` succeeds from a clean checkout of `main`, so it isn't a
build break — the Cloudflare Pages deploy simply never ran.

## Why the skill didn't catch it

Phase 7 builds into `.site`, which is gitignored — nothing reader-facing
is ever committed — and Phase 8 hands off at the merge. There was no
step that looked at the live site. The runbook had a soft "Confirm
`docs.paperclip.ing` is rebuilt successfully" bullet with no method and
no fallback, and it was skipped along with its siblings: the
`docs/v2026.824.0` tag was never cut (last one is `docs/v2026.707.0`),
and `nightly`'s `.sync-state.json` still reads `branch_mode: "release"`.

## What this changes

- **`skills/sync-docs/SKILL.md`** — new **Phase 9 — Publish & verify
live** (release mode only): do every post-merge follow-up (tag, realign,
flip `branch_mode`), verify production against three independent live
signals, republish via `wrangler pages deploy` if stale, and report the
status codes as evidence. Verification is mandatory even when pushing
isn't approved. Plus a failure-mode row, a diagnosis-order special case,
and a pointer from Phase 6.5 (the entry isn't done until it's live).
- **`maintenance/runbook.md`** — replaces the soft "confirm" bullet with
the actual checks and the manual republish fallback.
- **`README.md`** — it claimed there is no Wrangler publish step for
this repo; notes the auto-deploy isn't guaranteed and documents the
fallback.

No changelog content changed — the `v2026.824.0` entry needed no
correction. Merging this PR pushes to `main`, which should also
re-trigger the deploy that stalled.

## Verification

- `npm run docs:build` — clean
- `npm run sync:check` — lint-links and verify-nav pass; the 5
`rest-route-missing` drift candidates are pre-existing medium-confidence
`Verify:` entries from the release, untouched here

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-25 12:25:33 +02:00
Aron PrinsandClaude Opus 4.8 8a858777f2 sync-docs: tag-accuracy gate + release-channel-aware skill (#111)
Makes /sync-docs correct under the canary→nightly→beta→stable channel model. Adds the release-mode tag-accuracy gate (scripts/sync/check-tag-accuracy.mjs) that verifies every changed page against the stable tag and flags post-tag leaks; stable-CalVer guard + channel glossary, tag-scoped drift/verify, and Phase 5.7 in the skill; realign fix that keeps nightly's drafts; a release-channels watcher; the analysis/plan doc; and a hermetic test (sync:test 38/38).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-08-25 11:48:38 +02:00
Aron PrinsandClaude Opus 4.8 6c4519af4a Release docs for paperclip v2026.824.0 (#110)
Cumulative docs sync from v2026.817.0 to the v2026.824.0 stable tag.

New/updated: Tailscale HTTPS broker, workspaces HTTPS exposure, release channels + `paperclipai channels`, resumable company import (guide + companies API), secret catalog, Claude setup-token login, adapter device-login, issue file-resource availability, document comments, interaction resolver-policy/governance. Version-stamped touched pages and added the v2026.824.0 docs-changelog entry.

Verified every page against the v2026.824.0 tag; stripped post-tag master leaks (Kimi adapter, reaper-cooldown env var, mission-less onboarding rewrite) that nightly had drafted ahead of the release. Screenshots flagged (192 stale) but not recaptured this release.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-08-25 10:02:16 +02:00
Aron PrinsandClaude Opus 5 6e6990539c Add the v2026.817.0 docs changelog entry, and a step that writes it (#96)
The documentation changelog was never updated for v2026.817.0. This adds
the
missing entry, and closes the hole that let it go missing.

## Why it was missing

`docs/reference/changelog.md` has **exactly one commit in its entire
history** —
`8c21935` (#73), which created the page on 2026-07-23 with the
v2026.722.0 and
v2026.720.0 entries written by hand. `skills/sync-docs/SKILL.md`
contains zero
occurrences of "changelog": release mode merges nightly → main, tags,
and ships,
but never writes that page.

The timing is why nobody noticed:

| | |
|---|---|
| 2026-07-23 08:10 | v2026.722.0 release merged (#72) |
| 2026-07-23 11:47 | changelog page created (#73), already current |
| 2026-08-18 10:43 | v2026.817.0 merged (#95) ← first release that had
to append |

The page was born ~3.5 hours after the previous release, so it was
correct on
arrival. v2026.817.0 is the first one it could have missed, and it did.
The
frontmatter was stale by the same marker (`paperclip_version:
v2026.722.0`).

## What's here

**The entry** — 8 new pages (Decisions API, Status Cards API and guide,
Chat-Style Tasks, the `service` CLI, three catalog skills), the
substantive
rewrites grouped by what a reader gains, and a short block on the
screenshot
overhaul. Frontmatter bumped to `v2026.817.0`.

**Phase 6.5 in the sync-docs skill** (release mode only) — writes this
page from
the manifest the run already holds. It pins down the details that are
easy to get
wrong on a monthly cadence:

- the `<details class="accordion">` shape, newest first
- **only the newest entry carries `open`** — miss this and the page
renders with
  two expanded
- links are relative to `docs/reference/`
- exclude repo maintenance files (`docs/user-guides/screenshots/`,
  `SCREENSHOTS_*.md`) — they're in the repo, not in the docs
- skip entirely in nightly mode, so an unreleased tag can't leak

Phase 7's `sync:check` already validates relative links, so a typo in a
future
entry fails the run instead of shipping.

## Checks

- `npm run docs:build` — clean, 191 pages
- `npm run sync:lint-links` — no broken internal links
- Rendered output verified: v2026.817.0 sits on top with **exactly one**
open
  accordion

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 <[email protected]>
2026-08-18 12:52:00 +02:00
631a6a0c53 Release docs for paperclip v2026.817.0 (content + screenshot overhaul) (#95)
Ships the v2026.817.0 docs to live: the doc content that was authored
and verified
earlier, plus a full screenshot overhaul.

The content half (`cdf81e2` and the nightly commits behind it) has
already been
reviewed. **The screenshots are the part that needs eyes** — `f24d734`,
342 PNGs.

## Screenshots

Everything was recaptured against the release commit
`213dabab4f8e1f3bb1803a2924c0fea1289fcd4c`
(`upstream/candidate/release-2026.817.0`). The previous shots were 375
parent-commits stale (v2026.720.0), with 228 of 310 entries flagged
pending. All
342 registry entries now carry that SHA.

> ⚠️ Worth knowing: the release commit is **not** an ancestor of the
parent's
> `master`, and local `master` was four days *older* than it. Capturing
against
> `master` would have both missed release UI and leaked 93 post-tag
commits' worth
> of UI into the release docs.

### New coverage (34 entries)

Three guides shipped with **no images at all** despite being 115–136
lines. They
now have them:

| Guide | Shots |
|---|---|
| `guides/day-to-day/decisions.md` | queue, an agent-proposed decision
with its options, triage strip, filter panel, named queue, Decided
curtain, empty state |
| `experimental/status-cards.md` | board, New card dialog, and all four
drawer tabs |
| `experimental/task-chat.md` | thread, composer mode picker, side pane
|
| `reference/api/secrets.md` | the board-side Proposals tab |

Chat-Style Tasks is captured in a **separate pass**:
`enableTaskChatRedesign` is
instance-wide, so leaving it on would have turned every classic
issue/task/work-mode
shot into the redesigned chat.

## Two defects that were already live

Both were shipping in the docs before this PR:

1. **`issues/detail-chat.png` and the `tasks/*` shots were mostly plugin
debug
output.** The Kitchen Sink example plugin mounts a panel into the issue
page
that dumps the raw issue JSON, and the seed installed it. Those guides
were
illustrating a debug panel instead of the task page. The seed no longer
   installs it.
2. **The seeded task thread was a monologue** — four board-user messages
in a row,
because the board actor cannot post agent comments. It is now a real
two-sided
   exchange.

## Targets repointed because the UI moved

| Target | Why |
|---|---|
| `activity/*` | `Activity.tsx` deleted; `/activity` renders
`pages/audit/CompanyActivity.tsx` |
| `experimental/cloud-upstream` | `CloudUpstream.tsx` deleted; the route
now redirects to `/company/export` |
| `settings/*`, `plugins/*`, `adapters/*` | `/instance/settings/*` are
legacy redirects now |
| `dashboard/stale-tasks-panel` | panel removed from `Dashboard.tsx` —
target dropped |

Plus eight targets with **silent selector drift**. A failed interaction
step falls
back to "whatever state was reached", so these had been quietly
producing wrong
images — a plain inbox where the doc promised a mode picker, a whole
dashboard
where it promised one panel. Full table in
`docs/user-guides/screenshots/SCREENSHOTS_PLAN_v2026.817.0.md` §C2.

## Pipeline

Decisions, status-card summaries and secret proposals are all
**agent-authored**,
and the board actor the seed runs as is refused by every one of them
(`"Agent run context required"`, `"Secret proposals require a verified
run-bound
agent token"`). Rather than insert rows behind the API,
`seed-new-surfaces.mjs`
borrows the two doors a real run already has — a board-minted agent API
key, and a
locally signed agent JWT — so every write goes through the production
code path.

Also:
- `capture.mjs` records a real `captured_against` on a detached checkout
instead of
the literal string `"HEAD"` (which is what every pre-2026.817 entry
recorded), and
  gains a `scrollTo` step for content below the fold.
- `run.mjs` gains `--serve` for iterating on the seed, the task-chat
phase, and a
keeper that holds the demo board's issue statuses steady — the demo
`process`
agents finish runs without declaring a disposition, so the stalled-work
sweep
re-blocks issues every few minutes over a capture that runs far longer.

## Reviewing

Light and dark both captured at 1440×900 @2x. The new surfaces are the
ones to
scrutinise; the rest is a like-for-like refresh.

### One leftover

Dropping `dashboard/stale-tasks-panel` leaves
`{light,dark}/dashboard/stale-tasks-panel.png`
tracked but unused — they need deleting by hand.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
Co-authored-by: Dotta <[email protected]>
Co-authored-by: ClaudeCoder <[email protected]>
2026-08-18 12:43:56 +02:00
Aron PrinsandClaude Opus 4.8 2ab76e8e4b docs: fix goals reparenting, human-invite signup, macOS install, first-company step (#80)
Addresses open documentation-feedback issues, each verified against the
`paperclipai/paperclip` source.

## Changes

- **Goals — reparenting (#13):** The goal properties panel renders the
parent goal as a read-only link (unlike issues, which have an editable
parent picker), and the goal update mutation never sends `parentId`. The
docs claimed you could "change the parent field" in the panel. Corrected
to describe the real path — `paperclipai goal update <id> --parent-id
<id|null>` / `PATCH /goals/{id}` — and removed "parent" from the list of
panel-editable fields.
- **Add a human teammate — signup (#50):** The reported "Email and
password sign up is not enabled" is thrown by Better Auth when
`emailAndPassword.disableSignUp` is set, which Paperclip wires from
`auth.disableSignUp` / `PAPERCLIP_AUTH_DISABLE_SIGN_UP`. Added a
troubleshooting callout naming the cause and how to re-enable
self-service signup.
- **Installation — macOS Apple Silicon (#74):** The Terminal install
path had no troubleshooting section. Added a note for the embedded
PostgreSQL start failure caused by missing `libzstd`/`liblz4`
compatibility symlinks, with a copy-paste fix.
- **Create your first company (#16):** Renamed the step 4 heading from
"Save and continue" to "Create the company" to match the actual **Create
Company** button.

## Verification

- `sync:lint-links` passes — 186 markdown files, no broken internal
links.
- Product-behaviour claims (#13, #50) confirmed directly in parent
source; #74 documents the reporter's symptom (doc-gap confirmed, not
independently reproduced).

Closes #13, #16, #50, #74

Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-07-30 12:48:46 +02:00
Aron PrinsandClaude Opus 4.8 8c21935aa6 Add documentation changelog page with reusable accordion (#73)
## What

Adds a **Changelog** category (Reference tier) with a **Docs** page that
tracks what changed in *these docs* — pages added, rewritten, or
expanded — per release. It's framed as a changelog for the documentation
itself, not a mirror of Paperclip's product release notes (which it
links out to).

Backfilled with the full documentation history: **10 releases** from
`v2026.513.0` (this repo's genesis) through `v2026.722.0`, reconstructed
from each release commit's own docs summary. Each release is a
collapsible accordion; the newest stays open.

## New design-system component

Introduces a reusable native `<details>`/`<summary>` **accordion** (no
JS):

- `site/styles.css` — `details.accordion` styled with existing tokens
(border/radius, parchment hover, rotating chevron, theme-aware), with an
optional `.accordion-meta` right-aligned label.
- `site/app.js` — allowlists `DETAILS`/`SUMMARY` + the `open` attribute
in the client-side markdown sanitizer so collapsible content survives
SPA rendering.

Usage:

```html
<details class="accordion" open>
<summary>Title <span class="accordion-meta">meta</span></summary>
<div class="accordion-body">

Markdown content — keep the blank lines so it parses.

</div>
</details>
```

## Files

- `docs/reference/changelog.md` (new)
- `site/content.json` — Changelog category / Docs page nav entry
- `site/styles.css`, `site/app.js` — accordion component

## Verification

- `npm run sync:lint-links` — clean, no broken internal links (links
verified against current tree; renamed/retired pages point at live
targets).
- `npm run sync:verify-nav` — passes (only orphans are the intentional
CLI redirect pages).
- `npm run docs:build` — all 10 accordions render,
`/reference/changelog/` route builds.

## Note

This is a **manual** changelog for now. A follow-up could hook a
"prepend a new accordion" step into the `/sync-docs` release phase so
future releases self-populate.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-07-23 11:47:29 +02:00
44e12ab37c Release docs for paperclip v2026.722.0 (#72)
Release docs for **paperclip v2026.722.0** (window `v2026.720.0 →
v2026.722.0`; 256 changed parent files, 60 commits, diff window clean —
0 truncated leaves).

Nothing here goes live until this PR is merged to `main`.

## Surfaces authored this run

| Surface | Docs | Parent PR |
|---|---|---|
| **Run-bound agent secret access** — `access.`-prefixed / `api`
delivery mode; `GET /api/agents/me/secrets`, `POST
/api/agents/me/secrets/:key/value` (`Cache-Control: no-store`) |
`api/secrets.md`, `api/agents.md` | #9921 |
| **Local agents run natively on Windows** (ACPX, no Bash wrapper; env
via session options; `.cmd` shim; symlink→copy on EPERM) |
`adapters/acpx-local.md` | #9980 |
| **`PAPERCLIP_*` bindings flow through**; only `PAPERCLIP_API_KEY`
rejected (override removed); `DO_NOT_TRACK` /
`PAPERCLIP_TELEMETRY_DISABLED` opt-out |
`deploy/environment-variables.md` | #9974, #9946, #9906 |
| **Safer `CODEX_HOME` sandbox sync** — explicit allowlist, not whole
home | `adapters/codex.md` | #9972 |
| **Plugin SDK** environment-sync exports + `onEnvironmentSyncIn/Out`
hooks | `reference/plugins/sdk.md` | — |
| **CLI `company export --force`** | `reference/cli/company.md` | — |
| **Connections v3 (Apps)** experimental foundation —
`remote_http`→`mcp_remote`, `connection_grants`, AppDefinition catalog |
`experimental/connections-apps.md` (new) | #9958, #9981, #9982 |

Riding along from earlier nightly drafts (part of this release): secret
folders (`administration/secret-folders.md`), searchable agent picker,
cloud-managed bootstrap gate (`api/instance-admin.md`).

## Verification

All authored claims verified against parent code at tag `v2026.722.0`
(`verify-edit`): **0 high-confidence unverified**. `docs:build`,
`sync:lint-links`, and `sync:verify-nav` all pass. Frontmatter stamped
`paperclip_version: v2026.722.0`. The 2 nav orphans (`cli/commands.md`,
`cli/control-plane-commands.md`) are the intentional redirect anchors.

### ⚠ Drift (all resolved as false positives — no action)
`sync:check-drift` flagged 4 `rest-route-missing` candidates:
- `GET /api/agents/me/secrets` and `POST
/api/agents/me/secrets/{key}/value` (in `api/agents.md` and
`api/secrets.md`).

These are the **new** routes this PR documents. The flags fire because
the drift checker searched a stale `last_seen` sha and REST-route
matching is medium-confidence (router-prefix registration hides the
literal). Both routes were verified verbatim against
`server/src/routes/secrets.ts` at tag `v2026.722.0`. No change needed.

One `verify-edit` env-var flag
(`PAPERCLIP_CLOUD_PROD_PROVIDER_RAILWAY_TOKEN`) is the release-note
**illustrative example** of a user-chosen name, framed in prose as "for
example a secret called …" — not a real product variable. No change
needed.

### ↻ Renames detected
None.

### ⚠ Reconcile
None.

## Screenshots

See `SCREENSHOTS_PENDING.md`. 13 unique captures (×2 light/dark) are
genuinely stale — mainly agent-config surfaces (`AgentConfigForm.tsx`
gained the Secret access editor) and secrets. Net-zero `+0/-0` UI
touches were filtered out. Not auto-captured — recapture via `npm run
screenshots:refresh` goes to a separate review PR. The new
`secret-folders.md` and `connections-apps.md` pages have no captures
yet.

## Post-merge (squash-only repo)
After squash-merging, run `node scripts/sync/realign-nightly.mjs
release/v2026.722.0 --push` and bump `.sync-state.json`
`base_release_tag` to `v2026.722.0`. Skipping the realign arms the
add/add-conflict trap at the next nightly run.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
2026-07-23 10:10:05 +02:00
Aron PrinsandClaude Fable 5 5fdce2b098 screenshots: pre-seed capture phase for onboarding-wizard shots (#70)
Fixes the harness limitation flagged in #68: the seeded instance always
has a company, so the create-a-company wizard was unreachable and
onboarding shots fell back to the Dashboard.

**How:** `run.mjs` gains a phase 3.5 — after health check, before
seeding — that captures targets marked `phase: "pre-seed"` while the
instance is still company-less (`/onboarding` serves the wizard there).
`capture.mjs` gains a `phase` option (`--phase`); post-seed stays the
default, so existing invocations are unchanged.

**Retargeted:** the four true wizard shots to `/onboarding` (goal-field
fills the company name and advances to the Mission step); the two budget
shots to the agent configuration form, since the wizard has no budget UI
(verified at v2026.720.0).

**Validated with real runs against the v2026.720.0 tag** — all pre-seed
captures succeed with zero step failures, light and dark visually
verified (wizard step 1 empty, filled name, Mission step). Refreshed
PNGs included.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <[email protected]>
2026-07-20 21:16:15 +02:00
Aron PrinsandClaude Fable 5 215dc2ed2d screenshots: wire routes for 20 unrouted registry entries (#69)
Backfills `route` + `dependsOn` for the 20 registry entries flagged in
#68 as never wired for automated capture (plus marks the hand-annotated
`dashboard-overview-annotated` as intentionally manual instead of
leaving its stale `_todo`).

Routes verified against the v2026.720.0 route table in `ui/src/App.tsx`;
every `dependsOn` path verified to exist at that tag. Details and
caveats (dialog-step captures, the onboarding harness limitation) in the
commit message.

No images change in this PR — next capture pass picks these up.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <[email protected]>
2026-07-20 20:49:52 +02:00
Aron PrinsandClaude Fable 5 ef28814c68 Screenshot overhaul for paperclip v2026.720.0 (#68)
Full screenshot overhaul for **paperclip v2026.720.0** — the
design-system convergence in this release (single-source tokens, retuned
theme, Card/Badge adoption, radius ladder, Lucide status glyphs)
invalidated 248 of 298 registry entries, so this recaptures everything
with a route rather than a targeted refresh.

Captured with `npm run screenshots:refresh:all` against parent tag
`v2026.720.0` (`903bd157c`), on the standard isolated seeded instance
(loopback :3197, embedded Postgres on a free port). 1440×900 @2x, light
+ dark.

## What's in here

- **246 recaptured PNGs** (123 logical shots × light + dark), all
stamped `captured_sha: 903bd157c…` in `registry.json`.
- Dimensions, theme correctness, and file sanity verified by an
automated review pass: all full-page captures 2880×1800, dark variants
genuinely dark, no blank/error/login pages, no 0-byte files. The two
intentionally small cropped stat-panel shots are correct.

## Excluded after review (kept on their old captures, still marked
stale)

Five logical captures came out showing the **wrong UI state** and were
reverted rather than shipped:

| Capture | What went wrong |
|---|---|
| `onboarding/goal-field` | Onboarding flow unreachable — seeded
instance already has a company, capture fell back to Dashboard |
| `onboarding/new-company-modal-empty` | Same Dashboard fallback |
| `onboarding/sidebar-new-company-button` | Same Dashboard fallback |
| `work-modes/work-mode-picker` | Picker overlay click timed out (8s);
shows Inbox without the picker open |
| `routines/cron-picker` | Schedule-builder click timed out; shows
routine Overview without the builder |

Harness fixes needed before these can recapture: a company-less (or
resettable) instance for the onboarding set, and longer interaction
timeouts / fixed locators for the two pickers.

## Worth a look during review

- `skills/assign-to-agent` shipped but is **partial**: the "Add to
agent" button is visible but the dropdown isn't expanded. Usable,
flagging for judgement.
- **42 registry entries (21 logical) remain uncaptured** — they have
`route: null` and a `_todo` note, i.e. never wired for automated
capture. Mostly `company/*`, `tasks/*`, `org/*`, plus two export-import
shots. Deciding whether to add routes for these is follow-up work, not
part of this PR.
- 8 PNGs on disk are pre-existing hand-made assets outside the registry
(`hermes/*`, two diagrams) — untouched, expected.

## Checklist

- [ ] Spot-check a few light/dark pairs render correctly in the docs
- [ ] Confirm the five excluded captures' old images are still
acceptable placeholders
- [ ] File follow-up for the onboarding-harness fix + the 21 unrouted
registry entries

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <[email protected]>
2026-07-20 20:42:26 +02:00
8121a9c947 Release docs for paperclip v2026.720.0 (#67)
Ships the docs for **paperclip v2026.720.0** to `docs.paperclip.ing`.

Window: `v2026.707.0...v2026.720.0` — 196 commits, 1,523 changed files,
0 truncated leaves.

Most of this release was already drafted on `nightly` over the past
cycle (Cases, Folders, Decision Training, Attention, Built-in Agents,
company skill policy, inbox agent policy, `costStatus`, the ACP engine
graduation and `acpx_local` retirement, and
`PAPERCLIP_TOOL_ACTION_SIGNING_SECRET`). This PR adds the surfaces
nightly had **not** yet covered, then stamps the release version across
everything touched this cycle.

## New pages

**`docs/reference/api/tool-gateway.md`** — the MCP Tool Gateway, the
headline experimental feature. Covers applications and connections,
catalog entries and risk levels, profiles/entries/bindings, the
tool-access policy and its decision outcomes, named MCP gateways and
their tokens, the audit feed, and the Smoke Lab. Documents the five
`tools:*` permission keys and the viewer/membership rules on routes that
don't use a permission key. Flags both experimental gates (`enableApps`,
and `enableSmokeLab` separately).

**`docs/reference/api/summary-slots.md`** — the built-in Summarizer and
summary slots. Covers slot addressing (`scopeKind` / `scopeId` /
`slotKey`), generation, revisions, and the `enableSummaries` gate.
Cross-references Built-in Agents rather than duplicating it.

## Updated

**`docs/guides/org/skills.md`** — Skill Studio (the three-pane authoring
workspace, saved inputs, test runs and their unavailability reasons, run
templates, version history), nested skill folders and the My Skills
view, importing skills straight from a project, and company skill forks.
Cross-references the existing Folders and Company Skill Policy API pages
instead of restating them.

## Release stamping

`paperclip_version: v2026.720.0` applied to all 26 pages touched this
cycle — bumped on 10 that already had frontmatter, added to 13 that had
none (including the API pages nightly authored, which were intentionally
versionless until they merged to `main`).

## ↻ Renames detected

`detect-renames.mjs` reports no directory renames. It flags one
`removed_dirs_no_match`:

- `packages/adapters/acpx-local` — **already reconciled on nightly.**
The adapter was retired upstream (ACP became a capability of each
harness adapter rather than a standalone adapter).
`docs/reference/adapters/acpx-local.md` is now a retired stub that
points at Claude Code / Codex / Gemini CLI and documents the automatic
migration. No action needed.

## Screenshots — full overhaul recommended

**248 of 298** registry entries are stale. This release landed a
design-system convergence (single-source design tokens, retuned theme,
broad Card/Badge adoption, a multiplicative radius ladder, unified list
surfaces, Lucide task-status glyphs), so nearly every captured surface
moved. This is an overhaul cycle, not a targeted refresh:

```sh
npm run screenshots:refresh:all
```

Full per-entry breakdown in `SCREENSHOTS_PENDING.md`. Captures go to
their own PR for review — nothing is auto-pushed.

## Verification

- **Drift:** clean — 0 records against `903bd15` (8 parent paths, 57 CLI
commands, 66 env vars, 389 REST routes, 18 permission keys, 4 roles).
- **Claim verification:** `verify-edit.mjs` against `v2026.720.0` — **0
unverified, 0 suspicious** across all three authored files.
- **Reconciliation:** no disappeared manifest entries.
- **`npm run docs:build`:** passes — 169 markdown files, sitemap and
robots generated.
- **`npm run sync:check`:** links clean (172 files), nav clean,
screenshots indexed, drift clean.
- **Nav orphans:** `docs/reference/cli/commands.md` and
`docs/reference/cli/control-plane-commands.md` — intentional redirect
anchors, expected.

`.sync-state.json` bumped to `base_release_tag: v2026.720.0` /
`base_release_sha: 903bd157…`, which also repoints the drift checker's
pinned ref (the previous `f12bb27…` no longer resolves upstream).

No open `nightly-draft/*` PRs to fold in.

## Checklist

- [ ] Tool Gateway page reads correctly for an operator enabling
`enableApps` for the first time
- [ ] Summary Slots experimental gating is accurate
- [ ] Skill Studio guide matches what you see in the running UI
- [ ] Decide whether to run the screenshot overhaul before or after
merging this
- [ ] **After squash-merging: run `node scripts/sync/realign-nightly.mjs
release/v2026.720.0 --push` before the next nightly sync.** The squash
severs `main`↔`nightly` ancestry; the realign (shipped in this PR)
prevents add/add conflicts at the next nightly run.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
Co-authored-by: DevRel Gemini <[email protected]>
Co-authored-by: Paperclip <[email protected]>
2026-07-20 19:59:18 +02:00
Aron PrinsandClaude Opus 4.8 55de2cbb81 fix(sync): pin drift check to an immutable SHA, key cache by SHA (#62)
Ports the drift-checker fix to `main` (same change already merged to
`nightly` in #61). `check-drift.mjs` is byte-identical across branches,
so this cherry-pick applies cleanly.

## Problem

The drift checker printed the parent's **live** SHA in its header but
keyed its file cache by the moving name `drift-master` with no
invalidation — reusing days-old file contents while claiming to check
today's commit, silently hiding real drift.

## Fix

- Resolve the ref to a full commit SHA before any reads; cache key =
`drift-<sha>`, never `drift-master`.
- Fail closed if the ref can't be resolved.
- Mode-aware ref from `.sync-state.json` (release → `base_release_sha`,
nightly → `last_seen_parent_sha`) before falling back to the default
branch. `main` is release-mode, so its checks now pin to the release SHA
instead of moving `master`.
- Testable cache path (`PAPERCLIP_SYNC_CACHE_DIR` + fixture SHA stub);
+2 regression tests. `npm run sync:test`: 37 passed, 0 failed.

## Triage note

Running the fixed checker on `main`'s released docs against the release
tag `v2026.707.0` returns **0 drift** — released docs are correct about
the shipped product; this is a tooling fix only, no doc content changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-07-15 13:36:41 +02:00
Aron Prins 7e25158fca Release docs for paperclip v2026.707.0 (#49)
Promotes v2026.707.0 docs from nightly: Custom sandbox images + Ramp skill (new), Work Timeline (#48) and Secret scopes (#47) content, screenshot capture targets, environments nav reconcile, sync-state bump to v2026.707.0, and accuracy fixes from adversarial verification. 0 drift.
2026-07-08 11:11:32 +02:00
Aron PrinsandClaude Opus 4.8 1bba6f6601 docs(access): document members, roles, permissions, invites & offboarding (#38)
Back-fills documentation for the human multi-user collaboration surface
(company members, invites, roles, permissions, offboarding). These
features are already shipped and live; this fills doc gaps and fixes one
live permission-key drift. Branched off `main` (not `nightly`) because
it's editorial back-fill of released features, intended to ship
independently of the nightly sync cadence.

## Tier 1 — correctness
- **Fix live permission drift** in `administration/company.md`: the
grant list and Owner/Admin role descriptions were missing
`environments:manage` and `tasks:manage_active_checkouts` (both present
in `packages/shared/src/constants.ts` `PERMISSION_KEYS`;
`environments:manage` is an Owner/Admin default in
`server/src/services/company-member-roles.ts`).
- **New** `administration/roles-and-permissions.md`: canonical 8-key
catalog (what each gates), role→default-grant matrix, additive
precedence rule, `instance_admin` layer, and current limitations.
- `maintenance/follow-ups.md`: note to teach the drift checker the
permission catalog so this can't silently drift again. (Sync tooling
itself untouched.)

## Tier 2 — how-tos
- `how-to/add-a-human-teammate.md` — invite → join request → approve →
set role/grants (UI + CLI).
- `how-to/offboard-a-member.md` — suspend vs archive, work reassignment,
membership-status-gates-access, instance-level cleanup.
- `how-to/enable-multi-user-login.md` — `local_trusted → authenticated`,
board-claim handoff, then invite people.

## Tier 3 — concept
- `guides/org/members-and-access.md` — shared human+agent principal
model, roles vs grants, human roles ≠ agent org chart, instance admin,
the member profile page, and the "left a project ≠ lost access"
clarification.

## Verification
- All 5 new pages registered in `site/content.json` (valid JSON, +5
pages).
- `sync:lint-links` and `sync:verify-nav` clean for these changes. The
single link the linter reports pre-exists on `main` in a skills file
untouched here; the 2 nav orphans are the intentional CLI redirect
anchors.
- All content verified against `paperclipai/paperclip@master` source
(permission keys, role defaults, CLI syntax, deployment modes).

## Follow-up after merge
Back-merge `main → nightly` so the next release merge stays clean.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-07-01 18:11:25 +02:00
Aron Prins a6b1fc3d45 Merge pull request #36 from paperclipai/release/v2026.626.0
Release docs for paperclip v2026.626.0: nightly drafts + release authoring,
98 refreshed screenshots + screenshot-pipeline isolation fixes, verify-edit
hermes path resolution fix, and New Issue searchable reuse-workspace docs.
2026-06-27 12:04:11 +02:00
Aron PrinsandClaude Opus 4.8 1d5f257f2f docs(issues): document searchable reuse-workspace selector in New Issue dialog
Author parent commit 50ae8fc6 (#8597): the New Issue dialog's reuse-existing
workspace mode now uses a searchable selector that ranks visible workspace-name
matches ahead of hidden path text. Add a "Choose where the work runs" step to the
Creating a New Issue flow covering the workspace mode picker and the searchable
reuse dropdown (search by name, branch, or folder), with a cross-link to the
Execution workspaces guide. Mark the item authored in PENDING.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-27 11:47:27 +02:00
Aron PrinsandClaude Opus 4.8 e282e1a881 docs(pending): mark screenshots + plugin target done; flag snapshot as stale
Hand-edit (out of band) of the nightly sync state file: all 98 screenshots and
the `plugin target` CLI command are now authored; the cumulative window and
quarantine math predate the v2026.626.0 release and are stale until next sync.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-27 11:44:12 +02:00
Aron PrinsandClaude Opus 4.8 ae046f058b docs(screenshots): refresh all 98 stale shots + harden pipeline isolation
Recapture every screenshot flagged in SCREENSHOTS_PENDING.md (98 entries; 233
PNGs updated across light/dark) against parent `master`, and stamp registry.json
with the new captured_sha. Mark SCREENSHOTS_PENDING.md as caught up.

Also fix two isolation gaps that made `screenshots:refresh` unusable while a real
local Paperclip is running:

- Free embedded-Postgres port: onboard hard-codes port 54329 (no env/flag
  override; the port comes only from config.json), which collides with a real
  local instance. run.mjs now generates the config in external-DB mode (keeping
  the scratch data dir pristine) and rewrites database.embeddedPostgresPort to a
  scanned free port before boot.
- Parent .env neutralized: the server loads PARENT_REPO/.env from its cwd via
  dotenv (override: false), which leaked DATABASE_URL (real external DB on 5432)
  and SERVE_UI=false into the "isolated" instance. instanceEnv() now pins
  DATABASE_URL="", DATABASE_MIGRATION_URL="" and SERVE_UI="true" so these win.

seed-execution-workspace.mjs now throws instead of falling back to 54329, so the
direct-DB seed can never connect to a real database.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-27 11:36:27 +02:00
Aron PrinsandClaude Sonnet 4.6 e46c6631e0 fix(sync): teach verify-edit to resolve hermes-local/hermes-gateway → packages/adapters/hermes
The hermes adapter package was consolidated under packages/adapters/hermes/
in v2026.626.0, but the doc files keep the hermes-local.md and
hermes-gateway.md names. verify-edit.mjs derives the source path from the
doc basename, so it was searching packages/adapters/hermes-local and
packages/adapters/hermes-gateway (non-existent) and flagging all claims as
unverified — false positives.

Fix: add an adapter_doc_sources map to anchor-map.json that overrides the
source-path lookup for these two docs, and update fetchAdapterFiles() to
read and apply that map before falling back to the default
packages/adapters/${adapter} pattern.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-27 10:01:22 +02:00
Aron PrinsandClaude Sonnet 4.6 04a7b32f47 fix: correct two verification errors from release review
- hermes-gateway.md: rename dangerouslyAllowRemoteHttp →
  dangerouslyAllowInsecureRemoteHttp (actual field name in
  packages/adapters/hermes/src/gateway/server/transport-security.ts)
- reference/skills.md: correct Agent→Skills tab section labels from
  "Company skills"/"Unmanaged" to the actual rendered headings:
  "Installed skills", "Other skills", and
  "({N}) User-installed skills, not managed by Paperclip"

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-27 10:00:44 +02:00
Aron Prins 79411f5c3e Merge branch 'nightly' into release/v2026.626.0 2026-06-27 09:27:50 +02:00
Aron PrinsandClaude Sonnet 4.6 57cd932896 Release docs for paperclip v2026.626.0
Covers Hermes built-in adapters (hermes_local + hermes_gateway), ask work
mode, task watchdogs, plugin target command, routine date variables, and
workspace file downloads.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-06-27 09:23:57 +02:00
Aron PrinsandClaude Opus 4.8 0decd79019 nightly: sync bookkeeping, no doc changes (paperclip 841742fc)
Cumulative window v2026.618.0 → master 841742fc (9 new commits since
51ffbb38). 8 of 9 are <24h old and held by the 24h quarantine; the one
eligible commit (50ae8fc6, reusable workspace selector search) is a UX
refinement with no documented surface and no screenshot dependency, so
nothing was authored. Drift: 0. Reconcile: 0.

Regenerated PENDING.md (quarantined queue for next run) and
SCREENSHOTS_PENDING.md (98 stale across cumulative window). State:
last_seen_parent_sha → 841742fc; last_applied_manifest_hash unchanged so
the quarantined commits remain pending next run.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-25 22:29:20 +02:00
Aron PrinsandClaude Opus 4.8 e6e9f629ca nightly: external object references, streamlined sidebar default, Daytona leases, routine annotations, plugin SDK provider (paperclip 51ffbb38)
Authored from parent master (cumulative base v2026.618.0), delta since last run
9ac24317 → 51ffbb38. All five edits verify clean (0 unverified, 0 suspicious).

- docs/guides/day-to-day/issues.md: External object references — GitHub PR/issue
  status-aware pills across issue surfaces, External object status filters,
  inbox/sidebar severity badges (PR #8512).
- docs/administration/settings.md: Streamlined Left Navigation Bar is now
  default-on; classic sidebar is the opt-out (PR #8496).
- docs/reference/adapters/sandbox-providers.md: Daytona reusable leases (opt-in),
  quota-safe auto-archive defaults, image-only resource overrides (#8513/#8561/#8564).
- docs/guides/projects-workflow/routines.md: routine description annotations —
  comment on / inline-edit instructions like an issue document (PR #8229).
- docs/reference/plugins/sdk.md: plugin SDK external-object reference provider
  surface — detect→resolve→refresh lifecycle, declaration + protocol types (PR #8512).

PENDING.md / SCREENSHOTS_PENDING.md regenerated; .sync-state.json advanced to
51ffbb38. 60 screenshots flagged stale (UI changes), surfaced for human recapture.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-24 16:55:14 +02:00
Aron Prins 4ba43e3bd9 Merge remote-tracking branch 'origin/main' into nightly 2026-06-24 16:40:00 +02:00
Aron PrinsandClaude Opus 4.8 e2a0882bfe nightly: update sync state after round-2 review items
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-22 11:42:13 +02:00
Aron PrinsandClaude Opus 4.8 2ff5539127 nightly: skills "required" retirement, paperclip-dev cleanup, task watchdogs guide (paperclip d1e6662e)
Round 2 — worked the human-review items, verified each against parent source:

- Skills: the per-agent `required` attribute is retired upstream
  (AgentSkillEntry dropped required/requiredReason; AgentSkillOrigin dropped
  paperclip_required; resolveDesiredSkillAssignment now persists exactly the
  desired set with no bundled union). Fixed reference/skills.md and
  reference/cli/skills.md: removed "non-required" qualifiers, the retired
  `required` frontmatter row, the wrong "forced into every agent" claim, and
  corrected the snapshot example + the UI grouping (Company skills + Unmanaged,
  no "Required" group).
- paperclip-dev skill removed upstream: dropped from the bundled list and
  swapped stale source/key examples to paperclip-create-agent.
- Experimental features: strengthened the settings.md caution to match the new
  in-app "no compatibility guarantees" warning.
- Task watchdogs: new operator guide page (guides/projects-workflow/
  task-watchdogs.md) + nav entry. API/config/behaviour verified against
  routes/issues.ts, schema/issue_watchdogs.ts, and doc/TASK-WATCHDOG.md intent.

Reviewed, no change needed: instance-scoped environments (routes still match
docs), skills store (UI reframe; guide already accurate), plugin-sdk lease
params (fields not documented).

verify-edit all clean; build/links/nav/drift all green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-22 11:42:03 +02:00
Aron PrinsandClaude Opus 4.8 d852ec21f4 nightly: update sync state (manifest hash, parent HEAD 9ac2431)
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-22 09:25:11 +02:00
Aron PrinsandClaude Opus 4.8 46965fc667 nightly: codex-local auth + monitor, gemini exec notes, auth --no-browser (paperclip d1e6662e)
Cumulative nightly sync from parent v2026.618.0..d1e6662e (HEAD 9ac2431
quarantined, <24h).

Applied (PR-tier, verified against parent):
- codex-local: outputInactivityTimeoutMs config field + new
  "Authentication And Per-Agent Homes" section (host login inheritance,
  per-agent home seeding, fail-fast on no creds).
- gemini-local: execution note now states --prompt (not stdin) and the
  headless-safe terminal/browser env for unattended runs.
- CLI auth login: new --no-browser flag.

Verify-edit: codex-local 38/40, gemini-local 27/28, authentication 37/37;
the 2 unverified are pre-existing example placeholders, not this run.

PENDING.md / SCREENSHOTS_PENDING.md regenerated. 7 surfaces left for human
review (skills "required" retirement, paperclip-dev removal, instance-scoped
environments, task watchdogs, experimental features, skills store, plugin-sdk
lease params). 80/276 screenshots stale.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-22 09:24:58 +02:00
Aron Prins 23e4457432 Merge pull request #30 from paperclipai/release/v2026.618.0
Release docs for paperclip v2026.618.0
2026-06-19 10:27:27 +02:00
Aron PrinsandClaude Opus 4.8 b6b254cf24 docs: extend merged Novita AI section with full configSchema table
Keep PR #29's reviewed Novita AI section (header, `provider: "novita"`
convention, install/secrets framing, timeout min-validation) and extend it
with the fuller field reference from the release draft: install-by-package-name
steps plus a complete configSchema table covering every field — including
`secure` and the explicit defaults (timeoutMs 300000, requestTimeoutMs 30000)
that the prose-only version omitted.

All fields/defaults/validations verified against parent v2026.618.0
(packages/plugins/sandbox-providers/novita/src/{manifest,plugin}.ts):
defaults 300_000 / 30_000, validations >= 10_000 / >= 1_000, API key required.
verify-edit: 6/6 claims verified. docs:build + lint-links clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-19 10:25:33 +02:00
Aron Prins e2eddfe641 Merge remote-tracking branch 'origin/main' into release/v2026.618.0
# Conflicts:
#	docs/reference/adapters/sandbox-providers.md
2026-06-19 10:20:43 +02:00
Aron PrinsandClaude Opus 4.8 4ed3a26ff8 sync: bring verify-edit in line + scan adapter package sources
Two follow-ups to the server/src env-var scan widening:

1. verify-edit.mjs had its own copy of shouldFetchEnvSource with the same
   narrow server allowlist — apply the identical server/src/**/*.ts widening
   so the verify phase stops emitting unverified env-var false positives.

2. Both scripts now also scan all non-test packages/adapters/<name>/src/**/*.ts.
   Adapter packages read env vars directly in their server/index modules —
   e.g. SANDBOX_INSTALL_COMMAND (packages/adapters/{pi,claude,gemini,cursor}-local/src/...)
   and per-runtime API-key fallbacks — which the old allowlist never fetched.

Verified against parent v2026.618.0:
- check-drift: 0 drift (65 env vars checked).
- verify-edit docs/reference/adapters/sandbox-providers.md: 6/6 claims verified
  (SANDBOX_INSTALL_COMMAND, previously unverified, now resolves).
- sync:test 33/33.

Selection grows to ~452 files, still well under the 700 cap.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-19 09:48:43 +02:00
Aron PrinsandClaude Opus 4.8 c8e3aaf1f1 sync: widen drift checker env-var scan to all of server/src
The env-var drift checker only fetched a narrow allowlist of server files
(config.ts, a few auth/service files), so env vars read elsewhere in
server/src showed up as env-var-missing false positives every run.

Verified against parent v2026.618.0 that the 5 recurring false positives are
real, read env vars the old scan never looked at:
- TRUST_PROXY                  server/src/app.ts:167 (parseTrustProxyEnv(process.env.TRUST_PROXY))
- OTEL_EXPORTER_OTLP_ENDPOINT  server/src/instrumentation.ts:29
- OTEL_EXPORTER_OTLP_PROTOCOL  server/src/instrumentation.ts:69
- OTEL_SERVICE_NAME            server/src/instrumentation.ts:144
- OTEL_SERVICE_VERSION         server/src/instrumentation.ts:145

Fix: replace the three narrow server/src rules in shouldFetchEnvSource with a
single rule covering every non-test server/src/**/*.ts file (tests already
excluded above). Selection grows 130 → 326 files, well under the 700 cap.

Result: check-drift against both v2026.618.0 and master now reports 0 drift
(was 5 env-var-missing), with identical coverage (65 env vars, 235 routes,
57 CLI commands, 7 paths). sync:test 33/33 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-19 09:39:24 +02:00
Aron PrinsandClaude Opus 4.8 60db152a9d Fix skill-list drift in skills.md (skills/ vs .agents/skills/)
The "Bundled with the Paperclip server (skills/)" list claimed three skills
that are NOT server-bundled — they live under .agents/skills/ (repo-development
skills) at v2026.618.0 and also at v2026.609.0, so this is pre-existing drift.

Verified against parent v2026.618.0:
- server-bundled skills/ contains exactly 6 dirs (all force-imported + required
  by ensureBundledSkills): paperclip, paperclip-board, paperclip-create-agent,
  paperclip-dev, paperclip-converting-plans-to-tasks, para-memory-files.
- paperclip-create-plugin, diagnose-why-work-stopped, terminal-bench-loop are
  under .agents/skills/, not skills/.

Fixes:
- Remove the 3 non-bundled skills from the bundled list (now matches skills/ 1:1).
- Drop the brittle "five paperclip-*" count (it also wrongly excluded the bundled
  para-memory-files); phrase count-free.
- Repair the paperclip-create-plugin link: parent has no `main` branch and the
  skill moved, so blob/main/skills/... (404) -> blob/master/.agents/skills/...

verify-edit: 7/7 claims verified. sync:check clean (no broken internal links).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-19 09:16:58 +02:00
Aron PrinsandClaude Opus 4.8 2368a2be5f Release docs for paperclip v2026.618.0
Promote nightly drafts (v2026.609.0 → v2026.618.0) to main and fill coverage gaps.

New surfaces authored:
- Novita Agent Sandbox provider (driver: novita) — sandbox-providers.md
- paperclip-board bundled skill — skills.md (skills/ went 5 → 6; "four" → "five")

Promoted nightly drafts (all ⊆ v2026.618.0, no post-tag leakage):
- adapters: codex/gemini/opencode/pi/openclaw-gateway, sandbox-providers (Kubernetes)
- api/agents, plugins/sdk, environment-variables (TRUST_PROXY/OTEL)
- day-to-day guides: artifacts, issues, routines

Stamped paperclip_version: v2026.618.0 on all 13 touched pages.
Regenerated SCREENSHOTS_PENDING.md (90/276 stale — flag only, separate capture PR).

Deferred: experimental conference-room board-chat (flag-gated).
sync:check clean (no broken links); drift = 5 known server-env false positives.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-19 00:48:23 +02:00
Aron PrinsandClaude Opus 4.8 1deeca2f7a nightly: advance sync state to paperclip 1b89a8e (no doc-relevant changes)
Cumulative window v2026.609.0 → 1b89a8e. The only commit added since the
last run (412a04c → 1b89a8e) is a Dockerfile fix removing VOLUME
["/paperclip"] for Railway compatibility — untracked by any watcher and
with no doc impact (the fly.toml volume still mounts at /paperclip).

Drift: 5 records (TRUST_PROXY, OTEL_*) all false positives — real server
env vars the drift checker can't see because it doesn't scan server/src
process.env reads. Confirmed present upstream; documented in the prior run.

No edits applied. Refreshed PENDING.md / SCREENSHOTS_PENDING.md headers
and bumped last_seen_parent_sha + last_run_outcome=no-changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-17 11:10:20 +02:00
Aron PrinsandClaude Opus 4.8 b3b690b362 nightly: advance sync state to paperclip 412a04c
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-15 11:27:49 +02:00
Aron PrinsandClaude Opus 4.8 acfebdf637 nightly: K8s sandbox provider, adapter gateway routing, TRUST_PROXY/OTEL, agent read-config access (paperclip 412a04c)
Cumulative window v2026.609.0 -> master HEAD 412a04c (59 commits). Applied:
- environment-variables.md: TRUST_PROXY (reverse-proxy trust), OpenTelemetry
  opt-in tracing (OTEL_*), and adapter provider-override env vars.
- api/agents.md: read-only config/skill/config-revision endpoints no longer
  require agents:create for board members (agents still gated).
- adapters/sandbox-providers.md: new Kubernetes sandbox provider section.
- adapters/{codex,pi,opencode}-local.md: PAPERCLIP_*_PROVIDERS gateway routing
  (+ codex GPT-5.5 / omit-default-model, opencode small-model).
- adapters/gemini-local.md: headless auth pre-selection + token-overflow
  fresh-session retry.
- adapters/openclaw-gateway.md: role/scopes/paperclipApiUrl/workspaceRuntime.
- plugins/sdk.md: optional companyId tenant scoping on metrics.write + log.

Deferred (experimental/half-built) to PENDING.md: Conference Room Chat,
Skills Store, dark mode, onboarding NUX, activity feed, issues list filters.
All edits verified against parent code (Phase 5.5).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-15 11:27:49 +02:00
Aron PrinsandClaude Opus 4.8 c263060a75 nightly: advance sync state to paperclip 69a368e
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-11 12:31:45 +02:00
Aron PrinsandClaude Opus 4.8 2d4df5202c nightly: file viewer, routines layout, interrupt handoffs (paperclip 69a368e)
- Document the in-app workspace file viewer and inline artifact file links (#7681)
- Refresh the Routines detail walkthrough: sub-sidebar layout, plain-English
  cron, trigger cards, run-history filters and save bar (#7848, #7858)
- Add interrupt / handoff / scoped-wake semantics to the issues guide (#7855)

Quarantined (held <24h): Kubernetes sandbox provider, env-driven gateway
routing, GPT-5.5 Codex model — see PENDING.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-11 12:31:33 +02:00
Aron Prins dd1282394c Merge branch 'main' into nightly 2026-06-11 12:21:31 +02:00
Aron Prins 471967eca1 docs(screenshots): remove orphaned execution-workspaces-list captures 2026-06-11 12:21:29 +02:00
Aron Prins 358bd63581 Merge branch 'main' into nightly 2026-06-11 12:17:49 +02:00
Aron Prins 223d48e2a7 Merge pull request #27 from paperclipai/fix/workspaces-docs-and-screenshots
docs(workspaces): fix Workspaces guide + regenerate detail screenshots
2026-06-11 12:17:23 +02:00
Aron PrinsandClaude Opus 4.8 9123a0de85 docs(workspaces): tighten accuracy after codebase re-verification
- The per-project Workspaces tab is hidden until the project has workspace
  activity (showWorkspacesTab requires summaries > 0); say so instead of
  'shows up on each project', and drop the never-shown per-project empty
  string. The reliable empty state is the company-wide 'No workspace
  activity yet.'
- Correct the surfacing rule: a primary workspace surfaces because it's the
  primary (not 'has a working directory and runtime config'); non-primary
  project workspaces need runtime services/config.
- Replace the stale 'Each entry shows' list (old table columns: mode /
  provider type / opened) with the actual ProjectWorkspaceSummaryCard fields
  (kind, name, branch, path, services, status, linked tasks, updated).
- Note plugin tabs appear alongside the base tabs (e.g. workspace-diff's
  Changes tab), not strictly after them.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-11 12:16:49 +02:00
Aron PrinsandClaude Opus 4.8 c8bc5055c8 docs(workspaces): fix workspaces guide + regenerate detail screenshots
A user reported the Workspaces screen looked empty with "no options," and
that all but one of the workspace screenshots were blank/identical.

Both were real problems:

Docs (docs/guides/projects-workflow/workspaces.md)
- Add a "Before you start" section: workspaces are gated behind the
  experimental "Enable Isolated Workspaces" flag, the screen is monitor-only
  (no manual create), and it stays empty until an agent runs an isolated
  task — with the actual empty-state strings ("No workspace activity yet." /
  "No non-default workspace activity yet.").
- Correct the detail screen: it now has Tasks / Services / Configuration /
  Runtime logs / Routines tabs (+ plugin tabs), not "three tabs." Rename the
  Issues tab to Tasks (its real label) and add a Services tab section. The
  former "Workspace commands panel above the tabs" is now the Services tab
  plus header quick controls.
- Clarify the company-wide Workspaces screen vs. the per-project Workspaces
  tab and the surfacing rules. Fix the misleading "multiple isolated
  workspaces" caption.

Screenshots
- Root cause: the seed only created a *project* workspace and pointed the
  execution-workspace detail routes at its id, so those pages were captured
  mid "Loading workspace…". Execution workspaces have no REST create endpoint
  (they're provisioned by a real heartbeat), so seed-execution-workspace.mjs
  now inserts a realistic one directly into the instance's embedded Postgres:
  an isolated git-worktree workspace with runtime config, a running service,
  provision/start/failed-job operation logs, and linked tasks.
- routes.mjs: add the {executionWorkspaceId} token, repoint the detail routes
  to it, add a Services tab target, and drop the duplicate
  org/execution-workspaces-list target (same URL as workspaces/list).
- Recaptured workspaces/{list,configuration,services,runtime-logs,issues} in
  light + dark; all now render real content.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-11 12:03:39 +02:00
Aron PrinsandClaude Opus 4.8 8730be0ad0 nightly: reset to post-release baseline (base v2026.609.0)
main shipped v2026.609.0 (PR #25). Advance nightly's cumulative-diff base
to v2026.609.0, switch branch_mode back to nightly, clear the applied
manifest hash, and reset PENDING.md so the next nightly run starts from a
clean v2026.609.0 baseline.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-10 12:23:54 +02:00
Aron Prins 6791a41a3a Merge pull request #25 from paperclipai/release/v2026.609.0
Release docs for paperclip v2026.609.0
2026-06-10 12:22:24 +02:00
Aron PrinsandClaude Opus 4.8 b243dfe70d Release docs for paperclip v2026.609.0
Publish accumulated nightly drafts to main and document the new surfaces
shipped between v2026.529.0 and v2026.609.0 (130 parent commits).

New pages (gaps not covered by nightly drafts):
- docs/reference/cli/token.md — `token agent` / `token board` API-key commands
- docs/reference/cli/connect.md — interactive `connect` setup wizard
- docs/reference/api/teams-catalog.md — teams catalog REST API

Also:
- Stamp paperclip_version: v2026.609.0 on 49 release doc pages
- Register the 3 new pages in site/content.json nav
- Bump .sync-state.json base_release_tag to v2026.609.0

Verification: 49 pages checked against v2026.609.0; 11 verifier flags,
all confirmed false-positives (flagged flags/env-vars exist in parent).
Drift: 0. Reconciliation: 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-10 12:08:31 +02:00
Aron Prins 0d50f1424e Merge pull request #24 from paperclipai/nightly-draft/76c88e5-adapters-docker
nightly: Gemini Docker bundling + external adapter overrides (paperclip 76c88e5)
2026-06-09 13:30:55 +02:00
Aron PrinsandClaude Opus 4.8 e1568186d9 nightly: update sync state (parent 0a2230b)
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-09 12:00:29 +02:00
Aron PrinsandClaude Opus 4.8 a665c76e99 nightly: Gemini Docker bundling + external adapter overrides (paperclip 76c88e5)
- docker.md / gemini-local.md: Gemini CLI now bundled in the official
  image (GEMINI_SANDBOX=false); backfill opencode_local in bundled list
  (paperclip #7693)
- external-adapters.md: external adapters can override built-in types;
  document override + fallback lifecycle, correct stale 'cannot be
  overwritten' note (paperclip #7394)
- regenerate PENDING.md / SCREENSHOTS_PENDING.md (18 settings/adapter
  screenshots stale after instance-settings IA move, paperclip #7680)

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-09 12:00:29 +02:00
Aron PrinsandClaude Opus 4.8 cec1fda2d0 docs(cli): document company current command
`company current` exists in the CLI source
(cli/src/commands/client/company.ts) but was missing from the company
reference page. Add it to the Read Commands code block and table with a
note on how it resolves the scoped company (--company-id, context,
PAPERCLIP_COMPANY_ID, or agent credential) and that it returns the same
full record as `company get <companyId>`.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-09 11:37:49 +02:00
Aron Prins 218066834c Merge pull request #23 from paperclipai/nightly-draft/a800140-catalog-artifacts-trust
nightly: Teams Catalog, Company Artifacts, low-trust review presets (paperclip a800140)
2026-06-07 13:31:14 +02:00
Aron PrinsandClaude Opus 4.8 3b58fb017c nightly: Teams Catalog, Company Artifacts, low-trust review presets (paperclip a800140)
Three settled surfaces aged past the 24h quarantine since the last run:

- Teams Catalog (#7550): new `teams` CLI page + Team Catalog guide for the
  installable bundled/optional starter teams.
- Company Artifacts (#7621): new Artifacts guide + `GET /api/companies/{id}/artifacts`
  API section under Companies.
- Low-trust review containment / trust presets (#7530): new Administration page
  covering the `standard` / `low_trust_review` presets and quarantine-then-promote
  review flow.

Nav merged in site/content.json. PENDING.md and SCREENSHOTS_PENDING.md regenerated
(40 screenshots stale in the settled window). Phase 5.5 verification clean; drift clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-07 13:30:21 +02:00
Aron Prins 2609a47e80 Merge pull request #22 from paperclipai/nightly-draft/e78c064-catalog-routine-archive
nightly: referenced catalog skills (last30days), routine pause-suppression, company archive cascade
2026-06-06 16:53:46 +02:00
Aron PrinsandClaude Opus 4.8 44d4c5d604 nightly: referenced catalog skills (last30days), routine pause-suppression, company archive cascade
Cumulative window v2026.529.0 → e78c064 (24h-quarantined nightly cutoff).
Three user-visible surfaces newly documented this run:

- skills: app-shipped catalog now supports *referenced* entries fetched from
  an external GitHub repo pinned to a commit (CatalogSkill.source). First one
  is the research-category last30days skill. Documented in the Skills
  reference and the org Skills guide.
- routines: scheduled ticks are suppressed (recorded as skipped, no backfill)
  while the routine's project is paused.
- companies: archiving runs a cascade that pauses active agents
  (pauseReason company_archived) and cancels queued wake-ups.

All claims verified against parent code (Phase 5.5 clean). Build + link/nav
checks pass; no drift. Teams Catalog, company-artifacts page, and low-trust
review containment are quarantined (<24h) and deferred to the next run.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-06 15:56:57 +02:00
Aron Prins f78e67f361 Merge pull request #21 from paperclipai/nightly-draft/03e1e3ab-cli-handbook
nightly: full CLI reference handbook + wireframe skill + OpenAPI endpoint
2026-06-04 21:39:58 +02:00
Aron PrinsandClaude Opus 4.8 70ed497e12 nightly: full CLI reference handbook + wireframe skill + OpenAPI endpoint
CLI API-parity coverage (paperclip #6626, parent 03e1e3ab) cleared 24h
quarantine and is now eligible. Adopt the comprehensive per-command CLI
reference under Reference → CLI, replacing the single-page commands.md
monolith. Guide/runbook track deferred to a later expansion.

- Reference → CLI rebuilt to 28 per-command pages (overview, installation,
  common-options, output-and-scripting, setup, dev-environments,
  authentication, company, project, goal, issue, agent, prompt, run,
  routine, adapter, approval, activity, dashboard, cost, workspace, access,
  skills, secrets, cloud, plugin, asset, feedback).
- Retire commands.md + control-plane-commands.md → "moved" tombstones plus
  route redirects in site/redirects.json. Repoint inbound links
  (reference/skills.md, how-to/sync-to-cloud-upstream.md).
- Rewrite deferred-guide links to existing equivalents; smooth an
  installation.md example that tripped a drift false-positive.
- Document the bundled `wireframe` catalog skill (reference/skills.md,
  guides/org/skills.md).
- Add the GET /api/openapi.json endpoint to the API overview
  (server/src/routes/openapi.ts).

Verified: docs:build OK, sync:check OK (links clean, drift 0, screenshots
indexed; 2 intended tombstone orphans). Regenerated PENDING.md +
SCREENSHOTS_PENDING.md; updated .sync-state.json.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 21:26:13 +02:00
Aron Prins d9d749d2a2 Merge pull request #20 from paperclipai/nightly-draft/edeab22c-issue-artifacts
nightly: issue artifacts — output playback, attachment streaming, skill upload
2026-06-03 10:46:40 +02:00
Aron PrinsandClaude Opus 4.8 1a28b59fbf anchor-map: add skills-catalog watcher
Closes the gap this run surfaced: packages/skills-catalog/** was unwatched, so
new bundled catalog skills (e.g. the wireframe product skill) weren't auto-detected.

Watches catalog/**/SKILL.md + generated/catalog.json, routes to docs/reference/skills.md
and docs/guides/org/skills.md (PR tier), distinct from the agent-skills watcher which
covers the server-forced bundled skills under skills/**.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 10:42:23 +02:00
Aron PrinsandClaude Opus 4.8 4a7c4e64aa sync-state: nightly run through edeab22c (issue artifacts)
base_release_tag unchanged (nightly invariant). last_seen_parent_sha = master HEAD
70b1a91 (informational); applied window cutoff edeab22c after 24h quarantine.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 10:04:02 +02:00
Aron PrinsandClaude Opus 4.8 5f08200d05 nightly: issue artifacts — output playback, attachment streaming, skill upload
Cumulative window v2026.529.0 → parent master edeab22c (24h quarantine).
One feature cluster: agent-produced issue artifacts (video/file deliverables)
that reviewers — including cloud reviewers without workspace access — can view
and play back on the board.

- docs/reference/api/issues.md — attachment openPath/downloadPath, ?download=1
  disposition, HTTP Range (206) streaming, video/zip allowed types + inference.
- docs/reference/skills.md — bundled paperclip skill artifact-upload helper.
- docs/guides/day-to-day/issues.md — Output section + inline video / open-vs-download.

All 3 PR-tier edits verified against parent (verify-edit: 39/39 on api/issues,
0 unverified across all). docs:build + sync:check green. Drift: none.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 10:03:49 +02:00
Aron PrinsandClaude Opus 4.8 9e7a098e6c sync-state: bump base release to v2026.529.0 after release merge
Released v2026.529.0 docs to main (PR #19). Advance the cumulative-diff
base so the next nightly run diffs from this release, not v2026.525.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 19:28:03 +02:00
Aron Prins 7e14aeed6d Merge pull request #19 from paperclipai/release/v2026.529.0
Release docs for paperclip v2026.529.0
2026-05-30 19:27:21 +02:00
Aron PrinsandClaude Opus 4.8 96b0ba8a53 Refresh screenshots for v2026.529.0 and fix workspace env precedence
Recapture the 82 stale screenshots (light + dark, 1440×900 @2x) against
a release-code instance booted at v2026.529.0 (911a1e8). Registry was
already stamped at that SHA, so captured_sha is unchanged.

Verification pass against the release codebase also found one authored
claim wrong: the execution-workspace environment precedence is
issue → project → agent → instance default (project policy outranks an
agent's own default), not issue → agent → project. Corrected
docs/guides/projects-workflow/workspaces.md to match
server/src/services/execution-workspace-policy.ts.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 19:20:05 +02:00
Aron PrinsandClaude Opus 4.8 9c5aae8962 Release docs for paperclip v2026.529.0
Add the two release features quarantined from nightly, and stamp
paperclip_version on every touched page.

- Claude Local: document UI-driven live model discovery (#6953) —
  /v1/models lookup via ANTHROPIC_API_KEY, 60s cache, built-in fallback,
  Bedrock IDs, and the refresh control.
- Workspaces: document reused-workspace environment consistency and
  finalize-gated dependent wakes / interaction.accept (#6969).
- Stamp paperclip_version: v2026.529.0 on all 14 touched pages.
- Regenerate SCREENSHOTS_PENDING.md: 90/276 stale for this window.

Inherits the six features already drafted on nightly: resource
memberships (#6677), document annotations (#6733), bundled plugins in
plugin manager (#6734), skills CLI + catalog (#6782), first-admin
claim (#6755).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 19:00:46 +02:00
Aron Prins 47c8308c55 merge: main into nightly after auto-screenshots 2026-05-30 18:50:45 +02:00
Aron Prins b59ab9b6ab Merge branch 'feat/auto-screenshots' 2026-05-30 18:49:27 +02:00
Aron Prins d8a031897b Avoid env-controlled registry sync cwd 2026-05-30 17:54:06 +02:00
Aron Prins 17e046db5f Harden screenshot runner environment 2026-05-30 17:52:14 +02:00
Aron PrinsandClaude Opus 4.8 32a16b20f4 Recapture screenshots on a healthy demo seed
The seeded org agents were created as `process` adapters with an empty
adapterConfig. The screenshot instance runs with no LLM provider and the
scheduler heartbeats every enabled agent, so each agent's heartbeat failed
instantly — the captured UI was dominated by red "error" states ("5 errors"
on the dashboard, "Ada failed after 1 second" on agent detail).

Give every demo agent a shared DEMO_AGENT_CONFIG: a process command that
always exits 0. Heartbeats now complete cleanly, so agents render as healthy
idle/running/paused with tidy transcripts. Recaptured all targets (light +
dark) against paperclip 911a1e8 — dashboard now reads "0 errors".

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 17:41:27 +02:00
Aron PrinsandClaude Opus 4.8 e4be96d643 Add screenshot-coverage gate to sync:check
New scripts/sync/verify-screenshots.mjs asserts that every screenshot
referenced in a guide page is (a) a CAPTURE_TARGET in routes.mjs and (b)
indexed in registry.json with a non-empty depends_on. It exits non-zero
otherwise, so a doc image added without a capture target fails loudly instead
of silently going stale. Wired into `npm run sync:check`, which the /sync-docs
skill runs every sync.

Currently: 112 referenced screenshots, all tracked and indexed.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 14:42:14 +02:00
Aron PrinsandClaude Opus 4.8 9ad25322b5 Make the screenshot registry self-indexing
Previously sync-registry only *updated* existing registry entries, so a newly
introduced screenshot target was captured but never indexed — and the
/sync-docs staleness check only flags entries it can see, so such a shot would
silently drift out of date (exactly what happened to issues/inbox-unread).

sync-registry now appends a registry entry (file, theme, viewport, route,
depends_on) for any CAPTURE_TARGET that has none, and sorts entries for stable
diffs. run.mjs runs sync-registry on every capture, so the index now stays
complete automatically. Audit: 0 target files missing from the registry, 0
without depends_on — every documented screenshot is tracked for staleness.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 14:40:58 +02:00
Aron PrinsandClaude Opus 4.8 38608f7fb7 Recapture remaining UI screenshots (paperclip 911a1e8)
Refresh the shots unlocked by the runner-agent seeding and new targets:
agent runs/transcript/status, environment test pass, approval revision box,
adapter health rows, and the onboarding goal field. registry.json stamped.

Every screenshot referenced in the docs is now captured against the current
build; the only un-refreshed files are unreferenced orphans.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 14:28:21 +02:00
Aron PrinsandClaude Opus 4.8 59b4d4a4fe Cover the last 8 shots: real process-adapter runs + doc repoint
Close the remaining gap so every screenshot referenced in the docs is current.

seed.mjs — process-adapter "runner" agents (no LLM needed; the process adapter
executes a shell command):
- "Task Runner" runs `sh -c "echo ..."` → a real completed run with a STDOUT
  transcript (run-transcript-view, test-environment-success via the config
  Test button which now passes: command sh is executable)
- "Live Task" runs `sh -c "sleep 3600"` and is woken last, so it stays
  in-flight through the whole capture phase → genuine "running" agent status
  and an in-progress run row

routes.mjs — targets for run-transcript-view, run-history-in-progress,
agent-status-running, test-environment-success (click "Test" → wait for the
Passed result), approvals/revision-request-input (the detail note box),
adapters/health (the adapter rows), and onboarding/goal-field (wizard step 1).

dashboard.md — the dashboard image pointed at a hand-annotated PNG that can't
be auto-captured; repoint it to the freshly captured dashboard-overview.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 14:28:19 +02:00
Aron PrinsandClaude Opus 4.8 b24671f98c Recapture UI screenshots with extended coverage (paperclip 911a1e8)
Full automated recapture via the extended pipeline against a richly-seeded
demo instance: 220 screenshots (110 targets x light/dark, 1440x900 @2x).

Adds coverage for dashboard, tasks, activity, org chart, routines, skills,
workspaces, approvals, budget-utilisation states, new-agent forms, and
empty-state onboarding. registry.json route/depends_on backfilled and
captured_sha stamped for all 220 entries.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 13:52:44 +02:00
Aron PrinsandClaude Opus 4.8 73de0bb4b6 Extend screenshot coverage: interaction engine + richer seed
Grow capture coverage from 56 to 110 targets so the docs' UI screenshots are
refreshed end to end, not just the plain-URL surfaces.

capture.mjs — interaction engine:
- `steps` per target (click / fill / waitFor / press) run after the page
  settles; each step is best-effort (logs + continues) so selector drift
  degrades to a partial capture instead of aborting
- `clip` captures a single element (e.g. a dashboard panel), falling back to
  full-page if the element isn't found
- robust locator DSL: testid / role+name / label / title / placeholder / text / css

routes.mjs — +54 targets across dashboard, tasks, issues, activity, org,
routines, skills, workspaces, settings, costs (incl. budget-bar 50/80/100%
states), new-agent forms, approvals, and empty-state onboarding. New seed-id
tokens for empty company, budget-state agents, http agent, skill, approvals.
Documents the 8 shots that are genuinely not auto-capturable offline (live-run
transcripts/status, real adapter test-pass, a nonexistent revision input, a
nonexistent adapter-health route, the hand-annotated overview, onboarding goal).

seed.mjs — extended dataset: a second empty company for empty-state shots;
three budget-utilisation agents seeded to 50/80/100% (last one paused); an
http-adapter agent; four approval items (hire / strategy / board / approved)
via REST; a resolved skill id; and the isolated-workspaces experimental flag
(PATCH /api/instance/settings/experimental).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 13:52:36 +02:00