Commit Graph
6824 Commits
Author SHA1 Message Date
spacedandy-agents-simplex 2c2b6051ad ci: run the iOS app tests with Claude on the merged branch again
The previous run's app job waited for a macOS runner and was cancelled before it started. Its core library and backend builds are reused.

[claude-test:ios] [ci-backend]
2026-10-19 12:01:50 +00:00
spacedandy-agents-simplex 709f016c92 ci: pick the desktop test server's "To resolve names" role by the menu's first item
That menu opens over the server address's QR code, where OCR can miss its "yes" (run 39242250150 failed its setup three times on it), so the smoke test finds the menu's first item, which repeats the field's value and reads well, and clicks the row under it. The check that the role is now yes stays.

[claude-test:desktop] [ci-backend]
2026-10-19 11:21:56 +00:00
spacedandy-agents-simplex d7d954fd2a ci: give the desktop app job's Kotlin compiler 4 GB
After the merge of master, compiling :common:compileKotlinDesktop failed with "Not enough memory to run compilation" (run 39237291485): the Kotlin compiler daemon takes gradle.properties' 2 GB heap. The app job's two Gradle calls pass kotlin.daemon.jvmargs=-Xmx4g; the runner has 15 GB. gradle.properties, which the app builds use, is unchanged.

[claude-test:desktop] [ci-backend]
2026-10-19 11:06:38 +00:00
spacedandy-agents-simplex 8048b55056 ci: run the iOS app tests with Claude on the merged branch with the review fixes
Starts the scripted test and the Claude sessions on iOS with the backend, for the merge of master and the review fixes. Desktop's run of 8a9628bd9 covers its side.

[claude-test:ios] [ci-backend]
2026-10-19 10:50:41 +00:00
spacedandy-agents-simplex 6b02b1b775 ci: say in the app CI READMEs that the backend-state artifact is public, and why that is accepted
The artifact carrying the app job's stopped test backend to the Claude job holds its databases and server keys, which anyone signed in to GitHub can download for the day it is kept. The READMEs now say so, what someone could do with it, and why encrypting it isn't possible under the Claude job's one-secret rule.

Review R1-1, run 008-dirsearch-known-chats

[app-ci:ios] [ci-backend]
2026-10-19 10:49:13 +00:00
spacedandy-agents-simplex 8da3961acf docs: point the online search specs' line references at the code again after the master merge
Master moved code in files the iOS and Kotlin specs link to by line (Kotlin ChatListView.kt by 29 lines and others); two references from this run's slices also had a stale line column or link text.

