feat: local Keychain-signed signer registry candidate - #27
Merged
Conversation
Add a local-candidate CLI that builds an unpublished, Keychain-signed registry candidate with activation_state=not-installed and no generated_at/expires_at. Document the gh secret set loop for the lifecycle App private key once the founder has the Keychain item.
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.
The lifecycle App workflows already refuse anyone but
openadapt-lifecycle[bot]. They also readvars.OPENADAPT_LIFECYCLE_*andsecrets.OPENADAPT_LIFECYCLE_APP_PRIVATE_KEY. This change doesn't arm those workflows, and it doesn't publish a 7-day signer registry.GitHub settings already applied on
OpenAdaptAI/.github(not in this diff):production-lifecycle-activation,production-release-admission,qualification-authority-state,qualification-revocation-state,production-lifecycle-feed.synthetic-qualification-evidence-decisionwas already there.OPENADAPT_LIFECYCLE_APP_ID=4730735,OPENADAPT_LIFECYCLE_INSTALLATION_ID=156835618,OPENADAPT_LIFECYCLE_ACTOR_ID=321544198.public-trust-signingwas not created. The software DSSE profile signs fromsynthetic-qualification-evidence-decision.This PR adds a local CLI that builds an unsigned candidate from the Keychain qualification key, then signs it. The result stays
activation_state=not-installedandclock=unset. Nogenerated_at/expires_at. Don't copy that JSON ontomain.After the founder has Keychain item
openadapt-lifecycle-app-key, set the App private key as an environment secret. Create each environment first. Do not generate a new App key. Do not delete the Keychain item. Confirm everygh secret setexit status:The same commands are in the
scripts/prepare_lifecycle_change.pymodule docstring.Reviewer checks:
python3 -m unittest discover -s tests -p 'test_*.py'(247 tests).local-candidateoutput hasactivation_state=not-installed,clock=unset, and nogenerated_at/expires_at.secrets., noenvironment:, and noaws kms.This does not admit Flow. The issuer stays inactive. The next founder action is the lifecycle App pem in Keychain, then the loop above.
Opened by an agent session, not the founder.