Repository navigation
refactor(web): replace global aria state with app resources and Foldkit overlays - #338
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The legacy React app is gone, so packages/ui-parity, the root parity script, the /dev/gallery boot path (and every gallery entry), the S2 data benchmarks that ran on parity fixtures and the normalized-store prototype they drove are dead. Docs that describe the harness are marked historical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ListBox, Table, Tree, Toggle, ToggleGroup, InputOTP, Text, SectionFooter, FormErrorSummary, FieldValidationState and aria/scroll were only reachable from the gallery. Calendar loses its Range mode (Single only), its formatters are built once, and unused exports, style keys and nine unused icons go too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…p effect-atom
Define the frontend error convention (docs/foldkit-decisions/s6-errors.md):
Failed*({ reason }) built with Effect.catchTags, then catchCommon, the one
defect boundary, which collapses the remaining CommonError to a CommonReason.
- error-messages.ts: rewritten for Effect v4. An exhaustive Match over the
CommonError union reads HttpClientError.reason._tag and RpcClientError's
transport reason, so network drops are recognised again. Retry policy
(isRetryableReason) is separate from copy, and copy never contains error
or defect text. Message sends now retry on transport failures.
- data/actions.ts: catchCommon, errorToastOf, reasonToast. failureToast's
handlers are typed by the failure's own tags (ErrorHandlers<E>).
- optimisticAction returns (variables) => Effect and keeps typed failures
through TanStack's Promise. runAtomFn, both AtomRegistries, the AtomRpc and
AtomHttpApi clients (one shared the HazelApiClient key), the ManagedRuntime,
ApiClient and the empty telemetry layer are gone; callers use src/rpc.ts.
- Delete core/atoms: quiet hours and muting move to notification-sound.ts as
pure functions of nowMs; emoji usage tracking (write-only) is removed.
- Delete the unread notification diagnostics store and the no-op in-app sink.
- Tauri key-value store loads lazily and fails per call instead of dying.
- XId.make instead of crypto.randomUUID() as XId; drop onRetryAttempt and
the txid debug log; one electricCollection factory for the 24 shapes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hazel auth is the only sign-in now. Removed the Clerk JWT fallback in both auth middlewares, SessionManager and its per-request Clerk org sync, BackendAuth, ClerkClient/AuthConfig, the ClerkSync service and /webhooks/clerk route (whose failures returned 200 so Svix never redelivered), ClerkUserFetchError from the auth unions, the Clerk-only repo methods, the migrate-to-clerk scripts and the Clerk steps of the setup CLI. CLERK_SECRET_KEY is now optional and read only by OAuthBearerAuth (Maple's Clerk-issued OAuth tokens), marked as the last Clerk consumer. Database failures while resolving a session, a bot token or an OAuth user now fail with SessionLoadError (503) instead of a 401, so a DB blip no longer signs the user out; driver text is logged, not sent. GitHub webhook payloads are schema-decoded (InvalidGitHubWebhookPayload, 400) and a cluster outage answers 503 (WorkflowServiceUnavailableError) so GitHub can redeliver. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rs becoming 401s InternalServerError, WorkflowInitializationError and WorkflowServiceUnavailableError no longer have a serialized `cause`: the constructor keeps it as the native, non-enumerable Error.cause, so it reaches logs and traces but never RPC/HTTP clients. withRemapDbErrors passes the DatabaseError/SchemaError as that cause (generics renamed to A, E, R). refailUnauthorized turned every policy failure, database errors included, into UnauthorizedError. Infrastructure failures now become InternalServerError. OrgResolver no longer orDie's its repository lookups, so the DatabaseError stays typed instead of becoming an untyped defect. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ns, drop Slate The message viewer walked the Slate deserializer's output and Slate's decorators while the composer used the ProseMirror ports in editor/. The viewer now renders editor/markdown.ts blocks with editor/decorations.ts leaves (emoji ranges and the viewer's hidden markers move there) and a new editor/code-highlight.ts. detect-language moves to editor/. Prism's lazy language loader was never called, so only five languages ever highlighted. Every language it listed is now registered up front (plus markup-templating, which php needs), keeping the view a pure function. Deletes core/components/chat/slate-editor (and its duplicate serializer suite) and the slate dependency; drops unused @tanstack/react-db and @tanstack/store from the collection lib. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ext to clients About 60 handlers put `String(err)` (SQL and driver messages) into the `detail` or `cause` of InternalServerError / Workflow*Error, which went to RPC and HTTP clients verbatim; `String()` on a tagged error also dropped its message from the logs. They now pass the failure itself as the non-serialized `cause`. A ServerFailureReporter, registered on the route graph, receives every failed RPC and HttpApi request (both servers report to CurrentErrorReporters) and logs 5xx failures and defects with their full Cause. UploadError gets the same server-side cause instead of interpolating the S3 error message. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ants Removes data-rac and the tailwindcss-react-aria-components plugin. Hover, focus and focus-visible are now native CSS; state the browser cannot see uses Tailwind data variants (data-selected:, data-pressed:, data-disabled:, data-[placement=...]:, ...). Fixes missing keyboard focus rings and hover on switches, checkboxes and radios without interaction wiring (now group-hover/group-has-focus-visible on the label, wiring removed), and the dead hover on the stateless tab strip, which the chat tab bar now reuses. Tabs get a visible focus-visible ring; disabled and pending buttons no longer show hover. React Aria default class names are gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ad helpers - session-bearer: sessionAuthorizationEffect wraps the desktop provider in tryPromise with a SessionBearerError; the RPC auth middleware maps it to SessionLoadError instead of dying through Effect.promise. - access-token: the exchange is an Effect: Schema-decoded token body, a TokenExchangeError (Unreachable | ServerError | BadResponse) and Effect.retry with the same 500ms/1s backoff. The Promise exports stay for the fetch wrappers. A malformed body now counts as unanswered. - image-crop: cropImage and loadImage are Effects failing with CropError. - Command palette: the recent-channels write uses Effect.try + ignore, so a full localStorage is a typed, ignored failure rather than a defect. - Delete Rivet's unused actor helpers (one threw), the date-fns re-export shim and bot-avatar's dead Brandfetch tables. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tags Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y the parent The kit Slider and Tabs are now @foldkit/ui 0.167 Submodels with a styled toView (ui/slider.ts layout, ui/tabs.ts layout). The notifications page passes Shared.soundSettings.volume as the Slider's value and stores ChangedValue, so syncVolume and sharedChanged are gone; the chat index keeps its selected tab in its own Model and folds Tabs' Selected OutMessage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every message/reaction outbox handler caught its failures and logged them, so the outbox's retry with backoff never saw a transient Discord, cluster or database outage and the sync was dropped for good. Two DB lookups also fell back to defaults: a failed integration-bot lookup could echo a bot's message back to Discord. - Hazel -> provider deliveries claim their receipt before calling the provider, so a retry was always deduped. On a retryable failure (DB, provider transport, 408/429/5xx) the claim is now released and *ToAllConnections fails with ChatSyncDeliveryRetryableError; 4xx and missing links stay logged-and-skipped. - MessageSideEffectService propagates DB errors and an unreachable cluster. Notifications still go out when Discord fails (the Discord failure is raised last); workflow failures stored under their idempotency key are logged, since a retry would get the same result. - The processor decodes payloads with decodeUnknownEffect instead of throwing a defect that killed the batch. Dispatcher errors are a tagged OutboxLockError; leader-loop / drain / gateway crashes log the Cause instead of String(cause) and let interruption through. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-found errors Validation and not-found cases came back as InternalServerError (500), so clients could not tell them from outages: - channel.createDm / createThread / generateName: InvalidChannelRequestError (400) for the participant count, org mismatch, non-thread channels and a thread without its original message (which used to fake a MessageNotFoundError from the channel id, and turned a DB error into "not found"). - Incoming webhooks: InvalidWebhookPayloadError (400) for no content, too many embeds and a payload that fails the message schema. - connectShare.*: ChannelNotFoundError and a new ConnectConversationNotFoundError; the two `throw`s inside Option.getOrElse (untyped defects) are typed failures. - invitation.create propagates OrganizationNotFoundError instead of rewrapping it. The RPC and HttpApi error unions are widened accordingly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…registering linkByVerifiedEmail caught every cause (defects and interruption included) and continued to registration. `users.email` is not unique, so a transient database error during the lookup or the link created a second account for an existing user. SqlError and PlatformError now fail the intent with OAuthUnavailable (the user retries sign-in) after logging the cause. Covered by a Postgres test that breaks the users lookup mid sign-in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Menu Model now holds only the popup, selection mode and selected keys. Parents pass entries in ViewInputs; the view attaches them to the Messages that navigate (PressedTriggerKey, PressedMenuKey, HoveredItem, ClickedItem), so reflectEntries and the copied entries are gone. The shell keeps its menus' entries in its own Model so the memoized sidebars see stable references. Overlays.update loses its now-unused facts argument. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Select Model keeps only the selection and the popup; parents pass items in ViewInputs and the view attaches them to the navigating Messages. The set-status expiration labels and the calendar's month/year options are now derived in the view instead of copied into the child Model. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ComboBox Model keeps only the selection, the typed text and the popup. update takes the items as an argument and the view reads them from ViewInputs; TimezoneSelect owns the timezone list and its update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… instead of looping /onboarding sends an onboarded user (anyone on the picker) back to /, so the button never reached a form. It now opens /onboarding/setup-organization; a test enters the target route with an onboarded session and asserts no redirect. The organizations slice is a Loading | Redirected | Loaded union and rows are keyed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e auth pages
auth/flows.ts classifies every @yielded/auth and passkey-browser error with an
exhaustive Match into AuthFlowError{reason} (no tag-suffix sniffing: a browser
input rejection no longer reads as an expired sign-in) and matches the result's
non-Authenticated variants exhaustively. The desktop handoff does the same with
HandoffError{reason} and offers Try again on transient failures.
Sign-in, register, continue and desktop pages hold one Submission/step union
instead of pending/error/isSubmitting flags; the desktop page carries attemptId in
its steps and opens the callback with load. isSessionLoading lives on contract.ts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed formatters Segments.init takes the locale (default en-US, like the calendar) and stores it, so update and view never read navigator.language. Intl formatters and field names are built once per locale. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…embed Style files no longer claim to be shared with the React app, comments stop pointing at apps/web, the date-fns re-export shim is gone, and the two hand-copied embedInteraction helpers call Interaction.embed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sync decode throws
- bot.create/install/uninstall/installById: Effect.die("User must belong to an
organization") is now ActiveOrganizationRequiredError (400), added to the unions.
- generateTransactionId keeps the typed DatabaseError/SchemaError instead of dying
with a stringified cause; handlers remap it with withRemapDbErrors.
- Hand-written DatabaseError/SchemaError -> InternalServerError catches in the
chat-sync RPC and HTTP handlers, integrations, organization members and the
organization slug handler now use withRemapDbErrors.
- Craft rate limits, 5xx and transport failures are IntegrationUnavailableError
(503) instead of InternalServerError.
- parseOAuthStateParam and the OAuth session cookie decode with
decodeUnknownOption instead of try/catch around decodeUnknownSync and JSON.parse;
the same for the outbound-identity settings in the chat-sync core worker.
- Discord webhook fallbacks catch DiscordApiError only (a DB failure no longer
silently falls back to the bot API); integration-bot best-effort adds catch
DatabaseError/SchemaError and log the Cause.
- connect-shares helpers drop `any`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The backend lives in apps/backend (not backendv2) and signs users in with Hazel auth; Clerk only verifies Maple's OAuth tokens. Adds the backend test commands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The onboarding theme step and the appearance settings each rebuilt the same
three illustrations (about 3,600 lines of h.* calls) on every render. They
are now public/images/appearance/{system,light,dark}.svg behind <img>.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd create-workspace
Join and invite lookups are Loading | Found/Loaded | NotFound | Failed{reason}: a
network error no longer renders as an invalid link, and Failed offers Try again.
Accept/join/create build their reasons with catchTags + catchCommon (no hand-read
cause.reasons or _tag strings); copy comes from failureMessage. Invite and
create-workspace hold a Submission union instead of isSubmitting/error flags.
Join reuses the auth frame and shared initials helper, and its Go to Home is a
button-styled link instead of a button inside an anchor.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…union Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Profile, home (members and DM rows), chat index and the notifications inbox hold Loading | Loaded (profile: Loading | Found | NotFound) instead of null-means-loading, so the profile no longer flashes "User not found" on every visit. Mark-read and create-DM failures are catchTags + catchCommon reasons; a failed mark-read now says so (a deleted notification stays quiet) instead of being dropped as String(error). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…labelled Nucleo icons drop the legacy <title> (32 of them read "badge 13") and render aria-hidden; passing title gives role=img and a <title>. Every icon-only button the audit found now has an aria-label (sidebar row and section menus, image viewer toolbar, attachment remove, member Message, row menus, copy buttons, channel icon controls, command form Back). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… finalization
The page is Starting{membership, timezone} | Leaving | Running{flow, step, data}, and
each step's form lives in its StepState variant (Profile, Timezone, UseCases, Role,
Invite, Finalizing{failure}, Completed), replacing step + form + isInitialized +
hasRedirected + error. A failed finalize stops the spinner and offers Try again
(ClickedRetryFinalize). One validation module feeds update and the views (a
whitespace name now disables Continue). Invite rows are {id, email, error} keyed by
id with MAX_INVITES enforced in update. All four failures carry typed reasons
built with catchTags + catchCommon; NoOrganization is decided in update. Back is
ignored while a request is in flight, and late successes need a pending submit.
Dead Data.emails is gone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…at stream Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… root stream Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps both: chat-index's Channels loading union with kit's ChatIndexTab/ChatIndexTabs, and home's Members/DmChannels unions with menuEntries as a view input. CreateDm now also classifies the backend's new InvalidChannelRequestError. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ToggleReaction, PinMessage and UnpinMessage settle into Succeeded*/Failed*({ reason })
built with catchTags + catchCommon; write.ts maps reasons to copy. The unused
DeleteMessage Command (the root's modal deletes) and action-effects.ts are gone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oad problems, name rules Drop the two local embedInteraction copies for Interaction.embed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…syncData and field validation Invitations, connect invites and chat-sync lists render a Failure branch with retry instead of empty/not-found; custom emoji and logo uploads keep their specific errors; delete confirmations use ConfirmAction; integration detail validates token and base URL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ilures, OAuth error copy Profile uses fieldValidation with real messages, derived dirtiness, DropZone and Update.foldChild; linked accounts maps OAuth error codes; desktop reports a failed autostart change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ows failures Overview and webhook names use the shared name rules with visible errors, integration lists are AsyncData, ProviderCard actions are a union, row deletes use ConfirmAction; the document stub moves to the test setup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tests for the boot, org-switch and presence P0s Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep the kit's Menu/ComboBox/Slider APIs and data-rac removal alongside the settings rework; the two embedInteraction wrappers stay deleted (call sites use Interaction.embed). The backend's new RPC errors get feature reasons: ChannelNotFound and ConnectConversationNotFound for connect invites, NoActiveOrganization for bot install/uninstall, IntegrationUnavailable as Unavailable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…routes in their navigation, desktop update view matches its union Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… navigation carries routes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The toaster binds the kit Toast (lifecycle, timers, hover pause, swipe) to the app's ToastRequest. The import-time sonner stylesheet injection, the hand-rolled timers and stacking, and the sonner dependency are gone. Enter/exit animate on the kit's data-closed/enter/leave attributes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ality Trigger handlers live in the view, so Scene tests can hover and focus a tooltip. Anchor (floating-ui) positions the panel; the arrow reads --arrow-x/--arrow-y. The module-level input modality had no other consumer and is gone. toAnchorPlacement maps the app's placements. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The native dialog isolates the page, locks scroll, traps focus and returns it; the hand-rolled portal/inert/scroll-lock/focus-scope wiring is gone. Modal re-exports the Dialog Model, Message and OutMessage (Opened/Closed), so folds add foldOutMessage. opened/closed are gone: open/close return Commands, initOpen builds the open Model of a modal without a stored Model. The dialog renders only while open, so its Mount takes and releases the resources whether or not the parent keeps the Model. Panels and backdrops animate in from @starting-style. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Floating UI places the panel; a press on the backdrop, Escape and the close buttons close it and focus returns to the trigger. The panel renders beside its trigger instead of inside the button, and focus goes to the content (contentFocus) so controls inside keep it open. The popover host's module-level closed-Model cache is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dialog renders only while open and its Mount shows it and releases it (focus return included) on removal, so ShowDialog/CloseDialog were redundant Commands. open/close/update now only flip isOpen and emit Opened/Closed; scene tests resolve the dialog's AcquireResources Mount. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Menus, selects, combo boxes, the date picker, the command menu and the picker popovers position with Anchor (floating-ui), portal with portalToContainingRoot (dialog-aware), and lock scroll / inert the page through Foldkit's Dom. The overlay stack, inert counts and scroll-lock closure in ui/aria/overlay.ts are gone; the topmost overlay is read from the DOM. The vendored React Aria calculatePosition (position.ts) is deleted. The message toolbar anchors with Anchor, and its tooltip and emoji picker render beside each button instead of inside it. The command menu animates in from @starting-style. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a module state pending-announcement no longer installs a document observer at import time or writes react-aria-button-N ids: it is a scoped Layer in the app's resources that announces the button's label. The live announcer finds its node in the DOM instead of a module variable. With no module state left in ui/aria, the oxlint override for it is removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Maple review🟡 Confidence 5/10 · needs attention Refactors web state, overlays and backend auth/failure handling across 879 files; one real observability gap in the new session-failure path. 227 files, notably
Before merge
Findings🟠 Warning · F1 ·
|
| Issue | Service | Occurrences | File |
|---|---|---|---|
| HttpClientError | maple-web | 27 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 12 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 9 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 9 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 8 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 8 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 4 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 4 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 4 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
| HttpClientError | maple-web | 3 | apps/web-foldkit/src/core/lib/services/common/atom-client.ts |
After this merges, Maple checks whether they stop.
Production traffic of the changed files (last 7 days)
| File | Calls/day | Busiest operations |
|---|---|---|
apps/backend/src/routes/webhooks.http.ts |
974 | POST 830/day, 4.0% errPOST 144/day, 0.5% err |
apps/web-foldkit/src/core/lib/access-token.ts |
974 | POST 830/day, 4.0% errPOST 144/day, 0.5% err |
apps/web-foldkit/src/composer/upload.ts |
7 | PUT 7/day, 0.0% err |
Telemetry this change adds and removes (1)
- ➕ span name
MessageSideEffectService.nameThreadIfDue·apps/backend/src/services/message-side-effect-service.ts:110
What was checked
access-token.tsexchange keeps its attempt bound (Effect.retrytimes 2) and generation guard- Token retry only re-sends the idempotent
POST /auth/tokenexchange - Backend RPC handlers group (bots, channels, connect-shares, organizations): no dropped auth or org check found
Observability coverage: 0 of 1 changes observable
| Change | Kind | Observable | Evidence |
|---|---|---|---|
| POST /auth/token token exchange wrapper in access-token.ts | outbound-http | no | Runs via Effect.runPromise from fetch wrappers outside any runtime; no Client span, MAP-01 |
Files not reviewed (227)
The review ended before it read these diffs, so nothing above vouches for them.
.oxlintrc.jsonapps/backend/.artifacts/chat-sync/chat-sync-diagnostics.jsonlapps/backend/src/lib/error-reporter.test.tsapps/backend/src/lib/policy-utils.test.tsapps/backend/src/routes/api-v1/integrations.http.tsapps/backend/src/routes/api-v1/messages.http.tsapps/backend/src/routes/bot-commands.http.tsapps/backend/src/routes/integration-commands.http.tsapps/backend/src/routes/integration-resources.http.tsapps/backend/src/rpc/middleware/auth-class.tsapps/backend/src/rpc/middleware/auth.test.tsapps/backend/src/services/chat-sync/chat-sync-core-worker.integration.test.tsapps/backend/src/services/chat-sync/chat-sync-core-worker.tsapps/backend/src/services/chat-sync/discord-gateway-service.tsapps/backend/src/services/chat-sync/discord-sync-worker.test.tsapps/backend/src/services/hazel-auth.test.tsapps/backend/src/services/invitations.test.tsapps/backend/src/services/message-side-effect-service.test.tsapps/backend/src/services/org-resolver.test.tsapps/backend/src/services/session-manager.tsapps/electric-proxy/resources.tsapps/web-foldkit/package.jsonapps/web-foldkit/public/images/appearance/dark.svgapps/web-foldkit/public/images/appearance/light.svgapps/web-foldkit/public/images/appearance/system.svgapps/web-foldkit/src/app/desktop.test.tsapps/web-foldkit/src/auth/flows.test.tsapps/web-foldkit/src/chat/embeds/url-embeds.tsapps/web-foldkit/src/chat/image-viewer.tsapps/web-foldkit/src/chat/markdown/leaves.test.ts- and 197 more
d620f82 · Updated on every push. Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one. Check ids refer to Maple's instrumentation audit.
|
Important Review skippedToo many files! This PR contains 875 files, which is 725 over the limit of 150. To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. Usage-priced reviews support at most 300 files. ⚙️ Run configuration
⛔ Files ignored due to path filters: 4
📒 Files selected for processing: 875
You can disable this status message by setting the
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
|
|
Merged with 1 step from "Before merge" still open. If it is done, tick it on the review comment; if not, now is the time.
|
Maple: after this shippedDeployed to Errors in the changed files:
Maple looks once, an hour after the first deploy that carries the merge. |
Summary
ui/ariamodule state exception.@foldkit/ui.Testing
Need help on this PR? Tag
@codesmith-botwith what you need.