Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
422 commits
Select commit Hold shift + click to select a range
d7c48ec
Merge branch 'wip/fix-correct' into improvement/org-view
waleedlatif1 Nov 6, 2026
3fcc730
test(platform): retry the deep link a post sign-in redirect aborted
waleedlatif1 Nov 6, 2026
15714a0
test(org): point the retention test at the module it reads
waleedlatif1 Nov 6, 2026
8659c05
test(org): match the secret and retention tests to their real types
waleedlatif1 Nov 6, 2026
1bb3c4f
Merge remote-tracking branch 'origin/staging' into improvement/org-view
waleedlatif1 Nov 6, 2026
4f771ff
fix(org): hold a declined composer message again once its text changes
waleedlatif1 Nov 6, 2026
f7649ee
test(org): filter the two console messages this environment alone pro…
waleedlatif1 Nov 6, 2026
ecfa0f4
test(org): settle on the page's own reads
waleedlatif1 Nov 6, 2026
56ae7e2
test(org): compare rail styles with the mouse parked in both captures
waleedlatif1 Nov 6, 2026
0a4901f
fix(favicon): record an icon that failed before hydration
waleedlatif1 Nov 6, 2026
61e45bc
test(org): report every failed route in a walk
waleedlatif1 Nov 6, 2026
0eeb6d4
test(org): state only what is known about the analytics refusal
waleedlatif1 Nov 6, 2026
ccc378b
chore(contracts): sync the worker's steering v2 contract and steering…
waleedlatif1 Nov 6, 2026
e5a7769
improvement(chat): steer the running turn instead of queueing follow-ups
waleedlatif1 Nov 6, 2026
f7abb06
test(chat): prove applied steering and input_applied are never resent…
waleedlatif1 Nov 6, 2026
0fbb5c9
chore(tests): shrink the test-patterns baseline
waleedlatif1 Nov 6, 2026
e308b6d
fix(modal): hold a dialog from the input that starts its work
waleedlatif1 Nov 6, 2026
0268079
improvement(org): report admin failures from their events and reset s…
waleedlatif1 Nov 6, 2026
4a1bdc0
improvement(org): drop memos that buy no stable reference
waleedlatif1 Nov 6, 2026
15bea60
refactor(data-retention): read the policy rules from their one module
waleedlatif1 Nov 6, 2026
7c5af25
improvement(org): share the catalog stale time and keep its import in…
waleedlatif1 Nov 6, 2026
a573845
improvement(org): read the General view through nuqs and give the sou…
waleedlatif1 Nov 6, 2026
1a8365c
fix(design-system): stop an Input's measurement on the next render an…
waleedlatif1 Nov 6, 2026
925b85b
refactor(sso): read the provider rules from their one module
waleedlatif1 Nov 6, 2026
baab352
fix(billing): finish the portal tab after the page that opened it unm…
waleedlatif1 Nov 6, 2026
b4149e5
refactor(access-control): read the editor rules from their one module
waleedlatif1 Nov 6, 2026
5822936
chore(contracts): sync the steer v2 context cap and disposition notes…
waleedlatif1 Nov 6, 2026
280fe22
improvement(chat): carry a host's chat chrome in one context
waleedlatif1 Nov 6, 2026
22a17aa
improvement(chat): steer through v2 only, with the message's files an…
waleedlatif1 Nov 6, 2026
e5816be
improvement(chat): journal outgoing messages per tab and place applie…
waleedlatif1 Nov 6, 2026
4a4f71d
test(org): wait for a page's own reads before asserting nothing happened
waleedlatif1 Nov 6, 2026
ccd7e1b
test(org): give every route and shot a real anchor, and refuse an unk…
waleedlatif1 Nov 6, 2026
d179d2c
improvement(org): resolve an account's token once per Home widget read
waleedlatif1 Nov 6, 2026
528d661
improvement(org): read a Home widget's account facts in one round trip
waleedlatif1 Nov 6, 2026
c56764c
improvement(org): list Gmail threads and read the mailbox address tog…
waleedlatif1 Nov 6, 2026
fdeabb8
improvement(org): move page-only conversation effects beside the page…
waleedlatif1 Nov 6, 2026
718f7b2
test(org): one central mock for the flags and legacy chat a conversat…
waleedlatif1 Nov 6, 2026
ce57962
refactor(access-control): compare a group's config through the editor…
waleedlatif1 Nov 6, 2026
0d89057
refactor(access-requests): describe policy changes from one module
waleedlatif1 Nov 6, 2026
6b0c927
refactor(audit-logs): read the feed rules from their one module
waleedlatif1 Nov 6, 2026
18a8774
refactor(session-policy): validate hours through the policy form
waleedlatif1 Nov 6, 2026
b57246d
refactor(usage): format usage through the shared module
waleedlatif1 Nov 6, 2026
4895d51
refactor(billing): read invoice presentation from the billing module
waleedlatif1 Nov 6, 2026
1282e03
refactor(accounts): group personal accounts through one module
waleedlatif1 Nov 6, 2026
976f771
test(org): cut unit tests that could not fail and share the browser s…
waleedlatif1 Nov 6, 2026
90e3368
improvement(org): load the new-link form when a shortcut opens it
waleedlatif1 Nov 6, 2026
b6210f5
improvement(org): one pattern per job across the organization views
waleedlatif1 Nov 6, 2026
ae0b5dd
chore(org): drop false, dated and legacy-comparing comments
waleedlatif1 Nov 6, 2026
a66e05f
improvement(org): narrow the composer hook to what it computes
waleedlatif1 Nov 6, 2026
8c4bfcb
Revert "fix(favicon): record an icon that failed before hydration"
waleedlatif1 Nov 6, 2026
04b88dc
refactor(logs): compute time windows only in the client-safe module
waleedlatif1 Nov 6, 2026
7330a0d
refactor(uploads): format file sizes from the client-safe module
waleedlatif1 Nov 6, 2026
2b03c5b
refactor(permissions): keep one workspace role lock rule
waleedlatif1 Nov 6, 2026
061dd2f
refactor(data-drains): share how a destination's config reads
waleedlatif1 Nov 6, 2026
956150a
refactor(scim): share how a timestamp reads relative to now
waleedlatif1 Nov 6, 2026
4006714
refactor(settings): drop imports the shared modules made unused
waleedlatif1 Nov 6, 2026
60ec696
improvement(org): give the host token remaps and composer geometry th…
waleedlatif1 Nov 6, 2026
4a47eef
test(org): adopt the central flag and chat mocks everywhere they apply
waleedlatif1 Nov 6, 2026
eabb2c3
fix(session): keep server-rendered rows when the session settles duri…
waleedlatif1 Nov 6, 2026
dced925
Merge branch 'wip/fix-correct' into improvement/org-view
waleedlatif1 Nov 6, 2026
c8ba813
Merge branch 'wip/fix-e2e' into improvement/org-view
waleedlatif1 Nov 6, 2026
fbe8c66
Merge branch 'wip/fix-defork' into improvement/org-view
waleedlatif1 Nov 6, 2026
7919a25
improvement(org): drop surface overrides now that surfaces paint nothing
waleedlatif1 Nov 6, 2026
96fbc3a
Merge branch 'wip/fix-ui' into improvement/org-view
waleedlatif1 Nov 6, 2026
1e81da4
Merge remote-tracking branch 'origin/staging' into improvement/org-view
waleedlatif1 Nov 6, 2026
7091718
improvement(org): gate pages without the reads only the layout draws
waleedlatif1 Nov 6, 2026
9634d2e
test(org): use the central mocks in the portal and token tests
waleedlatif1 Nov 6, 2026
72a8b96
test(org): type the input test and shrink the baselines the cleanup c…
waleedlatif1 Nov 6, 2026
69b68a6
Merge branch 'wip/fix-server' into improvement/org-view
waleedlatif1 Nov 6, 2026
c723877
improvement(org): space Home's mail refreshes further apart
waleedlatif1 Nov 6, 2026
b208f64
refactor(platform): move the embedded surface beside PlatformSurface
waleedlatif1 Nov 6, 2026
0136c40
refactor(org): move the organization provider to a neutral client module
waleedlatif1 Nov 6, 2026
b83e885
refactor(org): move Platform-only search hooks under platform/lib/data
waleedlatif1 Nov 6, 2026
0707c2e
refactor(org): put the settings section model and warmers in platform…
waleedlatif1 Nov 6, 2026
a5150e5
refactor(org): move the secrets page adapter into its route folder
waleedlatif1 Nov 6, 2026
9a88cbb
refactor(org): move the last route modules platform/lib read to lib/
waleedlatif1 Nov 6, 2026
d05d9a5
refactor(platform): drop pass-through re-exports from the data layer
waleedlatif1 Nov 6, 2026
840e073
chore(boundaries): ratchet platform's edges into routes and the works…
waleedlatif1 Nov 6, 2026
5ddab8a
test(org): type the deferred Gmail listing as the mock it resolves with
waleedlatif1 Nov 6, 2026
551fc64
Merge branch 'wip/fix-server' into improvement/org-view
waleedlatif1 Nov 6, 2026
37ed646
improvement(org): stop the page surface depending on host utilities i…
waleedlatif1 Nov 6, 2026
411c3a6
test(search): accept a denied chat's recovery reported after Return home
waleedlatif1 Nov 6, 2026
3081e44
chore(contracts): sync the final steer v2 refusals from the worker
waleedlatif1 Nov 6, 2026
5af34a8
improvement(chat): settle steering fallbacks in an application operat…
waleedlatif1 Nov 6, 2026
25177b8
chore(chat): answer steering in the scripted agent as the worker does…
waleedlatif1 Nov 6, 2026
2835460
improvement(chat): settle orphan steering records, bound delivery, an…
waleedlatif1 Nov 6, 2026
da54d77
fix(chat): forward the worker's input_applied refusal to the view, an…
waleedlatif1 Nov 6, 2026
d8c7055
Merge remote-tracking branch 'origin/staging' into improvement/org-view
waleedlatif1 Nov 6, 2026
5b7f74e
fix(chat): show a message the worker refuses as already applied once,…
waleedlatif1 Nov 6, 2026
7503418
fix(org): let Home's workspace rows fill their section again
waleedlatif1 Nov 6, 2026
2ee79ca
test(org): resize the rail by key once Home's field has taken its loa…
waleedlatif1 Nov 6, 2026
2974a6c
test(org): wait for the Search retry's read by its path alone
waleedlatif1 Nov 6, 2026
ad1b477
test(org): let the prefetch deliver Links' loading state before holdi…
waleedlatif1 Nov 6, 2026
77f7003
test(org): press a shortcut only once hydration can answer it
waleedlatif1 Nov 6, 2026
e2dff57
test(org): anchor /platform on its marketing page and allow the bogus…
waleedlatif1 Nov 6, 2026
886a0cf
test(org): settle ignores static assets and reads the old document ab…
waleedlatif1 Nov 6, 2026
2733686
test(org): name the SSO provider field exactly
waleedlatif1 Nov 6, 2026
8f3b45b
fix(org): keep the panel's skill timing and bound Enter while lists load
waleedlatif1 Nov 6, 2026
ba0054d
fix(org): keep retention's list on the server's document after a save
waleedlatif1 Nov 6, 2026
a073ee5
fix(org): treat a failed retention re-read as unconfirmed
waleedlatif1 Nov 6, 2026
9e9565c
fix(org): key the Gmail mailbox cache on the provider subject
waleedlatif1 Nov 6, 2026
b882040
docs(org): state what useServerDraft can and cannot detect
waleedlatif1 Nov 6, 2026
878abc5
fix(org): fail mutations fast offline so a pending dialog can be canc…
waleedlatif1 Nov 6, 2026
e338d51
Merge branch 'wip/fix-correct' into improvement/org-view
waleedlatif1 Nov 6, 2026
17d935e
Revert "fix(org): fail mutations fast offline so a pending dialog can…
waleedlatif1 Nov 6, 2026
3432a60
test(chat): prove steering in the org E2E through the v2 scripted worker
waleedlatif1 Nov 6, 2026
8039f94
fix(chat): refuse steering under a turn's own id, settle stuck dispos…
waleedlatif1 Nov 6, 2026
e4502cd
improvement(chat): move outgoing delivery into pure transitions, and …
waleedlatif1 Nov 6, 2026
ed77fb1
Merge branch 'improvement/org-view' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
9d77930
test(chat): make the journal tests able to fail, and pin the running …
waleedlatif1 Nov 6, 2026
5360974
test(chat): drop a journal read test zustand's own catch keeps green
waleedlatif1 Nov 6, 2026
1d42c39
fix(chat): read a stored disposition without a double cast, keep Plat…
waleedlatif1 Nov 6, 2026
3458a33
test(chat): keep the refused-message test inside its budget under load
waleedlatif1 Nov 6, 2026
10e8935
improvement(platform): keep the embedded organization view beside the…
waleedlatif1 Nov 6, 2026
eac206a
chore(platform): point the seam rule and guidance at the embedded views
waleedlatif1 Nov 6, 2026
af97413
fix(chat): keep the outgoing journal store importable from the server…
waleedlatif1 Nov 6, 2026
78cf045
Merge remote-tracking branch 'origin/staging' into wip/platform-org-w…
waleedlatif1 Nov 6, 2026
b57f66d
test(org): skip a prefetch whose body the navigation discarded
waleedlatif1 Nov 6, 2026
5f4386f
improvement(org): collapse repeated recents and give every chip a mark
waleedlatif1 Nov 6, 2026
6de1280
fix(chat): close the re-audit's delivery gaps
waleedlatif1 Nov 6, 2026
4dc38d5
test(chat): let every org E2E check share the socket-token throttle a…
waleedlatif1 Nov 6, 2026
5038691
test(chat): prove steering end to end across a real browser, app, wor…
waleedlatif1 Nov 6, 2026
8f45368
fix(org): keep Home sections, People and usage rows from overlapping …
waleedlatif1 Nov 6, 2026
e23c9cb
fix(ci): hash the embedded organization views into the app build
waleedlatif1 Nov 6, 2026
897d9b2
fix(platform): restore the design system's activity and property list…
waleedlatif1 Nov 6, 2026
4963bc0
fix(org): show each viewer's Home while it loads, and never a blank b…
waleedlatif1 Nov 6, 2026
346afdd
test(org): let the screenshot walk wait for the card it opens
waleedlatif1 Nov 6, 2026
cd4b2a7
fix(platform): keep integrations links the zone cannot serve on the l…
waleedlatif1 Nov 6, 2026
ba72291
fix(platform): connect and remove saved accounts through working paths
waleedlatif1 Nov 6, 2026
4b611fb
fix(platform): refuse to start a deployed zone without live data
waleedlatif1 Nov 6, 2026
d9928ae
fix(platform): offer only chats the viewer can open, from one rule
waleedlatif1 Nov 6, 2026
48c90dc
fix(platform): gate the zone's integrations page and port Home's mode…
waleedlatif1 Nov 6, 2026
be5785d
fix(desktop): open organization settings from a Platform page
waleedlatif1 Nov 6, 2026
779e195
improvement(org): open the conversation and warm admin reads without …
waleedlatif1 Nov 6, 2026
3403deb
improvement(org): use the standard first read, loading and empty part…
waleedlatif1 Nov 6, 2026
fb28e41
fix(org): name the main region on every page and let loading states b…
waleedlatif1 Nov 6, 2026
9151b13
fix(platform): hold the embedded organization views to the design check
waleedlatif1 Nov 6, 2026
e1e364d
fix(ci): run the Platform suites when the seam they read through changes
waleedlatif1 Nov 6, 2026
60ff909
test(platform): run the live suite on the org-redesign stack
waleedlatif1 Nov 6, 2026
a5a4072
fix(org): let the group editor's catalog refresh, and hold activity o…
waleedlatif1 Nov 6, 2026
d9109bb
improvement(platform): one copy of the shared helpers and of isRefusal
waleedlatif1 Nov 6, 2026
facda8f
improvement(platform): keep the chat rule free of the server's access…
waleedlatif1 Nov 6, 2026
4bb8674
fix(boundaries): hold both data layers to the seam and ratchet views …
waleedlatif1 Nov 6, 2026
b084f11
test(org): measure Home's layout shift, overlap on a phone, and Peopl…
waleedlatif1 Nov 6, 2026
975ad42
Merge branch 'wip/fix-consistency' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
fce2966
fix(platform): type-check every embedded file and its tests
waleedlatif1 Nov 6, 2026
c5c6a79
improvement(org): one section rule and an organization-owned error po…
waleedlatif1 Nov 6, 2026
418cfa3
docs(platform): describe what embedded is and how it differs from the…
waleedlatif1 Nov 6, 2026
9df253f
Merge branch 'wip/fix-zone-wiring' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
5245be8
Merge branch 'wip/fix-gates' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
063f7fb
improvement(platform): give zone and organization views one shared he…
waleedlatif1 Nov 6, 2026
67e1d46
fix(platform): point the drains barrel and prefetch test at the moved…
waleedlatif1 Nov 6, 2026
a488518
test(org): wait for a removed recent's deletes before reloading
waleedlatif1 Nov 6, 2026
ad94fcd
fix(platform): give a dialog portalled out of a surface its own surface
waleedlatif1 Nov 6, 2026
df430e7
fix(chats): stop reading a deleted chat while its view is still mounted
waleedlatif1 Nov 6, 2026
ce3d8ab
docs(platform): point the contract at the moved time helpers
waleedlatif1 Nov 6, 2026
ede5ffb
test(org): assert the visible description and wait for the People pre…
waleedlatif1 Nov 6, 2026
9d0a411
test(org): wait for the route's prefetch and for the removal before r…
waleedlatif1 Nov 6, 2026
9f06a46
Merge remote-tracking branch 'origin/staging' into wip/platform-org-w…
waleedlatif1 Nov 6, 2026
2ac2dd2
Revert "fix(chats): stop reading a deleted chat while its view is sti…
waleedlatif1 Nov 6, 2026
edeede4
fix(chats): let an invalidated list read survive marking a chat read
waleedlatif1 Nov 6, 2026
5a1b023
test(org): open the conversation before deleting the open chat
waleedlatif1 Nov 6, 2026
ac54681
fix(chat): keep a steered message restored past the age limit truthful
waleedlatif1 Nov 6, 2026
d301af8
Merge remote-tracking branch 'origin/improvement/platform-core-chat' …
waleedlatif1 Nov 6, 2026
bdb2c45
test(org): wait for the retention list to show what the route answered
waleedlatif1 Nov 6, 2026
bc6b47b
Merge remote-tracking branch 'origin/staging' into wip/platform-org-w…
waleedlatif1 Nov 6, 2026
6aece2e
refactor(platform): give the zone and organization views one set of s…
waleedlatif1 Nov 6, 2026
1a2170f
improvement(org-home): lay calendar lanes out from tokens, not local …
waleedlatif1 Nov 6, 2026
f549271
improvement(org): replace raw geometry and per-view tokens with found…
waleedlatif1 Nov 6, 2026
ebf0470
refactor(platform): send every organization and zone toast through on…
waleedlatif1 Nov 6, 2026
c2e4ee4
improvement(org): pass named props instead of spreading them into JSX
waleedlatif1 Nov 6, 2026
575b80a
improvement(org): promote the parts more than one route uses
waleedlatif1 Nov 6, 2026
8c8b52a
improvement(org): give shared recipes an owner instead of importing p…
waleedlatif1 Nov 6, 2026
ba9ce77
refactor(platform): one data adapter each for seven settings and peop…
waleedlatif1 Nov 6, 2026
bfa04a1
feat(platform): summarize a search result into the Assistant conversa…
waleedlatif1 Nov 6, 2026
9894dc3
improvement(org): replace Tailwind and legacy classes on owned elemen…
waleedlatif1 Nov 6, 2026
2adc27c
feat(platform): seed search history, member inventory and sim links f…
waleedlatif1 Nov 6, 2026
643e684
feat(platform): give each zone route its own tab title
waleedlatif1 Nov 6, 2026
e44e957
refactor(platform): delete the re-export shims and point importers at…
waleedlatif1 Nov 6, 2026
3598ef1
fix(platform): bring the zone's calendar and integration models back …
waleedlatif1 Nov 6, 2026
a59fc4a
refactor(chat): move the organization conversation out of app/o
waleedlatif1 Nov 6, 2026
b17ff51
feat(platform): port the nav warmers for the sidebar's rows to use
waleedlatif1 Nov 6, 2026
bb64bff
fix(a11y): move focus to the next row after confirming a removal
waleedlatif1 Nov 6, 2026
e25a6af
feat(platform): refuse an oversized paste in the zone before anything…
waleedlatif1 Nov 6, 2026
38d83e3
chore(platform): regenerate the permission catalog after staging's ne…
waleedlatif1 Nov 6, 2026
25dffda
refactor(platform): give settings views real adapters for drains, SSO…
waleedlatif1 Nov 6, 2026
0741576
Merge remote-tracking branch 'origin/improvement/platform-core-chat' …
waleedlatif1 Nov 6, 2026
c47b88f
fix(org): hold the composer's place in Home's skeleton
waleedlatif1 Nov 6, 2026
ad3cb40
docs(platform): correct the parity ledger against what the zone ships
waleedlatif1 Nov 6, 2026
ca635e1
fix(platform): name the viewer from their profile when seeding search…
waleedlatif1 Nov 6, 2026
a0354b6
Merge branch 'wip/next-zone-hooks' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
55932f1
chore(platform): add a ratchet so the zone and organization views kee…
waleedlatif1 Nov 6, 2026
4b9d4a7
Merge remote-tracking branch 'origin/improvement/platform-core-chat' …
waleedlatif1 Nov 6, 2026
f3358df
Merge branch 'wip/next-converge' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
91588b9
fix(org): give a phone's directory table to the name, not an empty tr…
waleedlatif1 Nov 6, 2026
1651dda
test(org): screenshot a page only once its first reads have finished
waleedlatif1 Nov 6, 2026
5b2bbf5
test(org): grow full-page shots only for panes that follow the viewport
waleedlatif1 Nov 6, 2026
b1be92e
fix(org): stop the phone settings title painting its own strip in the…
waleedlatif1 Nov 6, 2026
146e4bf
fix(platform): keep a disclosure's wrapped label at the start of its …
waleedlatif1 Nov 6, 2026
5a01d0f
fix(org): line up every Add source row and give Generic Secrets its i…
waleedlatif1 Nov 6, 2026
fa850f4
fix(org): give each loading state the shape of what replaces it
waleedlatif1 Nov 6, 2026
a4df4a8
fix(org): stop clipping integration descriptions and long picker values
waleedlatif1 Nov 6, 2026
77803d7
fix(org): hold empty states, row dividers and edge actions to the pag…
waleedlatif1 Nov 6, 2026
79de765
fix(org): give a member's Generic Secrets page the header other integ…
waleedlatif1 Nov 6, 2026
9321804
fix(org): keep a recent search with a line break on one line
waleedlatif1 Nov 6, 2026
1fa797e
test(org): keep restored contexts optional in the composer fixture
waleedlatif1 Nov 6, 2026
f9d6310
fix(org): stop painting the phone title's surface, and leave the shar…
waleedlatif1 Nov 6, 2026
2bcaa96
Merge remote-tracking branch 'origin/improvement/platform-core-chat' …
waleedlatif1 Nov 6, 2026
b113ffe
test(desktop): import the feature flag provider from its home
waleedlatif1 Nov 6, 2026
7bee50b
fix(platform): keep organizations on the main app while the zone is u…
waleedlatif1 Nov 6, 2026
a983652
fix(org): say why Invite is off where a phone can read it
waleedlatif1 Nov 6, 2026
42f6b12
fix(org): open the usage heatmap on its newest weeks
waleedlatif1 Nov 6, 2026
1e33dea
fix(org): wrap a retention policy's summary instead of clipping it
waleedlatif1 Nov 6, 2026
e2af953
fix(org): run the calendar's now line behind meetings, not through th…
waleedlatif1 Nov 6, 2026
97f2a79
fix(platform): end a long read-only field value in an ellipsis
waleedlatif1 Nov 6, 2026
f185154
fix(org): stop Home's attention dividers with their text, as Workspac…
waleedlatif1 Nov 6, 2026
d5aea16
fix(org): give pick-a-row dialogs one way to close
waleedlatif1 Nov 6, 2026
398c998
fix(org): put Search and Assistant's landing on the 16px phone gutter
waleedlatif1 Nov 6, 2026
5c0af8c
fix(org): reserve a secret row's menu column only once a row has a menu
waleedlatif1 Nov 6, 2026
5d90473
fix(org): give Search MCP's copy field the card's field padding
waleedlatif1 Nov 6, 2026
748da9f
fix(org): stop a not-found page marking General as current, and space…
waleedlatif1 Nov 6, 2026
8665901
fix(org): pick Mothership's time range with the design system's date …
waleedlatif1 Nov 6, 2026
6d091cc
fix(org): drop the desktop toolbar's offset from a phone page's first…
waleedlatif1 Nov 6, 2026
649292a
fix(org): keep the current settings row in view on a short window
waleedlatif1 Nov 6, 2026
74401c4
test(org): report where each route's time goes
waleedlatif1 Nov 6, 2026
818fb5a
test(platform): prove per-organization rollout through the real AppCo…
waleedlatif1 Nov 6, 2026
14e5535
fix(platform): give a rolled-back organization a way off the zone
waleedlatif1 Nov 6, 2026
41653c3
Merge branch 'wip/next-visual-2' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
ab46186
fix(org): center access denied like the other route states
waleedlatif1 Nov 6, 2026
a0e67ca
test(platform): prove a self-hosted deployment boots with /o and no zone
waleedlatif1 Nov 6, 2026
b568160
test(platform): prove a misconfigured production zone refuses to start
waleedlatif1 Nov 6, 2026
4c7c3b7
fix(chat): stop spinning the outgoing retry timer on a stale delay
waleedlatif1 Nov 6, 2026
861eea1
fix(chat): send a message with a search scope as its own turn, never …
waleedlatif1 Nov 6, 2026
aa51b01
fix(chat): keep an answer's end-of-conversation behavior under traili…
waleedlatif1 Nov 6, 2026
1cc9aac
fix(organizations): stop the Home waiting probe reading every organiz…
waleedlatif1 Nov 6, 2026
49b06c7
fix(chat): carry every message of a new chat past its surface's unmount
waleedlatif1 Nov 6, 2026
0cdb5c9
fix(chat): keep the zone wait countdown running under a steered message
waleedlatif1 Nov 6, 2026
adcd914
test(platform): drop redundant env resets and type the zone boot envi…
waleedlatif1 Nov 6, 2026
53aeaec
chore(knip): declare the live suite's fixture servers as entry points
waleedlatif1 Nov 6, 2026
0085d2c
fix(chat): find a running turn's saved answer past its steering rows
waleedlatif1 Nov 6, 2026
2ac7622
Merge branch 'wip/next-rollout-tests' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
99addba
test(chat): rely on the shared config to restore mocks in the trailin…
waleedlatif1 Nov 6, 2026
092a6fc
test(chat): measure delivery passes without spying on the global timer
waleedlatif1 Nov 6, 2026
d48787f
Merge branch 'wip/next-steering-fixes' into wip/platform-org-wiring
waleedlatif1 Nov 6, 2026
3444b1b
test(platform): wait out the sign-in rate limit in the live suite
waleedlatif1 Nov 6, 2026
930478a
test(platform): read the rollout where the handoff reads it
waleedlatif1 Nov 6, 2026
e0dfcb2
fix(platform): exit when a production zone is misconfigured
waleedlatif1 Nov 6, 2026
6693cfc
fix(platform): move the zone's startup refusal behind the data seam
waleedlatif1 Nov 6, 2026
7ce11ea
fix(org): center access denied, since only a definite height lets the…
waleedlatif1 Nov 6, 2026
dcabc6c
fix(org): hide secondary admin and request columns on a phone, and fa…
waleedlatif1 Nov 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 7 additions & 5 deletions .agents/skills/add-settings-page/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
---
name: add-settings-page
description: Add a new Sim settings page, or audit existing settings pages for design-system compliance with the shared SettingsPanel layout. Use when creating a settings tab, or when asked to check/clean up settings pages so they match the design system (consistent title, header, search, spacing).
description: Add or audit settings pages that use SettingsPanel in the existing Sim app. Use implement-platform for isolated Platform settings.
---

# Settings Page (add / audit)

For `apps/sim/platform/**`, use [implement-platform](../implement-platform/SKILL.md). In a mixed request, apply the steps below only to the existing app's settings.

Settings page chrome (header bar, scroll region, content column, nav-driven
title + description) is owned by the `settings/[section]/layout.tsx` shell. Each
page renders through **`SettingsPanel`**, which registers the page's header data
Expand Down Expand Up @@ -45,28 +47,28 @@ For each page component, confirm the checklist in `.claude/rules/sim-settings-pa
Each grep lists candidates; review every match against the expected ones named below.

1. Find hand-rolled shells that should be `SettingsPanel`:
`git grep -n "flex h-full flex-col bg-\[var(--bg)\]" -- 'apps/sim/**/settings/**' 'apps/sim/ee/'`
`git grep -n "flex h-full flex-col bg-\[var(--bg)\]" -- 'apps/sim/**/settings/**' 'apps/sim/ee/' ':(exclude)apps/sim/platform/**'`
— expected matches: the workspace and organization `settings/layout.tsx` shells and the
shared header shell (`components/settings/settings-header.tsx`); an entitlement/loading gate
is also fine. `CredentialDetailLayout` (the `settings/secrets/[credentialId]` exception) is
an exempt hand-rolled shell outside these pathspecs. A detail sub-view is never a match: it
passes `back={{ text, icon: ArrowLeft, onSelect }}` to `SettingsPanel`. Anything else is a
violation: render it through `SettingsPanel`.
2. Find hand-rolled title blocks:
`git grep -n "text-\[var(--text-body)\] text-lg" -- 'apps/sim/**/settings/**' 'apps/sim/ee/'`
`git grep -n "text-\[var(--text-body)\] text-lg" -- 'apps/sim/**/settings/**' 'apps/sim/ee/' ':(exclude)apps/sim/platform/**'`
— the only title is the `<h1>` in `settings-header.tsx`; a non-heading value at that size
(e.g. the credit balance in `ee/organization-usage/components/usage-credits.tsx`) is fine.
3. Find literal pixel text sizes (should be 0 — see "Text Scale" in
`.claude/rules/sim-styling.md`):
`git grep -nE "text-\[1[0-8]px\]" -- 'apps/sim/**/settings/**' 'apps/sim/ee/'`.
`git grep -nE "text-\[1[0-8]px\]" -- 'apps/sim/**/settings/**' 'apps/sim/ee/' ':(exclude)apps/sim/platform/**'`.
Display type above the scale (`text-[40px]` hero headings) is deliberate and out of
scope.
4. Confirm each page imports `SettingsPanel` and that its registry entry has an
accurate `description` of consistent length with its peers.
- Editable pages: confirm Save/Discard go through `saveDiscardActions()` and
dirty is wired via `useSettingsUnsavedGuard` (called before early-return
gates) — flag any hand-rolled Save button, `beforeunload`, or unsaved modal.
`git grep -n "beforeunload" -- 'apps/sim/**/settings/**' 'apps/sim/ee/' 'apps/sim/components/settings/' ':(exclude,glob)**/*.test.*'`
`git grep -n "beforeunload" -- 'apps/sim/**/settings/**' 'apps/sim/ee/' 'apps/sim/components/settings/' ':(exclude)apps/sim/platform/**' 'apps/sim/hooks/use-settings-browser-navigation.ts' ':(exclude,glob)**/*.test.*'`
should only hit the centralized `use-settings-browser-navigation.ts`.
5. Fix each finding with the smallest structural change that satisfies the checklist;
do not touch handlers, state, queries, or gate returns. A pixel-size fix swaps
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/cleanup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Run these in parallel on the parsed `scope`:
3. `/you-might-not-need-a-callback <scope> fix=false`
4. `/you-might-not-need-state <scope> fix=false`
5. `/react-query-best-practices <scope> fix=false`
6. `/emcn-design-review <scope> fix=false`
6. Design review: route `apps/sim/platform/**` to [implement-platform](../implement-platform/SKILL.md) and existing app EMCN paths to [emcn-design-review](../emcn-design-review/SKILL.md). For a mixed diff, the same pass reviews each subset with its own contract. Both reviews are read-only and return proposals for Step 2.
7. `/you-might-not-need-url-state <scope> fix=false`
8. `/you-might-not-need-a-comment <scope> fix=false`
9. `/test-audit audit <test paths>` — read-only; only when the scope adds or changes test files (`*.test.ts(x)`, `*.integration.ts`, `**/e2e/**`, `apps/sim/scripts/test-*-e2e.ts`). First resolve a free-form scope to the concrete list of added or changed test paths (`git diff --name-only` against the scope's base) and pass those paths. It applies the authoring gate to every new or changed test and proposes deleting the ones that fail it.
Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/emcn-design-review/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: emcn-design-review
description: Review UI code for alignment with the emcn design system — components, tokens, patterns, and conventions
description: Review the existing Sim app against packages/emcn. Route isolated Platform UI in apps/sim/platform to implement-platform.
argument-hint: "[scope] [fix=true|false]"
---

Expand All @@ -14,7 +14,7 @@ User arguments: $ARGUMENTS

## Context

This codebase uses **emcn**, a custom component library built on Radix UI primitives with CVA variants and CSS variable design tokens. All UI must use emcn components and tokens.
The existing Sim app uses `packages/emcn`, its Radix primitives, CVA variants, and CSS tokens. For `apps/sim/platform/**`, use [implement-platform](../implement-platform/SKILL.md). For mixed scopes, review each file under its owning system and preserve the requested `fix` mode for both.

## Steps

Expand Down
17 changes: 17 additions & 0 deletions .agents/skills/implement-platform/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: implement-platform
description: Build, change, consolidate, remove, or review Sim Platform UI in apps/sim/platform. Use for code-first product routes, EMCN components, Paper handoff and design drift in the isolated Next app.
---

# Implement Sim Platform

Start in the Sim checkout containing the requested product work. Read the [Platform contract](../../../apps/sim/platform/AGENTS.md) and [component ownership map](../../../apps/sim/platform/docs/component-ownership.md). These versioned files carry the current rules into a fresh chat. Use the [Platform README](../../../apps/sim/platform/README.md) for the local routes, fixture states, generators, and verification commands.

1. **Establish scope on the real route.** Identify the product entry, interaction, phase, and affected consumers. When rebuilding an existing workflow, trace the old navigation target, its access gate, and the actions reachable by that viewer. Use that evidence to decide which controls belong on the new page before consulting the broader API or provider catalog. Phase 1 owns foundations and the library. Phase 2 owns working UI and transient interaction state, with examples supplied through the server fixture flag. Phase 3 connects real data and operations. Reuse the same renderer in the browser and Sim Desktop. Read the installed Next guides for the file structure or framework behavior you are changing.
For organization Settings, inventory the old sidebar in order, its viewer/deployment gates and every action reachable from each section. Map old header buttons to the row or section they act on. Verify the same destination and drilldown on the fixture and authenticated routes; keep real writes outside fixture sessions.
2. **Resolve design intent.** For Paper-backed work, use `$sim-paper-design` to locate the live Shared or Platform master and the product states that use it. Exclude Marcus. Preserve the key and theme roles. Treat artboard sizes as reference measurements. For code-first changes, follow the latest explicit product direction and inspect the rendered route. Identify any source you could not verify. Update the Paper canvas when the request includes Paper changes.
3. **Choose or change the owner.** Start with the behavior. An action, navigation row, value picker, or disclosure has an existing keyboard and pointer contract. Different interactions may share visual roles while retaining different semantics. Use the existing family and named props for a change in size, intent, icon, or content. Put unique anatomy and its CSS beside the route component. Keep page files free of styling. Only EMCN owns the appearance of its controls. Use Base UI there for complex keyboard, floating, and dismissal behavior.
4. **Trace the full change.** On a second independent feature use, promote the original implementation and migrate both callers. For consolidation, compare semantics, map every consumer to its replacement, then remove the obsolete implementation, export, variant styles, and unused registrations. For deletion, also check menus, preferences, fixture data, workbench references, and tests that existed only for the removed feature. Preserve unrelated consumers and historical Paper evidence. A new variant needs a reachable product use. Edit the source or compiler for generated foundations and recipes.
5. **Verify where people use it.** Run the design audit and applicable checks from the README. Render the changed product route with empty, full, stress, and fixture-off data as relevant. Check both themes, widths between artboards, long content, text scaling, keyboard, and pointer states. Compare shared controls in their actual consumers. Check the actual scroll edge and the open popup when space is tight. For shell, panel, or desktop work, exercise the real Electron renderer. For substantial implementations and consolidations, use an independent agent during design or implementation and for a final review of the changed owners and routes. Provide the working localhost route for visual review.
6. **Keep non-UI code in one place.** When work touches both the zone and `apps/sim/platform/embedded`, converge first rather than porting: only markup may differ. Follow "Converging a domain" in `apps/sim/platform/AGENTS.md`; `bun run check:platform-convergence` fails a new parallel file.
7. **Keep decisions durable.** Follow the contract’s maintenance guidance when an approved correction changes a shared rule. Record feature-specific decisions with their feature. For sustained work, keep a task checkpoint with the code revision, verified states, evidence, and outstanding work. Include the branch or PR, checkpoint path, and localhost route in a handoff. On resumption, compare the checkpoint with the current branch, working tree, and relevant live sources before acting.
4 changes: 4 additions & 0 deletions .agents/skills/implement-platform/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Implement Sim Platform"
short_description: "Build and review the code-first Sim Platform"
default_prompt: "Use $implement-platform to implement the next Platform product change in Sim."
2 changes: 2 additions & 0 deletions .claude/rules/emcn-components.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ paths:

# EMCN Components

This guide applies to the existing app. For `apps/sim/platform/**`, use `apps/sim/platform/AGENTS.md`.

Import components, `cn`, and tokens from the `@sim/emcn` barrel; icons come from the `@sim/emcn/icons` subpath, and CSS modules from their file path. Never deep-import other component subpaths. The **chip family** is the platform's primary chrome — always reach for it over the legacy primitives it is progressively replacing (`Input`→`ChipInput`, `Textarea`→`ChipTextarea`, `Modal`→`ChipModal`, `Select`/`Combobox`→`ChipSelect`/`ChipCombobox`/`ChipDropdown`, date field→`ChipDatePicker`). `ChipSwitch` is a segmented choice between options, not a replacement for `Switch`: a boolean on/off toggle stays `Switch`. For context/action menus the canonical control is `DropdownMenu` — the standard menu (not a chip, and never a hand-rolled popover).

## Chip chrome — single source of truth
Expand Down
7 changes: 7 additions & 0 deletions .claude/rules/platform-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
description: Sim Platform implementation from Paper
paths:
- "apps/sim/platform/**"
---

Use the canonical contract in `apps/sim/platform/AGENTS.md` and the `implement-platform` skill. Legacy EMCN and app styling rules do not govern this separate project.
2 changes: 2 additions & 0 deletions .claude/rules/sim-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ paths:

# Sim App Architecture

This guide applies to the existing app. For `apps/sim/platform/**`, use `apps/sim/platform/AGENTS.md`.

Repository layout, package boundaries, the application operation boundary, naming, and utils placement are in the root `CLAUDE.md`. This file holds the app-internal boundaries.

## The `'use client'` server boundary
Expand Down
72 changes: 72 additions & 0 deletions .claude/rules/sim-platform-views.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
description: One pattern per job across the organization views (Settings, People, Integrations, Links, Home)
paths:
- "apps/sim/platform/embedded/app/(shell)/{settings,people,integrations,links,home}/**"
- "apps/sim/platform/embedded/lib/**"
- "apps/sim/platform/shared/**"
- "apps/sim/platform/design-system/components/{status,modal,picker,settings-section,search-field,activity-row}/**"
- "apps/sim/app/o/*/**"
- "apps/sim/app/o/*/settings/**"
---

