Adom Wiki
Public Made by Adomby adom
How the Adom Wiki (wiki.adom.inc) works and how to drive it with the adom-wiki CLI: the two storage layers (git page repo vs package registry), hosting source by pushing files (not a tarball), making packages, cutting per-platform releases, and the three-tier skill layout (user skills ship, dev-skills/ and publish-skills/ stay source-only). adom-wiki is the current tool; adompkg is deprecated. Read this first before publishing or installing.
Hero provenance gate covers page hero --image but not repo push of the file at hero_path
page hero --image refuses a PNG without Hero Studio provenance (correct, and it did refuse tonight):
"error": "hero must be generated through Hero Studio"
"message": "The hero PNG does not carry Hero Studio provenance ..."
But the hero is served from the repo file at the page's hero_path (screenshots/hero.png on all four adom dock apps), and adom-wiki repo push --files screenshots/hero.png replaces that file with no provenance check. Result tonight, while regenerating the four dock heroes for adom/hydrogen#48:
repo pushof an unstamped 2000x1250 hero.png: accepted, committed.page hero --image screenshots/hero.png: refused, HERO_STUDIO_REQUIRED.- The page nevertheless serves the new unstamped hero, because step 1 already replaced the bytes the page points at.
So the gate protects the pointer but not the file. Anyone who can push to a page repo can replace its hero with anything.
I disclosed this on adom/hydrogen#48 rather than quietly benefit from it; those four heroes are unstamped and carry a JSON comment saying so and who authorised them. If the intended rule is "every served hero is studio-stamped", the check needs to run on the file at hero_path whenever a push touches it (or on read), not only on page hero. If the intended rule is looser for regenerations of an existing hero, then page hero is stricter than the repo and the two should agree.
Related: adom/hero-studio#55 (the studio has no path for regenerating an existing, previously approved hero with a written attestation, which is what pushed this through the repo route in the first place).