Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
de609b4
fix(photography): respect Core lightbox safe areas in RTL and mobile
hsxk Oct 16, 2026
660262c
fix(photography): preserve gallery selector parity within aggregate C…
hsxk Oct 16, 2026
10e9945
fix(photography): mirror Core lightbox inline-end spacing in RTL
hsxk Oct 16, 2026
5c9d563
test(photography): capture distinct Core Gallery navigation evidence
hsxk Oct 16, 2026
0353bc5
fix(navigation): reserve bottom safe area in compact menu
hsxk Oct 16, 2026
5831b98
test(navigation): cover short landscape and RTL menu scrolling
hsxk Oct 16, 2026
b2e88d4
test(navigation): guard compact safe-area contract
hsxk Oct 16, 2026
973cb6d
docs(navigation): record landscape safe-area behavior
hsxk Oct 16, 2026
19145a3
build: exclude generated Python artifacts from source and release
hsxk Oct 17, 2026
0b56dc6
test(portfolio): wait for lazy images before full-page evidence
hsxk Oct 17, 2026
8637b24
fix(portfolio): align text-only card styling in Gutenberg
hsxk Oct 17, 2026
dfe2995
test(visual): decode lazy portfolio and photography images before evi…
hsxk Oct 17, 2026
767a1a1
test(visual): follow shared lazy-image helper without weakening evide…
hsxk Oct 17, 2026
c840676
fix(portfolio): respect native Query Loop columns and Core grid layout
hsxk Oct 17, 2026
604d702
test(portfolio): align footer contract with Core Query Loop column ch…
hsxk Oct 17, 2026
fac5874
test(ci): isolate authenticated Gutenberg browser specs from parallel…
hsxk Oct 17, 2026
a787327
test(portfolio): verify native pagination touch and navigation behavior
hsxk Oct 17, 2026
7a02336
fix(ci): add bounded WordPress.org download retry helper
hsxk Oct 17, 2026
fcd3776
test(ci): verify bounded WordPress.org retry behavior
hsxk Oct 17, 2026
5c7e415
test(ci): inventory all exact-HEAD browser screenshots
hsxk Oct 17, 2026
bfb6463
test(ci): cover screenshot inventory tampering and artifact leakage
hsxk Oct 17, 2026
e120e66
ci(browser): gate artifact upload on complete exact-HEAD PNG inventory
hsxk Oct 17, 2026
d34220b
test(browser): validate all responsive full-page screenshot widths
hsxk Oct 17, 2026
e91102a
ci(browser): retain failing Playwright trace for Gutenberg diagnosis
hsxk Oct 17, 2026
609ebbc
fix(photography): decode lazy Core media before full-page evidence
hsxk Oct 17, 2026
2848002
test(photography): cover lazy image activation and stalled loading
hsxk Oct 17, 2026
c5e818a
test(photography): hash all Core crop and zoom screenshots in exact-S…
hsxk Oct 17, 2026
a8851cf
test(visual): require complete appearance and responsive screenshot c…
hsxk Oct 17, 2026
20adfed
fix(ci): fail fast on mixed fatal WordPress download errors
hsxk Oct 18, 2026
3d17e96
fix(ci): use bounded WordPress Core downloads across all fixtures
hsxk Oct 18, 2026
a6477b3
fix(ci): authenticate Gutenberg through guarded WordPress Core requests
hsxk Oct 18, 2026
6ffc2d5
test(ci): align Gutenberg contract with real Core request authentication
hsxk Oct 18, 2026
3f03ddd
fix(knowledge): preserve native nested list flow and forced-color mar…
hsxk Oct 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .distignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,10 @@ phpcs.xml.dist

# Exclude the packaging manifest itself from published themes.
.distignore