# Organization Views

The organization views live in `apps/sim/platform/embedded/app/(shell)/` and take everything shared from
`@/platform/design-system/components`. Each job below has one pattern. A view that differs needs a
reason written where it differs; "it was already like that" is not one.

| Job | Use | Never |
| --- | --- | --- |
| First read of a view | `QueryBoundary` (`query`, `failure`, `loadingLabel`, optional `empty`, `loading`), which renders `LoadingRows`, then `FailureNotice`, then `empty`, then `children(data)` | Inline `isPending ? … : error ? …`, a raw `<p>Loading…</p>`, a loading `InlineNotice` |
| Loading | `LoadingRows` by default. A placeholder shaped like its content (`WidgetSkeleton`, usage charts) only where rows would misrepresent it | A second generic skeleton |
| Failed read | `FailureNotice`, labelled Retry. `intent='warning'` where the read partly answered | A hand-built retry button or `InlineNotice` + `Button` |
| Failed background refresh | `FailureNotice` outside the boundary, over the content it keeps | Replacing content already on screen |
| Empty | `EmptyState`, with no create button when the page already has one. A picker's no-match line inside a dialog stays `Muted`, since a block would take over the dialog | `Muted` or a raw `<p>` anywhere else |
| Confirm | `ConfirmDialog` (`target`, `title`, `confirmLabel`, `pendingLabel`, `onConfirm`, `safe` when nothing is lost). Removing a person, revoking an invite and any destructive row action always ask first | `Modal variant='confirm'`, `window.confirm`, an unconfirmed destructive action |
| Save | `SaveActions`, end-aligned in the page flow under the fields it commits: Discard while dirty, then Save. Save is visible and disabled while clean | Save in a header, Save before Discard, a Cancel beside Discard |
| Editing a server value | `useServerDraft`. Adopts a newer value while clean; while dirty it keeps the edits and sets `conflict`. Show `DraftConflictNotice`, and block Save until the viewer chooses | Seeding `useState` from a query once |
| Autosave vs Save | One or the other per page. A page with `SaveActions` holds every field in one draft and writes it in one request. List actions with their own dialog, such as adding or removing a member, are not field edits | A page mixing both |
| Create | A primary compact button in `SectionToolbar`, or in the page header on a page with one | Create in both the toolbar and the empty state |
| Search over a section's rows | `SectionSearch subject='members'` | `SearchField` with its own copy, unless the search covers more than the subject's name |
| Row | `ActivityRow` for a row that opens something, `SettingsRow` for a row holding a control | A hand-built row |
| List of rows | `RowList` (`dividers` for a list read as one block). `ActivityRow density='comfortable'` in settings | `calc(-1 * var(--ui-row-inset))` around a list; styling a row's height from outside |
| Row actions | `ActionMenu` with icon `I108`, destructive item last with a separator | The same action in the row and its menu |
| Section heading | `SettingsSection title` (h2), `DetailHeader` for a sub-view's way back | A hand-written heading |
| Toolbar | `SectionToolbar grow={<SectionSearch />}` with its actions as children | A hand-built flex row |

