Target and map: the first release is the demo

Rewrites the release target for the demo cut (one gate, one region, one boss, a fixed cast of Pirates, Zhestokost, Lucent and AU, called a demo). Adds the map's Demo scope section with body facts D1-D6 and the scope table, and sweeps four stale docs the design review listed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-06 19:11:46 +02:00
commit 6a1bb47758
6 changed files with 348 additions and 184 deletions

View file

@ -5,7 +5,8 @@ Date: 2026-06-12
**Parked (2026-09-11).** This migration was built and then rolled back by
commit `7006a6b0`. `F:\Projects\AetheriaEve` preserves that rebuild as a
specimen; it is not direction or precedent. Current
direction for this repo is [three-gates-scope.md](three-gates-scope.md). Read
direction for this repo is [aetheria-release-target.md](aetheria-release-target.md) (the
demo), with [three-gates-scope.md](three-gates-scope.md) as the full game's run. Read
this document as a record of the deferred plan, not as current direction.
The cache move alone is now [cultcache-migration-target.md](cultcache-migration-target.md).

View file

@ -9,7 +9,8 @@ and no ledger: those are typed documents in the Eureka mind. Ends live in
`F:\Projects\aetheria-release-inventory.md`, which is outside the repo.
Every anchor below is against `origin/master` `f1dee184` and was read in a sparse
scratch worktree on 2026-10-03, unless the line says otherwise.
scratch worktree on 2026-10-03, unless the line or its section says otherwise. The section "Demo scope" holds
the 2026-10-06 re-scope: the release this campaign plans is the demo.
## Body facts
@ -215,6 +216,167 @@ Two claims were not verified from primary sources on 2026-10-03: which Wwise
release first supports Unity 6000.x, and the scripting surface of
`AudioRandomContainer`.
## Demo scope
Re-scope of 2026-10-06 (rulings `first-release-is-a-demo`, `demo-cut-fixed-region`,
`demo-cast`, `miss-terris-belongs-to-emily-r3`, `ship-authors-need-no-unity`). The
release this campaign plans is the demo: one gate, one region, one boss, a fixed cast.
The design review that prompted it is `F:\Projects\aetheria-game-design-review-2026-10-05.md`,
outside the repo. Anchors in this section are against `origin/master` `df7c44f2` (the
mining merge), read with `git show` and `git grep` from the Aetheria object store on
2026-10-06.
### Body facts
- **D1. A fixed-cast generator already exists: the prelude.** `Galaxy.cs:150-262` builds a
galaxy from named factions: protagonist, antagonist, buffer, quest and neutrals,
resolved by name prefix (`ResolveFaction`, `:141-144`). It places homes so the
antagonist is far from the protagonist and the buffer between them, and sets the
entrance near the protagonist's home. Its settings are
`Assets/Resources/Settings.asset` `TutorialGenerationSettings` (an LFS object, read with
`git lfs smudge`): protagonist `Miss`, antagonist `Zhe`, buffer `Luc`, neutrals `Aero`
and `Finch`, quest `Adras`, 64 zones. `TutorialGalaxy` stages it. The main galaxy
(`Galaxy.cs:96-131`) draws `MegaCount` 12 factions at random from the catalog, places
`BossCount` 3 boss zones, and has 128 zones. A prelude galaxy guarantees a station at
its entrance (`ZoneGenerator.cs:223-224`) and lets generation use any product
(`LoadoutGenerator.cs:184`).
- **D2. Boss zones and the exit exist only in the main galaxy.** `PlaceFactionsMain`
(`Galaxy.cs:265-309`) fills `BossZones` on chokepoints; the main constructor sets
`Exit` to the most isolated zone (`:123`). The prelude sets neither. Both persist
(`SavedGame` keys 3 and 5).
- **D3. Nothing spawns a boss.** `Faction.BossHull` is key 10
(`Corporations.cs:43-44`) and is unset on all 12 catalog factions. Outside the field
and `Galaxy.BossZones`, `BossHull` is read only by `tools/AetherDb`. `ZoneGenerator`
generates stations, turrets, faction ships and wanderers (`:280-365`) and no boss.
- **D4. Wormholes are built in Unity, and the exit does nothing.** `ZoneRenderer.cs:225-236`
adds one `Wormhole { Position, Target }` per adjacent zone. Interact
(`ActionGameManager.cs:321-327`) enters any wormhole in range; `EnterWormhole`
(`:660`) populates the target zone. Nothing checks `Galaxy.Exit`.
- **D5. Station services are buy-only and credits are not saved.** `TradeMenu` has
`Buy(CraftedItemInstance)` (`:366`) and `Buy(SimpleCommodity, int)` (`:405`) and no
sell. "Repair" appears in no gameplay or UI script (only AetherDb comments).
Credits are `public int Credits = 15000000` on `ActionGameManager` (`:114`);
`SavedGame` (keys 0-12) does not carry them, so Continue resets them. The hull branch
of `Buy` checks `GetPrice` (`:369-370`) and charges `data.Price` (`:378`). Durability
is per instance (`ItemInstance.cs:53`) against the design's (`ItemData.cs:371`), and
falls under fire (`Entity.cs:645-664`).
- **D6. The catalog has no Pirates and the demo cast sells no ship hull.** Decoded from
`git show df7c44f2:GameData/Aetheria.cc | git lfs smudge` with Python `msgpack`, using
the store's own schema table for slot names. Factions (12): Zhestokost, Finch
Cybernetics, Lightsail Express, NiteLife Energy, Death Monkey Explosives, Aeronautics
Unlimited, Lucent Media, Alakrita, Ewan Hart Inc, Rossum & Douglas, Adrasteia, Miss
Terri's. Hulls (5): Longinus and LonginusX (Alakrita, ship), Djinni (Rossum &
Douglas, ship), Zenith (AU, station), Turret (Zhestokost, turret). 64 products; by
maker AU 11, Lightsail 9, NiteLife 9, Lucent 7, Death Monkey 6, Zhestokost 6,
Rossum & Douglas 6, Alakrita 5, Finch 2, Miss Terri's 1, Adrasteia 1, Ewan Hart 1.
### Why the demo is a prelude galaxy
D1 is already the demo's shape: named factions in fixed roles, a small galaxy, an
entrance station. The demo needs a different cast from the tutorial (the Pirates as the
ally, not Miss Terri's), a boss zone and an exit. So the demo is a compiled scenario
whose script carries its cast and calls the prelude constructor, then places the gate at
the antagonist's home (`cut-demo-galaxy`). The tutorial's settings and Miss Terri's
prelude role are untouched. A demo mode flag on the galaxy was rejected: the scenario
script is the owner the scenario rulings already name.
The gate is in the boss zone itself: an exit wormhole there opens when the zone's boss
is dead (`cut-boss-gate`). Locking every wormhole out of a boss zone, as Three Gates
item 2 describes, is the full game's three-section rule; the demo needs one gate and
lets the player retreat.
### Scope sort
Every cut spec and follow-up in force under root `aetheria-release` on 2026-10-06, after
this pass's admissions. "Landed" means the spec has a report; it stays in force as a
record.
| Kind | Id (local) | Scope | Reason |
|---|---|---|---|
| spec | `demo-galaxy` | demo | The demo scenario, its cast and the gate's placement. |
| spec | `boss-gate` | demo | The one boss and the sealed gate; the win. |
| spec | `station-services` | demo | Sell, repair and saved credits: the run pays. |
| spec | `feedback-1` | demo | Every hit seen where it lands (target line 5). |
| spec | `audio-1` | demo | Every action makes a sound (line 4). |
| spec | `faction-play-1` | demo | Doctrine and the flight for the cast; needs r2 (follow-up `faction-play-reanchor-demo`). |
| spec | `faction-play-2` | demo | Lucent's duel is the featured neutral's spectacle; needs r2. |
| spec | `faction-play-3` | demo | Support and anchors; the played proof moves here for the cast; needs r2. |
| spec | `faction-play-4` | full game | The tender loop on real rounds is depth past the demo's proof. |
| spec | `loot-1` | demo | Floating items in the simulation; loot is what the player sells. |
| spec | `loot-2` | demo | Pickup as a capability. |
| spec | `loot-3` | demo | The grab presented in Unity; merges the loot branch. |
| spec | `ballistic-ammo` | demo | Ruled for everyone and unblocked; ammunition is a cargo good in the Pirates' game. Needs a balance pass. |
| spec | `ships-player` | demo | A built player loads package hulls: every demo hull needs it. |
| spec | `ships-addon-frame` | demo | The Blender step from a Tripo mesh to a hull, no Unity. Stale against `ship-data-all-in-cc` if `demo-ship-cc-timing` rules before-hulls. |
| spec | `ships-addon-mounts` | demo | Mount helpers for demo hulls. Same caveat. |
| spec | `ships-hull-material` | demo | One hull shader painted from a mask: the demo's material under `demo-material-scope`'s recommended option. |
| spec | `ships-addon-paint` | demo | The mask authored in Blender for that shader. |
| spec | `ships-hull-livery` | demo | Faction liveries for the cast; its Faction key collides (follow-up `livery-key-collision`). |
| spec | `scenarios-smoke` | demo | Test designs and smoke scenarios: the verification path. |
| spec | `mining-merge-unity` | demo | The Unity half of the merge that landed. |
| spec | `material-graph` | full game | Graph record and judge; not demo-bearing under `demo-material-scope` (recommended). |
| spec | `material-library-export` | full game | Same. |
| spec | `material-lowering` | full game | Same. |
| spec | `hull-bakes` | full game | Same. |
| spec | `ships-studio-schematic` | full game | Authoring comfort in Studio; the demo's few hulls do not need it. |
| spec | `ships-addon-gizmos` | full game | Same. |
| spec | `mining-index-tree` | full game | Sublinear index: wanted, not critical (ruling). |
| spec | `mining-belt-cells` | full game | Same. |
| spec | `ships-merge`, `ships-mounts`, `ships-addon-package`, `ships-bind-path`, `cut-ship-render-fixes` | demo, landed | The package path the demo hulls use. |
| spec | `scenarios-adopt`, `scenarios-menu` | demo, landed | Scenarios: the demo is one. |
| spec | `mining-index`, `mining-target-queries`, `mining-index-pins`, `mining-merge` | demo, landed | Targeting through the index; the belt freeze is gone. |
| follow-up | `pirates-catalog-record` | demo | The ally needs a Faction record and products. |
| follow-up | `zhestokost-boss-hull` | demo | The boss hull and `BossHull`. |
| follow-up | `demo-cast-hulls` | demo | A hull per cast faction. |
| follow-up | `faction-play-reanchor-demo` | demo | Re-anchor faction play, add the Pirates, play the cast. |
| follow-up | `livery-key-collision` | demo | Two specs claim Faction key 16. |
| follow-up | `demo-ux-ledger` | demo | The bar's UX polish pass has no owner. |
| follow-up | `demo-difficulty-onramp` | demo | "Game is hard"; the region needs a ramp. |
| follow-up | `vault-docs-sweep` | demo | Stale vault notes mislead the faction-play revision. |
| follow-up | `controls-facing-and-aim` | demo | Under `demo-controls-rebuild`'s recommended option. |
| follow-up | `release-target-is-a-demo` | demo | This pass; Self closes it with target r3. |
| follow-up | `release-map-not-on-master` | demo | Land this map and the target doc on master. |
| follow-up | `wwise-catalog-fields` | demo | The audio sequel removes the Wwise ids; the boss music field is among them. |
| follow-up | `scenarios-batch4-minors` | demo | Inventory drag and station-reactor quality: UX ledger items. |
| follow-up | `hull-damage-wear` | demo | Damage visible on the hull (line 6). |
| follow-up | `mod-ship-single-existence-gate` | demo | A skipped package throws on spawn; demo hulls are packages. |
| follow-up | `ambiguous-hardpoint-origin` | demo | Save correctness for package hulls. |
| follow-up | `remove-sbsar-files` | demo | Clean break from Substance before a public build. |
| follow-up | `delaunay-exact-predicates` | demo | Galaxy links; a silently unlinked zone could strand a demo run. |
| follow-up | `failed-start-scene-halts` | demo | The New Game failure path the demo's missing-cast refusal uses. |
| follow-up | `stale-docs-after-scenarios-menu` | demo | Docs that describe the old New Game path. |
| follow-up | `scratch-carry-drafts` | demo | The ship `.cc` draft bears on `demo-ship-cc-timing`. |
| follow-up | `faction-lore-notes-r3` | full game | Vault setting notes; no demo cut reads them. |
| follow-up | `mining-impacts-through-contract` | full game | Mining Cut 4 is parked. |
| follow-up | `mining-cuts-4-5-7` | full game | Yield and content; no buyer for ore in the demo. |
| follow-up | `mining-target-pin-gaps` | full game | Low test pin gaps in landed code. |
| follow-up | `belt-render-reads-index` | full game | Belt rendering through the index. |
| follow-up | `c4-ship-element-ids` | full game | Variants campaign. |
| follow-up | `variants-python-raw-push` | full game | Variants campaign. |
| follow-up | `mod-hull-changed-under-run` | full game | Mod edits under a run; demo hulls are first-party. |
| follow-up | `ship-lods` | full game | Only if a profile shows cost. |
| follow-up | `hull-decals` | full game | Insignia and damage decals. |
| follow-up | `hull-player-paint` | full game | Player liveries. |
| follow-up | `blender-pin-operator` | full game | Pins Blender for the material judge. |
| follow-up | `material-mod-graph-kernels` | full game | Mod material kernels. |
| follow-up | `material-map-rescope` | full game | Re-scope of the material map, after `demo-material-scope`. |
| follow-up | `bodies-entity-and-mines` | full game | Bodies for entities and mines. |
| follow-up | `cultmath-mixed-seed` | full game | CultLib hygiene. |
| follow-up | `launcher-ammunition` | full game | Missiles and drones campaign. |
| follow-up | `drones-munitions-substrate` | full game | Same. |
| follow-up | `articulated-mounts` | full game | Links with arc and traverse. |
| follow-up | `colosseum-npc-lab` | full game | Its own campaign. |
| follow-up | `heat-flow-schematic-particles` | full game | Presentation depth past line 6. |
| follow-up | `scenarios-verification-ledger` | full game | Deferred by ruling. |
| follow-up | `authored-missions` | full game | Authored scenes and missions. |
| follow-up | `volumetrics-backport-map` | full game | Visual quality with no demo line. |
| follow-up | `ghostlight-readme-drift` | full game | Ghostlight, narrative. |
| follow-up | `faction-play-reanchor`, `faction-lore-notes` | obsolete | Superseded on 2026-10-06 by `faction-play-reanchor-demo` and `faction-lore-notes-r3`. |
Counts: demo 52 (31 specs, 11 of them landed, and 21 follow-ups); full game 34 (9 specs,
25 follow-ups); obsolete 2 follow-ups. No in-force spec lost its purpose in both scopes,
so none was withdrawn.
## Faction play: the NPC scripting
The operator ruled on 2026-10-03 that the faction dynamics may elaborate the NPC

View file

@ -1,212 +1,196 @@
# Aetheria Release Target
# Aetheria Release Target: the Demo
Date: 2026-10-03
Date: 2026-10-03, re-scoped 2026-10-06
Status: target. This document owns the ends. The typed `target` in the Eureka mind
(campaign `aetheria-release`) owns the labelled invariants and the not-in-scope list;
this file gives their reasons. Cut specs, questions and rulings are typed documents in
the mind and are not restated here. Body facts, the model page and the rationale for
the cut order are in `docs/aetheria-release-map.md`.
the mind and are not restated here. Body facts, the model page, the scope sort and the
rationale for the cut order are in `docs/aetheria-release-map.md`.
## Why
The game has enough systems to ship: fire control, stats and power, heat, item
provenance, locomotion, and the mining and scenario lanes in flight. What keeps it
unreleasable is presentation and breadth. It plays no sound at all. A hit on a hull
shows nothing where it lands, and the camera never reacts. Three hulls on two models
and one station are all a player can fly or dock at.
The game has deep systems: fire control, stats and power, heat, item provenance,
locomotion, scenarios and the targeting index. What keeps it unreleasable is that a
player has nothing to do between minute five and minute thirty, and nothing they do
is seen or heard. It plays no sound. A hit on a hull shows nothing where it lands.
Loot cannot be sold, damage cannot be repaired, no boss guards anything, and reaching
the exit does nothing. Every NPC fights the same way.
## Operator direction (2026-10-02 and 2026-10-03)
The first release is a demo, and it is called one. The full game, Terminus with three
procedurally generated regions, needs enough faction variety to give each region its
own challenges and stories. Until that content exists the game is not presented as
complete.
- "we already have plenty of game here, especially once we merge everything in flight
(and maybe another campaign or two geared at making the world feel more alive). The
only thing making it unreleasable to me is the lack of polish, content and feedback.
We need audio, we need ships, stations and gear for the player to covet and collect,
and we need our mechanics to be visible and visceral."
- "If we get the moddable ships pipeline usable and a Tripo3D subscription I can pump
one of these out every day, game ready." The pipeline is GPT Image 2.5, then
Tripo3D, then minor cleanup.
- "I don't think Asura is the way to go for content."
- The announcement bar (2026-10-02): a wider selection of ships and gear, a UX polish
pass, and audio feedback throughout.
## Operator direction
## What "release" means
- 2026-10-06 (ruling `first-release-is-a-demo`): "Full Terminus requires enough
faction variety to present unique challenges and stories across three regions, I
can't call it anything more than a demo if we don't have enough content to
populate the three gates. I'm fine with reducing scope so we can get to a release
on time, but I will not pretend it is the whole game."
- 2026-10-06 (ruling `demo-cut-fixed-region`): the demo is one gate, one region and
one boss with a fixed faction presence. Full Terminus keeps procedural regions,
each with its own political and economic setup.
- 2026-10-06 (ruling `demo-cast`): one allied faction, the protagonist's ostensible
employer under Aetheria's usual polite coercion; one opposing faction, which
decides the boss; the rest neutral. Allied: the Pirates. Antagonist and boss:
Zhestokost. Featured neutrals: Lucent Media for spectacle, Aeronautics Unlimited
as the vanilla that balances the other flavours.
- 2026-10-06 (ruling `miss-terris-belongs-to-emily-r3`): Miss Terri's is Emily's
faction. Its role in the prelude stands. Agents write no lore, explanations,
faction play, doctrine, barks or ship concepts for it, and build on none of the
AI-written material already made for it.
- 2026-10-06 (ruling `ship-authors-need-no-unity`): a person adding a ship works in
Blender and the CultLib tools and never installs Unity or syncs the repo.
- 2026-10-02 and 2026-10-03 (ruling `operator-release-direction`): the release needs
audio, ships, stations and gear to covet and collect, and mechanics that are
visible and visceral. The announcement bar names a wider selection of ships and
gear, a UX polish pass, and audio feedback throughout.
The release is the public announcement to players and Patreon, with a build they
can download. It is done when every line below holds on one build made from
`master`, and the operator has played that build and called it. The operator's call
is part of the definition: a ticked list without it is not a release.
## What "the demo" means
1. **The lanes in flight have landed.** `codex/mining`, `codex/scenarios` and
`codex/moddable-ships` are merged into `master` or explicitly parked by the
operator. A release does not ship around half-merged work.
2. **Every player action that changes the world makes a sound.** That covers weapon
fire and charging, impacts on shield and hull, ship destruction, docking and
undocking, the wormhole, thrusters and the drive, inventory and trade actions, menu
clicks, the overheat alarm, and music in the menu, overworld and combat. The
player can set master, music, effects and interface volume, and the settings
The demo is a public build, announced to players and Patreon, with a scenario named
"Terminus (Demo)". It is done when every line below holds on one Windows build made
from `master`, and the operator has played that build and called it. A ticked list
without the operator's call is not a release.
1. **One run, start to finish.** New Game starts the demo in a hull made by the
Pirates, at a station near the entrance of one region with a fixed cast: the
Pirates allied, Zhestokost hostile, Lucent and AU neutral. The Zhestokost home
zone holds the region's one gate, guarded by its boss. The gate stays sealed
while the boss lives. Passing it after the boss dies ends the run as won. Death
ends the run as lost.
2. **The run pays.** At a docked station the player can buy, sell what they looted
and repair what they lost. Credits persist across save and Continue.
3. **The four factions fight differently.** Each cast faction has a doctrine a
playtester can describe without being told, from the Faction Play design in
AetheriaLore.
4. **Every player action that changes the world makes a sound.** Weapon fire and
charging, impacts on shield and hull, ship destruction, docking and undocking,
the wormhole and the gate, thrusters and the drive, inventory and trade actions,
menu clicks, the overheat alarm, and music in the menu, overworld, combat and the
boss fight. Master, music, effects and interface volume are player settings that
persist.
3. **Every hit is seen where it lands and felt by the one who takes it.** An impact
on a shield shows on the shield at the side it came from. An impact on a hull
shows at the struck point. A hit on the player's own ship moves the camera in
proportion to the damage. The player can turn shake down to zero, and the hit is
still shown.
4. **Damage, heat and exposure are visible before they are fatal.** Lost armour,
a destroyed item and a critical hull each look different on the ship and in the
HUD. Overheat and hull-critical warnings use two channels, sound plus a visual,
and the more urgent one wins. The player can see how visible they are, how close
that is to being detected, and the largest source of it.
5. **There is enough to covet.** The content quota is set by the operator's ruling
on question `release-content-bar`. Every hull and station in the quota is
flyable or dockable and enters through the moddable-ships package path. Rarity
5. **Every hit is seen where it lands and felt by the one who takes it.** An impact
on a shield shows on the shield at the side it came from; an impact on a hull
shows at the struck point; a hit on the player moves the camera in proportion to
the damage. Shake can go to zero and the hit is still shown.
6. **Damage, heat and exposure are visible before they are fatal.** Lost armour, a
destroyed item and a critical hull look different on the ship and in the HUD.
Overheat and hull-critical warnings use sound plus a visual, and the more urgent
one wins. The player can see how visible they are and the largest source of it.
7. **There is enough to covet in the demo.** Each cast faction flies a hull of its
own and Zhestokost's boss flies its boss hull, each entering through the
first-party package path. The exact count is question `demo-content-bar`. Rarity
tiers show their colours, and every weapon type sounds and looks distinct.
6. **A new player can play for thirty minutes on the Windows build without hitting
a blocking defect.** The build is published through the build-delivery path.
8. **A new player can play the demo through on the Windows build without hitting a
blocking defect**, published through the build-delivery path.
## Ends
- **The simulation states what happened, and presentation shows it.** Fire control,
shields, damage, heat and detection publish typed facts. Visual and audio
presenters subscribe to them, derive a cue from each, and render it. They decide
no rule and recompute no geometry.
- **One cue, two channels.** Each fact becomes a cue in one engine-free function.
The visual and the audio presenter render that same cue, so the two channels
cannot disagree about what happened or how hard.
- **New content is data.** A new hull, station or piece of gear arrives as a catalog
record or a mod package. Nobody hand-wires a prefab array. The operator's daily
ship goes through the image model, Tripo, cleanup and the Blender add-on, and
comes out as a `ShipAuthoring` package with its GLB.
- **The player controls intensity without losing the signal.** Shake, flashes,
particle density and each audio channel have settings. Turning any of them down
never removes the tactical information it carried.
shields, damage, heat, detection, the boss and the gate publish typed facts.
Visual and audio presenters derive a cue from each and render it. They decide no
rule and recompute no geometry.
- **One cue, two channels.** Each fact becomes a cue in one engine-free function;
the visual and the audio presenter render that same cue.
- **The run is a scenario.** The demo is a compiled scenario script beside the
tutorial and main galaxies. Its cast, starting standing and gate are written in
that script; placement stays with the galaxy generator.
- **New content is data, authored without Unity.** A new hull, station or piece of
gear arrives as a catalog record or a first-party package that carries its own
product. Nobody hand-wires a prefab array, and no author needs Unity or the repo.
- **The player controls intensity without losing the signal.** Turning shake,
flashes, particles or any audio channel down never removes the tactical
information it carried.
## Invariants that must survive
The typed target carries these as labelled statements. The reasons:
- **Legacy first** (operator, 2026-09-11). All work lands in the restored Unity tree.
There is no daemon, CultMesh or Eve re-architecture here. Shared infrastructure
is adopted, not invented.
- **The simulation owns the facts.** Fire control was rebuilt (Cuts 3 to 12.4(b)) so
that no Unity collider or effect decides a hit. Feedback must not reopen that
path. It reads `FireControl`'s facts and never re-derives them.
- **The simulation names no sound.** Today the simulation calls `FireAudioEvent`
with Wwise ids, against a sound bank that is never assigned. Audio becomes a
presenter of the same semantic events that visual effects use (`OnFire`,
`OnStartCharging`, impacts and deaths).
- **State is CultCache.** Player preferences such as shake and volumes go in the
player store (`PlayerSettings`), and authored data goes in the catalog. Engine
asset references are Addressables GUIDs (ruling of 2026-09-17). Presentation
tuning stays on its Unity component (fork M (a) of `docs/settings-globals-cut.md`).
- **Instruments bound what is shown** (`Visual and Sensory Direction`). A cue
never shows the player more than their sensors know.
No daemon, CultMesh or Eve re-architecture here.
- **The simulation owns the facts.** Fire control was rebuilt so that no Unity
collider or effect decides a hit. Feedback reads `FireControl`'s facts and never
re-derives them. The same holds for the run: whether the boss lives and whether
the gate is open are decided in `ServerShared`.
- **The simulation names no sound.** Audio is a presenter of the same semantic
events visual effects use.
- **State is CultCache.** Player preferences go in the player store, authored data in
the catalog, run state (credits included) in the run store. Presentation tuning
stays on its Unity component (fork M (a) of `docs/settings-globals-cut.md`).
- **Instruments bound what is shown.** A cue never shows the player more than their
sensors know.
- **The demo is named a demo.** Release copy, store text, the scenario name and
these docs call it a demo.
- **Miss Terri's is not AI-written.** No agent writes material for it.
- **Ship authors need no Unity.**
- **The lanes are respected.** This campaign never commits to a `codex/*` branch or
to the operator's checkout. It branches from `origin/master` and rebases after
each lane merges.
the operator's checkout.
- **Rules are tested headless.** Every rule decided in `ServerShared` has a
behavioural test in `tests/Aetheria.Shared.Tests`. A presentation-only behaviour
is an operator check, reachable through ordinary play or a scenario.
behavioural test in `tests/Aetheria.Shared.Tests`.
- **The operator judges whether the bar is met.**
## Not in scope
## Not in scope for the demo
- Asura and procedural planet content. The operator ruled it out for content.
- New mechanics. Contact tiers beyond the current threshold, fused tracks, thermal
capture, probes and new weapon classes are not added here. This campaign makes
the existing mechanics visible.
- Faction mechanics beyond what `Faction Play.md` and its rulings name.
- "World feels alive" work such as ambient traffic and events. The operator named
it as a possible separate campaign.
- Build publishing machinery. `docs/build-delivery-target.md` owns it. This
campaign needs it done before release, but does not build it.
- Platforms other than Windows 64-bit, multiplayer, narrative and Ink work.
- Finishing other lanes' cuts: mining, scenarios, moddable-ships S2 and S5, thermal
balance, and the settings-globals tier-colour fix. This campaign depends on them
and does not do them.
- Full Terminus: three regions, procedural regional politics and economy, faction
selection per run, and the full content bar. These come after the demo.
- Factions outside the cast as flags. They stay brands on shelves and generated
traffic where the generator already puts them.
- Mining yield and content (mining Cuts 4, 5 and 7), the sublinear targeting index
(ruling `targeting-sublinear-wanted-not-critical`), and belt rendering through the
index.
- The faction-play tender loop (`faction-play-4`), drones and munitions, the
Colosseum, articulated mounts.
- Narrative: storylets, Ghostlight, Ink beats per boss.
- Volumetrics and the nebula backport.
- Asura and procedural planet content.
- New mechanics beyond what the demo's rulings name.
- Build publishing machinery (`docs/build-delivery-target.md` owns it).
- Platforms other than Windows 64-bit, and multiplayer.
Open questions decide where four more items fall: the material pipeline
(`demo-material-scope`), the all-in-`.cc` ship move (`demo-ship-cc-timing`), the
control rebuild (`demo-controls-rebuild`) and which modes a release build lists
(`demo-build-scenario-list`).
## Strands
- **Feedback.** Impacts, damage states, warnings and detection, made visible and
felt. The first cut is mapped (`feedback-1`). It gives impacts a world point and a
layer, then shows them on the shield or hull and in the camera.
- **Audio.** The route is open as question `audio-route`. The first cut is mapped
for the recommended route (`audio-1`) and is blocked until the ruling. Its sketched
sequel covers interface, inventory, trade, docking and wormhole sounds, then
music, then continuous loops (thrusters, reactor, drive) and the overheat alarm,
then AquaSynth renders for whatever the 2021 library lacks.
- **Content pipeline.** This strand is a sketch until `codex/moddable-ships` merges.
1. The Blender add-on gains a collection-to-package action. It places anchors
with `aetheria.id` extras for weapon, radiator and thruster mounts, the collider,
map icon, shield and tractor, then exports the GLB with the `ship.cc`. This is
proof gate 2 of `docs/moddable-ship-authoring.md`.
2. Moddable-ships S3. The first playable mod ship is a Tripo mesh of a concept
whose image already worked (the Headliner or the Quiet Sense), taken through
the whole path.
3. Repeatability. A convex collider from the render mesh, and one material-slot
convention that leaves room for a later livery slot.
4. Throughput. One hull a day from the operator, plus stations, then gear.
- **Faction Play.** The design is `Game Design/Faction Play.md` in AetheriaLore,
at `5c45e27` plus `f3e0e6d`. It covers behaviour, relations, loadouts, resources,
visuals and hooks. On 2026-10-03 the operator accepted every proposal in it, and
the acceptance is recorded as three rulings:
- `faction-relations-field`: relations are their own authored field, not derived
from allegiance;
- `faction-lore-changes`: the five lore changes;
- `lucent-duel-bait`: Lucent's need for glory lets the player bait it into a
duel.
A fourth ruling, `npc-scripting-may-grow`, lets the strand extend the NPC
scripting through its existing extension points. The note had limited itself to
four agent states and the unread `Personality` field, and that limit is lifted.
Legacy-first still forbids re-architecture. The map's section "Faction play: the
NPC scripting" names what grows: a typed doctrine on `Faction`, and one flight per
faction per zone that alone decides its members' targets and orders, executed by
the existing state graph through two new motor states.
The strand's first deliverable is the note's smallest proof: Zhestokost, Lucent
and AU in one run, which a playtester can describe without being told. It is four
cuts:
1. doctrine, the flight, and engagement with grace, hail and compliance
(`faction-play-1`);
2. pack slots and Lucent's duel, hull break-off and ping cadence
(`faction-play-2`, after `feedback-1`);
3. support ships, anchor and leash (`faction-play-3`);
4. Zhestokost ammunition and the rearm loop, ending in the playtest
(`faction-play-4`).
All four wait for the mining and scenarios lanes to merge. Relations, track
sharing between factions, distress calls and target priority come after the
proof. The feedback and content strands leave room for faction colour and
livery, and decide nothing about them.
- **The run.** Three cuts: `demo-galaxy` (the scenario, its cast, the gate's
placement), `boss-gate` (the boss and the sealed gate, the win), and
`station-services` (sell, repair, saved credits). The on-ramp is follow-up
`demo-difficulty-onramp`, after a played build.
- **Feedback.** `feedback-1`: impacts with a world point and a layer, shown on the
shield or hull and in the camera.
- **Audio.** `audio-1`, native Unity audio (ruling `audio-native-unity-plus-faust`).
Its sequel covers interface, trade, docking, the wormhole and gate, music
(including the boss), loops and the overheat alarm.
- **Faction play.** `faction-play-1` to `-3`, re-anchored on post-merge master and
revised for the demo cast with the Pirates' doctrine (follow-up
`faction-play-reanchor-demo`). The Pirates need a catalog record first (follow-up
`pirates-catalog-record`).
- **Loot.** `loot-1` to `-3`: floating items are simulation state and pickup is a
capability. With `station-services`, loot becomes money.
- **Content.** The package path that landed with moddable-ships, then the add-on's
frame and mounts cuts, then hulls for the cast and the boss (follow-ups
`demo-cast-hulls`, `zhestokost-boss-hull`), authored at the operator's pace.
- **UX polish.** A ledger of small fixes verified through scenarios (follow-up
`demo-ux-ledger`).
## Sequencing
Self proposed feedback, then audio, then content. Feedback goes first because it is
the cheapest per unit of perceived quality and it makes later content read. This
target keeps that order for agent-paced work, with one change: **content is the
calendar-critical path, so its unblocking runs in parallel rather than last.** The
quota is met one hull a day of operator time, and that clock cannot start until a
mesh flies. The steps that start it cost the agents little:
- the operator's owed S2 play checks on `codex/moddable-ships`;
- the merge;
- the add-on's package action.
Agent order: `feedback-1`. Then `audio-1`, once `audio-route` is ruled; it consumes
`feedback-1`'s impact cue. Then the content strand's add-on action as soon as
moddable-ships merges. After that, the remaining feedback and audio cuts alternate.
The run goes first, because it is the hole every other strand fills: without it the
demo has no thirty minutes. `demo-galaxy` and `station-services` are independent
and can run in parallel; `boss-gate` follows `demo-galaxy`. Feedback and audio follow
the order already mapped (`feedback-1`, then `audio-1`). Faction play waits for its
re-anchor. Content runs in parallel at the operator's pace, because the hull clock
starts only when the first demo hull flies.
## Lanes and collisions
| Lane | Owner | This campaign |
|---|---|---|
| `codex/fire-control-12` (operator checkout, modified `.blend`) | Codex / operator | Never touched. Reads use `git show` or a scratch worktree. |
| `codex/mining` | Codex | Waits for its merge. `feedback-1` edits `FireControl.Apply`, `ApplyDirectHit` and `Detonate`, which mining does not change (it edits `FireControl.cs:72-100` and `:522-535`). Mining Cut 4 (shots at chunks) should publish impacts through the same contract (follow-up). |
| `codex/scenarios` | Codex, blocked on a fix batch | Waits. Operator checks in this campaign are reachable through ordinary play. Where one is not, it waits for scenarios Cut 4. |
| `codex/moddable-ships` | Codex, S2 owing operator checks | Waits for the merge. Ownership of anchor authoring and S3 after the merge is question `content-lane-owner`. |
| `eureka/aetheria-release-*` | This campaign | One branch per cut, from `origin/master`, each in its own worktree. |
The hot files are shared with the lanes: `Entity.cs`, `FireControl.cs`,
`ActionGameManager.cs`, `EntityInstance.cs` and `ZoneRenderer.cs`. Each cut keeps
its hunks out of the regions the open lanes change, which are listed per spec. New
behaviour goes in new files wherever an existing owner allows it.
The hot files are `Entity.cs`, `FireControl.cs`, `ActionGameManager.cs`,
`ZoneGenerator.cs`, `ZoneRenderer.cs` and `TradeMenu.cs`. Each cut branches from
`origin/master` in its own worktree and keeps its hunks out of the regions other open
cuts change, which are listed per spec. New behaviour goes in new files wherever an
existing owner allows it.