Review R1-3, run 008-dirsearch-known-chats
2026-10-19 10:49:08 +00:00
spacedandy-agents-simplex d6a031d6e3 ios: draw New chat's group row avatar with ChatInfoImage
It drew by hand what ChatInfoImage draws for a group (its image, or the group's icon), which the Kotlin row uses too.

Review R1-2, run 008-dirsearch-known-chats
2026-10-19 10:49:06 +00:00
spacedandy-agents-simplex 8a9628bd9c ci: start the app job's test backend again in the Claude jobs, as the app points at its directory
The app is built in the app job with that job's backend's directory address in DIRECTORY_SERVICE_LINK, and since master moved Claude into its own job, that job started a new backend with another address. The app job now uploads its stopped backend's work dir (without the binaries), and the Claude job restarts it with a new backend.sh resume: the same servers' keys and databases, so the same addresses. The relay, directory, names server and contacts start through the functions start uses, split out of it. The iOS Claude job's smoke test also gets BACKEND_DIR, as the app job's does.

[claude-test] [ci-backend]
2026-10-19 10:24:43 +00:00
spacedandy-agents-simplex a55cabfcfb ios: pass the online search rows' placeholder icons as images, as ProfileImage now takes them
Master changed ProfileImage's iconName: String to icon: Image (#7767's merge brought it in). The Directory and Names rows and New chat's group row still passed iconName, which no longer compiles; they pass Image(systemName:) as master's own callers do.
2026-10-19 10:24:41 +00:00
spacedandy-agents-simplex 547c8ac18b Merge branch 'master' into f/directory-search
# Conflicts:
#	.github/workflows/desktop-linux.yml
#	apps/ios/SimpleX.xcodeproj/project.pbxproj
#	apps/multiplatform/product/gaps.md
#	apps/multiplatform/spec/README.md
#	apps/multiplatform/spec/client/navigation.md
#	scripts/ci/desktop-linux/README.md
#	scripts/ci/desktop-linux/claude-test.sh
#	scripts/ci/ios-sim/README.md
#	scripts/ci/ios-sim/backend.sh
#	src/Simplex/Chat/Library/Commands.hs
2026-10-19 10:24:36 +00:00
spaced4ndy 35bc0b66d9 ci: app test workflows save no caches, reuse their builds as artifacts, and run Claude in its own job (#7767) 2026-10-19 09:31:38 +00:00
spacedandy-agents-simplex 0808da23fc ci: check in the desktop smoke and Claude tests that known directory results are chats, and the note for a page of them
After joining ci_channel, the scripted search case checks in both layouts that searching its name shows the note "All results on this page are already in your chats" and no Directory row, and that a search the local list doesn't match shows ci_channel as a chat row that opens it, not "#ci_channel" with "Join channel"; New chat shows it as a contact-style row. The Claude search test's part C expects the same.

Run: 008-dirsearch-known-chats, slice 5

[claude-test] [ci-backend]
2026-10-19 09:31:12 +00:00
spacedandy-agents-simplex ce30e9bd6c ci: check in the iOS smoke test and plan that known directory results are chats, and the note for a page of them
After joining ci_cards, the smoke test expects the note "All results on this page are already in your chats" for its name, and, in both layouts and in New chat, that a search the local list doesn't match shows ci_cards as its chat row, which opens the channel, not "#ci_cards" with "Join channel". The plan gets U4 and W12 and the new U2, the prompt describes known entries and the note, and the Claude scope runs the changed cases (Haiku 5.5, 300 turns, 3 USD).

Run: 008-dirsearch-known-chats, slice 4
2026-10-19 09:23:26 +00:00
spacedandy-agents-simplex d24d788a64 android, desktop: show directory results you already have as chats, and say when a page adds none
As on iOS: a directory result whose link resolves to a chat the screen doesn't list is drawn with that screen's chat row, which opens it, instead of "Join group" / "Join channel": ChatListNavLinkView in the chat list, ContactListNavLinkView (now with a group branch) in New chat. When every result of the last page is a chat already shown, the Directory part says "All results on this page are already in your chats" above "Show more".

Run: 008-dirsearch-known-chats, slice 3
2026-10-19 09:16:15 +00:00
spacedandy-agents-simplex 9313a490bc ios: show directory results you already have as chats, and say when a page adds none
A directory result whose link resolves to a chat the screen doesn't list is drawn with that screen's chat row, which opens it, instead of "Join group" / "Join channel": the chat list's row there, a contact-style row in New chat (ContactListNavLink gets a group case). When every result of the last page is a chat already shown, the Directory part says "All results on this page are already in your chats" above "Show more", instead of showing the header and "Show more" alone.

Run: 008-dirsearch-known-chats, slice 2
2026-10-19 09:08:39 +00:00
spacedandy-agents-simplex 0939975778 ios: draw the chat list's chat rows with one function
The Directory part will draw known chats with the chat list's own row, so its two modifier chains (iOS 16+, iOS 15) move unchanged into chatListNavLink(_:), and the list's two ForEach branches become one. The iOS 16 offset moves from the ForEach to each row, which SwiftUI applies the same way.

Run: 008-dirsearch-known-chats, slice 1
2026-10-19 09:00:39 +00:00
spaced4ndy 0eeac1bb92 docs: normalize badge in-app checkout wireframe 2026-10-19 13:00:31 +04:00
sh bdc4edc524 nix: build armv7a from master with ghc 8.10.7 (#7763) 2026-10-19 09:07:52 +01:00
EvgenyandEvgeny @ SimpleX Chat 924f2b9644 api: fix python code generation (#7764)
* api: fix python code generation

* fix python types

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-19 08:32:09 +01:00
EvgenyandEvgeny @ SimpleX Chat a766d0af0f ci: package releases with drafts in simplex-chat-libs (#7754)
* ci: package releases with drafts in simplex-chat-libs

* test release

* core: 7.1.0.12

* packages: release nodejs and python libraries

* fixes

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-19 07:50:09 +01:00
EvgenyandEvgeny @ SimpleX Chat 0563460204 core, ui: support block markdown (#7734)
* plan: support block markdown

* update plans

* core, ui: markdown plans and implementation

* better

* simplify

* markdown tests and fixes

* implement

* fixes

* fix test

* bold

* block markdown rendering

* fix selection and rtl

* fixes

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-18 22:44:33 +01:00
EvgenyandEvgeny @ SimpleX Chat 5a5a927821 ci: reduce the number of runners (#7750)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-18 11:40:08 +01:00
EvgenyandEvgeny @ SimpleX Chat 1d0247b7dd core: preserve profile peer type when connecting incognito (#7751)
* core: preserve profile peer type when connecting incognito

* Apply batched suggestions from code review

Co-authored-by: Evgeny <evgeny@poberezkin.com>

* fix

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-18 08:51:33 +01:00
EvgenyandEvgeny @ SimpleX Chat 139ce5f8cc core: fix profile creation and update in channels (#7740)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-17 19:49:30 +01:00
EvgenyandEvgeny @ SimpleX Chat 77f9f4a464 core: add peer type "agent" (#7738)
* add agent peer type

* bot types

* agent app icons

* refactor

* smaller image

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-17 19:23:53 +01:00
EvgenyandEvgeny @ SimpleX Chat 9a90d8e230 ci: cache build artifacts for faster builds (#7730)
* ci: cache build artifacts for faster builds

* test build

* compression

* fix macos-latest

* debug build

* better caching

* test cache

* update build

* test cache

* ci: check toolchain restore

* ci: remove Windows toolchain cache

* ci: skip tests on macOS Intel

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-17 17:12:08 +01:00
spacedandy-agents-simplex f6f38a4122 ci: tell the iOS Claude session that a new profile copies the names server
N7 needs a profile that resolves no names, but the second profile copied the first one's names server, so names still resolved (run 39004554089).
2026-10-17 07:29:44 +00:00
spacedandy-agents-simplex a7886e4eab ci: open another chat before the desktop Claude test's name search
Desktop always lists the chat open in the right pane, so with ci_channel open its Directory row was rightly hidden and step C.3 had nothing to click (run 39001925386). Also runs the iOS names session again: that run's backend stopped when the directory could not connect to a channel's link.

[claude-test] [ci-backend]
2026-10-17 04:58:29 +00:00
spacedandy-agents-simplex 3e3e27da38 ci: scope the iOS Claude sessions to the names cases again, with the setup step fixed
One-hand: the names setup, N1-N11, the New chat cases with names and the full search in both lists, checking that a row opened from goes away; N11 uses #cinews_weekly so the top bar's N1 still finds cinews unopened. Top bar: N1, N4 and the full search on the chat list.

[claude-test] [ci-backend]
2026-10-17 04:16:02 +00:00
spacedandy-agents-simplex 868033ce68 ci: say in the iOS prompt that a server's roles show once it is used for new connections
A session found no role pickers on the names server it added, so no name resolved and the names cases were blocked (run 38993332306); a later session added the server twice.
2026-10-17 04:15:55 +00:00
spacedandy-agents-simplex b3d5fa92b7 ci: check in the desktop Claude test that a joined channel's Directory row goes away 2026-10-17 04:15:53 +00:00
spacedandy-agents-simplex 0c66b087ad ci: check in the iOS smoke test that a joined channel's Directory row goes away
The smoke test searches ci_cards by its name, joins it from its Directory row, and then expects the chat in the results and no Directory row for it.
2026-10-17 04:15:52 +00:00
spacedandy-agents-simplex 4e01032a2e android, desktop: hide a search result once the chat opened from it is listed
The same change as on iOS: the rows without a local chat look it up again when a connection started from one ends, so a group or channel opened from its row is no longer listed twice until the next search.
2026-10-17 04:15:50 +00:00
spacedandy-agents-simplex 1c24109730 ios: hide a search result once the chat opened from it is listed
A result's local chat was looked up only when the search ran, so a group or channel opened from its row stayed listed twice, as the chat and as the row, until the next search (a test run joined cinews_digest from the Directory part and saw both). The rows without a chat look it up again when a connection started from one ends.
2026-10-17 04:15:47 +00:00
spacedandy-agents-simplex 7165bb7d02 ci: base the desktop search test's part C on what the chat list lists
ci_channel's description matches "seed", so the list showed it and the step's premise was wrong; a name narrows the list instead. Desktop keeps the open chat in the filtered list, so "No chats found" can't be required while a chat is open (run 38994540038).
2026-10-17 03:01:18 +00:00
spacedandy-agents-simplex 03f488c85c ci: add joining and duplicate checks to the desktop Claude search test
Part C joins a channel from its Directory row, then checks that the joined chat is not listed again by the directory when the local list shows it, that it is when the list doesn't, the empty result, an unregistered name, and that only the Search key resolves names. The session gets 120 turns for it.

[claude-test:desktop] [ci-backend]
2026-10-17 02:20:28 +00:00
spacedandy-agents-simplex 1f702e29a3 ci: scope the iOS Claude sessions to the names cases and the full search
One-hand: the names setup, N1-N11, the New chat cases with names, the full search in both lists, G3 again, and whether a row stays next to the chat opened from it; top bar: N1, N4 and the full search on the chat list.

[claude-test:ios] [ci-backend]
2026-10-17 02:02:15 +00:00
spacedandy-agents-simplex 78be139bc8 ci: fit the iOS plan's D15 and W4 to both layouts, and time held searches in the prompt
D15 said the search bar is above the onboarding pages, which holds only with the top bar; W4 assumed a contact matches. A session tapped the pencil for G3 after the held search had already failed (app log), so the prompt asks for the action as the next command.
2026-10-17 02:02:00 +00:00
spacedandy-agents-simplex 5399b6e133 ci: scope the iOS Claude sessions to the online search plan without names
One-hand: the chat list, directory results, de-duplication, New chat and regression cases; top bar: the cases this layout draws differently. The names cases run in a separate session.

[claude-test] [ci-backend]
2026-10-16 22:36:34 +00:00
spacedandy-agents-simplex f1e4b45701 ci: give the desktop smoke test's time with the backend's searches 2026-10-16 22:36:14 +00:00
spacedandy-agents-simplex b8fab259da ci: describe the desktop search checks in the README
Runs the scripted tests of both apps with the test backend: [app-ci] [ci-backend]
2026-10-16 21:02:15 +00:00
spacedandy-agents-simplex 049cff88c7 ci: restore the desktop Claude search test
With the test backend, the Claude job builds the app against the test directory, sets it up at the chat list and gives Claude the online search test; without it, the onboarding path stays.
2026-10-16 21:02:01 +00:00
spacedandy-agents-simplex bad6eda33d ci: point the desktop app at the test directory and restore the smoke test's searches
With the test backend, the app is built against the test directory's address, and the smoke test runs a new search case: after the backend case's checks, in both layouts, "Search in Directory" and the full search with a SimpleX name, and with the toolbar at the bottom the full search in the New chat sheet.
2026-10-16 21:01:30 +00:00
spacedandy-agents-simplex 0176a83299 ci: restore the desktop backend's search request probe
A fresh client sends the directory the search the app sends and follows the cursor to the last page: each result must arrive once with its whole image, over at least two pages. The message search stays.
2026-10-16 21:01:29 +00:00
spacedandy-agents-simplex 37616294a4 ci: describe the iOS directory search checks in the README 2026-10-16 21:01:28 +00:00
spacedandy-agents-simplex 183d0d5356 ci: restore the iOS device test plan for online search, with its prompt and scope
The Claude sessions run the online search plan again: the cases, what each session covers per layout, the prompt's directory search, names and report sections, and the session's start state after the smoke test's searches.
2026-10-16 21:01:26 +00:00
spacedandy-agents-simplex f53eb6ae87 ci: point the iOS app at the test directory and restore the smoke test's search checks
With the test backend, the app is built against the test directory's address, and the smoke test goes on to search it: the Directory header above the results and their avatars in both layouts, the chat list's cards shown while typing and hidden under the results once the profile has a conversation, and "Show more" disabled while its page loads.
2026-10-16 21:01:22 +00:00
spacedandy-agents-simplex 4dc8c357d4 ci: restore the iOS backend's search request probes for directory search
A fresh client sends the directory the search the app sends, and must find ci_group and ci_channel; then "ci seed" and "ci avatar" are followed page by page into seed.md, with each page's entries and size against maxServiceBodyLength. The message search stays. The seeded entries name the cases they serve again.
2026-10-16 21:01:17 +00:00
spacedandy-agents-simplex cbb2480b4e ci: pass the branch name to jq as an argument in the iOS artifact lookup
The branch name was part of the jq program text, so a branch named to close the string could select an artifact from a fork or another branch. Same fix as the desktop lookup.
2026-10-16 21:00:40 +00:00
spacedandy-agents-simplex c67ea513f3 ci: create the iOS backend's probe user before its first named command
A client started with -s gives that server every role, names included, only to the users that exist when it starts, so the name probe's first connect plan on a new database failed with NO_NAME_SERVERS (run 38904976359). The user is now created by a plain run first, as every other peer is and as desktop's backend does.
2026-10-16 21:00:39 +00:00