Whatβs new
The latest features, improvements, and fixes across CheckPt Studio.
0.1.4-test.17
LatestSeptember 14, 2026Details
test
0.1.4-test.12
September 13, 2026Details
Test !
0.1.4-test.11
September 13, 2026Details
Test
0.1.4-test.10
September 10, 2026Details
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
September 9, 2026Details
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
September 9, 2026Details
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
September 8, 2026Details
Test
0.1.4-test.6
September 8, 2026Details
Test
0.1.4-test.5
September 6, 2026Details
Whatever
0.1.4-test.4
September 4, 2026Details
Whatβs New in v0.1.4-test.4
This release is a major reliability, security, and platform upgrade for CheckPt, with improvements across Studio, mobile, teams, integrations, remote sessions, and production infrastructure.
Added
- Resumable sessions, automatic checkpoints, session sharing, replay, and export.
- Remote and organization-owned workers with improved cross-device project and session management.
- Slack and Discord workflows for starting tasks and approving or denying agent actions.
- Expanded integrations including Jira, Linear, GitHub Projects, GitLab, Bitbucket, Azure DevOps, MCP, and custom webhooks.
- New service and data inspectors for APIs, PostgreSQL, MySQL, MongoDB, Redis, GraphQL, gRPC, queues, and more.
- Improved project detection, service management, task execution, environment configuration, and project scaffolding.
- Public roadmap, feedback board, feature voting, analytics consent controls, and improved release notes.
- Broader localization across Studio, mobile, web, and system notifications.
Changed
- Major performance improvements across sessions, WebSockets, databases, notifications, startup, and CI.
- Improved Studio navigation, project-first workflows, session controls, and device management.
- Simplified architecture across the Agent, relay, session handling, services, tasks, and authentication.
Fixed
- Numerous issues affecting session startup, terminals, pairing, remote devices, project detection, notifications, deployments, billing, and authentication.
- Improved macOS and Windows packaging, installers, system integration, and application stability.
- Significant accessibility, localization, responsive-layout, and UI consistency fixes.
Security & Reliability
- Stronger encryption, authentication, device identity, CSRF protection, secret handling, and access controls.
- Improved production monitoring, disaster recovery, backups, audit logging, infrastructure isolation, and security scanning.
- Additional privacy controls for analytics, telemetry, account data, and consent.
0.1.4-test.3
September 1, 2026Details
Updates