agentleFS
everpcpceverpcpc/KMReader/.agents/skills/appstore-release/SKILL.md

appstore-release

Skill118 starsChanged 7 days agoMITView on GitHub

Coordinate the KMReader App Store release workflow. Use when asked to prepare or run a KMReader App Store release across iOS, macOS, and tvOS: refresh docs and APP_STORE_CHANGELOG.txt, open and merge the release-copy PR, create or update App Store Connect versions, attach builds and submit for review, then run make minor and open/merge the next-version-cycle PR.

  • Commits and pushes

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. beydemirfurkan/appstore-release★ 4same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository8 other files it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

21 rules. About 0 are common, 12 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈12

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Run the end-to-end KMReader App Store release workflow while keeping local release copy, App Store Connect metadata, submitted builds, and …

    line 8
  2. Distinctive:

    Before editing release copy, read and follow:

    line 20
  3. Distinctive:

    Do not duplicate those instructions here.

    line 26
  4. Very specific:

    Use asc --help for command shape when uncertain.

    line 31
  5. Very specific:

    Do not use raw xcodebuild.

    line 32
  6. Distinctive:

    Do not create duplicate App Store Connect versions.

    line 33
  7. Very specific:

    Stop before submission if any platform build is not VALID, metadata is incomplete, content rights are missing, or encryption compliance is …

    line 34
  8. Very specific:

    Do not rely on asc submit status --id.

    line 35
  9. Distinctive:

    Keep release notes user-facing.

    line 36
  10. Very specific:

    Use gh pr create --body-file and gh pr edit --body-file.

    line 37
  11. Very specific:

    Keep docs evergreen and concise.

    line 51
  12. Distinctive:

    If validation needs stronger proof, run the smallest relevant repo command.

    line 60
  13. Distinctive:

    Create a dedicated branch:

    line 64
  14. Distinctive:

    Create the PR with a body file:

    line 73
  15. Distinctive:

    Do not continue to App Store Connect metadata updates from an unmerged local-only release-copy branch unless the user explicitly wants that.

    line 105
  16. Distinctive:

    After update, download or list localizations and compare fields against local files.

    line 142
  17. Very specific:

    If the user says description must remain unchanged, update only whatsNew.

    line 144
  18. Very specific:

    All three versions should be WAITING_FOR_REVIEW.

    line 199
  19. Distinctive:

    Keep notes factual and brief.

    line 228
  20. Distinctive:

    After the release submissions are verified, start the next development version from clean main.

    line 232
  21. Distinctive:

    Verify the generated commit and version delta:

    line 243

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

KMReader App Store Release

Run the end-to-end KMReader App Store release workflow while keeping local release copy, App Store Connect metadata, submitted builds, and the next development version in sync.

Required Inputs

  • Release version, for example 4.10.
  • Build number to submit, for example 439. If omitted, resolve the latest valid build per platform before attaching anything.
  • Target platforms are always IOS, MAC_OS, and TV_OS unless the user explicitly narrows scope.

KMReader App Store app ID is 6755198424. Confirm it with asc apps list --name KMReader before making remote changes.

Related Local Skills

Before editing release copy, read and follow:

  • ../changelog/SKILL.md for APP_STORE_CHANGELOG.txt
  • ../docs/SKILL.md for README.md, APP_STORE_DESCRIPTION.txt, and the KMReader landing page in the kmworks/website repo
  • ../testflight/SKILL.md for distributing builds to TestFlight groups

Do not duplicate those instructions here. This skill owns ordering, GitHub PR handling, App Store Connect release actions, and the follow-up version-cycle PR.

Guardrails

  • Work from a clean or understood git state. Do not mix unrelated local changes into release PRs.
  • Use asc --help for command shape when uncertain; CLI flags can drift. Known asc 5.0 renames: versions get → versions view, versions attach-build --build → --build-id, review items-add → review items add, localizations --version-id → --version.
  • Do not use raw xcodebuild; this repo uses Makefile automation.
  • Do not create duplicate App Store Connect versions. Reuse existing editable versions.
  • Stop before submission if any platform build is not VALID, metadata is incomplete, content rights are missing, or encryption compliance is unresolved.
  • Do not rely on asc submit status --id; App Store Connect can reject that lookup with a GET_INSTANCE limitation. Verify final state through asc versions view/list and review submission responses.
  • Keep release notes user-facing. Exclude bump commits, CI, implementation details, file names, class names, and refactor-only work.
  • Use gh pr create --body-file and gh pr edit --body-file; do not pass Markdown bodies inline.

