Skip to content

chore(manifest): re-enable the screenshot-table gate scoped to genuinely visual paths - #9455

Merged
JSONbored merged 1 commit into
mainfrom
chore/reenable-screenshot-gate-narrow
Jul 27, 2026
Merged

chore(manifest): re-enable the screenshot-table gate scoped to genuinely visual paths#9455
JSONbored merged 1 commit into
mainfrom
chore/reenable-screenshot-gate-narrow

Conversation

@JSONbored

@JSONbored JSONbored commented Jul 27, 2026

Copy link
Copy Markdown
Owner

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.json is 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

screenshotTableGate:
  enabled: true
  action: close
  whenPaths:
    - "apps/loopover-ui/src/components/**"
    - "apps/loopover-ui/src/routes/**"
    - "apps/loopover-ui/src/styles.css"

Verified against the engine's own matchesAny glob matcher (the exact function the gate evaluates with):

path result
apps/loopover-ui/public/openapi.json excluded (the incident trap)
apps/loopover-ui/src/routeTree.gen.ts excluded (generated)
apps/loopover-ui/src/client.ts excluded (non-visual)
src/queue/processors.ts excluded
apps/loopover-ui/src/components/Button.tsx in scope
apps/loopover-ui/src/routes/index.tsx in scope
apps/loopover-ui/src/routes/nested/page.tsx in scope
apps/loopover-ui/src/styles.css in scope

