soul
1870e23bfd
Rounds per step: a gun's capacitor holds a step's inflow so every round of the step is paid; the mine-laying test's cooldown no longer pins the one-lay-per-step cap
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:28 +02:00
soul
04128e2f81
InstantWeapon: a pull is held through its step
2026-10-23 06:09:26 +02:00
soul
de9e1ba2f9
Projectile: a round is told of its shot by its manager's one subscription, and first seen where its barrel was when the sim fired it inside the step
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:24 +02:00
soul
95b7aeb7a2
Rounds per step: a held gun fires every round its cooldown allows in a step, each born at its own moment inside it; the shortest-timer pin is gone
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:22 +02:00
soul
3d4508d196
ChargedWeapon: a failed charge's cooldown restarts through InstantWeapon.StartCountdown and carries its overshoot
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:21 +02:00
soul
ed5dd92283
Game tick lowered to 30 Hz (ruling tick-rate-stays-30); digest repin follows
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:19 +02:00
soul
549437536a
Cooldowns shorter than a step end in it; tests that pinned the old tick-quantised cadence and Euler decay follow the exact rules
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:17 +02:00
soul
f0362025d9
Step-exact rules: timers keep their overshoot, passive sensing decays exactly (group B, 60 Hz, digest not repinned)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:14 +02:00
soul
e2f0fc9dc4
SimClock owns the game tick: TickRate, GameStep, ForGame(); the 60 default and ActionGameManager's literal step are gone
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 06:09:12 +02:00
soul
a487f6c0a4
Merge eureka/aetheria-living-world-recipe-schema-and-checks: recipe and outside-market records; catalog checks for sources and sinks, productivity, recipes, lore and consumer demand
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 05:21:37 +02:00
soul
5584c0d7c8
Merge eureka/aetheria-release-loadout-commit: AetherDb loadout-commit with --boss-of; Loadouts.Commit accepts package designs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
# tools/AetherDb/Program.cs
2026-10-23 04:27:12 +02:00
soul
6b89019c02
Economy checks: an undefined radius refuses; factor refusal says why
2026-10-23 04:24:32 +02:00
soul
c6c8b4465b
Economy checks: pins from mutation testing; drop two redundant guards
2026-10-23 04:14:42 +02:00
soul
3506d48b1f
Spectral radius: converge on the vector, not on two equal maxima
2026-10-23 02:50:57 +02:00
soul
bacb56c613
Recipe schema and catalog checks: RecipeData, OutsideMarketData, role counts, EconomyChecks over fixture catalogs
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 02:43:35 +02:00
soul
d233194cb2
Merge eureka/aetheria-living-world-station-kind-datum: station kinds are one catalog list; stations and fields are placed by seed; bad station packages are excluded by name
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 02:14:33 +02:00
soul
2fb8e88fcf
ScenarioPicker: find the list's ScrollRect while the panel is still inactive (play mode builds it before showing it); verify builds the real list inactive
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:43:03 +02:00
soul
9961a0df6d
ScenarioPicker.Reveal: content moves against the row (the sign the first fix kept inverted)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:43:01 +02:00
soul
ca24a32028
ScenarioPicker: Reveal moves the content the right way; Launch is one-shot; the scrollbar takes no focus; the picker holds focus itself so the scene's background-click deselect is back on
...
ScenarioPickerVerify builds the real scenario list after a layout pass and arrows to every row, up and down, requiring each wholly visible; Launch by click, second click and Submit runs once.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:42:59 +02:00
soul
169679dbc4
ScenarioPicker: viewport span from the rect's own corners so FitViewport and Reveal see the real mask; Launch chrome stretched to its 220-wide button
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:42:58 +02:00
soul
585942259d
Scenario picker attempt 2: body heading instead of a second giant title, small left group labels, chrome Launch in the accent, tight Seed/Ambient block, capped brief, visible scrollbar track
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:42:57 +02:00
soul
09de7e5eb2
ScenarioPicker: selected row in the menu accent, title is group over name, panes docked 128 apart; verify and capture run green in Unity; metas
...
The prefab row tint is nearly invisible on the row's graphic, the long scenario name overflowed a 480-wide title, and the list scrolls to keep the selection in view.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:42:56 +02:00
soul
79a3a62fc1
ScenarioPicker verify and capture: selection and key rules through real UI events, and a 1920x1080 render of the screen
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:42:55 +02:00
soul
3bfac25027
New Game is a two-pane scenario picker: names by group, selected brief/seed/ambient, one Launch, arrows and Enter
...
MainMenu.AddScenarios and the per-scenario launching buttons are deleted; the seven Clear+Title pairs collapse into Next. The main menu EventSystem no longer deselects on background click so the arrows keep working.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:42:54 +02:00
soul
80283d18a9
Loadouts.Commit takes bossOf: the Loadout and Faction.BossLoadout land in one batch
...
With bossOf set, the same conditional batch Expects the faction unchanged and Upserts it
with BossLoadout = KeyOf(Name), so both land or neither does. The batch lives in an
internal overload over a caller's cache; tests pin that a faction changed on disk after
the read refuses both, and that a missing boss faction writes nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 01:42:50 +02:00
soul
7f1337167d
Loadouts.Commit stops refusing package designs (ruling catalog-is-a-package-stack)
...
The catalog is a stack of packages, the shipped content included, so a Loadout may
name any design the stack holds. The mod-design refusal (from 54917bb3 , backed by no
ruling) is deleted, and its test now pins that a package design commits under its key.
The IsModKey comment no longer claims the shipped catalog never references a mod.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 01:42:49 +02:00
soul
d2f4b2c347
A bad package station kind excludes the package; AetherDb opens a catalog with a kindless station hull, names it, and station-kinds hull sets it; the raw opener is gone
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:21:04 +02:00
soul
37a8110907
Station and belt kinds are seeded: the pick hashes the zone seed and the place in generation order, not a minted key
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:21:02 +02:00
soul
0a468f24a8
Station kinds: tests pin the log text, a null faction, and one-hop stand-ins; kind strings default to null
2026-10-23 01:16:21 +02:00
soul
fba7bd1b47
Station kinds: StationKindData catalog list, HullData.Kind, placed station Kind; GenerateStationLoadout takes a kind (the kindless draw is deleted)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 01:16:17 +02:00
soul
7886f0a231
ShipAuthoringStore.Load names the file when its store format is newer than this runtime reads
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 23:35:14 +02:00
soul
f448957f3a
Brush: name AnimatedSimplexBrush and RadialWaveBrush as arms; pull-failure test asserts the record key
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 23:35:09 +02:00
soul
fb8f2ea2fb
ShipAuthoring: Load follows the pull's InvalidDataException, RefuseLegacyEmbeddedHull the nil-stamp NotSupportedException
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 23:35:05 +02:00
soul
bd0293d683
BehaviorData: LockWeaponData is arm 52; union-closure and null-gear tests
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 23:35:04 +02:00
soul
8b0b50382a
WeaponData: drop the dead [Union] list; BehaviorData's union owns behavior arms
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 23:35:01 +02:00
soul
9958fe55ab
Cargo purchase: a bay stack is one lot, so the lot loop is deleted; stock above MaxStack from outside a bay is refused up front
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 22:50:24 +02:00
soul
b027b36ab4
Cargo restore: a saved stack above MaxStack splits into MaxStack stacks, the same bay first, then the others; only what fits nowhere is dropped, logged
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 22:50:23 +02:00
soul
fa5820f516
Cargo give: the bay no longer holds a stack below one, so the give's positive-stack filter and its zero-stack test go
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 22:15:41 +02:00
soul
ddae55759d
Cargo bay owns stack quantity: TryStore refuses below 1 and above MaxStack, TryBuyLots owns the stock limit, restore logs dropped stacks
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 22:01:42 +02:00
soul
4d462c771c
Give: Zone.Remove ends the leaving giver's give GiverGone
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 21:10:09 +02:00
soul
f0d7c12cbd
Trade: the purchase loop moves to StationServices.TryBuyLots, charging each lot it delivers; the Buy Quantity field clamps to at least one
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 21:10:07 +02:00
soul
f9a09e0d0a
Cargo: TryTransferItem and Remove refuse a quantity below one and change nothing
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 21:10:04 +02:00
soul
7e2fff1ff1
Merge eureka/aetheria-release-transfer-verb: give-only ship-to-ship transfer; partial cargo moves conserve units
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 21:03:37 +02:00
soul
0267a191c4
Merge eureka/aetheria-arena-view-seam: one PilotView per side; brains reach other ships only through their side's sensors; unaffiliated ships are sides of one
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 18:50:35 +02:00
soul
488b3fa434
PilotView enforces its own rules: members only, fire-control readouts only on the member's own track; constructor and View setter internal
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 18:26:07 +02:00
soul
70aa1ed037
Transfer verb: drop the redundant pre-check, let range, step length and quantity edges show in tests
...
TryStore already takes all of a part or none, so the pre-check in TryTransferItem changed nothing observable.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 18:22:43 +02:00
soul
ae52857a91
SimpleCommodityData: name key 10 as the removed stored Category (Soul s1 simple-key10-comment-misnamed)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 18:01:23 +02:00
soul
d3cd7813d7
Catalog subtraction: commodity records lose DemandProfile and both stored categories; the trade menu stops filtering by them
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 17:31:08 +02:00
soul
c1aab929b1
Give verb: a stop is a verb with no receiver, and the type pattern skipped it; tests: second bay at a free cell
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 16:42:42 +02:00
soul
cada2fde3e
Transfer verb: a pilot gives cargo to a ship alongside, committed through the conserving bay move
...
TryTransferItem(SimpleCommodity) checks the target can take the part and stores the part removed, not the stack
left behind (it duplicated and lost units on every partial move, the player's commodity buy among them).
TryTransferItems goes. CargoTransfer.Step owns a give's progress and end; PilotCommand.Give and StopGiving are applied
by PilotApplier; TransferRate is the new tunable, DockingDistance the range.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 16:38:17 +02:00