Repository navigation
Add subtext-device skill: Subtext layer for sightmap device - #40
Open
chandlervdw wants to merge 9 commits into
Open
chandlervdw wants to merge 9 commits into
chandlervdw wants to merge 9 commits into
Conversation
Driving the iOS Simulator moved upstream as `sightmap device` (sightmap/sightmap#522). This keeps only the Fullstory side: how SDK data reaches agents, capture requirements, finding the session URL and session end in the console, and the concurrent producer/consumer workflow. Carries the prototype's plan and field notes into docs/subtext-device/. Supersedes #39. The vendored sightmap-device skill follows once a sightmap release includes `sightmap device`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
Explain that wrapper testIDs don't reach iOS accessibility, so device corpora use leaf selectors; run review-open/zoom/close in sequence; and record the acceptance run and post-MVP backlog in the field notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
…ogether Lead with the Fullstory session for attribution (which tap and screen caused each request) and `sightmap device network` for exact routes, headers and bodies, joined by time, method and URL; degrade to either alone, then to the summary source. Redaction and field-paths-only rules for local capture; record session URLs and ends with `run note`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
Before a simulator run, ask whether it should record a session to Fullstory, defaulting to no. For a local-only run, install a copy of the built app with RecordOnStart=false and ServerUrl pointed at an unreachable local address, re-signed with its entitlements, verify no session starts, and work from `sightmap device network` alone. Verified on the SwiftUI sample: no session, no uploads, no contact with Fullstory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
CODE_SIGNING_ALLOWED=NO drops the __TEXT,__entitlements section, so the SDK's background uploads fail with NSURLErrorDomain -1. Name the flag, the otool check, and the rebuild fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
Co-authored-by: Indent <noreply@indent.com> Signed-off-by: Chandler Van De Water <chandler@fullstory.com>
…ulator and in review Review's lidar tree carries an accessibilityIdentifier as the view's id, so [identifier=...] and [testid=...] selectors match in sightmap device but name nothing in review-snapshot. Also note that SwiftUI content records as anonymous swiftui layers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
View-scoped components don't apply in review for mobile sessions yet (page URL is the view-controller name), so corpora that must serve review use global components with per-screen memory; a UIBarButtonItem's id repeats on its wrapper views; wait ~3 s before backgrounding so the last taps upload. Recorded in the field notes, with the click-after-modal issue routed to sightmap device. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Chandler Van De Water <chandler.vdw@gmail.com>
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.
What
Adds
skills/subtext-device/, the Subtext layer for driving a native iOS or React Native app in the local iOS Simulator. The Simulator tool itself lives upstream and stays vendor-neutral:sightmap device(sightmap/sightmap#522) andsightmap device network(sightmap/sightmap#523). This skill covers only what Subtext adds on top.RecordOnStart = falseandServerUrlpointed at an unreachable local address, re-signed with its entitlements kept. It confirms no session started, then works from local capture alone. The user's project is never edited, and the question is asked every run.review-*) gives attribution: which tap and screen caused each request.sightmap device networkgives detail: full URL, headers and bodies, live and free.summarysource only, whererequests:can't be authored and the report says so.review-openreads at 10 credits each;review-zoomgrains:machinefor endpoint names,detailfor headers.get-task-allow) for full local capture;sightmap device console list --grep fullstory.com/ui/(newest wins), and detecting session end from the SDK's termination lines (206 / 202 /capture is terminated). Both are recorded in the run log withrun note --kind session/--kind session-ended.references/producer-consumer.md):network list --since/--followcontinuously and spendsreview-opencredits only on attribution;review-open→review-zoom→review-closerun in sequence;.sightmap/.device-runs/<run>.consumer.md;.sightmap/sections is split, with a credit budget and ~30 s pacing.properties:, and captured values never go into.sightmap/, the run log or reports.testIDs don't reach iOS accessibility, so device corpora use leaf selectors.Markdown only. Also included:
subtext-using-subtext;subtext-setup-plugin;docs/subtext-device/: a short PLAN.md describing the split, and FIELD-NOTES.md with the prototype history, the acceptance run, the network-source ranking and the local-only verification;minorchangeset.Supersedes #39, which shipped its own prototype tool (
subtext-sim) inside the skill.Merge blocker
This PR does not bump the
@sightmap/sightmappin, runnpm run vendor-skills, or hand-writeskills/sightmap-device/. Those are generated and need a sightmap release that includessightmap deviceandsightmap device network. Until thensubtext-devicenames a prerequisite skill that isn't bundled.Dependencies
sightmap device) merged.sightmap device network, stacked on #522) merged, then a sightmap release containing both.npm install --save-dev --save-exact @sightmap/sightmap@<version>), runnpm run vendor-skills, and addsightmap-deviceto the README's vendored-skills list.subtext-doctor) merged, for the doctor link. Both PRs touch the same skill lists in the README,subtext-setup-pluginandsubtext-using-subtext, so whichever lands second needs a small rebase.Upstream gaps
Resolved in #522 since this PR opened:
console list --since/--follow, and reporting of entries dropped from the 5,000-entry buffer;run notefor session markers;relaunch.By design,
sightmap devicehas nosession-urlcommand: finding the Fullstory session is Subtext's job, done with a console grep.Testing and field history
Prototype (closed Add subtext-ios-sim: local iOS Simulator loop (preview) #39): built and tested on a development Mac against a SwiftUI sample, then field-tested twice on a second Mac against a real Expo / React Native app.
testidaliasing, session-URL parsing, concurrent producer/consumer, and session-end detection after HTTP 206s on large view trees.sightmap deviceacceptance run on the same app: install, doctor, start, corpus (100% coverage with a leaf-selector corpus), concurrent producer/consumer and network all passed. Act and snapshot blockers were fixed upstream, and a final re-check is pending.Network sources, ranked by spikes on iOS 26.2:
xctracehangs against the simulator. Full table in FIELD-NOTES.md.Local-only default, verified on the SwiftUI sample built with the SDK: no session, no upload tasks, and no contact with Fullstory over a full upload interval. The
ServerUrlbackstop and the React Native / Expo path are untested.Open Fullstory-side issues: duplicated network events,
detailreturning response headers only, and network data lagging 35 s to 2 min.Field validation (Oct 30, 2026)
The current skill was run end to end on a real Expo / React Native app (iOS Simulator, iOS 26.2) on another Mac.
Recording run (passed):
properties:found from local bodies;validateclean;Local-only run (passed): the re-signed copy launched, no session URL appeared after 2 min, nothing was sent to Fullstory, and
harcapture was active.The run found ten skill-text gaps, fixed in this PR: which re-sign form fails, stalled sessions with no termination line, first-open failures before the first bundle, duplicate requests in both sources, checking
get-task-allow, apps whose Debug builds record to production, adding properties to a named route,--sinceon the termination check, React Native screen attribution, and host-lesssummaryrequests.Still unexercised: the
ServerUrlbackstop, and the exact wording of the ask-first question.🤖 Generated with Claude Code