Skip to content

1.0.0-alpha.52: Cursor workers first-class (CURSOR-ISCI) + queued fixes - #110

Merged
AlbSar merged 17 commits into
mainfrom
alpha52/cursor
Oct 22, 2026
Merged

AlbSar merged 17 commits into
mainfrom
alpha52/cursor

Conversation

@AlbSar

@AlbSar AlbSar commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

Summary

1.0.0-alpha.52: Cursor workers become first-class (CURSOR-ISCI, pre-beta, owner 2026-10-22), plus two queued fixes.

  • Observation: a Cursor attempt now reports derived turns, tokens (only from four valid counters), duration and tool calls. It also ends with a real session.ended, so it no longer stays "running".
  • Report gate: the final report comes from the worker's single, last terminal answer (final-text-json), and the existing report gates now apply to Cursor tasks.
  • Model evidence: session-start-name with two new verdicts:
    • start-name-matched: accepted by criteria and shown.
    • provider-chosen: Cursor auto, where the model choice is left to Cursor.
    • An unknown name is held for a human. Another model's name is substituted, which fails.
    • verified is unchanged.
  • Catalog: a packaged cursor-cli-subscription seed with measured session-start names. The worker image receipt records the Cursor version.
  • Queued fixes:
    • esbuild install script approved in allowScripts.
    • The delivery-queue e2e flake was in the test harness: the PTY driver now waits for the command's own exit instead of killing it after 2 s.

Evidence

  • Review: Astra REVISE 2730 on 101bf1c1 asked for R1 (token counters) and R2 (terminal sequence). Both were fixed in 8c4564d8 and PASS 2732 on 0af045ba.
  • Full suite (once, on 101bf1c1): 1097 files, 10095 passed, 8 skipped, 0 failed. The REVISE fix is confined to the Cursor path. It ran as targeted tests: red 21 → green 36, and 7 files / 108 tests with Docker and bwrap.
  • Static checks: typecheck, ESLint, lint-arch and lint-docs pass with 0 findings.
  • Plan, probes, lane reports and logs: in the lead's proof folder CURSOR-2026-10-22. This includes the real Cursor streams and the measured init names.

Doors and blast radius

  • Two-way for Claude/Codex:
    • Their normalizers and collectors are unchanged.
    • Their records keep the v2 verification schema.
    • There is no ledger or protocol change.
  • One-way-ish for Cursor data: alpha.51 cannot read Cursor profiles, evaluations, v3 verification events, or a catalog that has reportedNames.
    • The Cursor catalog is registered only after the alpha.52 switch is final.
    • After registration, rolling back to alpha.51 requires a backup restore, not a pointer flip.
  • Not closed by this PR: C7 live acceptance (a real Cursor card end-to-end on N1 in the container) stays open.

🤖 Generated with Claude Code

https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob

AlbSar and others added 17 commits October 22, 2026 20:46
…eport channel (CURSOR-ISCI C0/C1/C3)

- C0: real cursor-agent 2026.10.19-6bbf2c4 stream-json captures as fixtures (probe, probe2 tool calls,
  auto, killed without result); only the host probe directory is replaced by /workspace, ids kept.
- C1: normalizeCursorLine maps system/init, thinking, assistant, tool_call and result onto the existing
  worker event kinds (no new kind, schema v1): tools by a data table (unknown keys stay `other` and are
  counted unmapped), turns derived from assistant events, camelCase usage tokens, null cost, no models list.
  The line observer selects its normalizer by the new registry capability `eventStream` instead of
  provider literals (the hardcode ratchet refuses new slug dispatch); two resolved allowlist rows removed.
- C3: registry `structuredReport` accepts the flagless `final-text-json` channel (cursor entry set). Preflight
  treats it as supported without a help flag, no argv is added, the instruction + schema are appended to the
  prompt after custody validation, and the collector (chosen by channel) reads the successful result text,
  unwrapping only one whole fenced block, then validates/redacts with validateFinalReport.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed / provider-chosen verdicts (CURSOR-ISCI C2)

Owner K1/K2 2026-10-22: a CLI that reports only the model's display name at
session start gets an honest verdict; `verified` keeps its meaning.

