Heimdall/AGENTS.md

144 lines
5.3 KiB
Markdown
Raw Normal View History

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
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
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
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
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
```
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
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
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 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.
## External Context
- For StreamPixels architecture/auth context, prefer the indexed `StreamPixels`
repo through `voidbot` before filesystem spelunking.
- For GameCult deployment and host conventions, check the sibling `gamecult-ops`
repo in the same projects root as this one before improvising infra claims.