Fensalir/state/map.yaml
2026-05-26 18:51:47 +01:00

89 lines
5.2 KiB
YAML

project:
name: Fensalir
root: E:\Projects\Fensalir
upstream: https://github.com/GameCult/Fensalir.git
purpose: >
Native C# runtime and renderer dependency for Aquarium-style clients. The
engine owns Win32 hosting, D3D12 rendering, input, hot reload, debug UI,
audio output, client contracts, fractal/field machinery, and engine demos.
current_model:
solution: Fensalir.sln
host:
implementation: src/Aquarium.Engine
contracts: src/Aquarium.Engine.Contracts
renderer: src/Aquarium.Engine/Render
shaders: src/Aquarium.Engine/Render/Shaders
assets: src/Aquarium.Engine/Assets
scripts: scripts
fractal:
implementation: src/Aquarium.Engine.Fractal
tests: tests/Aquarium.Engine.Fractal.Tests
receipt_tool: tools/Aquarium.Fractal.Receipt
demos:
fensalir_splash: src/Aquarium.Fensalir
minimal: src/Aquarium.Sample.Minimal
zyphos: src/Aquarium.Zyphos
external_clients:
epiphany_aquarium: E:\Projects\Aquarium-Engine
mimir: owns the sensor-fusion app/adapter surface formerly prototyped here
dependencies:
cult_math: E:\Projects\CultMath
cult_lib: E:\Projects\CultLib
aqua_synth_faust: repo-local NuGet package feed under packages
invariants:
- Fensalir owns reusable host, renderer, audio, reload, contracts, and engine mechanisms.
- Fensalir is not a traditional rendering pipeline. It is a field/evidence
machine: contributors emit bounded Form, Appearance, and Transport claims
with identity, travel/depth, metadata, control, and reservoir-guide lanes.
Treating a pass as "just drawing pixels" violates the engine invariant
unless it is explicitly marked as a fallback/debug draw with no authority.
- Client repos own policy, role names, narrative semantics, app state, and client shaders.
- Epiphany Aquarium depends on Fensalir; Fensalir must not depend on Epiphany.
- Demo projects inside this repo are allowed to exercise engine features but must not become hidden engine policy.
- Public `Aquarium.*` assembly names remain for continuity until a deliberate namespace/package migration.
- Spline/tube visibility is owned by shader SDF evaluation. CPU geometry may
place conservative sampling envelopes and endpoint/neighbor packets, but
quad-local strip UVs must not decide visible line coverage.
- Reservoir splat rendering must not impose large minimum billboard radii on
transparent buffer-field/tube samples. Sample envelopes should stay tied to
authored field radius so clients can reduce reservoir sample count without
turning sparse probes into visible plates.
- Reservoir contents are not forced to be pixel-sized. Pixel-level resolve
samples bounded claims; it does not define their native support. Broad,
smooth surfaces may be represented by few large surface claims. Heightfield
terrain should be a quadtree of brush-painted surface tiles, subdivided by
projected footprint, curvature, brush/material detail, silhouettes, and
temporal uncertainty before SDF probes emit detail-adaptive surface splats.
- Rendering backends are lowerings, not truth owners. Heightfields, splines,
direct SDF proxies, meshes, volumes, fractal probes, and Mimir sensor
observations must publish bounded Form/Appearance/Transport field claims
before they can participate in reusable field evidence.
- Field packet payload handles are not authority. Resource-backed claims and
packets must reference declared AquariumFieldResourceDeclaration rows with
kind, GPU residency, shader access, format, shape, validity, version, and
native handle metadata. Missing, CPU-only, or backend-incompatible resources
defer lowering instead of becoming visible evidence.
- Rendering-relevant field buffers move to GPU residency as early as possible
and stay there. Fensalir must pass GPU resource handles/SRVs/UAVs between
compute and render lowerings; CPU readback or CPU tessellation is a
diagnostic-only escape hatch, not the live TubeField path.
next_actions:
- Keep origin pointed at https://github.com/GameCult/Fensalir.git.
- Keep `dotnet build Fensalir.sln` green after the split.
- Cut the rendering rebuild through explicit field-domain/field-claim
contracts before adding another backend-specific visual path.
- Extend the D3D12 field packet/resource resolver beyond its first
structured/curve-buffer cut. Current contracts, DSL, and renderer registry
can validate and plan resource-backed TubeField packets, import shared GPU
structured buffers by handle, and allocate Fensalir-owned GPU-resident
slots only when Fensalir is the producer. The TubeField DSL can now express
a 2D rolling float buffer as Catmull-Rom XY tubes with modulo column
addressing, amplitude power/normalization, radius, ramp texture path, and
emission scale. Visible rendering is blocked on shader-side expansion and
binding of those GPU-resident slots, not CPU conversion to spline vertices.
- Move any remaining client-only Epiphany state found here back to `E:\Projects\Aquarium-Engine`.
- Keep Mimir app/adapters out of this repo; Fensalir may expose generic sensor-fusion contracts only.
- Package contracts/host deliberately before replacing sibling source references in client repos.