Moddable ships: starter command, top-speed fix, Wren stand-in package, thrust-scale test pins #1

Merged
nibu merged 7 commits from nibu/moddable-ships-wiring into master 2026-11-10 18:02:26 +00:00
Member

Moddable ships: what is wired from a hull package on disk to a flying ship, what this branch adds, what is still open. Do not merge before the operator's S3 built-player session (ruling aetheria-release:ruling:ships-merge-on-agent-proof).

Already wired on master

GameData/Mods/<id>/ship.cc + ship.glb -> ShipModCatalog.Compose/ResolveCatalog (boot, ActionGameManager.cs:63) -> ShipModShips.Preload (:71; any import failure faults and refuses New Game/Continue) -> ZoneRenderer.LoadEntity (ZoneRenderer.cs:397) clones the prototype. One package in tree: aetheria.nakovalnya.

This branch

  • ship-authoring stats --top-speed adds the VelocityLimit a hull made without --like lacks (it was unfixable by any command; follow-up package-hull-top-speed).
  • ship-authoring starter <mods> <id> <name> --like <hull>: a complete flyable package with no Blender (tools/AetherDb/ShipStarterCommand.cs), judged by the reader the game boots with.
  • GameData/Mods/aetheria.wren: first output of the starter, priced, with an unoffered Aeronautics Unlimited product ("Wren Courier"). A boxed stand-in: git rm -r GameData/Mods/aetheria.wren removes it. Tests: WrenPackageTests.
  • Twelve tests broken by the demo sprint's ThrustScale = .1 (e0c1daa4e) now state ThrustScale 1.

Verification (Linux headless, CultLib b8fc5eb0 / CultMath 7a8933b0)

Shared build: 0 errors. Full Aetheria.Shared.Tests before the last commit: 2903 pass, 5 fail. After the last commit only a subset was rerun (Wren, Nakovalnya, RestoredHulls, EveryUnsold: 30/30); a full run on the final head has not been done.
Still failing, not mine: MiningCut3Tests.ChunkInfoIsBitIdentical... (fails at the pre-sprint base too), CrossingConditions, CrossingHoldsAcrossTheStartWindow (crossing takes 2.6 s, expected 3-4.2), TwoAiDigestIsPinned (digest moved), EconomyCommandTests.Report... (flaky: passes alone).
Unity was not built or started (no Unity on this host). The demo-sprint Unity-side code was only read; the identifiers it uses resolve.

Gaps not closed

  • fly <hull> (ActionGameManager.cs:582) draws through the market, so it cannot reach an unoffered or product-less hull (LoadoutGenerator.cs:171, :249): Nakovalnya and Wren are unreachable by console; the doc's "console-only" claim is wrong.
  • Census (ScenarioTests.cs:597) flags any product-less hull; a package without a product needs a scenario.
  • Open Eureka follow-ups: mod-hull-changed-under-run (ShipModCatalog.cs:155), mod-ship-single-existence-gate (looks closed in code; ShipModShips.cs:57-62), failed-start-scene-halts, ship-lods, S3 session unrun.

🤖 Generated with Claude Code

