fix(hydra-gates): vendor manifest schema 2.37.0 and add the update path it never had - #787
Merged
Merged
Conversation
The vendored copy sat at 2.33.0 while @conduction/nextcloud-vue published 2.37.0, so gates 22 and 53 rejected manifests that the library's own validator passed. dossiq hit it on savedViewPlaces; no app could fix it, because the schema is not in any app's repo. Replaces the copy with the published 2.37.0, byte for byte. The diff is additive: 7 new $defs, 14 new page and page.config properties, 2 new widgetEntry properties, and one widened index-page guard. Nothing got stricter, so no manifest that passes today can start failing. Adds the update path whose absence was the real defect. A weekly workflow compares the copy against the registry and opens a pull request when it falls behind, and diff_schema_strictness.js names every constraint that got stricter so a reviewer can tell an additive bump from one that would redden the fleet at @main. Refs #785
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.
Closes #785.
What drifted
hydra-gates/scripts/schemas/app-manifest-v2.schema.jsonstood at 2.33.0.@conduction/nextcloud-vue3.4.0 ships 2.37.0. Gates 22 and 53 judge every app's manifest against the vendored copy, so a manifest that is correct against the schema its own dependency publishes was rejected by the gate. On dossiqparity/round2,npm run check:manifestreported zero errors while gate 22 reported two, bothsavedViewPlaces, at/pages/3and/pages/5.savedViewPlaceswas the key that got noticed. It is not the only one that had drifted. Across the four minors the published schema added:$defs:boardView,dateAxisView,folderSidebarScope,folderSidebarScopeSort,rowIndicator,savedViewPlaces,savedViewTreeboard,dateAxis,savedViewPlaces,savedViewTreepage.configproperties:folderSidebar,listShortcuts,priorityField,priorityLevels,quickEditFields,rowActionField,rowIndicatorCap,rowIndicators,viewTabs,writableFieldwidgetEntryproperties:roles,visibleWhenAny app adopting one of those would have failed the same way, with the same confusing two-instrument split, and nobody would have attributed it to the schema.
What changed
.github/workflows/hydra-gates-schema-sync.ymlwatches the registry every Monday at 04:00 UTC, an hour beforefleet-shared-dep-bump, and opens a pull request when the copy falls behind. It opens one rather than pushing, because CI resolves these gates at@main.hydra-gates/scripts/lib/diff_schema_strictness.jsnames every constraint that got stricter between two schema documents: arequiredlist that gained an entry, an enum that lost a member,additionalPropertiesflipped to false, a newpatternor bound, and a property dropped from apropertiesblock whoseadditionalPropertiesis false. That last case is the one a line diff reads as "fewer rules" and is the one that would redden a fleet. The sync workflow puts its output in the pull request it opens.hydra-gates/scripts/lib/test_diff_schema_strictness.jspairs every additive case with a planted tightening of the same shape, so the differ has to be able to say no.Why a copy with no update path was the real defect
The vendoring is deliberate and documented in
check_manifest.js: pinned-first meant "valid against whatever generation the app happened to install". What was never decided is how the copy catches up. Nothing watched the registry, so the answer was "when somebody notices", and nobody did for four minors. An app cannot fix it either, because the schema is not in any app's repo. A dossiq lane tried and the sandbox refused the write, which is why this is an issue rather than a commit.Blast radius, measured before merging
The bump is additive, so it can only turn red into green. Checked three ways.
Structurally.
diff_schema_strictness.json 2.33.0 against 2.37.0 printsnone. The control matters: run the same two files in the other direction and it prints four findings, so thenoneis a measurement and not a checker that cannot speak.Against the fleet. Every swept app's
src/manifest.jsonand its assembled effective manifest, taken fromdevelopmentHEAD, validated under both schemas through the realcheck_manifest.js. 20 apps have a manifest (versioniq has none, so gates 22 and 53 have nothing to judge there). All 20 read 0 errors before and 0 after, on both gates. Nothing newly fails.Against the reported failure. dossiq
parity/round2goes from 2 errors to 0 through the same gate, and the two that clear are exactly the two the issue names.Because nothing in the fleet turns red, this does not need the warning period a stricter gate would. The sync workflow is the part that could surprise someone later, and it never fails a run over drift: it reports and opens a pull request.
Verified
test_diff_schema_strictness.js,test_check_manifest.sh,test_check_manifest_ajv_collapse.js,test_check_manifest_crossref.js,test_build_effective_manifest.js,test_check_duplicate_index_pages.js,test_manifest_scope_filter.js: all green, withNODE_PATHset so the Ajv paths actually run rather than reporting SKIP.required-gained branch in the differ reddens the assertiona newly required key is reportedwithexit 0, not a setup line.shellcheckclean on all threerun:blocks of the new workflow, with the expression placeholders substituted.Not done here
#783, #784 and #786 were looked at and left. None is a one-line change. #783 needs descendant analysis the markup scanner does not do. #784 changes what gate 19 accepts, which is a stricter gate and wants a warning period and a fleet scan. #786 is a new gate.
🤖 Generated with Claude Code