Progressive Unlock System — Grimoire Public Design Spec
tags: [grimoire gamification]
Progressive Unlock System — Grimoire Public Design Spec
Section titled “Progressive Unlock System — Grimoire Public Design Spec”Date: 2026-04-17 (v40 Wave 7.5 strategic pivot)
Status: DESIGN — implementation targeted v41
Scope: Grimoire Public ONLY. Master ISO has pass-through mode that auto-grants all unlocks at boot. GoodLife ignores this subsystem entirely.
Parent doc: SALVAGED_HARDWARE_MESH_VISION.md
tags: [grimoire gamification]
1. Behavior per profile
Section titled “1. Behavior per profile”| Profile | Progression behavior |
|---|---|
| Master | synos-progression-daemon runs in --godmode flag. All unlocks granted at boot. XP ledger is a no-op. Tool installation is unrestricted. This is non-negotiable: Master is the devops environment that builds Grimoire’s content. |
| Grimoire Public | Full progression system active. Starter kit unlocked; everything else gated by XP/quest/faction milestones. Cannot be disabled by user (enforced by curtain v2 runtime ceiling). |
| GoodLife | No progression system. Research tools available as configured by profile. |
Curtain enforcement rule: if /etc/synos/profile reads grimoire, the progression daemon MUST be running and MUST NOT be in pass-through mode. synos-grimoire-ceiling-check service validates this at boot and panics (service-level) if bypass detected.
tags: [grimoire gamification]
2. State model
Section titled “2. State model”Per-player state
Section titled “Per-player state”~/.local/share/synos/progression/state.toml (per-user):
[player]xp = 0level = 1active_faction = "none" # none | crimson_spire | neon_collective | wardenfaction_reputation = {} # faction_name → 0..100
[unlocks]tools = ["nmap", "wireshark", "netcat", "curl", "tcpdump", "strace", "ltrace", "hexdump", "binwalk", "strings"] # 10 starter toolslabs_unlocked = ["intro-networking", "intro-packet-capture", "intro-log-triage", "intro-scripting", "intro-ssh"]labs_completed = []faction_missions_completed = []
[mesh]joined = falserole = "standalone" # standalone | edge | worker | master_candidatepeer_count = 0benchmarking_score = 0 # XP awarded for distributed compute participation
[telemetry_optin]anonymized_metrics = false # opt-in only, for community leaderboardSystem-wide unlock catalog
Section titled “System-wide unlock catalog”/opt/synos/progression/catalog.toml (ships in ISO, signed):
[tools.metasploit]unlock_level = 15prerequisites = ["intermediate-exploitation", "lab-port-scanning-advanced"]faction_reputation_required = { crimson_spire = 40 }
[tools.hashcat]unlock_level = 8prerequisites = ["intro-crypto", "intermediate-passwords"]faction_reputation_required = {}
[tools.sliver]unlock_level = 25prerequisites = ["advanced-c2-theory", "sandbox-labs-complete"]faction_reputation_required = { crimson_spire = 75 }
[labs.mesh-your-first-node]unlock_level = 5prerequisites = ["intro-networking"]rewards = { xp = 500, tool_unlocks = ["synos-hive-profiler-cli"], faction_reputation = { "The Warden" = 10 } }faction_specific = false
[labs.salvage-yard-intro]unlock_level = 7prerequisites = ["mesh-your-first-node"]rewards = { xp = 1000, tool_unlocks = ["synos-hive-attestor-cli"], achievement = "first-salvaged-node" }tags: [grimoire gamification]
3. Event bus + triggers
Section titled “3. Event bus + triggers”synos-progression-daemon (Rust binary in fruit/crates/synos-progression/) subscribes to:
Input events (from GRIMOIRE game engine)
Section titled “Input events (from GRIMOIRE game engine)”lab_completed— player finishes a lab instance with passing scorefaction_mission_completed— player completes a faction missionachievement_unlocked— named achievement triggeredmesh_node_joined— a new mesh node successfully attested + registered
Output events (to system)
Section titled “Output events (to system)”unlock_tool_request { name }— daemon invokessynos-tool-installerwhich callspacman -Sordocker loadfrom the pre-bundled archiveunlock_lab_request { name }— daemon flips lab visibility in GRIMOIRE UI + extracts lab assetsunlock_config_preset { preset }— daemon overlays config templates onto user’s ~/.config
The unlock path (concrete example)
Section titled “The unlock path (concrete example)”- Player completes
intro-networkinglab with score 85/100 - GRIMOIRE game engine emits
lab_completed{name="intro-networking", score=85} - Progression daemon reads event, credits 500 XP, checks catalog for labs whose prerequisites are now satisfied
- Catalog says
mesh-your-first-noderequiresintro-networking→ unlocked - Daemon writes updated state, fires
unlock_lab_request{name="mesh-your-first-node"} - Lab loader extracts lab assets from the pre-bundled archive (reusing the content-addressable storage Cipher A built for Docker labs)
- GRIMOIRE UI shows the new lab as available
- Player’s XP ticker animates, new-lab notification fires
tags: [grimoire gamification]
4. Auto-extract on unlock
Section titled “4. Auto-extract on unlock”Leverage the existing content-addressable bundle architecture from Wave 7 Cipher A:
- The entire ISO ships with ALL Grimoire tools + ALL lab assets pre-bundled (compressed, deduped)
- On unlock, the daemon triggers selective extraction from the bundle — NOT a re-pull
- Bundle index at
/opt/synos/progression/bundle-index.tomlmaps unlock-name → list of sha256 blobs → extraction destination - Extraction is atomic (temp dir → rename) and idempotent (re-triggering reuses existing extraction)
Advantages:
- First-install experience is fast (bundle is single compressed artifact)
- Progressive unlock doesn’t require network (offline-capable)
- Same mechanism works for tools (extract to
/usr/local/), configs (overlay to~/.config/), labs (materialize to~/.local/share/grimoire/labs/)
tags: [grimoire gamification]
5. Master pass-through mode
Section titled “5. Master pass-through mode”On Master ISO:
synos-progression-daemonstarts withSYNOS_PROFILE=masterenvironment- At boot, daemon reads
/etc/synos/profile— if “master”, enters pass-through mode - Pass-through mode: reads catalog, generates full unlock event stream as if every prerequisite was met
- All tools extracted to
/usr/local/on first boot (via Cipher A’s systemd one-shot) - All labs materialized to
/opt/synos/grimoire/labs/(via Cipher A’s image loader) - Daemon exits cleanly after pass-through flood, marks
~/.local/share/synos/progression/.master-godmodeflag
The pass-through state is explicit and auditable — a Master operator can verify everything is unlocked by checking the flag file + running synos-progression status.
tags: [grimoire gamification]
6. Curtain v2 — runtime capability ceiling (Grimoire only)
Section titled “6. Curtain v2 — runtime capability ceiling (Grimoire only)”Separate from progressive unlock. Unlocks are capability gates WITHIN Grimoire’s scope. The ceiling is a harder boundary.
Enforcement points:
- Kernel syscall dispatch — syscalls 470-474 (AI dispatch) return
ENOSYSon Grimoire; 469/475/476/477 work normally - ALFRED consciousness cortex — high-stakes decisions flagged for Master-tier tenants are silently dropped on Grimoire
- LLM federation — discovery protocol tagged by tier; Grimoire nodes refuse federation with Master nodes and vice versa
- Audit chain — HMAC root key for Grimoire is different; Grimoire chains cannot be merged with Master chains
- Fragment Field IDS — kernel detection disabled; userspace measurement only
- C2 framework binaries — scrubbed at build time by
cargo xtask grimoire-ceiling-check
Bypass attempts:
- Editing
/etc/synos/profileto forge “master” — blocked because the file is on an immutable verity-protected rootfs (Rec 12 immutable rootfs is prerequisite) - Recompiling ALFRED with master features — blocked because the restricted crates (LicenseRef-Proprietary) are not in the Grimoire source tree at all
- Loading a master-signed kernel module — blocked because Grimoire’s kernel MOK key is different and
module.sig_enforce=1
tags: [grimoire gamification]
7. v40 vs v41 scope
Section titled “7. v40 vs v41 scope”v40 ships (this session if time permits, else next session)
Section titled “v40 ships (this session if time permits, else next session)”- This design doc ✓
- Grimoire-minimal starter profile (
fruit/iso/profiles/grimoire-minimal.toml) with starter 10 tools - Catalog file skeleton at
fruit/iso/progression/catalog.toml.template - Project roadmap update documenting the pivot ✓
v41 implements
Section titled “v41 implements”fruit/crates/synos-progression/full crate implementationsynos-progression-daemon+synos-tool-installeruserspace binaries- Event bus wiring into GRIMOIRE game engine
- Bundle-index generator in stage 14
- Master pass-through mode at daemon startup
- Grimoire ceiling enforcement (first pass: syscall-level + cargo xtask grimoire-ceiling-check)
- 8-10 new Salvage Yard labs teaching mesh construction
v42 hardens
Section titled “v42 hardens”- Curtain v2 runtime ceiling full enforcement (immutable rootfs, tier-tagged federation, audit chain separation)
- Hardware mesh auto-discovery + profiler tier classification
- E-waste reduction metrics (anonymized leaderboard opt-in)
- The Salvage Yard quest arc expansion
tags: [grimoire gamification]
This design spec is derived from SALVAGED_HARDWARE_MESH_VISION.md. Any conflict between this doc and the parent is resolved in favor of the parent.