chore(manifest): re-enable the screenshot-table gate scoped to genuinely visual paths - #9455
Merged
Merged
Conversation
…ely visual paths Re-enables the before/after screenshot-table gate after the 2026-07-26 false-close incident, as config-as-code this time so the scoping survives DB moves and is reviewable in git history. The incident: the gate was enabled with path scoping broad enough to sweep in apps/gittensory-ui/public/**, and public/openapi.json is a generated artifact this repo's own contribution rules require regenerating on every API change (`npm run ui:openapi`) -- so non-visual API PRs were auto-closed for missing screenshots (5 PRs recovered by hand). whenPaths now names only paths whose changes are genuinely visual (ui components, routes, styles.css), verified against the engine's own matchesAny glob matcher: public/** and src/routeTree.gen.ts stay out of scope, component/route/style changes are in scope.
Contributor
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
❌ 3 Tests Failed:
View the top 3 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
This was referenced Jul 27, 2026
JSONbored
added a commit
that referenced
this pull request
Jul 27, 2026
…lback sync lost in #9455's squash-merge (#9463) #9455 (screenshot-table gate re-enable) had two commits locally -- the initial add, and a follow-up fixup correcting the whenPaths prefix from the pre-rename apps/gittensory-ui to apps/loopover-ui, plus syncing src/config/loopover-repo-focus-manifest.ts (the bundled fallback) to match. The merged commit on main contains only the first: `.loopover.yml` still names apps/gittensory-ui (renamed away on 2026-07-14, so the gate has been enabled but silently INERT on every real PR -- the exact #9433 failure mode), and the bundled fallback has no screenshotTableGate block at all, which fails `npm run manifest:drift-check` -- a required, blocking step in test:ci -- for every PR against this repo until fixed. Restores both: corrects the path prefix, and re-adds the matching bundled-fallback block. Re-verified against the engine's own matchesAny matcher and a clean manifest-drift-check run.
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.
What
Re-enables the before/after screenshot-table gate on this repo, scoped narrowly, as config-as-code in
.loopover.yml(settings.screenshotTableGate) rather than a DB row — so the scoping survives database moves and every future change to it is reviewable in git history.Why config-as-code
The 2026-07-26 incident: the gate ran with path scoping broad enough to include
apps/loopover-ui/public/**.public/openapi.jsonis a generated artifact that this repo's own contribution rules require regenerating on every API change (npm run ui:openapi) — so perfectly good non-visual API PRs were auto-closed for missing screenshots; 5 were recovered by hand. A DB-row config has no review trail and no tests; this does.Scope
Verified against the engine's own
matchesAnyglob matcher (the exact function the gate evaluates with):apps/loopover-ui/public/openapi.jsonapps/loopover-ui/src/routeTree.gen.tsapps/loopover-ui/src/client.tssrc/queue/processors.tsapps/loopover-ui/src/components/Button.tsxapps/loopover-ui/src/routes/index.tsxapps/loopover-ui/src/routes/nested/page.tsxapps/loopover-ui/src/styles.cssManifest parses with zero warnings via
parseFocusManifestContent; the sparse-overlay contract keeps every unnamed field at its existing default (presence mode, default message, no viewport/theme matrix).The second commit corrects the path prefix to the renamed
apps/loopover-uidirectory — the first draft used the pre-renameapps/gittensory-uiprefix, which would have left the gate enabled but permanently out of scope (the #9433 inert-config failure mode, caught before merge).Refs #9434