From 725d5e8535244faf18887467107d35a9394e5769 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Mon, 27 Jul 2026 12:36:35 -0700 Subject: [PATCH] chore(manifest): re-enable the screenshot-table gate scoped to genuinely 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. --- .loopover.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.loopover.yml b/.loopover.yml index 64a0651dd6..631a1be3fe 100644 --- a/.loopover.yml +++ b/.loopover.yml @@ -111,6 +111,22 @@ settings: trustMaintainerAuthoredIssueForReward: true reviewEvasionProtection: close draftPrClosePolicy: close + # Before/after screenshot-table gate (#2006), re-enabled after the 2026-07-26 false-close incident -- + # config-as-code this time so the scoping survives DB moves and is reviewable in git history. The incident: + # the gate was enabled with over-broad path scoping that swept 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 perfectly good non-visual API PRs were auto-closed for + # missing screenshots (5 PRs recovered by hand). whenPaths below therefore names only paths whose changes + # are genuinely visual, and deliberately EXCLUDES apps/gittensory-ui/public/** (generated + static assets) + # and src/routeTree.gen.ts (generated, sits outside routes/). A PR touching only excluded paths is simply + # out of scope -- the gate never evaluates it. + screenshotTableGate: + enabled: true + action: close + whenPaths: + - "apps/gittensory-ui/src/components/**" + - "apps/gittensory-ui/src/routes/**" + - "apps/gittensory-ui/src/styles.css" # Agent-layer autonomy dial (#773): without this block every action class defaults to "observe" # (deny-by-default) -- loopover had NO repository_settings DB row at all, so merge/close/approve # actions were silently never taken regardless of review verdict (#6401, #6402 sat fully reviewed,