Manifest 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-ui directory — the first draft used the pre-rename apps/gittensory-ui prefix, which would have left the gate enabled but permanently out of scope (the #9433 inert-config failure mode, caught before merge).

Refs #9434

…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.
@JSONbored JSONbored self-assigned this Jul 27, 2026
@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@JSONbored
JSONbored merged commit 73d4e94 into main Jul 27, 2026
2 checks passed
@JSONbored
JSONbored deleted the chore/reenable-screenshot-gate-narrow branch July 27, 2026 19:37
@codecov

codecov Bot commented Jul 27, 2026

Copy link
Copy Markdown

❌ 3 Tests Failed:

Tests completed Failed Passed Skipped
22892 3 22889 21
View the top 3 failed test(s) by shortest run time
test/unit/loopover-focus-manifest.test.ts > LoopOver repo focus manifest > keeps bundled YAML aligned with the committed .loopover.yml file
Stack Traces | 0.0186s run time
AssertionError: expected '# LoopOver repo focus manifest — mach…' to be '# LoopOver repo focus manifest — mach…' // Object.is equality

- Expected
+ Received

@@ -109,26 +109,10 @@
          prLabel: "gittensor:priority"
          removeOtherTypeLabels: false
          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:
-       - ".../gittensory-ui/src/components/**"
-       - ".../gittensory-ui/src/routes/**"
-       - ".../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,
    # CI-green, and mergeable with no auto-merge attempt). Matches the policy JSONbored/awesome-claude and
    # JSONbored/metagraphed already carry live in their DB rows -- this makes it config-as-code instead.

 ❯ test/unit/loopover-focus-manifest.test.ts:37:54
test/unit/check-manifest-drift-script.test.ts > check-manifest-drift script > the real repo's root .loopover.yml and the bundled fallback agree (regression guard)
Stack Traces | 0.0663s run time
AssertionError: expected [ Array(1) ] to deeply equal []

- Expected
+ Received

- []
+ [
+   ".loopover.yml and LOOPOVER_REPO_FOCUS_MANIFEST_YAML (src/config/loopover-repo-focus-manifest.ts) have drifted apart.
+ -- .loopover.yml (parsed) --
+ {
+   \"gate\": {
+     \"duplicates\": \"block\",
+     \"linkedIssue\": \"advisory\",
+     \"readiness\": {
+       \"minScore\": 40,
+       \"mode\": \"advisory\"
+     }
+   },
+   \"issueDiscoveryPolicy\": \"discouraged\",
+   \"linkedIssuePolicy\": \"preferred\",
+   \"maintainerNotes\": [
+     \"Maintainer notes are private triage context and must not appear on public GitHub comments.\",
+     \"Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work.\"
+   ],
+   \"preferredLabels\": [
+     \"bug\",
+     \"enhancement\",
+     \"documentation\"
+   ],
+   \"publicNotes\": [
+     \"Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.\",
+     \"Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.\",
+     \"Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work.\"
+   ],
+   \"review\": {
+     \"auto_review\": {
+       \"skip_docs_only\": true,
+       \"skip_drafts\": true
+     }
+   },
+   \"settings\": {
+     \"autonomy\": {
+       \"approve\": \"auto\",
+       \"assign\": \"auto\",
+       \"close\": \"auto\",
+       \"merge\": \"auto\",
+       \"request_changes\": \"auto\",
+       \"update_branch\": \"auto\"
+     },
+     \"draftPrClosePolicy\": \"close\",
+     \"linkedIssueLabelPropagation\": {
+       \"enabled\": true,
+       \"mappings\": [
+         {
+           \"issueLabel\": \"gittensor:bug\",
+           \"prLabel\": \"gittensor:bug\",
+           \"removeOtherTypeLabels\": true,
+           \"trustMaintainerAuthoredIssue\": true
+         },
+         {
+           \"issueLabel\": \"gittensor:feature\",
+           \"prLabel\": \"gittensor:feature\",
+           \"removeOtherTypeLabels\": true,
+           \"trustMaintainerAuthoredIssue\": true
+         },
+         {
+           \"issueLabel\": \"gittensor:priority\",
+           \"prLabel\": \"gittensor:priority\",
+           \"removeOtherTypeLabels\": false,
+           \"trustMaintainerAuthoredIssueForReward\": true
+         }
+       ],
+       \"mode\": \"exclusive_type_label\"
+     },
+     \"reviewEvasionProtection\": \"close\",
+     \"screenshotTableGate\": {
+       \"action\": \"close\",
+       \"enabled\": true,
+       \"whenPaths\": [
+         \".../gittensory-ui/src/components/**\",
+         \".../gittensory-ui/src/routes/**\",
+         \".../gittensory-ui/src/styles.css\"
+       ]
+     }
+   },
+   \"source\": \"repo_file\",
+   \"testExpectations\": [
+     \"npm run test:ci\",
+     \"npm run typecheck\",
+     \"npm run test:coverage\"
+   ],
+   \"wantedPaths\": [
+     \"src/\",
+     \"packages/\",
+     \"test/\",
+     \"migrations/\",
+     \"scripts/\",
+     \"review-enrichment/\",
+     \".github/workflows/\",
+     \"wrangler.jsonc\",
+     \"apps/loopover-ui/\"
+   ]
+ }
+ -- LOOPOVER_REPO_FOCUS_MANIFEST_YAML (parsed) --
+ {
+   \"gate\": {
+     \"duplicates\": \"block\",
+     \"linkedIssue\": \"advisory\",
+     \"readiness\": {
+       \"minScore\": 40,
+       \"mode\": \"advisory\"
+     }
+   },
+   \"issueDiscoveryPolicy\": \"discouraged\",
+   \"linkedIssuePolicy\": \"preferred\",
+   \"maintainerNotes\": [
+     \"Maintainer notes are private triage context and must not appear on public GitHub comments.\",
+     \"Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work.\"
+   ],
+   \"preferredLabels\": [
+     \"bug\",
+     \"enhancement\",
+     \"documentation\"
+   ],
+   \"publicNotes\": [
+     \"Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.\",
+     \"Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.\",
+     \"Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work.\"
+   ],
+   \"review\": {
+     \"auto_review\": {
+       \"skip_docs_only\": true,
+       \"skip_drafts\": true
+     }
+   },
+   \"settings\": {
+     \"autonomy\": {
+       \"approve\": \"auto\",
+       \"assign\": \"auto\",
+       \"close\": \"auto\",
+       \"merge\": \"auto\",
+       \"request_changes\": \"auto\",
+       \"update_branch\": \"auto\"
+     },
+     \"draftPrClosePolicy\": \"close\",
+     \"linkedIssueLabelPropagation\": {
+       \"enabled\": true,
+       \"mappings\": [
+         {
+           \"issueLabel\": \"gittensor:bug\",
+           \"prLabel\": \"gittensor:bug\",
+           \"removeOtherTypeLabels\": true,
+           \"trustMaintainerAuthoredIssue\": true
+         },
+         {
+           \"issueLabel\": \"gittensor:feature\",
+           \"prLabel\": \"gittensor:feature\",
+           \"removeOtherTypeLabels\": true,
+           \"trustMaintainerAuthoredIssue\": true
+         },
+         {
+           \"issueLabel\": \"gittensor:priority\",
+           \"prLabel\": \"gittensor:priority\",
+           \"removeOtherTypeLabels\": false,
+           \"trustMaintainerAuthoredIssueForReward\": true
+         }
+       ],
+       \"mode\": \"exclusive_type_label\"
+     },
+     \"reviewEvasionProtection\": \"close\"
+   },
+   \"source\": \"repo_file\",
+   \"testExpectations\": [
+     \"npm run test:ci\",
+     \"npm run typecheck\",
+     \"npm run test:coverage\"
+   ],
+   \"wantedPaths\": [
+     \"src/\",
+     \"packages/\",
+     \"test/\",
+     \"migrations/\",
+     \"scripts/\",
+     \"review-enrichment/\",
+     \".github/workflows/\",
+     \"wrangler.jsonc\",
+     \"apps/loopover-ui/\"
+   ]
+ }",
+ ]

 ❯ test/unit/check-manifest-drift-script.test.ts:79:29
