Directory.Build.props names CultLibRoot (CULTLIB_ROOT, else the sibling checkout) and pins CultLibRevision to cultlib-unity-v2.0.0 (42dce361). Directory.Build.targets fails the build unless that checkout is at the pin and clean, as Aetheria's guard does. Project references use CultLibRoot.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude Code reads CLAUDE.md, not AGENTS.md, so this repo's doctrine was
invisible to it. This one-line import makes the existing AGENTS.md load
without duplicating or renaming it. Codex is unaffected.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Verified against origin/main (7ccd228) in an isolated worktree; no
collision with codex/cultmath-monorepo or codex/yggdrasil-aggregate-daemon
(both diff empty against origin/main for the touched paths).
- src/Gjallar/assets/fonts/Unifont-APL8x16.psf.gz: superseded Unifont
pipeline residue (Shinonome replaced it in b4734dd). Re-verified:
`git grep -i "unifont" origin/main -- .` returns zero matches anywhere
in the tree (exit 1). The csproj's `Content Include="assets\fonts\**\*"`
is a copy-to-output glob, not a runtime loader; the actual runtime
loader (`FontAtlas.PackagedFamily`, Program.cs:3295-3300) hardcodes
exactly the three Shinonome filenames and never globs the fonts
directory or matches on a "Unifont" substring/pattern. No config,
state, or deploy file lists fonts by name/pattern either
(`git grep -n -i "psf\.gz|assets/fonts|fonts/\*" origin/main -- .`).
Safe to delete.
- FrameDocument.CopyFrom (Program.cs:1670): `rg -n "CopyFrom\("
src/Gjallar` found only the definition. Deleted.
- RectI.CenterX, RectI.CenterY, RectI.Intersects (Program.cs:2376-2381):
`rg -n "CenterX|CenterY|Intersects\(" src/Gjallar` found only the
definitions (RectI.Contains, not in scope, is used elsewhere and is
kept). Deleted.
- GjallarVersePulse.ReceiveAttemptStatus and LastSuccessfulReceiveAt
(VerseState.cs:294,298): confirmed write-only. `grep -n "\.ReceiveAttemptStatus\b"`
and `grep -n "\.LastSuccessfulReceiveAt\b"` across Program.cs and
VerseState.cs match only the field declarations and their assignment
at the old Program.cs:1324,1328 (inside BuildPulse's `new
GjallarVersePulse { ... }` initializer). `BuildFrameStatus`
(VerseState.cs:198) never reads `pulse.ReceiveAttemptStatus` or
`pulse.LastSuccessfulReceiveAt`. Removed both fields and their two
write sites. Left the unrelated `lastReceiveAttemptStatus` local
field/variable alone (Program.cs:127 etc.) — it feeds the JSON
status export and telemetry log line and is read in several places;
it only shares a similar name with the deleted typed pulse property.
Left tools/generate_psf_from_shinonome.py untouched (separate,
lower-confidence census item, out of this assignment's scope).
Verification: `dotnet build src/Gjallar/Gjallar.csproj
-p:CultLibRoot=F:/Projects/CultLib` succeeds with 0 errors/warnings
(Eve sibling-path project reference resolved via a local junction for
this out-of-tree worktree; not part of the commit).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>