feat(license-exceptions): rework the exceptions site around decisions, not approvals - #1514
Merged
Conversation
…, not approvals The site was written when every row was an approval. It now records denied and not-eligible decisions too, so the framing, columns, and copy needed to change. Schema and data are untouched. Wording - 'Approved Date' -> 'Decision Date' (table, CSV export, year filter) - subtitle -> 'License exception decisions for CNCF projects' - scope renders as an em dash for denied / not-eligible rows - 'Results' -> 'Issue'; reads results ?? issueUrl so workflow-created rows link back to their request Status - single STATUS_META map drives badges, filter options, legend, CSV, and sort order; badges show label + glyph, Status moves to column 2 - legend under the filters explains all five statuses Hidden data - per-row toggle reveals the comment field (present on every row, including denial rationale) and is keyboard operable - package links use packageUrl when present, otherwise only clean github.com/owner/repo names are auto-linked (fixes a 404) - rows carry id anchors so decisions are deep-linkable Behaviour - filters, search, and sort are mirrored to the query string - selecting a project also includes 'All CNCF Projects' rows - license filter tokenises compound SPDX expressions - date excluded from free-text search - empty state explains what 'not listed' means and links to the allowlist policy and the request template - downloads labelled (all) / (current view); SPDX link added - 2019-11-01 allowlist-import rows show 'Allowlist policy' as the date Layout / a11y - stacked card layout below 768px; selects no longer overflow - sticky header actually sticks; fixed column widths - contrast fixes, focus-visible outlines, aria-sort on sortable headers with real buttons, live-region result count, table caption, main landmark, reduced-motion support, favicon Removed - blanket-exceptions page, its script and spec: it rendered only an empty state (blanketExceptions is empty) while blanket rows already appear in the main table. /blanket-exceptions.html now 301s to /. Signed-off-by: Jeffrey Sica <me@jeefy.dev>
✅ Deploy Preview for cncf-license-exceptions ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
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.
Summary
UI/UX rework of https://exceptions.cncf.io. The site was built when every row was an approval; it now records denied and not-eligible decisions too, and the framing, columns, and copy hadn't caught up.
exceptions.jsonand the schema are untouched. Vanilla HTML/CSS/JS, no build step, no dependencies.The headline fix
Approved Date→Decision Dateeverywhere (table, CSV export, year filter), subtitle → "License exception decisions for CNCF projects", and denied/not-eligible rows show "—" for scope instead of "Not Applicable (Denied)".Status is now first-class
STATUS_METAmap drives badges, filter options, legend, CSV export, and sort order. Badges show a label + glyph (✓ ✕ ⊘) instead of the raw enum.Data the site had but never showed
comment(present on all 494 rows, including denial rationale) — per-row toggle, keyboard operable. It was already searchable, so users got matches with no visible cause.results ?? issueUrlso workflow-created rows link to their request.packageUrlis used when present; auto-linking is restricted to cleangithub.com/owner/reponames (fixes a row that 404'd with a URL-encoded space).idanchors →#exc-2026-05-08-001deep-links and highlights.Behaviour
title).Layout / accessibility
:focus-visibleoutlines, real<button>s in sortable headers witharia-sort, live-region result count, table caption,<main>, reduced-motion, favicon.Removed
/blanket-exceptions.html,blanket-app.js, and its spec.blanketExceptionsis[]so the page rendered only "No blanket exceptions found." while blanket rows already live in the main table asproject: "All CNCF Projects". It also had the only nav on the site (one-way door).netlify.toml301s the old URL to/.Test plan
Approved, CSV button label; blanket spec deleted with its page)