This runbook defines the repo-owned review artifact path for Shopflow builds.
In plain language:
this is the box label that tells reviewers what bundle they are looking at, what channel it belongs to, and why that still does not equal a public release.
Shopflow currently publishes two review channels:
store-review
internal-alpha-review
These channels are for review, not for store submission.
Every CI review bundle should include:
shopflow-review-artifact.jsonmanifest.jsonThe generated review artifact manifest must record:
appIdpackageNamereleaseChannelclaimStatereviewChannelsurfaceextensionNameextensionVersiongeneratedAtgithubWorkflowgithubRunIdsourceShabundleCompleteness.requiredFilesbundleCompleteness.zipArtifactsAfter local or CI packaging completes, Shopflow also writes a
submission-readiness.json report in .runtime-cache/release-artifacts/.
This report does not claim store submission is ready. It exists to explain:
Claim-gated and internal-alpha-only states are still repo-owned status labels.
Do not use externalBlockers to hide repo-owned packaging, parity, or
review-start-path drift.
Once the review bundle is complete, the reviewer start path is trustworthy, and
verification parity is clean, the report should also surface truly external
gates under externalBlockers, such as:
If the latest repo-local reviewed-records ledger already covers a required
capture id, whether as reviewed or rejected, keep that finalized packet in the
submission report instead of continuing to list the same capture id under
externalBlockers.
The report should read like a reviewer handoff card, not a slogan. In practice that means each entry should surface:
The manifest writer must also reject mismatched metadata when the requested
appId, packageName, reviewChannel, surface, or bundle directory drift
away from the verification catalog.
Use the reviewer handoff path in this order:
submission-readiness.jsonrepoOwnedStatusreadinessSummaryreviewerStartPathexternalBlockersshopflow-review-artifact.jsonIn plain language:
read the handoff card first, then open the bundle, then open the page. do not guess the order from scattered files.
ext-shopping-suite must publish only as internal-alpha-reviewstore-reviewThe current CI review flow is:
shopflow-ci verify job runs pnpm verify:release-readinesssubmission-readiness.jsonpackage-review-artifacts builds each app independentlymanifest.jsonpnpm release:write-review-artifact-manifestexternal-governance workflow runs pnpm verify:external-governance on a scheduled/manual laneLocal packaging checks should also fail readably when an output is incomplete.
Expected failure details include:
manifest.json, background.js,
sidepanel.html, and popup.html for store appsTo reproduce the manifest-writing step locally:
export SHOPFLOW_APP_ID=ext-temu
export SHOPFLOW_PACKAGE_NAME=@shopflow/ext-temu
export SHOPFLOW_REVIEW_CHANNEL=store-review
export SHOPFLOW_SURFACE=storefront-shell
export SHOPFLOW_APP_DIR=apps/ext-temu
pnpm --filter @shopflow/ext-temu build
pnpm release:write-review-artifact-manifest
If you need one repo-owned release-readiness answer, run the release lane serially:
pnpm verify:release-readiness
Do not run pnpm test and pnpm package:artifacts in parallel against the
same workspace.
Do not treat verify:sensitive-public-surface or
verify:github-platform-security as the default author-time lane.
Those belong to the GitHub-hosted external-governance rail, because they audit
public text surfaces and platform capability state rather than pure local repo
determinism.
Why:
.output/ directoriesENOENT failures while one process is
rebuilding files the other process is trying to inspectinternal-alpha-review, or if the Suite is mislabeled as store-review