chore(lifecycle): repin the Production lifecycle source to openadapt-ops main - #1129
Merged
Conversation
…ops main The pinned openadapt-ops bytes moved, so --require-current-source refuses the pin and the validate job fails on main and on every open PR. Repin to openadapt-ops 9246994b5d2645aed3fe9bfb25163fdce507a27f and rerender. The new projection also widens the canonical file inventory it binds. It now carries evidence-registry.json, its schema, and its validator, and the canonical validator at OpenAdaptAI/.github 4d2a8265 imports the registry validator by bare module name and reads evidence-registry.json beside the policy. The consumer holds that inventory as an exact closed set, so it refused with "canonical lifecycle file inventory is not exact" until the three files were named here too. They are fetched and digest-checked like every other canonical input, and the set stays exact rather than permissive. The materialized script directory is put on sys.path only for the duration of the validator call, then removed along with any module imported from it. The rendered block does not change: the live record still carries all seven targets with no active admission, so the README keeps the positive qualification contract. The bytes now pinned are identical to the live record served at https://docs.openadapt.ai/production-lifecycle.json. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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
validatejob inREADME Production lifecyclefails on unmodifiedmainwith:openadapt-opsmerged several PRs today, so the bytes pinned byproduction-lifecycle-source.jsonmoved.--require-current-sourcerefuses a stale pin even when the pin itself is still internally consistent, which is the point of the flag.What this does
Repins to
openadapt-ops9246994b5d2645aed3fe9bfb25163fdce507a27fand rerenders.The inventory also changed
A plain repin was not enough. The new projection binds three more canonical files from
OpenAdaptAI/.githubat4d2a8265:evidence-registry.jsonschemas/evidence-registry.schema.jsonscripts/validate_evidence_registry.pyThe canonical validator at that commit imports
validate_evidence_registryby bare module name and readsevidence-registry.jsonbeside the policy. It refuses a Production admission whose acceptance evidence is not already bound by digest in that registry.render_readme_maturity.pyholds the canonical inventory as an exact closed set, so it failed withcanonical lifecycle file inventory is not exactuntil the three files were named on this side too. This PR names them. They get fetched and digest checked like every other canonical input, and the comparison stays set equality rather than a subset test, so an inventory that grows again still fails closed.The bare import needed one more change.
_run_canonical_validatormaterializes the canonical files into a temp directory and loads the validator by file path, which leaves a sibling import unresolvable. The materialized script directory now goes onsys.pathfor the duration of that call only, and both the path entry and any module imported from it are removed afterward.The rendered block does not change
I checked the rendered state against the live record before committing, because a README that advertises a state the live record contradicts is worse than a red check.
https://docs.openadapt.ai/production-lifecycle.jsonis byte identical to the openadapt-ops projection this PR pins: both are 8873 bytes, sha2567acc2884b5f70bd94521288d07e0567269501d679cf52f1f216cbaf7b81e6a16. The live record still carries all seven targets and every one haslatest_admission: null. So the README keeps the positive qualification contract andREADME.mdhas no diff here.Worth flagging separately:
openadapt-web'sstatus.jsonand this record are different documents, and a claim elsewhere that the admission target list is down to one does not match what the live record serves.Checks
render_readme_maturity.py --check --require-current-sourcepassestests/test_readme_maturity.py: 9 passedruff checkandruff format --checkclean on the modified scriptThe guard still refuses what it refused before. A tampered pin digest, a rollback to the previous openadapt-ops commit, and a hand-edited README block each exit 1 with the same messages as before this change.
The manifest regeneration is in #1128 so each drift stays separately bisectable.