Commit graph

2,978 commits

Author SHA1 Message Date
Meta Vens
02ca78f1e1 ReachIsWhatTheShipCanDo: the Longinus's reach is bounded above by the allocated reach (1.3 nose-on, 1.2 broadside), not open
Finding cut-thrust-allocator.s3.longinus-envelope-unbounded. The allocated reach carries the envelope's turn terms, which now include the
drives' yaw, so the measured broadside lower bound moves from .9 to .85 of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:26:43 +02:00
Meta Vens
3056171c41 TheEnvelopeCountsTheMains: yaw is rad/s, fixture threshold .1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:23:07 +02:00
Meta Vens
db3103a026 Envelope from columns: Ship.RecalculateEnvelope sums the thruster columns' box extremes; Thruster.Manoeuvre and TorqueFloor deleted
Unverified at this commit (first build still to run); ceiling test not yet restored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:14:31 +02:00
Meta Vens
230aeccdd3 Merge thrust-allocator-wire: Ship.Update hands intent and live columns to ThrustAllocator
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	tests/Aetheria.Shared.Tests/RestoredHullsTests.cs
2026-10-10 23:44:54 +02:00
Meta Vens
cbf31c2719 Research: launcher lock, launch signatures and graded contact knowledge
Eyes pass for the operator's lock and visibility rethink: how Aetheria
represents visibility today, LOBL/LOAL and loitering munitions, warning
receivers, provocation, graded contacts in games, and the novella passages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 23:42:18 +02:00
Meta Vens
6a8ecb9b8d Merge ships-addon-package-frame: Package recentres on the centre of mass and generates map icon, shield, tractor
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 23:09:30 +02:00
Meta Vens
429c651a2a Package: sweep only what it generated (aetheria.generated), pin bounds centre, Source-only and collider-in-Generated
Stale sweep identified generated anchors by collection membership and role, so an author's hull-collider in
Generated was deleted. Generated anchors now carry aetheria.generated; the sweep removes only those. New smoke
pass package_asymmetric_pass: an L-shaped render hull pins tractor X and shield centre to the bounds centre,
a Source-only ship pins that generation never reads the Source fallback, and a collider placed in Generated
survives Package. All commits build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 22:55:18 +02:00
Meta Vens
91fe002596 ThrottleLock comment describes the floor; test pins the wormhole gate on the allocator
Builds: not yet verified at this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 22:19:37 +02:00
Meta Vens
5a92b74e52 smoke_frame: pin the shield floor, the no-outline refusal before any change, and the collider check ahead of the verdict
Hand mutants (floor dropped; recentre before generation) survived the first Package pass; both now fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:24:02 +02:00
Meta Vens
8d9acf269d Package recentres on the grid's centre of mass and generates map icon, shield, tractor; no collider
AetherDb ship-authoring centre prints Shape.CenterOfMass; Package asks it and moves Ship Root so that point sits
at the world origin, after regenerating the unowned map icon, shield and tractor from the render meshes (Keep
leaves one alone). Package never makes a hull collider (ruling package-frame-defer-collider). smoke_package's
bound-collection rollback cases now rebind to a different path so a rollback that restores keys but not values fails.

