Keep daemon viewport hooks client-neutral

This commit is contained in:
Meta Vens 2026-07-06 02:28:04 +01:00
commit bf5e06a284
4 changed files with 31 additions and 6 deletions

View file

@ -1500,6 +1500,31 @@ static void RequireNoDeadRuntimeProjectionClasses(string root)
"Active architecture docs must not point future work at deleted runtime-specific shared authorities: " +
string.Join("; ", docHits));
}
var daemonRuntimeSpecificHookPhrases = new[]
{
"daemon RTS viewport",
"Daemon RTS viewport",
"temporary RUDP RTS viewport",
"RUDP RTS viewport",
"daemon RTS command",
"Daemon RTS command"
};
var hookPhraseHits = Directory.EnumerateFiles(activeDocsRoot, "*.md", SearchOption.AllDirectories)
.SelectMany(path =>
{
var text = File.ReadAllText(path);
return daemonRuntimeSpecificHookPhrases
.Where(phrase => text.Contains(phrase, StringComparison.Ordinal))
.Select(phrase => $"{Path.GetRelativePath(root, path)} contains {phrase}");
})
.ToArray();
if (hookPhraseHits.Length > 0)
{
throw new InvalidOperationException(
"Active architecture docs must describe daemon RUDP hooks as client-neutral compatibility, not RTS-specific daemon authority: " +
string.Join("; ", hookPhraseHits));
}
}
}

View file

@ -229,12 +229,12 @@ Done:
- `scripts/generate-rts-bindings.mjs` derives schema ids, command kind ids, and
slot maps from the C# MessagePack document declarations into
`aetheria-rts-generated-bindings.ts` for daemon command, daemon frame, daemon
health, RTS viewport payloads, nested daemon snapshot payloads, Verse
health, game viewport payloads, nested daemon snapshot payloads, Verse
authority policy, authority rule, and authority lease;
- `AetheriaRuntimeGameViewportDocuments` owns typed viewport projection over local
daemon frame state, including controlled-unit visibility union, status,
inventory, and gravity influence intersections;
- daemon RUDP snapshot handling delegates RTS viewport construction to
- daemon RUDP snapshot handling delegates game viewport construction to
`AetheriaRuntimeGameViewportDocuments` instead of carrying map projection logic
inline;
- `Aetheria.State.AuthoritySmoke` verifies the projection behavior against a
@ -275,7 +275,7 @@ Remaining:
3. Replace the remaining semantic command construction arrays with a CultMesh
TS typed document writer once that primitive is available locally.
4. Narrow Electron preload/main IPC behind a typed runtime facade.
5. Keep the daemon RTS viewport handler only as temporary compatibility plumbing
5. Keep the daemon local viewport handler only as temporary compatibility plumbing
until no client or diagnostic path depends on it.
6. Keep the verifier checking for old public generic surfaces and transport
wrapper layout leaks:

View file

@ -334,7 +334,7 @@ Build:
- Project the map viewport in TS from the frame document.
- Use controlled-unit visibility union for fog of war.
- Include objects, status, inventory, gravity influences, and body views.
- Keep remote RTS viewport document handling as daemon compatibility only.
- Keep remote game viewport document handling as daemon compatibility only.
Outputs:

View file

@ -736,7 +736,7 @@ Current artifacts:
using the same typed projection facade.
- `Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeGameViewportDocuments.cs`
owns typed map viewport projection over local daemon frame state.
- `Aetheria.State.Daemon/Program.cs` delegates the temporary RUDP RTS viewport
- `Aetheria.State.Daemon/Program.cs` delegates the temporary RUDP game viewport
snapshot hook to the shared projection API.
- `Aetheria.Rts.Web/scripts/verify-stage7b-rts-client.ps1` fails if public
generic APIs return or if the Electron transport wrapper regains document
@ -753,7 +753,7 @@ Remaining Stage 7B work:
canonical peer health surface.
3. Replace the remaining semantic command construction arrays with a CultMesh TS
typed document writer once that primitive is available locally.
4. Delete or narrow the daemon RTS viewport RUDP hook once no compatibility
4. Delete or narrow the daemon local viewport RUDP hook once no compatibility
client or diagnostic path depends on it.
Stop line: