Commit graph

2,806 commits

Author SHA1 Message Date
Meta Vens
492a8333fb Blender asset library: PBR Materials.blend (catalog Aetheria/PBR)
12 asset-marked materials, UV mapping with a scalar Tiling node, images
linked by relative path to Assets/Materials/PBR, previews generated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 00:26:22 +02:00
Meta Vens
840dfe6460 PBR materials: 12 ambientCG CC0 sets for Unity (GlowFade) under Assets/Materials/PBR
2K-JPG Color/Roughness/NormalGL (+Metalness, AO where the set has them),
generated MetallicSmoothness.png (R metallic, A 1-roughness), texture and
material .meta files, SOURCES.md. Unity side not opened yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 00:26:21 +02:00
Meta Vens
87ec736f04 Map: articulated mounts (body facts AM1-AM11, model-page rows, authority map, rationale)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:25:28 +02:00
Meta Vens
ce4bb199a7 Map: ballistic flight is presentation (r3 probes and rationale)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:23:24 +02:00
Meta Vens
6d83597b77 Map: ballistic-flight r2 body facts and why a round's end is one sim statement
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:27:59 +02:00
Meta Vens
1b2e9c1258 Map: allocator translation cost is linear (core r2 probes, tolerance, chosen constants)
Imagination pass, aetheria-release, session self-2026-10-09-morning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:37:59 +02:00
Meta Vens
a04ab767b9 Merge eureka/aetheria-release-cultmath-0-3-pin: CultMath 0.3.0 (BoundedLeastSquares), the pin guard fires on Linux, fixtures stop depending on the re-rolled galaxy
Soul s1-s2 hold (aetheria-release:verdict:cut-cultmath-0-3-pin.s2). The generated galaxy re-rolls with the noise kernel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:24:28 +02:00
Meta Vens
a3ea1d7ba1 Tests: scan's miss path fails then returns default (Assert.Fail is void)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:40:42 +02:00
Meta Vens
549c1b0253 Tests: the two no-Lagrange zone tests share one scan; restore NotSame, use Assert.Fail
The tutorial-seed scan for a zone with no genuine Lagrange candidate ran
once per test; it now runs once behind a Lazy. The leak test regains
Assert.NotSame(galaxy.Entrance, otherZone), and the scan's miss path uses
Assert.Fail (xUnit2020).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:39:05 +02:00
Meta Vens
aac2cf91e4 Map: spec refresh 2026-10-09 (scarce consumables, fog-bank presenter, multiply, tiered boosters, shipped AetherDb, player build)
Body facts RF1-RF8, model rows, booster and consumable tables, and rationale for the
revisions admitted under follow-up rulings-2026-10-09-spec-refresh. Sweeps the stacking
and hoarding lines the 2026-10-09 rulings made stale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:28:29 +02:00
Meta Vens
ab396c786a Tests: the evasion volleys fire enough shots to resolve the price gap
With the target's fit written out the jinking price is .383 against .440
coasting, but 200 rolled shots gave 93 hits jinking against 78 coasting: the gap
between the prices is smaller than the noise of two 200-shot volleys. 2000 shots
put the expected gap near four standard deviations; the assertion is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:57:48 +02:00
Meta Vens
c724001467 Tests: the evasion range's target is a written-out Djinni fit
EvRangeLaunch placed stage.Generated("Djinni"), whose fit follows the galaxy; at
CultMath 0.3.0 the generated target gave 95 hits jinking against 78 coasting.
The target now carries an explicit Talaria/cockpit/reactor fit, so the hit
comparison does not depend on generated content.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:54:44 +02:00
Meta Vens
0ccf02746d Tests: restored-hull station tests pick their zone by the property they test
EAC-7089 and EAC-2733 were generated-content names that CultMath 0.3.0 re-rolled
away. The no-Lagrange-candidate zone is now found by its property (planets that
are all rosette members, so no genuine candidate) by scanning seeds, and the
zero-natural-station zone by its isTutorial: false roll. Every assertion keeps
its claim; the candidate predicate is shared with the leak test's fixture check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:54:43 +02:00
Meta Vens
a59f1fa977 Tests: TutorialSeed1 follows the galaxy CultMath 0.3.0 rolls
The noise kernel changed at cultmath-unity-v0.3.0, so the fixed seed gives a
different tutorial. TutorialGalaxy_unchanged keeps its claim (a fixed seed
gives a fixed tutorial) against the regenerated shape. Does not pass the whole
suite: the RestoredHullsTests and the evasion test follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:54:42 +02:00
Meta Vens
97dd38dfb8 Pin CultMath 0.3.0 and make the pin guard fire on Linux
Directory.Build.props, Packages/manifest.json and the lock move to
cultmath-unity-v0.3.0 (614fd445) together. VerifyCultLibRevision matched the
CultMath ProjectReference by a backslash-spelled identity and was skipped on
Linux; it now matches by project file name. Does not pass tests: generated
content re-rolls with the new noise kernel, fixtures follow in later commits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:02:36 +02:00
Meta Vens
439d488ac8 Map: flight control allocates thrust (body facts, authority map, rationale); locomotion-cut.md superseded for Cuts 2-3
Imagination pass, aetheria-release, session self-2026-10-09-morning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:42:38 +02:00
Meta Vens
80d2c7f305 Tests: TurnRateIsTheActuatorsTurn idles the drives before it checks a Direction write
The backfilled Large Drives differ in quality, so a held forward thrust is a net torque and TurnRate never settled to zero. Release the movement demand with the turn demand.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 03:35:13 +02:00
Meta Vens
0c944a5a51 Catalog: replay roles-backfill apply on master's catalog
AetherDb roles-backfill apply on master's blob 32a2e401: 12 designs and 6 products authored; a second apply is a no-op.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 03:23:55 +02:00
Meta Vens
e915f95244 Merge eureka/aetheria-release-roles-backfill: roles backfill command and its tests (catalog blob stays master's; regenerated on the next commit)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 03:21:01 +02:00
Meta Vens
f28d4b4b12 Merge eureka/aetheria-release-sim-speed: one SimClock steps the zone, presenters draw ahead by Lead
AetherDrive.cs: master deleted the behaviour (2cfdc728); the branch only added a
TurnRate line to it. Deletion kept. Thruster remains the one rotation actuator
and feeds Entity.TurnRate. No sim stepping outside the clock on master
(mines presenter, Pirates AI, lot-product all step through Zone.Update).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 02:29:37 +02:00
Meta Vens
450e371f74 Tests: the exponent pin reads the shipped designs through the catalog opener
AetherDb.Open refuses a catalog without the test global record the scoped copies lack.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 02:14:54 +02:00
Meta Vens
a91bd1f7cf Tests: the replay resets the drives to unnamed terms, not stripped ones, as they shipped
Large Drive and Small Drive shipped with unnamed Quality terms on their flat stats; the command keeps those exponents. The reset stripped them, so the new exponent check read the Thruster precedent instead.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 02:13:15 +02:00
Meta Vens
ba382a6d5c Merge eureka/aetheria-release-modifier-subtypes: modifiers reach a behaviour type and its subtypes 2026-10-09 02:12:41 +02:00
Meta Vens
651f5cdc4f Tests: CB-R1 counts every Quality term on a non-flat stat and rejects a role named on a flat one
A non-flat stat must carry exactly one Quality term, named, declared, with a positive exponent; a flat stat may not name a role. The check is one function with its own synthetic-stat test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 01:59:26 +02:00
Meta Vens
9744d3969f Roles backfill: the exponent precedent is read before any target changes; the replay sees exponents and a one-of-two-roles seller
ExponentFor drew its pool from items.Except(targets), so growing the targets from six to twelve changed the exponents a rerun on master's catalog writes. The pool is now snapshotted once, from every design that declares roles and names a Quality term, before the loop mutates anything. Describe prints each named term's exponent, one test pins Autocannon's and LRMM72's exponents against the shipped blob, and one clears a single role of a two-role seller and expects only that role re-authored.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 01:59:25 +02:00
Meta Vens
d7ee26d389 Tests: the replay reads the shipped designs and resets through the scoped registry before the catalog gains the sibling record
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 00:36:45 +02:00
Meta Vens
2843358430 Tests: a names-only replay, so apply still lands designs when no seller changes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 00:24:58 +02:00
Meta Vens
94f4a9872c Roles backfill: separate the null and map checks (definite assignment survives mutation)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 00:11:04 +02:00
Meta Vens
e97968e271 Roles backfill: read each stat with as, so Stryker can mutate the command
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 00:02:46 +02:00
Meta Vens
80b51d63ea Catalog: roles-backfill apply re-run (6 designs name their unnamed Quality terms)
Produced by `AetherDb roles-backfill apply` on Yggdrasil over the previous catalog blob (3d531aff). Dry run:

  DeathCluster  (Weapon/Ballistic)  roles [barrel, feed mechanism]
      AutoWeaponData.Count            12 -> 12..15  feed mechanism ^1
  Flak Gun  (Weapon/Ballistic)  roles [barrel, feed mechanism]
      AutoWeaponData.Count            6 -> 6..8  feed mechanism ^1
  GT 3K  (Weapon/Launcher)  roles [guidance system, thruster, warhead]
      LauncherData.MinRange         500 -> 500..50  guidance system ^1.75
  plight  (Weapon/Energy)  roles [focusing array, power coupling]
      ChargedWeaponData.DamageSpread     1 -> 1..3.3  focusing array ^1.25
  MoveOnPro  (Reactor)  roles [core, regulator]
      StatModifierData.Modifier         1.1 -> 1.1..1.25  core ^1
  MoveOnPro Station Reactor  (Reactor)  roles [core, regulator]
      StatModifierData.Modifier         1.1 -> 1.1..1.25  core ^1

6 design(s) and 0 product(s) to author.
Dry run. Pass "apply" to land them.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 23:50:35 +02:00
Meta Vens
c5ce2b6409 Tests: the replay leaves Small Drive's sellers as they shipped
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 23:50:14 +02:00
Meta Vens
d2f4061769 Tests: fix the broken join string in the catalog roles test
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 23:48:23 +02:00
Meta Vens
6218f9fdc1 Roles backfill: Count and MinRange take a role but are never ranged; fix a broken string in the catalog test
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 23:47:54 +02:00
Meta Vens
2e1c2c439b Tests: CB-R1 enforced whole, backfill replay on a scratch catalog, envelope and operability read the catalog
ShippedCatalogRolesAreLive checks every design of every kind: each non-flat stat reads one declared role,
declared roles are read, sellers author each once, role-mapped designs are not all flat (the tool answers
which, via Program.HasRoleMap). RolesBackfillIsAuthored pins ratios and roles, with the Autocannon
Penetration, Mine Range and LRMM72 LockAngle asserts. RolesBackfillCommandTests resets the backfilled designs
on a scratch catalog, applies, and expects the shipped catalog back, then replays as a no-op.
EveryShippedProductHasAMaker. TheEnvelopeComesFromTheGear bounds each drive by the catalog's Large Drive
Thrust range; ShippedWeaponOperabilityTests reads the catalog's DefaultEntitySettings.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 23:46:28 +02:00
Meta Vens
6a1eb68ddb Roles backfill: one role map per design, the six unnamed non-flat stats named, RolesBackfill takes a root
RoleMapFor answers for the Mine Launcher (MineLayerRoles) so roles-migrate and roles-backfill no longer
disagree on it; BackfillMapFor is deleted. Count, MinRange, DamageSpread and the reactor Modifier join their
kind maps, and the backfill points a varying stat's unnamed Quality term at its role without touching its
range. DeathCluster, Flak Gun, GT 3K, plight and both MoveOnPros join the backfill set (CB-R1 forces them).
RolesBackfill(apply, root) mirrors PiratesFaction so tests can replay it on a scratch catalog.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 23:46:26 +02:00
Meta Vens
257a8a4795 Sim speed fix: scripted poses are not drawn ahead; a step cannot reset its clock; DrawAhead.Time deleted
DrawAhead leaves a ship in a wormhole animation where the step put it. The clock is
one static instance; a zone entered inside a step ends that frame's stepping and the
clock resets between frames (SimClock.Reset throws inside Advance). DrawAhead.Time had
no consumer.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 23:39:30 +02:00
Meta Vens
56f7162923 Merge emoji-font into master 2026-10-08 23:37:09 +02:00
Meta Vens
a7f801c4b9 Subtype modifier tests: deactivate the ship before equipping the guns
TryEquip refuses on a deployed ship.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:54:11 +02:00
Meta Vens
544807bb85 PiratesRecordTests: a Pirates rebrand unit titles and brands as its own product through the merged lot-product code
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:50:12 +02:00
Meta Vens
162e60889d Merge lot-product: a lot records its product 2026-10-08 22:49:08 +02:00
Meta Vens
37f40dfdd7 Emoji routing: the global fallback is the only route; the check observes it
EmojiFont.Build leaves TMP's emoji fallback list empty. EmojiCheck fails when that list is non-empty,
when the global fallback lacks Emoji.asset, or when a glyph is served by a font other than Emoji.asset
or the body font; reads the Pirates product names from the shipped catalog; renders the
emoji-test.txt corpus and reports what Twemoji lacks; counts only used atlas pages (TMP doubles the
array capacity, so trailing slots are null by design).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:45:51 +02:00
Meta Vens
8d2b18bb17 Emoji corpus from Unicode's emoji-test.txt; lock records interpreter and container
1400 single code points (the 2 and 3 digit ones included), Twemoji lacks none; font sha256
unchanged (reproduced in python:3.13-slim on Yggdrasil).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:45:48 +02:00
Meta Vens
8e73b54271 README: Twemoji CC BY 4.0 attribution
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:45:46 +02:00
Meta Vens
303f73e19f Tests: the Longinus envelope's flank sides are each Talaria's own thrust
Each fitted Talaria has its own lot's thrust, so Left and Right are the two flanks'
accelerations, not both the larger one.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:39:21 +02:00
Meta Vens
f3550b67a4 Tests: roles-backfill fallout (Tractor Beam has no stat, Longinus fitted by name)
ShippedCatalogRolesAreLive skips gear with no PerformanceStat at all (Tractor Beam is a
thruster kind with none). TheEnvelopeComesFromTheGear fits the Longinus by name: the
generator's picks follow the item stream and every authored ProductRole draws from it, so
the generated hull stopped carrying Large Drives (Medium Drive and RevvITup instead). Its
forward bound is the drives' own thrust, since a Large Drive now rolls 0.8x to 1.2x.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:26:34 +02:00
Meta Vens
b5ff1ae260 Map: ships add-on frame r5, authoring without the repo
Probes B1-B9, the owner answer (published AetherDb), the r5 authority map
and rationale from the imagination-addon-frame pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 22:25:34 +02:00
Meta Vens
017da88334 Catalog: roles-backfill apply (6 designs, 6 products)
Output of `AetherDb roles-backfill apply` on origin/master 325ef4bc's catalog, run on
Yggdrasil at 54999a64. Dry run: Autocannon, LRMM72, SRMM72, Mine Launcher, Large Drive
and Small Drive gain roles and quality ranges; Autocannon (Zhestokost, Pirates),
LRMM72 (R&D), SRMM72 (DME), Mine Launcher (DME) and True North (Lightsail) author their
ProductRoles. A replay prints "already authored". At merge, take master's catalog and
rerun `AetherDb roles-backfill apply`.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:11:52 +02:00
Meta Vens
54999a642b Roles backfill: AetherDb command and catalog role tests (CB-R1)
AetherDb roles-backfill gives Autocannon, LRMM72, SRMM72, Mine Launcher, Large Drive
(and Small Drive, which declared roles no stat read) live roles: each mapped flat
stat becomes a 0.8x..1.2x range read through a Quality term naming its role, and
every seller authors a ProductRole per role from its maker profile. MineLayerRoles
is new; the maker profile table is hoisted so pd-gear and this command share it.
ShippedCatalogRolesAreLive and RolesBackfillIsAuthored read the shipped catalog.
The catalog blob lands in its own commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:09:18 +02:00
Meta Vens
e7375d54a1 Map: consumables (host fix, supply, throttle lock, vapour cloud)
Body facts CC1-CC12, rules CS-R1..CS-R4 and rationale from the
imagination-consumables pass; specs and questions are in the mind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 22:06:21 +02:00
Meta Vens
851476bc23 Emoji font script: pin Unicode emoji-test.txt, refuse outside the pinned container
The corpus now derives from emoji-test.txt (sha256 pinned), keeps single code points of any digit
count, and lists the emoji Twemoji lacks. The script runs only on linux, Python 3.13, image
python:3.13-slim and records those in the lock; identical pins with a different font exit 1 and
leave the committed font and lock untouched.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-08 22:05:09 +02:00