Add Details/Summary components and improve code blocks#381
Merged
futurepaul merged 11 commits intosledtools:masterfrom Mar 3, 2026
Merged
Add Details/Summary components and improve code blocks#381futurepaul merged 11 commits intosledtools:masterfrom
futurepaul merged 11 commits intosledtools:masterfrom
Conversation
- Add Details and Summary to the hypernote component catalog - Render Details as a collapsible disclosure on iOS (custom button) and Android (AnimatedVisibility) with full-row tap target - Update code block rendering with a top bar showing language name and a copy-to-clipboard button with "Copied" toast feedback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add hn:details and hn:codeblock probe handlers to pika-e2e-bot - Add accessibility identifiers (iOS) and test tags (Android) to DetailsDisclosure and CodeBlockView components - Add testE2E_hypernoteDetailsAndCodeBlock to iOS and Android E2E suites - Wire up new iOS test in ui-e2e-local -only-testing list - Fix x86_64 linker failure by adding EXCLUDED_ARCHS=x86_64 to xcodebuild Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The pikahub E2E infrastructure uses `pikachat bot` (Rust), not `tools/pika-e2e-bot` (shell). The Rust bot only handled bare `ping` and `openclaw: reply exactly` protocols, missing the `ping:<nonce>` format that the iOS/Android E2E tests use. - Add ping:<nonce> -> pong:<nonce> to parse_openclaw_prompt - Add pika-e2e:<nonce> legacy alias - Add hn:details and hn:codeblock hypernote probe handlers - Keep bot loop running for multiple probes (only exit on E2E_OK_*) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolve conflict in tools/ui-e2e-local: master refactored the E2E runner into pikahut Rust integration tests. Take master's version and add EXCLUDED_ARCHS=x86_64 + hypernote test to the Rust scenario. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GroupInfoView.swift:279 used the iOS 17+ two-parameter onChange closure which broke the build on iOS 16 deployment target. Switch to the existing onChangeCompat helper. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
65d0657 to
742679b
Compare
- cap nostr recv waits to 1s per message while preserving overall deadlines\n- keep bot subscribed for additional welcomes with lookback to handle backdated giftwraps\n- add optional local relay event logging and enable it in pikahut fixture\n- route dev-tool profile-cache wipe action and improve hypernote accessibility hooks\n- reduce local iOS E2E step waits to 10s for faster failure feedback
- record simulator video during iOS local UI E2E runs\n- record emulator screen during Android local UI E2E runs\n- pull captured mp4 files into scenario artifact directories\n- include captured videos in ScenarioRunOutput artifacts when present\n- gate behavior with PIKA_UI_E2E_RECORD_VIDEO=1
- make copied feedback render as a visible tagged row instead of fixed-size IconButton content\n- update android E2E helper to wait for any displayed tagged node\n- resolves flaky/failing hypernote copied assertion in local deterministic android UI E2E
- finalize iOS/Android recording processes gracefully so mp4 files are playable\n- write recordings to gitignored root screen_recordings/ with timestamped filenames\n- replace old iOS relay investigation doc with a how-to for UI E2E with video flags\n- restore AGENTS.md intro guidance from master (agent-brief lines)
Collaborator
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR started as a Hypernote UI feature change and expanded into a full local UI E2E stabilization pass across iOS + Android.
It now includes:
Details/Summarysupport on iOS and Android.Hypernote Feature Work
Added components
Details+Summaryrendering on iOS and Android.Test affordances
hn:details+hn:codeblockprobes.iOS Swift Fixes (post-merge breakage)
A merge left iOS dev-tool wiring in an inconsistent state; this PR fixes that:
MyNpubQrSheet/ChatListView/ContentViewplumbing for the new callback.E2E Failure Saga + Fixes
What was failing
just ios-ui-e2e-localand related local deterministic flows were flaky or timing out (often at long 180s waits), even though manual behavior looked mostly fine.Root causes we found
since(now), which can miss backdated NIP-59 giftwrap events.Harness + test fixes
since(now - lookback)), so backdated giftwraps are still seen.PIKA_RELAY_LOG_EVENTS=1in relay binary.Android-specific test fixes
Compile break in CI
CI failed on unresolved
assertDoesNotExistin androidTest. Fixed by replacing it with a compatibility-safe helper based ononAllNodesWithTag(...).fetchSemanticsNodes().Hypernote runtime failure
e2e_hypernoteDetailsAndCodeBlockthen failed at copied-indicator assertion.Root cause:
IconButtoncontent slot, so the tagged copied text was not reliably a displayed node.Fix:
HYPERNOTE_CODEBLOCK_COPIEDtag (outside the constrained icon-only slot).UI E2E Video Recording (theoretical + implementation)
Video recording is now wired into deterministic local UI E2E harness runs, gated by env var:
PIKA_UI_E2E_RECORD_VIDEO=1KEEP=1Behavior:
xcrun simctl io <udid> recordVideo, stops at test completion, stores MP4 under scenario artifacts.adb shell screenrecord, stops/pulls MP4 at test completion, stores MP4 under scenario artifacts.ScenarioRunOutput.artifactsand included in summary metadata/artifacts.Note: recording is optional and off by default.
Validation
Representative local validations run during this saga:
just ios-ui-e2e-localpassing after harness/iOS timeout fixes.nix develop -c ./android/gradlew -p android :app:compileDebugAndroidTestKotlinpassing after androidTest API fixes.nix develop -c env KEEP=1 PIKA_ANDROID_E2E_TEST_CLASS='com.pika.app.PikaE2eUiTest#e2e_hypernoteDetailsAndCodeBlock' just android-ui-e2e-localpassing after copied-indicator fix.Commits of note in this branch
920fe1fStabilize local iOS E2E relay flow and tighten step timeoutsb115a04fixing android e2e ui test (compile API compatibility)6f100d9Add optional UI E2E video capture for iOS and Android