Commit Graph
767 Commits
Author SHA1 Message Date
spacedandy-agents-simplex af6f6dca0c ci: tell Claude that the desktop app is already running and set up [claude-test] 2026-10-15 20:03:35 +00:00
spacedandy-agents-simplex 4a743ede40 ci: let Claude check that the desktop chat list hides its cards while search results show [claude-test] 2026-10-15 19:18:10 +00:00
spacedandy-agents-simplex 6f7f0fa6db ci: pick the test server's receiving role by its place in the menu, which OCR misreads 2026-10-15 18:35:58 +00:00
spacedandy-agents-simplex bcdff7eae1 ci: use the desktop test SMP server only to resolve names, not to receive 2026-10-15 17:56:19 +00:00
spacedandy-agents-simplex dc26703118 ci: close the desktop New chat sheet with its back arrow, and check the whole chat list on the way back 2026-10-15 17:56:09 +00:00
spacedandy-agents-simplex 78e136c2a3 ci: compare the directory count's text size with the description's by their ink in the desktop smoke test 2026-10-15 17:22:46 +00:00
spacedandy-agents-simplex b61a857c70 ci: let the desktop app reach the test names server directly, and log its debug output 2026-10-15 17:22:24 +00:00
spacedandy-agents-simplex f504e0745c ci: run the full search in the desktop New chat sheet with the toolbar at the bottom 2026-10-15 17:21:52 +00:00
spacedandy-agents-simplex 3908a19bc7 ci: wait for Your servers before opening the test server, and scroll to the names settings in the desktop smoke test 2026-10-15 16:41:38 +00:00
spacedandy-agents-simplex 51bcb8fdf6 ci: let Claude run the full desktop search after a scripted setup, with Haiku 5.5 on Claude Code 2.1.296
The prompt runs the whole plan with the toolbar at the bottom and, at the top, only the checks the layouts render differently.
2026-10-15 16:15:27 +00:00
spacedandy-agents-simplex 9b67dda90c ci: check that online results hide the chat list's banner and cards, and read the chat list's texts from its own pane
The group created in setup stays open in the right pane, where its name also shows, so the smoke test finds chat list texts left of x 390 only. OCR reads "Network & servers" as two phrases.
2026-10-15 16:15:21 +00:00
spacedandy-agents-simplex d253ab4cf3 ci: take the SMP server's path from the last line of cabal list-bin 2026-10-15 15:55:13 +00:00
spacedandy-agents-simplex 72b3daa01f ci: fetch simplexmq's submodules before building the test SMP server 2026-10-15 15:46:07 +00:00
spacedandy-agents-simplex 10f1271ce5 ci: open the test server's names role from the dropdown's value in the desktop smoke test 2026-10-15 15:34:42 +00:00
spacedandy-agents-simplex 5ed1573072 ci: run the full desktop search with a SimpleX name in both toolbar layouts
Setup creates a local group and makes the test SMP server the only one that resolves names, in Settings. Each layout then runs "Search in Directory" and the full search with Enter, and checks the local chat, the Names part and the Directory part, their headers and order, the avatars, and that the count text is smaller than the description.
2026-10-15 15:31:30 +00:00
spacedandy-agents-simplex dfa87309bb ci: give the desktop test directory full-bleed letter avatars, and resolve a test SimpleX name on a local SMP server
The avatars are a two-shade gradient with a large white letter, noisy enough to stay near the size the apps make. backend.sh starts an SMP server built from the pinned simplexmq with its [NAMES] resolver on a local registry, and ci_contact claims seeded.testing for its address there; the entries' descriptions now read "CI seeded ..." so the name is also a directory search.
2026-10-15 15:31:22 +00:00
spacedandy-agents-simplex 32675818a9 ci: say in the desktop ui help that a capital I matches a lowercase l
The help text is part of the Claude job's prompt, so it describes the matching the helper actually does.
2026-10-15 13:16:17 +00:00
spacedandy-agents-simplex a4b9639ef9 ci: guard Claude's Bash with the hook alone, log its decisions, use Sonnet 5.5
In run 38737084248 the credential scrub made Claude Code 2.1.292 require its whole Bash sandbox (bubblewrap and socat) and force the default permission mode, so every ui call failed. The scrub and bubblewrap are dropped: the PreToolUse guard, which runs in -p sessions, keeps Bash to single ui commands, and now logs each decision outside Claude's directory as evidence. The model is Claude Sonnet 5.5 for the last Claude run the session allows. Third Claude run: [claude-test]
2026-10-15 13:01:20 +00:00
spacedandy-agents-simplex 499cab08fd ci: install ui as a command for the Claude job
A wrapper in /usr/local/bin runs the helper from the checkout, so Claude's Bash tool finds ui on PATH whatever environment it builds for its shell. First Claude run: [claude-test]
2026-10-15 12:31:56 +00:00
spacedandy-agents-simplex 0c73033192 ci: read a capital I and a lowercase l as the same letter in desktop OCR
In the app's font they look alike, and run 38729120356 read the descriptions "CI seed group" and "CI seed channel" as "Cl seed ...", failing four checks.
2026-10-15 12:31:52 +00:00
spacedandy-agents-simplex 77003aae68 ci: let Claude Code repeat the desktop directory search on [claude-test] pushes
A claude job (environment app-sim-claude, only on workflow_dispatch or a head commit with [claude-test]) starts its own test backend, builds the patched app, runs the scripted onboarding, and gives claude -p (pinned 2.1.292, Claude Haiku 5.5, at most 60 turns and 4 USD) the same search in both layouts to do with the ui helper, reading screenshots. Claude gets Bash, Read and Write only: a PreToolUse hook lets through nothing but single ui commands, credentials are scrubbed from its subprocesses, files are limited to its output directory, no MCP. The job passes when Claude reports CLAUDE-TEST: PASS, and uploads its report, screenshots, transcript and usage (turns, tokens, cost estimated at API prices).
2026-10-15 11:50:50 +00:00
spacedandy-agents-simplex 15dd2c8851 ci: let an agent chain desktop ui commands, keep its token from what they start
ui do runs several helper commands in one call and stops at the first that fails, so an agent on the runner needs fewer turns for predictable sequences. The helper unsets CLAUDE_CODE_OAUTH_TOKEN first, so nothing it starts inherits the agent's credentials.
2026-10-15 11:50:44 +00:00
spacedandy-agents-simplex 193b7c69cd ci: repeat the desktop directory search with the toolbar at the top
After the search in the default layout, the smoke test turns off Settings > Appearance > Reachable app toolbars, checks that the search field moved to the top, and searches again with the same checks, this time confirming the alert with "Search and don't show again".
2026-10-15 11:41:05 +00:00
spacedandy-agents-simplex 02d59325d9 ci: search the test directory from the desktop chat list in the smoke test
The app is built with DIRECTORY_SERVICE_LINK replaced by the test directory's address (in the workflow only). After onboarding the smoke test types "ci seed" in the default layout (toolbar at the bottom), confirms the first-search alert, and pages with Show more until #ci_group and #ci_channel are both shown. It then checks, without stopping at the first failure: two pages, no further page offered, the Directory header above the results, each avatar's colour, each row's description and Join label, and the member counts. Checks go to checks.txt and the job summary.
2026-10-15 11:39:27 +00:00
spacedandy-agents-simplex 5cae929f0c ci: find text by exact phrase first, report boxes and avatar colours in the desktop ui helper
A phrase that is exactly the text now wins over one that only contains it (the alert's Search button under "Search in Directory?", the Directory header next to the Search in Directory row), and words are compared by their joined characters, so OCR splitting "#ci_group" still matches. New commands: ui find prints a text's centre and box; ui avatar measures the profile image left of a list row's name, saves that area, and with a colour checks that it dominates.
2026-10-15 11:34:49 +00:00
spacedandy-agents-simplex 65759c6233 ci: give the test directory's group and channel full-size avatars, page through the search
Both get a JPEG profile image made as the apps make them (quality 85, scaled down until the data URI is at most 12500 characters), red for ci_group and green for ci_channel. With them the search results no longer fit in one service response (10737 bytes, compressed if needed), so the directory splits them; the probe follows the cursor, prints each page's entries and sizes, and requires each result once, with its whole image, over at least two pages.
2026-10-15 11:31:07 +00:00
spacedandy-agents-simplex 5f48972d7d ci: run a test directory with a group and a channel on the desktop app runner
A backend job builds the CLI and the directory service without client_library, reused across runs as an artifact named by its sources (plan job, as on the iOS lane). The app job starts a relay and the directory on the preset servers, registers and approves ci_group and ci_channel from a CLI admin, and checks that a search request from a fresh client finds both. The app is not pointed at it yet; its build and desktopTest still run when the backend fails.
2026-10-15 11:28:56 +00:00
spacedandy-agents-simplex 247cc035c8 ci: take the final desktop screenshot only when the smoke test fails
Run 38716815535 passed both smoke tests; its last screenshot (09-final) repeated 08-search-typed. The exit trap now takes it only on failure, where it shows the screen the test stopped at. This run also checks that the Gradle cache saved by that run is restored.
2026-10-15 10:05:15 +00:00
spacedandy-agents-simplex bc41edd8e2 ci: judge each OCR word's background from the rows around it
Run 38715611090 still stopped at the profile screen: averaging 4x4 blocks and taking a 5x5-block median leaves large bold text in the estimate (the title read as a dark background) and lets the white labels lift a grey disabled button over the threshold. A map coarse enough for titles would swallow 55-pixel buttons, so each word's background is now the median of the rows 2 to 4 pixels above and below its box, read from the 8-bit grayscale screenshot, which also feeds both OCR passes. Checked offline on the screenshots and TSVs of runs 38712854507 and 38714550750: the first screen, the profile screen with its title and grey button, and the branch chat list with the typed text and the directory row all read correctly.
2026-10-15 09:57:48 +00:00
spacedandy-agents-simplex e3f0e45e59 ci: write the OCR background map with 8-bit samples
In run 38714550750 the background map judged the white title area dark and the grey "Create profile" button light, so both were dropped, and onboarding stopped at the profile screen on both apps. ImageMagick's Q16 build writes PGM samples as 16 bits unless told -depth 8, while the reader takes one byte per pixel. The reader now also refuses a map without 8-bit samples.
2026-10-15 09:47:56 +00:00
spacedandy-agents-simplex 6769d079dc ci: stop the release smoke test at the chat list, require the directory row on the branch
Run 38712854507 showed that the released app (v7.1.0-beta.6) has no search field after onboarding: with no chats its left pane is empty and the centre shows "Talk to someone", while the branch shows the search bar in that state. The chat list is now recognised by "Talk to someone", which both show; the release job stops there (onboarding mode), and the branch run again requires the "Search in Directory" row after typing.
2026-10-15 09:39:19 +00:00
spacedandy-agents-simplex 81f7e0e8f5 ci: take each OCR word from the pass that matches its background
Run 38712854507 got through onboarding on both apps, but on the branch app the typed "ci smoke" was lost: the dark-text pass read it as "ci smokel" with confidence 6, below the cutoff, while the light-text pass read noise ("OKC!") at the same place, and its "i)" split "Search in Directory". The light pass reads the gaps between dark letters as text, and the dark pass reads noise inside the coloured buttons, so neither confidence nor a pass order decides well. A median of the downscaled screenshot gives the background luminance; a word counts only from the dark pass on light backgrounds and from the light pass on darker ones, with no confidence cutoff. Phrases are now built from neighbouring words, so a stray word elsewhere on the same row no longer splits one ("Be" and "free" were).
2026-10-15 09:38:57 +00:00
spacedandy-agents-simplex 45b3851746 ci: OCR dark and light text in separate passes
Run 38712060819 showed that one image for both polarities smears page text: the morphological open treats the white gaps between dark letters as light text. Dark text now comes from the local threshold of run 38707461053, which read the grey and dark onboarding text; light text, such as labels on coloured buttons, from the difference from an open, which leaves no ring at the button edge. The words of both passes are merged by position, keeping the more confident reading.
2026-10-15 09:25:36 +00:00
spacedandy-agents-simplex 85747f5734 ci: let tesseract binarise the normalised OCR image
In run 38711351160 the normalised image had no rings and showed the button labels, grey and dark text all dark on white, but the fixed 80% threshold turned every pixel with over 20% contrast black, so letters merged into blobs ("Be free" read as "Be tires"). With the background now uniformly white, tesseract's own threshold separates the text, so the image goes to it in grayscale.
2026-10-15 09:18:58 +00:00
spacedandy-agents-simplex 4fa605d056 ci: read text of both polarities from one background-normalised image
Run 38707461053 read the grey onboarding text after the local threshold, but not the white labels on the blue buttons: in the negative image the threshold drew a thick ring around each button, and tesseract output nothing inside it. The text image is now the difference of the screenshot from its morphological close and open, so dark and light text both become dark on white and step edges between regions cancel; one tesseract pass instead of two. Each shot keeps that image and tesseract's TSV in UI_OUT/ocr.
2026-10-15 09:13:01 +00:00
spacedandy-agents-simplex f4aad3727d ci: threshold screenshots locally before OCR in the desktop ui helper
In run 38702315040 the app started under Xvfb and showed onboarding, but tesseract's single global threshold, pulled down by the black screen outside the window and the illustration, lost the grey text and the white labels on the blue buttons, so "Create your profile" was never found. A local adaptive threshold (-lat) on the enlarged grayscale image and on its negative turns both into dark text on white. Each shot now also keeps the two images OCR read, in UI_OUT/ocr.
2026-10-15 08:41:13 +00:00
spacedandy-agents-simplex 497c451e59 ci: run the desktop smoke test on the released app as well
The branch's Kotlin does not compile yet (DirectorySearch.kt and DirectorySearchView.kt import chat.simplex.res.MR instead of chat.simplex.res.*), so the app job stops before the UI steps. A new release job downloads the desktop .deb of the branch's latest release tag for the runner's Ubuntu and runs the same smoke test on it, which exercises Xvfb, openbox, xdotool and the OCR helper independently of the branch build. The smoke test now checks that the typed text appears in the search field and reports whether the Search in Directory row is shown, since releases before directory search don't have it. This run also checks that the core library cache is hit.
2026-10-14 19:45:10 +00:00
spacedandy-agents-simplex 86358ba5bc ci: build the desktop app for Linux, run a UI smoke test under Xvfb and the desktop tests
First iteration on f/ci-desktop: the core job builds libsimplex.so with scripts/desktop/build-lib-linux.sh on ubuntu-24.04 (GHC 9.6.3, direct-sqlcipher +openssl, no VLC) and caches it by source hash, with the cabal store cached separately. The app job builds :desktop:createDistributable with Corretto 17 and the repo's assets, runs :common:desktopTest, then starts the app under Xvfb and openbox with software rendering and drives onboarding to the chat list and typing in the search field with the ui helper (xdotool input, tesseract OCR to find text), saving numbered screenshots, the text read from them and a step log as artifacts.
2026-10-14 17:33:34 +00:00
Evgeny Poberezkin 9711dcfc9c core: 7.1.0.11 (simplexmq 7.1.0.11) 2026-10-11 23:01:35 +01:00
EvgenyandEvgeny @ SimpleX Chat 64aa2825d5 core: release core library to simplex-chat-libs every time cabal version changes (#7687)
* core: release core library to simplex-chat-libs every time cabal version changes

* implement

* test build

* update libs release

* test library release

* create release commit, so the date is correct

* rework to create release in advance in maybe-release job

* remove test build

* move postgresql job back

* test build

* remove test build

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-11 22:01:22 +01:00
EvgenyandEvgeny @ SimpleX Chat 1053e9fb5c core: use simpler agent api (#7685)
* core: use simpler agent api

* simplexmq

* simplexmq, plan

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-10 23:30:31 +01:00
EvgenyandEvgeny @ SimpleX Chat 2e56d32b52 core: badge presentations in profiles (#7573)
* badge presentation in groups

* fix tests

* badge presentations in profiles

* update simplexmq

* change types

* badge profile presentations

* improvements

* remove proof from cards, send owner public key for channel to relay

* add test

* merge migrations

* update

* prevent fallback to PHTest

* fixes

* many fixes

* fixes

* fixes

* cleanup

* improve

* query plans

* fix test

* diff

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-10 17:48:45 +01:00
EvgenyandEvgeny @ SimpleX Chat 96970373b0 core: add status when switching queue (#7664)
* core: add status when switching queue

* fix

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-08 16:31:29 +01:00
EvgenyandEvgeny @ SimpleX Chat df95de8a2c tests, fix: execute in parallel, send connected events after creating chat items, fix race when merging multiple members to one contact (#7500)
* tests: execute in parallel

* remove race in terminal

* fix some tests

* stop chat controller on exit

* fix more tests

* fix tests

* query plans

* update simplexmq

* update direct-sqlcipher

* fix tests

* query plans

* ios: update core

* fix tests

* update simplexmq and direct-sqlcipher, fixes

* simplexmq

* update simplexmq

* parallel channel tests

* update tests

* fix tests

* fix tests

* query plans

* fix test

* more tests in CI

* use ram drive in CI

* fix tests, fix directory deleting voice file before it is uploaded

* fix query

* fix query to use index

* link contact and channel owner profile when connecting via a signed link

* update simplexmq, fix ghc 8.10.7

* fix tests

* avoid double stop

* query plans

* fix more test races

* more test fixes

* fix queries

* fixes

* more fixes

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-07 08:12:02 +01:00
Evgeny Poberezkin 680790695e core: update simplexmq 2026-10-05 11:45:16 +01:00
Evgeny Poberezkin 6b596c0c35 Merge branch 'stable' 2026-10-03 08:05:19 +01:00
Evgeny Poberezkin 93910b80e9 core: 7.1.0.9 (simplexmq 7.1.0.10) 2026-09-30 14:09:11 +01:00
sh 4d0ffbd3e9 calculator bot: add docker setup (#7606) 2026-09-30 08:50:29 +01:00
sh b1dc25dc3e badges: service group with multi-use codes (#7578)
* core: cancel the chat callback on interrupt

* badges: add multi-use codes

* badges: add the managed group

* badges: document multi-use codes and the group

* core: sign test badges with whole-second expiry

* badges: rework tracker and reply texts
2026-09-30 08:48:57 +01:00
SimpleX Chat b3907c9de7 7.0.3: android 381, desktop 164, ios 359 2026-09-26 14:28:35 +00:00