Commit graph

3,806 commits

Author SHA1 Message Date
f73507ff2f Catalog read refuses a bin with a non-finite Floor, a missing Line or a Line that is a bin; a bin mints from exactly its named line (tested)
The runtime no longer trusts the authoring tool for a bin: a NaN Floor weighed NaN and nulled every
draw of its design. AetheriaStores.Open names the field and echoes no value.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 21:08:10 +02:00
129e5ff4dc ProductWeight is the one weight of every design-only draw; a line's bin shares are read once per pass
The all-weights-zero branch of ChooseProduct and the required-item fallback of RandomProducts weighed
every product 1, so a bin doubled its maker's presence there. Both now weigh by Share alone (the
preference drops out, the bins' shares do not). The sum of a line's bins' pass fractions is computed
once per weighting pass instead of scanning the product table per candidate.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 21:08:09 +02:00
9457e4c8f9 ProductBinTests: the search's 64-draw bound and its stop at the first clearing draw, and the missing-line log, are pinned
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 19:51:40 +02:00
beb733f4b5 Census role gaps become RoleGaps, so a bin skipped by the census has a test; a bin authored on another line is refused
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 18:46:05 +02:00
fb7b95fb06 ProductChoiceTests: a bin takes nothing from another maker's product
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 18:19:00 +02:00
aec7b3c019 product-lines tiers lists every row, present or new, before it reports there is nothing to do
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 18:16:27 +02:00
9b7a1c00dc Catalog: the six tier bins (product-lines tiers apply); TierRowsAreShipped; the tier step pinned from both sides
Aetheria.cc written only by the command, on the pinned CultLib. Replay the command at merges; never merge the blob.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 18:11:11 +02:00
6768cdcb95 product-lines tiers: authors the six bins from a table of (line, bin, floor, text)
A bin gets its line's design and maker, Bin = { Line, Floor }, and no roles or assembly. Resolve-then-write
as the other lines do; a replay is a no-op. The catalog is not yet applied.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 18:08:56 +02:00
2806b443c9 Census, roles-migrate and roles-backfill skip a bin: it authors no roles, it reads its line's
RolesMigrate takes an optional root, as RolesBackfill does, so its bin skip has a test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 18:06:07 +02:00
7f09b05725 ProductWeight: a bin takes its pass fraction of its maker's preference and its line the rest (ruling bin-share-by-floor)
Phi comes from CultMath's math.erf.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 18:04:08 +02:00
49853d3166 ProductBin: a binned product names its maker's line and a floor; the mint draws above that floor
FactionProductData slot 7 Bin (schema id unchanged, additive as slot 6). Mint derives a bin's
distributions from its line on every lot, truncated by NextGaussianAbove (64 tries, then the cutoff).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 17:58:51 +02:00
6d10331c05 aetheria-release map: boss hull derived, product tiers, run seed (body facts BH/PT/RS, cut sequence; InfluenceScale moves to SavedGame key 15)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 17:24:54 +02:00
ac835a8ab2 Research: agent-built hull art prior art (LLM 3D workflows, ship generators, low-poly style, internal fit), for ruling hull-programmer-art-stopgap
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:52:32 +02:00
eb27ced147 Research addendum: why BattleTech keeps BV apart from C-bills (operator's examples)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:25:25 +02:00
06a173a5b2 aetheria-gravity map: trojan swarms (body fact B61, belt-shapes cells, rationale, cut sequence)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:24:07 +02:00
0f7ae88e26 Research addendum: outfitting budgets are usually a value currency (BattleTech BV vs C-bills)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 16:05:36 +02:00
67517f407f Merge eureka/aetheria-release-quality-readers (head e95a3657)
Every reader of item quality reads Lot.EffectiveQuality (ruling effective-quality-mean-of-roles). Reports cut-quality-readers.h2, h3; Soul s1, s2 hold. Master's commits since base 70c7a497 are docs only, so the merged code equals the verified head.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 11:22:04 +02:00
e95a365719 ItemData role-validation comment: the fallback is the effective quality
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 11:06:46 +02:00
8cc7f1bc85 Pin GetTier: it hides an over-specced part, and its tolerance and upgrade step at the shipped thresholds
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 11:06:45 +02:00
7206c5fdf4 StatsReadTheLot: drop the upgrade count of the lot below the first tier
Its effective quality .15 sits under Common's .2, which GetTier counts as -1; not a rule this test is for. Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 10:28:11 +02:00
b6075b776f Tier and wear tests pin the tolerance, the upgrade steps and the direction of the quality term
Kills the Stryker survivors in the lines this cut touches that a quality-reading test can reach. Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 10:27:46 +02:00
d820e155ff GetPrice test: a lot of two parts, one above its assembly, prices as the mean of the capped parts
Kills the hand mutant that prices a lot at its best part (the single-fill sleeper could not tell max from mean). Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 07:34:13 +02:00
f3044718c1 Stage the drive lots with the ship deactivated: an active entity refuses unequip and equip
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 07:22:04 +02:00
349a226c72 MismatchedDrivesHoldHeading stages its two drive lots at .55 and .85
Heat now reads effective quality, which narrowed the Generated fit's drive spread below the test's 5 percent premise (probe: thermal exponents 1.227/.809 at base, 1.623/1.318 at head; NominalThrust ratio 1.0525 then 1.0436). The test fits the two Large Drives with lots staged at the low and high end of the makers' assembly range, chosen before any run, through the ship's own unequip and equip, and asserts the spread as a premise with its own message. Unverified until the Yggdrasil run.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 07:18:37 +02:00
174bdaded1 Every reader of an item's quality reads Lot.EffectiveQuality
Price, tier, equipped thermal and durability exponents, wear and the unequipped durability exponent now read the one effective quality; no reader keeps a path to the assembly alone. Tests pin each reader against a lot whose part sits below its assembly. Unverified until the Yggdrasil run.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 07:09:31 +02:00
96911ffc4b aetheria-gravity map: belt shapes (body fact B60, model sub-table, rationale, cut sequence)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 07:06:47 +02:00
db3043a5d2 Research: NPC outfitting selection and quality-for-cost mechanics, for chooseproduct-affordability and quality-paid-in-cost-or-throughput
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 07:06:23 +02:00
38198b6e00 Lot.EffectiveQuality: the item's one quality, the mean of min(part, assembly) over its fills
QualityForRole's unnamed, roleless and unfilled fallbacks read it. Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 07:04:15 +02:00
39aef82f47 aetheria-release map: quality readers at 70c7a497 (body facts QR1-QR5, model row, cut sequence)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 07:01:06 +02:00
70c7a49739 Merge eureka/aetheria-gravity-bodyless-node-places-children (head 49c6e3f8)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 05:52:45 +02:00
49c6e3f837 StationPlacementTests: the bodyless-node rule runs on a wide light sample of the production generator that holds standing binaries under bodies
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 04:22:31 +02:00
5a63094035 ZoneGenerator.Place: a folded family joins a bodyless target as a child and AtLeast reads its target through OneBody; direct-Place theories pin OneBody, the heavy member, the margin and the ringless settle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 04:22:30 +02:00
55bda75ac3 Merge faction-curated-place-names (7da0d414), --no-ff
Code from eureka/aetheria-release-faction-curated-place-names. Conflicts kept both sides: Faction holds Assembly (key 19) and Places (key 21); AetherDb dispatches assembly-from-maker, place-names and doctrine-catalog, and its usage names both; FlightTests counts the Faction wire at 22 slots (19 is Assembly, 21 is Places).

The two LFS files are the merge's resolution, replayed on the post-assembly bytes, never merged as text or by side.

GameData/Aetheria.cc, per h1's two-step replay: (1) AetherDb place-names apply built at the branch's commit 1 (740e1ee7, merged onto the assembly merge so key 19 survives), run on the post-assembly catalog: purges the Markov NameFile records while their type exists and authors 15 place lists; (2) place-names apply built at this merged tree, run on step 1's output: authors Miss Terri's list (1 list). Each step's second apply said nothing to do and left the bytes identical; the whole chain run twice from the assembly catalog gave bytes equal except the record write timestamps (masked, both hash alike). Decoded independently with cultcache-py: 16 factions, key 19 Assembly filled on the 15 makers (Ewan Hart has none), key 21 Places 20 names on all 16, key 9 nil on all, no namefile type among the 321 records.

Assets/Resources/Settings.asset: the post-assembly file (Rarity values removed) with the four NameGeneratorSettings lines removed (NameGeneratorSettings, MinLength 5, MaxLength 10, Order 3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:16:57 +02:00
430eb307a3 Merge assembly-from-maker (a899432d), --no-ff
Code from eureka/aetheria-release-assembly-from-maker-r2. The two LFS files are not merged as text or by side; they are the merge's resolution, made as follows.

GameData/Aetheria.cc: master's catalog (0f5def17's, sha256 a4ff0eff...ebee9) is unchanged by master since, so the branch's blob was checked against the replay. AetherDb assembly-from-maker apply, built from this merged tree, run on master's catalog twice from fresh copies and once more on its own output: 15 factions written; the second pass said No changes and left the bytes identical. The replayed bytes equal the branch's blob (sha256 2b18ff7f...90e... ) except for the 333 record write timestamps, each of which a fresh write restamps (masked to a constant, both hash alike). The branch's blob, which h5's full suite tested, is taken.

Assets/Resources/Settings.asset: master's file (b004d902..., which dropped AsteroidVerticalOffset) with the branch's Rarity cleanup replayed: the five Rarity values (1, 0.5, 0.15, 0.05, 0.01) removed, nothing else touched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:13:23 +02:00
408b1c45bd ZoneGenerator.Place: a bodyless node is one body of its family's mass wherever a mass is read, and ChildrenWithinReachTests widens to seeds 1-30
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 02:01:09 +02:00
cacd926182 ZoneGenerator.Place: Settle recurses into each placed child; the queue, its guard and the settled set are deleted
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:59:06 +02:00
827f11c6df aetheria-gravity map: B59 bodyless binary members left at distance 0; why Settle recurses (spec bodyless-node-places-children.r1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:56:43 +02:00
6fcdb9cfea Merge eureka/aetheria-gravity-asteroid-floater-layer (head 01d3058d)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:26:03 +02:00
f30f15cd41 Merge eureka/aetheria-release-studio-underlay-fits-hull (head 1030e719)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:25:58 +02:00
b9e16872c7 Merge eureka/aetheria-gravity-ring-roche-final-heavy (head 390a5958)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 01:25:54 +02:00
a899432d46 Tests: the AI streams in both directions; sampling and admitting take nothing from the item stream, and each pilot's circuit is its own
Pins the survivors soul-ai-consumes-item-stream and soul-patrol-same-for-every-pilot of verdict s1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:54:01 +02:00
997172af17 Tests: the assembly derive rule at fifteen part means and across products, not at the fixtures' two
Pins the survivors soul-derive-quadratic-agrees-on-fixtures and soul-derive-floored-mean of verdict s1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:54:00 +02:00
05417f832e Tests: the role ceiling has no floor and no tolerance band; a product's own assembly replaces the maker's spread too
Pins the survivors soul-cap-assembly-floored, soul-cap-tolerance-band and soul-product-override-mean-only of verdict s1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:53:56 +02:00
14d3327c19 LockOn: the hostile is ordered to close on the player; the warning is measured against the poses it was stamped from
ScenarioStage.Approach(entity, target) states a piloted entity's task as a follow task on the target, passed through Zone.Admit to the flight as the member's baseline task; it replaces Patrol(entity, orbit) and the orbit index, and RunStart's post-admit circuit overwrite. LockOn stages at .6, the quality Crossing and the other RunStart scenarios use (its brief states none), not .8 picked by outcome.

The bearing check keeps well-law r4's intent (measure against the hostile's actual pose, not the staged line) but reads the poses of the tick before the paint was first seen, which is the tick it was stamped in, with a .05 deg limit for float error; the live-pose check at .5 deg spent its budget on the paint inbox's deliberate one-tick delay. LockOnHoldsUnderOnePercentOfEachStagedInput moves hostile x, y and quality by 1% each way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:51:33 +02:00
Meta Vens
01d3058d21 BeltFloaterLayerVerify: both belts the same length, so a draw list built from the other belt is measured as wrong sizes rather than an index fault
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:34:50 +02:00
Meta Vens
b320a8cf6d BeltFloaterLayerVerify: two belts loaded through ZoneRenderer with ARPG.unity's meshes; every drawn rock's reach and top measured from the instanced matrices and the mesh's vertices
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:29:04 +02:00
Meta Vens
72e2383ea4 DrawAhead.BeltDraw keeps the belt's meshes by the belt's key; empty candidates and a zero kept count are named refusals; ZoneRenderer draws through DrawBelts and one DrawInstanced seam
The unseeded Random.Range prune leaves ZoneRenderer: the kept set is a function of the candidates, the kept count and the belt key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 00:23:47 +02:00
Meta Vens
f5f0634b14 DrawnPoseTests: the renderer's remaining lines are pinned whole (the draw call, the pose, the scale, the slot)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:16:32 +02:00
Meta Vens
c5ad4676f7 DrawAhead.BeltDraw owns the whole per-rock draw list; ZoneRenderer iterates it with no mesh choice, sort or index arithmetic
Replaces RockMeshing/AssignRockMeshes and the renderer's slot bucketing (findings scale-lookup-unpinned,
renderer-index-wiring-unpinned). The build gate message names the mesh and the field, not the radii.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 23:12:33 +02:00
Meta Vens
390a5958c9 ChildrenWithinReachTests: sample seeds 1-9 so the ring Roche defect cannot hide behind six
Seeds 7, 11 and 12 reproduce the ring-inside-Roche-margin defect on the base
generator; seeds 1-6 do not. Seed 10 shows a separate defect (a bodyless
non-ring node whose children are never placed), so the range stops at 9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 22:18:34 +02:00