Architecture Decision Records
tags: [general]
The canonical decision log is maintained in docs/internal/eyesonly/architecture/SYNOS_MASTER_ARCHITECTURE.md
and in the “Key Decisions” section of .claude/CLAUDE.md. This page is the public-facing
summary.
tags: [general]
ADR-001 — Apache 2.0 Base with LicenseRef-Proprietary Modules
Section titled “ADR-001 — Apache 2.0 Base with LicenseRef-Proprietary Modules”Status: Accepted (v35 — resolves the v26–v34 license contradiction) Date: 2026 Q2
Context. Through v34, the root LICENSE file declared MIT while individual crate
manifests declared LicenseRef-Proprietary. This contradiction blocked the v35 public release
because third parties could neither redistribute the ALFRED daemon under MIT nor build the
public GRIMOIRE image without pulling in proprietary lab content.
Decision. Move the project to an explicit open-core model:
- The root
LICENSEis Apache 2.0, with aNOTICEfile capturing required attributions. - The majority of Rust crates inherit Apache 2.0 via
license = "Apache-2.0"in theirCargo.toml. - A small, explicit set of modules declare
license = "LicenseRef-Proprietary": the ALFRED consciousness engine internals, proprietary GRIMOIRE labs,synos-tenant,synos-audit-trail,synos-fragment-field, andgrowth/security/red-team/campaigns/. - Commercial use of the proprietary modules requires a separate licensing agreement.
Consequences. Contributors can freely work on the Apache-licensed majority of the workspace. Downstream builders can repackage the public profiles without legal friction. The curtain enforces the boundary at build time so proprietary symbols never leak into the public ISOs. The v35 ship-gate license check now passes.
tags: [general]
ADR-002 — Shift Base Distribution from Debian/Parrot to Arch Linux
Section titled “ADR-002 — Shift Base Distribution from Debian/Parrot to Arch Linux”Status: Accepted (v30, March 2026) Date: 2026-03-20
Context. Through v29, Syn_OS claimed to be a “Parrot-based” / “Debian-based” distribution. In practice the entire development environment was Arch/EndeavourOS, and every new feature (pacman-driven tooling, AUR packages, rolling-release kernel assumptions) was written against Arch. The mismatch between the documented base and the actual build environment was a constant source of drift and bugs.
Decision. Officially rebase Syn_OS on Arch Linux as of v30. The ISO pipeline transitions
from debootstrap to mkarchiso/archiso + pacstrap. The AUR ecosystem is a first-class
source of security tooling. The target kernel tracks rolling mainline Linux (with Syn_OS
patches on top). Docker-wrapped mkarchiso on the sanctum node produces reproducible images.
Consequences. Alignment between dev host and target OS tightened dramatically. Packaging
stories simplified — one tool (pacman) instead of three (apt + dpkg + snap/flatpak).
Rolling releases eliminate long backports. The downside is that Syn_OS can no longer advertise
the Debian stability story and users expecting long-term support must switch to linux-lts.
tags: [general]
ADR-003 — Pin Bevy to 0.14 (Defer Bevy 0.16)
Section titled “ADR-003 — Pin Bevy to 0.14 (Defer Bevy 0.16)”Status: Accepted Date: 2026 Q1
Context. synos-bevy (7,129 LOC, 7 plugins) powers the desktop experience. Bevy 0.16
introduced FullscreenMaterial and a new render-graph API that would simplify the CRT
post-processing stack in RetroFilterPlugin. However, 0.16 also reworked the ECS scheduler
in a way that breaks RehoboamPlugin and requires rewriting FactionHQPlugin’s reputation
system.
Decision. Pin to Bevy 0.14 for v34 and v35. Revisit for v36 after the ECS scheduler
work in Bevy 0.16+ stabilises. Document the manual render pipeline used by RetroFilterPlugin
so the upgrade path is clear.
Consequences. Short-term: more hand-rolled code in RetroFilterPlugin (4 WGSL shaders
maintained manually). Long-term: v36 inherits a large one-time upgrade cost but avoids
rewriting two plugins under deadline pressure.
tags: [general]
ADR-004 — Build the Custom Kernel with LLVM and CONFIG_RUST=y
Section titled “ADR-004 — Build the Custom Kernel with LLVM and CONFIG_RUST=y”Status: Accepted Date: 2026 Q1
Context. The Syn_OS custom kernel (6.19-synos-ai target) integrates 17 Rust kernel
modules covering network, scheduler, memory, security, interrupts, module loader, power,
hardening, syscall, consciousness, procfs, and bridge layers. Rust-for-Linux requires
CONFIG_RUST=y, which in turn requires building with LLVM/clang rather than gcc.
Decision. Build the kernel with the LLVM toolchain (make LLVM=1) and enable
CONFIG_RUST=y. Ship 12 CONFIG_SYNOS_* build options so each Rust module can be
compiled in or out per profile.
Consequences. The kernel build environment is reproducible on any host with clang
and rust-src. The Syn_OS-specific modules can be toggled per profile without touching
the core kernel config. The downside is that the kernel build requires a matching Rust
nightly toolchain (pinned in rust-toolchain.toml) and will break on arbitrary nightly
upgrades — version bumps are gated behind a pre-sprint check.
tags: [general]
ADR-005 — Three-Image Strategy (Master / GRIMOIRE Public / GoodLife)
Section titled “ADR-005 — Three-Image Strategy (Master / GRIMOIRE Public / GoodLife)”Status: Accepted Date: 2026 Q1
Context. Syn_OS serves three audiences with very different threat models: internal developers need every capability, students need a sandboxed education image, and AI researchers need something in between with no offensive tooling. Shipping one omnibus image would either over-expose sensitive capabilities or require end users to opt into dangerous features.
Decision. Build three ISO profiles from the same workspace:
- Master (4+ GB) — developer-only, every capability enabled, internal distribution.
- GRIMOIRE Public (~3 GB) — education image, GRIMOIRE labs and game engine, safe toolset, proprietary content curtained out.
- GoodLife (~3 GB) — AI research image, ALFRED daemon and LLM engine, no offensive tooling.
A build-time curtain (ELF symbol scanner + feature audit + lab-integrity manifests) enforces the boundary for the two public profiles.
Consequences. Each profile is optimised for its audience without duplicating code. The curtain catches accidental leakage at build time rather than at release time. Maintenance cost scales with profiles, so the number is capped at three.
Update (2026-08): superseded — now 4 images incl. the ChurchOfMalware members-only tier.
tags: [general]
ADR-006 — Tailscale Backbone with WireGuard Fallback for ARCANUM Hive
Section titled “ADR-006 — Tailscale Backbone with WireGuard Fallback for ARCANUM Hive”Status: Accepted Date: 2026 Q1
Context. ARCANUM Hive is a horizontally-scalable encrypted mesh. Initial designs used pure WireGuard, which required manual key distribution and a flat IP plan. Tailscale provides NAT traversal, identity management, ACLs, and magic DNS out of the box, but adds a dependency on a SaaS coordinator.
Decision. Tailscale is the primary backbone; WireGuard is the fallback with static IPs on VLAN 66 (10.66.0.0/24) and a separate WG subnet (10.99.0.0/24). Each node holds both configurations so a Tailscale outage does not sever the mesh.
Consequences. Day-to-day operations benefit from Tailscale’s ergonomics. Critical control-plane traffic (hive controller, attestor, profiler) also succeeds on WireGuard when Tailscale is unreachable. Nodes maintain two routing tables and two firewall rule sets, which is added complexity but keeps the mesh resilient.
tags: [general]
ADR-007 — ed25519 Node Identity for ARCANUM Hive
Section titled “ADR-007 — ed25519 Node Identity for ARCANUM Hive”Status: Accepted Date: 2026 Q1
Context. Mesh nodes must prove their identity to each other before exchanging workloads or attestations. X.509 certificates were considered but carry heavy tooling, rotation, and CRL baggage for a small fleet.
Decision. Every hive node generates an ed25519 keypair at first boot.
Public keys are committed to growth/arcanum/keyring/nodes/<hostname>/ alongside a
NODE_IDENTITY.md describing the hardware tier and role. Node-to-node authentication
uses ed25519 signatures over ephemeral challenges.
Consequences. No CA infrastructure, rotations are a single file update, and the attestor can verify identities offline. The tradeoff is that a compromised node’s key must be revoked by pushing a new commit to the keyring — acceptable for a small, centrally-controlled fleet.
tags: [general]
ADR-008 — cargo xtask as the Single Workspace Orchestrator
Section titled “ADR-008 — cargo xtask as the Single Workspace Orchestrator”Status: Accepted Date: v26 (“The Curtain”, March 2026)
Context. Pre-v26, workspace-wide checks were scattered across shell scripts, Python helpers, and one-off binaries. Reproducibility suffered and each new check added a new entry point.
Decision. Consolidate workspace-wide operations into a single cargo xtask crate at
growth/xtask/ with subcommands. As of v34.0.2 the subcommand list is: check-versions,
validate-profiles, doc-dedup, pre-sprint, stats, gen-labs, curtain-check,
feature-audit, lab-integrity, release, and audit-unsafe (added this codesprint).
Consequences. One tool, one dependency set, one test suite. New checks are added as
subcommands rather than new binaries. CI invokes the same cargo xtask commands that
developers run locally.
tags: [general]
ADR-009 — 34-Stage ISO Build Pipeline with Per-Stage Idempotency
Section titled “ADR-009 — 34-Stage ISO Build Pipeline with Per-Stage Idempotency”Status: Accepted (grown from 20 stages in v1.0 → 30 in v31 → 34 in v34) Date: 2026 Q1 – Q2
Context. The ISO build is long, expensive, and historically fragile. Early versions were monolithic shell scripts where a failure halfway through forced a full restart. As the feature set grew (kernel build → Rust compile → Arch base → desktop → security tools → ALFRED daemon → AI models → GRIMOIRE → squashfs → SBOM), splitting the pipeline became essential.
Decision. Implement the ISO build as a 34-stage pipeline under
fruit/iso/iso-build/scripts/stages/, each stage being an idempotent bash script named
NN-description.sh. Stages run sequentially under SYNOS_STRICT=1 with per-stage logs,
checkpoint/resume support, and an adaptive watchdog.
Consequences. Failures can be resumed from the last successful stage. New stages can
be inserted without renaming existing ones (lettered suffixes: 02b-synos-rust-modules.sh).
Each stage has a single responsibility and can be tested in isolation. The downside is that
the pipeline is now 34 shell scripts totalling thousands of lines — which required the
Batch L1–L5 build-infra code freeze to harden against landmines.
tags: [general]
ADR-010 — Consciousness Fusion Engine for ALFRED (Traditional + Neuromorphic + Quantum + TNGS)
Section titled “ADR-010 — Consciousness Fusion Engine for ALFRED (Traditional + Neuromorphic + Quantum + TNGS)”Status: Accepted (v5.1) Date: 2026 Q1
Context. ALFRED is the AI daemon. A single ML backend (ONNX, Ollama, or a custom neuromorphic layer) was insufficient — each has different strengths for different tasks, and no single approach covers the research goals around quantum-inspired coherence and Edelman’s Theory of Neural Group Selection (TNGS).
Decision. Implement a consciousness fusion engine in the alfred daemon that
combines four layers — Traditional (ONNX/Ollama classical inference), Neuromorphic
(spiking-network approximations), Quantum (coherence-window estimation), and TNGS
(neural-group selection dynamics) — and routes queries to the appropriate layer(s)
based on task type and confidence thresholds.
Consequences. ALFRED can reason about threats with multiple complementary models.
The fusion logic is complex and becomes the hardest-to-test part of the daemon, which is
why ALFRED internals are LicenseRef-Proprietary — the fusion engine contains original
research that is not yet ready for open publication.
tags: [general]
Updated: v111.0.0 Last Light, August 2026. For the authoritative list of
decisions including superseded ones, see docs/internal/eyesonly/architecture/SYNOS_MASTER_ARCHITECTURE.md.