This repository was archived by the owner on Oct 10, 2026. It is now read-only.
Repository navigation
fix(core): build pressure on distances real walks actually cover - #248
Merged
Merged
Conversation
Half the world-event vocabulary was unreachable on an ordinary walk. Pressure
came almost entirely from distance on a 3km scale, and five of the ten kinds are
gated behind pressure thresholds, so they required:
companionObserves 120 m
pursuitFades 540 m
distantPresence 720 m
pursuitBegins 1 080 m
pursuitIntensifies 1 650 m
Field walks run 17-134 m. Bounded pursuit is one of the product's pillars and had
never once been reachable on device — the companion could only ever draw near,
move ahead, or sit quiet, which is what "feels dead" actually meant.
Distance still leads, on a scale a real walk reaches (`/1200`, capped 0.45), plus
a slow duration component (capped 0.20) so a short stroll still develops texture.
Both stay individually capped, so pressure remains bounded rather than a ramp
toward punishment, and the pursuit rules keep their own maximum-pressure gates.
Measured through `WorldState.derive`:
50 m / 60 s pressure 0.11 5/10 kinds
150 m / 180 s pressure 0.33 6/10 distantPresence, pursuitFades
400 m / 420 s pressure 0.53 6/10 pursuitBegins
800 m / 720 s pressure 0.65 5/10 pursuitIntensifies; calm kinds recede
Event *frequency* is deliberately unchanged. Raising it broke the frequency
bounds asserted in `WorldEventWeightTuneTests` and `SoloMVPVerticalSliceTests`,
which encode intentional sparseness — this is a variety change, not a density one.
Adds cadence tests that measure yield and vocabulary reach rather than asserting
intent, so future tuning can be judged against numbers.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
scrimshawlife-ctrl
approved these changes
Jul 29, 2026
This was referenced Jul 29, 2026
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Half the world-event vocabulary has never been reachable on a real walk. This is the mechanism behind the recurring operator report that the companion "feels dead".
Evidence
Five of the ten event kinds are gated on pressure, and pressure came almost entirely from distance on a 3 km scale (
min(0.55, distanceMeters / 3000)). Converted to walking distance, each kind needed:companionObservespursuitFadesdistantPresencepursuitBeginspursuitIntensifiesField walks in the receipts run 17–134 m. Bounded pursuit is a binding product pillar and had never once been reachable on device — the companion could only ever draw near, move ahead, or sit quiet. Receipts show 2 world events in 255 s and 4 in 185 s, drawn from an effective vocabulary of three.
Change
Distance still leads, on a scale a real walk reaches, plus a slow duration component so a short stroll still develops texture:
Both stay individually capped, so pressure remains bounded rather than a ramp toward punishment, and the pursuit rules keep their own
maximumPressuregates — calm kinds recede as tension rises, which is the intended shape.Measured through
WorldState.derive:What this deliberately does not change
Event frequency. I first also reduced
minimumTickSpacing40s → 26s, which raised yield from 1.60 to 2.40 events/min — and broke the frequency bounds asserted in bothWorldEventWeightTuneTestsandSoloMVPVerticalSliceTests. Those encode intentional sparseness as product law, so I reverted it. This is a variety change, not a density one, and the guards remain green.If the sparseness bound is worth revisiting that is a separate product decision, with the numbers above as input.
Validation
WorldEventCadenceTestsmeasure yield and vocabulary reach rather than asserting intent, so future tuning can be judged against numbersNote on authority
Sources/WaykinCore/is your codeowner lane and this touches gameplay feel, so it wants product sign-off rather than a routine review. Happy to adjust the curve — the thresholds are a judgement call; the finding that pursuit was unreachable is not.🤖 Generated with Claude Code