Moddable ships: what is wired from a hull package on disk to a flying ship, what this branch adds, what is still open. Do not merge before the operator's S3 built-player session (ruling `aetheria-release:ruling:ships-merge-on-agent-proof`). ## Already wired on master `GameData/Mods/<id>/ship.cc` + `ship.glb` -> `ShipModCatalog.Compose/ResolveCatalog` (boot, `ActionGameManager.cs:63`) -> `ShipModShips.Preload` (`:71`; any import failure faults and refuses New Game/Continue) -> `ZoneRenderer.LoadEntity` (`ZoneRenderer.cs:397`) clones the prototype. One package in tree: `aetheria.nakovalnya`. ## This branch - `ship-authoring stats --top-speed` adds the `VelocityLimit` a hull made without `--like` lacks (it was unfixable by any command; follow-up `package-hull-top-speed`). - `ship-authoring starter <mods> <id> <name> --like <hull>`: a complete flyable package with no Blender (`tools/AetherDb/ShipStarterCommand.cs`), judged by the reader the game boots with. - `GameData/Mods/aetheria.wren`: first output of the starter, priced, with an unoffered Aeronautics Unlimited product ("Wren Courier"). **A boxed stand-in**: `git rm -r GameData/Mods/aetheria.wren` removes it. Tests: `WrenPackageTests`. - Twelve tests broken by the demo sprint's `ThrustScale = .1` (`e0c1daa4e`) now state `ThrustScale 1`. ## Verification (Linux headless, CultLib b8fc5eb0 / CultMath 7a8933b0) Shared build: 0 errors. Full `Aetheria.Shared.Tests` before the last commit: 2903 pass, 5 fail. After the last commit only a subset was rerun (Wren, Nakovalnya, RestoredHulls, EveryUnsold: 30/30); **a full run on the final head has not been done**. Still failing, not mine: `MiningCut3Tests.ChunkInfoIsBitIdentical...` (fails at the pre-sprint base too), `CrossingConditions`, `CrossingHoldsAcrossTheStartWindow` (crossing takes 2.6 s, expected 3-4.2), `TwoAiDigestIsPinned` (digest moved), `EconomyCommandTests.Report...` (flaky: passes alone). **Unity was not built or started** (no Unity on this host). The demo-sprint Unity-side code was only read; the identifiers it uses resolve. ## Gaps not closed - `fly <hull>` (`ActionGameManager.cs:582`) draws through the market, so it cannot reach an unoffered or product-less hull (`LoadoutGenerator.cs:171`, `:249`): Nakovalnya and Wren are unreachable by console; the doc's "console-only" claim is wrong. - Census (`ScenarioTests.cs:597`) flags any product-less hull; a package without a product needs a scenario. - Open Eureka follow-ups: `mod-hull-changed-under-run` (`ShipModCatalog.cs:155`), `mod-ship-single-existence-gate` (looks closed in code; `ShipModShips.cs:57-62`), `failed-start-scene-halts`, `ship-lods`, S3 session unrun. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
validate refuses a ship hull with no top speed, and stats --top-speed refused a hull with none, so a package made without --like could not be made valid by any command (follow-up package-hull-top-speed). The flag now adds exactly one VelocityLimit and edits it on a later run; two stay refused.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Writes <mods>/<id>/ship.cc and ship.glb: a shipped hull's stats, a 4x6 grid with two drives, a radiator, two energy guns and the internal modules, and a boxed model carrying every anchor. The package is read back through ShipModCatalog.ReadPackage, so the GLB's node ids and mesh roles are judged by the reader the game boots with. Refuses to overwrite a package.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Written by ship-authoring starter --like Djinni, priced, with an unoffered Aeronautics Unlimited product (so the census counts it sold and no faction fields a box). Tests: it composes into the catalog, its mounts take catalog gear, and the fitted ship moves under thrust. Drop the directory to remove it; replace the model through Blender and Package to make it a real hull.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
e0c1daa4e made thrust a tenth of authored by default (GameplaySettings.ThrustScale = .1), which broke twelve tests that pin what a thruster, a hull or a brain does (Brownout, ConditionRatio, Longinus top speed, the evasion, approach and envelope tests, SimRateEquivalence). Their fixtures now state ThrustScale 1: they pin mechanics, and a retune of the global knob does not move them.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A hull no maker offers is drawn by no generator, so fly now falls back to a catalog
Loadout of the named ship hull (Loadouts.Materialize with the game's chooser). The
authoring doc claimed a product-less package is console-only; it is unreachable
unless a Loadout fits it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Author
Member

Head now includes the fly-loadout fix (2b0fb3c22). Suite: 2904 of 2909 passing; the 5 failures are the known pre-existing and flaky ones. This commit has not been compiled in Unity. PR stays unmerged until the S3 built-player session.

Head now includes the fly-loadout fix (2b0fb3c22). Suite: 2904 of 2909 passing; the 5 failures are the known pre-existing and flaky ones. This commit has not been compiled in Unity. PR stays unmerged until the S3 built-player session.
#3 landed the same --top-speed fix this branch already carried; both
conflicting files keep this branch's version (same behavior, stronger test).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Author
Member

Steward check before merge (nibu, 2026-11-10). This PR conflicted with master after #3 landed (the same --top-speed fix, written twice, plus the stronger test here). Merged master in as 07cfa26d6, taking this branch's version of both conflicting files; no force, no history rewrite.

  • dotnet test tests/Aetheria.Shared.Tests on 07cfa26d6: 2904 pass, 5 fail, against master's 15 fail. The five are all in master's red set or the parallel flake: MiningCut3Tests.ChunkInfoIsBitIdentical... (platform, tracked in suite-red-chunkinfo-platform-and-thrust-pins), RunStartTests.CrossingConditions, CrossingHoldsAcrossTheStartWindow, TwoAiDigestIsPinned (stale pins tracked in suite-red-crossing-needs-design), and EconomyCommandTests.AnAuthorDryRunReads... (passes alone: Economy, Wren, ShipModCatalog and ShipProduct suites 123/123). The ten thrust-scale pins that were red on master (Brownout, ConditionRatio, RestoredHulls, six RunStart) are green here. No new failure.
  • Falsification: one mutant survived. Making the starter's thrusters ItemRotation.None instead of Reversed (ShipStarterCommand.cs:80) passes all four WrenPackageTests; the thruster's facing is not pinned. Recorded as follow-up aeth-starter-thruster-rotation-unpinned, not a blocker for a dev-tool starter package.
  • Not verified: the ActionGameManager.cs change (fly through a Loadout) is Unity-only and this host has no Unity; I checked that every API it calls (Loadouts.Materialize, LoadoutGenerator.ChooseProduct, Loadout.Hull, HullType.Ship) exists in ServerShared at this head. ship.glb is the 3-line git-lfs pointer, which is how the repo stores it.
  • Merged. The earlier "do not merge until the operator's S3 session" gate is dropped (process strike: stewards own merges).
Steward check before merge (nibu, 2026-11-10). This PR conflicted with master after #3 landed (the same `--top-speed` fix, written twice, plus the stronger test here). Merged master in as 07cfa26d6, taking this branch's version of both conflicting files; no force, no history rewrite. - `dotnet test tests/Aetheria.Shared.Tests` on 07cfa26d6: 2904 pass, 5 fail, against master's 15 fail. The five are all in master's red set or the parallel flake: `MiningCut3Tests.ChunkInfoIsBitIdentical...` (platform, tracked in suite-red-chunkinfo-platform-and-thrust-pins), `RunStartTests.CrossingConditions`, `CrossingHoldsAcrossTheStartWindow`, `TwoAiDigestIsPinned` (stale pins tracked in suite-red-crossing-needs-design), and `EconomyCommandTests.AnAuthorDryRunReads...` (passes alone: Economy, Wren, ShipModCatalog and ShipProduct suites 123/123). The ten thrust-scale pins that were red on master (Brownout, ConditionRatio, RestoredHulls, six RunStart) are green here. No new failure. - Falsification: one mutant survived. Making the starter's thrusters `ItemRotation.None` instead of `Reversed` (`ShipStarterCommand.cs:80`) passes all four `WrenPackageTests`; the thruster's facing is not pinned. Recorded as follow-up `aeth-starter-thruster-rotation-unpinned`, not a blocker for a dev-tool starter package. - Not verified: the `ActionGameManager.cs` change (`fly` through a Loadout) is Unity-only and this host has no Unity; I checked that every API it calls (`Loadouts.Materialize`, `LoadoutGenerator.ChooseProduct`, `Loadout.Hull`, `HullType.Ship`) exists in ServerShared at this head. `ship.glb` is the 3-line git-lfs pointer, which is how the repo stores it. - Merged. The earlier "do not merge until the operator's S3 session" gate is dropped (process strike: stewards own merges).
nibu merged commit c33feebde2 into master 2026-11-10 18:02:26 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Aetheria!1
No description provided.