Point the README at the canonical repo; add compliance checks - #8
Conversation
The install snippet cloned got-feedback/feedback-plugin-sectionmap, which is not where this repo lives — anyone following it landed on the wrong remote. Also updates the pre-rename "Slopsmith" naming and the /path/to/slopsmith/plugins example. The clone target directory stays `section_map`: it has to match plugin.json's id exactly or the Host skips the plugin at discovery. No version bump — nothing outside the README changed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B4NYejYW2dW7dNtYh7srDy
This repo's ci.yml calls the shared reusable-ci.yml, which runs the test suites and nothing else. The org's original-repo plugins run their own custom-checks.yml instead, so enforcement was split down the middle: forks got tests but no spec checks, originals got spec checks but not always tests. A cross-repo audit found defects on both sides of that line. Three targeted jobs rather than the originals' full sixteen — version-bumped-on-change, changelog-updated, and idempotent-top-level-guard. These are the ones that map to defects actually found in these repos: versions and changelogs going stale while functional source shipped, and screen.js re-executing on reload without a guard. Jobs self-skip where they do not apply. The right home for these is got-feedback/.github's reusable-ci.yml, so every repo picks them up from one reference instead of four copies. The file says so, and says to delete it when that lands. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B4NYejYW2dW7dNtYh7srDy
|
|
Overall Grade |
Security Reliability Complexity Hygiene |
Code Review Summary
| Analyzer | Status | Updated (UTC) | Details |
|---|---|---|---|
| Shell | Aug 13, 2026 3:09a.m. | Review ↗ |
Important
AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.
There was a problem hiding this comment.
Important
The clone-URL fix and the two spec checks are solid (verified: the guard check dry-runs clean against screen.js, and all three jobs self-skip/pass on this PR), but the README's app link now points at a personal fork rather than the canonical app repo, and the git-diff jobs can false-fail PRs on base drift. Details inline.
Reviewed changes
README.md— Retargeted the install snippet fromgot-feedback/feedback-plugin-sectionmap.gitto this repo's canonical clone URL (get-flashbacks/feedBack-plugin-sectionmap.git; thesection_maptarget dir is correctly kept, matching theplugin.jsonid), and refreshed the pre-rename "Slopsmith" naming in the title, the app link, and the install path..github/workflows/compliance.yml(new) — Three plugin-spec compliance jobs:version-bumped-on-change(a.py/.js/.htmlchange outsidetests/must come with aplugin.jsonversion change),idempotent-top-level-guard(awindow.__*reload guard is required when listeners/timers are present), andchangelog-updated(self-skips — this repo has noCHANGELOG.md).
Verified while reviewing: the guard regex passes screen.js via the bracket-const form (window[HOOK_KEY] plus the '__slopsmithSectionMapHooksInstalled' literal); this PR itself only touches README.md and the workflow, so all three jobs skip/pass here; and the node suite is still 16/16.
ℹ️ The guard check proves a guard exists, not that every hotpath is inside it
idempotent-top-level-guard only requires some window.__* flag anywhere in the file. A future change that adds a bare top-level setInterval/addEventListener outside an already-present guard — exactly the reload-duplication bug this job exists to catch — leaves has_guard true and passes. The bracket_const heuristic can also credit a guard when window[someVar] and an unrelated '__…' literal happen to coexist. Both are inherent to a regex check and reasonable for a targeted subset, but worth recording as an accepted limitation so a later contributor doesn't read the green check as proof of idempotency.
ℹ️ Nitpicks
changelog-updated's step is named "CHANGELOG.md Unreleased section must be updated" but the script only requiresCHANGELOG.mdto appear in the diff — any edit anywhere (e.g. inside an already-released section) passes. Enforce theUnreleasedheading, or rename the step to match what it verifies.version-bumped-on-changetreats only.py/.js/.htmlas functional source. Spec best-practices rule 39 requires a version bump for stylesheet changes too (the Host cache-busts plugin assets by version), so a.css-only change slips through. No current impact here — this plugin styles inline — but it will matter if the repo ever shipsassets/plugin.css.
Big Pickle (free) | 𝕏
Review feedback on PR #8. The app link is the canonical got-feedBack/feedBack, not this fork. The original link (got-feedback/feedback) already resolved there via GitHub's org-casing normalisation, so retargeting it at get-flashbacks was a regression, not a fix. The plugin's own clone URL stays on get-flashbacks, which is where this repo actually lives. Compliance workflow, same fixes as the sibling repos: diff against the merge base rather than the base tip — demonstrated in this repo, where base a65c7d3 differs from merge-base 738997b, so a stale branch could be failed for a version bump it does not owe. Also require the [Unreleased] section itself to change, count .css as functional source, and record the guard job's known limitation: it proves a guard exists somewhere in the file, not that every hotpath sits inside one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B4NYejYW2dW7dNtYh7srDy
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — incremental delta since the prior Pullfrog review (a39d53b):
- Retargeted the README's app line from the personal fork to the canonical
got-feedBack/feedBack. - Switched
version-bumped-on-changeandchangelog-updatedto diff against the merge-base instead of the live base tip, so base-only commits no longer false-fail stale PRs (verified here: merge-base738997bexcludes main's base-only LICENSE commit). - Added
.cssto the functional-source extension list in both jobs (spec best-practices rule 39). - Reworked
changelog-updatedto compare the[Unreleased]section between base and head rather than requiring anyCHANGELOG.mdedit. - Documented the guard check's presence-only limitation as a comment in
idempotent-top-level-guard.
All four prior findings (app-link fork regression, base-drift false failures, .css gap, step-name-vs-behavior mismatch) are addressed. I dry-ran the new unreleased() comparison — it correctly passes on a genuine [Unreleased] content change and fails on an edit confined to an already-released section — and confirmed the merge-base diff of this branch against main shows only the two PR files.
Big Pickle (free) | 𝕏
The install snippet cloned this fork. That makes the plugin fork-specific — anyone following the README ends up tracking get-flashbacks rather than the repo the plugin actually comes from, and the plugin stops being useful to its upstream. got-feedBack/feedBack-plugin-sectionmap is the original; this checkout is a fork of it. Point the clone URL there, matching the app link that was already corrected to got-feedBack/feedBack. The original URL (got-feedback/feedback-plugin-sectionmap) resolved to the canonical repo via GitHub's org-casing normalisation, so retargeting it at get-flashbacks was the regression this undoes; the casing is now explicit rather than relying on that normalisation. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B4NYejYW2dW7dNtYh7srDy
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — incremental delta since the prior Pullfrog review (e52997b):
- Retargeted the README's install snippet from this fork's
get-flashbacks/feedBack-plugin-sectionmap.gitback to the canonicalgot-feedBack/feedBack-plugin-sectionmap.git, keeping thesection_maptarget directory.
Verified: the canonical repo exists and the URL casing is exact, so the clone target is valid; the app link, install path, and clone URL now all consistently point at the canonical got-feedBack org; and section_map still matches plugin.json's id (the "silently skipped at discovery" constraint). compliance.yml is unchanged since the prior approving review.
ℹ️ PR description is stale on the install target
The PR description says the snippet "Now get-flashbacks/feedBack-plugin-sectionmap" and argues the original URL was "not where this repo lives". Both are out of step with the branch: the head commit installs from the canonical got-feedBack/feedBack-plugin-sectionmap, and the original got-feedback/feedback-plugin-sectionmap already resolved to that same canonical repo (GitHub treats org-name casing as case-insensitive) — so the genuinely broken part of the old snippet was the pre-rename "Slopsmith" branding, not the remote. A one-line touch-up when merging would let the merged record describe what actually shipped.
Big Pickle (free) | 𝕏

Found during a cross-repository audit of the eight feedBack repos.
README
got-feedBack/feedBack-plugin-sectionmapis the canonical repo; this checkout is a fork of it. The install snippet now clones the canonical repo, and the app link points atgot-feedBack/feedBack.The remote in the original snippet was not actually broken.
got-feedback/feedback-plugin-sectionmapalready resolved to the canonical repo, because GitHub treats org-name casing as case-insensitive. What was genuinely stale was the pre-rename "Slopsmith" branding — the title, the app link text, and the/path/to/slopsmith/pluginsexample. The clone URL now spells the casing explicitly rather than relying on that normalisation.Worth stating plainly since I got it wrong first time round: pointing a plugin's install instructions at a fork makes the plugin fork-specific and stops it being useful to the repo it came from. Installer-facing links belong on
got-feedBack.The clone target directory stays
section_map, matchingplugin.json'sid. That pairing is what marks a plugin as a bundled core one for duplicate resolution — it is not a discovery requirement, since the loader registers plugins by manifestidwhatever the folder is called. (That correction is feedBack#61; the "silent skip at discovery" phrasing is repeated across several repos' docs and is false.)No version bump — nothing outside the README changed, and
version-bumped-on-changeonly triggers on functional source.Compliance checks
This repo's
ci.ymlcalls the sharedreusable-ci.yml, which runs the test suites and nothing else, while the org's original-repo plugins run their owncustom-checks.yml. Enforcement was split down the middle — forks got tests but no spec checks, originals got spec checks but not always tests — and the audit found defects on both sides of that line.compliance.ymladds three targeted jobs rather than the full sixteen:version-bumped-on-change,changelog-updated,idempotent-top-level-guard. Jobs self-skip where they don't apply (noCHANGELOG.mdhere).Hardened after review:
pull_request,base.shais main's live tip, so a two-dot diff counts commits main acquired after the fork — demonstrated in this repo, where merge-base738997bexcludes main's base-only LICENSE commit.changelog-updatedcompares the[Unreleased]section itself rather than checking the file was touched; editing an already-released section used to pass..csscounts as functional source — the Host cache-busts plugin assets by version.The guard check found a bug in itself
Dry-running
idempotent-top-level-guardagainst the sibling repos before adopting it caught a false positive: it only matchedwindow.__flagdot access, so it failed this repo, whose guard issection_map is the org's reference implementation of that guard, and the check would have flagged it as unguarded. The widened version recognises dotted, bracket-literal and bracket-const forms. No change to this repo's
screen.js— the guard here was correct all along.The right long-term home for these three jobs is
got-feedBack/.github'sreusable-ci.yml, so every repo picks them up from one reference instead of four copies. The file says so, and says to delete it when that lands.Suite 16/16.