iOS App Store Submit
ZestfulPulse/ios-app-store-submit
Build, sign, and submit a Flutter/iOS app to the App Store Connect — covers Xcode archive/export, code signing (including headless-Mac keychain workarounds), the asc CLI for App Store Connect…
Prepare, publish, monitor, and verify a Maple release from current master.
$ npx skills add MaplePrivacyLabs/Maple --skill release-maple -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MaplePrivacyLabs/Maple release-maple --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/MaplePrivacyLabs/Maple.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release-maple .claude/skills/release-maple && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release-maple" agent skill from https://github.com/MaplePrivacyLabs/Maple/tree/master/.agents/skills/release-maple into .claude/skills/release-maple/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-maple", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/MaplePrivacyLabs/Maple/tree/master/.agents/skills/release-mapleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add MaplePrivacyLabs/Maple --skill release-maple -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MaplePrivacyLabs/Maple release-maple --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MaplePrivacyLabs/Maple.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/release-maple .agents/skills/release-maple && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-maple" agent skill from https://github.com/MaplePrivacyLabs/Maple/tree/master/.agents/skills/release-maple into .agents/skills/release-maple/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-maple", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MaplePrivacyLabs/Maple --skill release-maple -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MaplePrivacyLabs/Maple release-maple --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MaplePrivacyLabs/Maple.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/release-maple .cursor/skills/release-maple && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release-maple" agent skill from https://github.com/MaplePrivacyLabs/Maple/tree/master/.agents/skills/release-maple into .cursor/skills/release-maple/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-maple", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/MaplePrivacyLabs/Maple.git --path .agents/skills/release-maple--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add MaplePrivacyLabs/Maple --skill release-maple -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MaplePrivacyLabs/Maple release-maple --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MaplePrivacyLabs/Maple.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/release-maple .gemini/skills/release-maple && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release-maple" agent skill from https://github.com/MaplePrivacyLabs/Maple/tree/master/.agents/skills/release-maple into .gemini/skills/release-maple/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-maple", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install MaplePrivacyLabs/Maple release-mapleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add MaplePrivacyLabs/Maple --skill release-maple -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/MaplePrivacyLabs/Maple.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/release-maple .github/skills/release-maple && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release-maple" agent skill from https://github.com/MaplePrivacyLabs/Maple/tree/master/.agents/skills/release-maple into .github/skills/release-maple/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-maple", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MaplePrivacyLabs/Maple --skill release-maple -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install MaplePrivacyLabs/Maple release-maple --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MaplePrivacyLabs/Maple.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/release-maple .opencode/skills/release-maple && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release-maple" agent skill from https://github.com/MaplePrivacyLabs/Maple/tree/master/.agents/skills/release-maple into .opencode/skills/release-maple/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-maple", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
release-maplePrepare, publish, monitor, and verify a Maple release from current master.
Release Maple is an agent skill from MaplePrivacyLabs/Maple. Prepare, publish, monitor, and verify a Maple release from current master. Use when asked to bump a release version, cut or create a GitHub release, verify signed artifacts and updater metadata, monitor downstream publication, or prepare an explicitly authorized App Store, TestFlight, Google Play, or billing-API handoff.
Its SKILL.md is about 5.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `agents/openai.yaml`, `scripts/ci_evidence.py` and `scripts/preflight.sh`).
It sits in Mobile, covering App store release. It works with App Store Connect, GitHub and iOS. The repository describes itself as: Maple - Private AI Chat. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit f8ab3e5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 3 files in scripts/ (Python and Shell), which the agent can run.
Shell commands in SKILL.md call:
ghjqnixgitcurljustcargoFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
updates.trymaple.aigithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release Maple loads about 5.5k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 2,371 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from MaplePrivacyLabs/Maple at commit f8ab3e5, republished under its MIT licence (© MaplePrivacyLabs). 2,371 words, ~5,494 tokens.
.claude/skills/release-maple/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Treat every release step as a production action. Do not use this workflow for routine validation. Before a write, state the exact repository, version, tag, commit, external effect, and authority provided by the user.
master starts production-shaped desktop, Android, iOS, web,
frontend, and Rust workflows. The iOS master workflow uploads its verified
IPA to TestFlight automatically.Mobile App CI serializes production iOS build/export, verification, and
upload so concurrent master pushes cannot reuse an export-assigned build
number. Its master-only manual dispatch forces a fresh build even without
app changes. After a duplicate-build rejection, dispatch this full workflow
from master; retrying only submission reuses the rejected IPA's build number.Maple Dev TestFlight workflow also builds every master
push and uploads the distinct cloud.opensecret.maple.dev application for
internal testing against the existing development services. Manual dispatch
accepts master only. Its app identity, credentials, artifact verification,
internal group setup, and retry contract are documented in
Maple Dev on TestFlight.Promote Pages production advances the
branch for native Cloudflare builds by default; when repository variable
MAPLE_PAGES_PRODUCTION_ENABLED=true, Publish Pages uploads the verified
existing release web artifact instead. Read
the Pages publisher architecture for
its source contract. Mode activation, environment administration, and
Cloudflare build controls belong to a separately authorized operator procedure.maple-proxy archives and
their checksum manifest. Never create a separate proxy Release or proxy tag;
/releases/latest must continue to identify the Maple application release.maple-sdk or maple-proxy to
crates.io. A successful stable release starts a non-gating GHCR sibling that
builds only for a new or missing non-baseline proxy version. It treats exact
version tags as immutable, verifies release provenance and container inputs,
and repairs minor, major, and latest aliases without rebuilding an existing
exact image. Version 0.3.3 is the explicit unbackfilled migration baseline.
The container remains separately versioned at
ghcr.io/mapleprivacylabs/maple-proxy.Never push or merge master, create a release, retry a workflow, upload to a
store, submit for review, or alter a rollout merely to see whether it works.
Before creating a new release, verify that repo.meta.json identifies
MaplePrivacyLabs/Maple as the canonical repository. Keep the existing updater
Worker serving its deployed metadata until the first normal new-org release.
Do not manually republish retained v3.3.10 updater metadata: its asset URLs use
OpenSecretCloud/Maple, while the publisher and new Worker correctly require
the current canonical owner. The next release generates new-owner URLs without
changing the legacy updater fallback compiled into existing clients.
The first eligible proxy container publication initializes
ghcr.io/mapleprivacylabs/maple-proxy with a manual Publish proxy container
run from master and bootstrap_only=true. This validates the current release
and uploads only content-addressed images, without version or alias tags. It
does not treat failed package enumeration as an empty inventory. GitHub creates
new packages privately; make that package public in its settings, retain Maple
Actions write access, then rerun only the proxy publisher with both manual
inputs disabled. For read-only API diagnosis, use diagnostics_only=true;
its success reports completed observations, not publication readiness. Do
not create another release, change proxy versions, or overwrite exact tags to
repair package visibility. Existing old-namespace images receive no updates.
Prepare the bump on a clean focused branch based on current origin/master;
do not switch another worktree to master or force its owning worktree off
that branch. Compare the checked-in version with the latest release:
git fetch origin master
git merge-base --is-ancestor origin/master HEAD
current_version="$(nix develop --no-update-lock-file .#ci -c just get-version | tail -n 1)"
released_version="$(gh api repos/MaplePrivacyLabs/Maple/releases/latest --jq '.tag_name | ltrimstr("v")')"
printf 'current=%s released=%s\n' "$current_version" "$released_version"If current_version is newer, retain that pending version unless the user
explicitly chooses a different target. For example, a requested 3.4.0
replaces a pending 3.3.11; a generic request to release does not trigger
another bump. The chosen target must still be newer than the published release.
If versions are equal, establish the intended next version. Proceed when the user names an exact version or patch/minor/major level. If the user delegates the choice, use patch; do not infer minor or major from commits.
On a focused branch, run exactly one repository helper:
nix develop --no-update-lock-file .#ci -c just update-version X.Y.Z
nix develop --no-update-lock-file .#ci -c just bump-patch
nix develop --no-update-lock-file .#ci -c just bump-minor
nix develop --no-update-lock-file .#ci -c just bump-majorReview all manifest, Apple project, Android version-code, and
apps/maple-research/frontend/src-tauri/Cargo.lock changes. Run the applicable Maple validation
gates and submit the isolated bump through normal review when authorized.
Do not use just release; it creates a local tag before the reviewed GitHub
flow.
After the bump merges, use or create a clean worktree on master. If another
worktree already owns that branch, use its checkout instead of forcing or
stealing it. Pull with --ff-only and wait for the required CI evidence.
Release only current master; preflight verifies it again.
Run the bundled fail-closed preflight from the repository root:
preflight="$(.agents/skills/release-maple/scripts/preflight.sh)"
printf '%s\n' "$preflight" | jq .
tag="$(printf '%s' "$preflight" | jq -r .tag)"
previous_tag="$(printf '%s' "$preflight" | jq -r .previous_tag)"
head_sha="$(printf '%s' "$preflight" | jq -r .head_sha)"The script requires a clean current master, exact manifest version parity, a
newer version and unused tag, and successful executed master-push CI jobs.
CodeQL must run on the exact release commit. Research test/build evidence may
come from an ancestor only when the complete Git tree diff contains exclusively
independent Agent, documentation, agent guidance, or release-gate test-harness
changes. Unknown paths and changes to Research, SDK, proxy, shared scripts,
workflows, or Nix require fresh evidence. Skipped builds never count as build
proof; the helper searches a bounded workflow history and rejects newer failures,
pending runs, missing jobs, changed inputs, and non-ancestors. The returned
ci_evidence records each actual run, tested SHA, and whether it was reused.
Preflight also rechecks master after collecting evidence. Stop on any failure; correct it through the normal reviewed process.
Never overwrite or move a release tag.
Review the SDK consumer version policy
for the clients being released. Record the frontend's selected SDK from its
manifest/lockfile and each Rust consumer's resolved version/source using the
policy's cargo metadata --locked command. Local links are allowed. If those
clients will ship unpublished SDK changes, recommend publishing the SDK and
pinning those consumers first; an intentional local-source release can proceed
with the exact monorepo commit recorded. Unrelated SDK source changes do not
require a pinned client to upgrade, and this preference adds no release gate.
When preparing an enclave trust or PCR rotation change, review both browser
consumers' embedded fallbacks against the approved development and production
histories: apps/maple-research/frontend/src/config/openSecretClientConfig.ts
and apps/maple-auth/src/config/openSecretClientConfig.ts. Verify each affected
app's combined app-provided and pinned-SDK roots support its intended approved
enclave measurements when signed-history fetching is unavailable, preserving
development/production separation. Record affected artifacts and any pending rollout
in the handoff. Auth owns a separate SDK pin and publisher: refreshing Research
does not update Auth, and an Auth publication remains a separately authorized
operation under the Pages guide.
This is a compatibility review of each consumer, not a requirement to keep their
lists byte-identical or release them together.
Record the proxy version and inspect its own runtime inputs since previous_tag:
proxy_version="$(sed -n 's/^version = "\([^"]*\)"/\1/p' proxy/Cargo.toml | head -n 1)"
git diff --name-only "$previous_tag".."$head_sha" -- proxy
printf 'proxy_version=%s\n' "$proxy_version"Inspect the proxy's manifest and lockfile at both revisions. Include changes
under sdk/rust in its runtime comparison when either revision uses that local
SDK. With registry dependencies at both revisions, compare the selected SDK
versions/checksums in proxy/Cargo.lock; unrelated sdk/rust edits are not
proxy runtime changes. The embedding app's SDK selection is separate from the
standalone proxy's lockfile.
If consumed runtime inputs changed without a proxy version change, stop and make the version decision explicit before publishing. A normal Maple Release always builds the checked-in proxy version, but that does not implicitly authorize a crates.io or GHCR publish.
Preview GitHub's generated notes:
gh api --method POST repos/MaplePrivacyLabs/Maple/releases/generate-notes \
-f tag_name="$tag" \
-f target_commitish="$head_sha" \
-f previous_tag_name="$previous_tag" | jq -r '.name, .body'Confirm the notes span the intended changes and recheck that head_sha is
still origin/master. GitHub's generated body is changelog input, not a
complete public release description. Draft a concise user-facing summary and
highlights from the exact release diff, place them above the generated notes,
and review the complete Markdown in a temporary notes_file. Do not publish a
PR-list-only description when the release has meaningful product changes.
Present the tag, commit, previous tag, and final notes to the user before
creating the release unless the current request already gives unambiguous
authority for that exact release.
Create the GitHub Release exactly once. This creates the tag in the same flow:
gh release create "$tag" \
--repo MaplePrivacyLabs/Maple \
--target "$head_sha" \
--title "$tag" \
--notes-file "$notes_file"Do not create or push a local tag first. Record the release URL and confirm the
release and workflow resolve to head_sha.
Find and watch the new Release run:
gh run list --repo MaplePrivacyLabs/Maple --workflow Release --event release \
--commit "$head_sha" --limit 10 \
--json databaseId,displayTitle,headSha,status,conclusion,url
gh run watch RELEASE_RUN_ID \
--repo MaplePrivacyLabs/Maple --exit-status --compactStay with every platform build, signature/canonical proof, artifact upload,
the four native proxy builds and their published-asset verification, updater
latest.json, aggregate verification, and verification-guide step.
Packaging success alone is not runtime smoke; inspect the workflow's actual
verification and attestation results.
After Release succeeds, inspect the two required publication handoffs. Do
not rerun the core Release to repair either sibling:
gh run list --repo MaplePrivacyLabs/Maple --workflow 'Publish updater metadata' \
--limit 10 \
--json databaseId,status,conclusion,headSha,createdAt,url
pages_workflow='Promote Pages production'
pages_enabled="$(gh variable list --repo MaplePrivacyLabs/Maple --json name,value \
--jq '.[] | select(.name == "MAPLE_PAGES_PRODUCTION_ENABLED") | .value')" || exit 1
if [ "$pages_enabled" = true ]; then
pages_workflow='Publish Pages'
fi
gh run list --repo MaplePrivacyLabs/Maple --workflow "$pages_workflow" \
--limit 10 \
--json databaseId,status,conclusion,headSha,createdAt,urlBoth publishers execute trusted master, which can be newer than the release. Identify the updater run by its validated release tag and source, and the Pages run by its production job's validated source SHA. Do not filter either by the workflow checkout SHA; preview publication uses the same Pages workflow name.
Also inspect the independent proxy-container publisher. It should either prove
the expected immutable proxy version, public AMD64/ARM64 manifest, per-platform
provenance, and aliases; publish a missing eligible version; or explicitly skip
the unbackfilled 0.3.3 baseline. Retry it with manual dispatch; never create a
proxy tag or Release and never rerun the core Release to repair it:
gh run list --repo MaplePrivacyLabs/Maple --workflow 'Publish proxy container' \
--limit 10 \
--json databaseId,status,conclusion,headSha,createdAt,urlThe updater workflow must publish the original verified latest.json and its
matching Research installer catalog before reporting distribution current.
Its public check proves byte-identical Tauri metadata and all six GET/HEAD
installer redirects; marketing follows the stable URLs without a redeploy.
Treat incomplete assets, provenance failures and blocked download routes as
publication failures, not reasons to alter updater metadata or weaken checks.
Use the updates service guide for its
one-time rollout and recovery boundaries. In legacy Pages mode, a successful
promoter proves only the pages-production ref mutation; verify Cloudflare's
separate build result. In owned-publisher mode, require the production job in
Publish Pages to succeed: it validates the release asset, uploads without a
rebuild, checks CF stage/commit/active canonical deployment, and then advances
the ref without force. Neither result proves browser login/chat or configuration.
Report and repair sibling failures without altering completed release artifacts.
Confirm the production ref in either mode:
pages_sha="$(gh api repos/MaplePrivacyLabs/Maple/git/ref/heads/pages-production --jq .object.sha)"
[[ "$pages_sha" == "$head_sha" ]]In legacy mode only, inspect Cloudflare's exact-commit check:
gh api "repos/MaplePrivacyLabs/Maple/commits/$head_sha/check-runs" --jq '
[.check_runs[]
| select(.name == "Cloudflare Pages")
| select(.app.name == "Cloudflare Workers and Pages")
| {status, conclusion, started_at, completed_at, details_url}]'Require the successful Cloudflare check for the production-branch promotion,
not an older preview check on the same commit. In owned-publisher mode, inspect
the Publish Pages production job summary and GitHub deployment instead; the
old Cloudflare App check is no longer produced by this path. The summary names
the deployment ID and SHA. A failed post-upload freshness/ref/status check can
leave a new CF deployment already active: inspect actual canonical state before
retrying, and follow the deployment guide's hold/rollback procedure.
A raw curl from an automated VM may be denied by edge policy. An allowed-browser
smoke is separate application evidence; do not turn an edge-policy 403 into a
release failure. Once owned publishing is enabled, manually dispatch
Publish Pages from master to retry the current verified stable release; never
recreate a Release or rerun the core release merely to repair Pages.
On failure, read the failed logs before acting:
gh run view RELEASE_RUN_ID --repo MaplePrivacyLabs/Maple --log-failedRetry only a terminal failure proven to be transient infrastructure trouble:
gh run rerun RELEASE_RUN_ID --repo MaplePrivacyLabs/Maple --failedDo not classify version/proof mismatches, deterministic builds, signing failures, missing credentials, or integrity checks as transient. Do not delete or recreate a published release without separate explicit direction.
Verify the published release and its assets:
gh release view "$tag" --repo MaplePrivacyLabs/Maple \
--json tagName,name,isDraft,isPrerelease,publishedAt,targetCommitish,url,assets
mkdir -p artifacts
gh release download "$tag" --repo MaplePrivacyLabs/Maple --dir artifacts
nix develop --no-update-lock-file .#ci -c \
./scripts/ci/verify-release-artifacts.sh artifacts proxyConfirm the release contains all four stable proxy archives and
maple-proxy-release-final.sha256, and that their attestations and the
published-asset verification job succeeded. Report the embedded proxy version
separately from the Maple application version. Do not report crates.io as
updated unless its independent manual publisher was explicitly authorized and
verified. Report GHCR as published only after its sibling workflow and anonymous
manifest verification succeed; otherwise report the unchanged-version skip or
failure separately.
Verify that the hosted updater serves the same metadata as the GitHub Release:
updater_dir="$(mktemp -d)"
curl --fail --silent --show-error --location --max-time 20 \
https://updates.trymaple.ai/latest.json >"$updater_dir/hosted.json"
curl --fail --silent --show-error --location --max-time 20 \
https://github.com/OpenSecretCloud/Maple/releases/latest/download/latest.json \
>"$updater_dir/github.json"
jq -e --arg version "$version" '.version == $version' \
"$updater_dir/hosted.json" "$updater_dir/github.json"
jq -S . "$updater_dir/hosted.json" >"$updater_dir/hosted.canonical.json"
jq -S . "$updater_dir/github.json" >"$updater_dir/github.canonical.json"
cmp "$updater_dir/hosted.canonical.json" "$updater_dir/github.canonical.json"Do not report updater publication complete from workflow status alone: require the public endpoint to return the intended version and content.
Zapstore starts only after Release succeeds and is strictly best effort. Its
queued, running, skipped, or failed state must not delay release completion,
trigger a release retry, or be reported as a Maple release failure. Inspect it
only when Zapstore status is specifically useful:
gh run list --repo MaplePrivacyLabs/Maple --workflow 'Publish to Zapstore' \
--commit "$head_sha" --limit 10 \
--json databaseId,status,conclusion,headSha,createdAt,urlDo not retry or repair Zapstore as part of the Maple release flow. A separate explicit request may authorize investigating or retrying Zapstore itself.
Do not call the core repository release complete while its required Release
workflow is queued or running. Report updater publication and Pages production
as separate downstream states. Zapstore is not a required release workflow.
Apple and Google actions remain manual production operations. Do not open a store console, choose a track, add testers, upload a build, answer compliance questions, submit for review, release an approved version, or change a rollout without explicit authorization for that exact action.
For an authorized handoff:
vX.Y.Z version. Any service-side version-gate
change or deployment is outside this repository and requires its own
reviewed workflow and authority.Keep time-specific build numbers, review outcomes, blockers, and rollout facts in the release handoff or issue that owns them, not in this evergreen skill.
Report the Maple version, proxy version, tag, exact commit, release URL, main workflow URL and attempt count, application and four-proxy-archive verification results, any required-workflow retry and supporting evidence, authorized store/API actions, and every boundary that remains unverified. State crates.io and GHCR status separately. If Zapstore was inspected, report its status as non-gating. Separate repository release completion from store distribution and live application availability.
© MaplePrivacyLabs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in .agents/skills/release-maple of MaplePrivacyLabs/Maple.
Open the folder on GitHubat commit f8ab3e5
Release Maple next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release Maple this skillMaplePrivacyLabs/Maple | 100 | — | ~5.5k | Automated safety check: Pass | MIT | |
| iOS App Store SubmitZestfulPulse/ios-app-store-submit | 142 | — | ~4.7k | Automated safety check: Pass | MIT | |
| Release Asc CLIrorkai/App-Store-Connect-CLI | 7.7k | — | ~2.4k | Automated safety check: Pass | MIT | |
| App Store Release Flowrorkai/app-store-connect-cli-skills | 1.1k | 2 repos | ~2k | Automated safety check: Pass | MIT | |
| App Store Submission Healthrorkai/app-store-connect-cli-skills | 1.1k | 2 repos | ~2.2k | Automated safety check: Pass | MIT | |
| App Store Preflight Skillstruongduy2611/app-store-preflight-skills | 1.4k | — | ~1.4k | Automated safety check: Pass | MIT |
ZestfulPulse/ios-app-store-submit
Build, sign, and submit a Flutter/iOS app to the App Store Connect — covers Xcode archive/export, code signing (including headless-Mac keychain workarounds), the asc CLI for App Store Connect…
rorkai/App-Store-Connect-CLI
Publish and verify a new release of the App-Store-Connect-CLI repository.
rorkai/app-store-connect-cli-skills
Orchestrates App Store releases with the asc CLI: staging a version, uploading or building, publishing and submitting for review, with dry-run and confirmation gates.
rorkai/app-store-connect-cli-skills
Diagnoses why an App Store version cannot be submitted or is stuck in review, using the asc CLI for validation, repair routing, status checks and retry decisions.
truongduy2611/app-store-preflight-skills
Scan an iOS/macOS Xcode project for common App Store rejection patterns before submission.
rorkai/app-store-connect-cli-skills
Creates a new App Store Connect app record by driving the New App form through browser automation, for cases where no public API covers app creation.
MaplePrivacyLabs/Maple
Implement ordinary Research client features and fixes in React/Vite/Tauri, including its web, desktop, and mobile paths.
MaplePrivacyLabs/Maple
Develop and review the maple-proxy Rust crate, binary, container, and OpenAI-compatible HTTP behavior under Maple's proxy directory.
MaplePrivacyLabs/Maple
Develop and review the Maple TypeScript/React and Rust SDKs under Maple's sdk directory.
MaplePrivacyLabs/Maple
Review security-sensitive OpenSecret changes and claims. An agent skill from MaplePrivacyLabs/Maple.
MaplePrivacyLabs/Maple
Select and run Maple component checks, platform builds, and exact-runtime smoke evidence for the changed behavior.
MaplePrivacyLabs/Maple
Select and run backend Rust, disposable database, encrypted client, provider, Nix, and EIF/PCR evidence matching an OpenSecret change.
Works with
Categories
Prepare, publish, monitor, and verify a Maple release from current master. Release Maple is an agent skill from MaplePrivacyLabs/Maple. Prepare, publish, monitor, and verify a Maple release from current master.
Release Maple fits situations like: asked to bump a release version; create a GitHub release; verify signed artifacts and updater metadata; monitor downstream publication.
Run `npx skills add MaplePrivacyLabs/Maple --skill release-maple -a claude-code`. Or copy the skill folder (.agents/skills/release-maple in MaplePrivacyLabs/Maple) into .claude/skills/release-maple in your project. Claude Code loads it when a task matches its description.
Run `npx skills add MaplePrivacyLabs/Maple --skill release-maple -a codex`. Or copy the skill folder (.agents/skills/release-maple in MaplePrivacyLabs/Maple) into .agents/skills/release-maple in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add MaplePrivacyLabs/Maple --skill release-maple -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-maple, .gemini/skills/release-maple, .github/skills/release-maple and .opencode/skills/release-maple in your project.
Going by SKILL.md and its folder, Release Maple needs Python and a shell for the scripts in its folder and the command-line tools its instructions call (gh, jq, nix, git, curl and just). Our summary lists: Python 3; A Bash shell.
SKILL.md names 2 domains. In commands or code: updates.trymaple.ai and github.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Release Maple is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.5k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release Maple: iOS App Store Submit (ZestfulPulse/ios-app-store-submit, 142 stars), Release Asc CLI (rorkai/App-Store-Connect-CLI, 7.7k stars), App Store Release Flow (rorkai/app-store-connect-cli-skills, 1.1k stars) and App Store Submission Health (rorkai/app-store-connect-cli-skills, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
MaplePrivacyLabs (a GitHub organization) maintains it in MaplePrivacyLabs/Maple, which has 100 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 8, 2026.
Source: MaplePrivacyLabs/Maple on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.