## Failure feedback

- Form validation is inline, on the field (`error`), once a save has been attempted.
- A dialog's own action failing stays in the dialog: `Modal` shows a rejected `onConfirm`'s message and keeps the draft.
- Any other action failing is a toast. Nothing fails silently.

## Page gates

Every page under `app/o/[organizationId]` calls
`requireOrganizationViewer(organizationId, callbackUrl)` from `@/app/o/[organizationId]/viewer`. It
redirects a signed-out viewer to sign-in and back, 404s a viewer with no access, and returns
`{ userId, principal, surface }`. Never write `{ kind: 'session', ... }` in a page.

## Dialogs

`Modal` holds itself open while `onConfirm`'s promise or its `pending` prop runs. Escape, the backdrop
and Close do nothing until it settles, including when the browser closes the `<dialog>` itself: once
user activation is spent, `cancel` cannot be prevented, so `OverlayDialog` reopens from `close`.

## Files

- A section with more than one job splits by job: `group-detail.tsx` is the shell, `group-general-tab.tsx`
and `group-catalog-tabs.tsx` its bodies, `use-group-draft.ts` its write.
- Merge logic worth a test is a pure module next to the view, such as `secrets-draft.ts`.
- `(shell)/_components/section-parts/` holds what settings and the secrets page share: `SectionStack`, `FieldStack`, `SectionToolbar`,
`DetailHeader`, `HeadingRow`, `Muted`, `SectionSkeleton`, `DraftConflictNotice`. `useServerDraft` is in `_components/`, since Integrations uses it too.

