diff --git a/CHANGELOG.md b/CHANGELOG.md index 9dc88622d..cbff28aa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,9 +45,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **Awesome GitHub Site Phase 07: Catalogue list pages with filter bar and Wapuu hero** — Replaced the old catalogue index with a spec-aligned `/c/[cat]` route, added the shared Wapuu hero component, introduced tag-chip filtering with AND logic, and surfaced the category type note and install-action cards for all eight catalogue pages. ([#866](https://github.com/lightspeedwp/.github/issues/866), [#867](https://github.com/lightspeedwp/.github/pull/867)) - **Awesome GitHub Site Phase 05: Homepage all 5 blocks wired to live data** — Rebuilt the homepage with the spec-aligned hero, live catalogue counts, feature strip, and Cook+Learn cards. Added the typed catalogue exports used by the homepage counts, copied the Wapuu assets into `website/public/assets/wapuus/`, and added an `onboarding/` alias that redirects to `getting-started/` for the primary CTA. ([#861](https://github.com/lightspeedwp/.github/issues/861), [#862](https://github.com/lightspeedwp/.github/pull/862)) +### Added + - **Awesome GitHub Site Phase 13: Search command palette** — Site-wide ⌘K search palette (`website/src/components/SearchPalette.astro` + `website/src/scripts/search.js`) added to `AwesomeGithubLayout`. Build-time JSON index of all catalogue items serialised into a `data-items` attribute. Empty query shows 7 Popular items; typed query uses multi-word AND substring matching across name, description, tags, and category (capped at 12 results). Keyboard navigation (↑↓ arrow keys, Enter to open result, Escape to close, Tab focus-trap between input, close button, and result items). Fully accessible: `role="dialog"`, `aria-modal`, `aria-selected`, focus returns to trigger on dismiss. ([#764](https://github.com/lightspeedwp/.github/issues/764), [#889](https://github.com/lightspeedwp/.github/pull/889)) - **Awesome GitHub Site Phase 11: Tools page + Phosphor Icons sitewide** — Standalone `/c/tools.astro` with astropuu Wapuu hero, section nav pills (AI Defaults, Scripts, Schemas, Config & Setup), and a build-time Phosphor icon loader (`website/src/lib/phosphor.ts`) using `createRequire` for robust package resolution. Updated `Icon.astro` with `ph:` prefix routing to load any Phosphor icon at SSG time. Migrated item card and type badge styles into `global.css` for reuse across catalogue and tools pages. Updated all category, nav, learn, and home icons to Phosphor equivalents sitewide. ([#885](https://github.com/lightspeedwp/.github/issues/885), [#886](https://github.com/lightspeedwp/.github/pull/886)) + - **Awesome GitHub Site Phase 02: CSS Token Layer + Global Styles** — Established the complete CSS foundation for the Awesome GitHub site. Added `website/src/styles/site-tokens.css` with app-specific surface tokens (`--panel`, `--panel-2`, `--hair`), font stacks, radius/shadow/transition scales, and `color-scheme` declarations for both light and dark themes. Added `website/src/styles/global.css` with container system (`.wrap` 1320px, `.wrap-prose` 820px), section rhythm via `clamp()`, button system (`.btn-primary`, `.btn-ghost`, `.btn-soft`, `.icon-btn`) with `:focus-visible` rings and browser-compat fallbacks, breadcrumb, kbd chip, burger breakpoints, `.md` prose styles, and scroll-motion accessibility guard. Fixed `BaseLayout.astro` CSS import order and corrected `localStorage` theme key to `ag-theme`. ([#852](https://github.com/lightspeedwp/.github/issues/852), [#853](https://github.com/lightspeedwp/.github/pull/853)) - **Awesome GitHub Site: UI Redesign — Dark Mode, Navigation & Responsive Layout** — Complete navigation and UI overhaul. Added desktop Browse mega-dropdown with 4-column category grid (hover/click open, keyboard Escape dismiss, focus-out close). Added full-height mobile drawer sliding from right with backdrop overlay, scroll-lock, and `inert` guard. Fixed dark-mode nav header (was showing light background). Added fluid responsive CSS tokens for spacing and font sizes across breakpoints. Improved accessibility: Disclosure pattern (`aria-expanded`/`aria-controls`, no `role="menu"`), `aria-pressed` on theme toggle buttons, `inert` on closed drawer, nav z-index raised above drawer so hamburger stays accessible. ([#847](https://github.com/lightspeedwp/.github/issues/847), [#845](https://github.com/lightspeedwp/.github/pull/845)) diff --git a/docs/BRANCHING_STRATEGY.md b/docs/BRANCHING_STRATEGY.md index 6744abe02..a01ffcb52 100644 --- a/docs/BRANCHING_STRATEGY.md +++ b/docs/BRANCHING_STRATEGY.md @@ -2,10 +2,10 @@ file_type: documentation title: Org-wide Git Branching Strategy description: Canonical branch naming, protection, merge discipline, and automation rules for LightSpeedWP repositories. -last_updated: '2026-06-08' +last_updated: '2026-06-09' owners: - LightSpeed Team -version: v1.4 +version: v1.5 status: active stability: stable domain: governance @@ -149,6 +149,7 @@ hotfix/ga4-purchase-duplicate - If the current branch belongs to a different issue, PR, or task, create a new branch from `develop` before making changes. - Do not reuse in-flight branches for unrelated work, even when the working tree is already open. - If unrelated local changes are present, use a clean worktree rather than mixing scopes. +- Temporary audit replay branches created for PR merge prep may use the form `pr--audit` when they need to keep a live PR attached to a historical review branch. Use a single regex in a workflow to enforce naming discipline: @@ -172,6 +173,8 @@ jobs: BRANCH="${{ github.head_ref }}" # Allow dependabot/renovate if [[ "$BRANCH" =~ ^(dependabot|renovate)/ ]]; then exit 0; fi + # Allow temporary audit replay branches used for PR merge prep + if [[ "$BRANCH" =~ ^pr-[0-9]+-audit$ ]]; then exit 0; fi if [[ ! "$BRANCH" =~ ^(feat|fix|hotfix|release|refactor|chore|docs|test|perf|ci|build|deps|security|revert|research|design|a11y|ux|i18n|ops|proto|ds|api|schema|telemetry|content|seo|config|migrate|qa|uat)/[a-zA-Z0-9._-]+$ ]]; then echo "❌ Branch '$BRANCH' must match the required pattern." exit 1 diff --git a/scripts/validation/__tests__/validate-branch-name.test.js b/scripts/validation/__tests__/validate-branch-name.test.js new file mode 100644 index 000000000..c2d3e978e --- /dev/null +++ b/scripts/validation/__tests__/validate-branch-name.test.js @@ -0,0 +1,32 @@ +/** + * @jest-environment jsdom + */ + +const { spawnSync } = require("child_process"); +const path = require("path"); + +const scriptPath = path.join(__dirname, "../validate-branch-name.js"); + +function runValidator(branchName) { + return spawnSync(process.execPath, [scriptPath, "--branch", branchName], { + encoding: "utf8", + }); +} + +describe("Branch name validation", () => { + it("accepts temporary audit replay branches", () => { + const result = runValidator("pr-895-audit"); + + expect(result.status).toBe(0); + expect(result.stdout).toContain( + "matches the repository branching strategy", + ); + }); + + it("rejects malformed branch names", () => { + const result = runValidator("audit-branch"); + + expect(result.status).toBe(1); + expect(result.stderr).toContain("does not follow the required format"); + }); +}); diff --git a/scripts/validation/validate-branch-name.js b/scripts/validation/validate-branch-name.js index 1968359ba..b1010cfd2 100644 --- a/scripts/validation/validate-branch-name.js +++ b/scripts/validation/validate-branch-name.js @@ -44,6 +44,7 @@ const ALLOWED_PREFIXES = [ ]; const BOT_PREFIXES = /^(dependabot|renovate)\//; +const AUDIT_BRANCH_PATTERN = /^pr-\d+-audit$/; const PROTECTED_BRANCHES = new Set(["main", "develop"]); const BRANCH_PATTERN = new RegExp( `^(${ALLOWED_PREFIXES.join("|")})/[a-zA-Z0-9._-]+$`, @@ -90,6 +91,7 @@ function isAllowed(branchName) { return ( PROTECTED_BRANCHES.has(branchName) || BOT_PREFIXES.test(branchName) || + AUDIT_BRANCH_PATTERN.test(branchName) || BRANCH_PATTERN.test(branchName) ); } @@ -100,6 +102,7 @@ function printFailure(branchName) { "Expected: {prefix}/{branch-slug} (see docs/BRANCHING_STRATEGY.md)", ); console.error(`Allowed prefixes: ${ALLOWED_PREFIXES.join(", ")}`); + console.error("Audit replay branches: pr--audit"); console.error( "Examples: fix/frontmatter-validation, docs/canonical-configs-guide, ops/branch-governance-guardrails", ); diff --git a/website/src/styles/site-tokens.css b/website/src/styles/site-tokens.css index 4786fdf65..f3f7ddbf1 100644 --- a/website/src/styles/site-tokens.css +++ b/website/src/styles/site-tokens.css @@ -11,6 +11,7 @@ /* Surface elevation above --bg */ --panel: #FFFFFF; --panel-2: #F9FAFB; + --overlay-scrim: rgba(9, 9, 9, 0.55); /* Hairline border — use this, NOT var(--border) */ --hair: var(--border); @@ -47,6 +48,7 @@ color-scheme: dark; --panel: #16171D; --panel-2: #1B1C23; + --overlay-scrim: rgba(0, 0, 0, 0.65); --hair: rgba(255, 255, 255, 0.09); --overlay-hover: rgba(255, 255, 255, 0.06);