View file

@ -683,7 +683,9 @@ moves the `BehaviorData` union list down by 10 lines.
writes only `LookDirection`) engage only within 60 degrees of their spawn facing. That is
fork W.
**Death, loot and pickup** (carried from the earlier draft).
**Death, loot and pickup** (carried from the earlier draft). Loot into the simulation did
not land with this cut; cut `loot-1` of campaign `aetheria-release` owns it now (ruling
`jettison-shared-floating-items`).
- `Zone` subscribes to the `Death` of each entity it adds. On death it:
- removes the entity and its agent;
- drops each non-hull item with probability `LootDropProbability`, and all cargo,

View file

@ -38,7 +38,7 @@ Compiled 2026-09-29 by Eyes from the maps on the branch. Pointers are `doc:line`
### 2c. Flight, power and economy
6. **Provenance in play.** Starting-ship items show tier colour; the properties panel shows Manufacturer, product name and flavour for branded gear. Dock and buy: the brand still shows in cargo. `give Lamp` (any design name): no Manufacturer row. Kill an NPC and pick up loot: brand shown (`item-provenance-cut.md:528-539`). Proves: item-provenance Cut C.
6. **Provenance in play.** Tier colour shows only after settings-globals Cut 1 (this expectation was falsified by the 2026-09-17 smoke, section 8); the properties panel shows Manufacturer, product name and flavour for branded gear. Dock and buy: the brand still shows in cargo. `give Lamp` (any design name): no Manufacturer row. Kill an NPC and pick up loot: brand shown (`item-provenance-cut.md:528-539`). Proves: item-provenance Cut C.
7. **Fly a restored hull (Longinus or Djinni).** Thrusters move and turn it (`locomotion-cut.md:501`). Watch the speed cap: `VelocityLimit` is gated by the hull's `Active`, and a hull taken offline with thrusters firing loses the cap (`:377`). It did not happen in 300 s on shipped settings; report if you see runaway speed. Unrecorded: how to spawn a restored hull in play (the map names no path).
8. **Weak reactor (O2).** Fly with a reactor too small for the loadout. Expect visible, legible starvation rather than a cooked reactor (`stats-and-power-cut.md:705-706`). Proves: power bus (map Cut 3).
9. **Brownout and refill (O6, O4).** Brownout reads as degradation, not breakage (`:774`, `:990`). A weapon refilling under brownout stutters instead of firing full rate and cooking the ship (`:729-730`). Proves: power-supply term, brownout, input capacitors.

