Có gì mới
Tính năng, cải tiến và bản sửa lỗi mới nhất trên toàn bộ CheckPt Studio.
Một số ghi chú phát hành bên dưới được đăng bằng tiếng Anh.
0.1.4-test.17
Mới nhất14 tháng 9, 2026Chi tiết
thử nghiệm
0.1.4-test.12
13 tháng 9, 2026Chi tiết
Kiểm tra !
0.1.4-test.11
13 tháng 9, 2026Chi tiết
Kiểm tra
0.1.4-test.10
10 tháng 9, 2026Chi tiết
What's New in v0.1.4-test.10
Added
- delete a project permanently, and say what that will destroy (#3874)
- an archived project's sessions and inbox leave with it (#3873)
- give App Review a way to actually exercise the app (#3771)
- an org-owned machine opens a read-only Studio, not a sign-out (#3839)
- a device page answers what is RUNNING on the machine, not what projects were opened on it (#3825)
- the approval proof survives the pipe (#3817)
- Personal or Organization at device setup (#3796)
- settings was a 1000x680 dialog that never grew — it is a screen now (#3779)
- approval-signature groundwork — content commitment and key publication (#3763)
- give a device to the org — user→org ownership transfer (#3752)
- spoken replies — state the scope, cooperate with screen readers, respect quiet hours (#3769)
- the two drawer entries that led nowhere, answered (#2487, #2488) (#3754)
- the activation events — device paired, first session, first approval (#3698)
- the public board screens what reaches it (#3674)
- Studio's events were anonymous — they now carry the account (#3687)
- Studio had no analytics gate at all — now nothing is captured before consent (#3661)
- a load target that can actually be a fleet (#3650) (#3655)
- Integrations was four screens of one flat list — split it into three rail pages and collapse the connect forms (#3670)
- consent was an island in AsyncStorage; it now follows the account (#3669)
- the web activation events — signup through subscription (#3663)
- what plan is this user actually on, and who owns Lockdown Media (#3642)
- analytics consent belongs to the account, not to one browser (#3623)
- observe whether prod has been applied, daily and without credentials (#3644)
- every event was an anonymous device — web now identifies the account (#3639)
- voting on the public feature board (#3577)
- declare the iOS privacy manifest the binary was shipping without (#3574)
- the public board's front door (#3580)
- brand the Windows installer and localise its chrome (#3586)
- a public roadmap anyone can read, logged out (#3550)
- human control of the public feedback board (#3558)
- the event taxonomy — names are a schema, so decide them once (#3535)
- put Dave and Gulsah in Lockdown Media Inc. on the Team plan (#3538)
- the generator grid gets its brand marks (#3517)
- branded drag-to-install window for the macOS DMG (#3540)
- evaluate approval prompts against stored rules and auto-approve on match (#3494)
- feedback votes table + publication/moderation columns (#3510)
- in-app analytics consent control (#3478)
- honour Global Privacy Control — the banner asked people who had already answered (#3468)
- backend exceptions were being reported to nobody (#3457)
- rebuild the Sessions control bar, and make the launch wait say what it is (#3449)
- Stripe Tax, behind a flag, so the registrations stop blocking the code (#3408)
- the admin console has no password (#3358)
- reclassify service ↔ task in the wizard, persisted as an override (#3340)
- record the over-cap state a downgrade leaves, and tell the account holder once (#3319)
- Orbit takes over the 404, error and suspense screens (#3256)
- a kill switch that does not need a deploy (#3290)
- async release-notes curation, visible outcomes, and a workable editor (#3266) (#3269)
- watch production between deploys, and stop claiming it's up (#3095)
- record ToS/Privacy acceptance at signup, and gate age (#3243)
- make the promised data export real (GDPR Art. 20) (#3242)
- brand marks for every framework, service engine and agent (#3247)
- the push prompt is asked once, with a reason in front of it (#3250)
- the account-level notification class — billing and security events reach a person (#3097)
- the review screen runs on real data, and the flag it hid behind is gone (#3176)
- hands-free mode — a screenless conversation (#3076)
- seal the notification-history body at rest and on both read planes (#3117)
- the six machine-origin events reach the bell (#3087)
- serve per-check CI detail and PR review comments (#3093)
- a daemon secret.* op family, so env secrets land on the device that reads them (#3070)
- gate notification routing, email cadence & chat-started tasks (#3084)
- stamp every account-scoped cache, defer an unreadable approval, and give a service runtime an owner (#2853) (#3080)
- prove a prod deploy worked, don't assume it (#3069)
- PR queue kanban + swimlane layouts (#274) (#3066)
- DEK-encrypt the digest queue's content and cut its TTL to 16 days (#3056)
- give org-owned webhook destinations a surface (#3048)
- tell a member what they lose before they confirm leaving an org (#3050)
- discover compose files and Procfiles outside the repo root (#2899)
- cloud worker recipe + ephemeral lifecycle (#3022)
- give inbound chat a UI, and a /link-chat page that isn't a 404 (#3024)
- prove the phone's device id instead of asserting it (#3029)
- the phone can say where a project's events go (#3021)
- surface delivery failures — a dead channel is announced, not just counted (#3004)
- human-quality service display names (#2898)
- auto-checkpoint every turn — the undo point is always one turn back (#2980)
- the connector gate resolves per row, from that row's owner (#2999)
- a datastore pass, so Workspace.orm stops being inert (#2941)
- the wizard's Project name says it is required (#2938)
- compose parser v2 — YAML lib, extends, IPv6, override merge (#2903)
- the three rungs Studio could see, and the fourth it sent you to your phone for (#2994)
- a session on an org worker runs as the member who started it (#2974)
- connector docs + the ecosystem chips #1312 took away (#2964)
- gate connector management — one key, owner-scoped, on three planes (#2963)
- a routing rule matches a SET of events, not one category (#2983)
- desktop notifications, and the toast you don't get for the window you're looking at (#2975)
- org workers on a BYO relay — redeem enrollment through the identity boundary (#2973)
- custom webhook destinations — outbound HMAC signing, an SSRF guard, and per-destination health (#2953)
- an org connector switched off blocks the server for everyone (#2965)
- WebSocket/SSE inspector — watch on inspector.read, frame send behind inspector.exec.ws (#2743)
- the phone says where the work runs, and why one more will not start (#2956)
- project portability tiers — pinned projects, a project-first picker, and graduation (#2947)
- run the D2 override layer inside detect() (#2896)
- resolve
nrscript-runner indirection (#2868) - N-entry per-agent MCP config provisioning (#2940)
- one VCS event, one post per destination (#2900)
- geometry that outlives the PTY, and a barrier for "done writing" (#2951)
- resumable sessions — pick your work back up after a crash, reboot or shutdown (#2935)
- the concurrency wall names what is running, and offers to stop one (#2950)
- connector management — catalog, scopes, per-project opt-out, audit (#2932)
- every advertised channel real or removed — email wired, SMS deleted, desktop withheld (#2927)
- promote the runtime DetectionResult validator into the package (#2890)
- rspack and rsbuild are framework CLIs, not tool tasks (#2866)
- decompose a nested composite, and let chain ambiguity survive (#2904)
- at-cap recovery — the refusal names what is running, and offers to stop one (#2925)
- Studio sidebar goes project-first; devices become availability metadata (#2751)
- wire the connector gate — proxy, approvals, deny handling, audit (#2842)
- safe shutdown — one "you have active sessions" treatment at every boundary that means leaving (#2895)
- one decision engine — reconcile the two routing planes, delete the loser (#2893)
- tell the other phones when a sound changes (#2891)
- shared-worker credential resolution — org-owned VCS connections, the clone ladder, and a preflight (#2858)
- device-code enrolment replaces pairing (#2844)
- gate session sharing & export at Pro (#2852)
- an org's worker pool on the web, with owner/admin revoke (#2854)
- the event catalog, and the events that were never raised (#2631)
- rebuild the session top bar as one aligned row (#2855)
- org worker slots — a pooled entitlement, and an org that pays for it (#2801)
- surface session export + share from the drawer (#2354) (#2837)
- curated connector catalog + BYO, with row provenance (#2843)
- org workers become routable — owner-scoped proxy plane + a picker that names them (#2738)
- start Add service from a component picker, not a blank form (#2830)
- one release button, a dialog that fits, and platforms you can actually combine (#2791)
- connector credentials — keychain storage + device-local OAuth (#2754)
- shareable read-only session replay links (#2756)
- start an agent task from Slack or Discord (#2784)
- a rail that discloses instead of hiding, and panels that actually draw (#2803)
- gate session checkpoints behind Pro (Class B daemon) (#2772)
- an org worker can publish a session, attributed to the member who started it (#2740)
- session gist — what a session is about, and where you left off (#2752)
- org governance — permitted backends, no-literal policy, reference audit (#2750)
- external secret managers via vendor CLI + .checkpt/env-sources.toml (#2746)
- sibling-worktree and sibling-project providers (#2741)
- gate the inbound VCS webhook pipeline at Pro (vcs_event_stream) (#2760) (#2769)
- approve/deny an agent action from Slack or Discord (#2749)
- infer project-vs-session scope from worktree variance (#2739)
- auto-pull on session start — clone+attach on the target device when unmounted (#2572)
- markdown session summary + diff/patch export (#2737)
- every restore takes a safety checkpoint first (#2735)
- MCP connector registry — entity, CRUD, scoping and distribution (#2629)
- account-wide merged project list with per-project device availability (#2721)
- terminal recording — a session's output ring as an asciicast (#2576)
- inbound Slack + Discord apps and chat identity mapping (#2654)
- session-drawer Checkpoints UI (#2328) (#2638)
- MCP server inspector — catalog on inspector.read, tool call behind inspector.exec.mcp (#2645)
- inbox triage on the relay tier — snooze/dismiss actually leaves the feed (#2640)
- BYO relay — the operator sets the limits, not the hosted plan (#2574)
- the projects folder is editable from Settings (#2675)
- test a clone URL before cloning it (#2679)
- delete a release that never shipped, and give its number back (#2674)
- one empty-state component, even hero tiles, always-four quick actions (#2662)
- seed the default Studio tips catalog (#2660)
- honest local-folder copy, empty-repo default, and explained-disabled controls (#2663)
- fleet parse telemetry — production as the ultimate canary (#2637)
- lift the dark ramp off flat black and give headers their own band (#2659)
- serve web's auth-gated screens from a mock, and gate the surface (#2634)
- org workers resolve their own relay map (#2636)
- sortable releases table, last-edited attribution, and layout fixes (#2646)
- session-attributed notes, drop the
notesflag (epic #2099 exit) (#2618) - the daemon evaluates approval rules (#2639)
- GraphQL inspector — introspection + a query runner that is provably a read (#2537)
- seal org-hosted session content to the org, not one account (#2624)
- checkpoint ops — restore, delete, and the four daemon verbs (#2619)
- configure expo-updates so launch binaries are OTA-capable (#2602)
- org enrollment tokens + checkptd pair --org-token (#2575)
- voice steering — approve or deny with a spoken instruction, on-device (#2547)
- wire Custom Sounds end to end and remove its flag (#2567)
- queue / broker inspector — Kafka, RabbitMQ, BullMQ, NATS (#2539)
- detect services from Nx project.json targets (#2222) (#2592)
- Linear connector (issue→session) (#2578)
- rotate the org content key forward, on an authenticated declaration (#2554)
- inbox snooze and dismiss actually work (#2596)
- the Sessions tab as cards or a table, with search and filters (#2533)
- checkpt agent — CLI surface over the Agent's OS-service machinery (#2571)
- audit the data_inspectors gate against the verb registers — derived, never listed (#2569)
- fail the PR that closes a cited matrix issue, before the merge does (#2577)
- pairing screen offers Studio and terminal, not CLI only (#2564)
- unlist post-MVP coming-soon rows for launch; promote GitHub Projects (#2360) (#2573)
- only the device running a dev server can name its address (#2536)
- GitHub Projects (v2) connector (issue→session) (#2541)
- gRPC inspector — reflection schema browser + gated call builder (#2540)
- org-owned devices — ownerType/ownerId, guards and counters (#2518)
- create flow stops asking for a directory — placement defaults into the projects root (#2535)
- resolve entitlements from the owner of the thing being worked on (#2538)
- serve the plan catalog to Studio, and ask for a billing region instead of a currency (#2546)
- env sources — persist the wizard's env, and sweep every place a value can come from (#2528)
- version-skew UX for a standalone Agent Studio doesn't own (#2534)
- org keyrings reach every door, and stop growing quadratically (#2516)
- revamp Home, add a system-metrics tile, and fix the empty Inbox (#2530)
- Jira connector (issue→session) (#2501)
- API viewer → Postman-like — collections, environments, history, auth, import/export, assertions (#2494)
- the entire agent-facing MCP surface is Pro (agent_mcp_tools) (#2517)
- Redis viewer power — value/TTL edits, pub/sub monitor, memory stats, export (#2509)
- a loopback Agent that isn't co-located stops being treated as this machine (#2515)
- per-device projects root — onboarding step + daemon settings store (#2511)
- per-owner entitlements claim, and no back-compat for relays that don't exist (#2497)
- Home, Inbox, Sessions and Devices as the phone's four tabs (#2484)
- MongoDB inspector — collections + document browse (#2492)
- mutating MCP control tools ride the approval flow (#2498)
- record who started a session, from the channel and not the body (#2500)
- remote-aware project picking for non-co-located Agents (#2490)
- remove the Community cross-device approvals cap (#2483)
- brand the app icon and splash (#2482)
- Postgres viewer power — SQL editor, EXPLAIN, export, ER diagram (#2464)
- one subscription per account, on every plane (#2428)
- wire the Notes tab to the relay's real sealed notes (#2467)
- give mobile the console's semantic palette (#2468)
- the relay derives the device id, it no longer accepts one (#2478)
- make VCS provider availability config, flag and secret together (#2474)
- guard the Compare-plans matrix localization, and fix nine leaks (#2475)
- mail catcher inspector — four products behind one closed op union (#2453)
- update dialog renders localized release notes from notes.json (#2454)
- one scrollbar across web, admin, Studio and mobile (#2414)
- session-scoped MCP inspector query tools (read-only by construction) (#2465)
- mobile deploys from admin — EAS build + internal-track submit, watched end-to-end (#2466)
- scaffold a new project straight into a repository (#2461) (#2470)
- presence is per relay — render known-but-not-connected (#2460)
- MySQL/MariaDB inspector behind the existing db verbs (#2451)
- personal vs org allowances, and the owed BYO qualifier (#2459)
- gate on resolved feature entitlements, not the plan tier name (#2457)
- session-scoped MCP control tools — services, tasks, checkpoints, env doctor (#2455)
- tell the old audience when a row stops being theirs (#2212)
- gate issue-seeded sessions behind issue_seeded_sessions (#2446)
- the mutating inspector capability, per family (#2450)
- merge on read across relays, with legible degradation (#2445)
- session-scoped MCP observe tools — logs, status, ports, diff, deps (#2395) (#2448)
- changelog renders localized summary + expandable details from notes.json (#2447)
- gate the data-plane inspectors behind
data_inspectors(#2449) - config-driven Compare-plans comparison matrix (#2432)
- force on re-detect + last-known digest on cold open (#2273)
- confidence calibration pass — reliability table, ECE, H1/H2/H3 verdicts (#2274)
- ship as a free companion, remove all in-app purchasing (#2438)
- seal project_notes title+body to the author's devices (#2431)
- pick a device, get that device's agent list (#2433)
- inject the session-scoped MCP endpoint at agent spawn (per agent type) (#2437)
- inspector framework — an engine signal, a viewer registry, and a shell (#2426)
- publish structured notes.json (all locales); demote latest.json notes to transport (#2434)
- chunked transport for mobile image input over the proxy plane (#2415)
- gate the PR / change-request queue behind change_request_queue (#2429)
- apply the Appearance editor settings to the real editor (#2430)
- sweep the Tauri commands that answer about the wrong device (#2419)
- release_note_translations — fan-out on finalize, trailing, human-review locks (#2316) (#2427)
- extend the PlanFeatureKey gate framework (#2361)
- multi-window launch configurations — scoped windows, per-window scale, saved layouts (#2388)
- MCP server scaffold with per-session token auth on /mcp/v1 (#2408)
- wrap the org key into the invite, unwrap on accept — no online teammate required (#2387)
- admin-managed "Did you know" tips (#2418)
- say so when a session ends or a project is saved or deleted (#2417)
- release curation review UI on ReleaseDetail (#2315) (#2403)
- route the session diff through the daemon so remote sessions reach parity (#2400)
- AI curation pass over a release's draft notes (#2314) (#2343)
- give sign-in and first-run the Studio scene (#2381)
- deploy-console redesign for the release detail page (#2271)
- session Files surface + open-a-changed-file from the diff lists (#2308)
- make Expo Go a working dev mode, with banners for what's off (#2312)
- stop wiping the database on deploy, launch it from the console (#2267)
- detect.* LRU + SQLite cache, force, and detect.summary (ADR 0009) (#2227)
- project Files tab on the real mount root — removes FEATURES.filesBrowser (#2245)
- deliver org invitations by email, and let an admin resend one (#2209)
- make the Services step tell the truth, and let the user correct it (#2206)
- bind getCiStatus for Bitbucket and Azure DevOps (#2216)
- Bitbucket + Azure DevOps webhook event adapters (#2210)
- CodeMirror 6 and the shared FileEditor component (#2225)
- org content key + kid-addressed keyring (#2215)
- one device↔device plane for session I/O — and a gate so it can't rot again (#2158)
- file.* op family — list, read and write a project path (#2218)
- multi-currency subscriptions across 19 launch currencies (#2112)
- env secrets actually resolve — OS keychain read + write, resolved late so nothing persists (#2198)
- make the phone the hero below lg, and stop shipping the desktop shot to phones (#2186)
- merge semantics on read paths — union devices and approvals, qualify projects by relay (#2079)
- notes get an owner and an org — private by default, promoted to share (#2163)
- close the mobile parity gap — Projects, Inbox, org templates, Home (#2183)
- fleet view — every agent session across every device on one screen (#2174)
- detector-wizard fixes (#2141, #2140, #2145) + Studio chrome pass (#2153)
- materialize context files, and an ownership ledger to make it safe (#2131)
- exhaustive route-crawl mode (OVERFLOW_MODE=all) (#2058)
- seeded session fixture for auth-gated screens (#2056)
- confirm ownership transfer, and only ownership transfer (#2116)
- section-scoped value-vs-
enleak gate (#1835) - stage releases by bump, with the server owning the version (#2110)
- connect-on-demand relay sockets, keyed by relay (#2082)
- native Android billing via the Stripe Payment Sheet (#2098)
- fail-closed overflow CI gate + per-surface baseline ratchet (#1832)
- GitLab webhook event adapter — /webhooks/gitlab now serves (#2092)
- meter cross-device approvals on the hosting daemon, never local ones (#2088)
- apps/web surface under vite dev (#2055)
- context-file manifest, path gate and handoff materialization plan (#1995)
- route relay.rest by org, so writes land on the right relay (#2078)
- fan the push token out to every registered relay (#2075)
- hold N relay connections with per-relay credentials (#2050)
- fail-closed approval gate for agent MCP tool calls (#1997)
- gate organization creation behind the Team plan (#2051)
- register on every resolved relay — N credentials, not one (#2043)
- add the mobile RN-web surface + static length-delta backstop (#2015)
- view-only devices, gated to Pro+, plus Studio plan awareness (#2036)
- relay-qualified project identity — declare the axis, key on it, store it (#2026)
- resolve every relay per org, not one URL per user (#2033)
- stamp the owning-relay hint into the push data payload (#2030)
- task run history — exit codes, durations, revisitable output (#2001)
- signed-request verification and approver authorization for Slack approvals (#1998)
- auto-fix parser regressions into a draft PR (#1996)
- anonymous QR re-pair keeps its device id by proving the key (#1951) (#2002)
- source /changelog and /docs/whats-new from the live releases feed (#2003)
- device-limit dialog offers only workers for removal (#1936) (#1988)
- report a connected phone as online, and teach the device pickers to tell kinds apart (#1991)
- expose the inspector query ops over the proxy (#1982)
- sessions replicate like devices and projects — not peer-cache fan-out (#1950)
- mobile answers prompts over the relay-brokered transport (#1932)
- enforce the ratified per-locale register in CI (#1946)
- give chat channels a workspace to belong to (#1305) (#1899)
- localize pricing plan bullets, limits & CTAs (#1834)
- a relay that is already enrolled converges instead of duplicating (#1929)
- keyboard shortcuts for pinned task quick actions (#1797) (#1925)
- Redis service inspector — SCAN-based keyspace browse (read-only) (#1914)
- relay self-enrollment — one-time token, registered key, no shared secret (#1908)
- let a service declare its port through an env var (#1916)
- Postgres service inspector — schema + data browse (read-only) (#1910)
- runner service inspector on real process state + output (#1583) (#1902)
- attribute webhook events to their project and org (#1305) (#1898)
- email notification delivery via SendGrid + Email chip (#1308) (#1648)
- mobile service inspector on real Metro state (#1587) (#1824)
- initialize starter config for a project with no .checkpt/ (#1664) (#1839)
- API service inspector — route discovery + auto-addressed request builder (#1584) (#1823)
- expose config, exec and service ops over the proxy (#1821)
- frame the wizard detect services/env as a preview (#1759)
- overflow-detection engine + Studio surface (#1744)
- services topology view on real declared deps (#1575) (#1818)
- register the Romanian (ro) locale — web switcher + backend catalog (#1385) (#1652)
- enforce allowRemoteSessions end-to-end (#1813)
- build the shared Docker install layer on every PR (#1795) (#1809)
- session output over the shared cursor/gap contract (#1542) (#1807)
- prompts to relay tier — an approval survives the originating device going offline (#1791)
- web service inspector on real dev-server state + embedded preview (#1582) (#1801)
- dependency-ordered cascade start/stop with readiness gating (#1581) (#1777)
- pinned tasks surface as session quick actions (#1568) (#1798)
- funded-turn tier — assert the in-flight hooks against a real turn (#1787)
- Discord and Teams webhook channels (#1306, #1307) (#1781)
- i18n the live-detect surface (DetectStep log + errors) (#1758)
- P3c — Python pack parity (tooling + registry-miss) (#1708)
- adopt the shared stream for devices and projects (#1541) (#1790)
- run a session's tasks in that session's worktree + env (#1567) (#1770)
- real per-service CPU/RAM sampling, process-tree inclusive (#1580) (#1768)
- Env import pane writes real config (#1560) (#1750)
- forward the whole account stream, and give the Agent a cursor (#1538) (#1767)
- session Services drawer on real daemon runtime (#1728) (#1752)
- Slack webhook channel — destinations, subscriptions, daemon dispatch (#1305) (#1670)
- alert on prod deploy failures in Slack (#1715) (#1743)
- one entity cache + cursor/gap handling, retire the per-store reducers (#1745)
- run a task in a PTY pane via a daemon-owned run (#1566) (#1737)
- per-service log capture + stream to the Logs surface (#1579) (#1733)
- health probe executor (http/tcp/exec) — real service health (#1578) (#1732)
- one cursor/gap/snapshot service for every entity (#1537) (#1714)
- shared vs per-session service lifecycle + cross-worktree ownership (#1577) (#1710)
- org-curated starter template list (#1635) (#1688)
- Env Ports pane on real daemon port allocations (#1559) (#1699)
- project Tasks tab on real .checkpt/tasks.toml (#1565) (#1665)
- guarantee sessions carry a resolvable relay project id (#1529) (#1647)
- service supervisor — spawn/stop/restart + runtime registry (#1576) (#1683)
- Romanian (ro) — Studio (#1675)
- Romanian (ro) — mobile (checkpt-app) (#1672)
- Romanian (ro) — web + backend templates (#1660)
- Go rule pack — gin/echo/fiber/chi via go.mod (P3b) (#1524)
- transactional outbox so a mutation cannot skip its fan-out (#1536) (#1682)
- authenticated encrypted peer-session channel (#1523) (#1686)
- P2 — runtime versions + non-JS package managers + unrecognised notes (#1480)
- write .checkpt/ at project creation, without the npm CLI (#1592) (#1671)
- Env editor pane on real .checkpt/env.toml (#1557) (#1668)
- project Services tab on real .checkpt/services.toml (#1667)
- subscribe-gated + compressed cross-device streaming (#1415) (#1658)
- BYO relay reads identity from the hosted relay (#1623) (#1649)
- route proxy.forward across relay instances (#1496) (#1653)
- scaffold from a house/org starter template (#1410) (#1642)
- typed project-config client + provenance model (#1556) (#1641)
- Bitbucket Cloud provider, end to end (#1303) (#1510)
- extract Makefile targets as service/task sources (#1132) (#1240)
- P1 Studio dev wiring — real detect.scan over local-IPC (ADR 0009) (#1471)
- services.toml schema gaps — scope, expanded ServiceKind, source decision (#1573) (#1633)
- device→instance presence registry + deliverToDevice primitive (#1495) (#1632)
- populate ci + agents context sections (#1131) (#1241)
- replication contract + entity registry (#1535) (#1630)
- expand env example-file allowlist — .env.sample/.env.template/.env.dist and friends (#1136) (#1139)
- commit-vs-exclude config persistence + project-creation prompt (#1554) (#1626)
- surface registry-miss as an unrecognized-framework diagnostic (#1238) (#1239)
- scaffold a project from a GitHub template repository (#1409) (#1619)
- standalone headless checkptd install + enrollment (#1620)
- tasks.toml schema — new DocKind::Tasks (#1563) (#1627)
- retire the public-tunnel transport (#1622)
- ElastiCache Redis for the relay bus + optional relay client (#1494) (#1605)
- public blog rendering + SEO — SSR, meta/OG, hreflang, sitemap (#1345) (#1603)
- enroll on confirm — defer device creation, name it at creation (#1617)
- per-locale "retry with more care" for blog translation (#1593) (#1607)
- Azure DevOps Repos provider, end to end (#1304) (#1509)
- GitLab connect + repo import, end to end (#1302) (#1499)
- assert frameworks/tools from non-optional peerDependencies (#425) (#965)
- Claude auto-translation fan-out on blog publish (#1344) (#1589)
- wizard scaffold step — recipe picker, live PTY, post-run chain (#1408) (#1591)
- UX pass across the portal and console (#1506)
- Indonesian, Vietnamese and Czech — Studio (#1371, #1375, #1383) (#1501)
- C2 — Rust rule pack (framework detection slice) (#899) (#1295)
- live-PTY agent TUI canary harness (#1065) (#1467)
- scaffold recipe registry + toolchain presence probe (#1407) (#1531)
- content model + admin CRUD + public read endpoints (#1343) (#1530)
- Home widget customization — registry + persisted layout (#1402) (#1522)
- route peer transport over the relay WS (#1414) (#1527)
- Vietnamese (vi) and Czech (cs) — apps/web + backend catalog + switcher (#1373, #1381) (#1503)
- Indonesian (id), Vietnamese (vi) and Czech (cs) — mobile (checkpt-app) (#1502)
- run a PTY command in a chosen working directory (#1406) (#1511)
- URL-locale routing + hreflang for public pages (#1342) (#1519)
- forward E2E-encrypted proxy envelopes between account devices (#1413) (#1516)
- graceful-detection guarantees — walker budget, fault isolation, invariants, fixtures (#1466)
- reject a non-existent or non-directory attach root path (#1405) (#1470)
- Home screen — cross-device monitoring station (#1401) (#1484)
- hierarchical "up" navigation — Location model + derived parent (#1441)
- SSR the public surface — React Router 7 library→framework mode (#1340) (#1396)
- widen Linux compat — build Studio in an Ubuntu 22.04 container (glibc 2.35 floor) (#1440)
- Ukrainian (uk) — apps/web namespaces + backend catalog + switcher (#1377) (#1458)
- move approval-rules CRUD to website-api (#1359) (#1450)
- match the console's palette to the web dashboard (#1446)
- uk — Studio (#1379) (#1448)
- Ukrainian (uk) — mobile (checkpt-app), incl. native OS strings (#1378) (#1447)
- dev-login → real account session + device-model correctness (#1412)
- translation-delta harness — context packs + mechanical merge (#1392) (#1394)
- localized product screenshots — one-command generation across all locales (#1418)
- revamp the admin console's look and feel (#1417)
- rebuild the auth backdrop as a rendered orbit plate (#1398)
- rebuild the logged-in portal and auth screens (#1404)
- E2EE slice 2 — recipient decrypt stack (key distribution, sealed transit, QR pinning, truthful EncryptionScreen) (#1317)
- native Windows ARM64 (aarch64) Studio build (#1395)
- Indonesian (id) — web + backend templates (#1369) (#1393)
- clone any git URL in the new-project wizard (#1391)
- version-support policy + floor-raise runbook + CI contract freeze (#1115) (#1389)
- migrate web to httpOnly cookie auth (mirror admin cookie+CSRF) (#1364)
- override-merge rule (D2, #902) (#1281)
- complete the TS/JS framework + datastore registry (#425) (#1291)
- C1 — Python rule pack (framework detection slice) (#898) (#1294)
- reply to ticket submitter by email (#1014) (#1357)
- structured feedback columns, attachments, triage list, throttle (#418) (#1212)
- redesign auth screens + add Studio sign-up & password reset (#1296)
- pre-launch site mode — public site with gated surfaces + notify-me waitlist (#1282) (#1283)
- shared Pill chip + facet-counted filter pills across the console (#1314)
- B2 — service detection + classifier (#896) (#1043)
- Studio-era site polish — meta, sitemap, closing CTA, Clerk cleanup (#1211)
- How It Works integration chip popovers + truthful ecosystem claims (#1297) (#1312)
- two-device Studio harness + one-command db:reset (#1273)
- handle Claude's /btw side questions in the terminal (#1210)
- B1 — TS/JS rule pack, first end-to-end slice (#895) (#955)
- live rule sync from quiet_hours.updated / approval_rules.updated (#1209)
- sealed-envelope foundation — keys, enrollment, v2 codecs, rotation, push hardening (#235) (#1269)
- BYO-relay server→server contract versioning + relay-min-version floor (#1278)
- Hindi (hi) translation + language switcher — checkpt-app (#825) (#1279)
- version adoption snapshots + admin Adoption view (#1171) (#1272)
- Hindi (hi) translation + language switcher (#826) (#1264)
- encrypt JWT signing private keys at rest (envelope encryption) (#878)
- Korean (ko) translation — mobile, incl. native OS strings (#807) (#1217)
- A3 — framework + datastore registries (#894) (#954)
- override-only service fields + generated TS schema (#901) (#1102)
- Korean (ko) translation — Studio (#808) (#1223)
- client update gates — Studio mandatory-update wall + mobile force-update (#1270)
- Polish (pl) for CheckPt Studio (#817) (#1267)
- Dutch (nl) — mobile (checkpt-app) (#813) (#1266)
- Korean (ko) translation — web, shared auth + backend templates (#806) (#1216)
- thin-tolerant local-IPC seam + Studio restart nudge (#1248)
- REST client contract — /version, UPGRADE_REQUIRED (426), client-BFF boundary (#1112) (#1263)
- Hindi (hi) — web + backend templates (#1262)
- org custom relay URL + Team+ management UI, propagated to Agent/Studio/mobile (#1084) (#1246)
- Chinese (Traditional) zh-Hant — mobile (checkpt-app) (#828) (#1261)
- Dutch (nl) for CheckPt Studio (#814) (#1260)
- Polish (pl) translation — web, shared auth + backend templates (#815) (#1228)
- zh-Hant — Studio (#829) (#1252)
- Dutch (nl) — web + backend templates (#812) (#1243)
- Italian (it) — mobile (checkpt-app) (#810) (#1249)
- version stamping + minimum-version floor (#1111) (#1242)
- zh-Hant (Traditional Chinese) — web + backend (#827) (#1247)
- token ratchet — guard banning raw hex, text-[Npx], gray/palette utilities in app code (#1163) (#1244)
- relay short-retention event log + vcs.backfill on Agent reconnect (#1237)
- Italian (it) translation + language-switcher enable (#811) (#1236)
- zh-Hans (Simplified Chinese) — mobile (checkpt-app) (#804) (#1235)
- P2P proxy protocol negotiation & capability handshake (#1231)
- mobile ThemeContext token adoption + fontSize/hex codemod (#1233)
- German (de) translation + language-switcher enable (#794) (#1208)
- infra manual-apply reminder + runbook procedure for pulumi env drift (#1165) (#1229)
- Studio deploys from admin — stage/publish, changelog editing, live run watching + CDN verification (#1204)
- Italian (it) — web + backend templates (#809) (#1234)
- zh-Hans — Studio (#805) (#1207)
- Studio single-channel — relay REST + pairing behind the Agent (#1189) (#1199)
- add a target-id filter to the audit log UI (#1201)
- i18n ja — mobile (#800) (#1200)
- admin gray/small-text codemod onto design tokens (#1161) (#1206)
- Turkish (tr) translation — mobile, incl. native OS strings (#819) (#1120)
- Studio native in-app subscriptions via Stripe Elements (#1177) (#1193)
- remote session start on an arbitrary online worker (#1182)
- split-panel sign-in redesign (#733) (#1094)
- wire SendGrid delivery for invitation emails (#1013) (#1057)
- web gray-text + emerald-tint codemod onto design tokens (#1160) (#1197)
- German (de) translation + language-switcher enable (#795) (#1185)
- Simplified Chinese (zh-Hans) for web + backend (#802) (#1196)
- Japanese (ja) translation + language switcher (#801) (#1198)
- releases table + Studio history backfill + read-only admin Releases page (#1170) (#1184)
- A2 — BREAKING schema adoptions from repo-scanner (#893) (#953)
- Japanese (ja) — web + backend templates (#799) (#1190)
- Studio type-scale + semantic-token codemod, uiFontScale setting (#1159) (#1186)
- Brazilian Portuguese (pt-BR) for the mobile app (#791) (#1180)
- native intent-based subscription API (#1175) (#1181)
- publish versioned public checkpt/relay image + BYO migration & compat story (#1176)
- German (de) — web + backend templates (#793) (#1183)
- Brazilian Portuguese (pt-BR) for web + backend templates (#790) (#1168)
- rem type scale + WCAG contrast fixes in design-tokens (#1166)
- Brazilian Portuguese (pt-BR) for CheckPt Studio (#792) (#1167)
- entitlements-in-token — plan/concurrency as signed claims (#1082) (#1154)
- Agent lifecycle + quit semantics — pause/resume, quit warns + stops sessions (#1128)
- resolve .checkpt/env.toml at session start — port allocation + name templating (#1117)
- Russian (ru) translation for mobile (checkpt-app) (#822) (#1150)
- Turkish (tr) translation — Studio (#820) (#1122)
- Turkish (tr) translation — web, shared auth + backend templates (#818) (#1119)
- French (fr) translation + enablement for mobile (#797) (#1121)
- asymmetric identity verification — EdDSA relay-exchange tokens + identity JWKS (#1081) (#1127)
- Russian (ru) translation for Studio (#823) (#1126)
- port components/ui primitives to semantic tokens (#731) (#1087)
- /operations service-health page + GET /admin/system/health (#1015) (#1059)
- Russian (ru) for web + backend templates (#821) (#1124)
- French (fr) for CheckPt Studio (#1116)
- Studio tray, close-to-tray, and Agent service lifecycle UX (#1106)
- French (fr) for web + backend templates (#796) (#1108)
- Spanish (es) for mobile (checkpt-app) (#1103)
- bundled daemon gets the production relay URL — service argv + spawn env (#976) (#1107)
- Spanish (es) for CheckPt Studio (#1099)
- execute .checkpt/hooks.toml lifecycle hooks (#1002) (#1089)
- grant
memberrole on organic app-account creation (#1104) - adopt ApiError error codes across the three frontends (#1034) (#1079)
- add auth.* error codes to bff-auth throw sites (#1071) (#1073)
- promote daemon → standalone always-on Agent service (#1090)
- Stripe webhook inspect + replay UI (#1011) (#1078)
- coupon + promotion-code management (#1012) (#1072)
- Spanish (es) for web + backend templates (#1088)
- A1 — walker + .checkpt/ignore implementation (#892) (#949)
- Agent proxies account-scoped relay reads; drop Studio's relay socket (#1018) (#1070)
- CLDR-plural-aware locale key-parity guard + translation glossary (#1075)
- worktree-backed session lifecycle (#1000) (#1007)
- Homebrew cask + tap for macOS brew install --cask (#1063)
- failed-payment queue — worklist for failed and past-due payments (#1061)
- wire EditProfileScreen to the real profile endpoints (#971) (#984)
- Issues tab + start-session-from-issue on real provider data (#655) (#961)
- Codex + Gemini bespoke profiles — state detection, model lists (#998) (#1062)
- allow one email to hold both an app and an admin account (#1056) (#1060)
- drain i18n allowlist to zero (#772) (#1008)
- extract user-reachable API errors to stable error codes (#832) (#1035)
- Agent auth unification — single relay credential (device + account) (#1040)
- derive ThemeContext palette from @checkpt/design-tokens (#335) (#960)
- install affordances for missing agents (#997) (#1042)
- PR list + status on real provider data (#656) (#1039)
- business + engagement metrics API and Overview charts (#1041)
- avatar pipeline — presigned S3 upload + OAuth picture seed (#968) (#980)
- shared "On this page" rail across all docs pages (#1037)
- ship the Profile tab on the real account profile (#970) (#981)
- wire recipient-locale into data-plane notification paths (#1028) (#1038)
- editable name + timezone on the Account profile (#969) (#983)
- typed spawn-failure handling for missing agent binaries (#996) (#1036)
- partial-update PUT /dashboard/profile + avatarUrl (#967) (#978)
- /billing page + expanded UserDetail billing tab (#1032)
- detect installed agent CLIs at startup (agents_detect + login-shell PATH) (#1026)
- clickable Device detail page in Studio (#1001)
- new-project wizard — real repo browser + clone from provider (#657) (#990)
- drain backend-composed content into server locale catalog (#830) (#1030)
- audit-log read endpoint + Operations audit UI (#958)
- per-client rate limiting for DB-touching WS handlers (#461) (#950)
- project_override table + IPC for layered config (#449) (#948)
- GitLab provider — descriptor + PAT auth + read adapter (#661) (#859)
- replace Overview stub with a real counts dashboard (#987)
- shared agent registry + agent-typed sessions in Studio (#1006)
- drain checkpt-app hardcoded strings to zero (#771) (#989)
- flag-dropdown language switcher with full #764 roadmap (#1005)
- root device identity in a device keypair (#925) (#940)
- drop Supporter, rebalance to Community / Pro / Team / Enterprise (#974)
- home + footer feedback, responsive nav fixes, page consistency (#982)
- Linux CLI install script (curl | sh) + wire /download Linux tab (#939)
- provision the platform admin team (Dave/Gulsah/Tulin) (#977)
- error-code envelope + web/mobile/Studio error mapping with generic fallback (#831) (#916)
- align landing widths, loosen spacing, add Help page (#972)
Changed
- the setpoint packs by a count, and a count is not what binds (#3802)
- cross-instance routing and skewed-account fan-out, measured on the rig (#3696)
- measure the per-task capacity constants at 5k+ sockets (#3682)
- alarm on 5xx and latency, so something fires on the effect (#3622)
- the connect-admission rate now derives from the socket setpoint it has to drain (#3616)
- a fetch that lost its timeout, two churning contexts, and a sort with no documented ceiling (#3621)
- a retention sweep that ranks the whole table, on every task, under the request timeout (#3620)
- Rust License Gate stops rebuilding cargo-about and stops resolving a crate graph nobody touched (#3541)
- size RDS and ElastiCache on their own drivers — DB down, Redis up (#3448)
- record ci baselines from the first green workflow run (#3190) (#3432)
- PERF-6 — relay load harness: connect storm + sustained streaming, nightly CI (#3306)
- PERF-17 — the Lighthouse budgets could not fail, and the daemon paid a webview's codec (#3359)
- scope the unit suite to the affected projects, and size the shard matrix to fit (#3343)
- stop shipping ~9 MB the binary never uses (#3320)
- alarm the resources that bind first, and stop re-serving stable endpoints (#3338)
- a connection storm couldn't scale the relay out, and ~128 stalled sockets could OOM it (#3323)
- coalesce output frames, memoize the remaining context values, virtualize notification history (#3316)
- shard Unit Tests 4 ways — the suite outgrew its 30m cap (#3334)
- PERF-15 — index & query hygiene, and the CONCURRENTLY pattern the repo could not use (#3305)
- PERF-8 — memoize the relay-exchange entitlements card (#3298)
- virtualize the SessionDetail transcript and memoize the WebSocket context value (#3296)
- PERF-10 — the control plane gets the index the data plane already had (#3301)
- let one task claim a due webhook event (#3297)
- PERF-11 — WAL, a relaxed sync, and a sequence counter that already knew the answer (#3292)
- clear the backend query/N+1 tail (#3291)
- PERF-2 — bound every Stripe and OAuth request (#3274)
- the changelog assembles once per TTL, not once per visitor (#3271)
- bound how long a pooled connection may be held, not just how many (#3267)
- index the three hottest lookups on the authenticated path (#3265)
- the app parses one locale at boot, not twenty-one (#3264)
- startDaemon() — main.ts becomes a module, boot and shutdown become ordered steps (#3085)
- verify #1866's backpressure against a real congested socket (#3086)
- extract remote and chat-run session start (#3047)
- retire the 150-key local-ws handler map (#3049)
- virtualize Approvals, Rules and Org Rules; fix the countdown re-render (#3045)
- extract the MCP HTTP transport wiring (#3026)
- extract the 34 proxy verb handlers, and register them through the feature table (#3014)
- extract session start — gate, evaluate, register, provision (#3030)
- extract the local-IPC request handlers (#3028)
- extract the relay frame router out of connectWebSocket (#3007)
- extract the services and tasks wiring (#2976)
- extract the express routes into a router (#2990)
- extract the relay plane — links, credentials, REST routing and sync wiring (#2982)
- a feature registry, and local-ws dispatch that reads a table (#2971)
- extract prompt create, answer, expiry and withdrawal (#2979)
- finish the session-persistence extraction (#2968)
- extract plan, keys, notification and MCP-connector wiring (#2958)
- extract session environment, worktree lifecycle and hooks (#2948)
- session kinds shrink to the shipped core (#2913)
- a DaemonContext for the daemon's shared state (#2901)
- a chunk no longer re-renders the terminal component (#2848)
- the overflow sweep was one 20s timeout, ×16 — gate restored off the critical path (#2792)
- drop the i18n overflow browser sweep from Code Quality (#2732)
- source/connector abstraction for the issue seed picker (#2481)
- delete the Apple billing plane (#2439)
- extract session row mapping from main.ts (#2208)
- extract device identity + auth headers from main.ts (#2207)
- make @checkpt/ui importable from a tsc-built lib (#2108)
- extract the peer publish fan-out from main.ts (#2105)
- delete the org audit API surface, which has had no callers since #1445 (#2086)
- map main.ts by subsystem seam, extract the pure leaves (#2071)
- carry output chunks as base64 and batch the live push (#2081)
- extract the remaining web/admin auth-surface duplicates (#2047)
- bound what the relay buffers toward a slow consumer (#1866) (#2032)
- cache the WS connect path (#1864) (#2020)
- scope device-unpaired to the owning account (#1867) (#2028)
- amortise the output rings' per-append prune (#1865) (#2019)
- extract the shared ErrorBoundary and the auth-client test seam (#1973)
- one device, one id, one table (#1907)
- stop asking /auth/refresh for visitors who never signed in (#1775)
- derive API image runtime dependency lists from the built bundle (#1740)
- one shared env-doctor implementation — retire the TS rule copy (#1727)
- adopt @checkpt/ui and close the type-scale gate exclusion (#1712)
- one component layer for the web portal and admin console (#1676)
- one service-kind vocabulary — align the crate enum onto the detector's names (#1650)
- split FEATURES.servicesTasks into services + tasks (#1564) (#1631)
- split ECS task roles per service (#1547)
- cache session diff across tab switches — stale-while-revalidate (#674) (#876)
- extract module-const UI copy to t() keys (#988) (#994)
- drain i18n allowlist to zero — extract UI strings to t() (#770) (#975)
Documentation
- the plaintext audit names every table, and CI keeps it that way (#3834)
- UAT-MOB-05 stops claiming an attribution the product never had (#3814)
- the three guides omit RELAY_PUBLIC_URL, so every guide deploys a relay that cannot sign anyone in (#3784)
- record the key-revocation walk result, both directions (#3737)
- write down the perf postures, and stop two workflow headers arguing against them (#3610)
- the live connect was walked — flip the surfaces that still say otherwise (#3498)
- Team is self-serve — UAT-PAY-09 rewritten to the org-aware checkout #227 shipped (#3472)
- the provider ship-gate's flag half closed on 2026-08-18 (#3475)
- the UAT-X-05 blocker still said the relay stores plaintext prompts — #3082 fixed that on both planes (#3469)
- the gate runbook still walked deleted QR pairing in four cases (#3429)
- stop crediting deleted files, and guard against the next one (#3352)
- the rollback tables now say what happens to the schema (#3336)
- runbook for exercising the Studio version floor in prod (#3116)
- the record of what the hosted relay sees (#3089)
- record the in-app design, its inventory and its gaps (#3075)
- UAT-X-03 describes the at-cap recovery that shipped (#3003)
- audit every plaintext column the hosted relay stores (#3040)
- the headless-Agent page documents unattended org enrollment (#3006)
- the output contract promised a sessionId the failure paths don't have (#3008)
- correct stale UAT expectations and the CSRF bypass rationale (#3000)
- document not_mounted where the codes are documented (#2857)
- spike — proxy, because the hook path fails open (#2802)
- name the releases that made the renumber's precondition false (#2783)
- design the Compare-plans comparison matrix content (#2379)
- session-scoped MCP identity & log isolation — spike decision (#2401)
- ratify the plan-gating matrix — three new gates, not five (#2305)
- hosted on-demand compute go/no-go spike — NOT-YET (#2242)
- say subset, not mirror — the local type omits allowCritical (#2170)
- ratify the fr, es and ru register blocks and sweep the residual drift (#2048)
- the three BYO platform guides omit the identity configuration (#2049)
- spike — mobile multi-relay is N registrations, not N sockets (#2014)
- claim shipped E2EE precisely — UAT gate, web copy, pricing, FAQ (#2013)
- e2ee.md never learned about session.meta (#1979)
- reflow the ro §5.16 length bullet so the span sits on one line (#1956)
- drop the last "shared with the token-refresh path" claim (#1805)
- map UAT cases to the tests that prove them (#1804)
- drop the dead web profile from the self-host reference (#1769)
- launch UAT manual test plan + project board seeder (#1713)
- pre-flip validation report — go/no-go for projectDetection (#1656)
- refresh tryout cheat-sheet to current main (G4) (#1693)
- tryout kit + testing roadmap for real-repo validation (#1481)
- the replication contract is hosted-only — and BYO can't enroll a device (#1625)
- ratify Romanian (ro) register and conventions — §5.16 (#1610)
- state the WSL story honestly on the requirements page and in a setup guide (#1476) (#1598)
- document RELAY_KEK as required in every self-hosting guide (#1601)
- Cloudflare TLS fronting guide + web docs page (#1515)
- ratify vi (§5.14) and cs (§5.15) register blocks (#1488)
- AWS deploy runbook + web docs page (#1299) (#1483)
- WSL2 support investigation and decision (#1333) (#1478)
- Railway deploy guide + web docs page (#1298) (#1442)
- Expo Go no longer works — document the dev-client (EAS) setup (#1290)
- renumber duplicate ADR 0008 → 0016 + truthful contract docs (#425) (#1046)
- ADR 0012 — API route extraction deferred for v1 (#440) (#882)
- confidence model calibration methodology (#435) (#881)
- composite/runbook decomposition strategies (#430) (#880)
- ADR 0014 — env binding inference, cheap proxy v1 / deep scan v1.1 (#431) (#879)
- readiness probe defaults per ServiceKind (#432) (#877)
- Perforce provider design spike (#662 Phase 1) (#858)
- ADR 0013 — .checkpt/ignore, adopt global / defer per-detector (#441) (#875)
- ADR 0015 — override layer aligns with crates/checkpt-config (#434) (#874)
- self-hosting guide (#753) (#963)
- per-language detection roadmap + framework taxonomy (#433) (#872)
- ADR 0011 — schema delta vs repo-scanner, adopt/reject (#439) (#883)
- ADR 0009 — daemon RPC contract for detection (#436) (#871)
Fixed
- the turn hook named a CLI Studio never ships (#3870)
- the migration task is sized for ts-node, and had grown past 512MiB (#3865)
- close the six pinned KNOWN GAP defects in the org/user dialogs (#3857)
- stop pkg from turning our subcommand into a missing file (#3861)
- About's update check ran behind the panel it was opened from (#3860)
- refuse re-parenting session publishes, and clean up the ones already filed (#3858)
- drop device_authorized from the ordered activation funnel (#3854)
- anti-phishing line, one-line security copy in every locale, and TTLs that cannot drift (#3850)
- the stream-inspector service guard, and the last owed exec half (#3835)
- give transactional email a layout, and take presentation out of the catalog (#3848)
- the funnel probe asks about a person, and silence can fail again (#3849)
- carry the natural-stop budget to the peer, instead of rejecting at 15s (#3837)
- a shed frame asked the bus where a device it was holding is, and a stalled consumer was never reclaimed (#3809)
- an org-owned device's presence reached nobody (#3826)
- name a REVOKED machine that is still holding a concurrency slot (#3828)
- a draft larger than one call could never be curated (#3822)
- run git with the user's PATH, not launchd's four directories (#3824)
- the reflection request encoded to zero bytes, so gRPC reflection never worked against a real server (#3813)
- retire the offline incumbent in the same transaction as the write that takes its name (#3808)
- the approval prompt says what identity is actually on the wire (#3804)
- a Redis inspector resolves only services the project has (#3806)
- the declared engine decides, and a contradiction refuses (#3760)
- releases list goes live, and Studio's launch/sign-in stop hiding the app (#3743)
- the prompt flow, the answer race, and a re-publish that re-notified every device (#3756)
- a hung rollout must go red, not quiet (#3748)
- don't let an absent projectId resolve to an arbitrary project (#3724)
- close the local proxy route around the approval gate (SEC-8) (#3726)
- release the push address on sign-out, and drop the dead device cache (#3738)
- let MONGODB_URI satisfy its own service's name tiebreak (#3741)
- the generator was capturing an empty Approvals screen (#3735)
- every approval card said "Unknown device" — the join used a dead plane (#3739)
- retention fixtures that cannot expire (#3684)
- the organizations page and the status rail each claim something untrue (#3677)
- the launcher could not find an agent the picker had just listed (#3666)
- stop the four lies the golden-path walk found (#3675)
- show what a curation pass is doing, and let an operator stop it (#3607)
- the wizard's first step asked where the project should live and took one answer (#3660)
- the DMG's branded window needs Finder, which CI had told the bundler to skip (#3664)
- stop selling org rules that auto-approve nothing (#3654)
- the org lost an owner where the insert could not promote (#3656)
- assert cross-stack outputs at the read, so a stale prod-persistent says so (#3648)
- nulling the submitter's id left their email and device id on the row (#3638)
- the perimeter's 401 page is not an error message (#3617)
- one brand casing, and a gate so it stays that way (#3599)
- repair the download page's dead docs link, and the UAT case that fails correct behaviour (#3598)
- reconcile device presence at boot, so a restart stops stranding devices online (#3596)
- scope Overview's user counts to the app portal (#3597)
- stop the pollers that deadlock truncateAll, and retry the ones that get away (#3552)
- carry orgId and clientType to clients, so an org pool worker is not read as your own machine (#3579)
- the at-cap refusal named nothing — its device lookup threw on every call (#3570)
- build the approval authority after the store opens, so a pinned key survives a restart (#3564)
- log why the relay rejected a session publish, not just that it did (#3561)
- a duplicated Content-Type meant nothing was ever published to the relay (#3557)
- the admin credential probe now only ever sees the perimeter (#3573)
- the relay is on the internet, so a shared WiFi is not the answer (#3567)
- WAFv2 rejected both descriptions, failing the prod apply (#3545)
- the CSP guard reads prose in a comment as a second directive (#3569)
- delete the translation crons and the impossible work they retried (#3505)
- a runtime barrel import from @checkpt/shared reds two studio specs (#3565)
- a migrated database is a schema, not somebody else's rows (#3560)
- say whose prompt the session is awaiting (#3518)
- the banner carries enough to report itself (#3526)
- /help routed bug reports to a Featurebase workspace we don't own (#3514)
- the shipped macOS bundle was SIGKILLed on launch — a restricted entitlement with no profile to authorize it (#3534)
- an auth rejection is not a network fault, and a swallowed 401 is not an empty screen (#3496)
- name the PostHog key, harden the secret write, and record posthogKeysWired (#3473)
- stop the PTY geometry churn behind the duplicate banners (#3516)
- main was red on three jobs, and none of them was a product bug (#3515)
- failed panes say why they failed, and stop dressing as empty ones (#3481)
- a missing git.diff path answered with a TypeError, not a reason (#3474)
- a device env override never reached a started process (#3466)
- a read-only .git leaked an absolute path past the redaction (#3471)
- a typo in .checkpt/env.toml renamed the file away and read as empty (#3465)
- deactivating a Google link did not sever it (#3463)
- two build profiles targeted a staging environment that never existed (#3451)
- move the admin roster onto Workspace identities (#3439)
- the Redis SG locked out the BFF throttler — 26s customer login (#3444)
- the hero dropped the desktop shot on every viewport under 1024px (#3442)
- the wizard contradicts itself on service counts, and three Stack rows render blank (#3412)
- the launch pane renders with no words at all (#3411)
- the fair-use footnote published a rate limit wrong three ways (#3438)
- the SAST baseline goes stale, so old PRs inherit main's findings (#3441)
- production shipped blind — reporter unarmed, boundary silent (#3312)
- the fingerprint runtime version was a fact about the machine, not the commit (#3393)
- expo-speech-recognition 56.x is built for SDK 56, not our 54 (#3407)
- centre the status pages, and drop the mascot name from copy (#3391)
- an expired prompt read as the user's rejection (#3349)
- the three #3151/#3158/#3170 follow-ups (#3370)
- sharing a note re-seals it to the org (#3357)
- the BYO Relay page claimed approval content skips the relay (#3348)
- let the relay say WHY the id differs (#3362)
- count the idle signal in parse telemetry (#3350)
- gate the Multi-step filter chip behind a recorded flag (#3346)
- list a deleted or binary file whose path contains " b/" (#3344)
- measure the banner — rule out the stuck store, report what failed (#3364)
- enforce on-device speech recognition, and grow the grammar rather than leave the device (#3342)
- the dashboard drew a Redis floor with no Redis (#3347)
- a repo-supplied exec env source needs a grant before it runs (#3318)
- the inline drawer must not lock page scroll or trap Tab (#3315)
- Redis connectors use ioredis subscribe + lowercase pipeline (#3235)
- redirect /status to the external BetterStack status page (#3027)
- probe the OS before handing a session a port (#3328)
- the Doctor now says a template over a secret can't resolve (#3332)
- own the page-scroll lock at module scope, not per modal instance (#3327)
- keep the pagination control a constant width as the page moves (#3329)
- guard the getCurrentWindow() that throws synchronously outside Tauri (#3310)
- a terminal session row stays terminal (#3326)
- stop claiming direnv sources .envrc.local, and say what does (#3335)
- the task host must not hand its config blob to the task (#3302)
- keep a file's line endings through open → edit → save (#3331)
- revalidate the Files tree, and offer refresh on healthy rows (#3333)
- serialize task starts per (project, session, name) (#3330)
- refuse a charged account's delete cleanly, and stop orphaning four tables (#3307)
- record devices_owner_label_unique in the schema snapshot — main is red (#3322)
- the wizard walk is red because one Tauri call throws synchronously in a browser (#3317)
- name the plan once and show it everywhere, make device names unique, and unrig the plan grid (#3263)
- the customSounds flag gated nothing — the feature already works (#3311)
- a degraded keystore no longer publishes plaintext prompts and session titles (#3309)
- impersonation read-only is server-enforced, and the two elevated secrets are wired (#3285)
- the revocation backstop looks devices up by id alone, which is no longer unique (#3308)
- give Android push a real small icon instead of a white square (#3299)
- name the unguarded locales, and stage the fr/tr imperative rules (#3017)
- a device going offline is not a statement about its sessions (#3253)
- a complimentary subscription ends when it says it does (#3255)
- a remote answer navigates from the marker, or refuses to act (#3249)
- voice listens in the user's language, not en-US (#3289)
- a rota that starts in three days pages nobody today (#3288)
- the production database cannot be destroyed by a routine apply (#3280)
- patch runtime CVEs — protobufjs ≥7.5.5, validator ≥13.15.22 (#3281)
- password reset kills every session, and cookie-mode stops leaking tokens (#3272)
- the status page needs design v2, and custom CSS is paid (#3278)
- regenerate the schema snapshot for the release-curation columns (#3284)
- the phone re-checks what a tip says and where it points (#3259)
- delete the RDS Proxy / read-replica flags — nothing read them (#3270)
- every REST call gets a deadline, and relay URLs must be https (#3252)
- stop claiming the /pair universal links we deleted (#3246)
- the org screens ask for a namespace that exists (#3248)
- the App Links contract is held together, and names both signing keys (#3238)
- keep the band's verbs on screen, pin the gauge's height, and give React Navigation the app's palette (#3234)
- take the last two purchase CTAs out of the shipped copy (#3100) (#3237)
- add placeholder-parity gate; fix 7 machine-translation drifts (#3223) (#3233)
- the export-compliance attestation matches the crypto that ships (#3165)
- surface the GitHub cause behind release 502s (#3115)
- one section identity across surfaces, and name the plan in Studio (#3096)
- one organization, one invoice — Team is bought per seat (#3090)
- the matrix omitted the one surface that always fires (#3088)
- the mic always comes back, and gated accounts get no FAB (#3068)
- draw an unreadable session title as a stand-in, not a name (#3065)
- the status bar's "Online" count must be the online one (#3063)
- Overview must not render a failed fetch as an empty state (#3062)
- reap the session rows whose owner is gone (#3055)
- one org, one charge — the founder is seat 1 (#3064)
- a phone can open org-sealed content (#3058)
- register PAT webhooks, per-registration secrets pinned to a repo (#3057)
- repair the integration specs that rotted red (#3051)
- five edge cases in the hash encoder and command resolution (#3013)
- one unreadable chunk no longer fails the whole output.tail (#3046)
- a partial profile update must survive both transpiles (#3044)
- org seat counts drifted from Stripe with nothing watching (#3042)
- a terminal-answered prompt records the option that was chosen (#3043)
- reopen encryption status + notification history on the peer proxy (#3002)
- order task defs after the secret VERSION, not the empty secret (#3035)
- delete Trusted Origins — Smart Rules already owns auto-approve (#3009)
- scope the session reconcile to the account that owns it (#2933)
- normalize the plan name before walking to the next tier (#2934)
- give a generator run an owner that outlives the screen (#2928)
- state the E2EE claim precisely on sign-in (#2931)
- stop reporting states that contradict the same screen (#2936)
- the session Terminal says which nothing it is showing (#2937)
- the org rules table's status column reads "Status", not "Enabled" (#2997)
- attribute Procfile/compose processes by language, not by sort order (#2897)
- declare Task.watch, and guard the registry order-dependence (#2944)
- a fresh worktree can start the stack from the checked-in steps (#2988)
- org quiet hours were resolved by the caller, so the two that couldn't name an org ignored them (#2987)
- validate a project_local mount before it becomes a spawn cwd (#2970)
- a watch teardown is addressed to its OWNER, not the mount (#2972)
- the vcs category had delivery and no switch (#2962)
- write the fs sketch's NUL separators as escapes, not raw bytes (#2926)
- an org worker can answer the member who addressed it (#2960)
- a notification setting that silently reverts, because two relay replicas cannot order a snapshot (#2957)
- make @checkpt/cli publishable — bundle the bin, declare what the tarball requires (#2959)
- the marketing navbar's desktop row fits 1280px in every locale (#2954)
- dedupe Nx target servers by command, not by workspace (#2943)
- org-worker sessions — the start paths that assume an account (#2949)
- org workers can read their org's projects, and their cache can hold them (#2946)
- the org dashboard renders prose again, not i18n keys (#2945)
- canonicalize request-supplied UUIDs, and fix the split audit trail (#2905)
- the overview's duplicate CTAs, silent checklist, and bare-email account menu (#2912)
- name the five icon-only controls a screen reader could not (#2930)
- clear a user's subscription rows before deleting the account (#2908)
- deleting an org revokes its worker pool — in both deleters (#2894)
- one top bar everywhere, and a drawer that stops shoving the app (#2917)
- the screenshot harnesses' account session signs itself out (#2914)
- model the org worker pool so dashboard-devices renders again (#2889)
- read projectType from angular.json, not just the Nx layouts (#2887)
- fingerprint project.json in the detect cache's fs sketch (#2888)
- one-click adopt of an out-of-date local Agent + release version guard (#2841)
- model GET /v1/orgs/:id/devices in the web screenshot mock (#2869)
- the seed prompt nobody submitted, and five more from a golden-path walk (#2863)
- write the .lproj files where the pbxproj points (#2861)
- gemini's MCP registration never took — untrusted worktree (#2856)
- name the ghosts before refusing at the device cap (#2847)
- tidy three rough edges — Pro-gated copy, Inspector collapse, popped-out window inset (#2849)
- detection you can reach with a projectId (#2846)
- model GET /v1/replays so dashboard-security renders again (#2845)
- don't offer Start for a per-session service with no session (#2828)
- one control per option, answered by index (#2832)
- stop repainting the whole grid on every keystroke (#2833)
- a failed config init must not cost the user their wizard answers (#2823)
- a collapsible Inspector, a header that stays on one line, and an ended session that says what happened (#2825)
- resolve checkpt-config in the target dir cargo actually uses (#2821)
- a session row that fits on one line, and an empty Env step that says which nothing this is (#2827)
- show a change's patch on the Diff tab, and notice edits made outside the agent (#2826)
- detect idle when Claude Code paints its composer placeholder (#2822)
- ScreenHeader's style prop takes StyleProp, not a bare ViewStyle (#2831)
- one top bar, a drawer footer that admits it exists, and Approvals filters you can see (#2829)
- the 150% deploy cap deadlocks a service scaled in to one task (#2804)
- key devices by owner, migrate legacy keys, reconcile enc_pub (#2777)
- admin-api and website-api images also need the generated migration registry (#2794)
- guard the throttler options shape, and stop telling operators auth needs no Redis (#2788)
- vitejs/vite's
packages/viteleaves the services list and types lib (#2689 + #2690) (#2697) - wire ANTHROPIC_API_KEY into the admin-api task definition (#2790)
- macOS keychain password-dialog spam — data-protection keychain behind a shared access group (#2770)
- pre-merge citation guard walks a cited epic's sub-issues (#2656) (#2781)
- Copilot round 4 — a header that gave an order, and a comment that stated a falsehood (#2780)
- connecting a code host belongs in Settings, and the source row stops wrapping (#2753)
- read what a run script runs, whose framework it is, and what Nx says (#2588, #2589, #2590) (#2671)
- a Mac's OS is macOS, not "web" (#2725)
- unreadable is not missing, and Next needs a chosen path (#2773)
- fail when a shipped migration's number changes (#2782)
- New Project names the projects folder the clone will use (#2757)
- the dashboard plan card states the plan the account is on (#2755)
- localized iOS permission strings are actually wired in (#2759)
- throttle counters are fleet-wide, and a code has a guess budget (#2771)
- a database that fails to open must not report healthy (#2763)
- repair the migration ledger the renumbering orphaned (#2778)
- device setup stops offering view-only to Community (#2758)
- four shipped-but-unreachable surfaces — voice FAB, Fleet/Rules headers, device icons, encryption honesty (#2747)
- the releases backfill gets its own concurrency group (#2765)
- a prod DB wipe no longer erases the Studio version ledger (#2731)
- a session that has ended no longer renders as "Idle" (#2724)
- the "Connecting…" gate can no longer hang silently (#2727)
- detect questions that don't end the line, and stop calling a stalled session "writing code" (#2726)
- Comp opens for a user with no subscription (#2723)
- two machines on one account are tellable apart (#2728)
- a failed publish can no longer advertise a release that doesn't exist (#2722)
- publishing a version twice no longer dies on AccessDenied (#2694)
- a dialog no longer freezes the window in place (#2693)
- draw the device's own platform mark, everywhere (#2684)
- the Agent could not start at all, and nothing noticed (#2685)
- make the window's top band draggable on macOS (#2687)
- stop CHECKPT_RELAY_WS pointing the socket at another relay (#2686)
- the collapsed sidebar is the admin console's rail, not a gutter (#2688)
- the site follows the visitor's OS theme, and says so (#2670)
- the collapsed rail stops growing a horizontal scrollbar (#2677)
- one scroll surface per terminal pane (re-land of #2641) (#2665)
- tell "store still opening" apart from "store failed", and stop blaming the user's devices (#2664)
- scope the key directory to the relay that vouched for it (#2643)
- a prompt's life is its session, not a five-minute timer (#2650)
- decide output.tail's decode by requester capability (#2633)
- stamp the release version into the daemon package (#2649)
- pairing sessions in the shared store, and a store outage that stops accusing the user (#2628)
- the terminal always accepts input, and an answered prompt always leaves the inbox (#2570)
- the biometric switches now lock something (#2620)
- materialize sound channels for every relay, not just the current one (#2625)
- stop the exchange banner contradicting the device it sits above (#2630)
guardcompletes the verification-gate vocabulary (#2582)- one shape from both arms of a routed config op (#2565)
- the env write must carry the schemaVersion it read (#2600)
- wait for the Agent before reconciling, and bound the retry (#2580)
- make a created project's services startable (#2548)
- four launch-readiness defects — foreground push, the update wall, dead links, a QA screen (#2562)
- author the Face ID and photo-library purpose strings, in all 20 locales (#2566)
- gate Custom Sounds and Voice — two surfaces that promise what they cannot do (#2563)
- re-own the org quiet-hours rules written as user-owned (#2549)
- promote the gRPC inspector off
soon(#2556) - bound and retry every apt call so a sick Ubuntu mirror can't eat the job (#2553)
- quiet hours that silently did nothing (#2532)
- the four bugs the first packaged Windows run found (#2544)
- promote the always-on headless agent off
soon(#2545) - make the session terminal usable — raw keys, no re-wrap, no poll-lag (#2519)
- surface the real Google sign-in failure, and simplify the auth forms (#2521)
- every drawer entry goes somewhere, and nothing it renders is invented (#2493)
- stop gating project creation on env vars, and make "Paste from .env" work (#2499)
- enforce concurrency account-wide at the relay (#2491)
- answer prompts at the relay tier, sealed, not through the source device (#2472)
- SSR manifest scan read comment prose as an import, breaking every Deploy Web on main (#2476)
- force-close a revoked device's sockets, whoever revoked it (#2463)
- one PTY host, and an output ring that stores the byte stream (#2443)
- classify the multi-window commands the locality guard missed (#2440)
- make the window's top band one line, and the collapsed sidebar a real rail (#2412)
- stop the PAT catch-all shadowing GitHub's connection routes (#2413)
- re-read membership when the Agent's relay link comes up (#2341)
- surface the real reason pairing failed, and let the daemon load SQLite (#2362)
- the device tabs deserve a real empty state, and the header a real chip row (#2344)
- name platform sets in prose instead of lowercasing the label (#2304)
- a device derives its id from its signing key (#2243)
- unblock the publish, un-empty the notes, pick platforms (#2272)
- one About surface — route the macOS menu item to the modal (#2268)
- point the win-arm64 bundler at signtool explicitly (#2247)
- kind worker/scheduler-role scripts as workers, not the borrowed framework kind (#2223)
- make PromptsAttentionAndEnvelope migration re-runnable (#2188)
- drop the stamped session deviceLabel, resolve by id (#2213)
- take the minor-unit divisor from Stripe, not from ICU (#2219)
- report a declared workspace member the nested-repo prune drops (#2204)
- merge exceptions per key, so a client cannot clear what it never sends (#2203)
- negatively-cache dev-login failures to stop the request storm (#2187)
- polyfill Intl.PluralRules for Hermes so plurals resolve (#2193)
- open the multi-step wizard from the relay prompt store (#2194)
- read session-screen prompts from the relay plane (#2196)
- demote hyphenated one-shot scripts from the services list (#2155)
- repair the hero glow and the dropped h1 clause, add a live agent feed (#2184)
- prune nested repo checkouts so workspaces count once (#2154)
- disambiguate repeated app chip labels in the wizard stack (#2173)
- subscribe per relay link, and delete the socket nothing assigned (#2122)
- stop exporting a secret pointer as if it were the secret (#2185)
- stop selling an exception the pipeline cannot evaluate (#2165)
- reposition marketing copy for Claude Code auto-mode default (#2147)
- skip the detector pipeline when the recipe generates nothing (#2138)
- pin bash on the linux-arm64 Agent job so
pipefailworks (#2137) - put the nine auth components' status colours on the semantic tones (#2117)
- localize the dialog's dismiss label, and stop duplicating cancel (#2133)
- make the wizard Env keychain promise honest (pre-flip minimum bar) (#2128)
- collapse duplicate runtime chips (F2) and stop the detect-failed screen telling a success story (F3) (#2127)
- define every colour utility, unify the Security controls, gate the class (#2083)
- refuse device transfer instead of reporting success (#2076)
- ApiKeyGuard fails closed and reads the header only (#2066)
- delete the three unscoped bug-report reads (#2064)
- sweep BillingPanel onto the type scale + text tokens (#2070)
- surface the proxy egress counters at /health (#2061)
- scope my-devices by the token, not by x-app-id (#2063)
- fail closed when the caller or the device owner is null (#2052)
- put the pinned Node 24 first on PATH via direnv (#2062)
- convert request bodies to decorated DTOs so the ValidationPipe is not inert (#2046)
- filter the inbox cache read to VCS rows in SQL (#2044)
- task category chips read semantic tokens in both themes (#1815) (#2037)
- localize the remaining mobile risk/state slug renders (#2039)
- #1810 — enforce the Node 24 pin, guard its drift, make ABI mismatches self-explaining (#2034)
- delete the two unscoped feedback reads (#1999)
- remove docs claim of Pro-gated diff previews that do not exist (#1895) (#2027)
- name the org whose relay you're on, and what isn't reachable from it (#2000)
- refuse up front when there is no key, and record a failed fix run (#2018)
- resolve the inbox row's project from its session, and drop the column nobody wrote (#1992)
- administer an explicit org in the Relay panel, not a guessed one (#2011)
- converge on answers from other devices, clear badge + tray (#2012)
- a bad device credential no longer strands the shell (#2009)
- the dashboard refetches when its tab comes forward (#1994)
- gate the mock Session-kinds editor out of release builds (#1987)
- pricing and billing name the capped thing a machine, not a device (#1990)
- stop aapt choking on BCP-47 locale tags in Android builds (#1984)
- read TypeORM's affected count for the prompt cap prune (#1986)
- translate the 141 seeded register violations, empty the allowlist (#1969)
- give the device-onboarding gate a way out (#1975)
- real timestamps for migrations, not a +1e9 counter (#1965)
- reconcile web/admin auth-surface drift and mark the forked files (#1970)
- Settings → Devices was a hardcoded fixture list duplicating DeviceView (#1964)
- stop the .envrc template from executing pnpm db:seed (#1957)
- catch the pricing locale JSON up to the #1921 machine-metering copy (#1962)
- give project rename + delete an entry point (#1926)
- stop taking a device id or an account on the caller's word (#1931) (#1949)
- translate Studio billing UI for es/fr/pt-BR/ru/tr (#1836)
- meter workers, not clients — a phone no longer consumes a device slot (#1921) (#1935)
- mobile code-level English leaks — prompt risk/state slugs + encrypted placeholder (#1123, #1403) (#1837)
- studio relativeTime() leaks English into translated timestamps (#1125) (#1838)
- invert the relay to default-deny — register JwtAuthGuard as APP_GUARD (#1928)
- localize the not-local fallback in useEnvFiles (#1927)
- assign monorepoKind 'cargo-workspace' for Cargo [workspace] roots (#1762) (#1808)
- co-rooted headline, port-less service dedupe, inert edit-kind button (#1774)
- the device-cap 403 the daemon can parse — plus the three blockers found verifying it (#1904)
- an Agent connection and its relay connection are two states (#1922)
- window drag under modals, ultrawide backdrop, narrow status bar (#1901)
- run a global ValidationPipe on the relay and website-api (#1920)
- treat cursor moves as layout so Claude's spinner survives the ANSI strip (#1822)
- the web dashboard tells a BYO account the truth about its own data (#1819)
- honour the client-supplied device id in the keyed enrollment path (#1640) (#1816)
- bound the revocation close reason to 123 UTF-8 bytes (#1817)
- attach applies .git/info/exclude when .checkpt/ already exists (#1811)
- force the detect live path on in release (mock DCE'd) (#1755)
- give the root postinstall its script before every image install (#1806)
- stop the coming-soon flash and the false state-mismatch on OAuth sign-in (#1772)
- pin the portal URLs and make the apex canonical (#1773)
- don't fail every Docker image build from the node-pty postinstall (#1741) (#1794)
- the alerting scripts run under
bash -e, which broke every guarded path (#1715) (#1788) - make every PTY spawn work, clean install and packaged sidecar (#1741) (#1782)
- revert the partial react-router major bump that forked the router (#1735) (#1736)
- copy libs/auth/types into the migration image (#1731)
- watch every web build input, and guard the filter from drifting (#1730)
- unbreak the API image builds (#1723)
- treat Copilot's suppressed findings as a persistent open set (#1717)
- derive the SSR runtime dependency list from the built bundle (#1720)
- serve project issues and change requests for PAT-bound projects (#1302) (#1700)
- stop leaking prompt title/summary/PTY context to the relay (#1703)
- surface partial scans + collapse services/env in detect adapter (G1, G2) (#1689)
- scan the scaffold-destination override in the detect effect (#1690)
- strapi CLI row + guard one-shot/hook framework promotion (G3/G5) (#1698)
- let the Studio capture use the simulated detector again (#1691)
- refresh device claims on a jittered cadence (#1638) (#1684)
- resolve a session's PTY env through the daemon (#1666) (#1685)
- resolve plan coverage across org membership (#1637) (#1681)
- fan control-plane events out across relay instances (#1497) (#1678)
- make FakeRedisHub's virtual clock actually virtual (#1673)
- regenerate stale makefile goldens to derived ruleset hash (#1651)
- resolve local (excluded) .checkpt config from the repo root for worktree sessions (#1634)
- unbreak main — align invariant suite + stale golden with composite-root synthesis (#1621)
- keep the relay to one task and deploy it stop-then-start (#1493) (#1604)
- parse Claude's welcome when facts sit beside the mascot art (#1597)
- synthesize root workspace for composite-only repos + referential-integrity check (#1135) (#1138)
- relay account-device surface + the fan-out that never worked; feat(#1321): blocking device-onboarding gate (#1562)
- wire RELAY_KEK into the relay task def (#1590) (#1595)
- capture Studio id/vi/cs — main is red (#1602)
- derive locale lists from the apps, add a coverage gate (#1469) (#1572)
- stop vendor update prompts reporting as parse regressions (#1571)
- add cs/vi to the blog locale list, guard it in CI (#1545) (#1546)
- point /issue board-add at project 12, not stale 7 (#1526)
- pin Tailwind's scan root so SSR and client emit the same CSS (#1513) (#1532)
- make the daemon URL runtime-configurable (#1475) (#1528)
- give container legs a Node before pnpm/action-setup runs (#1520) (#1521)
- allow the local-trust token to live outside the home dir (#1474) (#1518)
- key rate limits on the real client IP, not the proxy (#1489) (#1517)
- send the CSRF token on cookie-mode mutations so sign out works (#1504) (#1505)
- give the app a real relay credential (#1463) (#1486)
- run react-router typegen before the root solution typecheck (#1479)
- localize the New Project stepper pip labels (#1419) (#1464)
- require a JWT on the relay WS in every environment (#1462)
- backfill missing uk approval-rule error translations (#1465)
- light-mode sidebar logo, org switcher wording, security page layout (#1459)
- dashboard feedback sweep — organizations terminology, truthful overview, working security page (#1445)
- finish the Operations tab strip's token migration (#1444)
- security page sessions table overflow — bounded UA column + shared parseUserAgent (#1443)
- bundle daemon + config sidecars in Windows portable zip (#1388)
- regenerate fastify-api and sveltekit-app goldens (#1362)
- system requirements reflect what the shipped bundles enforce (#1330)
- truth sweep — remove unshipped tier claims across pricing, docs, and FAQ (#1347)
- legible light-mode auth + app-wide contrast sweep + sign-in redesign (#1287)
- reconcile end-to-end-encryption claims with what actually ships (#1227) (#1286)
- deny symlink traversal when the repo root realpath is unresolvable (#1098)
- backfill relay/version keys into lagging locales (hi, zh-Hant, nl) (#1268)
- admin — sweep residual accent/status utilities + literal white onto semantic tokens (#1250)
- repair Studio de/ja locale drift — main is red (#1213) (#1215)
- terminal pane blank on tab re-activation — keep mounted + re-fit/refresh (#873)
- checkpt-app pt-BR — top up #1175 billing intent error keys (#1194)
- de web — top up #1175 billing intent error keys (#1188)
- pt-BR Studio — top up #1021 tray + agent-lifecycle keys (#1187)
- set website-api FRONTEND_URL for Stripe checkout redirects (#1155)
- preserve raw body for Stripe webhook signature verification (#1151)
- stop packages/shared changes triggering the macOS mobile E2E (#1118)
- transition sessions to awaiting-input on PTY quiescence (#671) (#986)
- add missing fr Studio keys for tray + agent lifecycle (#1129)
- re-run control-plane bootstrap after auth.provision (#664) (#985)
- normalize nested set-array sorting + stub root id conformance (#425) (#1045)
- wire Studio desktop OAuth clients into website-api task def (#1109)
- bundle @aws-sdk/* runtime deps so the image boots (#1092)
- drop the last stale FEATURES.vcs reference (#660) (#1093)
- default VITE_CHECKPT_BASE_URL instead of hard-throwing on a blank page (#675) (#851)
- widen docs content to footer edge, retune footer spacing (#1025)
- retry only CSRF 403s; mark the token response non-cacheable (#1031)
- stop token-refresh storm (single-flight + failure backoff) (#979)
- restore Dock/keyboard focus for macOS dev runs + worktree stamp (#928)
A11y
- the axe gate had never looked at admin, at the public board, or at the two routes with live findings (#3628)
- an overlay inside the screen it covers is not a modal (#3624)
- the keyboard path into a clickable row is a real button (#3619)
- the ratchet only ever walked the app it was born in (#3618)
- drain the last 60 raw literals off the ratchet (#3537)
- drain the 119 raw-color literals the contrast guard cannot see (#3543)
- drain the last 63 raw-palette utilities off Docs and the portal banners (#3542)
- drain the last 10 raw literals in the shared auth UI (#3539)
- axe runs against the rendered DOM in the one check that gates a merge (#3361)
- skip-to-content link, field-level error association, and the missing h1s (#3293)
- make aria-modal true on the thirteen surfaces that claimed it (#3287)
- the icon-only controls say what they do, and the ratchet keeps them saying it (#3258)
- the high-visibility pages leave the raw palette (#3240)
Deps
- the shipped subset is derived on every run, not remembered once (#3717)
- the image already installs the shipped closure — now it audits it (#3720)
- most of the alert stream was about files that are not the product (#3640)
- the prod audit is a watch, permanently — and here is why (#3641)
Dr
- give the recovery drills a cadence, a named owner, and a dataset column (#3699) (#3761)
- name the KEK custody window so raising retention shows up in the plan (#3734)
- a retired KEK must outlive the newest backup that needs it (#3649)
- the feature was built, and pointed at nothing (#3634)
- the staleness probe watched the website, not the tier that matters (#3633)
- DR-4 — the rollback is rehearsed, and the runbook stops calling it a claim (#3581)
- Drill B — the vault restore is faster than PITR, and its metadata does not round-trip (#3477)
- the restore path is rehearsed, and the backup history now outlives the instance (#3383)
- one env var could turn every merge to main into a prod wipe (#3354)
- DR-2 — a delete you can take back, and a copy of the key that cannot be re-derived (#3300)
- incident response — runbook corrected, alert-delivery state on record, incident runbooks sketched (#3282)
I18n
- the org invitation email speaks the reader's language (#3241)
- finish applying "CheckPt Agent" — 40 shipped strings said "daemon" — plus the locales/** guard (#2729)
- route the Settings tab rail through t() (#2068)
- route project + session tab labels through t() (#1785) (#1800)
- localize docs system-requirements table rows (#1336) (#1508)
- pl — mobile (checkpt-app) (#1276)
Infra
- website-api can call Anthropic, and says at boot whether it can (#3652)
- SSR hosting for public web — Fargate origin + CloudFront/caching (#1341) (#1477)
Legal
- the pack's own subprocessor tables were two vendors behind the list (#3685)
- the privacy policy now says staff can sign in as you (#3637)
- mobile telemetry is crash-only — replay off is the decision, analytics off until consent exists (#3453)
- write every legal document CheckPt needs — counsel checks them (#3384)
- the subprocessor list named neither vendor adopted since it was written (#3355)
- an honest privacy policy — subprocessor list, DPA path, real company name (#3245)
License
- a NOTICE was carried only if the manifest admitted to Apache (#3455)
- ship third-party attribution with every distributed artifact (#3325)
- drop the AGPL-3.0 ua-parser-js@2 before it ships (#3239)
Ops
- build the activation funnel and prove it populates (#3770)
- the apt retry deleted the directory apt needs, so every retry after the first was decorative (#3751)
- watch the crash stream, and gate the accessibility tree (#3742)
- the Studio E2E gate called "the deps never installed" a test failure (#3749)
- a placeholder Stripe key survived every probe we had (#3716)
- the native gate never compiled to completion — disk, then timeout (#3683)
- make the coverage-reachability claims enforceable, not remembered (#3504)
- nothing compiled native code, so a cross-SDK package merged green (#3454)
- give mobile a bundle gate, and fix the break it found (#3360)
- the path-filter guard now covers the test workflows too (#3351)
- give mobile a compile gate on PRs, and inventory the rest (#3345)
- say where codecov's floors actually apply — trunk, not PRs (#3341)
- the wizard walk gates PRs, and its stale gate assertion is gone (#3251)
Polish
- lay out honestly on a tablet (#3686)
- store-submission sweep — zh script split, RECORD_AUDIO, one brand casing, dead route, font clamp, stale docs (#3314)
Sec
- the BYO pages omit what the relay cannot boot without, then say to skip it (#3774)
- the flow log kept the refused half and dropped the useful one (#3773)
- three credentials and one ALB attribute with no owner (#3772)
- a key removed from the seed was never removed from the account (#3701)
- the Homebrew tap PAT is the credential SEC-19 retired, still live on the install path (#3703)
- we documented a required secret nothing reads (#3704)
- cover the app-switcher snapshot, and re-lock after a minute away (#3736)
- scope the deploy role's CloudWatch Logs read off
*(#3702) - the admin plane gets its own key, and the release PAT goes away (#3576)
- an incident now leaves a forensic trail — ALB access logs, VPC flow logs, CloudTrail (#3575)
- SEC-4 — the admin plane stops being a committed password (#3479)
- RELAY_KEK becomes a keyring, and rows say which key wrapped them (#3464)
- derive the DR seed image from the live task definition (#3450)
- the publish DTOs still advertised plaintext payloadVersion 1 (#3431)
- pin the Clerk secret key now that the application is deleted (#3418)
- SEC-24 — a SAST that runs, and a secret scan that sees history (#3403)
- SEC-24 — pin every action, drop root, stop trusting a URL (#3404)
- pin the prod deploy role to main + a gated production Environment, drop its secret read (#3353)
- SEC-8 — the process asking for permission could grant it (#3365)
- SEC-18 blast radius — immutable ECR, per-service SGs and execution roles (#3379)
- a push hint could point the app at any relay, which harvested an account-scoped token (#3363)
- a compromised org pool worker could reach every device of every member who used it (#3356)
- SEC-1 — bind device ids to identity keys on key-directory ingest (#3303)
- SEC-21 — desktop hardening: tokens to the keychain, command_spawn takes a recipe, CSP narrowed (#3324)
- SEC-20 — the Android backup that prebuild turned back on, and a posture that lived in an optional argument (#3321)
- SEC-11 — CSP was report-only, and enforcing it would have broken the app (#3304)
- SEC-23 app hardening — session-bound CSRF, step-up re-auth, invite binding, envelope AAD, daemon keychain (#3295)
- SEC-22 relay hardening — fail-closed org guard, view-only exec gaps, sealed run/inbox detail (#3294)
- gate analytics and session replay on cookie consent (#3275)
- a refresh token is not an access token, and the WS credential leaves the query string (#3276)
- SEC-7 — the daemon served session output, inbox and identity to the LAN unauthenticated (#3277)
- audit the denials, and stop a wipe erasing the trail (#3268)
- the admin portal has no signup and no CLI grant (#3273)
Security
- ship a content security policy, replacing csp: null (#2217)
- gate Swagger out of production + security headers on the web/admin origins (#2146)
Tooling
- the suppressed block is a heading, so the documented parse found nothing (#3778)
0.1.4-test.9
9 tháng 9, 2026Chi tiết
What's New in v0.1.4-test.9
Added
- give App Review a way to actually exercise the app (#3771)
- an org-owned machine opens a read-only Studio, not a sign-out (#3839)
- a device page answers what is RUNNING on the machine, not what projects were opened on it (#3825)
- the approval proof survives the pipe (#3817)
- Personal or Organization at device setup (#3796)
- settings was a 1000x680 dialog that never grew — it is a screen now (#3779)
- approval-signature groundwork — content commitment and key publication (#3763)
- give a device to the org — user→org ownership transfer (#3752)
- spoken replies — state the scope, cooperate with screen readers, respect quiet hours (#3769)
- the two drawer entries that led nowhere, answered (#2487, #2488) (#3754)
- the activation events — device paired, first session, first approval (#3698)
- the public board screens what reaches it (#3674)
- Studio's events were anonymous — they now carry the account (#3687)
- Studio had no analytics gate at all — now nothing is captured before consent (#3661)
- a load target that can actually be a fleet (#3650) (#3655)
- Integrations was four screens of one flat list — split it into three rail pages and collapse the connect forms (#3670)
- consent was an island in AsyncStorage; it now follows the account (#3669)
- the web activation events — signup through subscription (#3663)
- what plan is this user actually on, and who owns Lockdown Media (#3642)
- analytics consent belongs to the account, not to one browser (#3623)
- observe whether prod has been applied, daily and without credentials (#3644)
- every event was an anonymous device — web now identifies the account (#3639)
- voting on the public feature board (#3577)
- declare the iOS privacy manifest the binary was shipping without (#3574)
- the public board's front door (#3580)
- brand the Windows installer and localise its chrome (#3586)
- a public roadmap anyone can read, logged out (#3550)
- human control of the public feedback board (#3558)
- the event taxonomy — names are a schema, so decide them once (#3535)
- put Dave and Gulsah in Lockdown Media Inc. on the Team plan (#3538)
- the generator grid gets its brand marks (#3517)
- branded drag-to-install window for the macOS DMG (#3540)
- evaluate approval prompts against stored rules and auto-approve on match (#3494)
- feedback votes table + publication/moderation columns (#3510)
- in-app analytics consent control (#3478)
- honour Global Privacy Control — the banner asked people who had already answered (#3468)
- backend exceptions were being reported to nobody (#3457)
- rebuild the Sessions control bar, and make the launch wait say what it is (#3449)
- Stripe Tax, behind a flag, so the registrations stop blocking the code (#3408)
- the admin console has no password (#3358)
- reclassify service ↔ task in the wizard, persisted as an override (#3340)
- record the over-cap state a downgrade leaves, and tell the account holder once (#3319)
- Orbit takes over the 404, error and suspense screens (#3256)
- a kill switch that does not need a deploy (#3290)
- async release-notes curation, visible outcomes, and a workable editor (#3266) (#3269)
- watch production between deploys, and stop claiming it's up (#3095)
- record ToS/Privacy acceptance at signup, and gate age (#3243)
- make the promised data export real (GDPR Art. 20) (#3242)
- brand marks for every framework, service engine and agent (#3247)
- the push prompt is asked once, with a reason in front of it (#3250)
- the account-level notification class — billing and security events reach a person (#3097)
- the review screen runs on real data, and the flag it hid behind is gone (#3176)
- hands-free mode — a screenless conversation (#3076)
- seal the notification-history body at rest and on both read planes (#3117)
- the six machine-origin events reach the bell (#3087)
- serve per-check CI detail and PR review comments (#3093)
- a daemon secret.* op family, so env secrets land on the device that reads them (#3070)
- gate notification routing, email cadence & chat-started tasks (#3084)
- stamp every account-scoped cache, defer an unreadable approval, and give a service runtime an owner (#2853) (#3080)
- prove a prod deploy worked, don't assume it (#3069)
- PR queue kanban + swimlane layouts (#274) (#3066)
- DEK-encrypt the digest queue's content and cut its TTL to 16 days (#3056)
- give org-owned webhook destinations a surface (#3048)
- tell a member what they lose before they confirm leaving an org (#3050)
- discover compose files and Procfiles outside the repo root (#2899)
- cloud worker recipe + ephemeral lifecycle (#3022)
- give inbound chat a UI, and a /link-chat page that isn't a 404 (#3024)
- prove the phone's device id instead of asserting it (#3029)
- the phone can say where a project's events go (#3021)
- surface delivery failures — a dead channel is announced, not just counted (#3004)
- human-quality service display names (#2898)
- auto-checkpoint every turn — the undo point is always one turn back (#2980)
- the connector gate resolves per row, from that row's owner (#2999)
- a datastore pass, so Workspace.orm stops being inert (#2941)
- the wizard's Project name says it is required (#2938)
- compose parser v2 — YAML lib, extends, IPv6, override merge (#2903)
- the three rungs Studio could see, and the fourth it sent you to your phone for (#2994)
- a session on an org worker runs as the member who started it (#2974)
- connector docs + the ecosystem chips #1312 took away (#2964)
- gate connector management — one key, owner-scoped, on three planes (#2963)
- a routing rule matches a SET of events, not one category (#2983)
- desktop notifications, and the toast you don't get for the window you're looking at (#2975)
- org workers on a BYO relay — redeem enrollment through the identity boundary (#2973)
- custom webhook destinations — outbound HMAC signing, an SSRF guard, and per-destination health (#2953)
- an org connector switched off blocks the server for everyone (#2965)
- WebSocket/SSE inspector — watch on inspector.read, frame send behind inspector.exec.ws (#2743)
- the phone says where the work runs, and why one more will not start (#2956)
- project portability tiers — pinned projects, a project-first picker, and graduation (#2947)
- run the D2 override layer inside detect() (#2896)
- resolve
nrscript-runner indirection (#2868) - N-entry per-agent MCP config provisioning (#2940)
- one VCS event, one post per destination (#2900)
- geometry that outlives the PTY, and a barrier for "done writing" (#2951)
- resumable sessions — pick your work back up after a crash, reboot or shutdown (#2935)
- the concurrency wall names what is running, and offers to stop one (#2950)
- connector management — catalog, scopes, per-project opt-out, audit (#2932)
- every advertised channel real or removed — email wired, SMS deleted, desktop withheld (#2927)
- promote the runtime DetectionResult validator into the package (#2890)
- rspack and rsbuild are framework CLIs, not tool tasks (#2866)
- decompose a nested composite, and let chain ambiguity survive (#2904)
- at-cap recovery — the refusal names what is running, and offers to stop one (#2925)
- Studio sidebar goes project-first; devices become availability metadata (#2751)
- wire the connector gate — proxy, approvals, deny handling, audit (#2842)
- safe shutdown — one "you have active sessions" treatment at every boundary that means leaving (#2895)
- one decision engine — reconcile the two routing planes, delete the loser (#2893)
- tell the other phones when a sound changes (#2891)
- shared-worker credential resolution — org-owned VCS connections, the clone ladder, and a preflight (#2858)
- device-code enrolment replaces pairing (#2844)
- gate session sharing & export at Pro (#2852)
- an org's worker pool on the web, with owner/admin revoke (#2854)
- the event catalog, and the events that were never raised (#2631)
- rebuild the session top bar as one aligned row (#2855)
- org worker slots — a pooled entitlement, and an org that pays for it (#2801)
- surface session export + share from the drawer (#2354) (#2837)
- curated connector catalog + BYO, with row provenance (#2843)
- org workers become routable — owner-scoped proxy plane + a picker that names them (#2738)
- start Add service from a component picker, not a blank form (#2830)
- one release button, a dialog that fits, and platforms you can actually combine (#2791)
- connector credentials — keychain storage + device-local OAuth (#2754)
- shareable read-only session replay links (#2756)
- start an agent task from Slack or Discord (#2784)
- a rail that discloses instead of hiding, and panels that actually draw (#2803)
- gate session checkpoints behind Pro (Class B daemon) (#2772)
- an org worker can publish a session, attributed to the member who started it (#2740)
- session gist — what a session is about, and where you left off (#2752)
- org governance — permitted backends, no-literal policy, reference audit (#2750)
- external secret managers via vendor CLI + .checkpt/env-sources.toml (#2746)
- sibling-worktree and sibling-project providers (#2741)
- gate the inbound VCS webhook pipeline at Pro (vcs_event_stream) (#2760) (#2769)
- approve/deny an agent action from Slack or Discord (#2749)
- infer project-vs-session scope from worktree variance (#2739)
- auto-pull on session start — clone+attach on the target device when unmounted (#2572)
- markdown session summary + diff/patch export (#2737)
- every restore takes a safety checkpoint first (#2735)
- MCP connector registry — entity, CRUD, scoping and distribution (#2629)
- account-wide merged project list with per-project device availability (#2721)
- terminal recording — a session's output ring as an asciicast (#2576)
- inbound Slack + Discord apps and chat identity mapping (#2654)
- session-drawer Checkpoints UI (#2328) (#2638)
- MCP server inspector — catalog on inspector.read, tool call behind inspector.exec.mcp (#2645)
- inbox triage on the relay tier — snooze/dismiss actually leaves the feed (#2640)
- BYO relay — the operator sets the limits, not the hosted plan (#2574)
- the projects folder is editable from Settings (#2675)
- test a clone URL before cloning it (#2679)
- delete a release that never shipped, and give its number back (#2674)
- one empty-state component, even hero tiles, always-four quick actions (#2662)
- seed the default Studio tips catalog (#2660)
- honest local-folder copy, empty-repo default, and explained-disabled controls (#2663)
- fleet parse telemetry — production as the ultimate canary (#2637)
- lift the dark ramp off flat black and give headers their own band (#2659)
- serve web's auth-gated screens from a mock, and gate the surface (#2634)
- org workers resolve their own relay map (#2636)
- sortable releases table, last-edited attribution, and layout fixes (#2646)
- session-attributed notes, drop the
notesflag (epic #2099 exit) (#2618) - the daemon evaluates approval rules (#2639)
- GraphQL inspector — introspection + a query runner that is provably a read (#2537)
- seal org-hosted session content to the org, not one account (#2624)
- checkpoint ops — restore, delete, and the four daemon verbs (#2619)
- configure expo-updates so launch binaries are OTA-capable (#2602)
- org enrollment tokens + checkptd pair --org-token (#2575)
- voice steering — approve or deny with a spoken instruction, on-device (#2547)
- wire Custom Sounds end to end and remove its flag (#2567)
- queue / broker inspector — Kafka, RabbitMQ, BullMQ, NATS (#2539)
- detect services from Nx project.json targets (#2222) (#2592)
- Linear connector (issue→session) (#2578)
- rotate the org content key forward, on an authenticated declaration (#2554)
- inbox snooze and dismiss actually work (#2596)
- the Sessions tab as cards or a table, with search and filters (#2533)
- checkpt agent — CLI surface over the Agent's OS-service machinery (#2571)
- audit the data_inspectors gate against the verb registers — derived, never listed (#2569)
- fail the PR that closes a cited matrix issue, before the merge does (#2577)
- pairing screen offers Studio and terminal, not CLI only (#2564)
- unlist post-MVP coming-soon rows for launch; promote GitHub Projects (#2360) (#2573)
- only the device running a dev server can name its address (#2536)
- GitHub Projects (v2) connector (issue→session) (#2541)
- gRPC inspector — reflection schema browser + gated call builder (#2540)
- org-owned devices — ownerType/ownerId, guards and counters (#2518)
- create flow stops asking for a directory — placement defaults into the projects root (#2535)
- resolve entitlements from the owner of the thing being worked on (#2538)
- serve the plan catalog to Studio, and ask for a billing region instead of a currency (#2546)
- env sources — persist the wizard's env, and sweep every place a value can come from (#2528)
- version-skew UX for a standalone Agent Studio doesn't own (#2534)
- org keyrings reach every door, and stop growing quadratically (#2516)
- revamp Home, add a system-metrics tile, and fix the empty Inbox (#2530)
- Jira connector (issue→session) (#2501)
- API viewer → Postman-like — collections, environments, history, auth, import/export, assertions (#2494)
- the entire agent-facing MCP surface is Pro (agent_mcp_tools) (#2517)
- Redis viewer power — value/TTL edits, pub/sub monitor, memory stats, export (#2509)
- a loopback Agent that isn't co-located stops being treated as this machine (#2515)
- per-device projects root — onboarding step + daemon settings store (#2511)
- per-owner entitlements claim, and no back-compat for relays that don't exist (#2497)
- Home, Inbox, Sessions and Devices as the phone's four tabs (#2484)
- MongoDB inspector — collections + document browse (#2492)
- mutating MCP control tools ride the approval flow (#2498)
- record who started a session, from the channel and not the body (#2500)
- remote-aware project picking for non-co-located Agents (#2490)
- remove the Community cross-device approvals cap (#2483)
- brand the app icon and splash (#2482)
- Postgres viewer power — SQL editor, EXPLAIN, export, ER diagram (#2464)
- one subscription per account, on every plane (#2428)
- wire the Notes tab to the relay's real sealed notes (#2467)
- give mobile the console's semantic palette (#2468)
- the relay derives the device id, it no longer accepts one (#2478)
- make VCS provider availability config, flag and secret together (#2474)
- guard the Compare-plans matrix localization, and fix nine leaks (#2475)
- mail catcher inspector — four products behind one closed op union (#2453)
- update dialog renders localized release notes from notes.json (#2454)
- one scrollbar across web, admin, Studio and mobile (#2414)
- session-scoped MCP inspector query tools (read-only by construction) (#2465)
- mobile deploys from admin — EAS build + internal-track submit, watched end-to-end (#2466)
- scaffold a new project straight into a repository (#2461) (#2470)
- presence is per relay — render known-but-not-connected (#2460)
- MySQL/MariaDB inspector behind the existing db verbs (#2451)
- personal vs org allowances, and the owed BYO qualifier (#2459)
- gate on resolved feature entitlements, not the plan tier name (#2457)
- session-scoped MCP control tools — services, tasks, checkpoints, env doctor (#2455)
- tell the old audience when a row stops being theirs (#2212)
- gate issue-seeded sessions behind issue_seeded_sessions (#2446)
- the mutating inspector capability, per family (#2450)
- merge on read across relays, with legible degradation (#2445)
- session-scoped MCP observe tools — logs, status, ports, diff, deps (#2395) (#2448)
- changelog renders localized summary + expandable details from notes.json (#2447)
- gate the data-plane inspectors behind
data_inspectors(#2449) - config-driven Compare-plans comparison matrix (#2432)
- force on re-detect + last-known digest on cold open (#2273)
- confidence calibration pass — reliability table, ECE, H1/H2/H3 verdicts (#2274)
- ship as a free companion, remove all in-app purchasing (#2438)
- seal project_notes title+body to the author's devices (#2431)
- pick a device, get that device's agent list (#2433)
- inject the session-scoped MCP endpoint at agent spawn (per agent type) (#2437)
- inspector framework — an engine signal, a viewer registry, and a shell (#2426)
- publish structured notes.json (all locales); demote latest.json notes to transport (#2434)
- chunked transport for mobile image input over the proxy plane (#2415)
- gate the PR / change-request queue behind change_request_queue (#2429)
- apply the Appearance editor settings to the real editor (#2430)
- sweep the Tauri commands that answer about the wrong device (#2419)
- release_note_translations — fan-out on finalize, trailing, human-review locks (#2316) (#2427)
- extend the PlanFeatureKey gate framework (#2361)
- multi-window launch configurations — scoped windows, per-window scale, saved layouts (#2388)
- MCP server scaffold with per-session token auth on /mcp/v1 (#2408)
- wrap the org key into the invite, unwrap on accept — no online teammate required (#2387)
- admin-managed "Did you know" tips (#2418)
- say so when a session ends or a project is saved or deleted (#2417)
- release curation review UI on ReleaseDetail (#2315) (#2403)
- route the session diff through the daemon so remote sessions reach parity (#2400)
- AI curation pass over a release's draft notes (#2314) (#2343)
- give sign-in and first-run the Studio scene (#2381)
- deploy-console redesign for the release detail page (#2271)
- session Files surface + open-a-changed-file from the diff lists (#2308)
- make Expo Go a working dev mode, with banners for what's off (#2312)
- stop wiping the database on deploy, launch it from the console (#2267)
- detect.* LRU + SQLite cache, force, and detect.summary (ADR 0009) (#2227)
- project Files tab on the real mount root — removes FEATURES.filesBrowser (#2245)
- deliver org invitations by email, and let an admin resend one (#2209)
- make the Services step tell the truth, and let the user correct it (#2206)
- bind getCiStatus for Bitbucket and Azure DevOps (#2216)
- Bitbucket + Azure DevOps webhook event adapters (#2210)
- CodeMirror 6 and the shared FileEditor component (#2225)
- org content key + kid-addressed keyring (#2215)
- one device↔device plane for session I/O — and a gate so it can't rot again (#2158)
- file.* op family — list, read and write a project path (#2218)
- multi-currency subscriptions across 19 launch currencies (#2112)
- env secrets actually resolve — OS keychain read + write, resolved late so nothing persists (#2198)
- make the phone the hero below lg, and stop shipping the desktop shot to phones (#2186)
- merge semantics on read paths — union devices and approvals, qualify projects by relay (#2079)
- notes get an owner and an org — private by default, promoted to share (#2163)
- close the mobile parity gap — Projects, Inbox, org templates, Home (#2183)
- fleet view — every agent session across every device on one screen (#2174)
- detector-wizard fixes (#2141, #2140, #2145) + Studio chrome pass (#2153)
- materialize context files, and an ownership ledger to make it safe (#2131)
- exhaustive route-crawl mode (OVERFLOW_MODE=all) (#2058)
- seeded session fixture for auth-gated screens (#2056)
- confirm ownership transfer, and only ownership transfer (#2116)
- section-scoped value-vs-
enleak gate (#1835) - stage releases by bump, with the server owning the version (#2110)
- connect-on-demand relay sockets, keyed by relay (#2082)
- native Android billing via the Stripe Payment Sheet (#2098)
- fail-closed overflow CI gate + per-surface baseline ratchet (#1832)
- GitLab webhook event adapter — /webhooks/gitlab now serves (#2092)
- meter cross-device approvals on the hosting daemon, never local ones (#2088)
- apps/web surface under vite dev (#2055)
- context-file manifest, path gate and handoff materialization plan (#1995)
- route relay.rest by org, so writes land on the right relay (#2078)
- fan the push token out to every registered relay (#2075)
- hold N relay connections with per-relay credentials (#2050)
- fail-closed approval gate for agent MCP tool calls (#1997)
- gate organization creation behind the Team plan (#2051)
- register on every resolved relay — N credentials, not one (#2043)
- add the mobile RN-web surface + static length-delta backstop (#2015)
- view-only devices, gated to Pro+, plus Studio plan awareness (#2036)
- relay-qualified project identity — declare the axis, key on it, store it (#2026)
- resolve every relay per org, not one URL per user (#2033)
- stamp the owning-relay hint into the push data payload (#2030)
- task run history — exit codes, durations, revisitable output (#2001)
- signed-request verification and approver authorization for Slack approvals (#1998)
- auto-fix parser regressions into a draft PR (#1996)
- anonymous QR re-pair keeps its device id by proving the key (#1951) (#2002)
- source /changelog and /docs/whats-new from the live releases feed (#2003)
- device-limit dialog offers only workers for removal (#1936) (#1988)
- report a connected phone as online, and teach the device pickers to tell kinds apart (#1991)
- expose the inspector query ops over the proxy (#1982)
- sessions replicate like devices and projects — not peer-cache fan-out (#1950)
- mobile answers prompts over the relay-brokered transport (#1932)
- enforce the ratified per-locale register in CI (#1946)
- give chat channels a workspace to belong to (#1305) (#1899)
- localize pricing plan bullets, limits & CTAs (#1834)
- a relay that is already enrolled converges instead of duplicating (#1929)
- keyboard shortcuts for pinned task quick actions (#1797) (#1925)
- Redis service inspector — SCAN-based keyspace browse (read-only) (#1914)
- relay self-enrollment — one-time token, registered key, no shared secret (#1908)
- let a service declare its port through an env var (#1916)
- Postgres service inspector — schema + data browse (read-only) (#1910)
- runner service inspector on real process state + output (#1583) (#1902)
- attribute webhook events to their project and org (#1305) (#1898)
- email notification delivery via SendGrid + Email chip (#1308) (#1648)
- mobile service inspector on real Metro state (#1587) (#1824)
- initialize starter config for a project with no .checkpt/ (#1664) (#1839)
- API service inspector — route discovery + auto-addressed request builder (#1584) (#1823)
- expose config, exec and service ops over the proxy (#1821)
- frame the wizard detect services/env as a preview (#1759)
- overflow-detection engine + Studio surface (#1744)
- services topology view on real declared deps (#1575) (#1818)
- register the Romanian (ro) locale — web switcher + backend catalog (#1385) (#1652)
- enforce allowRemoteSessions end-to-end (#1813)
- build the shared Docker install layer on every PR (#1795) (#1809)
- session output over the shared cursor/gap contract (#1542) (#1807)
- prompts to relay tier — an approval survives the originating device going offline (#1791)
- web service inspector on real dev-server state + embedded preview (#1582) (#1801)
- dependency-ordered cascade start/stop with readiness gating (#1581) (#1777)
- pinned tasks surface as session quick actions (#1568) (#1798)
- funded-turn tier — assert the in-flight hooks against a real turn (#1787)
- Discord and Teams webhook channels (#1306, #1307) (#1781)
- i18n the live-detect surface (DetectStep log + errors) (#1758)
- P3c — Python pack parity (tooling + registry-miss) (#1708)
- adopt the shared stream for devices and projects (#1541) (#1790)
- run a session's tasks in that session's worktree + env (#1567) (#1770)
- real per-service CPU/RAM sampling, process-tree inclusive (#1580) (#1768)
- Env import pane writes real config (#1560) (#1750)
- forward the whole account stream, and give the Agent a cursor (#1538) (#1767)
- session Services drawer on real daemon runtime (#1728) (#1752)
- Slack webhook channel — destinations, subscriptions, daemon dispatch (#1305) (#1670)
- alert on prod deploy failures in Slack (#1715) (#1743)
- one entity cache + cursor/gap handling, retire the per-store reducers (#1745)
- run a task in a PTY pane via a daemon-owned run (#1566) (#1737)
- per-service log capture + stream to the Logs surface (#1579) (#1733)
- health probe executor (http/tcp/exec) — real service health (#1578) (#1732)
- one cursor/gap/snapshot service for every entity (#1537) (#1714)
- shared vs per-session service lifecycle + cross-worktree ownership (#1577) (#1710)
- org-curated starter template list (#1635) (#1688)
- Env Ports pane on real daemon port allocations (#1559) (#1699)
- project Tasks tab on real .checkpt/tasks.toml (#1565) (#1665)
- guarantee sessions carry a resolvable relay project id (#1529) (#1647)
- service supervisor — spawn/stop/restart + runtime registry (#1576) (#1683)
- Romanian (ro) — Studio (#1675)
- Romanian (ro) — mobile (checkpt-app) (#1672)
- Romanian (ro) — web + backend templates (#1660)
- Go rule pack — gin/echo/fiber/chi via go.mod (P3b) (#1524)
- transactional outbox so a mutation cannot skip its fan-out (#1536) (#1682)
- authenticated encrypted peer-session channel (#1523) (#1686)
- P2 — runtime versions + non-JS package managers + unrecognised notes (#1480)
- write .checkpt/ at project creation, without the npm CLI (#1592) (#1671)
- Env editor pane on real .checkpt/env.toml (#1557) (#1668)
- project Services tab on real .checkpt/services.toml (#1667)
- subscribe-gated + compressed cross-device streaming (#1415) (#1658)
- BYO relay reads identity from the hosted relay (#1623) (#1649)
- route proxy.forward across relay instances (#1496) (#1653)
- scaffold from a house/org starter template (#1410) (#1642)
- typed project-config client + provenance model (#1556) (#1641)
- Bitbucket Cloud provider, end to end (#1303) (#1510)
- extract Makefile targets as service/task sources (#1132) (#1240)
- P1 Studio dev wiring — real detect.scan over local-IPC (ADR 0009) (#1471)
- services.toml schema gaps — scope, expanded ServiceKind, source decision (#1573) (#1633)
- device→instance presence registry + deliverToDevice primitive (#1495) (#1632)
- populate ci + agents context sections (#1131) (#1241)
- replication contract + entity registry (#1535) (#1630)
- expand env example-file allowlist — .env.sample/.env.template/.env.dist and friends (#1136) (#1139)
- commit-vs-exclude config persistence + project-creation prompt (#1554) (#1626)
- surface registry-miss as an unrecognized-framework diagnostic (#1238) (#1239)
- scaffold a project from a GitHub template repository (#1409) (#1619)
- standalone headless checkptd install + enrollment (#1620)
- tasks.toml schema — new DocKind::Tasks (#1563) (#1627)
- retire the public-tunnel transport (#1622)
- ElastiCache Redis for the relay bus + optional relay client (#1494) (#1605)
- public blog rendering + SEO — SSR, meta/OG, hreflang, sitemap (#1345) (#1603)
- enroll on confirm — defer device creation, name it at creation (#1617)
- per-locale "retry with more care" for blog translation (#1593) (#1607)
- Azure DevOps Repos provider, end to end (#1304) (#1509)
- GitLab connect + repo import, end to end (#1302) (#1499)
- assert frameworks/tools from non-optional peerDependencies (#425) (#965)
- Claude auto-translation fan-out on blog publish (#1344) (#1589)
- wizard scaffold step — recipe picker, live PTY, post-run chain (#1408) (#1591)
- UX pass across the portal and console (#1506)
- Indonesian, Vietnamese and Czech — Studio (#1371, #1375, #1383) (#1501)
- C2 — Rust rule pack (framework detection slice) (#899) (#1295)
- live-PTY agent TUI canary harness (#1065) (#1467)
- scaffold recipe registry + toolchain presence probe (#1407) (#1531)
- content model + admin CRUD + public read endpoints (#1343) (#1530)
- Home widget customization — registry + persisted layout (#1402) (#1522)
- route peer transport over the relay WS (#1414) (#1527)
- Vietnamese (vi) and Czech (cs) — apps/web + backend catalog + switcher (#1373, #1381) (#1503)
- Indonesian (id), Vietnamese (vi) and Czech (cs) — mobile (checkpt-app) (#1502)
- run a PTY command in a chosen working directory (#1406) (#1511)
- URL-locale routing + hreflang for public pages (#1342) (#1519)
- forward E2E-encrypted proxy envelopes between account devices (#1413) (#1516)
- graceful-detection guarantees — walker budget, fault isolation, invariants, fixtures (#1466)
- reject a non-existent or non-directory attach root path (#1405) (#1470)
- Home screen — cross-device monitoring station (#1401) (#1484)
- hierarchical "up" navigation — Location model + derived parent (#1441)
- SSR the public surface — React Router 7 library→framework mode (#1340) (#1396)
- widen Linux compat — build Studio in an Ubuntu 22.04 container (glibc 2.35 floor) (#1440)
- Ukrainian (uk) — apps/web namespaces + backend catalog + switcher (#1377) (#1458)
- move approval-rules CRUD to website-api (#1359) (#1450)
- match the console's palette to the web dashboard (#1446)
- uk — Studio (#1379) (#1448)
- Ukrainian (uk) — mobile (checkpt-app), incl. native OS strings (#1378) (#1447)
- dev-login → real account session + device-model correctness (#1412)
- translation-delta harness — context packs + mechanical merge (#1392) (#1394)
- localized product screenshots — one-command generation across all locales (#1418)
- revamp the admin console's look and feel (#1417)
- rebuild the auth backdrop as a rendered orbit plate (#1398)
- rebuild the logged-in portal and auth screens (#1404)
- E2EE slice 2 — recipient decrypt stack (key distribution, sealed transit, QR pinning, truthful EncryptionScreen) (#1317)
- native Windows ARM64 (aarch64) Studio build (#1395)
- Indonesian (id) — web + backend templates (#1369) (#1393)
- clone any git URL in the new-project wizard (#1391)
- version-support policy + floor-raise runbook + CI contract freeze (#1115) (#1389)
- migrate web to httpOnly cookie auth (mirror admin cookie+CSRF) (#1364)
- override-merge rule (D2, #902) (#1281)
- complete the TS/JS framework + datastore registry (#425) (#1291)
- C1 — Python rule pack (framework detection slice) (#898) (#1294)
- reply to ticket submitter by email (#1014) (#1357)
- structured feedback columns, attachments, triage list, throttle (#418) (#1212)
- redesign auth screens + add Studio sign-up & password reset (#1296)
- pre-launch site mode — public site with gated surfaces + notify-me waitlist (#1282) (#1283)
- shared Pill chip + facet-counted filter pills across the console (#1314)
- B2 — service detection + classifier (#896) (#1043)
- Studio-era site polish — meta, sitemap, closing CTA, Clerk cleanup (#1211)
- How It Works integration chip popovers + truthful ecosystem claims (#1297) (#1312)
- two-device Studio harness + one-command db:reset (#1273)
- handle Claude's /btw side questions in the terminal (#1210)
- B1 — TS/JS rule pack, first end-to-end slice (#895) (#955)
- live rule sync from quiet_hours.updated / approval_rules.updated (#1209)
- sealed-envelope foundation — keys, enrollment, v2 codecs, rotation, push hardening (#235) (#1269)
- BYO-relay server→server contract versioning + relay-min-version floor (#1278)
- Hindi (hi) translation + language switcher — checkpt-app (#825) (#1279)
- version adoption snapshots + admin Adoption view (#1171) (#1272)
- Hindi (hi) translation + language switcher (#826) (#1264)
- encrypt JWT signing private keys at rest (envelope encryption) (#878)
- Korean (ko) translation — mobile, incl. native OS strings (#807) (#1217)
- A3 — framework + datastore registries (#894) (#954)
- override-only service fields + generated TS schema (#901) (#1102)
- Korean (ko) translation — Studio (#808) (#1223)
- client update gates — Studio mandatory-update wall + mobile force-update (#1270)
- Polish (pl) for CheckPt Studio (#817) (#1267)
- Dutch (nl) — mobile (checkpt-app) (#813) (#1266)
- Korean (ko) translation — web, shared auth + backend templates (#806) (#1216)
- thin-tolerant local-IPC seam + Studio restart nudge (#1248)
- REST client contract — /version, UPGRADE_REQUIRED (426), client-BFF boundary (#1112) (#1263)
- Hindi (hi) — web + backend templates (#1262)
- org custom relay URL + Team+ management UI, propagated to Agent/Studio/mobile (#1084) (#1246)
- Chinese (Traditional) zh-Hant — mobile (checkpt-app) (#828) (#1261)
- Dutch (nl) for CheckPt Studio (#814) (#1260)
- Polish (pl) translation — web, shared auth + backend templates (#815) (#1228)
- zh-Hant — Studio (#829) (#1252)
- Dutch (nl) — web + backend templates (#812) (#1243)
- Italian (it) — mobile (checkpt-app) (#810) (#1249)
- version stamping + minimum-version floor (#1111) (#1242)
- zh-Hant (Traditional Chinese) — web + backend (#827) (#1247)
- token ratchet — guard banning raw hex, text-[Npx], gray/palette utilities in app code (#1163) (#1244)
- relay short-retention event log + vcs.backfill on Agent reconnect (#1237)
- Italian (it) translation + language-switcher enable (#811) (#1236)
- zh-Hans (Simplified Chinese) — mobile (checkpt-app) (#804) (#1235)
- P2P proxy protocol negotiation & capability handshake (#1231)
- mobile ThemeContext token adoption + fontSize/hex codemod (#1233)
- German (de) translation + language-switcher enable (#794) (#1208)
- infra manual-apply reminder + runbook procedure for pulumi env drift (#1165) (#1229)
- Studio deploys from admin — stage/publish, changelog editing, live run watching + CDN verification (#1204)
- Italian (it) — web + backend templates (#809) (#1234)
- zh-Hans — Studio (#805) (#1207)
- Studio single-channel — relay REST + pairing behind the Agent (#1189) (#1199)
- add a target-id filter to the audit log UI (#1201)
- i18n ja — mobile (#800) (#1200)
- admin gray/small-text codemod onto design tokens (#1161) (#1206)
- Turkish (tr) translation — mobile, incl. native OS strings (#819) (#1120)
- Studio native in-app subscriptions via Stripe Elements (#1177) (#1193)
- remote session start on an arbitrary online worker (#1182)
- split-panel sign-in redesign (#733) (#1094)
- wire SendGrid delivery for invitation emails (#1013) (#1057)
- web gray-text + emerald-tint codemod onto design tokens (#1160) (#1197)
- German (de) translation + language-switcher enable (#795) (#1185)
- Simplified Chinese (zh-Hans) for web + backend (#802) (#1196)
- Japanese (ja) translation + language switcher (#801) (#1198)
- releases table + Studio history backfill + read-only admin Releases page (#1170) (#1184)
- A2 — BREAKING schema adoptions from repo-scanner (#893) (#953)
- Japanese (ja) — web + backend templates (#799) (#1190)
- Studio type-scale + semantic-token codemod, uiFontScale setting (#1159) (#1186)
- Brazilian Portuguese (pt-BR) for the mobile app (#791) (#1180)
- native intent-based subscription API (#1175) (#1181)
- publish versioned public checkpt/relay image + BYO migration & compat story (#1176)
- German (de) — web + backend templates (#793) (#1183)
- Brazilian Portuguese (pt-BR) for web + backend templates (#790) (#1168)
- rem type scale + WCAG contrast fixes in design-tokens (#1166)
- Brazilian Portuguese (pt-BR) for CheckPt Studio (#792) (#1167)
- entitlements-in-token — plan/concurrency as signed claims (#1082) (#1154)
- Agent lifecycle + quit semantics — pause/resume, quit warns + stops sessions (#1128)
- resolve .checkpt/env.toml at session start — port allocation + name templating (#1117)
- Russian (ru) translation for mobile (checkpt-app) (#822) (#1150)
- Turkish (tr) translation — Studio (#820) (#1122)
- Turkish (tr) translation — web, shared auth + backend templates (#818) (#1119)
- French (fr) translation + enablement for mobile (#797) (#1121)
- asymmetric identity verification — EdDSA relay-exchange tokens + identity JWKS (#1081) (#1127)
- Russian (ru) translation for Studio (#823) (#1126)
- port components/ui primitives to semantic tokens (#731) (#1087)
- /operations service-health page + GET /admin/system/health (#1015) (#1059)
- Russian (ru) for web + backend templates (#821) (#1124)
- French (fr) for CheckPt Studio (#1116)
- Studio tray, close-to-tray, and Agent service lifecycle UX (#1106)
- French (fr) for web + backend templates (#796) (#1108)
- Spanish (es) for mobile (checkpt-app) (#1103)
- bundled daemon gets the production relay URL — service argv + spawn env (#976) (#1107)
- Spanish (es) for CheckPt Studio (#1099)
- execute .checkpt/hooks.toml lifecycle hooks (#1002) (#1089)
- grant
memberrole on organic app-account creation (#1104) - adopt ApiError error codes across the three frontends (#1034) (#1079)
- add auth.* error codes to bff-auth throw sites (#1071) (#1073)
- promote daemon → standalone always-on Agent service (#1090)
- Stripe webhook inspect + replay UI (#1011) (#1078)
- coupon + promotion-code management (#1012) (#1072)
- Spanish (es) for web + backend templates (#1088)
- A1 — walker + .checkpt/ignore implementation (#892) (#949)
- Agent proxies account-scoped relay reads; drop Studio's relay socket (#1018) (#1070)
- CLDR-plural-aware locale key-parity guard + translation glossary (#1075)
- worktree-backed session lifecycle (#1000) (#1007)
- Homebrew cask + tap for macOS brew install --cask (#1063)
- failed-payment queue — worklist for failed and past-due payments (#1061)
- wire EditProfileScreen to the real profile endpoints (#971) (#984)
- Issues tab + start-session-from-issue on real provider data (#655) (#961)
- Codex + Gemini bespoke profiles — state detection, model lists (#998) (#1062)
- allow one email to hold both an app and an admin account (#1056) (#1060)
- drain i18n allowlist to zero (#772) (#1008)
- extract user-reachable API errors to stable error codes (#832) (#1035)
- Agent auth unification — single relay credential (device + account) (#1040)
- derive ThemeContext palette from @checkpt/design-tokens (#335) (#960)
- install affordances for missing agents (#997) (#1042)
- PR list + status on real provider data (#656) (#1039)
- business + engagement metrics API and Overview charts (#1041)
- avatar pipeline — presigned S3 upload + OAuth picture seed (#968) (#980)
- shared "On this page" rail across all docs pages (#1037)
- ship the Profile tab on the real account profile (#970) (#981)
- wire recipient-locale into data-plane notification paths (#1028) (#1038)
- editable name + timezone on the Account profile (#969) (#983)
- typed spawn-failure handling for missing agent binaries (#996) (#1036)
- partial-update PUT /dashboard/profile + avatarUrl (#967) (#978)
- /billing page + expanded UserDetail billing tab (#1032)
- detect installed agent CLIs at startup (agents_detect + login-shell PATH) (#1026)
- clickable Device detail page in Studio (#1001)
- new-project wizard — real repo browser + clone from provider (#657) (#990)
- drain backend-composed content into server locale catalog (#830) (#1030)
- audit-log read endpoint + Operations audit UI (#958)
- per-client rate limiting for DB-touching WS handlers (#461) (#950)
- project_override table + IPC for layered config (#449) (#948)
- GitLab provider — descriptor + PAT auth + read adapter (#661) (#859)
- replace Overview stub with a real counts dashboard (#987)
- shared agent registry + agent-typed sessions in Studio (#1006)
- drain checkpt-app hardcoded strings to zero (#771) (#989)
- flag-dropdown language switcher with full #764 roadmap (#1005)
- root device identity in a device keypair (#925) (#940)
- drop Supporter, rebalance to Community / Pro / Team / Enterprise (#974)
- home + footer feedback, responsive nav fixes, page consistency (#982)
- Linux CLI install script (curl | sh) + wire /download Linux tab (#939)
- provision the platform admin team (Dave/Gulsah/Tulin) (#977)
- error-code envelope + web/mobile/Studio error mapping with generic fallback (#831) (#916)
- align landing widths, loosen spacing, add Help page (#972)
Changed
- the setpoint packs by a count, and a count is not what binds (#3802)
- cross-instance routing and skewed-account fan-out, measured on the rig (#3696)
- measure the per-task capacity constants at 5k+ sockets (#3682)
- alarm on 5xx and latency, so something fires on the effect (#3622)
- the connect-admission rate now derives from the socket setpoint it has to drain (#3616)
- a fetch that lost its timeout, two churning contexts, and a sort with no documented ceiling (#3621)
- a retention sweep that ranks the whole table, on every task, under the request timeout (#3620)
- Rust License Gate stops rebuilding cargo-about and stops resolving a crate graph nobody touched (#3541)
- size RDS and ElastiCache on their own drivers — DB down, Redis up (#3448)
- record ci baselines from the first green workflow run (#3190) (#3432)
- PERF-6 — relay load harness: connect storm + sustained streaming, nightly CI (#3306)
- PERF-17 — the Lighthouse budgets could not fail, and the daemon paid a webview's codec (#3359)
- scope the unit suite to the affected projects, and size the shard matrix to fit (#3343)
- stop shipping ~9 MB the binary never uses (#3320)
- alarm the resources that bind first, and stop re-serving stable endpoints (#3338)
- a connection storm couldn't scale the relay out, and ~128 stalled sockets could OOM it (#3323)
- coalesce output frames, memoize the remaining context values, virtualize notification history (#3316)
- shard Unit Tests 4 ways — the suite outgrew its 30m cap (#3334)
- PERF-15 — index & query hygiene, and the CONCURRENTLY pattern the repo could not use (#3305)
- PERF-8 — memoize the relay-exchange entitlements card (#3298)
- virtualize the SessionDetail transcript and memoize the WebSocket context value (#3296)
- PERF-10 — the control plane gets the index the data plane already had (#3301)
- let one task claim a due webhook event (#3297)
- PERF-11 — WAL, a relaxed sync, and a sequence counter that already knew the answer (#3292)
- clear the backend query/N+1 tail (#3291)
- PERF-2 — bound every Stripe and OAuth request (#3274)
- the changelog assembles once per TTL, not once per visitor (#3271)
- bound how long a pooled connection may be held, not just how many (#3267)
- index the three hottest lookups on the authenticated path (#3265)
- the app parses one locale at boot, not twenty-one (#3264)
- startDaemon() — main.ts becomes a module, boot and shutdown become ordered steps (#3085)
- verify #1866's backpressure against a real congested socket (#3086)
- extract remote and chat-run session start (#3047)
- retire the 150-key local-ws handler map (#3049)
- virtualize Approvals, Rules and Org Rules; fix the countdown re-render (#3045)
- extract the MCP HTTP transport wiring (#3026)
- extract the 34 proxy verb handlers, and register them through the feature table (#3014)
- extract session start — gate, evaluate, register, provision (#3030)
- extract the local-IPC request handlers (#3028)
- extract the relay frame router out of connectWebSocket (#3007)
- extract the services and tasks wiring (#2976)
- extract the express routes into a router (#2990)
- extract the relay plane — links, credentials, REST routing and sync wiring (#2982)
- a feature registry, and local-ws dispatch that reads a table (#2971)
- extract prompt create, answer, expiry and withdrawal (#2979)
- finish the session-persistence extraction (#2968)
- extract plan, keys, notification and MCP-connector wiring (#2958)
- extract session environment, worktree lifecycle and hooks (#2948)
- session kinds shrink to the shipped core (#2913)
- a DaemonContext for the daemon's shared state (#2901)
- a chunk no longer re-renders the terminal component (#2848)
- the overflow sweep was one 20s timeout, ×16 — gate restored off the critical path (#2792)
- drop the i18n overflow browser sweep from Code Quality (#2732)
- source/connector abstraction for the issue seed picker (#2481)
- delete the Apple billing plane (#2439)
- extract session row mapping from main.ts (#2208)
- extract device identity + auth headers from main.ts (#2207)
- make @checkpt/ui importable from a tsc-built lib (#2108)
- extract the peer publish fan-out from main.ts (#2105)
- delete the org audit API surface, which has had no callers since #1445 (#2086)
- map main.ts by subsystem seam, extract the pure leaves (#2071)
- carry output chunks as base64 and batch the live push (#2081)
- extract the remaining web/admin auth-surface duplicates (#2047)
- bound what the relay buffers toward a slow consumer (#1866) (#2032)
- cache the WS connect path (#1864) (#2020)
- scope device-unpaired to the owning account (#1867) (#2028)
- amortise the output rings' per-append prune (#1865) (#2019)
- extract the shared ErrorBoundary and the auth-client test seam (#1973)
- one device, one id, one table (#1907)
- stop asking /auth/refresh for visitors who never signed in (#1775)
- derive API image runtime dependency lists from the built bundle (#1740)
- one shared env-doctor implementation — retire the TS rule copy (#1727)
- adopt @checkpt/ui and close the type-scale gate exclusion (#1712)
- one component layer for the web portal and admin console (#1676)
- one service-kind vocabulary — align the crate enum onto the detector's names (#1650)
- split FEATURES.servicesTasks into services + tasks (#1564) (#1631)
- split ECS task roles per service (#1547)
- cache session diff across tab switches — stale-while-revalidate (#674) (#876)
- extract module-const UI copy to t() keys (#988) (#994)
- drain i18n allowlist to zero — extract UI strings to t() (#770) (#975)
Documentation
- the plaintext audit names every table, and CI keeps it that way (#3834)
- UAT-MOB-05 stops claiming an attribution the product never had (#3814)
- the three guides omit RELAY_PUBLIC_URL, so every guide deploys a relay that cannot sign anyone in (#3784)
- record the key-revocation walk result, both directions (#3737)
- write down the perf postures, and stop two workflow headers arguing against them (#3610)
- the live connect was walked — flip the surfaces that still say otherwise (#3498)
- Team is self-serve — UAT-PAY-09 rewritten to the org-aware checkout #227 shipped (#3472)
- the provider ship-gate's flag half closed on 2026-08-18 (#3475)
- the UAT-X-05 blocker still said the relay stores plaintext prompts — #3082 fixed that on both planes (#3469)
- the gate runbook still walked deleted QR pairing in four cases (#3429)
- stop crediting deleted files, and guard against the next one (#3352)
- the rollback tables now say what happens to the schema (#3336)
- runbook for exercising the Studio version floor in prod (#3116)
- the record of what the hosted relay sees (#3089)
- record the in-app design, its inventory and its gaps (#3075)
- UAT-X-03 describes the at-cap recovery that shipped (#3003)
- audit every plaintext column the hosted relay stores (#3040)
- the headless-Agent page documents unattended org enrollment (#3006)
- the output contract promised a sessionId the failure paths don't have (#3008)
- correct stale UAT expectations and the CSRF bypass rationale (#3000)
- document not_mounted where the codes are documented (#2857)
- spike — proxy, because the hook path fails open (#2802)
- name the releases that made the renumber's precondition false (#2783)
- design the Compare-plans comparison matrix content (#2379)
- session-scoped MCP identity & log isolation — spike decision (#2401)
- ratify the plan-gating matrix — three new gates, not five (#2305)
- hosted on-demand compute go/no-go spike — NOT-YET (#2242)
- say subset, not mirror — the local type omits allowCritical (#2170)
- ratify the fr, es and ru register blocks and sweep the residual drift (#2048)
- the three BYO platform guides omit the identity configuration (#2049)
- spike — mobile multi-relay is N registrations, not N sockets (#2014)
- claim shipped E2EE precisely — UAT gate, web copy, pricing, FAQ (#2013)
- e2ee.md never learned about session.meta (#1979)
- reflow the ro §5.16 length bullet so the span sits on one line (#1956)
- drop the last "shared with the token-refresh path" claim (#1805)
- map UAT cases to the tests that prove them (#1804)
- drop the dead web profile from the self-host reference (#1769)
- launch UAT manual test plan + project board seeder (#1713)
- pre-flip validation report — go/no-go for projectDetection (#1656)
- refresh tryout cheat-sheet to current main (G4) (#1693)
- tryout kit + testing roadmap for real-repo validation (#1481)
- the replication contract is hosted-only — and BYO can't enroll a device (#1625)
- ratify Romanian (ro) register and conventions — §5.16 (#1610)
- state the WSL story honestly on the requirements page and in a setup guide (#1476) (#1598)
- document RELAY_KEK as required in every self-hosting guide (#1601)
- Cloudflare TLS fronting guide + web docs page (#1515)
- ratify vi (§5.14) and cs (§5.15) register blocks (#1488)
- AWS deploy runbook + web docs page (#1299) (#1483)
- WSL2 support investigation and decision (#1333) (#1478)
- Railway deploy guide + web docs page (#1298) (#1442)
- Expo Go no longer works — document the dev-client (EAS) setup (#1290)
- renumber duplicate ADR 0008 → 0016 + truthful contract docs (#425) (#1046)
- ADR 0012 — API route extraction deferred for v1 (#440) (#882)
- confidence model calibration methodology (#435) (#881)
- composite/runbook decomposition strategies (#430) (#880)
- ADR 0014 — env binding inference, cheap proxy v1 / deep scan v1.1 (#431) (#879)
- readiness probe defaults per ServiceKind (#432) (#877)
- Perforce provider design spike (#662 Phase 1) (#858)
- ADR 0013 — .checkpt/ignore, adopt global / defer per-detector (#441) (#875)
- ADR 0015 — override layer aligns with crates/checkpt-config (#434) (#874)
- self-hosting guide (#753) (#963)
- per-language detection roadmap + framework taxonomy (#433) (#872)
- ADR 0011 — schema delta vs repo-scanner, adopt/reject (#439) (#883)
- ADR 0009 — daemon RPC contract for detection (#436) (#871)
Fixed
- the turn hook named a CLI Studio never ships (#3870)
- the migration task is sized for ts-node, and had grown past 512MiB (#3865)
- close the six pinned KNOWN GAP defects in the org/user dialogs (#3857)
- stop pkg from turning our subcommand into a missing file (#3861)
- About's update check ran behind the panel it was opened from (#3860)
- refuse re-parenting session publishes, and clean up the ones already filed (#3858)
- drop device_authorized from the ordered activation funnel (#3854)
- anti-phishing line, one-line security copy in every locale, and TTLs that cannot drift (#3850)
- the stream-inspector service guard, and the last owed exec half (#3835)
- give transactional email a layout, and take presentation out of the catalog (#3848)
- the funnel probe asks about a person, and silence can fail again (#3849)
- carry the natural-stop budget to the peer, instead of rejecting at 15s (#3837)
- a shed frame asked the bus where a device it was holding is, and a stalled consumer was never reclaimed (#3809)
- an org-owned device's presence reached nobody (#3826)
- name a REVOKED machine that is still holding a concurrency slot (#3828)
- a draft larger than one call could never be curated (#3822)
- run git with the user's PATH, not launchd's four directories (#3824)
- the reflection request encoded to zero bytes, so gRPC reflection never worked against a real server (#3813)
- retire the offline incumbent in the same transaction as the write that takes its name (#3808)
- the approval prompt says what identity is actually on the wire (#3804)
- a Redis inspector resolves only services the project has (#3806)
- the declared engine decides, and a contradiction refuses (#3760)
- releases list goes live, and Studio's launch/sign-in stop hiding the app (#3743)
- the prompt flow, the answer race, and a re-publish that re-notified every device (#3756)
- a hung rollout must go red, not quiet (#3748)
- don't let an absent projectId resolve to an arbitrary project (#3724)
- close the local proxy route around the approval gate (SEC-8) (#3726)
- release the push address on sign-out, and drop the dead device cache (#3738)
- let MONGODB_URI satisfy its own service's name tiebreak (#3741)
- the generator was capturing an empty Approvals screen (#3735)
- every approval card said "Unknown device" — the join used a dead plane (#3739)
- retention fixtures that cannot expire (#3684)
- the organizations page and the status rail each claim something untrue (#3677)
- the launcher could not find an agent the picker had just listed (#3666)
- stop the four lies the golden-path walk found (#3675)
- show what a curation pass is doing, and let an operator stop it (#3607)
- the wizard's first step asked where the project should live and took one answer (#3660)
- the DMG's branded window needs Finder, which CI had told the bundler to skip (#3664)
- stop selling org rules that auto-approve nothing (#3654)
- the org lost an owner where the insert could not promote (#3656)
- assert cross-stack outputs at the read, so a stale prod-persistent says so (#3648)
- nulling the submitter's id left their email and device id on the row (#3638)
- the perimeter's 401 page is not an error message (#3617)
- one brand casing, and a gate so it stays that way (#3599)
- repair the download page's dead docs link, and the UAT case that fails correct behaviour (#3598)
- reconcile device presence at boot, so a restart stops stranding devices online (#3596)
- scope Overview's user counts to the app portal (#3597)
- stop the pollers that deadlock truncateAll, and retry the ones that get away (#3552)
- carry orgId and clientType to clients, so an org pool worker is not read as your own machine (#3579)
- the at-cap refusal named nothing — its device lookup threw on every call (#3570)
- build the approval authority after the store opens, so a pinned key survives a restart (#3564)
- log why the relay rejected a session publish, not just that it did (#3561)
- a duplicated Content-Type meant nothing was ever published to the relay (#3557)
- the admin credential probe now only ever sees the perimeter (#3573)
- the relay is on the internet, so a shared WiFi is not the answer (#3567)
- WAFv2 rejected both descriptions, failing the prod apply (#3545)
- the CSP guard reads prose in a comment as a second directive (#3569)
- delete the translation crons and the impossible work they retried (#3505)
- a runtime barrel import from @checkpt/shared reds two studio specs (#3565)
- a migrated database is a schema, not somebody else's rows (#3560)
- say whose prompt the session is awaiting (#3518)
- the banner carries enough to report itself (#3526)
- /help routed bug reports to a Featurebase workspace we don't own (#3514)
- the shipped macOS bundle was SIGKILLed on launch — a restricted entitlement with no profile to authorize it (#3534)
- an auth rejection is not a network fault, and a swallowed 401 is not an empty screen (#3496)
- name the PostHog key, harden the secret write, and record posthogKeysWired (#3473)
- stop the PTY geometry churn behind the duplicate banners (#3516)
- main was red on three jobs, and none of them was a product bug (#3515)
- failed panes say why they failed, and stop dressing as empty ones (#3481)
- a missing git.diff path answered with a TypeError, not a reason (#3474)
- a device env override never reached a started process (#3466)
- a read-only .git leaked an absolute path past the redaction (#3471)
- a typo in .checkpt/env.toml renamed the file away and read as empty (#3465)
- deactivating a Google link did not sever it (#3463)
- two build profiles targeted a staging environment that never existed (#3451)
- move the admin roster onto Workspace identities (#3439)
- the Redis SG locked out the BFF throttler — 26s customer login (#3444)
- the hero dropped the desktop shot on every viewport under 1024px (#3442)
- the wizard contradicts itself on service counts, and three Stack rows render blank (#3412)
- the launch pane renders with no words at all (#3411)
- the fair-use footnote published a rate limit wrong three ways (#3438)
- the SAST baseline goes stale, so old PRs inherit main's findings (#3441)
- production shipped blind — reporter unarmed, boundary silent (#3312)
- the fingerprint runtime version was a fact about the machine, not the commit (#3393)
- expo-speech-recognition 56.x is built for SDK 56, not our 54 (#3407)
- centre the status pages, and drop the mascot name from copy (#3391)
- an expired prompt read as the user's rejection (#3349)
- the three #3151/#3158/#3170 follow-ups (#3370)
- sharing a note re-seals it to the org (#3357)
- the BYO Relay page claimed approval content skips the relay (#3348)
- let the relay say WHY the id differs (#3362)
- count the idle signal in parse telemetry (#3350)
- gate the Multi-step filter chip behind a recorded flag (#3346)
- list a deleted or binary file whose path contains " b/" (#3344)
- measure the banner — rule out the stuck store, report what failed (#3364)
- enforce on-device speech recognition, and grow the grammar rather than leave the device (#3342)
- the dashboard drew a Redis floor with no Redis (#3347)
- a repo-supplied exec env source needs a grant before it runs (#3318)
- the inline drawer must not lock page scroll or trap Tab (#3315)
- Redis connectors use ioredis subscribe + lowercase pipeline (#3235)
- redirect /status to the external BetterStack status page (#3027)
- probe the OS before handing a session a port (#3328)
- the Doctor now says a template over a secret can't resolve (#3332)
- own the page-scroll lock at module scope, not per modal instance (#3327)
- keep the pagination control a constant width as the page moves (#3329)
- guard the getCurrentWindow() that throws synchronously outside Tauri (#3310)
- a terminal session row stays terminal (#3326)
- stop claiming direnv sources .envrc.local, and say what does (#3335)
- the task host must not hand its config blob to the task (#3302)
- keep a file's line endings through open → edit → save (#3331)
- revalidate the Files tree, and offer refresh on healthy rows (#3333)
- serialize task starts per (project, session, name) (#3330)
- refuse a charged account's delete cleanly, and stop orphaning four tables (#3307)
- record devices_owner_label_unique in the schema snapshot — main is red (#3322)
- the wizard walk is red because one Tauri call throws synchronously in a browser (#3317)
- name the plan once and show it everywhere, make device names unique, and unrig the plan grid (#3263)
- the customSounds flag gated nothing — the feature already works (#3311)
- a degraded keystore no longer publishes plaintext prompts and session titles (#3309)
- impersonation read-only is server-enforced, and the two elevated secrets are wired (#3285)
- the revocation backstop looks devices up by id alone, which is no longer unique (#3308)
- give Android push a real small icon instead of a white square (#3299)
- name the unguarded locales, and stage the fr/tr imperative rules (#3017)
- a device going offline is not a statement about its sessions (#3253)
- a complimentary subscription ends when it says it does (#3255)
- a remote answer navigates from the marker, or refuses to act (#3249)
- voice listens in the user's language, not en-US (#3289)
- a rota that starts in three days pages nobody today (#3288)
- the production database cannot be destroyed by a routine apply (#3280)
- patch runtime CVEs — protobufjs ≥7.5.5, validator ≥13.15.22 (#3281)
- password reset kills every session, and cookie-mode stops leaking tokens (#3272)
- the status page needs design v2, and custom CSS is paid (#3278)
- regenerate the schema snapshot for the release-curation columns (#3284)
- the phone re-checks what a tip says and where it points (#3259)
- delete the RDS Proxy / read-replica flags — nothing read them (#3270)
- every REST call gets a deadline, and relay URLs must be https (#3252)
- stop claiming the /pair universal links we deleted (#3246)
- the org screens ask for a namespace that exists (#3248)
- the App Links contract is held together, and names both signing keys (#3238)
- keep the band's verbs on screen, pin the gauge's height, and give React Navigation the app's palette (#3234)
- take the last two purchase CTAs out of the shipped copy (#3100) (#3237)
- add placeholder-parity gate; fix 7 machine-translation drifts (#3223) (#3233)
- the export-compliance attestation matches the crypto that ships (#3165)
- surface the GitHub cause behind release 502s (#3115)
- one section identity across surfaces, and name the plan in Studio (#3096)
- one organization, one invoice — Team is bought per seat (#3090)
- the matrix omitted the one surface that always fires (#3088)
- the mic always comes back, and gated accounts get no FAB (#3068)
- draw an unreadable session title as a stand-in, not a name (#3065)
- the status bar's "Online" count must be the online one (#3063)
- Overview must not render a failed fetch as an empty state (#3062)
- reap the session rows whose owner is gone (#3055)
- one org, one charge — the founder is seat 1 (#3064)
- a phone can open org-sealed content (#3058)
- register PAT webhooks, per-registration secrets pinned to a repo (#3057)
- repair the integration specs that rotted red (#3051)
- five edge cases in the hash encoder and command resolution (#3013)
- one unreadable chunk no longer fails the whole output.tail (#3046)
- a partial profile update must survive both transpiles (#3044)
- org seat counts drifted from Stripe with nothing watching (#3042)
- a terminal-answered prompt records the option that was chosen (#3043)
- reopen encryption status + notification history on the peer proxy (#3002)
- order task defs after the secret VERSION, not the empty secret (#3035)
- delete Trusted Origins — Smart Rules already owns auto-approve (#3009)
- scope the session reconcile to the account that owns it (#2933)
- normalize the plan name before walking to the next tier (#2934)
- give a generator run an owner that outlives the screen (#2928)
- state the E2EE claim precisely on sign-in (#2931)
- stop reporting states that contradict the same screen (#2936)
- the session Terminal says which nothing it is showing (#2937)
- the org rules table's status column reads "Status", not "Enabled" (#2997)
- attribute Procfile/compose processes by language, not by sort order (#2897)
- declare Task.watch, and guard the registry order-dependence (#2944)
- a fresh worktree can start the stack from the checked-in steps (#2988)
- org quiet hours were resolved by the caller, so the two that couldn't name an org ignored them (#2987)
- validate a project_local mount before it becomes a spawn cwd (#2970)
- a watch teardown is addressed to its OWNER, not the mount (#2972)
- the vcs category had delivery and no switch (#2962)
- write the fs sketch's NUL separators as escapes, not raw bytes (#2926)
- an org worker can answer the member who addressed it (#2960)
- a notification setting that silently reverts, because two relay replicas cannot order a snapshot (#2957)
- make @checkpt/cli publishable — bundle the bin, declare what the tarball requires (#2959)
- the marketing navbar's desktop row fits 1280px in every locale (#2954)
- dedupe Nx target servers by command, not by workspace (#2943)
- org-worker sessions — the start paths that assume an account (#2949)
- org workers can read their org's projects, and their cache can hold them (#2946)
- the org dashboard renders prose again, not i18n keys (#2945)
- canonicalize request-supplied UUIDs, and fix the split audit trail (#2905)
- the overview's duplicate CTAs, silent checklist, and bare-email account menu (#2912)
- name the five icon-only controls a screen reader could not (#2930)
- clear a user's subscription rows before deleting the account (#2908)
- deleting an org revokes its worker pool — in both deleters (#2894)
- one top bar everywhere, and a drawer that stops shoving the app (#2917)
- the screenshot harnesses' account session signs itself out (#2914)
- model the org worker pool so dashboard-devices renders again (#2889)
- read projectType from angular.json, not just the Nx layouts (#2887)
- fingerprint project.json in the detect cache's fs sketch (#2888)
- one-click adopt of an out-of-date local Agent + release version guard (#2841)
- model GET /v1/orgs/:id/devices in the web screenshot mock (#2869)
- the seed prompt nobody submitted, and five more from a golden-path walk (#2863)
- write the .lproj files where the pbxproj points (#2861)
- gemini's MCP registration never took — untrusted worktree (#2856)
- name the ghosts before refusing at the device cap (#2847)
- tidy three rough edges — Pro-gated copy, Inspector collapse, popped-out window inset (#2849)
- detection you can reach with a projectId (#2846)
- model GET /v1/replays so dashboard-security renders again (#2845)
- don't offer Start for a per-session service with no session (#2828)
- one control per option, answered by index (#2832)
- stop repainting the whole grid on every keystroke (#2833)
- a failed config init must not cost the user their wizard answers (#2823)
- a collapsible Inspector, a header that stays on one line, and an ended session that says what happened (#2825)
- resolve checkpt-config in the target dir cargo actually uses (#2821)
- a session row that fits on one line, and an empty Env step that says which nothing this is (#2827)
- show a change's patch on the Diff tab, and notice edits made outside the agent (#2826)
- detect idle when Claude Code paints its composer placeholder (#2822)
- ScreenHeader's style prop takes StyleProp, not a bare ViewStyle (#2831)
- one top bar, a drawer footer that admits it exists, and Approvals filters you can see (#2829)
- the 150% deploy cap deadlocks a service scaled in to one task (#2804)
- key devices by owner, migrate legacy keys, reconcile enc_pub (#2777)
- admin-api and website-api images also need the generated migration registry (#2794)
- guard the throttler options shape, and stop telling operators auth needs no Redis (#2788)
- vitejs/vite's
packages/viteleaves the services list and types lib (#2689 + #2690) (#2697) - wire ANTHROPIC_API_KEY into the admin-api task definition (#2790)
- macOS keychain password-dialog spam — data-protection keychain behind a shared access group (#2770)
- pre-merge citation guard walks a cited epic's sub-issues (#2656) (#2781)
- Copilot round 4 — a header that gave an order, and a comment that stated a falsehood (#2780)
- connecting a code host belongs in Settings, and the source row stops wrapping (#2753)
- read what a run script runs, whose framework it is, and what Nx says (#2588, #2589, #2590) (#2671)
- a Mac's OS is macOS, not "web" (#2725)
- unreadable is not missing, and Next needs a chosen path (#2773)
- fail when a shipped migration's number changes (#2782)
- New Project names the projects folder the clone will use (#2757)
- the dashboard plan card states the plan the account is on (#2755)
- localized iOS permission strings are actually wired in (#2759)
- throttle counters are fleet-wide, and a code has a guess budget (#2771)
- a database that fails to open must not report healthy (#2763)
- repair the migration ledger the renumbering orphaned (#2778)
- device setup stops offering view-only to Community (#2758)
- four shipped-but-unreachable surfaces — voice FAB, Fleet/Rules headers, device icons, encryption honesty (#2747)
- the releases backfill gets its own concurrency group (#2765)
- a prod DB wipe no longer erases the Studio version ledger (#2731)
- a session that has ended no longer renders as "Idle" (#2724)
- the "Connecting…" gate can no longer hang silently (#2727)
- detect questions that don't end the line, and stop calling a stalled session "writing code" (#2726)
- Comp opens for a user with no subscription (#2723)
- two machines on one account are tellable apart (#2728)
- a failed publish can no longer advertise a release that doesn't exist (#2722)
- publishing a version twice no longer dies on AccessDenied (#2694)
- a dialog no longer freezes the window in place (#2693)
- draw the device's own platform mark, everywhere (#2684)
- the Agent could not start at all, and nothing noticed (#2685)
- make the window's top band draggable on macOS (#2687)
- stop CHECKPT_RELAY_WS pointing the socket at another relay (#2686)
- the collapsed sidebar is the admin console's rail, not a gutter (#2688)
- the site follows the visitor's OS theme, and says so (#2670)
- the collapsed rail stops growing a horizontal scrollbar (#2677)
- one scroll surface per terminal pane (re-land of #2641) (#2665)
- tell "store still opening" apart from "store failed", and stop blaming the user's devices (#2664)
- scope the key directory to the relay that vouched for it (#2643)
- a prompt's life is its session, not a five-minute timer (#2650)
- decide output.tail's decode by requester capability (#2633)
- stamp the release version into the daemon package (#2649)
- pairing sessions in the shared store, and a store outage that stops accusing the user (#2628)
- the terminal always accepts input, and an answered prompt always leaves the inbox (#2570)
- the biometric switches now lock something (#2620)
- materialize sound channels for every relay, not just the current one (#2625)
- stop the exchange banner contradicting the device it sits above (#2630)
guardcompletes the verification-gate vocabulary (#2582)- one shape from both arms of a routed config op (#2565)
- the env write must carry the schemaVersion it read (#2600)
- wait for the Agent before reconciling, and bound the retry (#2580)
- make a created project's services startable (#2548)
- four launch-readiness defects — foreground push, the update wall, dead links, a QA screen (#2562)
- author the Face ID and photo-library purpose strings, in all 20 locales (#2566)
- gate Custom Sounds and Voice — two surfaces that promise what they cannot do (#2563)
- re-own the org quiet-hours rules written as user-owned (#2549)
- promote the gRPC inspector off
soon(#2556) - bound and retry every apt call so a sick Ubuntu mirror can't eat the job (#2553)
- quiet hours that silently did nothing (#2532)
- the four bugs the first packaged Windows run found (#2544)
- promote the always-on headless agent off
soon(#2545) - make the session terminal usable — raw keys, no re-wrap, no poll-lag (#2519)
- surface the real Google sign-in failure, and simplify the auth forms (#2521)
- every drawer entry goes somewhere, and nothing it renders is invented (#2493)
- stop gating project creation on env vars, and make "Paste from .env" work (#2499)
- enforce concurrency account-wide at the relay (#2491)
- answer prompts at the relay tier, sealed, not through the source device (#2472)
- SSR manifest scan read comment prose as an import, breaking every Deploy Web on main (#2476)
- force-close a revoked device's sockets, whoever revoked it (#2463)
- one PTY host, and an output ring that stores the byte stream (#2443)
- classify the multi-window commands the locality guard missed (#2440)
- make the window's top band one line, and the collapsed sidebar a real rail (#2412)
- stop the PAT catch-all shadowing GitHub's connection routes (#2413)
- re-read membership when the Agent's relay link comes up (#2341)
- surface the real reason pairing failed, and let the daemon load SQLite (#2362)
- the device tabs deserve a real empty state, and the header a real chip row (#2344)
- name platform sets in prose instead of lowercasing the label (#2304)
- a device derives its id from its signing key (#2243)
- unblock the publish, un-empty the notes, pick platforms (#2272)
- one About surface — route the macOS menu item to the modal (#2268)
- point the win-arm64 bundler at signtool explicitly (#2247)
- kind worker/scheduler-role scripts as workers, not the borrowed framework kind (#2223)
- make PromptsAttentionAndEnvelope migration re-runnable (#2188)
- drop the stamped session deviceLabel, resolve by id (#2213)
- take the minor-unit divisor from Stripe, not from ICU (#2219)
- report a declared workspace member the nested-repo prune drops (#2204)
- merge exceptions per key, so a client cannot clear what it never sends (#2203)
- negatively-cache dev-login failures to stop the request storm (#2187)
- polyfill Intl.PluralRules for Hermes so plurals resolve (#2193)
- open the multi-step wizard from the relay prompt store (#2194)
- read session-screen prompts from the relay plane (#2196)
- demote hyphenated one-shot scripts from the services list (#2155)
- repair the hero glow and the dropped h1 clause, add a live agent feed (#2184)
- prune nested repo checkouts so workspaces count once (#2154)
- disambiguate repeated app chip labels in the wizard stack (#2173)
- subscribe per relay link, and delete the socket nothing assigned (#2122)
- stop exporting a secret pointer as if it were the secret (#2185)
- stop selling an exception the pipeline cannot evaluate (#2165)
- reposition marketing copy for Claude Code auto-mode default (#2147)
- skip the detector pipeline when the recipe generates nothing (#2138)
- pin bash on the linux-arm64 Agent job so
pipefailworks (#2137) - put the nine auth components' status colours on the semantic tones (#2117)
- localize the dialog's dismiss label, and stop duplicating cancel (#2133)
- make the wizard Env keychain promise honest (pre-flip minimum bar) (#2128)
- collapse duplicate runtime chips (F2) and stop the detect-failed screen telling a success story (F3) (#2127)
- define every colour utility, unify the Security controls, gate the class (#2083)
- refuse device transfer instead of reporting success (#2076)
- ApiKeyGuard fails closed and reads the header only (#2066)
- delete the three unscoped bug-report reads (#2064)
- sweep BillingPanel onto the type scale + text tokens (#2070)
- surface the proxy egress counters at /health (#2061)
- scope my-devices by the token, not by x-app-id (#2063)
- fail closed when the caller or the device owner is null (#2052)
- put the pinned Node 24 first on PATH via direnv (#2062)
- convert request bodies to decorated DTOs so the ValidationPipe is not inert (#2046)
- filter the inbox cache read to VCS rows in SQL (#2044)
- task category chips read semantic tokens in both themes (#1815) (#2037)
- localize the remaining mobile risk/state slug renders (#2039)
- #1810 — enforce the Node 24 pin, guard its drift, make ABI mismatches self-explaining (#2034)
- delete the two unscoped feedback reads (#1999)
- remove docs claim of Pro-gated diff previews that do not exist (#1895) (#2027)
- name the org whose relay you're on, and what isn't reachable from it (#2000)
- refuse up front when there is no key, and record a failed fix run (#2018)
- resolve the inbox row's project from its session, and drop the column nobody wrote (#1992)
- administer an explicit org in the Relay panel, not a guessed one (#2011)
- converge on answers from other devices, clear badge + tray (#2012)
- a bad device credential no longer strands the shell (#2009)
- the dashboard refetches when its tab comes forward (#1994)
- gate the mock Session-kinds editor out of release builds (#1987)
- pricing and billing name the capped thing a machine, not a device (#1990)
- stop aapt choking on BCP-47 locale tags in Android builds (#1984)
- read TypeORM's affected count for the prompt cap prune (#1986)
- translate the 141 seeded register violations, empty the allowlist (#1969)
- give the device-onboarding gate a way out (#1975)
- real timestamps for migrations, not a +1e9 counter (#1965)
- reconcile web/admin auth-surface drift and mark the forked files (#1970)
- Settings → Devices was a hardcoded fixture list duplicating DeviceView (#1964)
- stop the .envrc template from executing pnpm db:seed (#1957)
- catch the pricing locale JSON up to the #1921 machine-metering copy (#1962)
- give project rename + delete an entry point (#1926)
- stop taking a device id or an account on the caller's word (#1931) (#1949)
- translate Studio billing UI for es/fr/pt-BR/ru/tr (#1836)
- meter workers, not clients — a phone no longer consumes a device slot (#1921) (#1935)
- mobile code-level English leaks — prompt risk/state slugs + encrypted placeholder (#1123, #1403) (#1837)
- studio relativeTime() leaks English into translated timestamps (#1125) (#1838)
- invert the relay to default-deny — register JwtAuthGuard as APP_GUARD (#1928)
- localize the not-local fallback in useEnvFiles (#1927)
- assign monorepoKind 'cargo-workspace' for Cargo [workspace] roots (#1762) (#1808)
- co-rooted headline, port-less service dedupe, inert edit-kind button (#1774)
- the device-cap 403 the daemon can parse — plus the three blockers found verifying it (#1904)
- an Agent connection and its relay connection are two states (#1922)
- window drag under modals, ultrawide backdrop, narrow status bar (#1901)
- run a global ValidationPipe on the relay and website-api (#1920)
- treat cursor moves as layout so Claude's spinner survives the ANSI strip (#1822)
- the web dashboard tells a BYO account the truth about its own data (#1819)
- honour the client-supplied device id in the keyed enrollment path (#1640) (#1816)
- bound the revocation close reason to 123 UTF-8 bytes (#1817)
- attach applies .git/info/exclude when .checkpt/ already exists (#1811)
- force the detect live path on in release (mock DCE'd) (#1755)
- give the root postinstall its script before every image install (#1806)
- stop the coming-soon flash and the false state-mismatch on OAuth sign-in (#1772)
- pin the portal URLs and make the apex canonical (#1773)
- don't fail every Docker image build from the node-pty postinstall (#1741) (#1794)
- the alerting scripts run under
bash -e, which broke every guarded path (#1715) (#1788) - make every PTY spawn work, clean install and packaged sidecar (#1741) (#1782)
- revert the partial react-router major bump that forked the router (#1735) (#1736)
- copy libs/auth/types into the migration image (#1731)
- watch every web build input, and guard the filter from drifting (#1730)
- unbreak the API image builds (#1723)
- treat Copilot's suppressed findings as a persistent open set (#1717)
- derive the SSR runtime dependency list from the built bundle (#1720)
- serve project issues and change requests for PAT-bound projects (#1302) (#1700)
- stop leaking prompt title/summary/PTY context to the relay (#1703)
- surface partial scans + collapse services/env in detect adapter (G1, G2) (#1689)
- scan the scaffold-destination override in the detect effect (#1690)
- strapi CLI row + guard one-shot/hook framework promotion (G3/G5) (#1698)
- let the Studio capture use the simulated detector again (#1691)
- refresh device claims on a jittered cadence (#1638) (#1684)
- resolve a session's PTY env through the daemon (#1666) (#1685)
- resolve plan coverage across org membership (#1637) (#1681)
- fan control-plane events out across relay instances (#1497) (#1678)
- make FakeRedisHub's virtual clock actually virtual (#1673)
- regenerate stale makefile goldens to derived ruleset hash (#1651)
- resolve local (excluded) .checkpt config from the repo root for worktree sessions (#1634)
- unbreak main — align invariant suite + stale golden with composite-root synthesis (#1621)
- keep the relay to one task and deploy it stop-then-start (#1493) (#1604)
- parse Claude's welcome when facts sit beside the mascot art (#1597)
- synthesize root workspace for composite-only repos + referential-integrity check (#1135) (#1138)
- relay account-device surface + the fan-out that never worked; feat(#1321): blocking device-onboarding gate (#1562)
- wire RELAY_KEK into the relay task def (#1590) (#1595)
- capture Studio id/vi/cs — main is red (#1602)
- derive locale lists from the apps, add a coverage gate (#1469) (#1572)
- stop vendor update prompts reporting as parse regressions (#1571)
- add cs/vi to the blog locale list, guard it in CI (#1545) (#1546)
- point /issue board-add at project 12, not stale 7 (#1526)
- pin Tailwind's scan root so SSR and client emit the same CSS (#1513) (#1532)
- make the daemon URL runtime-configurable (#1475) (#1528)
- give container legs a Node before pnpm/action-setup runs (#1520) (#1521)
- allow the local-trust token to live outside the home dir (#1474) (#1518)
- key rate limits on the real client IP, not the proxy (#1489) (#1517)
- send the CSRF token on cookie-mode mutations so sign out works (#1504) (#1505)
- give the app a real relay credential (#1463) (#1486)
- run react-router typegen before the root solution typecheck (#1479)
- localize the New Project stepper pip labels (#1419) (#1464)
- require a JWT on the relay WS in every environment (#1462)
- backfill missing uk approval-rule error translations (#1465)
- light-mode sidebar logo, org switcher wording, security page layout (#1459)
- dashboard feedback sweep — organizations terminology, truthful overview, working security page (#1445)
- finish the Operations tab strip's token migration (#1444)
- security page sessions table overflow — bounded UA column + shared parseUserAgent (#1443)
- bundle daemon + config sidecars in Windows portable zip (#1388)
- regenerate fastify-api and sveltekit-app goldens (#1362)
- system requirements reflect what the shipped bundles enforce (#1330)
- truth sweep — remove unshipped tier claims across pricing, docs, and FAQ (#1347)
- legible light-mode auth + app-wide contrast sweep + sign-in redesign (#1287)
- reconcile end-to-end-encryption claims with what actually ships (#1227) (#1286)
- deny symlink traversal when the repo root realpath is unresolvable (#1098)
- backfill relay/version keys into lagging locales (hi, zh-Hant, nl) (#1268)
- admin — sweep residual accent/status utilities + literal white onto semantic tokens (#1250)
- repair Studio de/ja locale drift — main is red (#1213) (#1215)
- terminal pane blank on tab re-activation — keep mounted + re-fit/refresh (#873)
- checkpt-app pt-BR — top up #1175 billing intent error keys (#1194)
- de web — top up #1175 billing intent error keys (#1188)
- pt-BR Studio — top up #1021 tray + agent-lifecycle keys (#1187)
- set website-api FRONTEND_URL for Stripe checkout redirects (#1155)
- preserve raw body for Stripe webhook signature verification (#1151)
- stop packages/shared changes triggering the macOS mobile E2E (#1118)
- transition sessions to awaiting-input on PTY quiescence (#671) (#986)
- add missing fr Studio keys for tray + agent lifecycle (#1129)
- re-run control-plane bootstrap after auth.provision (#664) (#985)
- normalize nested set-array sorting + stub root id conformance (#425) (#1045)
- wire Studio desktop OAuth clients into website-api task def (#1109)
- bundle @aws-sdk/* runtime deps so the image boots (#1092)
- drop the last stale FEATURES.vcs reference (#660) (#1093)
- default VITE_CHECKPT_BASE_URL instead of hard-throwing on a blank page (#675) (#851)
- widen docs content to footer edge, retune footer spacing (#1025)
- retry only CSRF 403s; mark the token response non-cacheable (#1031)
- stop token-refresh storm (single-flight + failure backoff) (#979)
- restore Dock/keyboard focus for macOS dev runs + worktree stamp (#928)
A11y
- the axe gate had never looked at admin, at the public board, or at the two routes with live findings (#3628)
- an overlay inside the screen it covers is not a modal (#3624)
- the keyboard path into a clickable row is a real button (#3619)
- the ratchet only ever walked the app it was born in (#3618)
- drain the last 60 raw literals off the ratchet (#3537)
- drain the 119 raw-color literals the contrast guard cannot see (#3543)
- drain the last 63 raw-palette utilities off Docs and the portal banners (#3542)
- drain the last 10 raw literals in the shared auth UI (#3539)
- axe runs against the rendered DOM in the one check that gates a merge (#3361)
- skip-to-content link, field-level error association, and the missing h1s (#3293)
- make aria-modal true on the thirteen surfaces that claimed it (#3287)
- the icon-only controls say what they do, and the ratchet keeps them saying it (#3258)
- the high-visibility pages leave the raw palette (#3240)
Deps
- the shipped subset is derived on every run, not remembered once (#3717)
- the image already installs the shipped closure — now it audits it (#3720)
- most of the alert stream was about files that are not the product (#3640)
- the prod audit is a watch, permanently — and here is why (#3641)
Dr
- give the recovery drills a cadence, a named owner, and a dataset column (#3699) (#3761)
- name the KEK custody window so raising retention shows up in the plan (#3734)
- a retired KEK must outlive the newest backup that needs it (#3649)
- the feature was built, and pointed at nothing (#3634)
- the staleness probe watched the website, not the tier that matters (#3633)
- DR-4 — the rollback is rehearsed, and the runbook stops calling it a claim (#3581)
- Drill B — the vault restore is faster than PITR, and its metadata does not round-trip (#3477)
- the restore path is rehearsed, and the backup history now outlives the instance (#3383)
- one env var could turn every merge to main into a prod wipe (#3354)
- DR-2 — a delete you can take back, and a copy of the key that cannot be re-derived (#3300)
- incident response — runbook corrected, alert-delivery state on record, incident runbooks sketched (#3282)
I18n
- the org invitation email speaks the reader's language (#3241)
- finish applying "CheckPt Agent" — 40 shipped strings said "daemon" — plus the locales/** guard (#2729)
- route the Settings tab rail through t() (#2068)
- route project + session tab labels through t() (#1785) (#1800)
- localize docs system-requirements table rows (#1336) (#1508)
- pl — mobile (checkpt-app) (#1276)
Infra
- website-api can call Anthropic, and says at boot whether it can (#3652)
- SSR hosting for public web — Fargate origin + CloudFront/caching (#1341) (#1477)
Legal
- the pack's own subprocessor tables were two vendors behind the list (#3685)
- the privacy policy now says staff can sign in as you (#3637)
- mobile telemetry is crash-only — replay off is the decision, analytics off until consent exists (#3453)
- write every legal document CheckPt needs — counsel checks them (#3384)
- the subprocessor list named neither vendor adopted since it was written (#3355)
- an honest privacy policy — subprocessor list, DPA path, real company name (#3245)
License
- a NOTICE was carried only if the manifest admitted to Apache (#3455)
- ship third-party attribution with every distributed artifact (#3325)
- drop the AGPL-3.0 ua-parser-js@2 before it ships (#3239)
Ops
- build the activation funnel and prove it populates (#3770)
- the apt retry deleted the directory apt needs, so every retry after the first was decorative (#3751)
- watch the crash stream, and gate the accessibility tree (#3742)
- the Studio E2E gate called "the deps never installed" a test failure (#3749)
- a placeholder Stripe key survived every probe we had (#3716)
- the native gate never compiled to completion — disk, then timeout (#3683)
- make the coverage-reachability claims enforceable, not remembered (#3504)
- nothing compiled native code, so a cross-SDK package merged green (#3454)
- give mobile a bundle gate, and fix the break it found (#3360)
- the path-filter guard now covers the test workflows too (#3351)
- give mobile a compile gate on PRs, and inventory the rest (#3345)
- say where codecov's floors actually apply — trunk, not PRs (#3341)
- the wizard walk gates PRs, and its stale gate assertion is gone (#3251)
Polish
- lay out honestly on a tablet (#3686)
- store-submission sweep — zh script split, RECORD_AUDIO, one brand casing, dead route, font clamp, stale docs (#3314)
Sec
- the BYO pages omit what the relay cannot boot without, then say to skip it (#3774)
- the flow log kept the refused half and dropped the useful one (#3773)
- three credentials and one ALB attribute with no owner (#3772)
- a key removed from the seed was never removed from the account (#3701)
- the Homebrew tap PAT is the credential SEC-19 retired, still live on the install path (#3703)
- we documented a required secret nothing reads (#3704)
- cover the app-switcher snapshot, and re-lock after a minute away (#3736)
- scope the deploy role's CloudWatch Logs read off
*(#3702) - the admin plane gets its own key, and the release PAT goes away (#3576)
- an incident now leaves a forensic trail — ALB access logs, VPC flow logs, CloudTrail (#3575)
- SEC-4 — the admin plane stops being a committed password (#3479)
- RELAY_KEK becomes a keyring, and rows say which key wrapped them (#3464)
- derive the DR seed image from the live task definition (#3450)
- the publish DTOs still advertised plaintext payloadVersion 1 (#3431)
- pin the Clerk secret key now that the application is deleted (#3418)
- SEC-24 — a SAST that runs, and a secret scan that sees history (#3403)
- SEC-24 — pin every action, drop root, stop trusting a URL (#3404)
- pin the prod deploy role to main + a gated production Environment, drop its secret read (#3353)
- SEC-8 — the process asking for permission could grant it (#3365)
- SEC-18 blast radius — immutable ECR, per-service SGs and execution roles (#3379)
- a push hint could point the app at any relay, which harvested an account-scoped token (#3363)
- a compromised org pool worker could reach every device of every member who used it (#3356)
- SEC-1 — bind device ids to identity keys on key-directory ingest (#3303)
- SEC-21 — desktop hardening: tokens to the keychain, command_spawn takes a recipe, CSP narrowed (#3324)
- SEC-20 — the Android backup that prebuild turned back on, and a posture that lived in an optional argument (#3321)
- SEC-11 — CSP was report-only, and enforcing it would have broken the app (#3304)
- SEC-23 app hardening — session-bound CSRF, step-up re-auth, invite binding, envelope AAD, daemon keychain (#3295)
- SEC-22 relay hardening — fail-closed org guard, view-only exec gaps, sealed run/inbox detail (#3294)
- gate analytics and session replay on cookie consent (#3275)
- a refresh token is not an access token, and the WS credential leaves the query string (#3276)
- SEC-7 — the daemon served session output, inbox and identity to the LAN unauthenticated (#3277)
- audit the denials, and stop a wipe erasing the trail (#3268)
- the admin portal has no signup and no CLI grant (#3273)
Security
- ship a content security policy, replacing csp: null (#2217)
- gate Swagger out of production + security headers on the web/admin origins (#2146)
Tooling
- the suppressed block is a heading, so the documented parse found nothing (#3778)
0.1.4-test.8
9 tháng 9, 2026Chi tiết
What's New in v0.1.4-test.8
Added
- give App Review a way to actually exercise the app (#3771)
- an org-owned machine opens a read-only Studio, not a sign-out (#3839)
- a device page answers what is RUNNING on the machine, not what projects were opened on it (#3825)
- the approval proof survives the pipe (#3817)
- Personal or Organization at device setup (#3796)
- settings was a 1000x680 dialog that never grew — it is a screen now (#3779)
- approval-signature groundwork — content commitment and key publication (#3763)
- give a device to the org — user→org ownership transfer (#3752)
- spoken replies — state the scope, cooperate with screen readers, respect quiet hours (#3769)
- the two drawer entries that led nowhere, answered (#2487, #2488) (#3754)
- the activation events — device paired, first session, first approval (#3698)
- the public board screens what reaches it (#3674)
- Studio's events were anonymous — they now carry the account (#3687)
- Studio had no analytics gate at all — now nothing is captured before consent (#3661)
- a load target that can actually be a fleet (#3650) (#3655)
- Integrations was four screens of one flat list — split it into three rail pages and collapse the connect forms (#3670)
- consent was an island in AsyncStorage; it now follows the account (#3669)
- the web activation events — signup through subscription (#3663)
- what plan is this user actually on, and who owns Lockdown Media (#3642)
- analytics consent belongs to the account, not to one browser (#3623)
- observe whether prod has been applied, daily and without credentials (#3644)
- every event was an anonymous device — web now identifies the account (#3639)
- voting on the public feature board (#3577)
- declare the iOS privacy manifest the binary was shipping without (#3574)
- the public board's front door (#3580)
- brand the Windows installer and localise its chrome (#3586)
- a public roadmap anyone can read, logged out (#3550)
- human control of the public feedback board (#3558)
- the event taxonomy — names are a schema, so decide them once (#3535)
- put Dave and Gulsah in Lockdown Media Inc. on the Team plan (#3538)
- the generator grid gets its brand marks (#3517)
- branded drag-to-install window for the macOS DMG (#3540)
- evaluate approval prompts against stored rules and auto-approve on match (#3494)
- feedback votes table + publication/moderation columns (#3510)
- in-app analytics consent control (#3478)
- honour Global Privacy Control — the banner asked people who had already answered (#3468)
- backend exceptions were being reported to nobody (#3457)
- rebuild the Sessions control bar, and make the launch wait say what it is (#3449)
- Stripe Tax, behind a flag, so the registrations stop blocking the code (#3408)
- the admin console has no password (#3358)
- reclassify service ↔ task in the wizard, persisted as an override (#3340)
- record the over-cap state a downgrade leaves, and tell the account holder once (#3319)
- Orbit takes over the 404, error and suspense screens (#3256)
- a kill switch that does not need a deploy (#3290)
- async release-notes curation, visible outcomes, and a workable editor (#3266) (#3269)
- watch production between deploys, and stop claiming it's up (#3095)
- record ToS/Privacy acceptance at signup, and gate age (#3243)
- make the promised data export real (GDPR Art. 20) (#3242)
- brand marks for every framework, service engine and agent (#3247)
- the push prompt is asked once, with a reason in front of it (#3250)
- the account-level notification class — billing and security events reach a person (#3097)
- the review screen runs on real data, and the flag it hid behind is gone (#3176)
- hands-free mode — a screenless conversation (#3076)
- seal the notification-history body at rest and on both read planes (#3117)
- the six machine-origin events reach the bell (#3087)
- serve per-check CI detail and PR review comments (#3093)
- a daemon secret.* op family, so env secrets land on the device that reads them (#3070)
- gate notification routing, email cadence & chat-started tasks (#3084)
- stamp every account-scoped cache, defer an unreadable approval, and give a service runtime an owner (#2853) (#3080)
- prove a prod deploy worked, don't assume it (#3069)
- PR queue kanban + swimlane layouts (#274) (#3066)
- DEK-encrypt the digest queue's content and cut its TTL to 16 days (#3056)
- give org-owned webhook destinations a surface (#3048)
- tell a member what they lose before they confirm leaving an org (#3050)
- discover compose files and Procfiles outside the repo root (#2899)
- cloud worker recipe + ephemeral lifecycle (#3022)
- give inbound chat a UI, and a /link-chat page that isn't a 404 (#3024)
- prove the phone's device id instead of asserting it (#3029)
- the phone can say where a project's events go (#3021)
- surface delivery failures — a dead channel is announced, not just counted (#3004)
- human-quality service display names (#2898)
- auto-checkpoint every turn — the undo point is always one turn back (#2980)
- the connector gate resolves per row, from that row's owner (#2999)
- a datastore pass, so Workspace.orm stops being inert (#2941)
- the wizard's Project name says it is required (#2938)
- compose parser v2 — YAML lib, extends, IPv6, override merge (#2903)
- the three rungs Studio could see, and the fourth it sent you to your phone for (#2994)
- a session on an org worker runs as the member who started it (#2974)
- connector docs + the ecosystem chips #1312 took away (#2964)
- gate connector management — one key, owner-scoped, on three planes (#2963)
- a routing rule matches a SET of events, not one category (#2983)
- desktop notifications, and the toast you don't get for the window you're looking at (#2975)
- org workers on a BYO relay — redeem enrollment through the identity boundary (#2973)
- custom webhook destinations — outbound HMAC signing, an SSRF guard, and per-destination health (#2953)
- an org connector switched off blocks the server for everyone (#2965)
- WebSocket/SSE inspector — watch on inspector.read, frame send behind inspector.exec.ws (#2743)
- the phone says where the work runs, and why one more will not start (#2956)
- project portability tiers — pinned projects, a project-first picker, and graduation (#2947)
- run the D2 override layer inside detect() (#2896)
- resolve
nrscript-runner indirection (#2868) - N-entry per-agent MCP config provisioning (#2940)
- one VCS event, one post per destination (#2900)
- geometry that outlives the PTY, and a barrier for "done writing" (#2951)
- resumable sessions — pick your work back up after a crash, reboot or shutdown (#2935)
- the concurrency wall names what is running, and offers to stop one (#2950)
- connector management — catalog, scopes, per-project opt-out, audit (#2932)
- every advertised channel real or removed — email wired, SMS deleted, desktop withheld (#2927)
- promote the runtime DetectionResult validator into the package (#2890)
- rspack and rsbuild are framework CLIs, not tool tasks (#2866)
- decompose a nested composite, and let chain ambiguity survive (#2904)
- at-cap recovery — the refusal names what is running, and offers to stop one (#2925)
- Studio sidebar goes project-first; devices become availability metadata (#2751)
- wire the connector gate — proxy, approvals, deny handling, audit (#2842)
- safe shutdown — one "you have active sessions" treatment at every boundary that means leaving (#2895)
- one decision engine — reconcile the two routing planes, delete the loser (#2893)
- tell the other phones when a sound changes (#2891)
- shared-worker credential resolution — org-owned VCS connections, the clone ladder, and a preflight (#2858)
- device-code enrolment replaces pairing (#2844)
- gate session sharing & export at Pro (#2852)
- an org's worker pool on the web, with owner/admin revoke (#2854)
- the event catalog, and the events that were never raised (#2631)
- rebuild the session top bar as one aligned row (#2855)
- org worker slots — a pooled entitlement, and an org that pays for it (#2801)
- surface session export + share from the drawer (#2354) (#2837)
- curated connector catalog + BYO, with row provenance (#2843)
- org workers become routable — owner-scoped proxy plane + a picker that names them (#2738)
- start Add service from a component picker, not a blank form (#2830)
- one release button, a dialog that fits, and platforms you can actually combine (#2791)
- connector credentials — keychain storage + device-local OAuth (#2754)
- shareable read-only session replay links (#2756)
- start an agent task from Slack or Discord (#2784)
- a rail that discloses instead of hiding, and panels that actually draw (#2803)
- gate session checkpoints behind Pro (Class B daemon) (#2772)
- an org worker can publish a session, attributed to the member who started it (#2740)
- session gist — what a session is about, and where you left off (#2752)
- org governance — permitted backends, no-literal policy, reference audit (#2750)
- external secret managers via vendor CLI + .checkpt/env-sources.toml (#2746)
- sibling-worktree and sibling-project providers (#2741)
- gate the inbound VCS webhook pipeline at Pro (vcs_event_stream) (#2760) (#2769)
- approve/deny an agent action from Slack or Discord (#2749)
- infer project-vs-session scope from worktree variance (#2739)
- auto-pull on session start — clone+attach on the target device when unmounted (#2572)
- markdown session summary + diff/patch export (#2737)
- every restore takes a safety checkpoint first (#2735)
- MCP connector registry — entity, CRUD, scoping and distribution (#2629)
- account-wide merged project list with per-project device availability (#2721)
- terminal recording — a session's output ring as an asciicast (#2576)
- inbound Slack + Discord apps and chat identity mapping (#2654)
- session-drawer Checkpoints UI (#2328) (#2638)
- MCP server inspector — catalog on inspector.read, tool call behind inspector.exec.mcp (#2645)
- inbox triage on the relay tier — snooze/dismiss actually leaves the feed (#2640)
- BYO relay — the operator sets the limits, not the hosted plan (#2574)
- the projects folder is editable from Settings (#2675)
- test a clone URL before cloning it (#2679)
- delete a release that never shipped, and give its number back (#2674)
- one empty-state component, even hero tiles, always-four quick actions (#2662)
- seed the default Studio tips catalog (#2660)
- honest local-folder copy, empty-repo default, and explained-disabled controls (#2663)
- fleet parse telemetry — production as the ultimate canary (#2637)
- lift the dark ramp off flat black and give headers their own band (#2659)
- serve web's auth-gated screens from a mock, and gate the surface (#2634)
- org workers resolve their own relay map (#2636)
- sortable releases table, last-edited attribution, and layout fixes (#2646)
- session-attributed notes, drop the
notesflag (epic #2099 exit) (#2618) - the daemon evaluates approval rules (#2639)
- GraphQL inspector — introspection + a query runner that is provably a read (#2537)
- seal org-hosted session content to the org, not one account (#2624)
- checkpoint ops — restore, delete, and the four daemon verbs (#2619)
- configure expo-updates so launch binaries are OTA-capable (#2602)
- org enrollment tokens + checkptd pair --org-token (#2575)
- voice steering — approve or deny with a spoken instruction, on-device (#2547)
- wire Custom Sounds end to end and remove its flag (#2567)
- queue / broker inspector — Kafka, RabbitMQ, BullMQ, NATS (#2539)
- detect services from Nx project.json targets (#2222) (#2592)
- Linear connector (issue→session) (#2578)
- rotate the org content key forward, on an authenticated declaration (#2554)
- inbox snooze and dismiss actually work (#2596)
- the Sessions tab as cards or a table, with search and filters (#2533)
- checkpt agent — CLI surface over the Agent's OS-service machinery (#2571)
- audit the data_inspectors gate against the verb registers — derived, never listed (#2569)
- fail the PR that closes a cited matrix issue, before the merge does (#2577)
- pairing screen offers Studio and terminal, not CLI only (#2564)
- unlist post-MVP coming-soon rows for launch; promote GitHub Projects (#2360) (#2573)
- only the device running a dev server can name its address (#2536)
- GitHub Projects (v2) connector (issue→session) (#2541)
- gRPC inspector — reflection schema browser + gated call builder (#2540)
- org-owned devices — ownerType/ownerId, guards and counters (#2518)
- create flow stops asking for a directory — placement defaults into the projects root (#2535)
- resolve entitlements from the owner of the thing being worked on (#2538)
- serve the plan catalog to Studio, and ask for a billing region instead of a currency (#2546)
- env sources — persist the wizard's env, and sweep every place a value can come from (#2528)
- version-skew UX for a standalone Agent Studio doesn't own (#2534)
- org keyrings reach every door, and stop growing quadratically (#2516)
- revamp Home, add a system-metrics tile, and fix the empty Inbox (#2530)
- Jira connector (issue→session) (#2501)
- API viewer → Postman-like — collections, environments, history, auth, import/export, assertions (#2494)
- the entire agent-facing MCP surface is Pro (agent_mcp_tools) (#2517)
- Redis viewer power — value/TTL edits, pub/sub monitor, memory stats, export (#2509)
- a loopback Agent that isn't co-located stops being treated as this machine (#2515)
- per-device projects root — onboarding step + daemon settings store (#2511)
- per-owner entitlements claim, and no back-compat for relays that don't exist (#2497)
- Home, Inbox, Sessions and Devices as the phone's four tabs (#2484)
- MongoDB inspector — collections + document browse (#2492)
- mutating MCP control tools ride the approval flow (#2498)
- record who started a session, from the channel and not the body (#2500)
- remote-aware project picking for non-co-located Agents (#2490)
- remove the Community cross-device approvals cap (#2483)
- brand the app icon and splash (#2482)
- Postgres viewer power — SQL editor, EXPLAIN, export, ER diagram (#2464)
- one subscription per account, on every plane (#2428)
- wire the Notes tab to the relay's real sealed notes (#2467)
- give mobile the console's semantic palette (#2468)
- the relay derives the device id, it no longer accepts one (#2478)
- make VCS provider availability config, flag and secret together (#2474)
- guard the Compare-plans matrix localization, and fix nine leaks (#2475)
- mail catcher inspector — four products behind one closed op union (#2453)
- update dialog renders localized release notes from notes.json (#2454)
- one scrollbar across web, admin, Studio and mobile (#2414)
- session-scoped MCP inspector query tools (read-only by construction) (#2465)
- mobile deploys from admin — EAS build + internal-track submit, watched end-to-end (#2466)
- scaffold a new project straight into a repository (#2461) (#2470)
- presence is per relay — render known-but-not-connected (#2460)
- MySQL/MariaDB inspector behind the existing db verbs (#2451)
- personal vs org allowances, and the owed BYO qualifier (#2459)
- gate on resolved feature entitlements, not the plan tier name (#2457)
- session-scoped MCP control tools — services, tasks, checkpoints, env doctor (#2455)
- tell the old audience when a row stops being theirs (#2212)
- gate issue-seeded sessions behind issue_seeded_sessions (#2446)
- the mutating inspector capability, per family (#2450)
- merge on read across relays, with legible degradation (#2445)
- session-scoped MCP observe tools — logs, status, ports, diff, deps (#2395) (#2448)
- changelog renders localized summary + expandable details from notes.json (#2447)
- gate the data-plane inspectors behind
data_inspectors(#2449) - config-driven Compare-plans comparison matrix (#2432)
- force on re-detect + last-known digest on cold open (#2273)
- confidence calibration pass — reliability table, ECE, H1/H2/H3 verdicts (#2274)
- ship as a free companion, remove all in-app purchasing (#2438)
- seal project_notes title+body to the author's devices (#2431)
- pick a device, get that device's agent list (#2433)
- inject the session-scoped MCP endpoint at agent spawn (per agent type) (#2437)
- inspector framework — an engine signal, a viewer registry, and a shell (#2426)
- publish structured notes.json (all locales); demote latest.json notes to transport (#2434)
- chunked transport for mobile image input over the proxy plane (#2415)
- gate the PR / change-request queue behind change_request_queue (#2429)
- apply the Appearance editor settings to the real editor (#2430)
- sweep the Tauri commands that answer about the wrong device (#2419)
- release_note_translations — fan-out on finalize, trailing, human-review locks (#2316) (#2427)
- extend the PlanFeatureKey gate framework (#2361)
- multi-window launch configurations — scoped windows, per-window scale, saved layouts (#2388)
- MCP server scaffold with per-session token auth on /mcp/v1 (#2408)
- wrap the org key into the invite, unwrap on accept — no online teammate required (#2387)
- admin-managed "Did you know" tips (#2418)
- say so when a session ends or a project is saved or deleted (#2417)
- release curation review UI on ReleaseDetail (#2315) (#2403)
- route the session diff through the daemon so remote sessions reach parity (#2400)
- AI curation pass over a release's draft notes (#2314) (#2343)
- give sign-in and first-run the Studio scene (#2381)
- deploy-console redesign for the release detail page (#2271)
- session Files surface + open-a-changed-file from the diff lists (#2308)
- make Expo Go a working dev mode, with banners for what's off (#2312)
- stop wiping the database on deploy, launch it from the console (#2267)
- detect.* LRU + SQLite cache, force, and detect.summary (ADR 0009) (#2227)
- project Files tab on the real mount root — removes FEATURES.filesBrowser (#2245)
- deliver org invitations by email, and let an admin resend one (#2209)
- make the Services step tell the truth, and let the user correct it (#2206)
- bind getCiStatus for Bitbucket and Azure DevOps (#2216)
- Bitbucket + Azure DevOps webhook event adapters (#2210)
- CodeMirror 6 and the shared FileEditor component (#2225)
- org content key + kid-addressed keyring (#2215)
- one device↔device plane for session I/O — and a gate so it can't rot again (#2158)
- file.* op family — list, read and write a project path (#2218)
- multi-currency subscriptions across 19 launch currencies (#2112)
- env secrets actually resolve — OS keychain read + write, resolved late so nothing persists (#2198)
- make the phone the hero below lg, and stop shipping the desktop shot to phones (#2186)
- merge semantics on read paths — union devices and approvals, qualify projects by relay (#2079)
- notes get an owner and an org — private by default, promoted to share (#2163)
- close the mobile parity gap — Projects, Inbox, org templates, Home (#2183)
- fleet view — every agent session across every device on one screen (#2174)
- detector-wizard fixes (#2141, #2140, #2145) + Studio chrome pass (#2153)
- materialize context files, and an ownership ledger to make it safe (#2131)
- exhaustive route-crawl mode (OVERFLOW_MODE=all) (#2058)
- seeded session fixture for auth-gated screens (#2056)
- confirm ownership transfer, and only ownership transfer (#2116)
- section-scoped value-vs-
enleak gate (#1835) - stage releases by bump, with the server owning the version (#2110)
- connect-on-demand relay sockets, keyed by relay (#2082)
- native Android billing via the Stripe Payment Sheet (#2098)
- fail-closed overflow CI gate + per-surface baseline ratchet (#1832)
- GitLab webhook event adapter — /webhooks/gitlab now serves (#2092)
- meter cross-device approvals on the hosting daemon, never local ones (#2088)
- apps/web surface under vite dev (#2055)
- context-file manifest, path gate and handoff materialization plan (#1995)
- route relay.rest by org, so writes land on the right relay (#2078)
- fan the push token out to every registered relay (#2075)
- hold N relay connections with per-relay credentials (#2050)
- fail-closed approval gate for agent MCP tool calls (#1997)
- gate organization creation behind the Team plan (#2051)
- register on every resolved relay — N credentials, not one (#2043)
- add the mobile RN-web surface + static length-delta backstop (#2015)
- view-only devices, gated to Pro+, plus Studio plan awareness (#2036)
- relay-qualified project identity — declare the axis, key on it, store it (#2026)
- resolve every relay per org, not one URL per user (#2033)
- stamp the owning-relay hint into the push data payload (#2030)
- task run history — exit codes, durations, revisitable output (#2001)
- signed-request verification and approver authorization for Slack approvals (#1998)
- auto-fix parser regressions into a draft PR (#1996)
- anonymous QR re-pair keeps its device id by proving the key (#1951) (#2002)
- source /changelog and /docs/whats-new from the live releases feed (#2003)
- device-limit dialog offers only workers for removal (#1936) (#1988)
- report a connected phone as online, and teach the device pickers to tell kinds apart (#1991)
- expose the inspector query ops over the proxy (#1982)
- sessions replicate like devices and projects — not peer-cache fan-out (#1950)
- mobile answers prompts over the relay-brokered transport (#1932)
- enforce the ratified per-locale register in CI (#1946)
- give chat channels a workspace to belong to (#1305) (#1899)
- localize pricing plan bullets, limits & CTAs (#1834)
- a relay that is already enrolled converges instead of duplicating (#1929)
- keyboard shortcuts for pinned task quick actions (#1797) (#1925)
- Redis service inspector — SCAN-based keyspace browse (read-only) (#1914)
- relay self-enrollment — one-time token, registered key, no shared secret (#1908)
- let a service declare its port through an env var (#1916)
- Postgres service inspector — schema + data browse (read-only) (#1910)
- runner service inspector on real process state + output (#1583) (#1902)
- attribute webhook events to their project and org (#1305) (#1898)
- email notification delivery via SendGrid + Email chip (#1308) (#1648)
- mobile service inspector on real Metro state (#1587) (#1824)
- initialize starter config for a project with no .checkpt/ (#1664) (#1839)
- API service inspector — route discovery + auto-addressed request builder (#1584) (#1823)
- expose config, exec and service ops over the proxy (#1821)
- frame the wizard detect services/env as a preview (#1759)
- overflow-detection engine + Studio surface (#1744)
- services topology view on real declared deps (#1575) (#1818)
- register the Romanian (ro) locale — web switcher + backend catalog (#1385) (#1652)
- enforce allowRemoteSessions end-to-end (#1813)
- build the shared Docker install layer on every PR (#1795) (#1809)
- session output over the shared cursor/gap contract (#1542) (#1807)
- prompts to relay tier — an approval survives the originating device going offline (#1791)
- web service inspector on real dev-server state + embedded preview (#1582) (#1801)
- dependency-ordered cascade start/stop with readiness gating (#1581) (#1777)
- pinned tasks surface as session quick actions (#1568) (#1798)
- funded-turn tier — assert the in-flight hooks against a real turn (#1787)
- Discord and Teams webhook channels (#1306, #1307) (#1781)
- i18n the live-detect surface (DetectStep log + errors) (#1758)
- P3c — Python pack parity (tooling + registry-miss) (#1708)
- adopt the shared stream for devices and projects (#1541) (#1790)
- run a session's tasks in that session's worktree + env (#1567) (#1770)
- real per-service CPU/RAM sampling, process-tree inclusive (#1580) (#1768)
- Env import pane writes real config (#1560) (#1750)
- forward the whole account stream, and give the Agent a cursor (#1538) (#1767)
- session Services drawer on real daemon runtime (#1728) (#1752)
- Slack webhook channel — destinations, subscriptions, daemon dispatch (#1305) (#1670)
- alert on prod deploy failures in Slack (#1715) (#1743)
- one entity cache + cursor/gap handling, retire the per-store reducers (#1745)
- run a task in a PTY pane via a daemon-owned run (#1566) (#1737)
- per-service log capture + stream to the Logs surface (#1579) (#1733)
- health probe executor (http/tcp/exec) — real service health (#1578) (#1732)
- one cursor/gap/snapshot service for every entity (#1537) (#1714)
- shared vs per-session service lifecycle + cross-worktree ownership (#1577) (#1710)
- org-curated starter template list (#1635) (#1688)
- Env Ports pane on real daemon port allocations (#1559) (#1699)
- project Tasks tab on real .checkpt/tasks.toml (#1565) (#1665)
- guarantee sessions carry a resolvable relay project id (#1529) (#1647)
- service supervisor — spawn/stop/restart + runtime registry (#1576) (#1683)
- Romanian (ro) — Studio (#1675)
- Romanian (ro) — mobile (checkpt-app) (#1672)
- Romanian (ro) — web + backend templates (#1660)
- Go rule pack — gin/echo/fiber/chi via go.mod (P3b) (#1524)
- transactional outbox so a mutation cannot skip its fan-out (#1536) (#1682)
- authenticated encrypted peer-session channel (#1523) (#1686)
- P2 — runtime versions + non-JS package managers + unrecognised notes (#1480)
- write .checkpt/ at project creation, without the npm CLI (#1592) (#1671)
- Env editor pane on real .checkpt/env.toml (#1557) (#1668)
- project Services tab on real .checkpt/services.toml (#1667)
- subscribe-gated + compressed cross-device streaming (#1415) (#1658)
- BYO relay reads identity from the hosted relay (#1623) (#1649)
- route proxy.forward across relay instances (#1496) (#1653)
- scaffold from a house/org starter template (#1410) (#1642)
- typed project-config client + provenance model (#1556) (#1641)
- Bitbucket Cloud provider, end to end (#1303) (#1510)
- extract Makefile targets as service/task sources (#1132) (#1240)
- P1 Studio dev wiring — real detect.scan over local-IPC (ADR 0009) (#1471)
- services.toml schema gaps — scope, expanded ServiceKind, source decision (#1573) (#1633)
- device→instance presence registry + deliverToDevice primitive (#1495) (#1632)
- populate ci + agents context sections (#1131) (#1241)
- replication contract + entity registry (#1535) (#1630)
- expand env example-file allowlist — .env.sample/.env.template/.env.dist and friends (#1136) (#1139)
- commit-vs-exclude config persistence + project-creation prompt (#1554) (#1626)
- surface registry-miss as an unrecognized-framework diagnostic (#1238) (#1239)
- scaffold a project from a GitHub template repository (#1409) (#1619)
- standalone headless checkptd install + enrollment (#1620)
- tasks.toml schema — new DocKind::Tasks (#1563) (#1627)
- retire the public-tunnel transport (#1622)
- ElastiCache Redis for the relay bus + optional relay client (#1494) (#1605)
- public blog rendering + SEO — SSR, meta/OG, hreflang, sitemap (#1345) (#1603)
- enroll on confirm — defer device creation, name it at creation (#1617)
- per-locale "retry with more care" for blog translation (#1593) (#1607)
- Azure DevOps Repos provider, end to end (#1304) (#1509)
- GitLab connect + repo import, end to end (#1302) (#1499)
- assert frameworks/tools from non-optional peerDependencies (#425) (#965)
- Claude auto-translation fan-out on blog publish (#1344) (#1589)
- wizard scaffold step — recipe picker, live PTY, post-run chain (#1408) (#1591)
- UX pass across the portal and console (#1506)
- Indonesian, Vietnamese and Czech — Studio (#1371, #1375, #1383) (#1501)
- C2 — Rust rule pack (framework detection slice) (#899) (#1295)
- live-PTY agent TUI canary harness (#1065) (#1467)
- scaffold recipe registry + toolchain presence probe (#1407) (#1531)
- content model + admin CRUD + public read endpoints (#1343) (#1530)
- Home widget customization — registry + persisted layout (#1402) (#1522)
- route peer transport over the relay WS (#1414) (#1527)
- Vietnamese (vi) and Czech (cs) — apps/web + backend catalog + switcher (#1373, #1381) (#1503)
- Indonesian (id), Vietnamese (vi) and Czech (cs) — mobile (checkpt-app) (#1502)
- run a PTY command in a chosen working directory (#1406) (#1511)
- URL-locale routing + hreflang for public pages (#1342) (#1519)
- forward E2E-encrypted proxy envelopes between account devices (#1413) (#1516)
- graceful-detection guarantees — walker budget, fault isolation, invariants, fixtures (#1466)
- reject a non-existent or non-directory attach root path (#1405) (#1470)
- Home screen — cross-device monitoring station (#1401) (#1484)
- hierarchical "up" navigation — Location model + derived parent (#1441)
- SSR the public surface — React Router 7 library→framework mode (#1340) (#1396)
- widen Linux compat — build Studio in an Ubuntu 22.04 container (glibc 2.35 floor) (#1440)
- Ukrainian (uk) — apps/web namespaces + backend catalog + switcher (#1377) (#1458)
- move approval-rules CRUD to website-api (#1359) (#1450)
- match the console's palette to the web dashboard (#1446)
- uk — Studio (#1379) (#1448)
- Ukrainian (uk) — mobile (checkpt-app), incl. native OS strings (#1378) (#1447)
- dev-login → real account session + device-model correctness (#1412)
- translation-delta harness — context packs + mechanical merge (#1392) (#1394)
- localized product screenshots — one-command generation across all locales (#1418)
- revamp the admin console's look and feel (#1417)
- rebuild the auth backdrop as a rendered orbit plate (#1398)
- rebuild the logged-in portal and auth screens (#1404)
- E2EE slice 2 — recipient decrypt stack (key distribution, sealed transit, QR pinning, truthful EncryptionScreen) (#1317)
- native Windows ARM64 (aarch64) Studio build (#1395)
- Indonesian (id) — web + backend templates (#1369) (#1393)
- clone any git URL in the new-project wizard (#1391)
- version-support policy + floor-raise runbook + CI contract freeze (#1115) (#1389)
- migrate web to httpOnly cookie auth (mirror admin cookie+CSRF) (#1364)
- override-merge rule (D2, #902) (#1281)
- complete the TS/JS framework + datastore registry (#425) (#1291)
- C1 — Python rule pack (framework detection slice) (#898) (#1294)
- reply to ticket submitter by email (#1014) (#1357)
- structured feedback columns, attachments, triage list, throttle (#418) (#1212)
- redesign auth screens + add Studio sign-up & password reset (#1296)
- pre-launch site mode — public site with gated surfaces + notify-me waitlist (#1282) (#1283)
- shared Pill chip + facet-counted filter pills across the console (#1314)
- B2 — service detection + classifier (#896) (#1043)
- Studio-era site polish — meta, sitemap, closing CTA, Clerk cleanup (#1211)
- How It Works integration chip popovers + truthful ecosystem claims (#1297) (#1312)
- two-device Studio harness + one-command db:reset (#1273)
- handle Claude's /btw side questions in the terminal (#1210)
- B1 — TS/JS rule pack, first end-to-end slice (#895) (#955)
- live rule sync from quiet_hours.updated / approval_rules.updated (#1209)
- sealed-envelope foundation — keys, enrollment, v2 codecs, rotation, push hardening (#235) (#1269)
- BYO-relay server→server contract versioning + relay-min-version floor (#1278)
- Hindi (hi) translation + language switcher — checkpt-app (#825) (#1279)
- version adoption snapshots + admin Adoption view (#1171) (#1272)
- Hindi (hi) translation + language switcher (#826) (#1264)
- encrypt JWT signing private keys at rest (envelope encryption) (#878)
- Korean (ko) translation — mobile, incl. native OS strings (#807) (#1217)
- A3 — framework + datastore registries (#894) (#954)
- override-only service fields + generated TS schema (#901) (#1102)
- Korean (ko) translation — Studio (#808) (#1223)
- client update gates — Studio mandatory-update wall + mobile force-update (#1270)
- Polish (pl) for CheckPt Studio (#817) (#1267)
- Dutch (nl) — mobile (checkpt-app) (#813) (#1266)
- Korean (ko) translation — web, shared auth + backend templates (#806) (#1216)
- thin-tolerant local-IPC seam + Studio restart nudge (#1248)
- REST client contract — /version, UPGRADE_REQUIRED (426), client-BFF boundary (#1112) (#1263)
- Hindi (hi) — web + backend templates (#1262)
- org custom relay URL + Team+ management UI, propagated to Agent/Studio/mobile (#1084) (#1246)
- Chinese (Traditional) zh-Hant — mobile (checkpt-app) (#828) (#1261)
- Dutch (nl) for CheckPt Studio (#814) (#1260)
- Polish (pl) translation — web, shared auth + backend templates (#815) (#1228)
- zh-Hant — Studio (#829) (#1252)
- Dutch (nl) — web + backend templates (#812) (#1243)
- Italian (it) — mobile (checkpt-app) (#810) (#1249)
- version stamping + minimum-version floor (#1111) (#1242)
- zh-Hant (Traditional Chinese) — web + backend (#827) (#1247)
- token ratchet — guard banning raw hex, text-[Npx], gray/palette utilities in app code (#1163) (#1244)
- relay short-retention event log + vcs.backfill on Agent reconnect (#1237)
- Italian (it) translation + language-switcher enable (#811) (#1236)
- zh-Hans (Simplified Chinese) — mobile (checkpt-app) (#804) (#1235)
- P2P proxy protocol negotiation & capability handshake (#1231)
- mobile ThemeContext token adoption + fontSize/hex codemod (#1233)
- German (de) translation + language-switcher enable (#794) (#1208)
- infra manual-apply reminder + runbook procedure for pulumi env drift (#1165) (#1229)
- Studio deploys from admin — stage/publish, changelog editing, live run watching + CDN verification (#1204)
- Italian (it) — web + backend templates (#809) (#1234)
- zh-Hans — Studio (#805) (#1207)
- Studio single-channel — relay REST + pairing behind the Agent (#1189) (#1199)
- add a target-id filter to the audit log UI (#1201)
- i18n ja — mobile (#800) (#1200)
- admin gray/small-text codemod onto design tokens (#1161) (#1206)
- Turkish (tr) translation — mobile, incl. native OS strings (#819) (#1120)
- Studio native in-app subscriptions via Stripe Elements (#1177) (#1193)
- remote session start on an arbitrary online worker (#1182)
- split-panel sign-in redesign (#733) (#1094)
- wire SendGrid delivery for invitation emails (#1013) (#1057)
- web gray-text + emerald-tint codemod onto design tokens (#1160) (#1197)
- German (de) translation + language-switcher enable (#795) (#1185)
- Simplified Chinese (zh-Hans) for web + backend (#802) (#1196)
- Japanese (ja) translation + language switcher (#801) (#1198)
- releases table + Studio history backfill + read-only admin Releases page (#1170) (#1184)
- A2 — BREAKING schema adoptions from repo-scanner (#893) (#953)
- Japanese (ja) — web + backend templates (#799) (#1190)
- Studio type-scale + semantic-token codemod, uiFontScale setting (#1159) (#1186)
- Brazilian Portuguese (pt-BR) for the mobile app (#791) (#1180)
- native intent-based subscription API (#1175) (#1181)
- publish versioned public checkpt/relay image + BYO migration & compat story (#1176)
- German (de) — web + backend templates (#793) (#1183)
- Brazilian Portuguese (pt-BR) for web + backend templates (#790) (#1168)
- rem type scale + WCAG contrast fixes in design-tokens (#1166)
- Brazilian Portuguese (pt-BR) for CheckPt Studio (#792) (#1167)
- entitlements-in-token — plan/concurrency as signed claims (#1082) (#1154)
- Agent lifecycle + quit semantics — pause/resume, quit warns + stops sessions (#1128)
- resolve .checkpt/env.toml at session start — port allocation + name templating (#1117)
- Russian (ru) translation for mobile (checkpt-app) (#822) (#1150)
- Turkish (tr) translation — Studio (#820) (#1122)
- Turkish (tr) translation — web, shared auth + backend templates (#818) (#1119)
- French (fr) translation + enablement for mobile (#797) (#1121)
- asymmetric identity verification — EdDSA relay-exchange tokens + identity JWKS (#1081) (#1127)
- Russian (ru) translation for Studio (#823) (#1126)
- port components/ui primitives to semantic tokens (#731) (#1087)
- /operations service-health page + GET /admin/system/health (#1015) (#1059)
- Russian (ru) for web + backend templates (#821) (#1124)
- French (fr) for CheckPt Studio (#1116)
- Studio tray, close-to-tray, and Agent service lifecycle UX (#1106)
- French (fr) for web + backend templates (#796) (#1108)
- Spanish (es) for mobile (checkpt-app) (#1103)
- bundled daemon gets the production relay URL — service argv + spawn env (#976) (#1107)
- Spanish (es) for CheckPt Studio (#1099)
- execute .checkpt/hooks.toml lifecycle hooks (#1002) (#1089)
- grant
memberrole on organic app-account creation (#1104) - adopt ApiError error codes across the three frontends (#1034) (#1079)
- add auth.* error codes to bff-auth throw sites (#1071) (#1073)
- promote daemon → standalone always-on Agent service (#1090)
- Stripe webhook inspect + replay UI (#1011) (#1078)
- coupon + promotion-code management (#1012) (#1072)
- Spanish (es) for web + backend templates (#1088)
- A1 — walker + .checkpt/ignore implementation (#892) (#949)
- Agent proxies account-scoped relay reads; drop Studio's relay socket (#1018) (#1070)
- CLDR-plural-aware locale key-parity guard + translation glossary (#1075)
- worktree-backed session lifecycle (#1000) (#1007)
- Homebrew cask + tap for macOS brew install --cask (#1063)
- failed-payment queue — worklist for failed and past-due payments (#1061)
- wire EditProfileScreen to the real profile endpoints (#971) (#984)
- Issues tab + start-session-from-issue on real provider data (#655) (#961)
- Codex + Gemini bespoke profiles — state detection, model lists (#998) (#1062)
- allow one email to hold both an app and an admin account (#1056) (#1060)
- drain i18n allowlist to zero (#772) (#1008)
- extract user-reachable API errors to stable error codes (#832) (#1035)
- Agent auth unification — single relay credential (device + account) (#1040)
- derive ThemeContext palette from @checkpt/design-tokens (#335) (#960)
- install affordances for missing agents (#997) (#1042)
- PR list + status on real provider data (#656) (#1039)
- business + engagement metrics API and Overview charts (#1041)
- avatar pipeline — presigned S3 upload + OAuth picture seed (#968) (#980)
- shared "On this page" rail across all docs pages (#1037)
- ship the Profile tab on the real account profile (#970) (#981)
- wire recipient-locale into data-plane notification paths (#1028) (#1038)
- editable name + timezone on the Account profile (#969) (#983)
- typed spawn-failure handling for missing agent binaries (#996) (#1036)
- partial-update PUT /dashboard/profile + avatarUrl (#967) (#978)
- /billing page + expanded UserDetail billing tab (#1032)
- detect installed agent CLIs at startup (agents_detect + login-shell PATH) (#1026)
- clickable Device detail page in Studio (#1001)
- new-project wizard — real repo browser + clone from provider (#657) (#990)
- drain backend-composed content into server locale catalog (#830) (#1030)
- audit-log read endpoint + Operations audit UI (#958)
- per-client rate limiting for DB-touching WS handlers (#461) (#950)
- project_override table + IPC for layered config (#449) (#948)
- GitLab provider — descriptor + PAT auth + read adapter (#661) (#859)
- replace Overview stub with a real counts dashboard (#987)
- shared agent registry + agent-typed sessions in Studio (#1006)
- drain checkpt-app hardcoded strings to zero (#771) (#989)
- flag-dropdown language switcher with full #764 roadmap (#1005)
- root device identity in a device keypair (#925) (#940)
- drop Supporter, rebalance to Community / Pro / Team / Enterprise (#974)
- home + footer feedback, responsive nav fixes, page consistency (#982)
- Linux CLI install script (curl | sh) + wire /download Linux tab (#939)
- provision the platform admin team (Dave/Gulsah/Tulin) (#977)
- error-code envelope + web/mobile/Studio error mapping with generic fallback (#831) (#916)
- align landing widths, loosen spacing, add Help page (#972)
Changed
- the setpoint packs by a count, and a count is not what binds (#3802)
- cross-instance routing and skewed-account fan-out, measured on the rig (#3696)
- measure the per-task capacity constants at 5k+ sockets (#3682)
- alarm on 5xx and latency, so something fires on the effect (#3622)
- the connect-admission rate now derives from the socket setpoint it has to drain (#3616)
- a fetch that lost its timeout, two churning contexts, and a sort with no documented ceiling (#3621)
- a retention sweep that ranks the whole table, on every task, under the request timeout (#3620)
- Rust License Gate stops rebuilding cargo-about and stops resolving a crate graph nobody touched (#3541)
- size RDS and ElastiCache on their own drivers — DB down, Redis up (#3448)
- record ci baselines from the first green workflow run (#3190) (#3432)
- PERF-6 — relay load harness: connect storm + sustained streaming, nightly CI (#3306)
- PERF-17 — the Lighthouse budgets could not fail, and the daemon paid a webview's codec (#3359)
- scope the unit suite to the affected projects, and size the shard matrix to fit (#3343)
- stop shipping ~9 MB the binary never uses (#3320)
- alarm the resources that bind first, and stop re-serving stable endpoints (#3338)
- a connection storm couldn't scale the relay out, and ~128 stalled sockets could OOM it (#3323)
- coalesce output frames, memoize the remaining context values, virtualize notification history (#3316)
- shard Unit Tests 4 ways — the suite outgrew its 30m cap (#3334)
- PERF-15 — index & query hygiene, and the CONCURRENTLY pattern the repo could not use (#3305)
- PERF-8 — memoize the relay-exchange entitlements card (#3298)
- virtualize the SessionDetail transcript and memoize the WebSocket context value (#3296)
- PERF-10 — the control plane gets the index the data plane already had (#3301)
- let one task claim a due webhook event (#3297)
- PERF-11 — WAL, a relaxed sync, and a sequence counter that already knew the answer (#3292)
- clear the backend query/N+1 tail (#3291)
- PERF-2 — bound every Stripe and OAuth request (#3274)
- the changelog assembles once per TTL, not once per visitor (#3271)
- bound how long a pooled connection may be held, not just how many (#3267)
- index the three hottest lookups on the authenticated path (#3265)
- the app parses one locale at boot, not twenty-one (#3264)
- startDaemon() — main.ts becomes a module, boot and shutdown become ordered steps (#3085)
- verify #1866's backpressure against a real congested socket (#3086)
- extract remote and chat-run session start (#3047)
- retire the 150-key local-ws handler map (#3049)
- virtualize Approvals, Rules and Org Rules; fix the countdown re-render (#3045)
- extract the MCP HTTP transport wiring (#3026)
- extract the 34 proxy verb handlers, and register them through the feature table (#3014)
- extract session start — gate, evaluate, register, provision (#3030)
- extract the local-IPC request handlers (#3028)
- extract the relay frame router out of connectWebSocket (#3007)
- extract the services and tasks wiring (#2976)
- extract the express routes into a router (#2990)
- extract the relay plane — links, credentials, REST routing and sync wiring (#2982)
- a feature registry, and local-ws dispatch that reads a table (#2971)
- extract prompt create, answer, expiry and withdrawal (#2979)
- finish the session-persistence extraction (#2968)
- extract plan, keys, notification and MCP-connector wiring (#2958)
- extract session environment, worktree lifecycle and hooks (#2948)
- session kinds shrink to the shipped core (#2913)
- a DaemonContext for the daemon's shared state (#2901)
- a chunk no longer re-renders the terminal component (#2848)
- the overflow sweep was one 20s timeout, ×16 — gate restored off the critical path (#2792)
- drop the i18n overflow browser sweep from Code Quality (#2732)
- source/connector abstraction for the issue seed picker (#2481)
- delete the Apple billing plane (#2439)
- extract session row mapping from main.ts (#2208)
- extract device identity + auth headers from main.ts (#2207)
- make @checkpt/ui importable from a tsc-built lib (#2108)
- extract the peer publish fan-out from main.ts (#2105)
- delete the org audit API surface, which has had no callers since #1445 (#2086)
- map main.ts by subsystem seam, extract the pure leaves (#2071)
- carry output chunks as base64 and batch the live push (#2081)
- extract the remaining web/admin auth-surface duplicates (#2047)
- bound what the relay buffers toward a slow consumer (#1866) (#2032)
- cache the WS connect path (#1864) (#2020)
- scope device-unpaired to the owning account (#1867) (#2028)
- amortise the output rings' per-append prune (#1865) (#2019)
- extract the shared ErrorBoundary and the auth-client test seam (#1973)
- one device, one id, one table (#1907)
- stop asking /auth/refresh for visitors who never signed in (#1775)
- derive API image runtime dependency lists from the built bundle (#1740)
- one shared env-doctor implementation — retire the TS rule copy (#1727)
- adopt @checkpt/ui and close the type-scale gate exclusion (#1712)
- one component layer for the web portal and admin console (#1676)
- one service-kind vocabulary — align the crate enum onto the detector's names (#1650)
- split FEATURES.servicesTasks into services + tasks (#1564) (#1631)
- split ECS task roles per service (#1547)
- cache session diff across tab switches — stale-while-revalidate (#674) (#876)
- extract module-const UI copy to t() keys (#988) (#994)
- drain i18n allowlist to zero — extract UI strings to t() (#770) (#975)
Documentation
- the plaintext audit names every table, and CI keeps it that way (#3834)
- UAT-MOB-05 stops claiming an attribution the product never had (#3814)
- the three guides omit RELAY_PUBLIC_URL, so every guide deploys a relay that cannot sign anyone in (#3784)
- record the key-revocation walk result, both directions (#3737)
- write down the perf postures, and stop two workflow headers arguing against them (#3610)
- the live connect was walked — flip the surfaces that still say otherwise (#3498)
- Team is self-serve — UAT-PAY-09 rewritten to the org-aware checkout #227 shipped (#3472)
- the provider ship-gate's flag half closed on 2026-08-18 (#3475)
- the UAT-X-05 blocker still said the relay stores plaintext prompts — #3082 fixed that on both planes (#3469)
- the gate runbook still walked deleted QR pairing in four cases (#3429)
- stop crediting deleted files, and guard against the next one (#3352)
- the rollback tables now say what happens to the schema (#3336)
- runbook for exercising the Studio version floor in prod (#3116)
- the record of what the hosted relay sees (#3089)
- record the in-app design, its inventory and its gaps (#3075)
- UAT-X-03 describes the at-cap recovery that shipped (#3003)
- audit every plaintext column the hosted relay stores (#3040)
- the headless-Agent page documents unattended org enrollment (#3006)
- the output contract promised a sessionId the failure paths don't have (#3008)
- correct stale UAT expectations and the CSRF bypass rationale (#3000)
- document not_mounted where the codes are documented (#2857)
- spike — proxy, because the hook path fails open (#2802)
- name the releases that made the renumber's precondition false (#2783)
- design the Compare-plans comparison matrix content (#2379)
- session-scoped MCP identity & log isolation — spike decision (#2401)
- ratify the plan-gating matrix — three new gates, not five (#2305)
- hosted on-demand compute go/no-go spike — NOT-YET (#2242)
- say subset, not mirror — the local type omits allowCritical (#2170)
- ratify the fr, es and ru register blocks and sweep the residual drift (#2048)
- the three BYO platform guides omit the identity configuration (#2049)
- spike — mobile multi-relay is N registrations, not N sockets (#2014)
- claim shipped E2EE precisely — UAT gate, web copy, pricing, FAQ (#2013)
- e2ee.md never learned about session.meta (#1979)
- reflow the ro §5.16 length bullet so the span sits on one line (#1956)
- drop the last "shared with the token-refresh path" claim (#1805)
- map UAT cases to the tests that prove them (#1804)
- drop the dead web profile from the self-host reference (#1769)
- launch UAT manual test plan + project board seeder (#1713)
- pre-flip validation report — go/no-go for projectDetection (#1656)
- refresh tryout cheat-sheet to current main (G4) (#1693)
- tryout kit + testing roadmap for real-repo validation (#1481)
- the replication contract is hosted-only — and BYO can't enroll a device (#1625)
- ratify Romanian (ro) register and conventions — §5.16 (#1610)
- state the WSL story honestly on the requirements page and in a setup guide (#1476) (#1598)
- document RELAY_KEK as required in every self-hosting guide (#1601)
- Cloudflare TLS fronting guide + web docs page (#1515)
- ratify vi (§5.14) and cs (§5.15) register blocks (#1488)
- AWS deploy runbook + web docs page (#1299) (#1483)
- WSL2 support investigation and decision (#1333) (#1478)
- Railway deploy guide + web docs page (#1298) (#1442)
- Expo Go no longer works — document the dev-client (EAS) setup (#1290)
- renumber duplicate ADR 0008 → 0016 + truthful contract docs (#425) (#1046)
- ADR 0012 — API route extraction deferred for v1 (#440) (#882)
- confidence model calibration methodology (#435) (#881)
- composite/runbook decomposition strategies (#430) (#880)
- ADR 0014 — env binding inference, cheap proxy v1 / deep scan v1.1 (#431) (#879)
- readiness probe defaults per ServiceKind (#432) (#877)
- Perforce provider design spike (#662 Phase 1) (#858)
- ADR 0013 — .checkpt/ignore, adopt global / defer per-detector (#441) (#875)
- ADR 0015 — override layer aligns with crates/checkpt-config (#434) (#874)
- self-hosting guide (#753) (#963)
- per-language detection roadmap + framework taxonomy (#433) (#872)
- ADR 0011 — schema delta vs repo-scanner, adopt/reject (#439) (#883)
- ADR 0009 — daemon RPC contract for detection (#436) (#871)
Fixed
- the migration task is sized for ts-node, and had grown past 512MiB (#3865)
- close the six pinned KNOWN GAP defects in the org/user dialogs (#3857)
- stop pkg from turning our subcommand into a missing file (#3861)
- About's update check ran behind the panel it was opened from (#3860)
- refuse re-parenting session publishes, and clean up the ones already filed (#3858)
- drop device_authorized from the ordered activation funnel (#3854)
- anti-phishing line, one-line security copy in every locale, and TTLs that cannot drift (#3850)
- the stream-inspector service guard, and the last owed exec half (#3835)
- give transactional email a layout, and take presentation out of the catalog (#3848)
- the funnel probe asks about a person, and silence can fail again (#3849)
- carry the natural-stop budget to the peer, instead of rejecting at 15s (#3837)
- a shed frame asked the bus where a device it was holding is, and a stalled consumer was never reclaimed (#3809)
- an org-owned device's presence reached nobody (#3826)
- name a REVOKED machine that is still holding a concurrency slot (#3828)
- a draft larger than one call could never be curated (#3822)
- run git with the user's PATH, not launchd's four directories (#3824)
- the reflection request encoded to zero bytes, so gRPC reflection never worked against a real server (#3813)
- retire the offline incumbent in the same transaction as the write that takes its name (#3808)
- the approval prompt says what identity is actually on the wire (#3804)
- a Redis inspector resolves only services the project has (#3806)
- the declared engine decides, and a contradiction refuses (#3760)
- releases list goes live, and Studio's launch/sign-in stop hiding the app (#3743)
- the prompt flow, the answer race, and a re-publish that re-notified every device (#3756)
- a hung rollout must go red, not quiet (#3748)
- don't let an absent projectId resolve to an arbitrary project (#3724)
- close the local proxy route around the approval gate (SEC-8) (#3726)
- release the push address on sign-out, and drop the dead device cache (#3738)
- let MONGODB_URI satisfy its own service's name tiebreak (#3741)
- the generator was capturing an empty Approvals screen (#3735)
- every approval card said "Unknown device" — the join used a dead plane (#3739)
- retention fixtures that cannot expire (#3684)
- the organizations page and the status rail each claim something untrue (#3677)
- the launcher could not find an agent the picker had just listed (#3666)
- stop the four lies the golden-path walk found (#3675)
- show what a curation pass is doing, and let an operator stop it (#3607)
- the wizard's first step asked where the project should live and took one answer (#3660)
- the DMG's branded window needs Finder, which CI had told the bundler to skip (#3664)
- stop selling org rules that auto-approve nothing (#3654)
- the org lost an owner where the insert could not promote (#3656)
- assert cross-stack outputs at the read, so a stale prod-persistent says so (#3648)
- nulling the submitter's id left their email and device id on the row (#3638)
- the perimeter's 401 page is not an error message (#3617)
- one brand casing, and a gate so it stays that way (#3599)
- repair the download page's dead docs link, and the UAT case that fails correct behaviour (#3598)
- reconcile device presence at boot, so a restart stops stranding devices online (#3596)
- scope Overview's user counts to the app portal (#3597)
- stop the pollers that deadlock truncateAll, and retry the ones that get away (#3552)
- carry orgId and clientType to clients, so an org pool worker is not read as your own machine (#3579)
- the at-cap refusal named nothing — its device lookup threw on every call (#3570)
- build the approval authority after the store opens, so a pinned key survives a restart (#3564)
- log why the relay rejected a session publish, not just that it did (#3561)
- a duplicated Content-Type meant nothing was ever published to the relay (#3557)
- the admin credential probe now only ever sees the perimeter (#3573)
- the relay is on the internet, so a shared WiFi is not the answer (#3567)
- WAFv2 rejected both descriptions, failing the prod apply (#3545)
- the CSP guard reads prose in a comment as a second directive (#3569)
- delete the translation crons and the impossible work they retried (#3505)
- a runtime barrel import from @checkpt/shared reds two studio specs (#3565)
- a migrated database is a schema, not somebody else's rows (#3560)
- say whose prompt the session is awaiting (#3518)
- the banner carries enough to report itself (#3526)
- /help routed bug reports to a Featurebase workspace we don't own (#3514)
- the shipped macOS bundle was SIGKILLed on launch — a restricted entitlement with no profile to authorize it (#3534)
- an auth rejection is not a network fault, and a swallowed 401 is not an empty screen (#3496)
- name the PostHog key, harden the secret write, and record posthogKeysWired (#3473)
- stop the PTY geometry churn behind the duplicate banners (#3516)
- main was red on three jobs, and none of them was a product bug (#3515)
- failed panes say why they failed, and stop dressing as empty ones (#3481)
- a missing git.diff path answered with a TypeError, not a reason (#3474)
- a device env override never reached a started process (#3466)
- a read-only .git leaked an absolute path past the redaction (#3471)
- a typo in .checkpt/env.toml renamed the file away and read as empty (#3465)
- deactivating a Google link did not sever it (#3463)
- two build profiles targeted a staging environment that never existed (#3451)
- move the admin roster onto Workspace identities (#3439)
- the Redis SG locked out the BFF throttler — 26s customer login (#3444)
- the hero dropped the desktop shot on every viewport under 1024px (#3442)
- the wizard contradicts itself on service counts, and three Stack rows render blank (#3412)
- the launch pane renders with no words at all (#3411)
- the fair-use footnote published a rate limit wrong three ways (#3438)
- the SAST baseline goes stale, so old PRs inherit main's findings (#3441)
- production shipped blind — reporter unarmed, boundary silent (#3312)
- the fingerprint runtime version was a fact about the machine, not the commit (#3393)
- expo-speech-recognition 56.x is built for SDK 56, not our 54 (#3407)
- centre the status pages, and drop the mascot name from copy (#3391)
- an expired prompt read as the user's rejection (#3349)
- the three #3151/#3158/#3170 follow-ups (#3370)
- sharing a note re-seals it to the org (#3357)
- the BYO Relay page claimed approval content skips the relay (#3348)
- let the relay say WHY the id differs (#3362)
- count the idle signal in parse telemetry (#3350)
- gate the Multi-step filter chip behind a recorded flag (#3346)
- list a deleted or binary file whose path contains " b/" (#3344)
- measure the banner — rule out the stuck store, report what failed (#3364)
- enforce on-device speech recognition, and grow the grammar rather than leave the device (#3342)
- the dashboard drew a Redis floor with no Redis (#3347)
- a repo-supplied exec env source needs a grant before it runs (#3318)
- the inline drawer must not lock page scroll or trap Tab (#3315)
- Redis connectors use ioredis subscribe + lowercase pipeline (#3235)
- redirect /status to the external BetterStack status page (#3027)
- probe the OS before handing a session a port (#3328)
- the Doctor now says a template over a secret can't resolve (#3332)
- own the page-scroll lock at module scope, not per modal instance (#3327)
- keep the pagination control a constant width as the page moves (#3329)
- guard the getCurrentWindow() that throws synchronously outside Tauri (#3310)
- a terminal session row stays terminal (#3326)
- stop claiming direnv sources .envrc.local, and say what does (#3335)
- the task host must not hand its config blob to the task (#3302)
- keep a file's line endings through open → edit → save (#3331)
- revalidate the Files tree, and offer refresh on healthy rows (#3333)
- serialize task starts per (project, session, name) (#3330)
- refuse a charged account's delete cleanly, and stop orphaning four tables (#3307)
- record devices_owner_label_unique in the schema snapshot — main is red (#3322)
- the wizard walk is red because one Tauri call throws synchronously in a browser (#3317)
- name the plan once and show it everywhere, make device names unique, and unrig the plan grid (#3263)
- the customSounds flag gated nothing — the feature already works (#3311)
- a degraded keystore no longer publishes plaintext prompts and session titles (#3309)
- impersonation read-only is server-enforced, and the two elevated secrets are wired (#3285)
- the revocation backstop looks devices up by id alone, which is no longer unique (#3308)
- give Android push a real small icon instead of a white square (#3299)
- name the unguarded locales, and stage the fr/tr imperative rules (#3017)
- a device going offline is not a statement about its sessions (#3253)
- a complimentary subscription ends when it says it does (#3255)
- a remote answer navigates from the marker, or refuses to act (#3249)
- voice listens in the user's language, not en-US (#3289)
- a rota that starts in three days pages nobody today (#3288)
- the production database cannot be destroyed by a routine apply (#3280)
- patch runtime CVEs — protobufjs ≥7.5.5, validator ≥13.15.22 (#3281)
- password reset kills every session, and cookie-mode stops leaking tokens (#3272)
- the status page needs design v2, and custom CSS is paid (#3278)
- regenerate the schema snapshot for the release-curation columns (#3284)
- the phone re-checks what a tip says and where it points (#3259)
- delete the RDS Proxy / read-replica flags — nothing read them (#3270)
- every REST call gets a deadline, and relay URLs must be https (#3252)
- stop claiming the /pair universal links we deleted (#3246)
- the org screens ask for a namespace that exists (#3248)
- the App Links contract is held together, and names both signing keys (#3238)
- keep the band's verbs on screen, pin the gauge's height, and give React Navigation the app's palette (#3234)
- take the last two purchase CTAs out of the shipped copy (#3100) (#3237)
- add placeholder-parity gate; fix 7 machine-translation drifts (#3223) (#3233)
- the export-compliance attestation matches the crypto that ships (#3165)
- surface the GitHub cause behind release 502s (#3115)
- one section identity across surfaces, and name the plan in Studio (#3096)
- one organization, one invoice — Team is bought per seat (#3090)
- the matrix omitted the one surface that always fires (#3088)
- the mic always comes back, and gated accounts get no FAB (#3068)
- draw an unreadable session title as a stand-in, not a name (#3065)
- the status bar's "Online" count must be the online one (#3063)
- Overview must not render a failed fetch as an empty state (#3062)
- reap the session rows whose owner is gone (#3055)
- one org, one charge — the founder is seat 1 (#3064)
- a phone can open org-sealed content (#3058)
- register PAT webhooks, per-registration secrets pinned to a repo (#3057)
- repair the integration specs that rotted red (#3051)
- five edge cases in the hash encoder and command resolution (#3013)
- one unreadable chunk no longer fails the whole output.tail (#3046)
- a partial profile update must survive both transpiles (#3044)
- org seat counts drifted from Stripe with nothing watching (#3042)
- a terminal-answered prompt records the option that was chosen (#3043)
- reopen encryption status + notification history on the peer proxy (#3002)
- order task defs after the secret VERSION, not the empty secret (#3035)
- delete Trusted Origins — Smart Rules already owns auto-approve (#3009)
- scope the session reconcile to the account that owns it (#2933)
- normalize the plan name before walking to the next tier (#2934)
- give a generator run an owner that outlives the screen (#2928)
- state the E2EE claim precisely on sign-in (#2931)
- stop reporting states that contradict the same screen (#2936)
- the session Terminal says which nothing it is showing (#2937)
- the org rules table's status column reads "Status", not "Enabled" (#2997)
- attribute Procfile/compose processes by language, not by sort order (#2897)
- declare Task.watch, and guard the registry order-dependence (#2944)
- a fresh worktree can start the stack from the checked-in steps (#2988)
- org quiet hours were resolved by the caller, so the two that couldn't name an org ignored them (#2987)
- validate a project_local mount before it becomes a spawn cwd (#2970)
- a watch teardown is addressed to its OWNER, not the mount (#2972)
- the vcs category had delivery and no switch (#2962)
- write the fs sketch's NUL separators as escapes, not raw bytes (#2926)
- an org worker can answer the member who addressed it (#2960)
- a notification setting that silently reverts, because two relay replicas cannot order a snapshot (#2957)
- make @checkpt/cli publishable — bundle the bin, declare what the tarball requires (#2959)
- the marketing navbar's desktop row fits 1280px in every locale (#2954)
- dedupe Nx target servers by command, not by workspace (#2943)
- org-worker sessions — the start paths that assume an account (#2949)
- org workers can read their org's projects, and their cache can hold them (#2946)
- the org dashboard renders prose again, not i18n keys (#2945)
- canonicalize request-supplied UUIDs, and fix the split audit trail (#2905)
- the overview's duplicate CTAs, silent checklist, and bare-email account menu (#2912)
- name the five icon-only controls a screen reader could not (#2930)
- clear a user's subscription rows before deleting the account (#2908)
- deleting an org revokes its worker pool — in both deleters (#2894)
- one top bar everywhere, and a drawer that stops shoving the app (#2917)
- the screenshot harnesses' account session signs itself out (#2914)
- model the org worker pool so dashboard-devices renders again (#2889)
- read projectType from angular.json, not just the Nx layouts (#2887)
- fingerprint project.json in the detect cache's fs sketch (#2888)
- one-click adopt of an out-of-date local Agent + release version guard (#2841)
- model GET /v1/orgs/:id/devices in the web screenshot mock (#2869)
- the seed prompt nobody submitted, and five more from a golden-path walk (#2863)
- write the .lproj files where the pbxproj points (#2861)
- gemini's MCP registration never took — untrusted worktree (#2856)
- name the ghosts before refusing at the device cap (#2847)
- tidy three rough edges — Pro-gated copy, Inspector collapse, popped-out window inset (#2849)
- detection you can reach with a projectId (#2846)
- model GET /v1/replays so dashboard-security renders again (#2845)
- don't offer Start for a per-session service with no session (#2828)
- one control per option, answered by index (#2832)
- stop repainting the whole grid on every keystroke (#2833)
- a failed config init must not cost the user their wizard answers (#2823)
- a collapsible Inspector, a header that stays on one line, and an ended session that says what happened (#2825)
- resolve checkpt-config in the target dir cargo actually uses (#2821)
- a session row that fits on one line, and an empty Env step that says which nothing this is (#2827)
- show a change's patch on the Diff tab, and notice edits made outside the agent (#2826)
- detect idle when Claude Code paints its composer placeholder (#2822)
- ScreenHeader's style prop takes StyleProp, not a bare ViewStyle (#2831)
- one top bar, a drawer footer that admits it exists, and Approvals filters you can see (#2829)
- the 150% deploy cap deadlocks a service scaled in to one task (#2804)
- key devices by owner, migrate legacy keys, reconcile enc_pub (#2777)
- admin-api and website-api images also need the generated migration registry (#2794)
- guard the throttler options shape, and stop telling operators auth needs no Redis (#2788)
- vitejs/vite's
packages/viteleaves the services list and types lib (#2689 + #2690) (#2697) - wire ANTHROPIC_API_KEY into the admin-api task definition (#2790)
- macOS keychain password-dialog spam — data-protection keychain behind a shared access group (#2770)
- pre-merge citation guard walks a cited epic's sub-issues (#2656) (#2781)
- Copilot round 4 — a header that gave an order, and a comment that stated a falsehood (#2780)
- connecting a code host belongs in Settings, and the source row stops wrapping (#2753)
- read what a run script runs, whose framework it is, and what Nx says (#2588, #2589, #2590) (#2671)
- a Mac's OS is macOS, not "web" (#2725)
- unreadable is not missing, and Next needs a chosen path (#2773)
- fail when a shipped migration's number changes (#2782)
- New Project names the projects folder the clone will use (#2757)
- the dashboard plan card states the plan the account is on (#2755)
- localized iOS permission strings are actually wired in (#2759)
- throttle counters are fleet-wide, and a code has a guess budget (#2771)
- a database that fails to open must not report healthy (#2763)
- repair the migration ledger the renumbering orphaned (#2778)
- device setup stops offering view-only to Community (#2758)
- four shipped-but-unreachable surfaces — voice FAB, Fleet/Rules headers, device icons, encryption honesty (#2747)
- the releases backfill gets its own concurrency group (#2765)
- a prod DB wipe no longer erases the Studio version ledger (#2731)
- a session that has ended no longer renders as "Idle" (#2724)
- the "Connecting…" gate can no longer hang silently (#2727)
- detect questions that don't end the line, and stop calling a stalled session "writing code" (#2726)
- Comp opens for a user with no subscription (#2723)
- two machines on one account are tellable apart (#2728)
- a failed publish can no longer advertise a release that doesn't exist (#2722)
- publishing a version twice no longer dies on AccessDenied (#2694)
- a dialog no longer freezes the window in place (#2693)
- draw the device's own platform mark, everywhere (#2684)
- the Agent could not start at all, and nothing noticed (#2685)
- make the window's top band draggable on macOS (#2687)
- stop CHECKPT_RELAY_WS pointing the socket at another relay (#2686)
- the collapsed sidebar is the admin console's rail, not a gutter (#2688)
- the site follows the visitor's OS theme, and says so (#2670)
- the collapsed rail stops growing a horizontal scrollbar (#2677)
- one scroll surface per terminal pane (re-land of #2641) (#2665)
- tell "store still opening" apart from "store failed", and stop blaming the user's devices (#2664)
- scope the key directory to the relay that vouched for it (#2643)
- a prompt's life is its session, not a five-minute timer (#2650)
- decide output.tail's decode by requester capability (#2633)
- stamp the release version into the daemon package (#2649)
- pairing sessions in the shared store, and a store outage that stops accusing the user (#2628)
- the terminal always accepts input, and an answered prompt always leaves the inbox (#2570)
- the biometric switches now lock something (#2620)
- materialize sound channels for every relay, not just the current one (#2625)
- stop the exchange banner contradicting the device it sits above (#2630)
guardcompletes the verification-gate vocabulary (#2582)- one shape from both arms of a routed config op (#2565)
- the env write must carry the schemaVersion it read (#2600)
- wait for the Agent before reconciling, and bound the retry (#2580)
- make a created project's services startable (#2548)
- four launch-readiness defects — foreground push, the update wall, dead links, a QA screen (#2562)
- author the Face ID and photo-library purpose strings, in all 20 locales (#2566)
- gate Custom Sounds and Voice — two surfaces that promise what they cannot do (#2563)
- re-own the org quiet-hours rules written as user-owned (#2549)
- promote the gRPC inspector off
soon(#2556) - bound and retry every apt call so a sick Ubuntu mirror can't eat the job (#2553)
- quiet hours that silently did nothing (#2532)
- the four bugs the first packaged Windows run found (#2544)
- promote the always-on headless agent off
soon(#2545) - make the session terminal usable — raw keys, no re-wrap, no poll-lag (#2519)
- surface the real Google sign-in failure, and simplify the auth forms (#2521)
- every drawer entry goes somewhere, and nothing it renders is invented (#2493)
- stop gating project creation on env vars, and make "Paste from .env" work (#2499)
- enforce concurrency account-wide at the relay (#2491)
- answer prompts at the relay tier, sealed, not through the source device (#2472)
- SSR manifest scan read comment prose as an import, breaking every Deploy Web on main (#2476)
- force-close a revoked device's sockets, whoever revoked it (#2463)
- one PTY host, and an output ring that stores the byte stream (#2443)
- classify the multi-window commands the locality guard missed (#2440)
- make the window's top band one line, and the collapsed sidebar a real rail (#2412)
- stop the PAT catch-all shadowing GitHub's connection routes (#2413)
- re-read membership when the Agent's relay link comes up (#2341)
- surface the real reason pairing failed, and let the daemon load SQLite (#2362)
- the device tabs deserve a real empty state, and the header a real chip row (#2344)
- name platform sets in prose instead of lowercasing the label (#2304)
- a device derives its id from its signing key (#2243)
- unblock the publish, un-empty the notes, pick platforms (#2272)
- one About surface — route the macOS menu item to the modal (#2268)
- point the win-arm64 bundler at signtool explicitly (#2247)
- kind worker/scheduler-role scripts as workers, not the borrowed framework kind (#2223)
- make PromptsAttentionAndEnvelope migration re-runnable (#2188)
- drop the stamped session deviceLabel, resolve by id (#2213)
- take the minor-unit divisor from Stripe, not from ICU (#2219)
- report a declared workspace member the nested-repo prune drops (#2204)
- merge exceptions per key, so a client cannot clear what it never sends (#2203)
- negatively-cache dev-login failures to stop the request storm (#2187)
- polyfill Intl.PluralRules for Hermes so plurals resolve (#2193)
- open the multi-step wizard from the relay prompt store (#2194)
- read session-screen prompts from the relay plane (#2196)
- demote hyphenated one-shot scripts from the services list (#2155)
- repair the hero glow and the dropped h1 clause, add a live agent feed (#2184)
- prune nested repo checkouts so workspaces count once (#2154)
- disambiguate repeated app chip labels in the wizard stack (#2173)
- subscribe per relay link, and delete the socket nothing assigned (#2122)
- stop exporting a secret pointer as if it were the secret (#2185)
- stop selling an exception the pipeline cannot evaluate (#2165)
- reposition marketing copy for Claude Code auto-mode default (#2147)
- skip the detector pipeline when the recipe generates nothing (#2138)
- pin bash on the linux-arm64 Agent job so
pipefailworks (#2137) - put the nine auth components' status colours on the semantic tones (#2117)
- localize the dialog's dismiss label, and stop duplicating cancel (#2133)
- make the wizard Env keychain promise honest (pre-flip minimum bar) (#2128)
- collapse duplicate runtime chips (F2) and stop the detect-failed screen telling a success story (F3) (#2127)
- define every colour utility, unify the Security controls, gate the class (#2083)
- refuse device transfer instead of reporting success (#2076)
- ApiKeyGuard fails closed and reads the header only (#2066)
- delete the three unscoped bug-report reads (#2064)
- sweep BillingPanel onto the type scale + text tokens (#2070)
- surface the proxy egress counters at /health (#2061)
- scope my-devices by the token, not by x-app-id (#2063)
- fail closed when the caller or the device owner is null (#2052)
- put the pinned Node 24 first on PATH via direnv (#2062)
- convert request bodies to decorated DTOs so the ValidationPipe is not inert (#2046)
- filter the inbox cache read to VCS rows in SQL (#2044)
- task category chips read semantic tokens in both themes (#1815) (#2037)
- localize the remaining mobile risk/state slug renders (#2039)
- #1810 — enforce the Node 24 pin, guard its drift, make ABI mismatches self-explaining (#2034)
- delete the two unscoped feedback reads (#1999)
- remove docs claim of Pro-gated diff previews that do not exist (#1895) (#2027)
- name the org whose relay you're on, and what isn't reachable from it (#2000)
- refuse up front when there is no key, and record a failed fix run (#2018)
- resolve the inbox row's project from its session, and drop the column nobody wrote (#1992)
- administer an explicit org in the Relay panel, not a guessed one (#2011)
- converge on answers from other devices, clear badge + tray (#2012)
- a bad device credential no longer strands the shell (#2009)
- the dashboard refetches when its tab comes forward (#1994)
- gate the mock Session-kinds editor out of release builds (#1987)
- pricing and billing name the capped thing a machine, not a device (#1990)
- stop aapt choking on BCP-47 locale tags in Android builds (#1984)
- read TypeORM's affected count for the prompt cap prune (#1986)
- translate the 141 seeded register violations, empty the allowlist (#1969)
- give the device-onboarding gate a way out (#1975)
- real timestamps for migrations, not a +1e9 counter (#1965)
- reconcile web/admin auth-surface drift and mark the forked files (#1970)
- Settings → Devices was a hardcoded fixture list duplicating DeviceView (#1964)
- stop the .envrc template from executing pnpm db:seed (#1957)
- catch the pricing locale JSON up to the #1921 machine-metering copy (#1962)
- give project rename + delete an entry point (#1926)
- stop taking a device id or an account on the caller's word (#1931) (#1949)
- translate Studio billing UI for es/fr/pt-BR/ru/tr (#1836)
- meter workers, not clients — a phone no longer consumes a device slot (#1921) (#1935)
- mobile code-level English leaks — prompt risk/state slugs + encrypted placeholder (#1123, #1403) (#1837)
- studio relativeTime() leaks English into translated timestamps (#1125) (#1838)
- invert the relay to default-deny — register JwtAuthGuard as APP_GUARD (#1928)
- localize the not-local fallback in useEnvFiles (#1927)
- assign monorepoKind 'cargo-workspace' for Cargo [workspace] roots (#1762) (#1808)
- co-rooted headline, port-less service dedupe, inert edit-kind button (#1774)
- the device-cap 403 the daemon can parse — plus the three blockers found verifying it (#1904)
- an Agent connection and its relay connection are two states (#1922)
- window drag under modals, ultrawide backdrop, narrow status bar (#1901)
- run a global ValidationPipe on the relay and website-api (#1920)
- treat cursor moves as layout so Claude's spinner survives the ANSI strip (#1822)
- the web dashboard tells a BYO account the truth about its own data (#1819)
- honour the client-supplied device id in the keyed enrollment path (#1640) (#1816)
- bound the revocation close reason to 123 UTF-8 bytes (#1817)
- attach applies .git/info/exclude when .checkpt/ already exists (#1811)
- force the detect live path on in release (mock DCE'd) (#1755)
- give the root postinstall its script before every image install (#1806)
- stop the coming-soon flash and the false state-mismatch on OAuth sign-in (#1772)
- pin the portal URLs and make the apex canonical (#1773)
- don't fail every Docker image build from the node-pty postinstall (#1741) (#1794)
- the alerting scripts run under
bash -e, which broke every guarded path (#1715) (#1788) - make every PTY spawn work, clean install and packaged sidecar (#1741) (#1782)
- revert the partial react-router major bump that forked the router (#1735) (#1736)
- copy libs/auth/types into the migration image (#1731)
- watch every web build input, and guard the filter from drifting (#1730)
- unbreak the API image builds (#1723)
- treat Copilot's suppressed findings as a persistent open set (#1717)
- derive the SSR runtime dependency list from the built bundle (#1720)
- serve project issues and change requests for PAT-bound projects (#1302) (#1700)
- stop leaking prompt title/summary/PTY context to the relay (#1703)
- surface partial scans + collapse services/env in detect adapter (G1, G2) (#1689)
- scan the scaffold-destination override in the detect effect (#1690)
- strapi CLI row + guard one-shot/hook framework promotion (G3/G5) (#1698)
- let the Studio capture use the simulated detector again (#1691)
- refresh device claims on a jittered cadence (#1638) (#1684)
- resolve a session's PTY env through the daemon (#1666) (#1685)
- resolve plan coverage across org membership (#1637) (#1681)
- fan control-plane events out across relay instances (#1497) (#1678)
- make FakeRedisHub's virtual clock actually virtual (#1673)
- regenerate stale makefile goldens to derived ruleset hash (#1651)
- resolve local (excluded) .checkpt config from the repo root for worktree sessions (#1634)
- unbreak main — align invariant suite + stale golden with composite-root synthesis (#1621)
- keep the relay to one task and deploy it stop-then-start (#1493) (#1604)
- parse Claude's welcome when facts sit beside the mascot art (#1597)
- synthesize root workspace for composite-only repos + referential-integrity check (#1135) (#1138)
- relay account-device surface + the fan-out that never worked; feat(#1321): blocking device-onboarding gate (#1562)
- wire RELAY_KEK into the relay task def (#1590) (#1595)
- capture Studio id/vi/cs — main is red (#1602)
- derive locale lists from the apps, add a coverage gate (#1469) (#1572)
- stop vendor update prompts reporting as parse regressions (#1571)
- add cs/vi to the blog locale list, guard it in CI (#1545) (#1546)
- point /issue board-add at project 12, not stale 7 (#1526)
- pin Tailwind's scan root so SSR and client emit the same CSS (#1513) (#1532)
- make the daemon URL runtime-configurable (#1475) (#1528)
- give container legs a Node before pnpm/action-setup runs (#1520) (#1521)
- allow the local-trust token to live outside the home dir (#1474) (#1518)
- key rate limits on the real client IP, not the proxy (#1489) (#1517)
- send the CSRF token on cookie-mode mutations so sign out works (#1504) (#1505)
- give the app a real relay credential (#1463) (#1486)
- run react-router typegen before the root solution typecheck (#1479)
- localize the New Project stepper pip labels (#1419) (#1464)
- require a JWT on the relay WS in every environment (#1462)
- backfill missing uk approval-rule error translations (#1465)
- light-mode sidebar logo, org switcher wording, security page layout (#1459)
- dashboard feedback sweep — organizations terminology, truthful overview, working security page (#1445)
- finish the Operations tab strip's token migration (#1444)
- security page sessions table overflow — bounded UA column + shared parseUserAgent (#1443)
- bundle daemon + config sidecars in Windows portable zip (#1388)
- regenerate fastify-api and sveltekit-app goldens (#1362)
- system requirements reflect what the shipped bundles enforce (#1330)
- truth sweep — remove unshipped tier claims across pricing, docs, and FAQ (#1347)
- legible light-mode auth + app-wide contrast sweep + sign-in redesign (#1287)
- reconcile end-to-end-encryption claims with what actually ships (#1227) (#1286)
- deny symlink traversal when the repo root realpath is unresolvable (#1098)
- backfill relay/version keys into lagging locales (hi, zh-Hant, nl) (#1268)
- admin — sweep residual accent/status utilities + literal white onto semantic tokens (#1250)
- repair Studio de/ja locale drift — main is red (#1213) (#1215)
- terminal pane blank on tab re-activation — keep mounted + re-fit/refresh (#873)
- checkpt-app pt-BR — top up #1175 billing intent error keys (#1194)
- de web — top up #1175 billing intent error keys (#1188)
- pt-BR Studio — top up #1021 tray + agent-lifecycle keys (#1187)
- set website-api FRONTEND_URL for Stripe checkout redirects (#1155)
- preserve raw body for Stripe webhook signature verification (#1151)
- stop packages/shared changes triggering the macOS mobile E2E (#1118)
- transition sessions to awaiting-input on PTY quiescence (#671) (#986)
- add missing fr Studio keys for tray + agent lifecycle (#1129)
- re-run control-plane bootstrap after auth.provision (#664) (#985)
- normalize nested set-array sorting + stub root id conformance (#425) (#1045)
- wire Studio desktop OAuth clients into website-api task def (#1109)
- bundle @aws-sdk/* runtime deps so the image boots (#1092)
- drop the last stale FEATURES.vcs reference (#660) (#1093)
- default VITE_CHECKPT_BASE_URL instead of hard-throwing on a blank page (#675) (#851)
- widen docs content to footer edge, retune footer spacing (#1025)
- retry only CSRF 403s; mark the token response non-cacheable (#1031)
- stop token-refresh storm (single-flight + failure backoff) (#979)
- restore Dock/keyboard focus for macOS dev runs + worktree stamp (#928)
A11y
- the axe gate had never looked at admin, at the public board, or at the two routes with live findings (#3628)
- an overlay inside the screen it covers is not a modal (#3624)
- the keyboard path into a clickable row is a real button (#3619)
- the ratchet only ever walked the app it was born in (#3618)
- drain the last 60 raw literals off the ratchet (#3537)
- drain the 119 raw-color literals the contrast guard cannot see (#3543)
- drain the last 63 raw-palette utilities off Docs and the portal banners (#3542)
- drain the last 10 raw literals in the shared auth UI (#3539)
- axe runs against the rendered DOM in the one check that gates a merge (#3361)
- skip-to-content link, field-level error association, and the missing h1s (#3293)
- make aria-modal true on the thirteen surfaces that claimed it (#3287)
- the icon-only controls say what they do, and the ratchet keeps them saying it (#3258)
- the high-visibility pages leave the raw palette (#3240)
Deps
- the shipped subset is derived on every run, not remembered once (#3717)
- the image already installs the shipped closure — now it audits it (#3720)
- most of the alert stream was about files that are not the product (#3640)
- the prod audit is a watch, permanently — and here is why (#3641)
Dr
- give the recovery drills a cadence, a named owner, and a dataset column (#3699) (#3761)
- name the KEK custody window so raising retention shows up in the plan (#3734)
- a retired KEK must outlive the newest backup that needs it (#3649)
- the feature was built, and pointed at nothing (#3634)
- the staleness probe watched the website, not the tier that matters (#3633)
- DR-4 — the rollback is rehearsed, and the runbook stops calling it a claim (#3581)
- Drill B — the vault restore is faster than PITR, and its metadata does not round-trip (#3477)
- the restore path is rehearsed, and the backup history now outlives the instance (#3383)
- one env var could turn every merge to main into a prod wipe (#3354)
- DR-2 — a delete you can take back, and a copy of the key that cannot be re-derived (#3300)
- incident response — runbook corrected, alert-delivery state on record, incident runbooks sketched (#3282)
I18n
- the org invitation email speaks the reader's language (#3241)
- finish applying "CheckPt Agent" — 40 shipped strings said "daemon" — plus the locales/** guard (#2729)
- route the Settings tab rail through t() (#2068)
- route project + session tab labels through t() (#1785) (#1800)
- localize docs system-requirements table rows (#1336) (#1508)
- pl — mobile (checkpt-app) (#1276)
Infra
- website-api can call Anthropic, and says at boot whether it can (#3652)
- SSR hosting for public web — Fargate origin + CloudFront/caching (#1341) (#1477)
Legal
- the pack's own subprocessor tables were two vendors behind the list (#3685)
- the privacy policy now says staff can sign in as you (#3637)
- mobile telemetry is crash-only — replay off is the decision, analytics off until consent exists (#3453)
- write every legal document CheckPt needs — counsel checks them (#3384)
- the subprocessor list named neither vendor adopted since it was written (#3355)
- an honest privacy policy — subprocessor list, DPA path, real company name (#3245)
License
- a NOTICE was carried only if the manifest admitted to Apache (#3455)
- ship third-party attribution with every distributed artifact (#3325)
- drop the AGPL-3.0 ua-parser-js@2 before it ships (#3239)
Ops
- build the activation funnel and prove it populates (#3770)
- the apt retry deleted the directory apt needs, so every retry after the first was decorative (#3751)
- watch the crash stream, and gate the accessibility tree (#3742)
- the Studio E2E gate called "the deps never installed" a test failure (#3749)
- a placeholder Stripe key survived every probe we had (#3716)
- the native gate never compiled to completion — disk, then timeout (#3683)
- make the coverage-reachability claims enforceable, not remembered (#3504)
- nothing compiled native code, so a cross-SDK package merged green (#3454)
- give mobile a bundle gate, and fix the break it found (#3360)
- the path-filter guard now covers the test workflows too (#3351)
- give mobile a compile gate on PRs, and inventory the rest (#3345)
- say where codecov's floors actually apply — trunk, not PRs (#3341)
- the wizard walk gates PRs, and its stale gate assertion is gone (#3251)
Polish
- lay out honestly on a tablet (#3686)
- store-submission sweep — zh script split, RECORD_AUDIO, one brand casing, dead route, font clamp, stale docs (#3314)
Sec
- the BYO pages omit what the relay cannot boot without, then say to skip it (#3774)
- the flow log kept the refused half and dropped the useful one (#3773)
- three credentials and one ALB attribute with no owner (#3772)
- a key removed from the seed was never removed from the account (#3701)
- the Homebrew tap PAT is the credential SEC-19 retired, still live on the install path (#3703)
- we documented a required secret nothing reads (#3704)
- cover the app-switcher snapshot, and re-lock after a minute away (#3736)
- scope the deploy role's CloudWatch Logs read off
*(#3702) - the admin plane gets its own key, and the release PAT goes away (#3576)
- an incident now leaves a forensic trail — ALB access logs, VPC flow logs, CloudTrail (#3575)
- SEC-4 — the admin plane stops being a committed password (#3479)
- RELAY_KEK becomes a keyring, and rows say which key wrapped them (#3464)
- derive the DR seed image from the live task definition (#3450)
- the publish DTOs still advertised plaintext payloadVersion 1 (#3431)
- pin the Clerk secret key now that the application is deleted (#3418)
- SEC-24 — a SAST that runs, and a secret scan that sees history (#3403)
- SEC-24 — pin every action, drop root, stop trusting a URL (#3404)
- pin the prod deploy role to main + a gated production Environment, drop its secret read (#3353)
- SEC-8 — the process asking for permission could grant it (#3365)
- SEC-18 blast radius — immutable ECR, per-service SGs and execution roles (#3379)
- a push hint could point the app at any relay, which harvested an account-scoped token (#3363)
- a compromised org pool worker could reach every device of every member who used it (#3356)
- SEC-1 — bind device ids to identity keys on key-directory ingest (#3303)
- SEC-21 — desktop hardening: tokens to the keychain, command_spawn takes a recipe, CSP narrowed (#3324)
- SEC-20 — the Android backup that prebuild turned back on, and a posture that lived in an optional argument (#3321)
- SEC-11 — CSP was report-only, and enforcing it would have broken the app (#3304)
- SEC-23 app hardening — session-bound CSRF, step-up re-auth, invite binding, envelope AAD, daemon keychain (#3295)
- SEC-22 relay hardening — fail-closed org guard, view-only exec gaps, sealed run/inbox detail (#3294)
- gate analytics and session replay on cookie consent (#3275)
- a refresh token is not an access token, and the WS credential leaves the query string (#3276)
- SEC-7 — the daemon served session output, inbox and identity to the LAN unauthenticated (#3277)
- audit the denials, and stop a wipe erasing the trail (#3268)
- the admin portal has no signup and no CLI grant (#3273)
Security
- ship a content security policy, replacing csp: null (#2217)
- gate Swagger out of production + security headers on the web/admin origins (#2146)
Tooling
- the suppressed block is a heading, so the documented parse found nothing (#3778)
0.1.4-test.7
8 tháng 9, 2026Chi tiết
Kiểm tra
0.1.4-test.6
8 tháng 9, 2026Chi tiết
Kiểm tra
0.1.4-test.5
6 tháng 9, 2026Chi tiết
Bất kỳ điều gì
0.1.4-test.4
4 tháng 9, 2026Chi tiết
Có gì mới trong v0.1.4-test.4
Bản phát hành này là một nâng cấp lớn về độ tin cậy, bảo mật và nền tảng cho CheckPt, với các cải tiến trên Studio, di động, nhóm, tích hợp, phiên từ xa và hạ tầng production.
Đã thêm
- Phiên có thể tiếp tục, checkpoint tự động, chia sẻ phiên, phát lại và xuất dữ liệu.
- Worker từ xa và worker thuộc sở hữu của tổ chức, cùng khả năng quản lý dự án và phiên trên nhiều thiết bị tốt hơn.
- Quy trình làm việc trên Slack và Discord để bắt đầu tác vụ cũng như phê duyệt hoặc từ chối hành động của trợ lý.
- Mở rộng tích hợp, bao gồm Jira, Linear, GitHub Projects, GitLab, Bitbucket, Azure DevOps, MCP và webhook tùy chỉnh.
- Trình kiểm tra dịch vụ và dữ liệu mới cho API, PostgreSQL, MySQL, MongoDB, Redis, GraphQL, gRPC, hàng đợi và nhiều thứ khác.
- Cải thiện việc phát hiện dự án, quản lý dịch vụ, thực thi tác vụ, cấu hình môi trường và tạo khung dự án.
- Lộ trình công khai, bảng phản hồi, bình chọn tính năng, tùy chọn đồng ý phân tích và ghi chú phát hành tốt hơn.
- Bản địa hóa rộng hơn trên Studio, di động, web và thông báo hệ thống.
Đã thay đổi
- Cải thiện hiệu năng đáng kể cho phiên, WebSocket, cơ sở dữ liệu, thông báo, khởi động và CI.
- Cải thiện điều hướng trong Studio, quy trình làm việc lấy dự án làm trung tâm, các điều khiển phiên và quản lý thiết bị.
- Đơn giản hóa kiến trúc của Agent, relay, xử lý phiên, dịch vụ, tác vụ và xác thực.
Đã sửa
- Nhiều vấn đề ảnh hưởng đến việc khởi động phiên, terminal, ghép nối, thiết bị từ xa, phát hiện dự án, thông báo, triển khai, thanh toán và xác thực.
- Cải thiện việc đóng gói trên macOS và Windows, trình cài đặt, tích hợp hệ thống và độ ổn định của ứng dụng.
- Sửa đáng kể các lỗi về khả năng tiếp cận, bản địa hóa, bố cục đáp ứng và tính nhất quán của giao diện.
Bảo mật và độ tin cậy
- Mã hóa, xác thực, danh tính thiết bị, bảo vệ CSRF, xử lý secret và kiểm soát truy cập mạnh hơn.
- Cải thiện giám sát production, khôi phục sau thảm họa, sao lưu, ghi nhật ký kiểm toán, cô lập hạ tầng và quét bảo mật.
- Bổ sung các tùy chọn quyền riêng tư cho phân tích, telemetry, dữ liệu tài khoản và sự đồng ý.
0.1.4-test.3
1 tháng 9, 2026Chi tiết
Cập nhật