- provider-catalog: modelUsageEvidence `session-start-name`; catalog model v3
  metadata `reportedNames[{name,cliVersion,source,observedAt}]` and
  `selection: 'provider'`; one name per channel model, CLI channels only,
  bounded channel total (document parse and partial ledger merge).
- Frozen pin evidence (`reportedNames`, `otherReportedNames`, `providerChosen`)
  derived from the catalog at Run admission (prepareWorkerEffortAdmission ->
  compile/bind), re-checked by admitWorkerModels (BINDING_MISMATCH); absent
  when the catalog has none, so Claude/Codex profile bytes are unchanged.
- verifyWorkerModels: provider-chosen / start-name-matched / substituted
  (name of another model) / unverified (missing or unrecorded name).
  New statuses are sealed as model.verification v3; all others stay v1/v2.
- Evaluation: verdict enum widened; session-start-name unverified is held
  ('unknown'), matched and provider-chosen accepted by criteria, substituted fails.
- Legacy unstamped records keep reading as `none`.
- Monitor line EN/TR texts; cursor registry capability set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
Conflicts resolved as the union: cursor entry keeps eventStream + final-text-json
report (C1) with modelUsageEvidence session-start-name (C2); capability mirror carries both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…wn credential secret

The cursor credential is only the access token, so known-secret redaction can only
mask that value; the fixture secret of the other providers is not a Cursor secret.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…image receipt (CURSOR-ISCI C4+C5)

C4: assets/model-catalog/cursor-cli-subscription.json (owner K2 narrow set + auto with selection provider; model-id variants carry a
fixed-model effortBinding, composer-2.5/auto carry none). reportedNames only where measured on a logged-in host (Composer 2.5, Auto).
Seed list in --seed help EN+TR, fixtures, tests.
C5: install.mjs records cursor: { version, installerSha256 } in installed.json; cursorInstallerSha256 kept.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ursor version (C4+C5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
… model-id variants

Owner re-logged Cursor 2026-10-22; names from stream-json system/init on cursor-agent
2026.10.19-6bbf2c4 (proof CURSOR-2026-10-22/init-names). All seven names distinct;
init names differ from --list-models text (e.g. 'Claude Opus 5 300K High').

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…pm 11.20 advisory; future npm blocks unreviewed scripts)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…R, CHANGELOG, PLAN, ARCHITECTURE, version bump to 1.0.0-alpha.52

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…a 2 s view window (DELIVERY-QUEUE-E2E-FLAKE)

Root cause of CI run 39778067228 (node 26 shard 1): `s.list()` drives the
shipped `task integration-queue-list` with no steps, so the PTY driver's
post-step window (2 s, then SIGTERM/SIGKILL and status 'stopped') was the
whole budget for Node startup, dist load, ledger read and render. On a
loaded host the command took longer and the test read 'stopped' as its
exit status. Not a product or queue/supervisor race.

The driver now takes an optional `until-exit` mode: the program's own exit
is the end condition, bounded like any step (40 s), and past that bound it
returns a 'timeout' result (cliInPty throws "waited for \"exit\"") instead
of a killed status. Views keep the 2 s stop. The shared fixture cliInPty
uses it; the identical copies in the intent and reattempt e2e files now
import the fixture's instead of carrying the same latent flake.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xit (DELIVERY-QUEUE-E2E-FLAKE root cause)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…ivery-queue e2e harness fix

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…pen (Astra 2730 S1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob
…t-json enforces one last terminal result (REVISE 2730 R1+R2)

R1: the Cursor normalizer emits session.ended tokens only when inputTokens, outputTokens,
cacheReadTokens and cacheWriteTokens are all safe non-negative integers; empty, partial,
string, negative, fractional, unsafe or null counters keep tokens null and count
usage-invalid. The shared num helper (Claude/Codex) is unchanged.

R2: the final-text-json collector accepts exactly one terminal result that is the last
record; a second result (either order) or any later non-blank line, including an
over-bound line, makes the report invalid, sticky to EOF. The Cursor normalizer emits one
session.ended per session and counts a later result as result:duplicate. Claude/Codex
collectors and normalizers are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rs) + R2 (final-text-json single terminal result)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrXPpzy6N7zFwchFM6Adob

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

@AlbSar
AlbSar merged commit 4166bfb into main Oct 22, 2026
41 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant