generate-ppmplugin-manifest
/generate-ppmplugin-manifest
Stages the manifest.json that goes inside a .ppmplugin bundle — the small descriptor the wrap runtime and upload service read to identify the plugin and route calls into it. In the normal flow the committed ./manifest.json already exists (authored by /generate-native-extension next to the code it describes); this stage's job is to validate it, reconcile its entrypoints to the shipped target(s), and write the staged build copy ppmplugin/staging/manifest.json. It is the "get the strings right" gate: it runs instantly, needs no build tools, and catches common upload failures before any Android build. If the repo has no ./manifest.json (a hand-authored native module that skipped the scaffold), this stage authors it from source as a fallback — see Step 2.
Read shared/ppmplugin-format.md — it is the source of truth for the schema, the derivation table, and the validation rules this skill enforces.
Two manifests, one contract. ./manifest.json (repo root, committed) is the source-of-truth contract — it declares every platform the module supports. ppmplugin/staging/manifest.json (gitignored) is the build copy this stage produces — same contract, but entrypoints trimmed to the platform(s) actually being shipped. The build/assemble skills only ever read the staged copy; the committed root file is what the PCF and humans read.
What this skill does NOT do
- Does not compile anything — no Gradle, no DEX. That's
/build-android-binary. - Does not zip the bundle — that's
/assemble-ppmplugin. - Does not verify a declared platform's binary actually exists — it stages the intended
entrypoints;/assemble-ppmpluginreconciles them against the binaries actually staged and gates on any mismatch. - Does not rewrite the committed
./manifest.jsonon the normal path — it reads it. It only writes./manifest.jsonin the fallback case (no committed manifest existed). It never touchessrc/,ios/,android/, PRD, orpackage.jsonbeyond reading them.