## Non-UI code lives once

A view's data and logic belong in `apps/sim/platform/embedded/lib/data` when only these views use them, and in `apps/sim/platform/shared` when the zone has the same thing. A view reads hooks through that layer; a real adapter owns the mutation, its toasts and any mapping, and is never a re-export. Before adding a file to `embedded/`, look for its counterpart under `apps/sim/platform/lib` and follow "Converging a domain" in `apps/sim/platform/AGENTS.md`. `check:platform-convergence` fails a new file here or a new path both trees hold.

## Legacy workspace settings

`apps/sim/app/workspace/*/settings/**` keeps `SettingsPanel` from `@/components/settings/settings-panel`,
which owns chrome through `settings/[section]/layout.tsx`. The `add-settings-page` skill describes it.
New organization work never imports it.
3 changes: 1 addition & 2 deletions .claude/rules/sim-settings-pages.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
description: Settings page layout and SettingsPanel design-system compliance
paths:
- "apps/sim/app/workspace/*/settings/**"
- "apps/sim/app/o/*/settings/**"
- "apps/sim/app/workspace/*/{integrations,skills,upgrade}/**"
- "apps/sim/app/workspace/*/components/{resource-tile,credential-detail}/**"
- "apps/sim/components/{settings,permissions}/**"
Expand Down Expand Up @@ -344,7 +343,7 @@ rendered through `<SettingsActionChips actions={…} />` from
is what keeps tone/icon/variant/tooltip handling from drifting between the two
shells. Reach for it before hand-rolling a `Chip`.
- **`useSettingsUnsavedGuard({ isDirty, navigationBlocked, onDiscard })`** from
`@/components/settings/use-settings-unsaved-guard` registers one editor with the
`@/hooks/use-settings-unsaved-guard` registers one editor with the
shared settings store. Register every full-page draft, including inline creation
forms. Dirty computation stays local and derived; fetched defaults stay clean.
- **`onDiscard` resets the registered draft.** The root `SettingsNavigationGuard`
Expand Down
2 changes: 2 additions & 0 deletions .claude/rules/sim-styling.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ paths:

# Styling Rules

This guide applies to the existing app. For `apps/sim/platform/**`, use `apps/sim/platform/AGENTS.md`.

## Tailwind

1. **No inline styles** - Use Tailwind classes. Exception: a genuinely dynamic
Expand Down
Loading
Loading