Phase 1: Refresh Release Copy

  1. Inspect context:
git status --short --branch
git log --oneline --decorate -n 20
git tag --sort=-creatordate | head -20
  1. Generate APP_STORE_CHANGELOG.txt from the latest tag to HEAD. Read full commit bodies, not only subjects.
  2. Refresh README.md and APP_STORE_DESCRIPTION.txt from current important product capabilities, and align the KMReader landing page (src/pages/reader/index.tsx in the kmworks/website repo, committed there separately).
  3. Keep docs evergreen and concise. APP_STORE_DESCRIPTION.txt should be store-appropriate; the landing page should align with the same product priorities.
  4. Validate release copy:
git diff --check
wc -c APP_STORE_DESCRIPTION.txt APP_STORE_CHANGELOG.txt
wc -m APP_STORE_DESCRIPTION.txt APP_STORE_CHANGELOG.txt  # both must be at most 4000 characters each (App Store Connect limit, counted in characters, not bytes); trim before syncing if over

If validation needs stronger proof, run the smallest relevant repo command. Do not run repository-wide formatting just for release copy.

Phase 2: PR And Merge Release Copy

Create a dedicated branch:

git switch -c "docs/refresh-${version//./}-store-copy"
git add README.md APP_STORE_DESCRIPTION.txt APP_STORE_CHANGELOG.txt
git commit -m "docs: refresh ${version} store copy"
git push -u origin "docs/refresh-${version//./}-store-copy"

Create the PR with a body file:

cat > /tmp/kmreader-release-copy-pr-body.md <<EOF
## Problem
The public documentation and App Store release copy need to match the ${version} release.

## Approach
Refresh README, App Store description, landing page copy, and App Store changelog from the current user-visible product changes.

## Validation
- [x] Reviewed latest-tag-to-HEAD commits
- [x] Ran git diff --check
EOF

gh pr create --title "docs: refresh ${version} store copy" --body-file /tmp/kmreader-release-copy-pr-body.md
gh pr view <PR_NUMBER> --json url,title,body,headRefName,baseRefName,state,statusCheckRollup

Merge when checks are acceptable or the user has explicitly authorized immediate release workflow completion:

gh pr merge <PR_NUMBER> --squash --delete-branch \
  --subject "docs: refresh ${version} store copy" \
  --body "Update README, App Store description, landing page copy, and App Store changelog for the ${version} release."

git fetch --prune origin
git switch main
git pull --ff-only origin main
git status --short --branch

Do not continue to App Store Connect metadata updates from an unmerged local-only release-copy branch unless the user explicitly wants that.

Phase 3: Create Or Reuse ASC Versions

Confirm app and versions:

asc apps list --name KMReader --pretty
asc versions list --app 6755198424 --version "$version" --platform IOS,MAC_OS,TV_OS --pretty

For each missing platform version:

asc versions create --app 6755198424 --version "$version" --platform IOS --pretty
asc versions create --app 6755198424 --version "$version" --platform MAC_OS --pretty
asc versions create --app 6755198424 --version "$version" --platform TV_OS --pretty

Record the version IDs in a platform map. The version state should be PREPARE_FOR_SUBMISSION before metadata/build changes.

Phase 4: Sync ASC Metadata

For each platform version, update en-US localization with local files:

description=$(cat APP_STORE_DESCRIPTION.txt)
whats_new=$(cat APP_STORE_CHANGELOG.txt)

asc localizations update --version "$ios_version_id" --locale en-US \
  --description "$description" \
  --whats-new "$whats_new" \
  --pretty

Repeat for MAC_OS and TV_OS version IDs.

After update, download or list localizations and compare fields against local files. ASC may trim the final trailing newline; that is acceptable. Preserve unrelated metadata such as keywords, support URL, and marketing URL.

If the user says description must remain unchanged, update only whatsNew.

Phase 5: Attach Builds

Find and validate build IDs:

asc builds list --app 6755198424 --version "$version" --build-number "$build_number" --processing-state all --pretty

Map one build ID per platform. Confirm:

  • processingState is VALID.
  • Encryption compliance is resolved, usually usesNonExemptEncryption=false.
  • The build belongs to the requested release version/build number.

Attach each build:

