Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
44 changes: 39 additions & 5 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,56 @@
name: Deploy to GitHub Pages
name: Test and deploy to GitHub Pages

on:
pull_request:
branches: [main]
push:
branches: [main]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
group: pages-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm

- name: Install dependencies
run: npm ci --ignore-scripts --no-audit --no-fund

- name: Run tests
run: npm test

- name: Check shipped JavaScript syntax
run: |
node --check public/game.js
node --check public/theme.js
node --check public/theme-renderer.js
node --check public/theme-rain-adapter.js
node --check public/theme-rain-bootstrap.js
node --check public/theme-rain-controller.js

deploy:
name: deploy
if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')
needs: test
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
Expand All @@ -24,7 +59,6 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

# This project serves static files from ./public
- name: Configure Pages
uses: actions/configure-pages@v5

Expand Down
41 changes: 36 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,39 @@

All notable changes to this project are recorded here.

## Unreleased
- Added title-screen checkbox to toggle "Preview next block" (localStorage key: stacklogic_preview_next_v1).
- Implemented next-piece preview rendering on canvas and prefetched next piece logic.
- Fixed preview position so it renders inside the canvas.
- Added iOS double-tap guard for on-screen controls to reduce accidental zooming.
## [Unreleased]

## [0.2.0-beta.1] - 2026-07-25

### Added
- Added a title screen with Default, Matrix, CandyPop, and Dark themes.
- Added theme-aware piece rendering and persistent local theme selection.
- Added Matrix rain with single-owner animation lifecycle, resize and DPR handling, reduced-motion support, cleanup fencing, and non-interference with gameplay controls.
- Added a dedicated pause menu with synchronized theme selection and explicit resume behavior.
- Added Arrow-key and Home/End navigation with roving focus for theme radio groups.
- Added deterministic unit and real-browser acceptance coverage for themes, rain lifecycle, browser integration, and responsive controls.

### Changed
- Matrix game pieces now use deterministic solid green shades without glyph faces.
- Dark game pieces now use deterministic solid black-to-grey shades.
- Wide touch devices such as iPad Pro now expose on-screen controls based on coarse/no-hover input capability rather than viewport width alone.

### Fixed
- Preserved Matrix stream identity and geometry across viewport and DPR changes.
- Prevented duplicate animation ownership, stale callbacks, interaction interception, and reduced-motion resource allocation.
- Stopped and restarted Matrix rain when the operating-system reduced-motion preference changes live.
- Corrected selected Matrix and CandyPop theme-label contrast to meet WCAG AA.
- Remediated known Express transitive dependency advisories in the development/server toolchain.

## [0.1.0-beta.1] - 2026-02-08

### Added
- Added a title-screen checkbox to toggle the next-block preview using localStorage key `stacklogic_preview_next_v1`.
- Added next-piece preview rendering and prefetched next-piece logic.
- Added localStorage-only high scores for GitHub Pages.
- Added GitHub Pages deployment.

### Fixed
- Kept the next-piece preview inside the canvas.
- Added an iOS double-tap guard for on-screen controls.
- Corrected GitHub Pages paths for music and intro assets.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# StackLogic

**Version:** v0.1.0-beta.1
**Version:** v0.2.0-beta.1

A fast-paced, block-stacking arcade puzzler with crisp controls and escalating challenge.

Expand Down
66 changes: 66 additions & 0 deletions docs/releases/v0.2.0-beta.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# StackLogic v0.2.0-beta.1

Release date: 2026-07-25

Public URL: https://vector-sigma-works.github.io/StackLogic/

## Summary

This beta minor release adds StackLogic's theme system and the first accepted Matrix experience while preserving gameplay geometry and pacing. Players can select Default, Matrix, CandyPop, or Dark from the title screen and can change themes while paused without restarting or resuming the game.

## User-visible changes

- Four persistent themes: Default, Matrix, CandyPop, and Dark.
- Matrix rain behind the game and UI, with input-safe stacking.
- Solid Matrix pieces in deterministic green shades.
- Solid Dark pieces in deterministic black-to-grey shades.
- Theme selection in a dedicated pause menu.
- Accessible Arrow-key and Home/End theme navigation with synchronized roving focus.
- Wide touch-device controls for iPad-class landscape and portrait viewports.
- Reduced-motion behavior that creates no Matrix rain animation resources and stops/restarts rain when the preference changes live.

## Validated implementation chain

1. `a38013d` — title and theme scaffolding
2. `bd9ff25` — theme-aware renderer foundation
3. `2bc4a6c` — Matrix rain lifecycle controller
4. `712d2f4` — synchronous theme-change contract
5. `a124129` — deterministic Matrix rain adapter
6. `156d81e` — browser Matrix rain integration
7. `def2ddc` — solid theme palettes, tablet controls, and pause themes

The release is merged with history preserved so each independently validated phase remains auditable.

## Verification

The release candidate passed:

- 80 canonical tests before release metadata coverage was added;
- focused renderer, lifecycle, adapter, and bootstrap tests;
- real-browser Matrix ownership, stacking, hit-testing, persistence, resize/DPR, reduced-motion, and cleanup gates;
- wide iPad-class landscape and portrait visibility/hit-testing gates;
- pause-time Dark and Matrix switching while the board remained frozen;
- an exact canvas-fill trace against `stacklogic-dev.game.lan`, proving Matrix fills belong only to the approved green palette and Dark fills only to the approved grayscale palette;
- changed-line security and scope scans;
- real-browser keyboard/focus acceptance and computed selected-label contrast above 4.5:1;
- real-browser live reduced-motion stop/restart acceptance without reload;
- `npm audit --omit=dev`: 0 vulnerabilities after lockfile-only transitive remediation;
- fresh independent semantic review.

Final release test counts and public GitHub Pages evidence are recorded in the pull request and GitHub Release after deployment.

## Compatibility and data

- No gameplay board geometry, timing, scoring, or save-format migration is introduced.
- Existing local high scores and preferences remain in browser localStorage.
- No runtime dependency was added for the theme or rain implementation.

## Known limitation

Web applications cannot directly observe whether an iPad hardware keyboard is docked. On-screen controls use the standards-based `(hover: none) and (pointer: coarse)` input-capability proxy. Automated iPad-class viewport emulation passes; physical Safari behavior remains a hardware/browser acceptance boundary.

## Rollback

The pre-release production baseline is tag `v0.1.0-beta.1` at commit `07e5f1772f1daab2764bbe5c5f3f3cb4d09fca34`.

If public verification fails, revert the release merge commit through a reviewed rollback pull request and allow the gated GitHub Pages workflow to redeploy. Do not force-reset `main` or move release tags.
67 changes: 34 additions & 33 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
{
"name": "stacklogic-app",
"version": "0.1.0",
"version": "0.2.0-beta.1",
"private": true,
"type": "module",
"main": "server.js",
"scripts": {
"start": "node server.js"
"start": "node server.js",
"test": "node --test tests/**/*.mjs"
},
"dependencies": {
"express": "^4.19.2"
Expand Down
Loading
Loading