feat(game): turn the repository into Cover Story#63
Draft
TimBeyer wants to merge 4 commits into
Draft
Conversation
Turn the package into a private Vite prototype that consumes dancing-links 4.3.9 from npm instead of reaching into the repository implementation. Model one route per guard and every active duty as primary columns, with node/time and edge/time reservations as secondary columns. Feed prevalidated sparse rows in one batch because that avoids dense zero-filled matrices and repeated ingestion calls on every planning beat. Bound future sampling for stable frame-time, expose capped counts honestly, and recover from impossible inputs by dropping and reporting player duties before routine duties. Cover route selection, collision prevention, jams, contradictions, both non-identical fallback paths, and capped-search reporting with tests.
Add a complete browser mission with continuous movement, exhibit cover, weighted future paths, guard vision, patrol duties, throwable echoes, route-jamming gates, dossier extraction, escalating tempo, lives, scoring, and procedural audio. Make solver output the interaction itself: ghost paths aggregate the sampled cover space, actual guards follow one complete cover, echoes add mandatory duty columns, and jams remove candidate route rows. Browser playtesting verified start, pause/resume, failure/restart, and a diversion that visibly pulled a guard onto the selected node. Cache immutable node and edge indexes once because rendering, collision checks, and patrol interpolation query them every frame; this avoids repeating unchanged graph scans without caching or reusing solved states.
Remove the in-tree solver, solver benchmarks, package release automation, and legacy library documentation now that the prototype intentionally consumes dancing-links from npm. Replace library CI with focused app build, lint, format, and behavior-test jobs across supported Node releases while retaining Conventional Commit validation. Document the controls, exact-cover column model, honest 128+ sampling label, sparse batch ingestion, numeric hot-path indices, contradiction fallbacks, and the fact that every planning beat is rebuilt from varied live state rather than cached repeated work.
Reset the caught-screen flash when a new infiltration begins so restarting from a failed run opens on the normal museum palette instead of briefly carrying failure feedback into the new state.
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.
What changed
dancing-links@4.3.9from npm instead of using the former in-tree implementationWhy
The goal is to test whether solver speed can become the mechanic rather than a visualization of a solved puzzle. Each guard route is a row. Guard selection and active duties are primary columns; node/time and edge/time collisions are secondary columns. Echoes add mandatory duties and gate jams remove route rows, so player actions reshape the valid future space directly.
Every beat is rebuilt from varied live state. The game does not cache answers to repeated puzzles or otherwise manufacture benchmark-friendly work.
Performance and behavior notes
128+when sampling reaches the cap instead of claiming an exhaustive countBrowser playtesting observed 128+ futures from roughly 300–420 candidate rows in about 1–2 ms on the local machine. Those figures are telemetry from varied live game states, not a benchmark claim.
Validation
npm ci --ignore-scriptsnpm test— 7 passingnpm run lintnpm run format:checknpm run buildnpx commitlint --from origin/master --to HEAD --verbosenpm audit --omit=dev— 0 production vulnerabilities