mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-22 00:30:19 +02:00
Record Cursor plan approval and retained restart infrastructure failure
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
9d4f9fbe8a
commit
78360fa55a
2 files changed
+295
-2
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# Cursor ACP capability inventory
|
||||
|
||||
Evidence date: 2026-09-28. Candidate: `2026.09.26-dd393fe`. This profile is **not live-qualified**. One authorized task-context prompt on the initial free account returned an upgrade requirement, invoked no semantic tools, and supplied no usage receipt. Its cost is unknown; the account dashboard remained unchanged at coarse precision. The user then selected another account, whose exact-model local Runner Eval passed task-context and history tools with clean terminal settlement. Its dashboard attributed 56K rounded tokens to included usage and no incremental charge; ACP still supplied no token or dollar receipt. The local Product hello subsequently passed through the real browser, server, database, native runner, and authenticated completion tool. A second local Product case passed file creation, editing, command validation, an independent exact-byte matcher, and visible workspace artifact presentation. Native interactions, restrictive permissions, recovery, and Daytona execution remain required qualification gates.
|
||||
Evidence date: 2026-09-28. Candidate: `2026.09.26-dd393fe`. This profile is **not live-qualified**. One authorized task-context prompt on the initial free account returned an upgrade requirement, invoked no semantic tools, and supplied no usage receipt. Its cost is unknown; the account dashboard remained unchanged at coarse precision. The user then selected another account, whose exact-model local Runner Eval passed task-context and history tools with clean terminal settlement. Its dashboard attributed 56K rounded tokens to included usage and no incremental charge; ACP still supplied no token or dollar receipt. The local Product hello subsequently passed through the real browser, server, database, native runner, and authenticated completion tool. A second local Product case passed file creation, editing, command validation, an independent exact-byte matcher, and visible workspace artifact presentation. The merged-source local Product question and revision-bound Plan approval also passed browser response and semantic-tool continuation. Native Cursor interactions, restrictive permissions, restart recovery, and Daytona execution remain required qualification gates.
|
||||
|
||||
The reference is the runner's Codex app-server integration and its closed thread-item inventory in `src/provider-events.ts`. Cursor ACP and its private extension methods are the transport; the legacy Cursor adapter is unchanged.
|
||||
|
||||
@@ -119,6 +119,12 @@ The local Product hello first stopped at agent creation with HTTP 422 before any
|
||||
|
||||
The local file-edit Product case passed at source `fe132224c2b30a8d9ce7b46cea38b8760af233fc`, from 19:44:43.582 to 19:45:24.406 UTC. All seven matchers passed, including an independent exact-byte read of the 24-byte final file. A native shell command created then rewrote the file and asserted the expected bytes; tool lifecycle and output were retained. The inspected browser screenshot shows the file, a downloadable workspace artifact card, edited-file activity, the completion marker, and Done. Cleanup passed. This is workspace artifact discovery and presentation evidence, not provider-reported diff projection. The account Usage page attributes a 19:44:59 UTC Luna row with 84.1K tokens, Included in Pro Plus, and zero incremental cash. Metered dollars remain unknown; the conservative list-price bound is $0.102, not an invoice. The trace also confirms a meaningful remaining field gap: native command `rawOutput.exitCode:0` survives in serialized output, while canonical `exitCode` remains null; extracting only validated command results is a P2 follow-up.
|
||||
|
||||
The merged-source local question Product case passed at `a7e01a0cec397dd5048f5d5b5825658dc6e91450`, from 20:04:44.147 to 20:05:52.691 UTC. Its two expected provider runs submitted at 20:05:00.738 and 20:05:30.525 UTC, with no retry. The real `request_human_input` semantic tool produced a pending single-choice question, the browser selected Cobalt through the public response endpoint, the answered interaction woke the assignee, and the task completed with one final marker. Both pending and final screenshots were inspected; all six terminal matchers, lifecycle invariants, and cleanup passed. Bounds were 120 seconds per turn, 300 seconds overall, and a $2 reservation. Native usage is unavailable. The dashboard attributes Included Luna rows at 20:05:01 UTC (35.5K tokens) and 20:05:35 UTC (42K tokens), with zero incremental cash; metered dollars remain unavailable. A conservative $0.10 list-price allowance is not an invoice. This is semantic interaction and continuation evidence, explicitly not qualification of native `cursor/ask_question`, server restart recovery, or plan decisions.
|
||||
|
||||
The local Product Plan case also passed on the same frozen source `a7e01a0cec`: 20:09:56.429–20:10:49.114 UTC, two expected turns, six passing terminal matchers and no invariant failures. The inspected UI displayed the complete two-step Plan at revision 1. The pending confirmation's `target.revisionId` exactly equaled the displayed document's `latestRevisionId`; it was accepted before continuation and successful completion. Both account Usage rows (48.5K and 43.7K) were Included with zero incremental cash; native metered dollars remain unavailable. This covers semantic `write_document` plus `request_human_input` confirmation, not native `cursor/create_plan`.
|
||||
|
||||
The subsequent server-restart case is **not qualified**. Its first launcher attempt failed before any provider call because the task's temporary Unix socket path exceeded the macOS limit; the zero-prompt failure remains recorded. An explicitly authorized infrastructure replacement used a short canonical private path and produced the required pending question. During the requested restart, embedded PostgreSQL failed `semget` because the host semaphore limit was exhausted. No answer or continuation occurred. The original result remains failed (`transient_infrastructure`), including failed API cleanup verification; a separate process inspection found no surviving task-owned server, PostgreSQL, runner, or provider process. Billing for that one completed question turn is pending dashboard reconciliation. No additional Product attempt was made.
|
||||
|
||||
The first attempt also exposed the shared live-eval layer's rejection of missing usage. The foundation now retains explicit unavailable-usage records for diagnostic candidates, leaves the numeric receipt ledger empty, preserves the response for grading, and keeps unknown aggregate costs unknown across mixed turns. This fix does not retroactively turn the retained failed attempt into a pass.
|
||||
|
||||
[Cursor's Grok Bot billing documentation](https://cursor.com/help/grok-bot/plans) says linking SuperGrok grants Grok Bot usage while leaving the Cursor plan unchanged. [Cursor's pricing page](https://cursor.com/pricing) lists Composer for free Hobby and frontier models for paid plans. These documents and model-list presence do not establish entitlement for a particular CLI prompt. The operator selected a replacement Pro+ account; its exact Luna configuration was echoed successfully, with no automatic model substitution.
|
||||
@@ -141,4 +147,4 @@ This source audit follows pinned native update → ACPX runtime → `canonicalPr
|
||||
| Task numeric `durationMs`, optional accepted `planUri` | Native task/plan extensions | Duration is visible in summary; no numeric delegation field. No plan URI is returned because no plan artifact is registered | P2: typed duration; only return an actually registered plan URI |
|
||||
| Session list, model parameters, generic mode control | Confirmed native ACP methods | No operator UI or cross-session discovery API in this integration; recovery loads only the runner-owned exact session | P2: explicit company-scoped controls; authenticated model catalog first |
|
||||
|
||||
True steering, native queueing, fork/resume, native usage receipts and interactive child questions are absent from this pinned ACP implementation as described above. Their absence is distinct from the implemented-but-unused fields in this table. Remote team hooks, actual artifact traces, authenticated terminal settlement and Linux/Daytona behavior remain unverified, not confirmed absent.
|
||||
True steering, native queueing, fork/resume, native usage receipts and interactive child questions are absent from this pinned ACP implementation as described above. Their absence is distinct from the implemented-but-unused fields in this table. Remote team hooks, provider-native artifact traces, interruption settlement and Linux/Daytona behavior remain unverified, not confirmed absent.
|
||||
Vendored
+287
@@ -342,6 +342,293 @@
|
||||
"conservativeListCostUpperBoundUsd": 0.102,
|
||||
"listCostBoundBasis": "Rounded dashboard token count bounded conservatively at the maximum listed $1.20 per million token rate; not a billing receipt."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cursor-product-question-merged-20260928",
|
||||
"family": "product-e2e",
|
||||
"case": "extended-harnesses.runner-acpx-cursor.local.question-resume-complete",
|
||||
"runnerSourceRevision": "a7e01a0cec397dd5048f5d5b5825658dc6e91450",
|
||||
"suiteDefinitionHash": "e75cb2222d2f52ec3a2a425211d195d36b95882de2cb9ed0ad93231b7c42768a",
|
||||
"packSourceRevision": "19ac45c4fd87b8b9f28507b3ecd57803da3f7c73",
|
||||
"providerPackDigest": "sha256:f9b1869c3d6822981518a4acfa5ffd0d8623ac555034754d92e57dabd56feadb",
|
||||
"runnerdSha256": "dadafb10a6a02f2046798ae4104edc481d205e65724e0526a7f34ba50eb746d0",
|
||||
"runnerdSourceRevision": "527ac0e31f45a613cba1f65c25b01547f176736d",
|
||||
"requestedModel": "gpt-5.6-luna[context=272k,reasoning=medium,fast=false]",
|
||||
"startedAt": "2026-09-28T20:04:44.147Z",
|
||||
"finishedAt": "2026-09-28T20:05:52.691Z",
|
||||
"durationMs": 68544,
|
||||
"providerSubmittedAt": [
|
||||
"2026-09-28T20:05:00.738Z",
|
||||
"2026-09-28T20:05:30.525Z"
|
||||
],
|
||||
"providerTimeoutSec": 120,
|
||||
"outerTimeoutSec": 300,
|
||||
"result": "passed",
|
||||
"automaticRetries": 0,
|
||||
"submittedPrompts": 2,
|
||||
"providerRuns": 2,
|
||||
"matchers": [
|
||||
{
|
||||
"kind": "message_exact",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "message_occurrences",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "issue_status",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "run_status",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "runtime_mode",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "environment",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"invariantFailures": [],
|
||||
"taskStatus": "done",
|
||||
"cleanup": "passed",
|
||||
"resultSha256": "957fac7017a0059bbd222afa7e14b080fdea2e1c2409af5a6f0d852191ba7691",
|
||||
"screenshots": [
|
||||
{
|
||||
"id": "question-pending",
|
||||
"sha256": "6ac5022e20d275b1746a3b038dcf3949653f053523fccb395163b1cbc1766713",
|
||||
"visuallyInspected": true
|
||||
},
|
||||
{
|
||||
"id": "final-state",
|
||||
"sha256": "2dc98776e6178c8f8a494ebb4bb66938fbfee2a41aa43b67e053b0bd8838fdc1",
|
||||
"visuallyInspected": true
|
||||
}
|
||||
],
|
||||
"questionEvidence": {
|
||||
"origin": "Paperclip request_human_input semantic tool",
|
||||
"kind": "ask_user_questions",
|
||||
"selectionMode": "single",
|
||||
"pendingBeforeAnswer": true,
|
||||
"requestedAt": "2026-09-28T20:05:10.459Z",
|
||||
"resolvedAt": "2026-09-28T20:05:16.215Z",
|
||||
"answer": "Cobalt",
|
||||
"finalStatus": "answered",
|
||||
"serverRestartedBeforeAnswer": false,
|
||||
"continuationRunObserved": true,
|
||||
"nativeCursorExtensionQualified": false
|
||||
},
|
||||
"usage": {
|
||||
"nativeReceipt": null,
|
||||
"tokenUsage": null,
|
||||
"costUsd": null,
|
||||
"coverage": "provider usage unavailable; two dashboard rows attributed"
|
||||
},
|
||||
"scope": "Real local browser question, answer, wake-assignee continuation and completion. Does not qualify cursor/ask_question native RPC, native plan decisions, restrictive permissions, restart recovery, or Daytona.",
|
||||
"billing": {
|
||||
"source": "parent-observed account Usage rows after bounded case",
|
||||
"requests": [
|
||||
{
|
||||
"at": "2026-09-28T20:05:01Z",
|
||||
"tokensDisplay": "35.5K"
|
||||
},
|
||||
{
|
||||
"at": "2026-09-28T20:05:35Z",
|
||||
"tokensDisplay": "42K"
|
||||
}
|
||||
],
|
||||
"modelLabel": "gpt-5.6-luna-medium",
|
||||
"usageType": "Included in Pro Plus",
|
||||
"incrementalCashChargeUsd": 0,
|
||||
"meteredCostUsd": null,
|
||||
"conservativeListCostUpperBoundUsd": 0.1,
|
||||
"listCostBoundBasis": "Rounded display total bounded at80,000 tokens, maximum listed $1.20/M, rounded upward; not a billing receipt."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cursor-product-plan-merged-20260928",
|
||||
"family": "product-e2e",
|
||||
"case": "extended-harnesses.runner-acpx-cursor.local.plan-approve-complete",
|
||||
"runnerSourceRevision": "a7e01a0cec397dd5048f5d5b5825658dc6e91450",
|
||||
"suiteDefinitionHash": "e75cb2222d2f52ec3a2a425211d195d36b95882de2cb9ed0ad93231b7c42768a",
|
||||
"packSourceRevision": "19ac45c4fd87b8b9f28507b3ecd57803da3f7c73",
|
||||
"providerPackDigest": "sha256:f9b1869c3d6822981518a4acfa5ffd0d8623ac555034754d92e57dabd56feadb",
|
||||
"runnerdSha256": "dadafb10a6a02f2046798ae4104edc481d205e65724e0526a7f34ba50eb746d0",
|
||||
"runnerdSourceRevision": "527ac0e31f45a613cba1f65c25b01547f176736d",
|
||||
"requestedModel": "gpt-5.6-luna[context=272k,reasoning=medium,fast=false]",
|
||||
"startedAt": "2026-09-28T20:09:56.429Z",
|
||||
"finishedAt": "2026-09-28T20:10:49.114Z",
|
||||
"durationMs": 52685,
|
||||
"providerSubmittedAt": [
|
||||
"2026-09-28T20:10:09.422Z",
|
||||
"2026-09-28T20:10:33.832Z"
|
||||
],
|
||||
"providerTimeoutSec": 120,
|
||||
"outerTimeoutSec": 300,
|
||||
"result": "passed",
|
||||
"automaticRetries": 0,
|
||||
"submittedPrompts": 2,
|
||||
"providerRuns": 2,
|
||||
"matchers": [
|
||||
{
|
||||
"kind": "message_exact",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "message_occurrences",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "issue_status",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "run_status",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "runtime_mode",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"kind": "environment",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"invariantFailures": [],
|
||||
"taskStatus": "done",
|
||||
"cleanup": "passed",
|
||||
"resultSha256": "3bfa8d5f62ae827e73bc0aabb496f8aefdf55338ada76985b9222485d4fd58d2",
|
||||
"screenshots": [
|
||||
{
|
||||
"id": "plan-pending",
|
||||
"sha256": "ef025fedfe201da0e2a8e31f8fdd2b14d9d9e4248e2c5f2a310410915e5ea98c",
|
||||
"visuallyInspected": true
|
||||
},
|
||||
{
|
||||
"id": "final-state",
|
||||
"sha256": "bd7ad23c19903a4df63482a1b89642093fc74526fdae3331416986f5a0cd370f",
|
||||
"visuallyInspected": true
|
||||
}
|
||||
],
|
||||
"usage": {
|
||||
"nativeReceipt": null,
|
||||
"tokenUsage": null,
|
||||
"costUsd": null,
|
||||
"coverage": "provider usage unavailable; two dashboard rows attributed"
|
||||
},
|
||||
"scope": "Real local browser Plan display, exact-revision approval, wake-assignee continuation and completion. Does not qualify cursor/create_plan native RPC, restrictive permissions, restart recovery, or Daytona.",
|
||||
"planEvidence": {
|
||||
"origin": "Paperclip write_document and request_human_input semantic tools",
|
||||
"kind": "request_confirmation",
|
||||
"revisionNumber": 1,
|
||||
"pendingBeforeApproval": true,
|
||||
"requestedAt": "2026-09-28T20:10:21.718Z",
|
||||
"resolvedAt": "2026-09-28T20:10:25.286Z",
|
||||
"finalStatus": "accepted",
|
||||
"confirmationTargetsDisplayedRevision": true,
|
||||
"continuationRunObserved": true,
|
||||
"nativeCursorExtensionQualified": false
|
||||
},
|
||||
"billing": {
|
||||
"source": "parent-observed account Usage rows after bounded case",
|
||||
"requests": [
|
||||
{
|
||||
"at": "2026-09-28T20:10:09Z",
|
||||
"tokensDisplay": "48.5K"
|
||||
},
|
||||
{
|
||||
"at": "2026-09-28T20:10:34Z",
|
||||
"tokensDisplay": "43.7K"
|
||||
}
|
||||
],
|
||||
"modelLabel": "gpt-5.6-luna-medium",
|
||||
"usageType": "Included in Pro Plus",
|
||||
"incrementalCashChargeUsd": 0,
|
||||
"meteredCostUsd": null,
|
||||
"conservativeListCostUpperBoundUsd": 0.114,
|
||||
"listCostBoundBasis": "Rounded display total bounded at 95,000 tokens at the maximum listed $1.20/M; not a billing receipt."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "cursor-product-question-restart-merged-20260928",
|
||||
"family": "product-e2e",
|
||||
"case": "extended-harnesses.runner-acpx-cursor.local.structured-question-restart-resume",
|
||||
"runnerSourceRevision": "a7e01a0cec397dd5048f5d5b5825658dc6e91450",
|
||||
"requestedModel": "gpt-5.6-luna[context=272k,reasoning=medium,fast=false]",
|
||||
"startedAt": "2026-09-28T20:12:21.993813+00:00",
|
||||
"finishedAt": "2026-09-28T20:12:22.080838+00:00",
|
||||
"result": "failed_before_harness_start",
|
||||
"failureClass": "local_launcher_infrastructure",
|
||||
"errorCode": "tsx_ipc_socket_path_einval",
|
||||
"submittedPrompts": 0,
|
||||
"providerRuns": 0,
|
||||
"automaticRetries": 0,
|
||||
"processCleanupVerified": true,
|
||||
"billing": {
|
||||
"incrementalCashChargeUsd": 0,
|
||||
"evidence": "tsx failed to bind startup Unix socket before loading Product harness; no provider process or prompt."
|
||||
},
|
||||
"scope": "Task-owned temporary Unix socket path exceeded macOS length limit; no model or product behavior was measured."
|
||||
},
|
||||
{
|
||||
"id": "cursor-restart-20260928",
|
||||
"family": "product-e2e",
|
||||
"case": "extended-harnesses.runner-acpx-cursor.local.structured-question-restart-resume",
|
||||
"runnerSourceRevision": "a7e01a0cec397dd5048f5d5b5825658dc6e91450",
|
||||
"suiteDefinitionHash": "e75cb2222d2f52ec3a2a425211d195d36b95882de2cb9ed0ad93231b7c42768a",
|
||||
"packSourceRevision": "19ac45c4fd87b8b9f28507b3ecd57803da3f7c73",
|
||||
"providerPackDigest": "sha256:f9b1869c3d6822981518a4acfa5ffd0d8623ac555034754d92e57dabd56feadb",
|
||||
"runnerdSha256": "dadafb10a6a02f2046798ae4104edc481d205e65724e0526a7f34ba50eb746d0",
|
||||
"requestedModel": "gpt-5.6-luna[context=272k,reasoning=medium,fast=false]",
|
||||
"startedAt": "2026-09-28T20:13:24.214Z",
|
||||
"finishedAt": "2026-09-28T20:14:00.389Z",
|
||||
"durationMs": 36175,
|
||||
"result": "failed",
|
||||
"failureClass": "transient_infrastructure",
|
||||
"errorCode": "embedded_postgres_semaphore_exhaustion",
|
||||
"automaticRetries": 0,
|
||||
"authorizedInfrastructureRetryOf": "cursor-product-question-restart-merged-20260928",
|
||||
"providerTimeoutSec": 120,
|
||||
"outerTimeoutSec": 300,
|
||||
"submittedPrompts": 1,
|
||||
"providerRuns": 1,
|
||||
"promptCountEvidence": "Pending question screenshot and graceful shutdown with no interrupted active runs; replacement server failed before an answer or continuation. Post-failure API snapshot could not recover exact submission time.",
|
||||
"cleanup": "failed",
|
||||
"processCleanupVerifiedSeparately": true,
|
||||
"cleanupEvidence": "Original cleanup API check failed because server was down; subsequent task-path process inspection and replacement PostgreSQL PID check found no surviving owned processes.",
|
||||
"resultSha256": "c74c3f5e96ffc7940d7d87ca05b7ff77d7cf9912a87ec340c9db38e19a06fcfd",
|
||||
"screenshots": [
|
||||
{
|
||||
"id": "question-pending",
|
||||
"sha256": "f575e57fc975175d7122893f3bf1110195b0dd2a68b82c5101838177932dd8d7",
|
||||
"visuallyInspected": true
|
||||
}
|
||||
],
|
||||
"questionEvidence": {
|
||||
"origin": "Paperclip request_human_input semantic tool",
|
||||
"pendingQuestionVisible": true,
|
||||
"options": [
|
||||
"Cobalt",
|
||||
"Amber"
|
||||
],
|
||||
"serverRestartRequested": true,
|
||||
"replacementServerStarted": false,
|
||||
"answered": false,
|
||||
"continuationRunObserved": false,
|
||||
"nativeCursorExtensionQualified": false
|
||||
},
|
||||
"usage": {
|
||||
"nativeReceipt": null,
|
||||
"tokenUsage": null,
|
||||
"costUsd": null,
|
||||
"coverage": "provider usage unavailable; dashboard reconciliation pending"
|
||||
},
|
||||
"scope": "Infrastructure failure after one completed pending-question turn; does not qualify server-restart recovery. Original failed cleanup and evidence retained."
|
||||
}
|
||||
],
|
||||
"newAccountDiscovery": {
|
||||
|
||||
Reference in new issue
Block a user