Record completed Cursor qualification and update readiness probes

Document all ten local and Daytona gates with preserved failed attempts and registry publication provenance. Update the second registry mock for the normal Cursor probe.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-10-04 21:06:12 -05:00
1 parent 630ed86131
commit 31785af33b
4 files changed
+77 -40

No files matched your search

@@ -1,10 +1,12 @@
# Cursor ACP capability inventory
Current assembled candidate (2026-10-03): **Cursor profile v11 is unqualified**.
Current release candidate (2026-10-04): **Cursor profile v11 passed local and Daytona qualification**.
It ports snapshot `22c78242a4e0c2369fecf0c2dc4e7600fbad6706` onto mainline
`dd868ed125cd709506dd9b29fca640a44d580501`, preserving newer recovery and owned
warm agent-file handoff. The [readiness checklist](../plans/2026-10-03-cursor-production-readiness.md)
tracks current qualification; the historical results below retain their own identities.
records all ten local and all ten remote gates, including cleanup. The final
public installed-package smoke is recorded separately there. The historical
results below retain their own identities and limits.
The public installation path is `paperclipai runtime setup cursor`. It explicitly
downloads the pinned CLI `2026.09.26-dd393fe`, applies the source-owned patch, and
@@ -87,7 +89,9 @@ The reference is the runner's Codex app-server integration and its closed thread
## Capability matrix against Codex app-server
“Implemented” below means a tested Cursor implementation wired through the shared runtime, canonical activity channel and durable interaction path. It is not a claim of authenticated end-to-end qualification.
This historical field inventory distinguishes implemented transport behavior from
its original qualification gaps. The current release proof and exclusions are in
the readiness report linked above; native AskQuestion remains uncertified.
| Capability | Cursor harness/ACP evidence | Paperclip treatment | Remaining gap or qualification |
|---|---|---|---|
@@ -9,7 +9,7 @@ Paperclip questions remain the supported question path. Unknown usage is unknown
The proposed release supports authenticated Paperclip tools, semantic questions,
native plan decisions, permission control, rich activity, file delivery, durable
responses, cancellation and warm continuation. The matrix below records the
current proof for those capabilities; it does not certify pending remote cells.
completed local and fresh Daytona proof for those capabilities.
Accepted planning succeeds while the task waits for explicit user direction.
Acceptance does not start implementation.
@@ -28,28 +28,36 @@ defensively but is not advertised or certified. See the
## Current release checkpoint
The integration is in draft PR [#15075](https://github.com/paperclipai/paperclip/pull/15075).
Production admission remains disabled. The frozen runtime is
Cursor production admission is enabled in this draft candidate after all ten
local and ten fresh Daytona cases passed with cleanup. Pi and Copilot remain
gated. Final installed-package qualification and final CI are still in progress;
this PR is not authorized for production merge or deployment. The frozen runtime is
`d0b90756e3abe9e7516caded784036f01e76ad25`; the latest controller and fixture
repairs are `473206cd9d5c7e4399b03869b42a9e9f6ba96c09`. Cursor profile v11,
repairs are `afe305b505edd2744ead6d0dda312400d0b9be66`. The promotion and
ordinary remote package path are `630ed8613191b6875ad448ecdfe067089f3696d9`. Cursor profile v11,
patch `paperclip-cursor-usage-v4`, CLI version and explicit Luna model remain fixed.
| Required case | Current local proof | Fresh Daytona proof |
| --- | --- | --- |
| Completion through authenticated tools | `hello-complete-01`: passed, cleanup passed | Pending |
| File edit, validation and registered download | `file-edit-validate-02`: passed, cleanup passed | Pending |
| Semantic question after controller restart | `structured-question-restart-resume-01`: passed, cleanup passed | Pending |
| Semantic plan approval and completion | `plan-approve-complete-01`: passed, cleanup passed | Pending |
| Native reject, revise and accept | `native-plan-reject-revise-accept-01`: passed, cleanup passed | Pending |
| Native plan cancellation | `native-plan-cancel-01`: passed, cleanup passed | Pending |
| Denied write after reconnect | `native-write-deny-reconnect-01`: passed, cleanup passed | Pending |
| Stop during pending permission | `pending-permission-stop-01`: passed, cleanup passed | Pending |
| Three warm turns | `warm-three-turn-01`: passed, cleanup passed | Pending |
| Pending permission followed by provider loss | `pending-permission-provider-loss-01`: passed, cleanup passed | Pending |
| Completion through authenticated tools | `hello-complete-01`: passed, cleanup passed | `hello-complete-01`: passed, cleanup passed |
| File edit, validation and registered download | `file-edit-validate-02`: passed, cleanup passed | `file-edit-validate-01`: passed, cleanup passed |
| Semantic question after controller restart | `structured-question-restart-resume-01`: passed, cleanup passed | `structured-question-restart-resume-01`: passed, cleanup passed |
| Semantic plan approval and completion | `plan-approve-complete-01`: passed, cleanup passed | `plan-approve-complete-02`: passed, cleanup passed |
| Native reject, revise and accept | `native-plan-reject-revise-accept-01`: passed, cleanup passed | `native-plan-reject-revise-accept-01`: passed, cleanup passed |
| Native plan cancellation | `native-plan-cancel-01`: passed, cleanup passed | `native-plan-cancel-02`: passed, cleanup passed |
| Denied write after reconnect | `native-write-deny-reconnect-01`: passed, cleanup passed | `native-write-deny-reconnect-01`: passed, cleanup passed |
| Stop during pending permission | `pending-permission-stop-01`: passed, cleanup passed | `pending-permission-stop-01`: passed, cleanup passed |
| Three warm turns | `warm-three-turn-01`: passed, cleanup passed | `warm-three-turn-01`: passed, cleanup passed |
| `pending-permission-provider-loss-01`: passed, cleanup passed permission followed by provider loss | `pending-permission-provider-loss-01`: passed, cleanup passed | `pending-permission-provider-loss-01`: passed, cleanup passed |
Each local identity has prefix `cursor-v11-d0b907-local-`. Results live under
`tests/runner-e2e/results/<identity>/<suite>/runner-acpx-cursor/local/<case>/attempt-1/result.json`.
The file repeat uses controller/fixture 473206; the other cases use 5e6c16.
All ten cases use runtime d0b907. Automatic retries are zero.
All ten local cases use runtime d0b907. Fresh remote identities have prefix
`cursor-v11-d0b907-daytona-` and the same result layout with `daytona` in place
of `local`. The semantic plan repeat and native decision case use controller
473206; the remaining remote cases use AFE diagnostics. All ten remote cases
use the exact frozen image and runtime. Automatic retries are zero.
All seven Runner semantic cases passed on this frozen runtime with owned
processes retired. Their campaign identities have prefix `cursor-v11-d0b907-`
@@ -69,12 +77,21 @@ included in the semantic pass count.
The qualification image is published at
`ghcr.io/paperclipai/paperclip-daytona-runner@sha256:16c7be3610f45e409f67873dd4bd829f9a1e0e5f017c8826d01db4bb05720f97`.
The user approved publication and all remaining qualification on 2026-10-04
within the existing $100 total ceiling. The fresh remote matrix is in progress.
within the existing $100 total ceiling. The registry push returned the digest
above; `docker buildx imagetools inspect` independently confirms that OCI index
at GHCR, with Linux amd64 manifest `sha256:c70f25e76503ce2d9cc1f87ed5a221f8e423f4a45f5519e8aa0581b033be353e`.
Docker's local containerd store uses the same OCI index identity here. All ten
remote cases pulled this published immutable image and passed with cleanup.
The first plan attempt failed before a provider call because seven empty directories
were missing from the controller extraction. All file bytes matched the immutable
image; restoring its exact directory inventory passed the unchanged manifest.
The failed attempt and successful cleanup remain recorded; the affected repeat
uses the same image and runtime. Infrastructure reserves total $29 within the
uses the same image and runtime. Native cancellation attempt 01 lacked a complete
terminal observer receipt and failed its cleanup gate. Independent deletion of its
owned sandbox was confirmed. Its failed result remains failed; diagnostic-only AFE
fixture changes did not relax any proof requirement, and attempt 02 passed with
cleanup. This does not establish a product bug fix or erase the first failure.
Infrastructure reserves total $29 within the
$52.919619376 remaining envelope; unknown per-run Cursor costs stay null.
The isolated public package verifier passed at source 473206: 18 public packages,
@@ -97,8 +114,7 @@ the complete default command was not repeated.
Recursive typecheck, full build, token gates, four native launch/selection tests,
1,568 Vitest harness checks and 128 Node harness checks passed. The combined
harness wrapper exits nonzero because it includes three Node suites as Vitest
files; their separate Node execution passed. The final installed task smoke,
production promotion and final certification remain required.
files; their separate Node execution passed. The final installed task smoke and final certification remain required.
## Source-to-port map
@@ -130,15 +146,15 @@ preserved; semantic behavior is assessed separately.
- [x] Show unavailable accounting explicitly and keep partial counters diagnostic-only.
- [x] Freeze candidate source/profile/patch/pack/image identities and build all three platforms.
- [x] Reconcile the remaining campaign budget; run paid cells serially within the existing account cap.
- [ ] Qualify normal setup/completion locally and on Daytona.
- [ ] Qualify file editing, independently checked bytes/validation and accessible artifacts on both targets.
- [ ] Qualify semantic questions/restart with exactly-once answer consumption on both targets.
- [ ] Qualify native plan reject/revise/accept/cancel and correct task/run states on both targets.
- [ ] Qualify denied writes and Stop during pending approval, including owned process retirement, on both targets.
- [ ] Qualify three warm turns with stable session/workspace/agent-files ownership and no duplicate output on both targets.
- [ ] Qualify provider loss, input expiry and actionable errors without mutation replay or false success.
- [x] Qualify normal setup/completion locally and on Daytona.
- [x] Qualify file editing, independently checked bytes/validation and accessible artifacts on both targets.
- [x] Qualify semantic questions/restart with exactly-once answer consumption on both targets.
- [x] Qualify native plan reject/revise/accept/cancel and correct task/run states on both targets.
- [x] Qualify denied writes and Stop during pending approval, including owned process retirement, on both targets.
- [x] Qualify three warm turns with stable session/workspace/agent-files ownership and no duplicate output on both targets.
- [x] Qualify provider loss, input expiry and actionable errors without mutation replay or false success.
- [x] Run seven semantic Runner cases; retain strict accounting results separately.
- [ ] Promote Cursor consistently only after the candidate passes; leave other pending providers gated.
- [x] Promote Cursor after the complete local and Daytona matrix; leave other pending providers gated.
- [x] Run contracts/replay, token gates, recursive typecheck, full tests and build; retain failed local attempts and verify affected repeats separately.
- [ ] Repeat a clean normal-install smoke with qualification overrides absent.
- [ ] Deliver exact identities, capability limits and completed acceptance matrix; prepare focused template-based PR.
@@ -220,13 +236,13 @@ manifest identity; the remotely pulled digest must be recorded before a live cel
| --- | --- | --- |
| Ordinary installation and completion | Public setup/closure verified; final full verifier and normal product smoke pending | Pending |
| File editing, validation, accessible artifacts | Earlier `9ba53f` preflight passed; assembled-candidate repeat pending | Pending |
| Semantic question with controller restart | Passed `structured-question-restart-resume-01` on `ccae835` | Pending |
| Semantic plan acceptance | Passed `plan-approve-complete-01` on `ccae835` | Pending |
| Native reject, revise, accept | Passed `native-plan-reject-revise-accept-01` on `ccae835` | Pending |
| Semantic question with controller restart | Passed `structured-question-restart-resume-01` on `ccae835` | `structured-question-restart-resume-01`: passed, cleanup passed |
| Semantic plan acceptance | Passed `plan-approve-complete-01` on `ccae835` | `plan-approve-complete-02`: passed, cleanup passed |
| Native reject, revise, accept | Passed `native-plan-reject-revise-accept-01` on `ccae835` | `native-plan-reject-revise-accept-01`: passed, cleanup passed |
| Native plan cancellation | First attempt failed during fixture migration/startup before Cursor ran; affected repeat pending | Pending |
| Denied write and pending-permission Stop | Pending | Pending |
| Three warm turns | Pending | Pending |
| Owned provider loss with pending permission | Passed `pending-permission-provider-loss-03` with clean retirement, stale-answer refusal, blocked open task, failed run, and no mutation | Pending |
| Owned provider loss with pending permission | Passed `pending-permission-provider-loss-03` with clean retirement, stale-answer refusal, blocked open task, failed run, and no mutation | `pending-permission-provider-loss-01`: passed, cleanup passed |
All attempts are serial and have zero automatic retries. The original campaign
envelope has $52.919619376 remaining after its prior committed upper bound.
+23 -7
View File
@@ -79,13 +79,29 @@ synchronous trace scan for each pending event: it blocks event delivery and can
leave the board showing an active run after the provider turn has already ended.
The package also builds `paperclip-runner-acpx-sidecar`. This bounded v2
stdin/stdout bridge admits the pinned Claude and Codex ACPX profiles. It
validates the exact model, session identity, tool catalog, structured input,
and terminal settlement at the process boundary. Cursor, Copilot and Pi have
separate candidate branches and remain unavailable in production until local
and Daytona qualification passes. Their verified distributions are build-owned;
no candidate accepts an arbitrary executable. See
[the rich ACP capability report](../../doc/architecture/runner-rich-acp-capabilities.md).
stdin/stdout bridge admits the pinned Claude, Codex, Grok and Cursor ACPX profiles.
It validates the exact model, session identity, tool catalog, structured input,
and terminal settlement at the process boundary. Copilot and Pi remain gated.
Verified distributions are build-owned; no provider accepts an arbitrary executable.
See [the rich ACP capability report](../../doc/architecture/runner-rich-acp-capabilities.md).
Install Cursor explicitly with `paperclipai runtime setup cursor`; npm installation
does not download it. Configure a company secret binding for `CURSOR_API_KEY` or
`CURSOR_AUTH_TOKEN`, select Cursor in the Runner configuration, and select an exact
model ID. Agent is the default; Plan and Ask are explicit modes. Paperclip semantic
questions are supported. Native AskQuestion and authoritative per-run dollar usage
are unavailable. Accepting a native plan ends the planning run successfully while
the task waits for the next instruction. See the
[Cursor release report](../../doc/plans/2026-10-03-cursor-production-readiness.md).
A release includes all three platform daemons and the Linux provider-pack identity
from its matching Daytona image. Run `stage:release-binaries` with a manifest that
binds each daemon path and SHA-256, plus `remoteProviderPack: {path, sha256}` for
the actual image's `provider-pack.json`. Assemble these assets after the normal
build and include them in the server's vendored Runner output before npm packing.
Ordinary remote Cursor startup uses the packaged Linux daemon and verifies every
image asset against that manifest. A mismatched image fails before the provider
starts; install the matching package and image together.
Remote Codex sessions relay assigned app tools through the server's configured
gateway. Small catalogs are sent directly. When a catalog would exceed the
+1
View File
@@ -11,6 +11,7 @@ const { probeInstallation, probeGrokInstallation } = vi.hoisted(() => ({
vi.mock("@paperclipai/paperclip-runner/live", () => ({
probeAcpxClaudeInstallation: probeInstallation,
probeAcpxGrokInstallation: probeGrokInstallation,
probeAcpxCursorInstallation: vi.fn(async () => undefined),
}));
// The registry registers a login capability for the two built-in interactive