feat(m12): generator spike — grow a playable planet from the pair's rhythm - #23
Closed
ksdisch wants to merge 1 commit into
Closed
feat(m12): generator spike — grow a playable planet from the pair's rhythm#23ksdisch wants to merge 1 commit into
ksdisch wants to merge 1 commit into
Conversation
This was referenced Jul 9, 2026
…hythm The next step of "The Planet That Knows You Two" (docs/ideas): consume the M10 telemetry wedge to grow a PlanetConfig from how this pair actually plays. - New pure src/game/planets/generate.ts: deriveProfile(telemetry) -> RhythmProfile and generatePlanet(profile) -> PlanetConfig. Deterministic (seeded mulberry32; no Date.now/Math.random). Every geometry knob is clamped to a band proven valid against the shared reach budget, so the output is ALWAYS playable for any input. Themeless (default textures, zero Boot churn); planet-3 gate template (Freeze corridor -> Phase Dash curtain -> Illuminate finale). - New generate.test.ts: the safety proof — a property sweep (1000 configs over a profile grid x seeds, plus corrupt/extreme inputs) asserting every generated config satisfies the SAME invariants planet3.test.ts encodes; determinism; and deriveProfile never throws on a hostile telemetry blob. - Hub: a "Grow a planet" node derives from loadProgress().telemetry and launches the generated config via scene-data (Planet.init takes a raw config — no registry mutation). testBridge gains startGeneratedPlanet() for headless verification. Gated on typecheck + 168 Vitest (+12) + build + smoke:relay. Headless-verified on the pre-installed Chromium: startGeneratedPlanet() -> full clear (freeze -> phase -> illuminate -> goal), won=true, 0 respawns, win cue + telemetry recorded. Deliberate spike cuts: themeless (theme selection needs Boot preload textures); one gate template; not a registry/progression node; no protocol/relay/shared/phone/ dependency changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pm5HnAqLxtzGYMo6cFxRrt
ksdisch
force-pushed
the
claude/project-status-review-p6ske4
branch
from
July 12, 2026 01:40
6174731 to
35c642b
Compare
Owner
Author
|
Closing per 2026-08-01 PR triage: M12 generator spike idle since 2026-07-12, mergeable state unknown. The spike's value is the recorded design in the PR body, which survives closure. The branch survives if this is ever picked back up. |
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 & why
The next step of the project's boldest vision, "The Planet That Knows You Two": stop hand-authoring planets and grow one from a recorded portrait of how this specific pair plays. M10 shipped the de-risked wedge (schema-v2 per-role solve telemetry + the read-only portrait card); nothing yet consumed that telemetry. This spike closes that gap — telemetry → a
PlanetConfigyou can actually play.The honest risk the vision doc names is that a generator "dynamites the rigid
PlanetConfig" the codebase's safety rests on — "one bad planet ruins the evening." So the crux deliverable here isn't a generated planet, it's a proof the generator can never emit an unplayable one.Changes
src/game/planets/generate.ts(pure, deterministic):deriveProfile(telemetry)→RhythmProfile— aggregates the pair's recorded rhythm (solve speed, respawn history, explore-vs-solve split) into normalized 0..1 signals + a stable seed. Never throws; empty/solo/corrupt telemetry → a neutral default.generatePlanet(profile)→PlanetConfig— maps those signals to geometry knobs, each clamped to a band proven valid against the shared reach budget, so the output is always clearable. Seededmulberry32for within-band variety (noDate.now/Math.random, per the Vitest determinism guards). Themeless (default textures, zeroBootchurn); planet-3 gate template (Freeze corridor → Phase Dash curtain → Illuminate finale).src/game/planets/generate.test.ts— the safety proof: a property sweep of 1000 configs (profile grid × seeds) plus corrupt/extreme inputs, asserting every generated config satisfies the same invariantsplanet3.test.tsencodes (full-height curtain, Illuminate finale reach math, in-canvas keypoints, degenerate-or-≥260 pit); determinism; andderiveProfilenever throwing on a hostile blob.src/game/scenes/Hub.ts— a "✦ Grow a planet" node derives fromloadProgress().telemetryand launches the generated config via scene-data (Planet.inittakes a raw config, so no registry mutation, no progression coupling).src/game/testBridge.ts— addsstartGeneratedPlanet()so a headless driver can clear a grown planet through the usualgetState/cast/inputloop.Verification
npm run typecheck✓ ·npm run test168 passed (+12 new) ✓ ·npm run build✓ ·npm run smoke:relay✓?solo=1&test=1):startGeneratedPlanet()→ boots into the Planet scene → Freeze freezes the sentry → Phase Dash crosses the curtain → Illuminate reveals the ledge → reaches the goal.won=true, 0 respawns, win cue fired, telemetry recorded (attempts:1,lastClearMs:4881).Deliberate spike cuts
Bootpreload textures; noted follow-up.src/shared/phone/dependency changes.Does the grown planet feel like ours? That's the human gate the vision doc names — the spike earns the right to ask it, it can't self-answer it.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Pm5HnAqLxtzGYMo6cFxRrt
Generated by Claude Code