test/unit/check-manifest-drift-script.test.ts > check-manifest-drift script > prints a clean summary and exits 0 for the real repo state when run as a subprocess
Stack Traces | 1.02s run time
Error: Command failed: .../loopover/node_modules/.bin/tsx scripts/check-manifest-drift.ts
Manifest-drift check found 1 issue(s):
.loopover.yml and LOOPOVER_REPO_FOCUS_MANIFEST_YAML (src/config/loopover-repo-focus-manifest.ts) have drifted apart.
-- .loopover.yml (parsed) --
{
  "gate": {
    "duplicates": "block",
    "linkedIssue": "advisory",
    "readiness": {
      "minScore": 40,
      "mode": "advisory"
    }
  },
  "issueDiscoveryPolicy": "discouraged",
  "linkedIssuePolicy": "preferred",
  "maintainerNotes": [
    "Maintainer notes are private triage context and must not appear on public GitHub comments.",
    "Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work."
  ],
  "preferredLabels": [
    "bug",
    "enhancement",
    "documentation"
  ],
  "publicNotes": [
    "Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.",
    "Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.",
    "Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work."
  ],
  "review": {
    "auto_review": {
      "skip_docs_only": true,
      "skip_drafts": true
    }
  },
  "settings": {
    "autonomy": {
      "approve": "auto",
      "assign": "auto",
      "close": "auto",
      "merge": "auto",
      "request_changes": "auto",
      "update_branch": "auto"
    },
    "draftPrClosePolicy": "close",
    "linkedIssueLabelPropagation": {
      "enabled": true,
      "mappings": [
        {
          "issueLabel": "gittensor:bug",
          "prLabel": "gittensor:bug",
          "removeOtherTypeLabels": true,
          "trustMaintainerAuthoredIssue": true
        },
        {
          "issueLabel": "gittensor:feature",
          "prLabel": "gittensor:feature",
          "removeOtherTypeLabels": true,
          "trustMaintainerAuthoredIssue": true
        },
        {
          "issueLabel": "gittensor:priority",
          "prLabel": "gittensor:priority",
          "removeOtherTypeLabels": false,
          "trustMaintainerAuthoredIssueForReward": true
        }
      ],
      "mode": "exclusive_type_label"
    },
    "reviewEvasionProtection": "close",
    "screenshotTableGate": {
      "action": "close",
      "enabled": true,
      "whenPaths": [
        ".../gittensory-ui/src/components/**",
        ".../gittensory-ui/src/routes/**",
        ".../gittensory-ui/src/styles.css"
      ]
    }
  },
  "source": "repo_file",
  "testExpectations": [
    "npm run test:ci",
    "npm run typecheck",
    "npm run test:coverage"
  ],
  "wantedPaths": [
    "src/",
    "packages/",
    "test/",
    "migrations/",
    "scripts/",
    "review-enrichment/",
    ".github/workflows/",
    "wrangler.jsonc",
    "apps/loopover-ui/"
  ]
}
-- LOOPOVER_REPO_FOCUS_MANIFEST_YAML (parsed) --
{
  "gate": {
    "duplicates": "block",
    "linkedIssue": "advisory",
    "readiness": {
      "minScore": 40,
      "mode": "advisory"
    }
  },
  "issueDiscoveryPolicy": "discouraged",
  "linkedIssuePolicy": "preferred",
  "maintainerNotes": [
    "Maintainer notes are private triage context and must not appear on public GitHub comments.",
    "Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work."
  ],
  "preferredLabels": [
    "bug",
    "enhancement",
    "documentation"
  ],
  "publicNotes": [
    "Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.",
    "Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.",
    "Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work."
  ],
  "review": {
    "auto_review": {
      "skip_docs_only": true,
      "skip_drafts": true
    }
  },
  "settings": {
    "autonomy": {
      "approve": "auto",
      "assign": "auto",
      "close": "auto",
      "merge": "auto",
      "request_changes": "auto",
      "update_branch": "auto"
    },
    "draftPrClosePolicy": "close",
    "linkedIssueLabelPropagation": {
      "enabled": true,
      "mappings": [
        {
          "issueLabel": "gittensor:bug",
          "prLabel": "gittensor:bug",
          "removeOtherTypeLabels": true,
          "trustMaintainerAuthoredIssue": true
        },
        {
          "issueLabel": "gittensor:feature",
          "prLabel": "gittensor:feature",
          "removeOtherTypeLabels": true,
          "trustMaintainerAuthoredIssue": true
        },
        {
          "issueLabel": "gittensor:priority",
          "prLabel": "gittensor:priority",
          "removeOtherTypeLabels": false,
          "trustMaintainerAuthoredIssueForReward": true
        }
      ],
      "mode": "exclusive_type_label"
    },
    "reviewEvasionProtection": "close"
  },
  "source": "repo_file",
  "testExpectations": [
    "npm run test:ci",
    "npm run typecheck",
    "npm run test:coverage"
  ],
  "wantedPaths": [
    "src/",
    "packages/",
    "test/",
    "migrations/",
    "scripts/",
    "review-enrichment/",
    ".github/workflows/",
    "wrangler.jsonc",
    "apps/loopover-ui/"
  ]
}

 ❯ test/unit/check-manifest-drift-script.test.ts:91:20

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { status: 1, signal: null, output: [ null, '', 'Manifest-drift check found 1 issue(s):\n.loopover.yml and LOOPOVER_REPO_FOCUS_MANIFEST_YAML (src/config/loopover-repo-focus-manifest.ts) have drifted apart.\n-- .loopover.yml (parsed) --\n{\n  "gate": {\n    "duplicates": "block",\n    "linkedIssue": "advisory",\n    "readiness": {\n      "minScore": 40,\n      "mode": "advisory"\n    }\n  },\n  "issueDiscoveryPolicy": "discouraged",\n  "linkedIssuePolicy": "preferred",\n  "maintainerNotes": [\n    "Maintainer notes are private triage context and must not appear on public GitHub comments.",\n    "Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work."\n  ],\n  "preferredLabels": [\n    "bug",\n    "enhancement",\n    "documentation"\n  ],\n  "publicNotes": [\n    "Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.",\n    "Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.",\n    "Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work."\n  ],\n  "review": {\n    "auto_review": {\n      "skip_docs_only": true,\n      "skip_drafts": true\n    }\n  },\n  "settings": {\n    "autonomy": {\n      "approve": "auto",\n      "assign": "auto",\n      "close": "auto",\n      "merge": "auto",\n      "request_changes": "auto",\n      "update_branch": "auto"\n    },\n    "draftPrClosePolicy": "close",\n    "linkedIssueLabelPropagation": {\n      "enabled": true,\n      "mappings": [\n        {\n          "issueLabel": "gittensor:bug",\n          "prLabel": "gittensor:bug",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:feature",\n          "prLabel": "gittensor:feature",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:priority",\n          "prLabel": "gittensor:priority",\n          "removeOtherTypeLabels": false,\n          "trustMaintainerAuthoredIssueForReward": true\n        }\n      ],\n      "mode": "exclusive_type_label"\n    },\n    "reviewEvasionProtection": "close",\n    "screenshotTableGate": {\n      "action": "close",\n      "enabled": true,\n      "whenPaths": [\n        ".../gittensory-ui/src/components/**",\n        ".../gittensory-ui/src/routes/**",\n        ".../gittensory-ui/src/styles.css"\n      ]\n    }\n  },\n  "source": "repo_file",\n  "testExpectations": [\n    "npm run test:ci",\n    "npm run typecheck",\n    "npm run test:coverage"\n  ],\n  "wantedPaths": [\n    "src/",\n    "packages/",\n    "test/",\n    "migrations/",\n    "scripts/",\n    "review-enrichment/",\n    ".github/workflows/",\n    "wrangler.jsonc",\n    "apps/loopover-ui/"\n  ]\n}\n-- LOOPOVER_REPO_FOCUS_MANIFEST_YAML (parsed) --\n{\n  "gate": {\n    "duplicates": "block",\n    "linkedIssue": "advisory",\n    "readiness": {\n      "minScore": 40,\n      "mode": "advisory"\n    }\n  },\n  "issueDiscoveryPolicy": "discouraged",\n  "linkedIssuePolicy": "preferred",\n  "maintainerNotes": [\n    "Maintainer notes are private triage context and must not appear on public GitHub comments.",\n    "Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work."\n  ],\n  "preferredLabels": [\n    "bug",\n    "enhancement",\n    "documentation"\n  ],\n  "publicNotes": [\n    "Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.",\n    "Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.",\n    "Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work."\n  ],\n  "review": {\n    "auto_review": {\n      "skip_docs_only": true,\n      "skip_drafts": true\n    }\n  },\n  "settings": {\n    "autonomy": {\n      "approve": "auto",\n      "assign": "auto",\n      "close": "auto",\n      "merge": "auto",\n      "request_changes": "auto",\n      "update_branch": "auto"\n    },\n    "draftPrClosePolicy": "close",\n    "linkedIssueLabelPropagation": {\n      "enabled": true,\n      "mappings": [\n        {\n          "issueLabel": "gittensor:bug",\n          "prLabel": "gittensor:bug",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:feature",\n          "prLabel": "gittensor:feature",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:priority",\n          "prLabel": "gittensor:priority",\n          "removeOtherTypeLabels": false,\n          "trustMaintainerAuthoredIssueForReward": true\n        }\n      ],\n      "mode": "exclusive_type_label"\n    },\n    "reviewEvasionProtection": "close"\n  },\n  "source": "repo_file",\n  "testExpectations": [\n    "npm run test:ci",\n    "npm run typecheck",\n    "npm run test:coverage"\n  ],\n  "wantedPaths": [\n    "src/",\n    "packages/",\n    "test/",\n    "migrations/",\n    "scripts/",\n    "review-enrichment/",\n    ".github/workflows/",\n    "wrangler.jsonc",\n    "apps/loopover-ui/"\n  ]\n}\n' ], pid: 20856, stdout: '', stderr: 'Manifest-drift check found 1 issue(s):\n.loopover.yml and LOOPOVER_REPO_FOCUS_MANIFEST_YAML (src/config/loopover-repo-focus-manifest.ts) have drifted apart.\n-- .loopover.yml (parsed) --\n{\n  "gate": {\n    "duplicates": "block",\n    "linkedIssue": "advisory",\n    "readiness": {\n      "minScore": 40,\n      "mode": "advisory"\n    }\n  },\n  "issueDiscoveryPolicy": "discouraged",\n  "linkedIssuePolicy": "preferred",\n  "maintainerNotes": [\n    "Maintainer notes are private triage context and must not appear on public GitHub comments.",\n    "Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work."\n  ],\n  "preferredLabels": [\n    "bug",\n    "enhancement",\n    "documentation"\n  ],\n  "publicNotes": [\n    "Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.",\n    "Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.",\n    "Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work."\n  ],\n  "review": {\n    "auto_review": {\n      "skip_docs_only": true,\n      "skip_drafts": true\n    }\n  },\n  "settings": {\n    "autonomy": {\n      "approve": "auto",\n      "assign": "auto",\n      "close": "auto",\n      "merge": "auto",\n      "request_changes": "auto",\n      "update_branch": "auto"\n    },\n    "draftPrClosePolicy": "close",\n    "linkedIssueLabelPropagation": {\n      "enabled": true,\n      "mappings": [\n        {\n          "issueLabel": "gittensor:bug",\n          "prLabel": "gittensor:bug",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:feature",\n          "prLabel": "gittensor:feature",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:priority",\n          "prLabel": "gittensor:priority",\n          "removeOtherTypeLabels": false,\n          "trustMaintainerAuthoredIssueForReward": true\n        }\n      ],\n      "mode": "exclusive_type_label"\n    },\n    "reviewEvasionProtection": "close",\n    "screenshotTableGate": {\n      "action": "close",\n      "enabled": true,\n      "whenPaths": [\n        ".../gittensory-ui/src/components/**",\n        ".../gittensory-ui/src/routes/**",\n        ".../gittensory-ui/src/styles.css"\n      ]\n    }\n  },\n  "source": "repo_file",\n  "testExpectations": [\n    "npm run test:ci",\n    "npm run typecheck",\n    "npm run test:coverage"\n  ],\n  "wantedPaths": [\n    "src/",\n    "packages/",\n    "test/",\n    "migrations/",\n    "scripts/",\n    "review-enrichment/",\n    ".github/workflows/",\n    "wrangler.jsonc",\n    "apps/loopover-ui/"\n  ]\n}\n-- LOOPOVER_REPO_FOCUS_MANIFEST_YAML (parsed) --\n{\n  "gate": {\n    "duplicates": "block",\n    "linkedIssue": "advisory",\n    "readiness": {\n      "minScore": 40,\n      "mode": "advisory"\n    }\n  },\n  "issueDiscoveryPolicy": "discouraged",\n  "linkedIssuePolicy": "preferred",\n  "maintainerNotes": [\n    "Maintainer notes are private triage context and must not appear on public GitHub comments.",\n    "Cosmetic UI-only polish without API wiring or maintainer-approved issue context should be redirected to backend or operator-facing work."\n  ],\n  "preferredLabels": [\n    "bug",\n    "enhancement",\n    "documentation"\n  ],\n  "publicNotes": [\n    "Prefer backend Workers, MCP, GitHub App, registry, and scoring work when scope allows.",\n    "Focused control-panel UI changes are welcome when they use live API data or honest empty/error states and tie to safety, release readiness, or operator-facing analytics.",\n    "Do not reintroduce GitHub Pages, VitePress, site/, CNAME, or lovable-only website work."\n  ],\n  "review": {\n    "auto_review": {\n      "skip_docs_only": true,\n      "skip_drafts": true\n    }\n  },\n  "settings": {\n    "autonomy": {\n      "approve": "auto",\n      "assign": "auto",\n      "close": "auto",\n      "merge": "auto",\n      "request_changes": "auto",\n      "update_branch": "auto"\n    },\n    "draftPrClosePolicy": "close",\n    "linkedIssueLabelPropagation": {\n      "enabled": true,\n      "mappings": [\n        {\n          "issueLabel": "gittensor:bug",\n          "prLabel": "gittensor:bug",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:feature",\n          "prLabel": "gittensor:feature",\n          "removeOtherTypeLabels": true,\n          "trustMaintainerAuthoredIssue": true\n        },\n        {\n          "issueLabel": "gittensor:priority",\n          "prLabel": "gittensor:priority",\n          "removeOtherTypeLabels": false,\n          "trustMaintainerAuthoredIssueForReward": true\n        }\n      ],\n      "mode": "exclusive_type_label"\n    },\n    "reviewEvasionProtection": "close"\n  },\n  "source": "repo_file",\n  "testExpectations": [\n    "npm run test:ci",\n    "npm run typecheck",\n    "npm run test:coverage"\n  ],\n  "wantedPaths": [\n    "src/",\n    "packages/",\n    "test/",\n    "migrations/",\n    "scripts/",\n    "review-enrichment/",\n    ".github/workflows/",\n    "wrangler.jsonc",\n    "apps/loopover-ui/"\n  ]\n}\n' }

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant