channel_admin_app_release
See the current correction and older-server guidance before preparing new inputs; keep existing task inputs unchanged during recovery.
The integration retains this PWA contract.
Compose the source Channel administration app's initial release: validate the selected channel and prerequisites, optionally upload an original icon, submit one release request, then observe stored progress. This is not a plan purchase or an installed-app verification operation.
The selected channel requires OWNER or DELEGATEE without an additional named fine permission. Creator/account credentials cannot substitute. Hosted clients need the exact authorized channel resource. The tool's idempotent annotation does not authorize replaying uncertain effects with a different request ID.
Input
| Field | Meaning |
|---|---|
| channelCode | Required exact selected channel code, string length 1–512; the parser also rejects ., .., slashes, backslashes and control characters |
| requestId | Required stable 8–80 character ID using letters, digits, underscores or hyphens |
| expectedRevision | Required 64-character lowercase SHA256 revision from channel_admin_app_get |
| confirmation | Required literal RELEASE_ADMIN_APP |
| iconFile | Optional strict object with filename and canonical base64 of original PNG/JPEG/WebP/UTF-8 SVG bytes |
| dryRun | Optional boolean, default false; validates without effects or journal |
The input object is strict; unknown fields are rejected. The exported schema does not express every channel-code or image-byte refinement.
{
"channelCode":"selected-channel-code",
"requestId":"admin-app-release-001",
"expectedRevision":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"confirmation":"RELEASE_ADMIN_APP",
"dryRun":true
}
Replace the example revision with the fresh observed value. The same requestId must retain its original inputs, including expectedRevision and file bytes. Changing dryRun from true to false is allowed because a dry run stores no task.
Only an observed NOT_RELEASED record may dispatch. Missing address is checked before the plan and points to /channels/{channelCode}/publish/settings. A known ineligible or unknown plan points to /channels/{channelCode}/plan/home. These are human prerequisite handoffs with zero release effects. Other PWA states and unavailable records point to preferences/ch-admin-app. One result contains one relevant canonical console destination, never a generic console home.
Omit iconFile to use the observed PWA icon, falling back to the channel icon, with the source ?ver= cache suffix removed. A custom file must have a matching basename/extension and canonical base64, at most 1,000,000 decimal bytes. No local paths, data URLs, arbitrary icon URLs, app-name edits or credentials. filename must be 1–240 characters without directory separators, colon or control characters, and end in .png, .jpg, .jpeg, .webp or .svg. Prefer lowercase extensions: the registered parser is case-insensitive but its exported pattern omits that flag. base64 must be 4–1,333,336 characters and round-trip to the same canonical encoding of nonempty original bytes. Whitespace or a data-URL prefix is rejected. The bridge checks bounded image/container structure, without rendering, resizing or external-reference fetching. Resource gateway, bucket and region must be configured by the host for a custom icon, including its dry run; using the observed default icon does not require that upload configuration. Original bytes and checksum bind the upload.
Inputs
This tool takes no input fields.
Results and recovery
PWA_RELEASE_DRY_RUN is a plan without grant, upload, release or journal. An acknowledged release alone does not prove completion. INITIALIZING or an unmatched readback stays pending. PWA_RELEASE_OBSERVED confirms a repeated RELEASED record with the expected channel/icon. It does not prove installation, public behavior, exclusive causality or backend transaction atomicity.
REVISION_CONFLICT rejects a stale initial revision. PWA_RECORD_UNAVAILABLE, PWA_ALREADY_RELEASED, PWA_INITIALIZING, PWA_ADDRESS_REQUIRED, PWA_PLAN_REQUIRED and PWA_PLAN_UNVERIFIED are action-required prerequisite outcomes, not completed releases. INVALID_PWA_ICON identifies failed byte validation. A dispatched request that fails acknowledgement may return an error with the preserved task and phase; do not interpret that error as proof that nothing happened.
Use the returned taskId with taskType channel-admin-app-release. Both task_status and task_resume are observational for this task type: they never send grants, uploads or release requests. An untouched prepared task or acknowledged upload can proceed only by repeating the identical channel_admin_app_release call. Dispatched effects are durably recorded before sending and never replayed after uncertainty. Unknown grant/upload acknowledgement requires operator inspection; never work around it with a new requestId.
| Saved phase | Permitted continuation |
|---|---|
| prepared | Repeat the original release call to start remaining effects after current context and record checks. |
| grant-sent / upload-sent | Keep the task and inspect the uncertain upload; neither original recall nor status/resume repeats the dispatched stage. |
| uploaded | Repeat the original release call to submit the still-unsent release; the acknowledged object is reused. |
| release-sent | Observe only. INITIALIZING, absent or mismatched state stays unconfirmed; a repeated matching RELEASED record can complete the task. |
| done | Return stored historical completion without a fresh PWA observation or current console destination. |
Observation may persist a locally reconciled completion; it does not issue a publ release or upload. REQUEST_ID_CONFLICT rejects changed original inputs; TASK_CONTEXT_CHANGED rejects an inconsistent saved journal. Preserve the task for inspection instead of deleting it to bypass either guard.
Completed replay is historical, verification.confirmed:false and has no fresh console destination; use channel_admin_app_get for current state. Context, actor, address, plan and original input remain bound. The hosted channel resource also checks the saved task's exact channel.
Temporary upload credentials stay in memory. Original file bytes remain in the private task journal for recovery; the host must manage access and retention. They are not returned in results. Uploaded objects may remain unused if later checks fail. No rollback, object cleanup, re-release, rename or unpublish is provided.