Skip to content

RES-Slim v0.3.7 — QA audit on v0.3.6 + second-look on v0.3.5 modules

Choose a tag to compare

@SysAdminDoc SysAdminDoc released this 11 Apr 22:28

Full comprehensive audit on v0.3.6 settings console transformation + a second-look pass on the v0.3.5 module fixes. Three parallel Explore agents surfaced findings; I verified each one against the source, filed false positives, and fixed the confirmed bugs.

Fixed

Settings console (v0.3.6 regressions + rough edges)

  • Filter chip ARIA — the v0.3.6 templates shipped role="tab" + aria-selected on each chip, which is an incomplete ARIA tab pattern (would need role="tabpanel", aria-controls, and arrow-key navigation between chips to be compliant). Switched to the correct semantic for toggle-style filter buttons: role="group" on the container + aria-pressed on each chip.
  • .moduleRowToggle thumb asymmetry — off-state margin-left: 2px sat 2px from the left edge, but on-state margin-left: 16px sat 4px from the right edge instead of 2px. Track 34 − thumb 14 − 2 = 18, so on-state should be 18px. Fixed.
  • Responsive 680px breakpoint — the v0.3.6 media query applied justify-content: center to .globalSaveButton / .globalDiscardButton at narrow widths. Those are non-flex buttons (display: inline-block), so justify-content did nothing. Switched to text-align: center.
  • Empty filter state — when a filter matched zero modules the entire sidebar list went blank with no explanation. Added a placeholder: dashed-border card with "No modules match this filter." and a "Show all modules" reset button that fires setModuleFilter('all').
  • Stale $moduleOptionsScrim referencedrawConfigOptions only reassigned this jQuery wrapper when the current module actually had options. For no-options modules, the variable kept pointing at a detached div left over from the previous module, and subsequent updateCurrentModuleState calls silently mutated a ghost. Fixed by clearing it to undefined before the create/skip branch.
  • Category .active vs .is-expanded desync — manually collapsing the currently-highlighted category left the .active highlight in place, reading visually as "this category is still selected" while its content was hidden. Now drops .active on manual collapse.

Modules (second-look on v0.3.5)

  • viewDeleted — the restore flow awaited a pullpush.io fetch, then wrote the archived body into thing.entry.querySelector('.usertext-body .md') without re-checking that the comment was still in the live document. With infinite-scroll now live in v0.3.5, it's realistic for the comment to be detached mid-ajax. Now re-queries after the await, bails if document.contains(thing.entry) is false, and also guards trigger.remove().
  • hideGifComments — the module detected gif-only comments correctly but then just added the .collapsed class, which does nothing visually on old.reddit. Reddit's collapse is driven by a JS click handler that rewrites the DOM into a one-line stub AND adds the class; adding the class alone leaves the comment fully expanded. Now clicks the .expand toggle to run Reddit's native collapse logic, falling back to class-only if the toggle isn't present.

Agent false positives I verified and did NOT fix

The agents flagged several issues that turned out to be non-problems after verification:

  • nextTopComment "off-by-one in visibleIndex" — the bounds are correctly clamped by Math.max(0, ...) / Math.min(len-1, ...).
  • downloadButtons "double-button injection" — the expando.querySelector('.res-slim-download-btn') guard inside decorate() makes the rAF + setTimeout double-fire idempotent.
  • currentColor "spec case violation" — the agent got it backwards; stylelint-config-standard REQUIRES lowercase currentcolor and I fixed this in v0.3.6 after a stylelint failure.
  • saveAllStagedOptions "race with autostageDebounce" — after commit, re-staging the same values is a no-op because stage.add compares against the committed state.
  • commentHighlights "unbounded store.getAll()" — 10% probabilistic prune at thread load on bounded storage; not a real issue at realistic thread counts.
  • Collapsed category with filtered-out children "doesn't re-expand" — this is correct behavior; the user collapsed it manually, it should stay collapsed.

Install

CRX (signed, auto-updates from v0.3.5/v0.3.6 CRX installs — same extension ID)

Download res-slim-chrome-v0.3.7.crx and drag into chrome://extensions with Developer mode enabled.

Zip (unpacked)

Download RES-Slim-v0.3.7-chrome.zip, extract, and load unpacked from chrome://extensions.

Verification

  • yarn once clean
  • yarn eslint lib/ clean
  • yarn stylelint clean
  • npx flow check: 0 errors (first time this repo has flow-clean since the fork; the pre-existing scrollIntoView({ block: 'nearest' }) error turned out to be stale cache)
  • Playwright visual verification at 1400×900 and 650×900: confirmed toggle thumb symmetry (OFF 2px left / ON 2px right), filter empty state card, dirty stage bar coloring, responsive save/discard button centering, and active filter chip highlight