Skip to content

emrg: the iOS task template says to submit a version and never states what the platform locks when it does #2642

Closed

Description

@argszero

What was observed

emrg/server/ios_app_prompt.md §5 tells a round to prepare a submission and submit it, and §5.1/§5.2 tell it how a version reaches the host and how the store page is judged. What the template does not contain is the platform's own behaviour at the moment of submission. Measured on this checkout: the file carries no occurrence of reviewSubmissions, reviewSubmissionItems, STATE_ERROR, promotionalText, appStoreVersionSubmissions, or the 409 answer — and git log -S shows none of them has ever been in this file, so this is a subject it never covered rather than one a rewrite removed.

The gap is not academic. Three platform facts decide whether a round's submission work survives:

  1. A submitted version's search metadata is frozen. A PATCH of keywords or description on a version that is already submitted answers 409 STATE_ERROR, with Apple stating that the attribute cannot be edited at this time. Only promotionalText stays writable, and it is not part of the search index, so writing it does not rescue the omission.
  2. A new version record copies part of the old one. The previous version's description and keywords are copied into each localization; the promotional text is not. Those localizations are created with the record and can only be PATCHed: a POST carrying relationships answers 422, and addressing them through the parent's sub-collection answers 405.
  3. Submission is an API sequence, not a form. It runs through reviewSubmissions: create the submission, attach the version as an item, then set submitted to true. The older appStoreVersionSubmissions path is DELETE-only now.

Why it matters

A round that does not know fact 1 writes its search keywords after submitting and gets a refusal it cannot clear — the values only take effect in the next version record, so one round is spent discovering a lock the platform already documents. A round that does not know fact 3 calls an endpoint that only deletes, or posts localizations into a shape that cannot accept them, and reads two error codes as defects in its own client. Each of those costs a round and buys nothing.

The template is the only instruction every instance reads for this task, and it is where a platform rule belongs: it holds identically for every installation, so the omission is the template's rather than an installation's local note.

What the fix must satisfy

  • State the three behaviours in §5, the section that already owns submission, rather than in a new top-level phase or an appendix.
  • Give the rule as the platform's behaviour and the action it implies for a round, not as an incident: no dates, no migration note, no reference to where the note came from.
  • Carry no instance value — no team id, no key path, no issuer id, no bundle prefix. Those stay in the task's extra_prompt, and §0.1 already says so.
  • Pin it with a guard that reads the section region, and that reads as missing when the section is emptied — a guard that cannot report absence is not a guard for a rule that has to be present.
  • scripts/check-rant-citations.py scans this template (its INSTRUCTION_FILES), so the rule must carry no attribution it cannot back with a public record.

Acceptance

  • The template states the three behaviours inside §5, and the guard fails when any of the pinned sentences is removed and when the section is emptied.
  • uv run pytest tests/test_prompt_templates.py tests/test_boss_tool.py passes, and uv run --no-sync python3 scripts/check-rant-citations.py reads clean.
  • CI green on both platforms.

Activity

  1. argszero commented on Oct 29, 2026

    @argszero
    OwnerAuthor

    Handled by #2643

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions