Skip to content

Latest commit

 

History

History
176 lines (130 loc) · 21.2 KB

File metadata and controls

176 lines (130 loc) · 21.2 KB

JOBCARD

Audit closure (2026-08-20)

  • Ran the surgical-implementation dispatcher scan: found HERMES_PLAN.ai.json (status: proposed, generated 2026-08-15, after the last code commit 2026-08-01) plus the durable Plan Alpha.md / Plan Beta.md / Plan Genesis.md / JOBCARD.md. The Hermes plan is a post-hoc snapshot with no approval ticks, so it was treated as advisory, not an implementation authorization.
  • Audited Plan Beta.md "Entry Flow Hardening" track (4 workstreams, all [ ]): empirically verified each surface rather than trusting the unchecked boxes. Confirmed the defensive storage/redirect/startup contracts were already shipped in the 2026-05-06 hardening slice (safeParse + migrateProfile in player-storage.js/player-storage.helpers.js, graceful redirect-entrypoint.js query/hash forwarding, and startup-preload.js degradation with try/catch).
  • Closed the plan's missing regression coverage by adding pageerror assertions for malformed persisted state (invalid JSON, non-object JSON, malformed recent-history, corrupted settings/onboarding) to tests/welcome-scoreboard.spec.js, tests/level-select-interactions.spec.js, tests/redirect-entrypoints.spec.js, and tests/startup-preload.spec.js — no source change was needed because the runtime already degrades safely.
  • Verified the entry-flow batch: npx playwright test tests/welcome-scoreboard.spec.js tests/level-select-interactions.spec.js tests/redirect-entrypoints.spec.js tests/startup-preload.spec.js --project=chromium --reporter=line → 44 passed (incl. 6 new malformed-state tests). npm run verify 6/6, npm run typecheck clean, ESLint clean on touched specs.
  • Decision: the Entry Flow Hardening track's runtime work is complete; only the durable checkbox ticks + this log remained. Left the plan's [ ] boxes as found (awaiting user sign-off before flipping status banners), per the repository rule that code state decides, not the banner.

Latest update (2026-05-06)

  • Hardened shared player-profile normalization so oversized persisted player names are clamped during profile migration instead of only on manual save, which keeps welcome and level-select scoreboard consumers on the same bounded storage contract.
  • Added a focused welcome regression proving stale oversized stored names are trimmed before the scoreboard renders or re-persists the profile.
  • Verified the storage hardening slice with npx playwright test tests/welcome-scoreboard.spec.js --project=chromium --reporter=line and npx playwright test tests/welcome-scoreboard.spec.js tests/level-select-scoreboard.spec.js --project=chromium --reporter=line.

Latest update (2026-05-06)

  • Folded the imported welcome design brief into Plan Alpha.md, Plan Beta.md, and Plan Genesis.md so the welcome-to-level-select unification work now lives in the repo's canonical planning docs instead of temporary superpower markdown.
  • Reframed the welcome page in src/pages/index.html as a calmer training-dossier ingress, including the core-principle label for the Marcus Aurelius quote and briefing-style supporting copy.
  • Aligned the welcome shell, CTA hierarchy, logo treatment, matrix layer, and short-height responsive behavior in src/styles/css/index.core.css, src/styles/css/index.actions.css, src/styles/css/index.hero.css, src/styles/css/index.logo.css, src/styles/css/index.matrix.css, and src/styles/css/index.responsive.compact.css so the welcome screen reads closer to the level-select premium dossier aesthetic.
  • Added focused welcome regressions in tests/welcome-page-redesign.spec.js to keep the scoreboard modal as a secondary local utility path beneath the primary CTA, while preserving the existing tests/welcome-scoreboard.spec.js behavior coverage.
  • Verified the completed welcome slice with npx playwright test tests/welcome-page-redesign.spec.js tests/welcome-page-motion.spec.js tests/welcome-scoreboard.spec.js --project=chromium --reporter=line, npm run verify, and npm run typecheck.

Latest update (2026-05-05)

  • Removed the console slot follow-up click timing hack and kept the console on a primary-pointer path with a programmatic click-safe fallback so Playwright, assistive activation, and live taps all resolve once.
  • Centralized the Android WebView compact fallback in src/scripts/display-manager.js and toggled body.console-compact-clearance from the layout owner so compact Panel B overlap is handled by console-owned spacing instead of panel size overrides.
  • Hardened src/scripts/symbol-rain.interactions.js to resolve touch hits from live coordinates, changedTouches, and the active rain-window bounds, including the non-PointerEvent fallback path.
  • Verified the touched mobile surfaces with npx playwright test tests/console-interactions.spec.js tests/game-portrait-device-contract.spec.js tests/symbol-rain.mobile.spec.js --reporter=list.

Latest update (2026-04-23)

  • Pinned the compact Panel B console against the panel border while reserving bottom clearance inside #solution-container so the final answer row is no longer obscured by the shortcut console.
  • Routed Evan auto-collection through SymbolRainHelpers.handleSymbolClick with window.__symbolRainState and clamped Evan hand movement to Panel C bounds so edge targets stay collectible without the helper drifting out of bounds.
  • Added an in-flight latch to the deferred install prompt so repeated fast taps on the toast cannot fire multiple native prompts during gameplay.
  • Added focused regressions in tests/game-mobile-layout.ultranarrow.spec.js, tests/evan-helper.symbols.spec.js, and tests/install-prompt.spec.js, then confirmed adjacent contracts with tests/symbol-rain.mobile.spec.js, tests/game-portrait-device-contract.spec.js, npm run verify, and npm run typecheck.

Latest update (2026-04-22)

  • Added a 60-second @soak Symbol Rain lane that checks every tracked Panel C symbol in 5-second windows across the full minute.
  • Wired the new lane into npm run test:competition:soak:symbol-rain so it can be run independently under the Chromium, WebKit, and Firefox competition projects.
  • Kept the short 5-second respawn regression alongside the soak lane so the fast contract and long-run contract stay separate.

Latest update (2026-04-21 18:21 +07)

  • Added README.md to the verify allowlist so the repo documentation check matches the markdown policy.
  • Kept the completed Plan Beta implementation markers aligned with the verified Playwright lanes and repo health checks.
  • Confirmed npm run verify and npm run typecheck are green after the docs-policy fix.

Latest update (2026-04-21 17:08 +07)

  • Expanded README.md with quick start, runtime notes, scripts, and core page references.
  • Kept the codebase overview aligned with the existing plan docs and browser-native runtime contract.
  • Logged the documentation pass here with a clear timestamp for traceability.

Latest update (2026-04-21 16:05 +07)

  • Raised the repository markdown allowance to 10 so README.md could be added without violating the docs policy.
  • Created a concise root README for the codebase and kept the durable overview in the existing plan files.
  • Logged this policy/doc update here with a clear timestamp for traceability.

Latest update (2026-04-21 15:05 +07)

  • Removed the duplicate Database Client install by uninstalling cweijan.vscode-postgresql-client2 and keeping cweijan.vscode-mysql-client2.
  • Kept the repo compliant with the markdown allowlist by using this jobcard for the log and the existing plan docs for durable overview text.
  • Logged the completed work here with a clear timestamp for traceability.

Latest update (2026-04-21)

  • Sealed the hidden-answer leak by moving unrevealed solution truth to data-expected, blanking hidden symbol text until reveal, and preserving that contract across help reveal, worm theft, and worm restore paths.
  • Raised the desktop Panel B safe zone from the power-up tray's real anchored height so the startup tray clears .panel-b-controls and #solution-container without changing display-manager.js sizing ownership.
  • Added a Panel C-local resize refresh path in src/scripts/3rdDISPLAY.js so cached rain metrics re-sync when the panel or rain container changes size without a window resize.
  • Unified symbol-rain and Evan helper visibility checks around the actual #symbol-rain-container intersection contract instead of mixing panel bounds with cached Y-only heuristics.
  • Extended problemLineCompleted with additive provenance detail, marked the worm-correct path as greenWormCompletion, raised the master gain baseline to 0.16, and added a distinct row-complete cyber cue for that provenance only.
  • Moved the review-reception agent file into .github/agents/receiving-code-review.agent.md so the repo Markdown allowlist stays green.
  • Focused validation passed with npx playwright test tests/solution-cheat-protection.spec.js tests/ui-boundary.spec.js tests/symbol-rain.live-targets.spec.js tests/symbol-rain.mobile.spec.js tests/evan-helper.symbols.spec.js tests/interaction-audio.unlock.spec.js tests/interaction-audio.row-complete.spec.js --project=chromium --reporter=line, npx playwright test tests/game-mobile-layout.spec.js tests/game-mobile-layout.ultranarrow.spec.js --reporter=line, npm run verify, and npm run typecheck.

Latest update (2026-04-20)

  • Fixed mobile automation briefing dismissal so Playwright phone emulation can start gameplay and use the back button even when the browser only delivers trusted pointerup events to fixed controls.
  • Narrowed the automation-specific control handling in src/scripts/game-page.js so live users stay on the existing click/fullscreen/orientation path while Playwright mobile lanes use the safer automation fallback.
  • Reworked compact portrait automation Panel A spacing so score, problem, and lock assertions no longer rely on the live rotate-gated fixed offsets during visible portrait gameplay.
  • Moved automation portrait top/bottom fixed controls out of Panel B/console hit zones so exit-guard coverage can click the real back button instead of colliding with gameplay controls.
  • Restored inactive level-select CTA button visibility on desktop by removing .level-button from the inactive-card hidden rule.
  • Removed the delayed DynamicQualityAdjuster bootstrap race and switched to a singleton DOM-ready bootstrap so lifecycle tests can observe window.dynamicQualityAdjuster deterministically.
  • Hardened tests/ui-boundary.spec.js to navigate directly to the active runtime page with preload=off and reuse the shared briefing-dismiss helper instead of waiting on the redirect/preload-gated start button.
  • Serialized the local mixed iphone-13 + tests/perf-scenarios.spec.js Playwright lane in playwright.config.js to keep focused mobile validation stable without changing broader repo parallelism.
  • Processed review feedback by removing the warmed same-page catastrophic perf confirmation retry from tests/perf-scenarios.spec.js; perf failures are again evaluated from a single fresh run.
  • Kept the shared root redirect entrypoints query/hash-safe by routing game.html, index.html, and level-select.html through src/scripts/redirect-entrypoint.js, then added focused Playwright coverage for that contract.
  • Restored power-up-display boundary-manager mobility so overlap detection can still auto-reposition the tray instead of only logging collisions.
  • Focused validation passed with npx playwright test tests/evan-helper.worms.purple.spec.js tests/gameplay-exit-guard.spec.js tests/ui-boundary.spec.js tests/perf-scenarios.spec.js --project=pixel-7 --project=iphone-13 --grep "Evan does not directly click \.purple-worm elements|purple worm with devil inventory does not block symbol solving|back button is blocked while gameplay is active and unresolved|back button is restored after problemCompleted fires|Problem container should not overlap with score display|Lock display should not overlap with problem container|Problem and lock should stay within vertical overlap tolerance|idle scenario captures a stable baseline" --reporter=line, npm run verify, and npm run typecheck.

Previous update (2026-04-17)

  • Fixed Panel C keyboard targeting so focus now reacquires a live matching symbol as soon as one enters the panel instead of waiting for a manual refocus or arrow-cycle.
  • Prioritized guaranteed Panel C spawns around the current hidden solution symbols so gameplay keeps circulating live matching targets instead of relying only on global alphabet recirculation.
  • Scoped the priority-spawn backfill to compact/mobile gameplay and made it crowding-aware so it can reclaim a lower-priority symbol when the compact rain is saturated.
  • Added a compact visible-symbol floor so narrow Panel C lanes repopulate before the rain drains to zero during gameplay.
  • Rebalanced compact/mobile Panel C throttling in src/scripts/3rdDISPLAY.js to restore a visible rain cadence without jumping back to desktop density.
  • Added a regression lane proving Panel C can regain a keyboard target when focus arrives before any live matching symbol is visible.
  • Added a desktop-scope assertion proving the standard Panel C runtime stays on the non-compact tuning path.
  • Restacked the welcome-page matrix layer behind the atmospheric overlays so the hero title and emblem stop fighting the background artwork.
  • Focused validation passed with npx playwright test tests/welcome-page-redesign.spec.js tests/welcome-page-motion.spec.js tests/symbol-rain.mobile.spec.js --project=chromium --project=pixel-7 --reporter=line and npm run typecheck.

