feat(blueprints): publishing the gallery as signed files (T79a) - #70
Merged
Conversation
…e has the six (T79a)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Roadmap task T79a. T78a minted a key for blueprints and taught
blueprint.importto check it; T79 then compiled the gallery into the binary and trusted it without a signature — correctly — which removed the channel those signatures were for. This restores it: the six manifests published frommixengine-packagesas<slug>.tomlwith a.minisigbeside each, under a movedblueprintstag, so a blueprint downloaded by hand lands trusted.Design:
docs/superpowers/specs/2026-09-02-t79a-signed-gallery-publication-design.md.What is in this repository
One behaviour change, and it is what the task found.
[blueprint] nameis display text — the gallery saysLaravel,Next.js,Static site— andimportwith no--namefiled a blueprint under exactly that string, sovalidated_slugrefused every gallery file before the signature was ever reached. The headline of this task was broken for all six. A file is now filed under its own stem, which is also the only fallback that round-trips this product's own output, since everything it renders is written as<slug>.toml. T78a's test never saw it: its fixture isborrowed.tomlnamedborrowed.Two tests: the daemon walks the whole gallery and imports each rendering by hand, and a core-level one holds the display names to not being slugs, so the first cannot pass for a reason that has stopped being true.
What is in mixengine-packages
Already on its
masterand already run:publish-blueprints.yml— checks out this repository at a ref (no manifest is ever copied over there), provesblueprints.pubagainst the compiled-inblueprints::trust::PUBLIC_KEYbefore signing, signs, verifies, uploads, prunes assets the gallery no longer contains, then downloads what it just published and verifies that.tools/blueprints.py,release/publish-blueprints.sh,check-blueprints.yml(weekly drift check, run and green).Verified on a real machine
Against the published files, with a daemon built from this branch:
mix blueprint import laravel.toml --overwrite→imported laravel — signed by the gallery key--overwriteonly because every home already holds the built-in six; a slug a build does not carry needs no flag.Follow-up
T79b is added to the roadmap: a failed signature and no signature at all produce the same line in the client today, and they are not the same event.