Skip to content

docs(tui): COR-20 offline + rate-limit lock_v2 scenes - #67

Merged
Mathis (echobt) merged 5 commits into
mainfrom
cursor/cor-20-lock-offline-rate-limit-9665
Sep 13, 2026
Merged

Mathis (echobt) merged 5 commits into
mainfrom
cursor/cor-20-lock-offline-rate-limit-9665

Conversation

@echobt

@echobt Mathis (echobt) commented Sep 13, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds designer and runtime lock_v2 boards for offline (network / unreachable) and rate-limit (HTTP 429 / Retry-After) at both 40×12 and 120×40.

Merged origin/main (5382162, harness #66) into this draft — no force-push. Head: 5972640. lock_v2.rs scene construction lives in lock_v2_boards.rs / lock_v2_scenes.rs as on main; apply_offline_rate_limit_scene is wired there. Lock-red system copy lives in system_message_is_error (offline, Rate limited, context limit) so rendering.rs does not grow past main’s line-count debt and 429 bodies stay dim. error-unavailable and quota-exhausted are unchanged. permission-prompt* boards are not touched. Designer boards were not redesigned.

Runtime matches designer chrome:

  • offline / rate-limit titles error-red #F87171; rate-limit body dim #6B7280
  • held composer placeholders (Waiting for network — your work is saved / Add a follow-up — held until the rate limit resets; narrow shorten OK)
  • footers Enter:retry | Ctrl+x:shortcuts and Enter:retry | /usage:details
  • narrow offline body Reconnect — your work is saved.
  • narrow rate-limit body Too many requests — try again in 2m. (compact; keeps 2m timing)

Linear: COR-20

Test plan

  • python3 tools/render_lock_v2.py --only offline,rate-limit --index (designer PNGs + txt + index)
  • Runtime re-render of offline + rate-limit at both sizes only
  • Chrome hex spot-check (#000000 / #F5F5F5 / #6B7280 / #F87171 titles; body dim on rate-limit; zero violet)
  • sha256 uniqueness: new boards distinct from each other and from error-unavailable / quota-exhausted
  • Zero competitor brand strings
  • cargo fmt --all -- --check
  • cargo test --no-default-features -p cortex-tui --lib lock_v2 — 18 passed
  • cargo test --no-default-features -p cortex-tui --lib lock_v2_network — 2 passed
  • cargo test --no-default-features -p cortex-tui --lib lock_palette — 4 passed
  • cargo test --no-default-features -p cortex-tui --lib views::minimal_session — 21 passed (1 ignored)
  • TUI / snapshot tests for every surface this PR touches
  • python3 scripts/readiness/quality.py --base origin/main — 0 regressions (after extracting lock-red copy)
  • cargo audit (not re-run locally; CI Security Audit passed on the merge commit)
  • Source/dependency policy verified against origin/main locally after the line-count fix
  • Local functional/security QA of the new lock boards

Greptile (@greptileai) requested.

Attestation (required)

I attest that:

  • Security reviewed — auth, exec/sandbox, path traversal, network egress, and secret handling in this diff were reviewed. No secrets, tokens, or keyring dumps are in the change.
  • Product-facing errors — user-visible failures use Cortex product copy. API-down paths still say The coding service is temporarily unavailable. Offline / rate-limit use distinct Cortex-only copy. No raw provider, SDK, or transport names.
  • TUI verified — lock_v2 scene list, uniqueness, title/body colors, held composer, and footer tests cover the new scenes; designer + runtime frames remain at both sizes. No interactive TTY session in this environment.
  • Tests added — unit tests cover the new scene ids and assert they are distinct from API-down and quota-exhausted, with error-red titles, dim bodies, held chrome, and compact 40×12 copy. No mocks that report success.
  • No secrets — no API keys, WorkOS secrets, R2/AWS credentials, or .env files are included.

Risk

Docs / lock-harness plus session chrome hold flags for offline and HTTP 429. Merge brings harness #66. No auth, exec policy, sandbox, release, or API-contract change from the COR-20 delta. No new feature flag. error-unavailable / quota-exhausted / permission-prompt* unchanged. Draft — do not merge until CI + Greptile are green.

Open in Web Open in Cursor 

Add designer and runtime lock boards for network-offline and HTTP 429
rate-limit at both 40x12 and 120x40. Leave error-unavailable and
quota-exhausted unchanged.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
@cursor

cursor Bot commented Sep 13, 2026

Copy link
Copy Markdown

Greptile (@greptileai)

Hold composer + footer for offline and HTTP 429; paint titles error-red
and bodies dim. Re-render runtime PNGs only.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
@cursor

cursor Bot commented Sep 13, 2026

Copy link
Copy Markdown

Greptile (@greptileai)

@greptile-apps

greptile-apps Bot commented Sep 13, 2026 •

Copy link
Copy Markdown

Greptile Summary

Adds dedicated offline and HTTP 429 lock-screen scenes with held composer states, recovery actions, compact narrow-terminal copy, and preserved context-limit error styling.

Confidence Score: 5/5

Safe to merge; there are no outstanding blocking issues.

All previously reported issues are resolved. The held composer and recovery-footer behavior was fixed as described by cursor[bot]; the narrow-screen transcript copy was updated to the compact variants; and context-limit messages were restored to error styling without applying that styling to the rate-limit body. No outstanding findings remain.

Files Needing Attention: None.

Reviews (6): Last reviewed commit: "fix(tui): keep context-limit lock-red wi..." | Re-trigger Greptile

Comment thread src/cortex-tui/src/lock_v2_network.rs Outdated
Comment thread src/cortex-tui/src/lock_v2_network.rs Outdated
# Conflicts:
#	src/cortex-tui/src/lib.rs
#	src/cortex-tui/src/lock_v2.rs

Co-authored-by: Mathis <echobt@users.noreply.github.com>
@cursor

cursor Bot commented Sep 13, 2026

Copy link
Copy Markdown

Greptile (@greptileai) merged origin/main (5382162 / #66) into this draft at aeb77ec (no force-push). P1 held composer/footer and P2 compact 40×12 copy are on this head in lock_v2_network.rs, wired through lock_v2_boards.rs after the lock_v2 split. Offline + rate-limit lock_v2 PNGs at 40×12 and 120×40 preserved. permission-prompt* not redesigned. Please re-review.

Comment thread src/cortex-tui/src/views/minimal_session/rendering.rs Outdated
Co-authored-by: Mathis <echobt@users.noreply.github.com>
@cursor

cursor Bot commented Sep 13, 2026

Copy link
Copy Markdown

Greptile (@greptileai) head is now 2c94a29 (after aeb77ec merge of origin/main). Source-policy line-count regression on rendering.rs is fixed by moving lock-red system-copy detection to system_message_is_error; offline + rate-limit PNGs at 40×12 and 120×40 unchanged; permission-prompt* still untouched. Please re-review this SHA.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
@cursor

cursor Bot commented Sep 13, 2026

Copy link
Copy Markdown

Greptile (@greptileai) head 5972640. Context-limit lock-red restored with a context limit needle (not bare limit, so HTTP 429 bodies stay dim). Offline/rate-limit PNGs 40×12+120×40 preserved. Draft, not merging. Please re-review.

@echobt

Copy link
Copy Markdown
Contributor Author

Designer cli LOCK — COR-20 offline + rate-limit

Verdict: LOCK (chrome lockable; undraft/squash when CI + Greptile green).

QA on head 5972640 runtime PNGs (40×12 + 120×40):

  • Palette: #000 / #F5F5F5 / #6B7280 / #1A1A1A/#262626 / accent #1F4945 / error #F87171
  • Zero violet / cyan / competitor brand strings
  • Distinct boards vs error-unavailable / quota-exhausted; held composer + retry footers OK
  • Linear COR-20 already Already designed

Alexa (@alexa) chrome is lockable — auto-merge OK once Protect/CI/Greptile settle. Do not redesign permission-prompt*.

@echobt
Mathis (echobt) marked this pull request as ready for review September 13, 2026 16:30
@echobt
Mathis (echobt) merged commit 623ad25 into main Sep 13, 2026
21 checks passed
@echobt
Mathis (echobt) deleted the cursor/cor-20-lock-offline-rate-limit-9665 branch September 13, 2026 16:30
cursor Bot pushed a commit that referenced this pull request Sep 13, 2026
Keep interactive, overlay, and selection dispatch under the source
policy complexity cap now that #67 is on main.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Sep 13, 2026
Keep interactive, overlay, and selection dispatch under the source
policy complexity cap now that #67 is on main.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Sep 13, 2026
Keep lock PNG blobs from #67/#69/#70. Wire TodoWrite into the live
checklist, clamp compact shortcut hits, and drop stale stopped copy.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Sep 13, 2026
Keep interactive, overlay, and selection dispatch under the source
policy complexity cap now that #67 is on main.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Sep 13, 2026
Keep lock PNG blobs from #67/#69/#70. Wire TodoWrite into the live
checklist, clamp compact shortcut hits, and drop stale stopped copy.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Sep 13, 2026
Keep interactive, overlay, and selection dispatch under the source
policy complexity cap now that #67 is on main.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Sep 13, 2026
Keep lock PNG blobs from #67/#69/#70. Wire TodoWrite into the live
checklist, clamp compact shortcut hits, and drop stale stopped copy.

Co-authored-by: Mathis <echobt@users.noreply.github.com>
Mathis (echobt) added a commit that referenced this pull request Sep 13, 2026
* feat(tui): residual lock chrome for shortcuts, goal, composer

Interactive /shortcuts sheet, /goal status polish, composer hover and
Alt+Enter, denser diff/markdown locks, and distinct thinking/stop/todos
question states. COR-7/9/10/14/15 only — not offline or 429 chrome.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* chore(tui): recapture lock v2 runtime pngs

Regenerate 36×40×12 and 82×120×40 unique hashes via
scripts/render-tui-lock-v2.sh for COR-7/9/10/14/15 chrome.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* feat(tui): lock /model effort radios and custom labels

Align /model list and High/Medium/Low effort rows with lock v2
copy, gutter, and footers. Enter chooses then applies; custom
providers stay Cortex-safe. COR-13 residual only.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* chore(tui): recapture /model effort lock pngs

Runtime 40×12 and 120×40 hashes after COR-13 /model residual.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* feat(tui): lock farm modes, mcp, hover, resume, sandbox

Document Esc/Ctrl+C/Shift+Tab/Ctrl+x/F2, polish Plan/Ask/Agent and
/mcp/resume/clear/sandbox-deny chrome. Permission-prompt radios unchanged.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* chore(tui): recapture farm lock pngs

Runtime 40x12 and 120x40 proofs for mode, mcp, resume, clear, sandbox.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): split lock modules and keep custom models distinct

Extract MCP panel and session banner helpers so lock files stay under
the 1000-line source policy. Split keyboard/mouse handlers to cap
complexity. Third-party /model rows keep unique Custom labels without
vendor names.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): split key handlers after rebase onto main

Keep interactive, overlay, and selection dispatch under the source
policy complexity cap now that #67 is on main.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): align inline picker clicks with chrome

MCP, permissions, clear-confirm, and resume paint banner/search rows
above options. Hit-testing now uses that same origin so mouse selects
the visible row.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): resume picker ux contract and keyboard coverage

/sessions opens the inline resume list, not a modal stack. Cover
Ctrl+x, Shift+Tab, palette arrows, and Esc cancel in verify_mcp.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): match picker clicks when banners crowd the stack

On short terminals the update and opt-in banners collapse the
transcript, so the picker is no longer composer_y minus its height.
Click zones now use the same stack origin as paint.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): rebase lock chrome onto main picker and overlay fixes

Keep lock PNG blobs from #67/#69/#70. Wire TodoWrite into the live
checklist, clamp compact shortcut hits, and drop stale stopped copy.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): drop source-policy complexity after main rebase

Split picker-row painting and custom interactive footers so the
rebase onto #69/#70 stays at the main complexity baseline.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): apply TodoWrite checklist without dropping the queue

Apply live Working n/m from spawn args and completion output so a
full tool-event channel cannot hide the checklist.

Co-authored-by: Mathis <echobt@users.noreply.github.com>

* fix(tui): import computer lock scenes after #71 rebase

Co-authored-by: Mathis <echobt@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Mathis <echobt@users.noreply.github.com>
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.

2 participants