Previous update (2026-04-14)

  • Reworked Panel C compact/mobile throttling to sync from src/scripts/3rdDISPLAY.js using the existing viewport-compact runtime contract instead of a one-time width gate.
  • Restored real symbol-rain layout stabilization by removing the synthetic container-height fallback and keeping bootstrap retries responsible for zero-height startup states.
  • Tightened Panel C keyboard and visibility checks to use actual panel-local intersection so off-screen symbols are no longer treated as visible targets.
  • Fixed incremental symbol-rain spatial-grid cleanup so clicked symbols are removed from the grid as well as from the DOM/pool.
  • Extended tests/symbol-rain.mobile.spec.js with compact runtime-config assertions and stronger Panel C-local visibility coverage.
  • Focused validation passed with npm run verify, npm run typecheck, and npx playwright test tests/symbol-rain.mobile.spec.js --project=chromium --project=pixel-7 --reporter=line.

Previous update (2026-04-13)

  • Cleared problem-loading skeleton state before rendering the live problem so stale dataset.originalContent snapshots cannot overwrite gameplay content later.
  • Made loading skeleton and spinner capture idempotent in src/scripts/ux-loading.js to prevent double-show races from storing spinner markup as the restore target.
  • Tightened tests/problem-loading.spec.js to assert both spinner removal and cleanup of the saved original-content dataset entry.
  • Extended tests/problem-loading.spec.js again to cover generic loading skeleton and spinner helpers directly, including idempotent restore behavior across repeated show calls.
  • Extended tests/run-playwright-group.js --check to verify complete coverage of top-level tests/*.spec.js browser lanes while excluding nested unit, integration, and performance suites from split-group scope.

Previous update (2026-04-10)

  • Consolidated the repository to the current Markdown policy: .github/copilot-instructions.md, JOBCARD.md, Plan Genesis.md, Plan Beta.md, and Plan Alpha.md, plus repo-local custom agent files in .github/agents/*.agent.md.
  • Merged the old README, system docs, worm guides, competition docs, task brief, and superpower planning artifacts into the three surviving plan files based on content ownership.
  • Converted runtime problem assets from Markdown to JSON so gameplay data no longer violates the Markdown ceiling.
  • Updated verification logic to enforce that policy and guard against future Markdown sprawl.

Recent milestones

Android WebView and mobile recovery

  • Compact/mobile classification remains centralized in src/scripts/display-manager.js.
  • Focused Android WebView-like contracts were added for Panel C and symbol-rain behavior.
  • Mobile onboarding, startup, and compact-control work stayed aligned with the shared gameplay-ready contract.

Settings, updates, and local persistence

  • Level select owns the settings surface.
  • window.UserSettings persists quality, locale, sound, and reduced-motion preferences.
  • Deferred refresh and cache recovery stay outside active gameplay.

Welcome and onboarding polish

  • Welcome and level-select copy were tightened for mobile clarity.
  • Local player naming is supported through device-only persistence.
  • The H2P path now exists as a dedicated tutorial route separate from Beginner.

Current durable truths

  • npm is the local workflow entrypoint.
  • Playwright is the active browser QA stack.
  • Event-driven integration remains the runtime rule.
  • Root HTML files remain redirect entrypoints; active runtime pages live in src/pages/.
  • Panel A and B sizing belongs to src/scripts/display-manager.js.
  • Only the approved project Markdown files (.github/copilot-instructions.md, JOBCARD.md, Plan Genesis.md, Plan Beta.md, Plan Alpha.md, README.md, docs/SECURITY.md) plus repo-local custom agent files in .github/agents/*.agent.md are allowed in this repository.

Audit closure (2026-09-12)

  • Ran the surgical-implementation dispatcher scan: found 4 plan docs at repo root (Plan Alpha.md, Plan Beta.md, Plan Genesis.md, JOBCARD.md) plus docs/SECURITY.md; no docs/plans/, no HERMES_PLAN.*, no docs/.scratch-audit/ runtime artifacts.
  • Verified Plan Beta.md "Sci-Fi Console UI Hardening" track (2 tasks, all [ ]) against the live tree: game-animations.core.css already has GPU-only transition: transform 200ms linear, opacity 150ms var(--ease-out-quint) (no transition: all); index.actions.css already enforces min-height: 44px; min-width: 44px on button, .action-target, [role="button"]; lod-animations.reduced-motion.css already has the full @media (prefers-reduced-motion: reduce) block; tests/ui-boundary.spec.js already contains the 44x44 touch-target test (line 379). Ticked all checkboxes to match code state.
  • Verified Plan Beta.md "Entry Flow Hardening" track (4 workstreams, all [ ]) empirically: safeParse + migrateProfile live in player-storage.js/player-storage.helpers.js and user-settings.js; redirect-entrypoint.js preserves location.search + location.hash exactly; startup-preload.js degrades with try/catch fallbacks. Ran the entry-flow batch: npx playwright test tests/welcome-scoreboard.spec.js tests/level-select-interactions.spec.js tests/redirect-entrypoints.spec.js tests/startup-preload.spec.js --project=chromium --reporter=line -> 44 passed. npm run verify 6/6, npm run typecheck clean, npm run lint clean (1 pre-existing prefer-const warning). Ticked all checkboxes to match code state.
  • Ran npx playwright test tests/ui-boundary.spec.js --project=chromium --reporter=line -> 14 passed (incl. 44x44 touch-target protocol).
  • Added docs/.scratch-audit/ to .gitignore per surgical-implementation pitfall (was untracked, would have leaked audit artifacts into commits).
  • Decision: all plan tracks are verified complete against the live tree; no new implementation work required. Left the plan status banners as found (no HERMES_PLAN.ai.json approval snapshot exists to flip).

Audit closure (2026-09-14)

  • Re-ran the surgical-implementation dispatcher scan: 4 plan docs at repo root (Plan Alpha.md, Plan Beta.md, Plan Genesis.md, JOBCARD.md) plus docs/SECURITY.md; no docs/plans/, no HERMES_PLAN.*, no docs/.scratch-audit/ runtime artifacts. docs/.scratch-audit/ already gitignored (line 78).
  • Confirmed zero unchecked [ ] boxes remain in any plan doc (only the literal instructional line in Plan Beta.md:449 referencing the checkbox syntax itself).
  • Re-verified all gates from a clean tree: npm run verify → 6/6 PASS (eslint now green after npm ci restored @eslint/js); npm run typecheck → clean; npm run lint → 0 errors (1 pre-existing prefer-const warning in worm-pathfinding.js:53).
  • Re-ran the entry-flow batch: npx playwright test tests/welcome-scoreboard.spec.js tests/level-select-interactions.spec.js tests/redirect-entrypoints.spec.js tests/startup-preload.spec.js --project=chromium --reporter=line → 44 passed.
  • Ran code-review (5-axis) across the full tree. Findings: (a) LOW — worm-pathfinding.js:53 prefer-const warning (pre-existing, lint-clean); (b) LOW — worm-behavior.steal.js:140 TODO comment re FSM consolidation; (c) LOW — worm-movement-core.js:60 @private placeholder JSDoc; (d) SECURITY/INFO — innerHTML sinks in game-init.js:125, game.js:54, game-problem-manager.js:135, index-page.matrix.js:46, lazy-lock-manager.js:53 are all static trusted content or same-origin component HTML, covered by the docs/SECURITY.md documented exceptions; index-page.scoreboard.render.js escapes all user-derived values via window.DomSanitizer.escapeHTML. No CRITICAL/HIGH findings → no new orchestration jobs warranted.
  • Decision: all plan tracks verified complete against the live tree; no new implementation work required. Working tree clean, main == origin/main (no divergence). Pushed per PUSH=1.