asc versions attach-build --version-id "$ios_version_id" --build-id "$ios_build_id" --pretty
asc versions attach-build --version-id "$macos_version_id" --build-id "$macos_build_id" --pretty
asc versions attach-build --version-id "$tvos_version_id" --build-id "$tvos_build_id" --pretty

Then verify:

asc versions view --version-id "$ios_version_id" --include-build --pretty
asc versions view --version-id "$macos_version_id" --include-build --pretty
asc versions view --version-id "$tvos_version_id" --include-build --pretty

Phase 6: Submit For Review

For each platform:

submission_id=$(asc review submissions-create --app 6755198424 --platform IOS --pretty \
  | python3 -c 'import json,sys; data=json.load(sys.stdin); print(data.get("id") or data["data"]["id"])')

asc review items add --submission "$submission_id" --item-type appStoreVersions --item-id "$ios_version_id" --pretty
asc review submissions-submit --id "$submission_id" --confirm --pretty

Repeat for MAC_OS and TV_OS.

Final verification:

asc versions list --app 6755198424 --version "$version" --platform IOS,MAC_OS,TV_OS --pretty
asc versions view --version-id "$ios_version_id" --include-build --pretty
asc versions view --version-id "$macos_version_id" --include-build --pretty
asc versions view --version-id "$tvos_version_id" --include-build --pretty

All three versions should be WAITING_FOR_REVIEW. Report platform, version ID, build ID, and submission ID.

After submission: withdraw, rejection, review notes

Withdraw a version from review (e.g. metadata must change after submission):

asc review submissions-update --id "$submission_id" --canceled=true --confirm

The version returns to DEVELOPER_REJECTED and becomes editable again. Resubmission uses the normal create/items/submit flow above with a new submission ID.

Resubmit after an Apple rejection: do NOT create a new submission. The version is still attached to the old UNRESOLVED_ISSUES submission, and adding it to a new submission fails with already added to another reviewSubmission. Instead, resolve the rejected item, then re-submit the SAME submission:

asc review items list --submission "$old_submission_id" --pretty
asc review items update --id "$rejected_item_id" --resolved true --pretty
asc review submissions-submit --id "$old_submission_id" --confirm --pretty

The version returns to WAITING_FOR_REVIEW under the same submission ID. Do not create an empty submission first: a submissions-create with no items leaves a READY_FOR_REVIEW draft that cannot be canceled (not in cancellable state).

Review notes (short factual context for the reviewer, e.g. clarifying a rejected feature's architecture) can be updated even while WAITING_FOR_REVIEW:

asc review details-for-version --version-id "$version_id" --pretty
asc review details-update --id "$detail_id" --notes "$notes" --pretty

Keep notes factual and brief; do not mention the rejection or policy background in them.

Phase 7: Start Next Version Cycle

After the release submissions are verified, start the next development version from clean main.

git status --short --branch
git switch -c "release/bump-${next_version}"
make minor
git status --short --branch

make minor must own the version mutation. Do not edit MARKETING_VERSION or CURRENT_PROJECT_VERSION manually. The script runs on both macOS and Linux.

Verify the generated commit and version delta:

git log --oneline --decorate -n 3
git diff --stat HEAD~1..HEAD

Push, open, and merge the version-cycle PR:

git push -u origin "release/bump-${next_version}"

cat > /tmp/kmreader-next-version-pr-body.md <<EOF
## Problem
The ${version} App Store release has been submitted, so main should move to the next development version.

## Approach
Run make minor to bump MARKETING_VERSION and CURRENT_PROJECT_VERSION through the repository release script.

## Validation
- [x] Ran make minor
- [x] Verified version file diff
EOF

gh pr create --title "chore: bump version to ${next_version}" --body-file /tmp/kmreader-next-version-pr-body.md
gh pr view <PR_NUMBER> --json url,title,body,headRefName,baseRefName,state,statusCheckRollup

gh pr merge <PR_NUMBER> --squash --delete-branch \
  --subject "chore: bump version to ${next_version}" \
  --body "Bump marketing version to ${next_version} and advance the build number for the next development cycle."

git fetch --prune origin
git switch main
git pull --ff-only origin main
git status --short --branch

Final Report

Report:

  • Release-copy PR URL and merge status.
  • ASC version IDs by platform.
  • Build IDs by platform.
  • Review submission IDs by platform.
  • Final ASC state by platform.
  • Next-version PR URL and merge status.
  • Current local branch, HEAD, and whether the worktree is clean.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.