tests: end-to-end messaging regression #71
No reviewers
Labels
No labels
prio_critical
prio_low
type_bug
type_contact
type_issue
type_lead
type_question
type_story
type_task
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
lhumina_code/hero_os!71
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "development_add_messaging_e2e_test"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Adds an end-to-end Playwright regression for the messaging archipelago. Single combined test so the WASM bundle boots only once (~70s end-to-end).
What it covers
1970/00:00in the chat listhero_archipelagos#44,#55DM with <pubkey>— list + chat headerhero_archipelagos#54list_messages+conversation.get+mark_as_read) and zerochatmessage.get— confirms the N+1 fixhero_archipelagos#53,hero_osis#26mark_as_readinvoked on open; unread badge clearshero_archipelagos#49hero_archipelagos#45hero_archipelagos#47hero_archipelagos#50HH:MMis within 2 minutes of wall clock (verifies the server-sidecreated_atstamp)hero_osis#25,hero_archipelagos#44hero_archipelagos#48+actually moves a contact into Participantshero_archipelagos#46Notes
helpers.tsnow honoursHERO_OS_URLso the same spec can target a remote instance via SSH tunnel or a local dev server; defaults tohttp://127.0.0.1:39988/hero_os/ui.tests/e2e/screenshots/added to.gitignore.hero_archipelagos#56andhero_osis#27being deployed to the target instance; without them the assertions correctly fail.Test plan
npx playwright test messaging.spec.ts— all assertions pass against the herodev deployment of both companion PRsdevelopmentThe WindowRoute contract doc (web_embed skill) promises that clicks on the host chrome's breadcrumb chips and action buttons round-trip back to iframe islands as hero:breadcrumb / hero:action postMessages — the JS helper (hero-window-route.js) subscribes exactly to those. The host was calling the native Rust callback but never posting to iframes, so iframe islands couldn't receive clicks. post_click_to_iframes walks up from the click target to the enclosing window container (.window-shadow[-focused] / .island), finds all child iframes, and posts { type, id } to each. Safe to call unconditionally: native islands don't have iframes (no-op); iframe islands' native callback isn't registered (the old path no-ops). One click now covers both kinds. Closes the last skill→code gap for issue #35. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>e62198e34674f601b460