C# not yet built when committed; the Blender smokes and Python unit tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:02:22 +02:00
Meta Vens
92b82e9aa5 Ships add-on: all-or-nothing bind, pin the cross-drive fallback
_bind_collection restores every aetheria.* key if the ID-property store
refuses a value, so a bad ship id or pending leaves the collection as it
was. smoke_package.py gains default-run cases: relpath raising ValueError
(the cross-drive signal) must store the absolute path and finish; a refused
id or pending must leave bound and unbound collections unchanged.
All commits build (Python only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:38:17 +02:00
Meta Vens
e1788e19c1 Tests: the Longinus's reach bound is derived from the allocator's own push, not a widened constant; stale mixer comments and unused using UniRx removed
Builds; not yet run (the run follows).
2026-10-10 20:32:18 +02:00
Meta Vens
5a6e81db75 wip reach probe 2026-10-10 20:23:27 +02:00
Meta Vens
54ac0fcfa7 Merge eureka/aetheria-release-ships-addon-frame-r4: ships authoring tool and add-on frame
# Conflicts:
#	tests/Aetheria.Shared.Tests/ShipSchemaPinTests.cs
2026-10-10 19:54:03 +02:00
Meta Vens
66641b46de ThrustAllocatorTests: throttles stay in bounds and floors hold wherever the solve ends
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:47:53 +02:00
Meta Vens
9f779d42c0 ThrottleLockTests: the twin comparison reads to the solver's precision (1e-4)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:42:37 +02:00
Meta Vens
9ff6e4ba42 Tests: the floor's stick-independence at the allocator; throttle-lock twin diagnostics
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:39:42 +02:00
Meta Vens
3400268681 Tests: forward floor under the lock, thermal death tick, nominal columns under total brownout
Not yet run; this commit may not pass. Co-Authored-By below.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:26:51 +02:00
Meta Vens
534e402fdf Throttle lock is a forward floor on the solve; allocation moves after the performance update
The lock stops being an intent rewrite in Ship.Update: ThrustAllocator.Allocate takes forwardFloor, which ignores the
stick, asks full forward and holds every column with y > 0 at full (ruling overdrive-forward-floor). Ship allocates in
Entity's new UpdateThrottles phase, after every item's UpdatePerformance and before the power bus and Execute, so
liveness and thrust are the ones Execute acts on (finding liveness-read-before-performance).
Tests follow in the next commits; the test project still compiles, new behaviour is untested here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:26:49 +02:00
Meta Vens
caa424f424 BrownoutTests: a throttle under the old .01 gate still asks for its power
Hand mutant powerrequest-gate-01 survived: the gate's only reach is the energy asked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:08:04 +02:00
Meta Vens
0caf1fa525 ConsumablesFirstSetCommandTests: the landed designs carry the thermal pins and linear Quality terms (the shipped-catalog pins cannot see the command)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:53:25 +02:00
Meta Vens
b517642cd5 ConsumablesFirstSetTests: conductivity measured at 1; the thermal pins hold
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:53:07 +02:00
Meta Vens
3cb721e130 ConsumablesFirstSetTests: specific heat measured at 1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:52:13 +02:00
Meta Vens
e2d421621d ConsumablesFirstSetTests: pin the quality exponent and thermal constants; command test: dry run writes nothing, re-run is a no-op
The two Lows from Soul s1 (follow-up catalog-merge-replay-order). The thermal constants are placeholders
(-1) in this commit: it builds and fails by design, the next commit pins the measured values.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:49:27 +02:00
Meta Vens
d26b465e9a consumables-first-set command: public with a root argument, as the other catalog commands (tests drive it on a scratch catalog)
Settings are read from the opened db's root, not the working directory. Builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:49:26 +02:00
Meta Vens
cd5b7faad0 GameData/Aetheria.cc: consumables-first-set apply replayed on the merged tree
Master's catalog blob (f5645e0a, grammar global and seven verbs), then `consumables-first-set apply`.
Dry run on that tree, verbatim:

Vent radius Min 33.03 (Djinni 14x17 cells at 2 units: half diagonal 22.02, x1.5), Max 49.55
New designs:
  Thruster Overdrive   1x1  mass 10  price 18000  stackable False  duration 6  roles [propellant, regulator]
      ThrottleLockData
      Multiplier ThrusterData.Thrust 3-4.5 (propellant)
      Multiplier VelocityLimitData.TopSpeed 2-3 (propellant)
      Multiplier ThrusterData.Heat 5-3 (regulator)
      Multiplier ThrusterData.Visibility 5-3 (regulator)
      "Opens every drive wide and holds it there. The ship is thrown forward on a bright, hot plume while the pilot keeps the wheel."
  Coolant Vent         1x1  mass 15  price 12000  stackable False  duration 15  roles [nozzle, coolant]
      VapourDump radius 33.03-49.55 (nozzle), opacity 0.9-0.98 (nozzle), lifetime 14-20 (coolant)
      Multiplier RadiatorData.Emissivity 0.3-0.5 (coolant)
      "Dumps the coolant loop into space as a spreading bank of vapour. Sensors lose whoever is inside it, and the radiators pay for the loss."

New products:
  Thruster Overdrive -> "send it" by DME, every role mean 0.55 dev 0.2: no brakes/ no regrets/ one good burn
  Thruster Overdrive -> "Updraft" by Finch, every role mean 0.65 dev 0.2: Light as a feather and, for six seconds, about as fast as one in a gale.
  Coolant Vent -> "Smoke Machine" by NiteLife, every role mean 0.55 dev 0.12: Fills the room. Nobody can say who came in with you.
  Coolant Vent -> "Morning Fog" by Lightsail, every role mean 0.55 dev 0.1: Rolls in thick, lifts slowly, and leaves the bills with the other fellow.

Dry run. Pass "apply" to author 2 designs and 4 products.

A second run answers "already authored; nothing to do". This commit builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:48:38 +02:00
Meta Vens
4d1635b472 Merge origin/master (verse-grammar) into eureka/aetheria-release-consumables-first-set
GameData/Aetheria.cc is master's blob, not this branch's; the consumables-first-set
apply is replayed in the next commit. The AetherDb command list takes both new
commands. This merge commit does not build until the apply and test seeding follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:47:01 +02:00
Meta Vens
5a2f44db94 ThrottleLockTests: a full stick is the hull's whole forward thrust
Hand mutant move-clamped (forward intent capped at .9) survived the .5 bounds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:43:52 +02:00
Meta Vens
35af29304e ConsumableSupplyTests: seed the VerseGrammar global (master's new test used TestCatalogGlobal, which verse-grammar retired)
Mechanical merge fix. The merge commit before this does not build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:34:06 +02:00
Meta Vens
c4578cbd1f Merge origin/master into ghostlight-verse/verse-grammar
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:32:31 +02:00
Meta Vens
859ecad83a verse-grammar apply: the grammar update builds a new record instead of editing the cached one; replace test compares fields
The command mutated the cache's own VerseGrammar before the batch upsert, so the upsert was redundant and two Soul
mutants (update branch dropped; Same ignoring description or render path) survived: the replace test judged the result
with the same Same() the command uses. The test now reads the fields. Unrun until the full job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:39:44 +02:00
Meta Vens
6666f81385 Tests: the tiny-imbalance flight runs six seconds; the stick's length and no stick are pinned
The Longinus the fixture builds has no heatsinks: its drives overheat and shut down at
about seven seconds (measured: drift -0.006 deg to tick 360, then the thermal shutdown),
so the 600-tick flight of the spec reads the shutdown, not the allocator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:29:18 +02:00
Meta Vens
7378c8f1a8 ThrustAllocationTests: fix the diagnostic string (does not build the previous commit)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:27:35 +02:00
Meta Vens
158aeecf70 ThrustAllocationTests: probe the tiny-imbalance drift (temporary diagnostics)
Does not claim green.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:26:50 +02:00
Meta Vens
95a1395235 ThrustAllocationTests: heat the degraded drive stepwise; report the drift
The commit does not claim a green run; both tests were red in the previous run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:25:38 +02:00
Meta Vens
ab450e72d3 Tests follow the allocator: warm-up, free thruster power, heat-detuned drives
The allocator reads Item.Active every tick, so fixtures that fire a thruster on their
first update warm its performance first; flight fixtures take the thrusters' energy draw
to zero so a brownout does not scale the turn; the Duel drives are mismatched after they
heat apart, and degraded by heat (the Large Drive has no durability term); the
consumer sits at (2,1), the Skiff's interior centre column. ReachIsWhatTheShipCanDo's
Longinus ceiling is 1.3 (measured 1.195 nose-on, 1.249 broadside).

Previous test commits do not build or pass; this one is unverified until the full run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:24:05 +02:00
Meta Vens
cf6503bf4e Merge origin/master into consumable-supply 2026-10-10 14:05:56 +02:00
Meta Vens
c5e8e45e61 VerseGrammarTests: Author keeps its own grammar parameter (6c1b448c renamed it too; the test project did not compile)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:05:04 +02:00
Meta Vens
6c1b448c0e VerseGrammarTests: RootWith parameter does not shadow the loop variable (972848cb did not compile the test project)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:03:57 +02:00
Meta Vens
972848cb5f VerseGrammar: Open refuses a role named actor and two verbs with one name; edge and command-update pins
ValidateAll (one owner, called by AetheriaStores.Open) refuses duplicate verb names; Validate refuses the reserved role
name actor. Tests pin the name-class edges (a z 0 9 _), a null role element, the starter verb replaced when only its
description or render path differs, the grammar global updated in place, and the fixture's second allegiance and zero-role
speak. The test's scoped registry is TestCatalog.Registry(). Builds; unverified until the full run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:02:10 +02:00
Meta Vens
88fb919099 GameData/Aetheria.cc: verse-grammar apply replayed on the merged tree (master's catalog, then grammar revision 1 and the seven starter verbs)
Catalog sha256 193a4d25... (origin/master) -> f5645e0a... Output of 'dotnet run --project tools/AetherDb -- verse-grammar' (the dry run, before this apply), CultLib git-45c2f40:

    Grammar: new, revision 1.
      Verbs a Ghostlight-simulated Aetheria world may use: ship actions the game films in-engine, and speech rendered as Aetheria conversation.

    Starter verbs (7):
      mine(site: Place, ore: Cargo)  [ShipAction]  new
        The actor works an ore body at a place and takes the ore into its hold.
      haul(cargo: Cargo, destination: Place)  [ShipAction]  new
        The actor carries cargo to a destination place.
      tow(target: Faction)  [ShipAction]  new
        The actor tows a station or hull belonging to the target faction.
      defend(protected: Faction, at: Place)  [ShipAction]  new
        The actor guards a protected faction's ships and holdings at a place.
      attack(target: Faction)  [ShipAction]  new
        The actor attacks the target faction's ships and holdings.
      explore(region: Place)  [ShipAction]  new
        The actor surveys a region and charts what is there.
      speak()  [Conversation]  new
        The actor says something to whoever is in earshot. Shown as Aetheria dialogue: face to face when docked, by radio with the speaker's portrait over their ship when undocked.

    Dry run. Pass "apply" to land the grammar global and 7 verb(s).

A second dry run printed 'Nothing to do.' Data only; does not itself pass the suite until the validation commit's tests are in (builds: yes, the code is unchanged by this commit).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:02:02 +02:00
Meta Vens
3f5eb6b5c3 Merge origin/master into ghostlight-verse/verse-grammar
Takes master's catalog pointer (GameData/Aetheria.cc) and its TestCatalog.Registry fixture path;
VerseGrammar is the global scratch catalogs author (TestCatalogGlobal stays deleted: the shipped
registry now has a real global, so a test-only second one would have to be authored beside it).
StatResolverTests, TestCatalogTests and AetheriaStoresTests author VerseGrammar.

Does not pass the suite: the catalog is master's and holds no grammar until the verse-grammar apply commit follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:00:03 +02:00
Meta Vens
f8f4f65299 Merge origin/master into eureka/aetheria-release-mods-in-tree 2026-10-10 13:57:37 +02:00
Meta Vens
ffda2a8a76 Tests: add the missing usings (UniRx, System.Linq)
Fixes the compile errors of the previous commit; that commit does not build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:47:58 +02:00
Meta Vens
df61900db8 Rewrite the tests that read the mixer; add the ship-level allocator tests
EvasionTerm: the aggregate reads go; SteeringTests: ATurnIsThatFractionOfTheHullsTurn;
Brownout/ConditionRatio seat the lone thruster on the centre column; ThrottleLockTests
compare a locked ship to an unlocked twin through the same ticks; ThrustAllocationTests
(Duel flight, lost/degraded/repaired drives, dead thrusters, full turn, arena-stepped
flight); ThrustAllocatorTests.AMicroIntentIsServed.

Not yet verified green at this commit; the test project builds only against the
deleted aggregates' removal in the previous commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:44:22 +02:00
Meta Vens
c349de9c31 Delete the thrust mixer, buckets, aggregates, trim and pruning; wire ThrustAllocator into Ship.Update
Ship.Update hands the intent (the throttle lock's one line) and every thruster's live
Column(NominalThrust) to one ThrustAllocator and writes each Axis from its throttle.
Thruster gains NominalThrust and Column; the .01 throttle gates become > 0.

Does not build the test project: EvasionTermTests still read the deleted aggregates
(next commit rewrites them). Not compiled in Unity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:40:06 +02:00
Meta Vens
618e53336f Delete TurnTime and IAnalogBehavior
TurnTime has no caller; IAnalogBehavior's only implementer is Thruster. Pure
deletes, no behaviour change. Not compiled in Unity (the operator's); the
Shared tests build at the end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:39:23 +02:00
Meta Vens
55e607db35 Release map: allocator wiring refresh (TW1-TW6) and the lock warning (LW1-LW8)
Imagination passes (session self-2026-10-10-ag): the Duel oscillation was a
probe artifact (orbits unplaced before the zone's first tick); wiring and
envelope specs refreshed at 08d064c8; the ship-owned incoming-lock warning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:37:37 +02:00
Meta Vens
2be1f8efa2 Merge origin/master into eureka/aetheria-release-mods-in-tree
AetheriaStores.Open keeps both: the registry parameter and the missing-catalog refusal.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 13:35:39 +02:00
Meta Vens
1f8af424bf Merge origin/master into eureka/aetheria-release-link-rig-record
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:14:43 +02:00