# Defense in depth: generated Python caches never belong in release ZIPs.
__pycache__/
*.py[cod]
.pytest_cache/
.mypy_cache/
.ruff_cache/
4 changes: 2 additions & 2 deletions .github/workflows/photography.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
curl -fsSL https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -o /tmp/wp
chmod +x /tmp/wp && sudo mv /tmp/wp /usr/local/bin/wp
mkdir -p /tmp/wp-photo
wp core download --path=/tmp/wp-photo --version=latest
bash bin/retry-wp-core-download.sh --path=/tmp/wp-photo --version=latest
wp config create --path=/tmp/wp-photo --dbname=wordpress --dbuser=root --dbpass=root --dbhost=127.0.0.1:3306 --skip-check
wp core install --path=/tmp/wp-photo --url=http://127.0.0.1:8080 --title=Slateframe --admin_user=admin --admin_password=ci-password --admin_email=ci@example.com --skip-email
ln -s "$GITHUB_WORKSPACE" /tmp/wp-photo/wp-content/themes/slateframe
Expand Down Expand Up @@ -114,7 +114,7 @@ jobs:
: "${SLATEFRAME_PLAIN_GALLERY_PATH:?Missing plain Gallery fixture}"
rm -rf test-artifacts/photography-lightbox
mkdir -p test-artifacts/photography-lightbox
npx playwright test --reporter=list,html,json tests/browser/photography-raster-lightbox.spec.js tests/browser/photography-native-sequence.spec.js tests/browser/photography-class-only.spec.js tests/browser/photography-zoom-caption.spec.js
npx playwright test --reporter=list,html,json tests/browser/photography-raster-lightbox.spec.js tests/browser/photography-native-sequence.spec.js tests/browser/photography-class-only.spec.js tests/browser/photography-zoom-caption.spec.js tests/browser/lightbox-rtl-safe-area.spec.js
- name: Require executed Gallery test coverage
run: python3 tests/verify_gallery_ci_results.py
- name: Require exact-SHA Gallery screenshot evidence
Expand Down
26 changes: 21 additions & 5 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ jobs:
node --check assets/js/theme.js
node --check playwright.config.js
find tests/browser -type f -name '*.js' -print0 | xargs -0 -n1 node --check
node --check tests/browser/test-visual-evidence-helper.cjs
node tests/browser/test-visual-evidence-helper.cjs
node tests/browser/test-wordpress-login.cjs
node tests/browser/test-editor-login-helper.cjs
- name: Validate build script syntax
run: bash -n bin/build-theme-zip.sh
- name: Validate screenshot PNG and corruption regression
Expand Down Expand Up @@ -222,7 +226,7 @@ jobs:
set -euo pipefail
site="/tmp/wp-compat-${{ matrix.wordpress }}-${{ matrix.php }}"
mkdir -p "$site"
wp core download --path="$site" --version="${{ matrix.wordpress }}"
bash bin/retry-wp-core-download.sh --path="$site" --version="${{ matrix.wordpress }}"
wp config create --path="$site" --dbname=wordpress --dbuser=root --dbpass=root --dbhost=127.0.0.1:3306 --skip-check
wp core install --path="$site" --url=http://127.0.0.1:8080 --title=Slateframe --admin_user=admin --admin_password=ci-password --admin_email=ci@example.com --skip-email
ln -s "$GITHUB_WORKSPACE" "$site/wp-content/themes/slateframe"
Expand Down Expand Up @@ -263,7 +267,7 @@ jobs:
curl -fsSL https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -o /tmp/wp
chmod +x /tmp/wp && sudo mv /tmp/wp /usr/local/bin/wp
mkdir -p /tmp/wp-theme-check
wp core download --path=/tmp/wp-theme-check --version=latest
bash bin/retry-wp-core-download.sh --path=/tmp/wp-theme-check --version=latest
wp config create --path=/tmp/wp-theme-check --dbname=wordpress --dbuser=root --dbpass=root --dbhost=127.0.0.1:3306 --skip-check
wp config set WP_DEBUG true --raw --path=/tmp/wp-theme-check
wp core install --path=/tmp/wp-theme-check --url=http://127.0.0.1:8080 --title=Slateframe --admin_user=admin --admin_password=ci-password --admin_email=ci@example.com --skip-email
Expand Down Expand Up @@ -329,7 +333,7 @@ jobs:
- name: Install WordPress and activate Slateframe
run: |
mkdir -p /tmp/wp-site
wp core download --path=/tmp/wp-site --version=latest
bash bin/retry-wp-core-download.sh --path=/tmp/wp-site --version=latest
wp config create --path=/tmp/wp-site --dbname=wordpress --dbuser=root --dbpass=root --dbhost=127.0.0.1:3306 --skip-check
wp core install --path=/tmp/wp-site --url=http://127.0.0.1:8080 --title=Slateframe --admin_user=admin --admin_password=ci-password --admin_email=ci@example.com --skip-email
ln -s "$GITHUB_WORKSPACE" /tmp/wp-site/wp-content/themes/slateframe
Expand Down Expand Up @@ -443,7 +447,7 @@ jobs:
set -euo pipefail
curl -fsSL https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -o /tmp/wp && chmod +x /tmp/wp && sudo mv /tmp/wp /usr/local/bin/wp
mkdir -p /tmp/wp-browser
wp core download --path=/tmp/wp-browser --version=latest
bash bin/retry-wp-core-download.sh --path=/tmp/wp-browser --version=latest
wp config create --path=/tmp/wp-browser --dbname=wordpress --dbuser=root --dbpass=root --dbhost=127.0.0.1:3306 --skip-check
wp core install --path=/tmp/wp-browser --url=http://127.0.0.1:8080 --title='Slateframe' --admin_user=admin --admin_password=ci-password --admin_email=ci@example.com --skip-email
wp post delete 1 --force --path=/tmp/wp-browser >/dev/null
Expand Down Expand Up @@ -821,18 +825,27 @@ jobs:
# must not overlap each other or read-only stylesheet assertions.
readonly_specs=()
stateful_specs=()
authenticated_specs=()
for spec in tests/browser/*.spec.js; do
if grep -Eq 'execFileSync|execSync|spawnSync' "$spec"; then
stateful_specs+=("$spec")
elif grep -Eq 'openAuthenticatedEditor|support/editor-login' "$spec"; then
# Login POSTs mutate WordPress session state; isolate them from
# parallel readers and fixture writers without skipping assertions.
authenticated_specs+=("$spec")
else
readonly_specs+=("$spec")
fi
done
test "${#readonly_specs[@]}" -gt 0
test "${#stateful_specs[@]}" -gt 0
printf 'Parallel read-only specs: %s; isolated WP fixture specs: %s\\n' "${#readonly_specs[@]}" "${#stateful_specs[@]}"
test "${#authenticated_specs[@]}" -gt 0
printf 'Parallel read-only: %s; isolated WP fixture: %s; isolated Gutenberg login: %s\\n' "${#readonly_specs[@]}" "${#stateful_specs[@]}" "${#authenticated_specs[@]}"
# Preserve failure traces before a later suite clears test-results.
trap 'status=$?; if [ "$status" -ne 0 ] && [ -d test-results ]; then mkdir -p test-artifacts/browser-failure; cp -a test-results test-artifacts/browser-failure/responsive; fi' EXIT
npx playwright test "${readonly_specs[@]}"
npx playwright test "${stateful_specs[@]}" --workers=1
npx playwright test "${authenticated_specs[@]}" --workers=1
- name: Verify compact Appearance bounds
if: ${{ always() }}
env:
Expand Down Expand Up @@ -922,13 +935,16 @@ jobs:
done
python3 bin/check-screenshot.py test-artifacts/screenshots/wordpress-org-screenshot-candidate.png
python3 tests/verify_footnotes_screenshots.py test-artifacts/screenshots "$SLATEFRAME_EVIDENCE_SHA"
python3 tests/verify_browser_inventory.py generate
python3 tests/verify_browser_inventory.py verify
- name: Upload browser artifacts
if: ${{ always() }}
uses: actions/upload-artifact@v4
with:
name: slateframe-browser
path: |
test-artifacts/screenshots/
test-artifacts/browser-failure/
playwright-report/
test-results/
/tmp/slateframe-server.log
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,9 @@ dist/
playwright-report/
test-results/
test-artifacts/
# Generated Python caches must never become theme source.
__pycache__/
*.py[cod]
.pytest_cache/
.mypy_cache/
.ruff_cache/
Loading
Loading