2026-04-26 11:41:27 +01:00
|
|
|
# Heimdall Instructions
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
## Project Purpose
|
|
|
|
|
|
2026-04-26 11:41:27 +01:00
|
|
|
Heimdall exists to hold the shared auth authority design for GameCult-hosted
|
|
|
|
|
experiments without letting that shared layer metastasize into a giant
|
|
|
|
|
mixed-data pit.
|
2026-04-26 05:18:35 +01:00
|
|
|
|
2026-04-26 11:41:27 +01:00
|
|
|
The planned shared authority owns:
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
- provider OAuth and linking
|
2026-04-26 11:41:27 +01:00
|
|
|
- signed session / claim issuance
|
2026-04-26 05:18:35 +01:00
|
|
|
- entitlement refresh
|
|
|
|
|
- capability evaluation
|
|
|
|
|
- app-facing access claims
|
2026-04-26 11:41:27 +01:00
|
|
|
- audit and grant surfaces
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
The planned non-shared-by-default layer is:
|
|
|
|
|
|
|
|
|
|
- app-domain user data
|
|
|
|
|
- audience data
|
|
|
|
|
- creator data
|
|
|
|
|
- queue/job payloads
|
|
|
|
|
- product-specific state
|
2026-04-26 11:41:27 +01:00
|
|
|
- app-local resource ownership checks
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
## Canonical State
|
|
|
|
|
|
|
|
|
|
- Treat `state/map.yaml` as the canonical current project map.
|
|
|
|
|
- Treat `state/scratch.md` as disposable working memory for one bounded subgoal.
|
|
|
|
|
- Treat `state/evidence.jsonl` as the distilled durable ledger of decisions,
|
|
|
|
|
verified boundaries, and rejected paths.
|
|
|
|
|
- Treat `state/branches.json` as hypothesis tracking, not phase/status prose.
|
|
|
|
|
- Treat `notes/fresh-workspace-handoff.md` as the compact re-entry packet.
|
|
|
|
|
- Treat `docs/architecture.md` as the source-grounded shared architecture note.
|
|
|
|
|
- Treat `docs/implementation-plan.md` as the forward plan.
|
|
|
|
|
- Treat `docs/app-profiles/repixelizer.md` and
|
|
|
|
|
`docs/app-profiles/streampixels.md` as thin app bindings, not the whole
|
2026-06-02 16:25:38 +01:00
|
|
|
shared architecture. Add new app-profile notes when a new app binding needs
|
|
|
|
|
durable context.
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
## Important Paths
|
|
|
|
|
|
2026-09-06 01:13:19 +02:00
|
|
|
Paths are relative to the repository root. Do not hard-code an absolute drive
|
|
|
|
|
path into this file; the repo has already been moved between drives once, and
|
|
|
|
|
every absolute path in here rotted the moment it happened.
|
|
|
|
|
|
|
|
|
|
- Shared architecture: `docs/architecture.md`
|
|
|
|
|
- Implementation plan: `docs/implementation-plan.md`
|
|
|
|
|
- Repixelizer profile: `docs/app-profiles/repixelizer.md`
|
|
|
|
|
- StreamPixels profile: `docs/app-profiles/streampixels.md`
|
|
|
|
|
- Spotiverse profile: `docs/app-profiles/spotiverse.md`
|
|
|
|
|
- Handoff summary: `notes/fresh-workspace-handoff.md`
|
|
|
|
|
- State CLI: `tools/heimdall_state.py`
|
|
|
|
|
- Pre-compaction helper: `tools/heimdall_prepare_compaction.py`
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
## Useful Commands
|
|
|
|
|
|
2026-09-06 01:13:19 +02:00
|
|
|
Both state tools are single-file, standard-library-only Python. They need no
|
|
|
|
|
virtualenv and no installed dependencies. Run them with `python` from the repo
|
|
|
|
|
root:
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
```powershell
|
2026-09-06 01:13:19 +02:00
|
|
|
python .\tools\heimdall_state.py status
|
|
|
|
|
python .\tools\heimdall_state.py add-evidence --type design --status accepted --note "..."
|
|
|
|
|
python .\tools\heimdall_prepare_compaction.py
|
2026-04-26 05:18:35 +01:00
|
|
|
```
|
|
|
|
|
|
2026-09-06 01:13:19 +02:00
|
|
|
Verified 2026-09-06 against Python 3.13.15 installed to the user scope; `py -3`
|
|
|
|
|
resolves the same interpreter.
|
|
|
|
|
|
|
|
|
|
If `python --version` prints an install prompt rather than a version, PATH is
|
|
|
|
|
resolving the Microsoft Store alias in `WindowsApps` instead of a real
|
|
|
|
|
interpreter, and it will still exit 0 while doing so. Install a real Python and
|
|
|
|
|
put it ahead of `WindowsApps` on PATH rather than hunting for some other
|
|
|
|
|
interpreter to hard-code here:
|
2026-04-26 05:18:35 +01:00
|
|
|
|
|
|
|
|
```powershell
|
2026-09-06 01:13:19 +02:00
|
|
|
winget install --id Python.Python.3.13 --scope user
|
2026-04-26 05:18:35 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Session Bootstrap And Re-entry Protocol
|
|
|
|
|
|
|
|
|
|
On fresh session load:
|
|
|
|
|
|
|
|
|
|
1. read:
|
|
|
|
|
- `state/map.yaml`
|
|
|
|
|
- `notes/fresh-workspace-handoff.md`
|
|
|
|
|
- `docs/architecture.md`
|
|
|
|
|
- `docs/implementation-plan.md`
|
|
|
|
|
2. run:
|
2026-04-26 11:41:27 +01:00
|
|
|
- `python .\tools\heimdall_state.py status`
|
2026-04-26 05:18:35 +01:00
|
|
|
- `git status --short --branch`
|
|
|
|
|
- `git log --oneline -5`
|
|
|
|
|
3. restate the current next action from persisted state before editing
|
|
|
|
|
|
|
|
|
|
After compaction or suspicious continuity loss:
|
|
|
|
|
|
2026-04-26 11:41:27 +01:00
|
|
|
1. rerun `heimdall_state.py status`
|
2026-04-26 05:18:35 +01:00
|
|
|
2. reread `state/map.yaml` and `notes/fresh-workspace-handoff.md`
|
|
|
|
|
3. treat the persisted next action as authoritative unless fresh evidence
|
|
|
|
|
contradicts it
|
|
|
|
|
|
|
|
|
|
When the user says to prepare for imminent compaction:
|
|
|
|
|
|
2026-04-26 11:41:27 +01:00
|
|
|
1. run `tools/heimdall_prepare_compaction.py`
|
2026-04-26 05:18:35 +01:00
|
|
|
2. update only the state that actually changed
|
|
|
|
|
3. rerun the helper
|
|
|
|
|
4. commit the completed persistence pass unless the work is deliberately
|
|
|
|
|
mid-surgery
|
|
|
|
|
|
2026-04-26 15:42:12 +01:00
|
|
|
After any major completed pass, assume compaction may be imminent even if the
|
|
|
|
|
user did not say so yet:
|
|
|
|
|
|
|
|
|
|
1. run `tools/heimdall_prepare_compaction.py`
|
|
|
|
|
2. sync only the persistent state that genuinely changed
|
|
|
|
|
3. rerun the helper
|
|
|
|
|
4. commit the persistence pass before moving on unless the work is
|
|
|
|
|
deliberately mid-surgery
|
2026-04-26 15:43:03 +01:00
|
|
|
5. push the current branch to `origin` after the major pass unless the user
|
|
|
|
|
explicitly says not to publish yet
|
2026-04-26 15:42:12 +01:00
|
|
|
|
2026-04-26 05:18:35 +01:00
|
|
|
## Operating Discipline
|
|
|
|
|
|
|
|
|
|
- Before substantial edits, restate the current mechanism and intended change.
|
2026-04-26 11:41:27 +01:00
|
|
|
- Keep identity authority central and app-domain data local unless there is a
|
|
|
|
|
very deliberate, source-grounded reason to share something.
|
|
|
|
|
- Prefer the Yggdrasil-hosted Heimdall service over duplicated per-app provider
|
|
|
|
|
stacks.
|
|
|
|
|
- Do not require a Heimdall round-trip for every guarded app route; host apps
|
|
|
|
|
should verify signed claims locally and keep resource ownership checks local.
|
|
|
|
|
- Do not let app profiles turn into duplicate copies of the shared
|
|
|
|
|
architecture.
|
2026-04-26 05:18:35 +01:00
|
|
|
- If the diff grows while the boundary gets blurrier, stop and simplify.
|
|
|
|
|
- Before handoff or compaction, sync `state/map.yaml`, refresh
|
|
|
|
|
`notes/fresh-workspace-handoff.md`, add distilled evidence when future belief
|
|
|
|
|
changed, and make the next action explicit.
|
|
|
|
|
|
2026-09-08 12:23:44 +02:00
|
|
|
## Build And Deploy Target
|
|
|
|
|
|
|
|
|
|
Heimdall runs as the auth authority behind Yggdrasil-hosted nginx at
|
|
|
|
|
`heimdall.gamecult.org`, on Linux. Idunn owns the deployment transaction. This
|
|
|
|
|
workstation is Windows and is where the shell is, not where the artifact runs:
|
|
|
|
|
a local compile is not evidence about the Linux release, because toolchain,
|
|
|
|
|
linker, filesystem semantics and path handling all differ. Build for the
|
|
|
|
|
target, or let the deploy path's own builder do it, and say which one you used.
|
|
|
|
|
|
2026-04-26 05:18:35 +01:00
|
|
|
## External Context
|
|
|
|
|
|
|
|
|
|
- For StreamPixels architecture/auth context, prefer the indexed `StreamPixels`
|
|
|
|
|
repo through `voidbot` before filesystem spelunking.
|
2026-09-06 01:13:19 +02:00
|
|
|
- For GameCult deployment and host conventions, check the sibling `gamecult-ops`
|
|
|
|
|
repo in the same projects root as this one before improvising infra claims.
|