Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
331 commits
Select commit Hold shift + click to select a range
a8e6615
fix(sync): report available native routes
alichherawalla Jul 28, 2026
a6a3d1f
fix(sync): use factual route capabilities
alichherawalla Jul 28, 2026
9173268
fix(sync): report screenshot source availability
alichherawalla Jul 28, 2026
b51b42b
test(sync): verify shared control center journeys
alichherawalla Jul 28, 2026
464f7c8
fix(sync): keep discovery callbacks alive
alichherawalla Jul 28, 2026
3c2b639
test(sync): exercise real knowledge document journey
alichherawalla Jul 28, 2026
932438a
test(sync): observe real clipboard outcomes
alichherawalla Jul 28, 2026
199333a
test(sync): use real licensed device journey
alichherawalla Jul 28, 2026
e7b61f6
test(sync): require real navigation
alichherawalla Jul 28, 2026
791ad64
test(sync): keep acceptance at integration boundary
alichherawalla Jul 28, 2026
0b093b3
fix(sync): keep mesh counts consistent
alichherawalla Jul 28, 2026
f601472
fix(sync): use Unix clipboard timestamps
alichherawalla Jul 28, 2026
b070ca5
feat(sync): consume shared pairing lifecycle
alichherawalla Jul 28, 2026
4dfbabc
test(sync): assert one pairing cancel action
alichherawalla Jul 28, 2026
85e6164
feat(sync): consume bilateral mesh revocation
alichherawalla Jul 28, 2026
62708c8
docs(sync): record bilateral mesh eviction
alichherawalla Jul 28, 2026
9882250
test(sync): preserve clipboard origin through native echoes
alichherawalla Jul 28, 2026
dc9cee8
docs(sync): record shared clipboard ownership
alichherawalla Jul 28, 2026
212bf2d
test(sync): align journeys with shared lifecycle
alichherawalla Jul 28, 2026
7b129fe
docs(sync): record app-ready regression gate
alichherawalla Jul 28, 2026
3d587c1
fix(sync): refresh nearby discovery deterministically
alichherawalla Jul 29, 2026
2d8d8a8
feat(sync): surface shared runtime projections
alichherawalla Jul 29, 2026
ab40a4b
feat(sync): consume shared pairing and repair contracts
alichherawalla Jul 29, 2026
f9a02d2
fix(sync): format pairing code entry
alichherawalla Jul 29, 2026
4083d0a
fix(sync): retain nearby session callbacks safely
alichherawalla Jul 29, 2026
d255847
feat(sync): surface sharing approvals from home
alichherawalla Jul 29, 2026
c42f4b4
fix(sync): show connected transport route
alichherawalla Jul 29, 2026
3d4299f
feat(sync): surface file completion notifications
alichherawalla Jul 29, 2026
23a0167
feat(sync): expose explicit file sharing
alichherawalla Jul 29, 2026
aa7282d
feat(sync): simplify mobile files and activity
alichherawalla Jul 29, 2026
b21d2cd
refactor(sync): compact mobile sync surfaces
alichherawalla Jul 29, 2026
706c417
fix(sync): refine mobile sync controls
alichherawalla Jul 29, 2026
3991d21
feat(sync): add portable directory access
alichherawalla Jul 29, 2026
7980c52
feat(sync): enable ambient downloads
alichherawalla Jul 29, 2026
a9fbbb6
fix(sync): resolve iOS directory bookmarks
alichherawalla Jul 29, 2026
56164c4
feat(sync): expose clipboard search
alichherawalla Jul 29, 2026
fa612eb
fix(sync): retain offline clipboard delivery
alichherawalla Jul 29, 2026
9139c6f
feat(sync): prepare mobile entitlement boundaries
alichherawalla Jul 29, 2026
b57c99d
chore(sync): advance mobile Pro registry adapter
alichherawalla Jul 29, 2026
1d9dd73
feat(sync): bridge restricted pairing entitlement
alichherawalla Jul 29, 2026
50b9acb
feat(sync): expose restricted entitlement bootstrap
alichherawalla Jul 29, 2026
f355ca4
feat(onboarding): introduce Pro Sync
alichherawalla Jul 29, 2026
635aed8
fix(ios): resolve shared pairing crypto modules
alichherawalla Jul 29, 2026
4d878d2
fix(sync): gate clipboard observation by entitlement
alichherawalla Jul 29, 2026
5e2eb1b
fix(sync): gate user entry behind Pro
alichherawalla Jul 29, 2026
e48286d
fix(sync): gate notification entry behind Pro
alichherawalla Jul 29, 2026
e20e058
fix(pro): normalize pasted license keys
alichherawalla Jul 29, 2026
d981143
fix(pro): log sanitized license validation
alichherawalla Jul 29, 2026
70123de
refactor(license): render shared activation outcomes
alichherawalla Jul 29, 2026
448cb6a
fix(license): revalidate entitlement lifecycle
alichherawalla Jul 30, 2026
42e82d0
refactor(sync): use authoritative device registry
alichherawalla Jul 30, 2026
993c07e
fix(sync): register the mobile installation
alichherawalla Jul 30, 2026
9a45945
fix(sync): require credential authority
alichherawalla Jul 30, 2026
af07931
chore(sync): advance Pro installation binding
alichherawalla Jul 30, 2026
5d29031
fix(sync): use licensed installation identity
alichherawalla Jul 30, 2026
14183b1
chore(sync): trace clipboard delivery sources
alichherawalla Jul 30, 2026
2544721
fix(sync): stop public core minting a second device identity
alichherawalla Jul 30, 2026
931bc51
feat(sync): keep the mesh reachable in the background on both platforms
alichherawalla Jul 30, 2026
835b4e9
docs(sync): Personal Mesh test matrix across macOS, iOS and Android
alichherawalla Jul 30, 2026
3745bb6
docs(sync): correct the Personal Mesh gap list
alichherawalla Jul 30, 2026
db86c79
docs(sync): close PM5 - key revocation is out of scope
alichherawalla Jul 30, 2026
d043df0
chore(sync): bump pro for the pairing-code sheet
alichherawalla Jul 30, 2026
ff8e7c4
docs(sync): log the missing receive-side consent policy
alichherawalla Jul 30, 2026
2e5eda7
docs(sync): close PM9 - same-owner devices auto-accept
alichherawalla Jul 30, 2026
8fed5c8
feat(sync): emit streaming updates so Pro can mirror a reply live
alichherawalla Jul 30, 2026
7b9165d
docs(sync): log two Android ambient-sharing gaps found on device
alichherawalla Jul 30, 2026
95ef04f
feat(sync): show a reply as it generates on another device
alichherawalla Jul 30, 2026
15c6254
fix(chats): order Home's recent chats by last activity
alichherawalla Jul 30, 2026
c9eb7f0
chore(sync): bump pro for chat-stream diagnostics
alichherawalla Jul 30, 2026
da7e69e
chore(chat): log whether core emits a streaming update
alichherawalla Jul 30, 2026
29d228e
chore(sync): bump pro for state-sync readiness log
alichherawalla Jul 30, 2026
6871a93
refactor(chat): let pro observe streaming state instead of emitting it
alichherawalla Jul 30, 2026
e381b13
docs: hand off the Personal Mesh sync session
alichherawalla Jul 31, 2026
4c487d5
feat(ui): add a shared Accordion and collapse the sharing sections in…
alichherawalla Jul 31, 2026
a98a976
fix(pro): fill the Pro screen once you have paid, and drop the icon t…
alichherawalla Jul 31, 2026
2d1ffeb
refactor(chat): render peer previews from the shared projection
alichherawalla Jul 31, 2026
7710991
fix(ui): keep the model-loading bar moving while the model loads
alichherawalla Jul 31, 2026
72e6488
fix(chat): a reload-model tap that fails now says so
alichherawalla Jul 31, 2026
20442fd
fix(chat): do not offer a model reload when no model is selected
alichherawalla Jul 31, 2026
5157aa5
feat(models): one resolver for which text model is selected
alichherawalla Jul 31, 2026
53b2348
refactor(chat): read the active text model from one hook, not a priva…
alichherawalla Jul 31, 2026
6790a16
fix(models): the picker's spinner follows the service, not the tap
alichherawalla Jul 31, 2026
09382f0
fix(models): one owner for which text model to load
alichherawalla Jul 31, 2026
2ad00f9
refactor(chats): take the list preview line from shared
alichherawalla Jul 31, 2026
42c083c
docs: record what landed today and what is left
alichherawalla Jul 31, 2026
18c1238
feat(sync): Android screenshot capture and MediaStore downloads
alichherawalla Jul 31, 2026
487499f
chore: point at today's pro sync work
alichherawalla Jul 31, 2026
8d34f57
test(chat): teach the ChatScreen stub the model-selection seam
alichherawalla Jul 31, 2026
40ec0a5
test(models): one place defines the model-selection stub
alichherawalla Jul 31, 2026
64ea5d7
chore: merge pro main (CI core-ref fix, TTS load-anyway, voice attach…
alichherawalla Jul 31, 2026
b48ef72
refactor(chat): move the tool-call surfaces out of ChatMessage
alichherawalla Jul 31, 2026
0c69e3d
refactor(settings): bring SettingsScreen inside the caps
alichherawalla Jul 31, 2026
ab891ef
feat(ui): one screen header, matching Settings and Model Settings
alichherawalla Jul 31, 2026
cd26d0f
feat(sync): send and restore the tools a turn was offered
alichherawalla Jul 31, 2026
978c038
feat(projects): paste text straight into a knowledge base
alichherawalla Jul 31, 2026
d226ff1
fix(sync): Android does not offer a LAN route it cannot dial
alichherawalla Jul 31, 2026
024aa56
docs: hand off the mesh session with what is verified and what is not
alichherawalla Jul 31, 2026
6f7111b
docs: Android to macOS over LAN is verified on device
alichherawalla Jul 31, 2026
b5ca2d8
downloads: share what is actually in the folder, and fix the Pro lice…
alichherawalla Jul 31, 2026
1586c0a
screenshots: read every new row, not just the newest one
alichherawalla Jul 31, 2026
4248d93
knowledge base: call it Text
alichherawalla Jul 31, 2026
c9ff4dd
tests: the Downloads card and the model a phone can send
alichherawalla Jul 31, 2026
f588f19
chore: bump pro to the model transfer, home card and screenshot work
alichherawalla Jul 31, 2026
7d2359c
sync: native file hashing and a notification coalescer
alichherawalla Jul 31, 2026
d1425f8
tests: follow the pairing flow and the pro gate as they are now
alichherawalla Aug 1, 2026
305dbfa
tests: point the moved licensing tests at pro, and fix a stub that ar…
alichherawalla Aug 1, 2026
298ce82
docs: a line-by-line sync test sheet for this build
alichherawalla Aug 2, 2026
6a6c4b3
docs: quote the sync checklist row whose expected result contains a c…
alichherawalla Aug 2, 2026
36eb7c2
chat: local wall-clock times, and tool results above the answer
alichherawalla Aug 2, 2026
40060f6
chore: bump pro to the model transfer job owner
alichherawalla Aug 3, 2026
4e25e04
tests: the transfer sheet needs a navigation container now that it li…
alichherawalla Aug 3, 2026
68ad9be
sync: the phones move a payload natively, sealed frame by frame
alichherawalla Aug 3, 2026
ca127d3
sync: the phones can stop a payload they are still sending
alichherawalla Aug 3, 2026
1c65b55
test: two devices can pair in the harness, so a transfer can be teste…
alichherawalla Aug 3, 2026
8682c54
chore: lint the physical-sync scripts, drop a flag nothing read, and …
alichherawalla Aug 3, 2026
fc9287e
sync: both phones resume a payload instead of starting it again
alichherawalla Aug 3, 2026
3ac770b
chat: messages read in the order they were written
alichherawalla Aug 3, 2026
4215191
test(sync): follow the mesh for licence capacity, and record that For…
alichherawalla Aug 4, 2026
178091a
test(sync): licence capacity follows the mesh, and freeing a seat is …
alichherawalla Aug 4, 2026
69caf26
test(sync): the status line is one word, and a peer is announced only…
alichherawalla Aug 4, 2026
eb09cd5
test(sync): an advertised peer announces a LAN address, because loopb…
alichherawalla Aug 4, 2026
64c2639
test(sync): one place sets up a licensed phone, and a paired peer hol…
alichherawalla Aug 4, 2026
5bec84b
test(sync): the model transfer journey runs end to end again
alichherawalla Aug 4, 2026
64994a3
test(sync): the saved-device journeys run again, and a pairing that l…
alichherawalla Aug 4, 2026
416e906
test(sync): a paired peer holds an installation, and the pairing that…
alichherawalla Aug 4, 2026
8789715
test(sync): a device joining a licence registers itself, and the stat…
alichherawalla Aug 4, 2026
e45faf6
test(sync): the ambient sharing journey follows the approval to Notif…
alichherawalla Aug 4, 2026
905b130
test(sync): the clipboard journeys run again, and the phone registers…
alichherawalla Aug 4, 2026
0ec3ea0
test(sync): two of the three persistence journeys run again
alichherawalla Aug 4, 2026
e129744
test(sync): the knowledge-document journey pairs without an accept step
alichherawalla Aug 4, 2026
264d0b2
test(sync): the RN transport pairing test uses a real code and a real…
alichherawalla Aug 4, 2026
ac89aa0
test(sync): cover the two branches today's eviction fix added
alichherawalla Aug 4, 2026
0ed23fa
test(pro): the Pro detail suite runs again, and says why four of it s…
alichherawalla Aug 4, 2026
e77ccb8
docs: the eviction ordering is the normal flow, not a rare race
alichherawalla Aug 4, 2026
bb71bb5
test(sync): the eviction transaction is covered to the line
alichherawalla Aug 4, 2026
b28d664
test(sync): cover the eviction's local half to the line, and say why …
alichherawalla Aug 4, 2026
de72124
test(sync): cover the identity migration and the repair decision
alichherawalla Aug 4, 2026
282f98a
test(sync): cover the remembered roster, the file the user picked, an…
alichherawalla Aug 4, 2026
70e82d9
test(sync): cover making a transferred file appear where the user exp…
alichherawalla Aug 4, 2026
8f6636d
test(sync): two phones talking with no network between them
alichherawalla Aug 4, 2026
ae8b76c
test(sync): the two roads to a checksum must meet, and what the phone…
alichherawalla Aug 4, 2026
6fd437d
test(sync): the fast path a large file takes, end to end
alichherawalla Aug 4, 2026
61d8062
test(sync): sharing a folder on the platform that will not let you sh…
alichherawalla Aug 4, 2026
0501d16
test(knowledge): pasting a page you copied straight into a knowledge …
alichherawalla Aug 4, 2026
ee3b460
test(sync): what this device calls itself, and what it must not decide
alichherawalla Aug 4, 2026
3d2e74b
test(sync): type the remote-stream fixture against the shared preview
alichherawalla Aug 4, 2026
4432686
test(sync): check the stream fixture against the shared type at its s…
alichherawalla Aug 4, 2026
c38be4d
test(sync): a screenshot reaching your other devices as you take it
alichherawalla Aug 4, 2026
927d7ff
test(sync): a saved device seen but not dialable has to say so
alichherawalla Aug 4, 2026
b7d7f45
test(pro): entering a licence key is a transaction, and it has to be …
alichherawalla Aug 4, 2026
2f13841
test(harness): let a test free a seat the way another device does
alichherawalla Aug 4, 2026
105330f
test(sync): what this phone accepts, and its record of what arrived
alichherawalla Aug 4, 2026
7985f78
test(sync): the ambient rules, the queue, and the answers already given
alichherawalla Aug 4, 2026
bdae098
test(sync): a file arriving on the phone lands only once it is whole
alichherawalla Aug 4, 2026
223df25
test(sync): the list that says a file actually arrived
alichherawalla Aug 4, 2026
1994f50
test(sync): the licence's record of the mesh, from the phone
alichherawalla Aug 4, 2026
4ad07cf
test(licensing): the licence this phone holds, and what happens to it…
alichherawalla Aug 4, 2026
62ee53d
test(sync): the record of transfers that finished, and the format it …
alichherawalla Aug 4, 2026
4597a43
test(sync): the devices this phone trusts, and the secrets that prove it
alichherawalla Aug 4, 2026
43e1cdd
test(sync): read every trust document this app has ever written
alichherawalla Aug 4, 2026
46f449f
test(sync): a model arriving on this device, over and over
alichherawalla Aug 4, 2026
0747b7d
test(sync): two devices agreeing about the licence they share
alichherawalla Aug 4, 2026
04e192d
test(sync): standing consent to share a file, and every way to withdr…
alichherawalla Aug 4, 2026
909d612
test(sync): the edges of the sharing record it keeps
alichherawalla Aug 4, 2026
221a9e4
test(sync): await the refusal, so a lint warning is not a hole
alichherawalla Aug 4, 2026
9529bb0
test(sync): which of this phone's files exist to be shared at all
alichherawalla Aug 4, 2026
129a284
test: fix ten failing tests that were asserting things the code never…
alichherawalla Aug 4, 2026
53065f9
test: five more failures that were the tests, not the app
alichherawalla Aug 4, 2026
6028cf2
test: three date assertions built with the formatter the app dropped
alichherawalla Aug 4, 2026
a4da5d5
test(rag): run the knowledge-base round-trip on real SQLite
alichherawalla Aug 4, 2026
6775eff
test: three failures where the code moved and the tests did not
alichherawalla Aug 4, 2026
1b5dd3a
test(licensing): make the seat-replacement test reach Keygen at all
alichherawalla Aug 5, 2026
d945db8
test(sync): hold the offline-eviction journey open with its cause on …
alichherawalla Aug 5, 2026
3724841
test(sync-ui): cover the receiving scope, where one switch means two …
alichherawalla Aug 5, 2026
93922a4
test: drop two unused declarations the lint gate rejected
alichherawalla Aug 5, 2026
5158194
test: drop the now-unused Keychain import
alichherawalla Aug 5, 2026
14107f7
chore(arch): stop the orphan gate flagging a util that only pro imports
alichherawalla Aug 5, 2026
5227ec6
test(sync-ui): cover every way an explicit file share can end
alichherawalla Aug 5, 2026
5f0ff1e
test: type the pro-absent guard with jest's own callback type
alichherawalla Aug 5, 2026
3dc7ef1
chore(dead-code): retire eleven exports nothing consumed
alichherawalla Aug 5, 2026
ab27207
chore: drop imports the removed pass-through was the only user of
alichherawalla Aug 5, 2026
e939822
fix(android): backport java.time so API 24 does not crash
alichherawalla Aug 5, 2026
62c6c30
test(android): pass the resume offset the blob channel now takes
alichherawalla Aug 5, 2026
2382ae7
ci: check out the shared monorepo so @offgrid/sync resolves
alichherawalla Aug 5, 2026
dbe6076
test: make a dead button impossible on the Activity list
alichherawalla Aug 5, 2026
bca6097
test: make a pro suite that cannot load its module fail instead of pa…
alichherawalla Aug 5, 2026
2e7fbac
test: cover the preview under a shared file
alichherawalla Aug 5, 2026
140f56b
ci: one job instead of four, and fix the shared provisioning that bro…
alichherawalla Aug 5, 2026
9d4b51c
chore: drop the Provit dependency, keeping the device-driving capabil…
alichherawalla Aug 5, 2026
0f31d2a
ci: keep the shared install fallback, at the root where it can help
alichherawalla Aug 5, 2026
a1c9531
test(e2e): a device harness on WDA and adb, validated on both phones
alichherawalla Aug 5, 2026
954051d
test(e2e): target testIDs on both platforms, and stop hiding them
alichherawalla Aug 5, 2026
6b67328
test(e2e): a two-device layer, and the mesh journey it exists for
alichherawalla Aug 5, 2026
1fe4bad
chore: tell knip about the e2e harness's real dependencies
alichherawalla Aug 5, 2026
d86ef28
chore: point at the pushed mobile-pro commits, and the iOS device scr…
alichherawalla Aug 5, 2026
ec266a5
test: address the review, including a real hole in the dead-button sweep
alichherawalla Aug 5, 2026
56364c7
fix(sync): seek absolutely when resuming an upload, instead of skipping
alichherawalla Aug 5, 2026
9851f8e
test: delete my mockist explicit-file-share suite, and record what it…
alichherawalla Aug 5, 2026
db81005
test: drive the stores through their own actions, and write down the …
alichherawalla Aug 5, 2026
e1277f5
test(sync): explicit file share against the real service, no mocks of…
alichherawalla Aug 5, 2026
17adc66
test(sync): pin that the "no devices found" notice stays hidden once …
alichherawalla Aug 5, 2026
75fcae6
test(sync): cover the Available heading, and drop four mocks of our o…
alichherawalla Aug 5, 2026
64331db
test(generation): delete two mockist suites, keep the journeys they hid
alichherawalla Aug 5, 2026
ee7b34f
test(image): delete the 60-test mockist image suite, cover the in-fli…
alichherawalla Aug 5, 2026
8aef0d5
test(harness): one definition of the image-generation journey
alichherawalla Aug 5, 2026
6dc1001
test(rag): delete the SQL-string-matching rag suite, cover budget and…
alichherawalla Aug 5, 2026
ce481f0
chore(rag): drop the dead chunkDocument re-export
alichherawalla Aug 5, 2026
2267b32
fix(generation): stop a reply through its owner, not the llama engine
alichherawalla Aug 5, 2026
1eb10b1
test(harness): stop in-flight generation on teardown, killing the one…
alichherawalla Aug 5, 2026
594ae81
test: uniform 80% floor for ./pro (maintainer's call)
alichherawalla Aug 5, 2026
73c867c
test(sync): cover three untested sync modules; pin the pro branch flo…
alichherawalla Aug 6, 2026
16c50e0
ci: stop running Android Lint on the hosted runner (68 of the job's 9…
alichherawalla Aug 6, 2026
e9ab0fc
test(pro): skip the Receiving suite when pro is absent, not silently …
alichherawalla Aug 6, 2026
2b27ffd
chore: add .coderabbit.yaml so reviews are honest about what they cover
alichherawalla Aug 6, 2026
f962cc3
test(sync): cover the refusals that protect a peer from a bad transfer
alichherawalla Aug 6, 2026
7859a16
test(sync): cover the model-transfer card a user watches for minutes
alichherawalla Aug 6, 2026
8536eac
test: restore the uniform 80% floor for ./pro - branches now measure …
alichherawalla Aug 6, 2026
77d1617
test(sync): cover what the Devices screen's buttons do when Sync is n…
alichherawalla Aug 6, 2026
f18e293
test(sync): cover the notifications filter, driven by real taps
alichherawalla Aug 6, 2026
d156a60
test(mcp): cover the OAuth handshake behind "connect an MCP server"
alichherawalla Aug 6, 2026
0523b1b
test(licensing): cover what the licence client does with a bad provid…
alichherawalla Aug 6, 2026
01fcc3f
test(sync): prove an Off switch revokes a grant already given
alichherawalla Aug 6, 2026
5b0fc8e
test(sync): prove a revoked grant does not come back after a restart
alichherawalla Aug 6, 2026
344ceb3
docs: record the missing cancellation seam for revoked ambient transfers
alichherawalla Aug 6, 2026
0a5b4ef
chore(sonar): scope Automatic Analysis to shipped source
alichherawalla Aug 6, 2026
701be92
fix(sync): make a failed receive discard the partial payload determin…
alichherawalla Aug 6, 2026
946f585
test(licensing): a thin machine record is a seat nobody holds, not a …
alichherawalla Aug 6, 2026
39ffcfa
test(sync): drive a real phone-to-phone pairing to a LIVE session
alichherawalla Aug 6, 2026
36cdda1
feat(sync): thread the discoverability choice through the native sync…
alichherawalla Aug 6, 2026
4fc156d
test(sync): licensed fixtures for a Pro-only feature, and the new Ava…
alichherawalla Aug 7, 2026
c6dc26d
test(sync): a CDP driver for the desktop, the Android-to-Mac flow, an…
alichherawalla Aug 7, 2026
d474d97
test(sync): an evicted device leaves the screen entirely
alichherawalla Aug 7, 2026
8ca2c2a
fix(pro): every gate asks whether this device is still admitted
alichherawalla Aug 7, 2026
3d88b54
chore(claude): allow the device-inspection commands used while testin…
alichherawalla Aug 7, 2026
2616274
docs(rules): tests are written last, and only on request
alichherawalla Aug 7, 2026
336ec27
fix(pro): two states, not three - evicted means the buy screen
alichherawalla Aug 7, 2026
5953ca2
chore(pro): bump submodule for the admission fixes
alichherawalla Aug 7, 2026
af4c3b0
chore(tests): existing tests set admission now that registration alon…
alichherawalla Aug 7, 2026
2e433e3
chore(pro): bump submodule for the notifications gate
alichherawalla Aug 7, 2026
2bae792
test(e2e): one surface for driving sync on all four platforms
alichherawalla Aug 7, 2026
86f85c2
test(e2e): pairing as a reusable route, and the whole mesh in one pass
alichherawalla Aug 7, 2026
b670e80
e2e: one config for the mesh endpoints, one place that reads a device…
alichherawalla Aug 7, 2026
4adf335
sync: tell the orchestrator when a session drops
alichherawalla Aug 7, 2026
1bfc74d
e2e: a flow runner, and a surface that knows when a sheet is covering…
alichherawalla Aug 7, 2026
cea64e5
e2e: a flow for the link that heals itself, and one verb for going of…
alichherawalla Aug 7, 2026
6ec6af5
e2e: read a row's status in both directions, and far enough to find it
alichherawalla Aug 7, 2026
249e841
test: gate the Sync screen on an element, not on incidental copy
alichherawalla Aug 7, 2026
5062e29
e2e: hiding a device must not cost it the devices it already has
alichherawalla Aug 7, 2026
4e422a8
e2e: disconnect, the teardown that keeps the credential
alichherawalla Aug 7, 2026
0b1c1cb
chore: bump pro to the deliberate-disconnect fix
alichherawalla Aug 7, 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
  •  
  •  
  •  
8 changes: 7 additions & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@
"allow": [
"Bash(adb -s 192.168.43.7:46187 shell \"run-as ai.offgridmobile.dev cat databases/RKStorage\")",
"Bash(adb -s 192.168.43.7:46187 shell \"run-as ai.offgridmobile.dev ls -la files/image_models/\")",
"Bash(node -e \"const RNFS = { DocumentDirectoryPath: '[RNFS.DocumentDirectoryPath]' }; console.log\\('Android DocumentDirectoryPath maps to?'\\)\")"
"Bash(node -e \"const RNFS = { DocumentDirectoryPath: '[RNFS.DocumentDirectoryPath]' }; console.log\\('Android DocumentDirectoryPath maps to?'\\)\")",
"Bash(xcrun devicectl device copy from *)",
"Bash(adb devices)",
"Bash(xcrun devicectl device info *)",
"Bash(xcrun devicectl list devices)",
"Bash(npm run depcruise)",
"Bash(npm run knip)"
]
}
}
45 changes: 45 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# CodeRabbit configuration.
#
# Why this exists: on the sync release PRs CodeRabbit reported a GREEN check having reviewed nothing at all -
# "Review skipped: 140 files exceed the limit of 100" (desktop) and "316 files exceed the limit of 300"
# (mobile). A passing check that means "not reviewed" is worse than a missing one, so the file count is kept
# honest here: screenshots, generated artefacts, lockfiles and docs are excluded from review, and therefore
# from the count that trips the limit.
#
# This does NOT rescue a release-sized PR - desktop's diff is still 140 code files against a limit of 100.
# The fix for those is smaller PRs; this keeps ordinary ones reviewable and the noise out.
language: en
reviews:
request_changes_workflow: false
high_level_summary: true
poem: false
review_status: true
collapse_walkthrough: true
path_filters:
# Binary and generated evidence: a reviewer cannot read these, and 27 PNGs alone pushed desktop over.
- '!**/*.png'
- '!**/*.jpg'
- '!**/*.jpeg'
- '!**/*.gif'
- '!**/*.pdf'
- '!**/e2e/screenshots/**'
- '!**/__tests__/device/screenshots/**'
# Lockfiles and dependency graphs: reviewed by the install gate, not by reading.
- '!**/package-lock.json'
- '!**/yarn.lock'
- '!**/Podfile.lock'
- '!**/Gemfile.lock'
# Build output and vendored trees.
- '!**/dist/**'
- '!**/out/**'
- '!**/build/**'
- '!**/coverage/**'
- '!**/node_modules/**'
- '!**/Pods/**'
- '!**/*.xcodeproj/**'
- '!**/.claude/**'
auto_review:
enabled: true
drafts: false
chat:
auto_reply: true
10 changes: 10 additions & 0 deletions .dependency-cruiser.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ module.exports = {
'(^|/)index\\.(ts|tsx)$', // barrel/entry files
'^src/types/', // type barrels are legitimately import-only
'^src/(bootstrap|shims|config)/', // wiring/shim/config shells reached outside the graph
// Core utilities whose only importers are in the private pro/ submodule. The cruiser scans src
// alone, so a module used exclusively by pro reads as an orphan even though deleting it would
// break the build - coalesce is imported by pro/sync/fileTransferService and
// pro/sync/ambientShareService. Same reasoning as the @offgrid/pro exception below: not real
// debt, so excluded rather than baselined. Confirm with grep in pro/ before adding to this list.
'^src/utils/coalesce\\.ts$',
],
},
to: {},
Expand Down Expand Up @@ -106,6 +112,10 @@ module.exports = {
},
],
options: {
// Keep file-linked workspace packages under node_modules so dependency-cruiser can
// classify them from this package.json instead of treating their real paths as
// undeclared source files outside the mobile project.
preserveSymlinks: true,
doNotFollow: { path: 'node_modules' },
tsPreCompilationDeps: true,
tsConfig: { fileName: 'tsconfig.json' },
Expand Down
15 changes: 14 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,22 @@ module.exports = {
'sonarjs/no-duplicated-branches': 'warn',
},
overrides: [
{
files: ['scripts/physical-sync/**/*.mjs'],
parserOptions: {
ecmaVersion: 2022,
sourceType: 'module',
},
},
{
// Relax structural rules in test files — large test suites and helpers are acceptable
files: ['__tests__/**/*', '*.test.ts', '*.test.tsx', 'jest.setup.ts'],
files: [
'__tests__/**/*',
'scripts/physical-sync/__tests__/**/*.mjs',
'*.test.ts',
'*.test.tsx',
'jest.setup.ts',
],
rules: {
'max-lines': 'off',
'max-lines-per-function': 'off',
Expand Down
Loading