View file

@ -2,6 +2,20 @@
Date: 2026-09-11
**Status (2026-10-06).** The first release is a demo: one gate, one region, one boss,
with a fixed faction cast (rulings `first-release-is-a-demo`, `demo-cut-fixed-region`
and `demo-cast` in campaign `aetheria-release`). `docs/aetheria-release-target.md` owns
the release now; this document records the full game's three-gate run, which comes
after the demo. Where the items below stand:
- Item 1: death deletes the run (`ActionGameManager.Die` calls `RunSave.Clear`). The win
screen is cut `boss-gate`; saved credits are cut `station-services`.
- Item 2: for the demo's one gate, cuts `demo-galaxy` and `boss-gate`. Three sections,
locked boss-zone wormholes and difficulty per section are full game.
- Item 3: cut `station-services` (sell and repair) and cuts `loot-1` to `-3`.
- Item 4: landed (`docs/fire-control-cut.md`).
- Items 5 and 6: not in the demo.
Aetheria ships as a short rogue-lite run on the existing Unity game: start at
the Entrance, fight through three boss chokepoints, reach the Exit. Everything
the player earns comes from what they destroy. More systems come after this
@ -46,7 +60,8 @@ AI share it, so AI accuracy is no longer superhuman by construction.
**Ruling (operator, 2026-09-17):** hit detection goes away entirely. A hit is a dice
roll over weapon stats, the stats of a new targeting-system subsystem, and sensor
state. Fire control is being mapped as Cut 2 of `docs/headless-playground-cut.md`.
state. Fire control was mapped from Cut 2 of `docs/headless-playground-cut.md` and has
landed (`docs/fire-control-cut.md`).
**Ruling (operator, 2026-09-17):** the player and the AI can aim for a specific
subsystem once they have gathered enough target data to reveal it. Operator's words: "We