aetheria-gravity map: B58 ring Roche margin read before members settle (spec ring-roche-final-heavy.r1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
f948992d94
commit
77207ec73c
1 changed files with 3 additions and 0 deletions
|
|
@ -95,6 +95,7 @@ All read at c6519383 in the detached worktree `C:\aeth-wt\ag2-docs` on 2026-10-1
|
|||
- **B55. Subzone isolation needs the root window from the reach** (imagination-ag4-cwr-refresh scratchpad, 2026-10-17: `ImagWellDump` with belt masses run on Yggdrasil at 09a7f189, jobs jH/jI, production entrance zones seeds 1-130, 106 multi-root, 417 roots; `place3.py` ports replace.py at C4 plus r3's rules; `cwr.py` rebuilds each placed zone with `welltree.py`'s zone+belt tree and counts Soul's metric from finding `cut-well-law.s2.subzones-overlap-in-production`). Areas are tangent circles (ZoneGenerator 63-91), so the nearest other root sits about r_i + r_j away and the root's reach, Reach x that distance, is roughly the area radius: a family filling 0.75 r cannot end inside it. *Today*: 705 of 1456 ordered root pairs have reach_i + support_j > d (worst 4.62), 948 of 4940 orbits inside another root's support, 2496 inside its reach, 246 roots at the 1.5 x support floor; 5461 bodies (4907 wells, 554 belts); 10 belts reach below distance 0, 283 inside 1.5 x their parent's Roche limit. *C4 with the 0.75 window (r2)*: 636 pairs, 261 of 2302 orbits, 2880 bodies (2590 wells, 290 belts). *floor-window* (a root's support under reach / Beta, window min(0.75 r, reach / 2.25)): 0 pairs (worst 0.83 of d), 0 of 1318 orbits, no floor-bound root, 1927 bodies (1762 wells, 165 belts), 24 of 47 root rings in multi-root zones merged. *fade-window* (rule 2 for roots, support under Gamma x reach): 0 pairs (worst 0.75), 0 of 985, 1601 bodies (1471 wells, 130 belts), 30 rings merged. Belts as intervals at the authored AsteroidBeltWidth fold almost all (543 of 554 under floor-window): the width (50 + 5 D^0.666) is wider than most slots, so r3 places a belt as a point and clamps its half-width to its slot. Two port details: a parent that absorbs folded children grows its Roche limit, so the lower bound is recomputed after each fold (59 belts sat inside it otherwise); a zone dump over 240 seeds in one Fact ran out of memory. Caveats: the dump is post-generator (children the old generator dropped are missing), positions are at t = 0, area radii are reconstructed from the area rule.
|
||||
- **B56. A belt is an interval in its slot** (imagination-ag4-cwr4 scratchpad, 2026-10-17: Soul's belt and isolation probes, extended with percentiles, run on Yggdrasil at 1f83d074 with three placements patched in, jobs jbase/jA/jB/jC, production entrance zones seeds 1-130 plus every zone of seeds 7-12). Spread over AsteroidBeltWidth(D), 170 entrance belts: r3's symmetric half-width gives 145 at zero, median 0, p90 0.04, mean 0.012. Filling the slot (inner edge max(lower, previous sibling's outer edge x q), outer edge min(window, next sibling / q), belt centred, width min(W, slot)) gives 0 at zero, p10 0.02, median 0.11, p90 0.29, mean 0.13, 1 belt over 0.5; clamping the ruled point into the slot instead of centring gives the same distribution. Body counts, isolation (0 of 1456 pairs, worst 0.833; 0 orbit-instants in another root's support or reach) and the full suite (2103) are unchanged: belts are massless, so moving one inside its slot moves no well. Letting a belt claim its authored width in the chain instead keeps 21 of 170 belts (median 0.65) and folds bodies (wells 1793 to 1727), against c4-proceed-and-fly's counts, and fails LockOnSituation. So under the band law every production belt is slot-bound: AsteroidBeltWidth never binds and is a ceiling only, and the neighbour terms bind once the belt is an interval (the symmetric form's neighbour term was redundant, Soul's s1). Turret order: the unmutated StationPlacement harness gives the same stations, turrets and orbit sums in two processes and twice in one; the 0.8 tail mutant survived 3 four-class runs and 2 single-class runs (jm0p8), so jM's one CAUGHT is not reproduced, and there is no shared state to fix: the tail rule needs a forced fixture.
|
||||
- **B57. Belt rocks and the floater layer** (imagination-ag4-floater, 2026-10-17, uncommitted xunit probe over `ChildrenWithinReachTests.Zones`, all 384 zones of seeds 1-6 at 1d4aa626). 240 zones hold a belt, 450 belts, 42693 rocks; rocks per belt p10/50/90/max 31/75/186/499, at most 6 belts per zone. |field height| under a rock p10/50/90/99 41/165/323/434 (max 1027); field spread across one belt p50 41, p99 111. Rocks are drawn at field + AsteroidVerticalOffset (-10 in Settings.asset; the asteroid shader adds the Surface Displacement texel, which is -GetHeight), but the chunk reticle (ActionGameManager.ChunkWorldPosition) sits at absolute y -10, so it misses the drawn rock by the field depth. Rock radius pose.w p10/50/90/max 3.03/3.73/5.41/6.00; the LowPoly Small meshes measure 1.06-1.46 from their centre (FBX vertices; Unity file-scale reading unverified), so a rock centred on the floater layer (0, ships +3) reaches the ship plane at the median.
|
||||
- **B58. A ring is checked before its members settle** (imagination-ag5-ring, 2026-10-17: scratchpad `imagination-ag5-ring/`, jobs job2 and job3 via ygg-verify at f948992d and 26c44020, `ZoneGenerator.Place` instrumented by `instr.patch`, the candidate fix `fix.patch`, constructed fixture `ProbeRing.cs`; `ChildrenWithinReachTests.Zones`, all 384 zones of seeds 1-6). Source: `Settle`'s ring branch judges `ringDistance >= 1.5 x Roche(heavy.Mass)` (ZoneGenerator.cs:672) right after the circumbinary children fold into heavy, but a member's own children fold into it only when the queue reaches that member (ZoneGenerator.cs:687-694), after the check, so its mass is not final when it is read. Probe at f948992d: of 63 standing production rings, one (7 members, radius 98.302) ends 0.07% inside its heaviest member's margin (98.367), inside the test's 1e-3 tolerance; the constructed rings (two members, the lighter given a child of half the heavy's mass, radius 1.02 x margin) all stand, with the lighter member grown past the heavy (1000 -> 1400 for 900 + 500). At 26c44020 (place names): 4 production rings violate; the failing seed-1 ring (9 members, radius 126.029) passed its check at heavy mass 14591.9 (margin 120.68), then heavy's own children folded in to 19148.25 (margin 129.16); in all 4 the heaviest at the end is the member that was checked, so the seed-1 shape is the heavy growing, not a member overtaking it. Settling the members inside their node's Settle and checking `ring.Max(Mass)` folds exactly the violating rings (master: 1 flip in 384 zones, a ring folding into one body, so topology moves there; constructed: all 3 fold, root mass 2400 for mA 1000), and the full suite passes with it: f948992d 2215/0, 26c44020 2224/0, so no seeded test repins on either. Other order inferences, by source read: a body child's cusp bound (`AtLeast`, ZoneGenerator.cs:607-614) reads `WellMass(child)` before the child's own folds, and circumbinary children read `WellMass(heavy)` before heavy settles: the same shape, growing as mass^0.05 (the test's own `CuspTolerance` comment), absorbed by its 1e-2 tolerance. The Roche lower bound is re-read on every fold iteration (`lower()`), so it is final; belt slots read that final `lo` and siblings placed in the same pass; the circumbinary distance, chord caps and subzone isolation (`rootReach` from `WellTree.SubzoneReach`, centres only) are mass-free. The GPU parity fixture is hand-built (GravityFieldParityVerify.cs:152-190) and never calls the generator.
|
||||
|
||||
## Model page
|
||||
|
||||
|
|
@ -138,12 +139,14 @@ Cells not filled, plainly: whether a per-body multiplier on c or the core is eve
|
|||
- Why nesting the light roots under the heaviest is rejected (B52): roots are stationary, so a light sun fixed on the heavy sun's slope sits in a field nothing balances; a ship parked by it drifts toward the heavy sun while the sun's planets keep their rails, which is the coasting-orbit mismatch `tame-tails-parent-only-rails` ruled out. Patched conics (spheres of influence, as KSP flies them) are the prior art for the alternative: each region owned by one body. Isolated subzones are that reading for stationary roots; superposed-inside keeps today's superposition of fixed masses. Which one the operator flies is question `multi-root-zone-shape`.
|
||||
- Why a belt's extent is the well tree's input and not the placement's alone: "inside L_F a node pulls as its body alone" is the tree's guarantee about every rail round the node, and a belt is a family of rails out to its outermost asteroid (B53). The tree reads that extent; children-within-reach decides where belts go and how wide, and must keep their inner edge outside the Roche margin.
|
||||
- Why the series threshold is a GravityField constant emitted into the template: B54 sets it at 0.4 by measurement, and a literal `1` in both C# and HLSL is the second spelling `gravity-law-one-spelling` already names.
|
||||
- Why the ring's members settle inside their node's Settle rather than the check reading a predicted mass (B58): a member's final mass is whatever its own placement folds, which only its Settle computes; predicting it would be that placement spelled a second time. Settling the members first reads the one owner, and a member's Settle depends only on the Distance and chord cap its node has just written, so nothing else in the breadth-first order moves.
|
||||
- A constraint for pseudospace, not solved here: a push with curl (B11) has no height, so under `grid-shows-how-you-move` it either never moves ships, or is drawn by another channel, or is restricted to its gradient part.
|
||||
|
||||
## Cut sequence
|
||||
|
||||
Mapped and admitted (2026-10-14, base 11b2d7ad): `aetheria-gravity:cut_spec:cut-gravity-subtract.r2` and its sibling `aetheria-gravity:cut_spec:cut-orbits-placed-at-build.r1`, both merged at 5dd1f6b7. Mapped and admitted (2026-10-14, base 5dd1f6b7): `aetheria-gravity:cut_spec:cut-potential-owner.r3` (rebased on 3f5cef68 on 2026-10-15, after rulings `funnel-kept-until-flown` and `core-inside-roche-curve`), one Hands pass; it carries follow-ups `deep-orbit-placement-test` and `gravity-subtract-test-residuals`. Between it and grid-lowering the drawn grid lags (B23). The operator will fly the funnel before ruling on it again (`funnel-kept-until-flown`), so potential-owner and grid-lowering must both be on one playable branch before that flight; grid-lowering is stacked on potential-owner, not a sibling (B26), and its map is the next Imagination pass once potential-owner's report lands. Mapped and admitted (2026-10-15, base dd06f39d, stacked on potential-owner's head): `aetheria-gravity:cut_spec:cut-grid-lowering.r1`, one Hands pass, Starfire-verified; on its branch the drawn grid is the field (B30) and the Sector Waves noise is off the grid until grid-noise-presentation. Mapped and admitted (2026-10-15, base 8f491fd3, stacked on grid-lowering's head): `aetheria-gravity:cut_spec:cut-fog-precision-and-jitter.r1`, the slope jitter (B32) and the patch's second gravity lowering (B33), one Hands pass. Mapped and admitted (2026-10-15, base 8f491fd3, a sibling of fog-precision-and-jitter on grid-lowering's head, disjoint files): `aetheria-gravity:cut_spec:cut-orbits-from-field.r1`, periods from the field (B35-B38), one Hands pass; it raises `aetheria-gravity:question:rails-enclosed-or-parent` and is written for the recommended parent-only option. Not yet mapped:
|
||||
|
||||
- **ring-roche-final-heavy** (mapped and admitted 2026-10-17, base f948992d): `aetheria-gravity:cut_spec:cut-ring-roche-final-heavy.r1` (a ring is judged on its members' settled masses; B58; ruling `aetheria-release:ruling:ring-roche-fixed-in-generator-cut`). Lands on master before aetheria-release faction-curated-place-names, which then rebases and re-runs its seeded repins.
|
||||
- **asteroid-floater-layer** (mapped and admitted 2026-10-17, base 1d4aa626): `aetheria-gravity:cut_spec:cut-asteroid-floater-layer.r1` (DrawAhead.Chunk owns rock and reticle height; AsteroidVerticalOffset and the shader's field read go; B57) and its sibling `cut-floater-fixtures-wells.r1` (follow-up floater-fixtures-flat-field). Open: question `asteroid-clearance` (centre or top on the layer).
|
||||
- **drawn-pose-at-drawn-time** (mapped and admitted 2026-10-15, base 09ec04a8: `aetheria-gravity:cut_spec:cut-drawn-pose-at-drawn-time.r1`, one Hands pass): `DrawAhead` owns every drawn pose at T = ExactTime + Lead (B39); closes item 3 of `fog-jitter-residuals`.
|
||||
- **tail-taming** (ruling `tame-tails-parent-only-rails`, lean `tail-taming-lean-conserving-compact`): `aetheria-gravity:cut_spec:cut-well-law.r2` (the band law, B40-B43, B48; reach 1/2 D, series branch), runnable before question `tail-taming-law-r3` is answered; the generator rules go to children-within-reach once r3 sets the spacing. Soul's s1 falsified it (multi-root far field, belt extent, unpinned fade start and ring edge, series threshold); the fix batch is `aetheria-gravity:cut_spec:cut-well-law.r3` (B52-B54), with the zone's shape between roots put to the operator as question `multi-root-zone-shape`. children-within-reach r2 was refreshed after it merged: `aetheria-gravity:cut_spec:cut-children-within-reach.r3` (B55), written to question `root-window`'s recommended floor-window. Soul's s1 held isolation but found belts collapsed to a line; the delta on Hands' head 1f83d074 is `aetheria-gravity:cut_spec:cut-children-within-reach.r4` (B56): belts fill their slots, five forced pins, the font asset restored.
|
||||
|
|
|
|||
Loading…
Reference in a new issue