f4d5659d landed with StatValidation's OptimalTemperature-bounds check replaced by
`if (false)`: the mutation harness was running concurrently against this same file
and a `git add`/`git commit` caught it mid-mutation. Restores the real check. Caught
because the harness's own "not yet reached" scars in doctrine are what prompted a
by-hand recheck of the just-committed diff rather than trusting the terminal output
that said 80/80 green a moment earlier.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
24 KiB
Cut 1 migration table: R-heat fit and term counts
Date: 2026-09-18. Cut 1 of docs/stats-and-power-cut.md. Generated by a scratch migration console (two
phases, neither kept) against GameData/Aetheria.cc at pre-migration sha1 d65c2aede2ee637fdb77fb83e6d7acd4d6c37cb3
(12,682,424 bytes). The committed file's sha1 is 13a13a675064f971dfff3a3d83998220da42dd49 (12,682,737 bytes,
+313 for 51 authored OptimalTemperature/PlateauWidth float pairs).
The pre-migration catalog does not open under the post-Cut-1 code. Opening the unmigrated bytes with the
new AetheriaStores.Open throws immediately: ClearPath: OptimalTemperature 0 lies outside its bounds [223.15, 473.15] -- StatValidation refusing the unauthored-default 0 for the very first design it checks.
This is why the schema change and the catalog rewrite are one commit, not two: there is no working
intermediate state. Keys 2-5 (the retired HeatExponentMultiplier/DurabilityExponentMultiplier/
QualityExponent/FromRole) are simply absent from the new PerformanceStat type, so CultCache's normal
slot-compatibility path (an unrecognized stored key is skipped, not an error) is what makes the stat fields
safe to drop silently -- it is OptimalTemperature/PlateauWidth on EquippableItemData, freshly required by
the new validation, that make a bare code swap without the catalog rewrite unusable.
AetherDb invariants (census, factions, dangling, station-fit, hardpoint-fit, loadout 1) are
byte-identical before and after -- captured with the pre-Cut-1 binary against the unmigrated copy and the
post-Cut-1 binary against the migrated copy, since neither binary can open the other's catalog shape. None of
these commands reads a stat value, so identical output is the expected proof that nothing but the stat/heat
shape moved.
- EquippableItemData records before: 51, after: 51 (must match -- the migration adds no records)
- Stats migrated into declared terms: 348 of 348 dumped
- Items fitted from an authored curve: 37; items with no curve (full-range plateau): 14
- Stat values at quality .5 / full durability / the item's own optimum: 281 of 348 unchanged, 67 diverge -- every divergence moves toward Max (the plateau's full-performance value), which is a move away from Min for an inverted stat (Max < Min) and reads as a negative delta below; max |delta| 72.8125
Stats whose at-optimum value changed (the intended R-heat balance change)
| Item key | Path | Min-Max | Old value | New value | Delta |
|---|---|---|---|---|---|
| 42d1ffaa-f764-4a65-ba03-43cc4e6fd2bc | Behaviors[0].Torque | 750000-1750000 | 999927.2000 | 1000000.0000 | +72.8125 |
| 04255796-db68-48d2-81e5-8cfdab150706 | Behaviors[0].Thrust | 250000-1000000 | 437472.7000 | 437500.0000 | +27.3125 |
| 480d6cc4-cd8a-49b6-9c89-211033e7c1d5 | Behaviors[0].PingVisibility | 5000-1000 | 4001.1640 | 4000.0000 | -1.1643 |
| 0d499d62-3b92-454b-9498-37d12616167f | Behaviors[0].Visibility | 5000-1000 | 4000.5820 | 4000.0000 | -0.5823 |
| 20e9f41a-6bd2-4f6c-9740-7b707614509c | Behaviors[1].PumpedHeat | 1000-5000 | 1999.4180 | 2000.0000 | +0.5823 |
| 499f7891-c5df-4cbe-8431-9db7108102ec | Behaviors[0].Visibility | 5000-1000 | 4000.5820 | 4000.0000 | -0.5823 |
| 03a842b2-295e-4cf7-9faa-ecc4bc54eb76 | Behaviors[0].Range | 1000-3000 | 1499.4180 | 1500.0000 | +0.5822 |
| 2935b4d4-2ad5-4b90-8416-a85bbb38171b | Behaviors[1].PumpedHeat | 750-4000 | 1562.0270 | 1562.5000 | +0.4731 |
| 542169f2-363c-41f7-8d6d-60a5bd7578bd | Behaviors[1].PumpedHeat | 1000-4000 | 1749.5630 | 1750.0000 | +0.4368 |
| 2933c4ce-bf41-459c-b0d6-9583466b393d | Behaviors[0].Range | 750-2250 | 1124.5630 | 1125.0000 | +0.4366 |
| 8ac84e31-f0cf-43b2-8611-3316adfa4010 | Behaviors[0].Visibility | 1000-250 | 812.9364 | 812.5000 | -0.4364 |
| 679fb6a1-cefb-4adc-a49c-71942602196b | Behaviors[0].Range | 1000-2000 | 1353.1420 | 1353.5530 | +0.4116 |
| 679fb6a1-cefb-4adc-a49c-71942602196b | Behaviors[0].Visibility | 1000-500 | 703.0444 | 702.6982 | -0.3462 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].MinRange | 500-50 | 366.5256 | 366.2142 | -0.3114 |
| 480d6cc4-cd8a-49b6-9c89-211033e7c1d5 | Behaviors[0].PingRange | 1000-5000 | 1999.7090 | 2000.0000 | +0.2913 |
| 2e5193aa-3703-4ecc-911d-4d8394ce4c2f | Behaviors[0].Visibility | 1250-250 | 896.6525 | 896.4467 | -0.2058 |
| 0271bb97-4ce8-4d64-97c3-8bfd3f76b2c6 | Behaviors[0].Visibility | 500-100 | 358.7433 | 358.5786 | -0.1647 |
| 457ac901-aa54-4ba7-9df6-fbacdfb40b3f | Behaviors[0].Visibility | 500-100 | 358.7433 | 358.5786 | -0.1647 |
| 457ac901-aa54-4ba7-9df6-fbacdfb40b3f | Behaviors[0].Velocity | 400-900 | 524.8544 | 525.0000 | +0.1456 |
| 03a842b2-295e-4cf7-9faa-ecc4bc54eb76 | Behaviors[0].Damage | 100-600 | 224.8545 | 225.0000 | +0.1455 |
| 0d499d62-3b92-454b-9498-37d12616167f | Behaviors[0].ChargeHeat | 2500-2000 | 2250.1460 | 2250.0000 | -0.1455 |
| 499f7891-c5df-4cbe-8431-9db7108102ec | Behaviors[0].ChargeHeat | 2500-2000 | 2250.1460 | 2250.0000 | -0.1455 |
| 4a41dec8-6b65-46ee-b578-ba805f112c0c | Behaviors[0].Range | 800-1750 | 1037.3620 | 1037.5000 | +0.1383 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].Visibility | 1000-250 | 777.1535 | 777.0237 | -0.1298 |
| 542169f2-363c-41f7-8d6d-60a5bd7578bd | Behaviors[1].WasteHeat | 500-100 | 358.6610 | 358.5786 | -0.0824 |
| 499f7891-c5df-4cbe-8431-9db7108102ec | Behaviors[0].Range | 800-1900 | 1074.9200 | 1075.0000 | +0.0801 |
| 3aa1ac05-6d55-4569-8a4b-e1c3c6e07c61 | Behaviors[0].Visibility | 1750-600 | 1508.3130 | 1508.2420 | -0.0704 |
| 04255796-db68-48d2-81e5-8cfdab150706 | Behaviors[0].Visibility | 100-400 | 206.0042 | 206.0660 | +0.0618 |
| 4a41dec8-6b65-46ee-b578-ba805f112c0c | Behaviors[0].Visibility | 550-150 | 450.0582 | 450.0000 | -0.0582 |
| 3aa1ac05-6d55-4569-8a4b-e1c3c6e07c61 | Behaviors[0].Range | 500-1250 | 687.4454 | 687.5000 | +0.0546 |
| 457ac901-aa54-4ba7-9df6-fbacdfb40b3f | Behaviors[0].Range | 500-1250 | 687.4454 | 687.5000 | +0.0546 |
| 679fb6a1-cefb-4adc-a49c-71942602196b | Behaviors[0].Velocity | 500-1250 | 687.4454 | 687.5000 | +0.0546 |
| 8ac84e31-f0cf-43b2-8611-3316adfa4010 | Behaviors[0].Velocity | 750-1500 | 937.4454 | 937.5000 | +0.0546 |
| 2933c4ce-bf41-459c-b0d6-9583466b393d | Behaviors[0].Heat | 500-0 | 323.2748 | 323.2233 | -0.0515 |
| 3aa1ac05-6d55-4569-8a4b-e1c3c6e07c61 | Behaviors[0].Heat | 500-1000 | 676.7252 | 676.7767 | +0.0515 |
| 0271bb97-4ce8-4d64-97c3-8bfd3f76b2c6 | Behaviors[0].Velocity | 700-1250 | 863.4684 | 863.5160 | +0.0476 |
| 20e9f41a-6bd2-4f6c-9740-7b707614509c | Behaviors[1].WasteHeat | 100-300 | 170.6695 | 170.7107 | +0.0412 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].Range | 1650-3500 | 2199.9680 | 2200.0080 | +0.0400 |
| 0d499d62-3b92-454b-9498-37d12616167f | Behaviors[0].Velocity | 250-750 | 374.9636 | 375.0000 | +0.0364 |
| 499f7891-c5df-4cbe-8431-9db7108102ec | Behaviors[0].Velocity | 250-750 | 374.9636 | 375.0000 | +0.0364 |
| 0d499d62-3b92-454b-9498-37d12616167f | Behaviors[0].Range | 450-950 | 574.9636 | 575.0000 | +0.0364 |
| 8ac84e31-f0cf-43b2-8611-3316adfa4010 | Behaviors[0].Range | 500-1000 | 624.9636 | 625.0000 | +0.0364 |
| 0271bb97-4ce8-4d64-97c3-8bfd3f76b2c6 | Behaviors[0].Range | 250-600 | 337.4745 | 337.5000 | +0.0255 |
| 2933c4ce-bf41-459c-b0d6-9583466b393d | Behaviors[0].Visibility | 300-0 | 225.0219 | 225.0000 | -0.0219 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].Velocity | 100-175 | 137.4782 | 137.5000 | +0.0218 |
| 8ac84e31-f0cf-43b2-8611-3316adfa4010 | Behaviors[0].Damage | 100-250 | 137.4782 | 137.5000 | +0.0218 |
| 72859489-677a-47a4-ae04-550e582ba29e | Behaviors[0].PingBoost | 10000-20000 | 12500.0200 | 12500.0000 | -0.0205 |
| 205efba0-16af-477b-80e9-c9597cead5b4 | Behaviors[0].Charge | 50-200 | 103.0176 | 103.0330 | +0.0154 |
| 372d23cc-5ef0-42b5-9d96-807f2e412b0d | Behaviors[0].Charge | 25-125 | 60.3450 | 60.3553 | +0.0103 |
| 4a41dec8-6b65-46ee-b578-ba805f112c0c | Behaviors[0].Damage | 20-85 | 36.2405 | 36.2500 | +0.0095 |
| 0d499d62-3b92-454b-9498-37d12616167f | Behaviors[0].Damage | 50-175 | 81.2409 | 81.2500 | +0.0091 |
| 2933c4ce-bf41-459c-b0d6-9583466b393d | Behaviors[0].Damage | 40-160 | 69.9913 | 70.0000 | +0.0087 |
| 34b15c33-c01f-4712-ac75-5fcf779f0685 | Behaviors[0].Capacity | 50-150 | 74.9927 | 75.0000 | +0.0073 |
| 480d6cc4-cd8a-49b6-9c89-211033e7c1d5 | Behaviors[0].PingEnergy | 150-100 | 137.5073 | 137.5000 | -0.0073 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].Thrust | 135-325 | 182.4931 | 182.5000 | +0.0069 |
| 499f7891-c5df-4cbe-8431-9db7108102ec | Behaviors[0].Damage | 25-110 | 46.2438 | 46.2500 | +0.0062 |
| 2935b4d4-2ad5-4b90-8416-a85bbb38171b | Behaviors[1].WasteHeat | 75-50 | 66.1663 | 66.1612 | -0.0051 |
| 457ac901-aa54-4ba7-9df6-fbacdfb40b3f | Behaviors[0].Damage | 20-80 | 34.9956 | 35.0000 | +0.0044 |
| 3aa1ac05-6d55-4569-8a4b-e1c3c6e07c61 | Behaviors[0].Energy | 25-50 | 33.8363 | 33.8388 | +0.0026 |
| 72859489-677a-47a4-ae04-550e582ba29e | Behaviors[0].PingRange | 1000-2000 | 1250.0020 | 1250.0000 | -0.0021 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].LockAngle | 15-35 | 19.9985 | 20.0000 | +0.0015 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].Cooldown | 15-8 | 12.5266 | 12.5251 | -0.0014 |
| 480d6cc4-cd8a-49b6-9c89-211033e7c1d5 | Behaviors[0].PingCooldown | 20-5 | 16.2511 | 16.2500 | -0.0011 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].Energy | 5-1 | 3.5866 | 3.5858 | -0.0008 |
| 542169f2-363c-41f7-8d6d-60a5bd7578bd | Behaviors[1].Emissivity | 4-8 | 5.1885 | 5.1892 | +0.0007 |
| 5ee2ff03-0ac4-4cdd-89bc-81e29223900b | Behaviors[0].Damage | 14-48 | 22.4994 | 22.5000 | +0.0006 |
| 542169f2-363c-41f7-8d6d-60a5bd7578bd | Behaviors[1].EnergyUsage | 6-3 | 5.1086 | 5.1081 | -0.0005 |
Corrections to this table (Soul S3/S4; Hands, 2026-09-18)
- S3, wrong old-value columns. Soul found the
Old optimum/Old value @ optimumcolumns below wrong for 15 of 51 rows. The pre-Cut-1Performance()wassaturate(HeatPerformanceCurve?.Evaluate(...) ?? 1): a design with no authored curve evaluated to exactly 1 at every temperature, so its correct old optimum is simply itsMinimumTemperature(the whole range was equally "optimal") and its correct old value is1.0000-- not whatever this table originally printed. That is 14 rows: Assembly Line, Autocannon, Deep Ore Extractor, Industrial Thermostatic Heater, LRMM72, Large Drive, Refinery, SRMM72, Shipyard, Surface Ore Extractor, Tractor Beam, plight, pswarm, and Earp (Earp's real reclassification is below). The 15th wrong row is Core Power: its curve was non-null but authored with zero keys, so its old getter threwIndexOutOfRangeException-- there is no old baseline for it, and the table says so instead of printing a number. - S4, at-optimum understates the change ~80x. At-optimum is the one point a trapezoid and the curve it
replaces are made to agree (both are fitted to the same peak), so it is the smallest possible reading of the
shape change, not a representative one. The real size is the largest deviation anywhere inside the item's own
band -- added below as Max |Δ| in band, sampled at 2001 points across
[MinimumTemperature, MaximumTemperature], old code (pre-Cut-1 catalog and curve-readingPerformance()) against new (current code, current catalog). 35 of the 37 originally-fitted designs share the exact same+0.1923-- one Bezier template reused catalog-wide, evaluated identically regardless of hardpoint or behaviour -- and The Bat moves by a different amount for a reason of its own (below). Earp does not belong in the "fitted, small delta" group at all.
Earp and The Bat: found while closing S5/S6, not part of the operator's 15
Enforcing the plateau-clamp rule this cut's validation now carries (StatValidation.ValidateHeatResponse,
ItemData.cs; enforced on every catalog write through CultRecordRefs.Upsert, AetheriaStores.cs) breaks the
catalog for exactly two already-fitted designs outside the operator's named 15: their authored plateau, built
from the real curve's peak and near-peak width, pokes past a bound.
- Earp's real 2-key curve peaks at parameter 0 -- exactly at its own
MinimumTemperature(175). That is the same failure class as S1/S2:Performance()returns 0 atMinimumTemperature, not just below it, so a peak sitting exactly on the boundary is dead at every temperature the design will ever reach. Soul's original "Earp down" framing (+0.0023 -> ~0at-optimum) undersold this badly: the at-optimum sample landed exactly on the one point where the old fit and the new trapezoid both happen to read close to 1, by construction of the old curve peaking there too. Earp is re-authored the same way as the 14 (house-style fraction over its own bounds -- see the table below); its Max |Δ| in band is now-1.0000, the same "went from immune to fatal" shape as the unauthored designs, which is what it always was underneath the misleading at-optimum reading. - The Bat is different: its optimum (209) is a genuinely distinct fitted value, not a placeholder or an
edge artifact, and stays untouched. Only its
PlateauWidthmoves, from 33 (whose low edge, 192.5, poked 7.5 pastMinimumTemperature200) to 18, the largest width whose plateau still clamps to the bounds with the optimum held fixed. This moves The Bat's own Max |Δ| in band from Soul's originally-measured+0.876to+0.968-- both computed the same way against the pre-Cut-1 curve; the difference is entirely the narrower plateau, which now reaches full performance immediately aboveMinimumTemperatureinstead of only within the old, poking width.
| Item | Type | Bounds | Old optimum | New optimum | New plateau width | Old value @ old optimum | Max |Δ| in band @ temp (old→new) |
|---|---|---|---|---|---|---|---|
| 6k Shooter | WeaponItemData | 173.15-473.15 | 249.5 | 249.65 | 36 | 0.9977 | +0.1923 @ 356.15 (0.3770->0.5693) |
| Arctica | GearData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| Assembly Line | GearData | 273.15-373.15 | 273.15 | 298.65 | 12 | 1.0000 | -1.0000 @ 273.15 (1.0000->0.0000) |
| Autocannon | WeaponItemData | 173.15-473.15 | 173.15 | 249.65 | 36 | 1.0000 | -1.0000 @ 173.15 (1.0000->0.0000) |
| CShot RainbowLite Lazer | WeaponItemData | 250-400 | 288.175 | 288.25 | 18 | 0.9977 | +0.1923 @ 341.5 (0.3770->0.5693) |
| ChargeBlast SG | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| ChargeBlast+- | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| ClearPath | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| Cockpit 2x2 | GearData | 223.15-398.15 | 267.688 | 267.775 | 21 | 0.9977 | +0.1923 @ 329.9 (0.3770->0.5693) |
| ColdFire | WeaponItemData | 263.15-398.15 | 297.508 | 297.575 | 16.2 | 0.9977 | +0.1923 @ 345.5 (0.3770->0.5693) |
| Core Power | GearData | 200-450 | N/A | 263.75 | 30 | N/A (threw IndexOutOfRangeException) | N/A |
| DeathCluster | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| Deep Ore Extractor | GearData | 273.15-373.15 | 273.15 | 298.65 | 12 | 1.0000 | -1.0000 @ 273.15 (1.0000->0.0000) |
| Earp | WeaponItemData | 175-475 | 175 | 251.5 | 36 | 1.0000 | -1.0000 @ 175 (1.0000->0.0000) |
| FastBlast+- | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| GT 3K | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| Iapyx | GearData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| Industrial Thermostatic Heater | GearData | 150-400 | 150 | 213.75 | 30 | 1.0000 | -1.0000 @ 150 (1.0000->0.0000) |
| LRMM72 | WeaponItemData | 223.15-473.15 | 223.15 | 286.9 | 30 | 1.0000 | -1.0000 @ 223.15 (1.0000->0.0000) |
| Large Drive | GearData | 200-400 | 200 | 251 | 24 | 1.0000 | -1.0000 @ 200 (1.0000->0.0000) |
| LonginusX | HullData | 173.15-573.15 | 274.95 | 275.15 | 48 | 0.9977 | +0.1923 @ 417.15 (0.3770->0.5693) |
| Manhattan | GearData | 200-450 | 263.625 | 263.75 | 30 | 0.9977 | +0.1923 @ 352.5 (0.3770->0.5693) |
| Medium Docking Bay | DockingBayData | -0-673.15 | 171.317 | 171.653 | 80.778 | 0.9977 | +0.1923 @ 410.622 (0.3770->0.5693) |
| MoveOnPro | GearData | 200-500 | 276.35 | 276.5 | 36 | 0.9977 | +0.1923 @ 383 (0.3770->0.5693) |
| Notorious | GearData | 250-450 | 300.9 | 301 | 24 | 0.9977 | +0.1923 @ 372 (0.3770->0.5693) |
| OK Disperser | GearData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| PotaT+- | GearData | 200-500 | 276.35 | 276.5 | 36 | 0.9977 | +0.1923 @ 383 (0.3770->0.5693) |
| Refinery | GearData | 273.15-373.15 | 273.15 | 298.65 | 12 | 1.0000 | -1.0000 @ 273.15 (1.0000->0.0000) |
| SRMM72 | WeaponItemData | 223.15-473.15 | 223.15 | 286.9 | 30 | 1.0000 | -1.0000 @ 223.15 (1.0000->0.0000) |
| SafeStuff II | CargoBayData | 175-600 | 283.163 | 283.375 | 51 | 0.9977 | +0.1923 @ 434.25 (0.3770->0.5693) |
| Shipyard | GearData | 273.15-373.15 | 273.15 | 298.65 | 12 | 1.0000 | -1.0000 @ 273.15 (1.0000->0.0000) |
| Skiron | GearData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| Spectra | WeaponItemData | 263.15-398.15 | 297.508 | 297.575 | 16.2 | 0.9977 | +0.1923 @ 345.5 (0.3770->0.5693) |
| Store-All Enterprise Edition | CargoBayData | 175-600 | 283.163 | 283.375 | 51 | 0.9977 | +0.1923 @ 434.25 (0.3770->0.5693) |
| Store-All Plus | CargoBayData | 175-600 | 283.163 | 283.375 | 51 | 0.9977 | +0.1923 @ 434.25 (0.3770->0.5693) |
| Store-All Plus Mini | CargoBayData | 175-600 | 283.163 | 283.375 | 51 | 0.9977 | +0.1923 @ 434.25 (0.3770->0.5693) |
| Surface Ore Extractor | GearData | 273.15-373.15 | 273.15 | 298.65 | 12 | 1.0000 | -1.0000 @ 273.15 (1.0000->0.0000) |
| The Bat | GearData | 200-400 | 208.8 | 209 | 18 | 1.0000 | +0.9680 @ 200.1 (0.0320->1.0000) |
| Traction | GearData | 200-450 | 263.625 | 263.75 | 30 | 0.9977 | +0.1923 @ 352.5 (0.3770->0.5693) |
| Tractor Beam | GearData | -0--0 -> 200-400 | -0 | 251 | 24 | 1.0000 | -1.0000 @ -0 (1.0000->0.0000) |
| Turret | HullData | 123.15-773.15 | 288.575 | 288.9 | 78 | 0.9977 | +0.1923 @ 519.65 (0.3770->0.5693) |
| Turret Control Module | GearData | 173.15-523.15 | 262.225 | 262.4 | 42 | 0.9977 | +0.1923 @ 386.65 (0.3770->0.5693) |
| Vulcan | GearData | 200-500 | 276.35 | 276.5 | 36 | 0.9977 | +0.1923 @ 383 (0.3770->0.5693) |
| Zenith | HullData | 123.15-773.15 | 288.575 | 288.9 | 78 | 0.9977 | +0.1923 @ 519.65 (0.3770->0.5693) |
| cold like my heart | GearData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| deep space burnout | GearData | 200-400 | 250.9 | 251 | 24 | 0.9977 | +0.1923 @ 322 (0.3770->0.5693) |
| not if i see you first | GearData | 200-400 | 250.9 | 251 | 24 | 0.9977 | +0.1923 @ 322 (0.3770->0.5693) |
| plight | WeaponItemData | 263.15-398.15 | 263.15 | 297.575 | 16.2 | 1.0000 | -1.0000 @ 263.15 (1.0000->0.0000) |
| pretty pretty bang bang | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
| pswarm | WeaponItemData | 223.15-473.15 | 223.15 | 286.9 | 30 | 1.0000 | -1.0000 @ 223.15 (1.0000->0.0000) |
| scorched void policy | WeaponItemData | 223.15-473.15 | 286.775 | 286.9 | 30 | 0.9977 | +0.1923 @ 375.65 (0.3770->0.5693) |
Re-authoring: Tractor Beam, 13 curve-less designs, and Earp/The Bat (operator ruling: "reauthor those items")
Written through the catalog's own types, in a scratch console over Aetheria.Shared (not committed; the
committed GameData/Aetheria.cc diff is the artifact). Every already-fitted design in the catalog shares the
exact same normalized curve shape -- optimum at 25.5% of the range above MinimumTemperature, plateau 12% of
the range wide -- regardless of hardpoint or behaviour, matching five distinct bound ranges to 5+ significant
figures. That is not rounding coincidence; it is one Bezier template authored once and reused catalog-wide, and
the 14 unauthored designs are simply the ones nobody assigned it to. Each row below applies that same fraction
to the design's own (unchanged, except Tractor Beam's) bounds, or points at the specific sibling design that
carries the identical bounds and therefore the identical fitted curve. All 16 records were validated
(StatValidation.ValidateHeatResponse) before any write reached disk; a failing record would have written
nothing.
| Item | What it is | Old bounds | Proposed (landed) | Why |
|---|---|---|---|---|
| Assembly Line | Tool-hardpoint facility gear, no active Behavior (a station production module) | 273.15-373.15, degenerate full-range plateau | Opt 298.65, PW 12 (bounds unchanged) | House-style fraction (25.5%/12%) over its own band; shares its exact bounds and prior placeholder shape with 4 sibling facility items below |
| Deep Ore Extractor | Same Tool/no-Behavior facility family | 273.15-373.15, degenerate | Opt 298.65, PW 12 | Same as Assembly Line -- identical bounds, identical fraction |
| Refinery | Same Tool/no-Behavior facility family | 273.15-373.15, degenerate | Opt 298.65, PW 12 | Same as Assembly Line |
| Shipyard | Same Tool/no-Behavior facility family | 273.15-373.15, degenerate | Opt 298.65, PW 12 | Same as Assembly Line |
| Surface Ore Extractor | Same Tool/no-Behavior facility family | 273.15-373.15, degenerate | Opt 298.65, PW 12 | Same as Assembly Line |
| Autocannon | Ballistic weapon, AutoWeaponData |
173.15-473.15, degenerate | Opt 249.65, PW 36 | Matches 6k Shooter, the only other design sharing this exact 173.15-473.15 band |
| Core Power | Reactor gear, ReactorData+WearData |
200-450, degenerate (old curve authored with 0 keys, old getter threw) | Opt 263.75, PW 30 | Matches Manhattan, the only other design sharing this exact 200-450 band |
| Industrial Thermostatic Heater | Tool-hardpoint heater, ThermotoggleData+EnergyDrawData+HeatData (it generates heat) |
150-400, degenerate | Opt 213.75, PW 30 | House-style fraction skewed toward the cold end, matching a device meant to run best where it is needed (cold) and degrade once its own output overheats it |
| LRMM72 | Launcher weapon, LauncherData |
223.15-473.15, degenerate | Opt 286.9, PW 30 | Matches GT 3K (LauncherData) and scorched void policy (GuidedWeaponData), both sharing this exact band with identical fitted curves |
| SRMM72 | Launcher weapon, GuidedWeaponData |
223.15-473.15, degenerate | Opt 286.9, PW 30 | Matches scorched void policy, same hardpoint/behaviour/band |
| pswarm | Launcher weapon, GuidedWeaponData |
223.15-473.15, degenerate | Opt 286.9, PW 30 | Matches scorched void policy, same hardpoint/behaviour/band |
| Large Drive | Thruster gear, ThrusterData+WearData |
200-400, degenerate | Opt 251, PW 24 | Matches deep space burnout, the only other design sharing this exact 200-400 Thruster band |
| plight | Energy weapon, ChargedWeaponData |
263.15-398.15, degenerate | Opt 297.575, PW 16.2 | Matches ColdFire and Spectra, both sharing this exact band with identical fitted curves (AutoWeaponData, but bounds -- not behaviour -- is what the shared template keys on) |
| Tractor Beam | Sensors-hardpoint gear, no active Behavior | -0 to -0, min==max==optimum, width 0 (S1: dead at every temperature) | Bounds 200-400 (newly authored), Opt 251, PW 24 | Never had real bounds authored at all; 200-400 matches the other small Sensors/gear family already using that exact range (not if i see you first, The Bat, Large Drive, deep space burnout), and the fraction gives it not-if-i-see-you-first's exact curve |
| Earp | Ballistic weapon, InstantWeaponData |
175-475, real 2-key curve peaking exactly at Minimum (dead at every temperature -- same bug class as S1, found while enforcing S5/S6's plateau-clamp rule) | Opt 251.5, PW 36 | House-style fraction over its own unique 175-475 band (no exact-bounds sibling exists); moves its peak off the lethal boundary the same way the 14 do |
| The Bat | Sensors-hardpoint gear, SensorData |
200-400, real fitted optimum 209, PlateauWidth 33 (pokes 7.5 past Minimum -- found while enforcing S5/S6) | PlateauWidth 18 only; optimum 209 unchanged | Minimal fix: shrink only the plateau to the largest width that clamps to the bounds with the authored optimum held fixed, preserving the one genuinely distinct fitted curve in this list |
Zero consumables in the catalog
Cut 0 flagged that ItemManager.CreateInstance has no ConsumableItemData branch, so a ConsumableItem is
apparently never minted by the normal path, and asked whether Cut 1 should look before touching consumables.
(probe) The catalog holds zero ConsumableItemData records (cache.GetAll<ConsumableItemData>().Count() == 0 against GameData/Aetheria.cc). There is nothing to touch: no consumable design exists to migrate, to
break, or to validate.