Skip to content

feat(verify): verify push command - #48

Draft
mahmoud-elmorabea wants to merge 22 commits into
verify-07-push-recordfrom
verify-08-push-command
Draft

mahmoud-elmorabea wants to merge 22 commits into
verify-07-push-recordfrom
verify-08-push-command

Conversation

@mahmoud-elmorabea

Copy link
Copy Markdown
Contributor

Adds the verify push command itself, its README section, and the contract doc for agents building on it.

Part 8 of 8 of verify push, stacked on #47.

🤖 Generated with Claude Code

mahmoud-elmorabea and others added 22 commits October 16, 2026 22:12
The verify push command: options, consent, the iOS and Android flows that
climb the chosen depth, and its README section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What the Customer.io skills, dashboard prompt, docs and backend can rely on: the command, consent, exit codes, report fields and causes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Both flows pass their platform, and the key the SDK on the device runs
  with; iOS also passes the extension's key read from its sources.
- The contract doc: the regenerated cause appendix, the new API calls, and
  what the tool reads of a wrapper app. The README says Android needs a
  debuggable build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… yet

Both flows hand Profile linked a way to bring the app to the foreground, and
the contract says to keep the app open for about 30 seconds after logging in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tores can't answer

When the device's stores can't say the token or the user, the run takes them from --token
and --user, else starts the app and reads the SDK's sdk.state line from its log (an SDK
with the verify contract writes one each time it starts), else, for a user the SDK
identified, from the profile's one device for this platform and app in Customer.io. The
SDK's version goes to the delivered matrix, and the key check knows whether the key was
read where this SDK version keeps it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/sdk-canary.js looks for the fixed part of every SDK sentence and store name the
tool reads (on_device/markers.ts) in each SDK's latest release and its main branch, and
fails naming any that is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ntract

The contract doc lists the SDKs' key tails, the sdk.state line, the log level from
launch, the sentences read for older SDKs (with Android's opened line as it really is),
where the lines come from, every store read and which ones are contract, the version
sources, and the supported SDK versions; the cause appendix is regenerated (84). The
README and the doc list --user and --token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every earlier rung's blocker ended the run, but a blocker on the last
rung, such as a token the profile doesn't hold, still went on to send
real pushes. Both flows now stop there, as the contract says.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant