chore: tech-debt cleanup checklist (#51)#64
Merged
Conversation
Closes #51. All ten checklist items: 1. Consolidate parse_issue_body / parse_state / parse_deadline into util.py; auto_extract.py and contribution_approved.py now call the shared helpers (parse_issue_body takes strip_symbols to preserve each script's field keys). 2. Single repo-identity source: web/lib/repo.ts (REPO_SLUG/REPO_URL/ REPO_RAW_BASE, override via NEXT_PUBLIC_REPO_SLUG) used by types-hq.ts, parse-readme.ts, next.config.ts; util.repo_url() (from GITHUB_REPOSITORY) used by weekly_digest.py. 3. Enable tsconfig noUncheckedIndexedAccess and handle every resulting nullable (listings.ts, parse-readme.ts, tracker.tsx, several legacy components) with safe fallbacks / type-predicate filters — no unchecked assertions. 4. Scope the Audio monkeypatch to the disc player: patch lazily from the component (idempotent) instead of a top-level import side effect. 5. Shared scroll-lock counter (web/lib/scroll-lock.ts) used by the preloader and detail modal, so overlapping overlays don't fight over body.overflow. 6. Validate the localStorage payload into a clean TrackerMap (drop unknown ids/stages) instead of casting any valid JSON. 7. Split selection vs tracker into separate contexts (useSelection / useTracker) so opening/closing the modal no longer re-renders every card. 8. Render gallery caption/credit/credit_url (previously dropped) via the tile alt/title. 9. Remove the stray `georgetown` file. 10. Document the client-only /my auth caveat at the enforcement point (proxy.ts). Verified: next build + lint + tsc --noEmit + 15 vitest tests pass; scripts compile and 14 Python unittests pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Carry the lockfile fix from #63 onto this branch so its Web CI passes rather than failing at `npm ci` on the inherited out-of-sync lockfile. Regenerated with npm@11.16.0 (the CI runner version); verified `npm ci`, lint, test (15/15), build, and tsc --noEmit all pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolve conflicts from the lower-stack fixes now on main: - next.config.ts / parse-readme.ts: keep this branch's repo-identity consolidation (REPO_SLUG + REPO_RAW_BASE imported from lib/repo.ts) over the hardcoded raw URL from the #61 fix. - lib/repo.ts: set the REPO_SLUG default to the canonical Hack-HQ/hackhq (was Jose-Gael-Cruz-Lopez/hackhq) so the #61 owner fix is preserved through the consolidation instead of silently reverted. - The #62 ISR tracing config, #61 cache header, and #62 guarded-read re-throws auto-merged cleanly; lockfile auto-merged (identical). Verified: npm ci, lint, test (15/15), build, tsc, and scripts tests all pass.
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.
Closes #51 — all ten items. Stacked on #63 (base
ci/web-app-and-tests). Merge #60 → #61 → #62 → #63 → this.parse_issue_body/parse_state/parse_deadlineconsolidated intoutil.py; both scripts call the shared helpers (strip_symbolspreserves each one's field keys)web/lib/repo.ts(REPO_SLUG/REPO_URL/REPO_RAW_BASE, override viaNEXT_PUBLIC_REPO_SLUG) used across web;util.repo_url()(fromGITHUB_REPOSITORY) inweekly_digest.pynoUncheckedIndexedAccess!) across lib + legacy componentsAudiopatchlib/scroll-lock.tsused by preloader + detail modalTrackerMap(unknown ids/stages dropped)useSelection/useTrackerso a modal open/close doesn't re-render every deck cardcaption/credit/credit_urlsurfaced in the tile alt/titlegeorgetown/mygate documented at the enforcement point (proxy.ts)Verification
next build+npm run lint+tsc --noEmit+ 15 vitest testsNotes
🤖 Generated with Claude Code