From 7d2bb5aaabf633eb41c132e0f18fae820e303c09 Mon Sep 17 00:00:00 2001 From: Devin Foley Date: Mon, 12 Oct 2026 19:43:04 -0700 Subject: [PATCH] docs(release): stable notes for the 2026.1012.1-beta.0 soak (v2026.1015.0) (#16053) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work > - The release process promotes a soaked beta to stable. The stable GitHub Release body comes from `releases/beta/v.md` on `master` > - The `draft_stable_notes` job pushed a commit-log skeleton to this branch when `2026.1012.1-beta.0` published today (workflow run 38311557959) > - The skeleton is grouped commit subjects. It is not in release-notes voice and it does not tell a self-hoster what to do before an upgrade > - This pull request replaces the skeleton with curated notes. Each claim traces to a pull request in `v2026.1012.0..1b4c8038` > - The benefit is that the earliest stable promotion (v2026.1015.0) finds finished notes on `master` on time ## Linked Issues or Issue Description **Issue type** Missing content **Where is the issue?** `releases/beta/v2026.1012.1-beta.0.md` — the stable-notes file for the `2026.1012.1-beta.0` soak. It exists only on this machine-owned branch and only as the auto-generated skeleton. **What's wrong?** The stable promotion reads this file from `master` and publishes it as the GitHub Release body. Until this branch merges, the stable preflight has no notes to resolve. The skeleton lists raw commit subjects with nested PR summaries. It does not call out the three changes that need operator attention before the upgrade. **Suggested fix** Merge the curated notes so the notes invariant holds for the v2026.1015.0 promotion. Correct the `> Released:` date in a follow-up if the promotion date slips. ## What Changed - Replaced the skeleton in `releases/beta/v2026.1012.1-beta.0.md` with curated stable notes for v2026.1015.0 in the same layout as `releases/beta/v2026.1006.0-beta.0.md`: overview, Breaking Changes, Highlights, Fixes, Improvements, Upgrade Guide, Contributors - Breaking Changes lists the expanded Operator role preset (#15377), GitHub review bots behind a new default-off experimental setting (#15416), and budget policies that hold on unpriced usage by default (#14997) - Upgrade Guide enumerates migrations `0306` through `0333` with one-phrase effects, the three new environment variables with defaults, the three new default-off experimental settings, the new agent identity key variables for custom adapters, and the private-task API behavior - Release and CI internals, smoke specs, canary tooling, Paperclip Cloud work, heartbeat refactors, dependency bumps, and test-only changes are left out. Features already described in the v2026.1012.0 notes are not repeated ## Verification - Beta publish is complete: npm dist-tag `beta` is `2026.1012.1-beta.0`, tag `beta/v2026.1012.1-beta.0` points at `1b4c803816e82b0265c8422e1a804327a7ed8c54`, and the `publish_beta`, `smoke_beta`, and `draft_stable_notes` jobs in run 38311557959 all succeeded - `git rev-list --count v2026.1012.0..1b4c803816e82b0265c8422e1a804327a7ed8c54` returns 200, which matches the overview and Contributors section - `git shortlog -sn --no-merges` over the same range shows 6 human authors after the two bot accounts are excluded. The two external handles were read from the GitHub commit authors, not guessed from names - `./scripts/release.sh stable --date 2026-10-15 --print-version` returns `2026.1015.0` - Every `#NNNN` link in the file resolves to a pull request inside the range. Migration numbers, setting keys, env var names, and defaults were checked in the code on the source commit, not in commit subjects - The file contains no internal ticket ids or instance-local links - The compare view for this branch shows one added file and no source changes ## Risks - Low risk: a single markdown file, no source changes. If the promotion date slips past 2026-10-15, the `> Released:` line and H1 need a one-line update before the stable dispatch. The beta-keyed filename makes that re-date harmless ## Model Used - Claude (Anthropic), model ID `claude-fable-5-1` (Claude Fable 5.1), extended thinking enabled, tool use via Claude Code ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [ ] All Paperclip CI gates are green - [ ] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: devinfoley <139239+devinfoley@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 --- releases/beta/v2026.1012.1-beta.0.md | 65 ++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 releases/beta/v2026.1012.1-beta.0.md diff --git a/releases/beta/v2026.1012.1-beta.0.md b/releases/beta/v2026.1012.1-beta.0.md new file mode 100644 index 0000000000..66ede73ab8 --- /dev/null +++ b/releases/beta/v2026.1012.1-beta.0.md @@ -0,0 +1,65 @@ +# Paperclip v2026.1015.0 + +> Released: 2026-10-15 + +Paperclip v2026.1015.0 carries 200 commits, promoted from `2026.1012.1-beta.0`. The headline is private work: a task or project can now be marked private and shared with named people and agents; everyone else cannot open it, find it in task lists or search, read its run transcripts, or reach it through a plugin. Around that: agents can run through your own model gateway (OpenRouter, Amazon Bedrock, Google Gemini, or any OpenAI Responses, Anthropic Messages, or Chat Completions endpoint), Slack bots set themselves up through Slack's Manifest API, the GitHub review bot gets a two-screen setup and a real **Paperclip Review** status check, Costs becomes an exact ledger that also shows monthly subscription fees, and connected assistants can edit tasks, upload files, and configure agents over MCP. Underneath, OpenAI Dot and Pi 1.0 join the experimental Runner, native OpenCode streams as it types, each agent gets a persistent cryptographic identity, and idle instances stop polling the database every second. + +## Breaking Changes + +- **Operators can now edit the company.** The Operator role preset grows from one grant (`tasks:assign`) to fourteen: agent creation and configuration, skills, environments, invitations, task assignment, pipelines, connections, tool management and use, and audit reads. Existing Operators pick up the missing grants through the normal startup seeding; custom grant scopes are kept. Join approval and member-permission management stay out of the preset, and inviting an Admin now requires join approval while inviting an Owner also requires member-permission management. Review your member roles if Operators were meant to be read-mostly. ([#15377](https://github.com/paperclipai/paperclip/pull/15377)) +- **GitHub review bots move behind their own experimental setting.** The **GitHub Code Review Bot** catalog entry, its setup, and its management screens appear only while **Settings → Experimental → GitHub review bots** (`enableGitHubReviewBots`, off by default) is on; existing bots keep running while it is off. The old setup-method and delegated-agent screens are gone, and per-person automatic-run flags are replaced by author include/exclude filters (legacy `people[].automaticReviews` values are read but ignored). ([#15416](https://github.com/paperclipai/paperclip/pull/15416)) +- **Budgets hold on unpriced usage by default.** Each budget policy gains an unpriced-usage setting that defaults to `block`: while a run's usage has no reliable price, the policy counts as at its limit until the charge is resolved through the audited cost adjustment flow. Set the policy to `allow` to keep running on unpriced usage. ([#14997](https://github.com/paperclipai/paperclip/pull/14997)) + +## Highlights + +- **Private tasks and projects** — Mark a task private when you create it, or make a project private with its own member list; a personal private project is created for you on first use. Private work is readable only by its responsible user, creator, current assignee, named grantees, and private-project members, and that rule applies to task lists and task counts, search, activity, run detail, transcripts, events, and logs, documents, attachments, work products, and every plugin read. Two surfaces stay company-wide on purpose: dashboard and sidebar totals may count private work without exposing a title or identifier, and the company run list shows a locked row for a private task's run with only the agent, status, timing, token, and cost fields, so budget oversight keeps working. Privacy flows down to children; sharing a child never exposes its parent or siblings. Owners and admins do not see private tasks by default and must request `?breakGlass=true`, which writes an audit row and a warning notice on the task. Agents' access is intersected with the run's responsible user, so reusing an agent does not carry another person's permissions. ([#14717](https://github.com/paperclipai/paperclip/pull/14717), [#10633](https://github.com/paperclipai/paperclip/pull/10633), [#14718](https://github.com/paperclipai/paperclip/pull/14718)) +- **Bring your own model gateway** — Connectors gains rows for OpenRouter, Amazon Bedrock, Google Gemini, and generic Responses API, Messages API, Chat Completions API, and local endpoints. URLs, protocol, region, and credentials live on the connection; the agent's Harness / Runtime page picks a compatible **Connection** from a dropdown and the model picker accepts manual IDs. Codex (legacy and Runner) routes to OpenRouter or custom Responses endpoints, Claude (legacy and Runner) to OpenRouter, custom Messages endpoints, or Bedrock, and OpenCode and Hermes to OpenRouter or custom Chat Completions endpoints. OpenRouter connections without an explicit model list load OpenRouter's public catalog. ([#14970](https://github.com/paperclipai/paperclip/pull/14970), [#15341](https://github.com/paperclipai/paperclip/pull/15341)) +- **Slack bots set themselves up** — New Slack bot drafts default to automatic setup: paste a temporary App configuration token, Paperclip creates the app through Slack's Manifest API, installs it through OAuth, links your Slack account, uploads the agent's avatar, and verifies delivery in a four-screen wizard with no Slack CLI involved ([#15413](https://github.com/paperclipai/paperclip/pull/15413)). A new **Require at-mention** setting stops thread replies from waking the agent without an explicit mention ([#15612](https://github.com/paperclipai/paperclip/pull/15612)); a follow-up sent after a Slack Stop starts a fresh turn instead of stalling ([#15737](https://github.com/paperclipai/paperclip/pull/15737)); and Slack agents now know the saved slash command people use to link their accounts, link every task they create, and report results and review requests back in the originating thread ([#15576](https://github.com/paperclipai/paperclip/pull/15576), [#15579](https://github.com/paperclipai/paperclip/pull/15579), [#15611](https://github.com/paperclipai/paperclip/pull/15611)). +- **A two-screen GitHub review bot** — Setup is now Choose agent, then Connect GitHub under a personal account or organization; GitHub asks for creation and installation consent, and Paperclip stores the App secrets locally, imports repository access, and verifies delivery. Each accepted request gets one editable App-owned progress comment, and review assessments publish a **Paperclip Review** check for the reviewed commit with a configurable passing score (1–5) that branch protection can require. A self-hosted instance needs one Paperclip Cloud approval before its first managed GitHub connection, because Cloud hosts the fixed OAuth callback and signed webhook inbox; tokens are sealed to your instance. ([#15416](https://github.com/paperclipai/paperclip/pull/15416)) +- **Costs you can reconcile** — Accounting is now a durable, exact ledger: usage receipts are fsynced and replayed after failures, retries settle one charge, amounts keep decimal cents, and every event is marked reported, estimated, or unpriced instead of silently zero ([#14991](https://github.com/paperclipai/paperclip/pull/14991), [#14997](https://github.com/paperclipai/paperclip/pull/14997)). The Costs page reports each connected ChatGPT or Claude subscription's monthly fee once beside API spend, lets you enter the real price, and keeps ambiguous plans unpriced ([#15634](https://github.com/paperclipai/paperclip/pull/15634)); quota reads are scoped to authorized company accounts ([#14994](https://github.com/paperclipai/paperclip/pull/14994)); cost gaps are listed by agent with links to the affected runs, the model the runtime actually selected is recorded, and a retry appears only when saved evidence is ready ([#15948](https://github.com/paperclipai/paperclip/pull/15948)); and historical pricing gaps show as a neutral note under the totals rather than a red error ([#15459](https://github.com/paperclipai/paperclip/pull/15459)). +- **Assistants that can do more over MCP** — A connected Claude Code, Codex, or other MCP assistant can now edit tasks, finish or block them, write documents and revisions, register deliverables, upload files through expiring tickets, and, with a separately consented configuration scope, manage agent settings and instructions, projects and repositories, and skills ([#15380](https://github.com/paperclipai/paperclip/pull/15380)). Connections are named by owner and client ("Dotta's Codex connection") with the authorizing person's avatar, revoked rows disappear, and the copied invitation is shorter ([#15411](https://github.com/paperclipai/paperclip/pull/15411)). +- **Sixteen more apps in the catalog** — Gauge ([#15596](https://github.com/paperclipai/paperclip/pull/15596)), Superagent ([#15394](https://github.com/paperclipai/paperclip/pull/15394)), Telem.AI web search ([#15379](https://github.com/paperclipai/paperclip/pull/15379)), Enterpret ([#13906](https://github.com/paperclipai/paperclip/pull/13906)), Calendly, Exa, Firecrawl, GSC Wizard, Parallel Search, Tavily, and Windsor.ai ([#15621](https://github.com/paperclipai/paperclip/pull/15621)), and Bitly, Context7, Hugging Face, and Resend ([#15686](https://github.com/paperclipai/paperclip/pull/15686)) join as verified hosted MCP connections. Sentry sign-in discovers OAuth through its MCP resource metadata, so setup no longer asks for a client ID and secret ([#15837](https://github.com/paperclipai/paperclip/pull/15837)), and OAuth grants now record whether each scope came from the provider or from Paperclip's request ([#14059](https://github.com/paperclipai/paperclip/pull/14059)). +- **New Runner providers** — OpenAI Dot joins as a standalone experimental agent choice: pair your Dot with a one-use code, and the Runner delivers assignments over MCP Events while Dot uses its own tools and reports back ([#15402](https://github.com/paperclipai/paperclip/pull/15402), [#15414](https://github.com/paperclipai/paperclip/pull/15414), [#15581](https://github.com/paperclipai/paperclip/pull/15581), [#15734](https://github.com/paperclipai/paperclip/pull/15734)). Pi 1.0 runs through the experimental Runner with explicit provider and model selection ([#14921](https://github.com/paperclipai/paperclip/pull/14921)), and the Cursor Runner integration is consolidated onto mainline recovery behavior with a public install path ([#15075](https://github.com/paperclipai/paperclip/pull/15075)). +- **Codex and OpenCode that just start** — Native Codex uses the installed Codex CLI and accepts usable older or newer versions, so a clean npm install no longer needs a global command ([#15555](https://github.com/paperclipai/paperclip/pull/15555)); a model that the sandbox's Codex CLI is too old for is swapped for a compatible one with a visible warning instead of failing every turn ([#15399](https://github.com/paperclipai/paperclip/pull/15399), [#15519](https://github.com/paperclipai/paperclip/pull/15519)); saved runs survive server upgrades ([#15518](https://github.com/paperclipai/paperclip/pull/15518)); and task environment variables reach later turns and tool commands ([#15451](https://github.com/paperclipai/paperclip/pull/15451)). Native OpenCode streams text as it arrives ([#15708](https://github.com/paperclipai/paperclip/pull/15708)), starts without the postinstall script that package managers skip ([#15702](https://github.com/paperclipai/paperclip/pull/15702)), and selects the bundled Linux assets for remote runs without path overrides ([#15721](https://github.com/paperclipai/paperclip/pull/15721)). +- **Reports you can open on the task** — HTML attachments and workspace `.html` files render in an opaque-origin sandbox with view-source and download controls ([#15447](https://github.com/paperclipai/paperclip/pull/15447)), and CSV files open as tables with row numbers, sticky headers, and record counts ([#15445](https://github.com/paperclipai/paperclip/pull/15445)). +- **Clearer task provenance and waits** — A follow-up task an agent creates while working on a task now defaults to that task as its parent, and the task page shows "Created from by " ([#15762](https://github.com/paperclipai/paperclip/pull/15762)); native agents can schedule their own one-shot task monitor and yield until it fires ([#15446](https://github.com/paperclipai/paperclip/pull/15446)); the monitor card gets an X with a confirmation ([#15735](https://github.com/paperclipai/paperclip/pull/15735)); and a saved pull request stays visible in Properties with its review request and a **Check status** action even when the provider lookup fails ([#15375](https://github.com/paperclipai/paperclip/pull/15375)). +- **Your primary agent** — Each person gets one primary agent per company, shown with a crown on the roster and used as the fallback for new tasks and Chat when there is no recent choice; the first agent you create becomes primary automatically and can be changed on the agent profile ([#15470](https://github.com/paperclipai/paperclip/pull/15470)). +- **Company decision models and fast responses** — Company Settings can bind one shared OpenAI or OpenRouter API connection for small typed model decisions, with permission checks, budget reservations, and a Costs → Decisions history ([#15473](https://github.com/paperclipai/paperclip/pull/15473)). On top of it, **Experimental fast responses** posts a short acknowledgement comment within three seconds of a human message while the agent starts its normal run, in tasks, Agent Chat, and Slack and GitHub threads ([#15748](https://github.com/paperclipai/paperclip/pull/15748)). + +## Fixes + +- **Workspaces and sandboxes** — A transient sandbox copy-back failure is retried up to three times before the task is held for repair, and remaining holds explain what happened in plain language ([#15920](https://github.com/paperclipai/paperclip/pull/15920)); a remote sandbox whose required copy-back failed is kept, with its files, behind an explicit repair decision instead of being deleted by cleanup ([#15479](https://github.com/paperclipai/paperclip/pull/15479), [#15790](https://github.com/paperclipai/paperclip/pull/15790)); server shutdown waits for a legacy adapter's workspace export before releasing its sandbox lease ([#15857](https://github.com/paperclipai/paperclip/pull/15857)); a reused saved worktree keeps its original repository when project settings change ([#15528](https://github.com/paperclipai/paperclip/pull/15528)); an accepted native result is no longer mistaken for lost work by the orphan reaper after a restart ([#15718](https://github.com/paperclipai/paperclip/pull/15718)); OpenCode runs in the realized workspace via `--dir` ([#11438](https://github.com/paperclipai/paperclip/pull/11438)); Daytona OpenCode sessions keep their deadlines ([#15905](https://github.com/paperclipai/paperclip/pull/15905)); and OpenCode timeouts no longer claim the configured deadline expired ([#15789](https://github.com/paperclipai/paperclip/pull/15789)). +- **Runs, recovery, and questions** — A retry no longer burns itself while a stopped run's environment is still cleaning up, and settled repair instructions stop reappearing in later wakes ([#15463](https://github.com/paperclipai/paperclip/pull/15463)); a review wait whose automatic repair also leaves no wake path now records a board decision instead of sitting silently ([#15764](https://github.com/paperclipai/paperclip/pull/15764)); a parent is woken again when a child finishes requested revisions ([#15372](https://github.com/paperclipai/paperclip/pull/15372)); native runs resume cleanly after connection approval decisions with final usage retained ([#15471](https://github.com/paperclipai/paperclip/pull/15471), [#15420](https://github.com/paperclipai/paperclip/pull/15420), [#15514](https://github.com/paperclipai/paperclip/pull/15514)); a pending tool request expires on its own when the user has already connected the service in Apps ([#15856](https://github.com/paperclipai/paperclip/pull/15856)); agents stop re-asking questions that moved into feed history ([#15392](https://github.com/paperclipai/paperclip/pull/15392)); archiving a task during its completion no longer deadlocks ([#15615](https://github.com/paperclipai/paperclip/pull/15615)); and a task policy with a monitor but no stages no longer crashes the task page ([#15593](https://github.com/paperclipai/paperclip/pull/15593)). +- **Adapters** — Claude CLI sessions resume across per-run agent file copies ([#15437](https://github.com/paperclipai/paperclip/pull/15437)); Hermes gets managed instructions through its system overlay instead of a copy in every resumed user turn ([#15439](https://github.com/paperclipai/paperclip/pull/15439)); and external agents such as Dot are told to use their own tools when a Paperclip app is missing ([#15734](https://github.com/paperclipai/paperclip/pull/15734)). +- **Connections and MCP** — One oversized or malformed MCP reply fails only that call instead of locking the whole connection in an error state ([#15462](https://github.com/paperclipai/paperclip/pull/15462)); remote MCP callbacks keep an explicitly saved empty agent selection, token exchange sends `Accept: application/json`, and saved hidden-provider drafts resume from Finish setup ([#15686](https://github.com/paperclipai/paperclip/pull/15686)); Airtable, Calendly, and other verified providers get the registration and form fixes found in live testing ([#15621](https://github.com/paperclipai/paperclip/pull/15621)); and the sidebar keeps its last plugin items quiet when the server is unreachable ([#15588](https://github.com/paperclipai/paperclip/pull/15588)). + +## Improvements + +- Hiring, approval, pause, resume, and termination run through a durable agent lifecycle with explicit states: proposed hires stay pending until approval, approved hires are prepared and have their harness configuration verified before work, required plugins get callbacks at each step, and the agent page shows lifecycle progress with a retry action ([#15631](https://github.com/paperclipai/paperclip/pull/15631), [#15391](https://github.com/paperclipai/paperclip/pull/15391)); plugins can consume a durable resource lifecycle journal with acknowledgments, seeded with a one-time baseline of existing agents and projects, and project archive and restore now write journal events ([#15343](https://github.com/paperclipai/paperclip/pull/15343), [#15371](https://github.com/paperclipai/paperclip/pull/15371)). +- Every agent gets a persistent Ed25519 keypair, created on hire or on its next managed run, encrypted at rest and handed to managed processes as `PAPERCLIP_AGENT_KEY_ID`, `PAPERCLIP_AGENT_PUBLIC_KEY`, and `PAPERCLIP_AGENT_PRIVATE_KEY`; the public key appears on the agent overview ([#15352](https://github.com/paperclipai/paperclip/pull/15352)). +- Agents can file complaints and suggestions about their tooling into the instance's `agent_commentary` table through new `complain` and `suggestion-box` skills or native `submit_complaint` and `submit_suggestion` tools, keeping that feedback out of task threads ([#15367](https://github.com/paperclipai/paperclip/pull/15367)). +- Idle instances go quiet: chat delivery, provider action, Slack sync, email, Browser Use cleanup, and five server delivery queues now wake from committed writes and known deadlines instead of scanning the database every second or three ([#15625](https://github.com/paperclipai/paperclip/pull/15625), [#15750](https://github.com/paperclipai/paperclip/pull/15750), [#15757](https://github.com/paperclipai/paperclip/pull/15757), [#15802](https://github.com/paperclipai/paperclip/pull/15802), [#15808](https://github.com/paperclipai/paperclip/pull/15808), [#15822](https://github.com/paperclipai/paperclip/pull/15822)); hosts that park idle instances get an idle-sleep safety report that fences accepted work, drains plugin workers, and treats finished logins, consumed retries, and verified delivery history as history rather than pending work ([#15522](https://github.com/paperclipai/paperclip/pull/15522), [#15599](https://github.com/paperclipai/paperclip/pull/15599), [#15761](https://github.com/paperclipai/paperclip/pull/15761), [#15851](https://github.com/paperclipai/paperclip/pull/15851), [#15897](https://github.com/paperclipai/paperclip/pull/15897), [#15907](https://github.com/paperclipai/paperclip/pull/15907)), with an opt-in final backup checkpoint before sleep ([#15629](https://github.com/paperclipai/paperclip/pull/15629)). +- Task notifications show the actor's name and avatar and hide your own actions ([#15695](https://github.com/paperclipai/paperclip/pull/15695)); other people's comments in task chat appear on the left with their name and avatar, and only yours are on the right in blue ([#15494](https://github.com/paperclipai/paperclip/pull/15494)); an agent blocked by an AI connection its responsible user cannot use shows an expanded error naming the agent and connection with a link to its AI settings ([#15741](https://github.com/paperclipai/paperclip/pull/15741)); and a teammate without the agent's required personal AI account can connect their own from inside the chat and resume the message ([#15376](https://github.com/paperclipai/paperclip/pull/15376)). +- The task composer keeps its model label steady while the effort slider moves and the slider is larger ([#15444](https://github.com/paperclipai/paperclip/pull/15444)), nested selectors scroll with the wheel and touch ([#15374](https://github.com/paperclipai/paperclip/pull/15374)), the project picker always offers **No project** ([#15382](https://github.com/paperclipai/paperclip/pull/15382)), routine descriptions keep code-block pastes in the code block and gain a copy control ([#15773](https://github.com/paperclipai/paperclip/pull/15773)), confirmation cards stack the prompt above the target pill and hide unlabeled machine keys ([#15895](https://github.com/paperclipai/paperclip/pull/15895)), chat connection and recovery cards share one surface ([#15771](https://github.com/paperclipai/paperclip/pull/15771)), the Slack chat-or-tools chooser gets icons ([#15574](https://github.com/paperclipai/paperclip/pull/15574)), the Workspace filter leaves the task and inbox filter menus ([#15788](https://github.com/paperclipai/paperclip/pull/15788)), and the star and leave buttons leave the agent index ([#15400](https://github.com/paperclipai/paperclip/pull/15400)). +- Tasks whose starting branch does not exist in the repository show a branch repair card that offers the remote's default branch or a typed branch and retries through the normal admission gates ([#15726](https://github.com/paperclipai/paperclip/pull/15726)); a GitHub reference the instance's credentials cannot see is reported as inaccessible and re-checked instead of frozen as "Not found" ([#15906](https://github.com/paperclipai/paperclip/pull/15906)); and the Paperclip skill ships its own issue-update helper and honors a harness checkout instead of demanding a second one ([#15554](https://github.com/paperclipai/paperclip/pull/15554), [#15548](https://github.com/paperclipai/paperclip/pull/15548)). +- Workspace jobs that exit non-zero return `422 workspace_job_failed` with the job's own output instead of a 500 ([#15941](https://github.com/paperclipai/paperclip/pull/15941)); custom source launchers get the native Runner WebSocket transport from the shared HTTP server constructor ([#15682](https://github.com/paperclipai/paperclip/pull/15682)); a refused local Hermes Gateway connection explains which host to check ([#15520](https://github.com/paperclipai/paperclip/pull/15520)); and pi-local's unavailable-model error no longer dumps the model catalog ([#13628](https://github.com/paperclipai/paperclip/pull/13628)). +- Failure reports carry bounded evidence for Daytona acquisition timeouts and provider state, workspace base-ref resolution, sandbox transfer and sync-out errors, orphan process loss, ACP bridge terminal frames, Git worktree inspection, and stackless browser rejections ([#15946](https://github.com/paperclipai/paperclip/pull/15946), [#15736](https://github.com/paperclipai/paperclip/pull/15736), [#15719](https://github.com/paperclipai/paperclip/pull/15719), [#15637](https://github.com/paperclipai/paperclip/pull/15637), [#15481](https://github.com/paperclipai/paperclip/pull/15481), [#15475](https://github.com/paperclipai/paperclip/pull/15475), [#15478](https://github.com/paperclipai/paperclip/pull/15478), [#15525](https://github.com/paperclipai/paperclip/pull/15525), [#15940](https://github.com/paperclipai/paperclip/pull/15940)), while proven configuration blockers such as a missing user secret, an unchosen AI account, a credential not shared with the responsible user, a local-directory project with a worktree policy, or an external service outage stay out of Sentry ([#15472](https://github.com/paperclipai/paperclip/pull/15472), [#15618](https://github.com/paperclipai/paperclip/pull/15618), [#15714](https://github.com/paperclipai/paperclip/pull/15714), [#15521](https://github.com/paperclipai/paperclip/pull/15521), [#15590](https://github.com/paperclipai/paperclip/pull/15590)). + +## Upgrade Guide + +- **Migrations `0306`–`0333`** run on upgrade: `0306` allows `google` in the AI account-default provider checks; `0307` rewrites the lifecycle-event action constraint; `0308` adds `agent_identity_keys`; `0309` adds `plugin_lifecycle_acknowledgments`, indexes the lifecycle journal, and seeds a one-time baseline event per existing agent and project; `0310` adds `agent_commentary`; `0311` adds MCP attachment upload and file ticket tables; `0312` adds accounting receipt, reservation, adjustment, invoice, and provider snapshot tables, widens cost columns to `numeric`, and adds the budget unpriced-usage policy (default `block`); `0313` adds `issue_access_grants` and `project_access_members`, adds `visibility` to tasks and projects (default `open`), and backfills privacy parent edges and run bindings in 1,000-row batches; `0314` binds historical inline draft images to their first task; `0315` adds `user_company_preferences` and backfills a primary agent from history; `0316` adds decision model tables; `0317` adds OpenAI Dot binding, mailbox, and assignment tables; `0318` adds `chat_slack_registrations`; `0319` makes Dot agent refresh tokens non-expiring; `0320` adds agent lifecycle columns and derives `lifecycle_state` from each agent's current status; `0321` adds `chat_endpoints.require_at_mention`; `0322` adds AI subscription account and price tables; `0323` adds GitHub registration owner columns; `0324`–`0330` add the experimental voice session tables; `0331` adds fast-response tables and `issue_comments.origin`; `0332` adds a question-history index concurrently; `0333` adds cost data-quality indexes. `0313` and `0314` run outside a single transaction and commit each batch, so an interrupted upgrade leaves them pending and safe to rerun; expect them to take longer on instances with large run histories. +- **New environment variables**, none required: `PAPERCLIP_ISSUE_PRIVACY_MODE` (default `enforce`; `shadow` logs would-deny decisions without enforcing, `off` disables the predicate) ([#10633](https://github.com/paperclipai/paperclip/pull/10633)); `PAPERCLIP_DB_BACKUP_IDLE_CHECKPOINT_ENABLED=1` opts an instance with automatic backups into taking a final verified backup before idle sleep (off by default) ([#15629](https://github.com/paperclipai/paperclip/pull/15629)); `PAPERCLIP_RESPONSIBLE_USER_AUTHZ_CACHE_TTL_MS` bounds the responsible-user permission snapshot (default `5000`) ([#10633](https://github.com/paperclipai/paperclip/pull/10633)). +- **New experimental settings**, all off by default: **GitHub review bots** (`enableGitHubReviewBots`) shows GitHub bot setup and management ([#15416](https://github.com/paperclipai/paperclip/pull/15416)); **OpenAI Dot** (`enableOpenAiDot`) adds Dot as an agent choice and requires **Assistant connections (MCP)**, authenticated sign-in, and an HTTPS `PAPERCLIP_PUBLIC_URL` ([#15414](https://github.com/paperclipai/paperclip/pull/15414)); **Experimental fast responses** (`enableFastResponses`) reveals Company Settings → Connections and allows acknowledgement comments ([#15748](https://github.com/paperclipai/paperclip/pull/15748)). Decision model setup lives under Company Settings → General until fast responses are on ([#15473](https://github.com/paperclipai/paperclip/pull/15473)). +- **Review Operator members** ([#15377](https://github.com/paperclipai/paperclip/pull/15377)): Operators now hold company editing, invitation, connection, tool, and audit grants after startup seeding. Demote members who should not configure agents or connect accounts. +- **Budget policies and unpriced usage** ([#14997](https://github.com/paperclipai/paperclip/pull/14997)): existing policies get `unpricedUsagePolicy: block`. If your agents run on providers whose prices Paperclip cannot determine, set the policy to `allow` or resolve unpriced events through the cost adjustment flow so the budget does not hold them. +- **Custom adapters and managed processes** ([#15352](https://github.com/paperclipai/paperclip/pull/15352)): managed runs now receive `PAPERCLIP_AGENT_KEY_ID`, `PAPERCLIP_AGENT_PUBLIC_KEY`, and `PAPERCLIP_AGENT_PRIVATE_KEY`; the key values are multiline PEM strings and the private key must not be logged. The wrapping key is `PAPERCLIP_SECRETS_MASTER_KEY` or the local secrets master-key file; a wrong master key fails the run rather than regenerating the keypair. +- **Private-task callers** ([#10633](https://github.com/paperclipai/paperclip/pull/10633)): direct reads of a private task by a non-member return `404`; owners and admins must pass `?breakGlass=true` for an audited emergency read; plugins are non-member principals and see no private content. +- **Slack and GitHub drafts**: existing Slack bot drafts without a saved setup method stay on manual setup ([#15413](https://github.com/paperclipai/paperclip/pull/15413)); existing GitHub bots, direct webhooks, and manual existing-App recovery keep working, but their settings are hidden until **GitHub review bots** is enabled ([#15416](https://github.com/paperclipai/paperclip/pull/15416)). +- **Harness pins** are unchanged for Codex, Claude, and OpenCode. Native Codex now prefers the Codex CLI installed with the server package and tolerates version drift; a sandbox image whose Codex CLI is too old for the selected model is switched to a compatible model with a warning ([#15555](https://github.com/paperclipai/paperclip/pull/15555), [#15519](https://github.com/paperclipai/paperclip/pull/15519)). +- No other configuration or API changes require action. + +## Contributors + +This release has 200 commits from 6 contributors. Thank you to everyone who contributed to this release! + +@lorenzozanee, @lusoris