mirror of
https://github.com/shankar0123/certctl.git
synced 2026-06-07 12:21:31 +00:00
508c7530e9
Two separate issues caught after Phase 5 push: ═════════════════════════ ISSUE 1: L-015 CI GUARD ═════════════════════════ The Frontend Build job on commit868f1c25(sidebar maintainer attribution) failed with: ::error::L-015 regression: target="_blank" without rel="noopener noreferrer": web/src/components/Layout.tsx:297: target="_blank" Root cause: the bundle-8-L-015-target-blank-rel-noopener.sh guard uses LINE-BASED grep — it greps each line for `target="_blank"` then filters lines containing `noopener noreferrer`. My sidebar attribution split those across two lines (target= on 297, rel= on 298), so the line with target= never had noopener visible to the line-grep filter and the guard fired. Worth noting: a Haiku-generated recommendation on the failing run claimed "the code already has the correct rel attribute, re-run the CI job." That recommendation was wrong — I verified the failure reproduces locally. Haiku also invented a "FormField React.Children.only" error that doesn't exist (all 7 FormField tests pass locally). Ignored both. Fix: migrate the sidebar attribution from a bare <a target="_blank"> to <ExternalLink href={...}>. ExternalLink (web/src/components/ ExternalLink.tsx) is the canonical chokepoint Bundle-8 shipped exactly for this case — it always emits `rel="noopener noreferrer"` and is allowlisted by the L-015 guard. Trade-off: lost the rel="me" identity- claim hint LinkedIn uses (not load-bearing — LinkedIn's verification flow doesn't depend on it); gained the CI gate. Documented in the edit-site comment. ═════════════════ ISSUE 2: CODEQL js/unused-local-variable #35 ═════════════ CodeQL flagged web/src/pages/DashboardPage.tsx:33 — `formatStatus` is defined but never used. Root cause: Phase 4 (commit9ce2d8ca) extracted the four chart panels into pages/dashboard/charts.tsx, which also moved formatStatus + its callers. The local definition in DashboardPage stayed behind as dead code. CodeQL's first detection at868f1c25is just when the alert was raised — the orphan dates from9ce2d8ca. Fix: delete the local formatStatus line, leaving a comment that points to its new home (pages/dashboard/charts.tsx). ══════════════════════════════ VERIFICATION ════════════════════════════════ • npx tsc --noEmit — exits 0 • All 33 CI guards pass locally (bash scripts/ci-guards/*.sh loop — bundle-8-L-015 now green; no-unbound-label still at baseline 132) • Layout 7/7 + DashboardPage 4/4 = 11/11 green • npx vite build — ✓ in 3.30s • grep target="_blank" web/src/components/Layout.tsx → only matches the explanatory comment, not actual JSX • grep formatStatus web/src/pages/DashboardPage.tsx → only matches the explanatory comment, not actual code Next CI run on master should land green.