Skip to content

docs(adr): record the three decisions the lab buildout rests on - #46

Merged
Gerrrt merged 1 commit into
mainfrom
claude/ilo-vm-setup-planning-8ut1k5
Aug 20, 2026
Merged

docs(adr): record the three decisions the lab buildout rests on#46
Gerrrt merged 1 commit into
mainfrom
claude/ilo-vm-setup-planning-8ut1k5

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Aug 20, 2026

Copy link
Copy Markdown
Owner

What changed

Three new ADRs, plus two count corrections in the README that the previous pass
missed. Nothing about the running lab changes.

ADR Decision
0006 Network detection goes on morpheus, not on the hypervisor
0007 Saruman is the defended estate; ifrit is the offensive range
0008 Services are placed by the trust of their data, across two hosts

Why

Each of these turned on a judgment worth recording rather than a fact worth
looking up — which is what docs/adr/0001 says an ADR is for.

0006 — detect at the chokepoint. A sensor on the hypervisor sees VLAN 30,
which is to say it sees the hypervisor. The segment that warrants inspection is
Skids, with seven cameras and a Tuya device on it. Mirroring the trunk into the
lab would fix the visibility and damage the trust boundary at the same time, so
Suricata goes on the firewall instead. The unconfigured pfSense-pkg-snort is
removed. Honest costs recorded: more load on the single point of failure, and a
FreeBSD package rather than a digest-pinned container.

0007 — the lab splits in two. Sharing one box between attack tooling and the
target estate confounds "my detection fired" with "my own tooling made that
noise." Lab telemetry stays on VLAN 30 behind its own stack rather than
remote-writing into management, because security.md names a lab VM reaching the
house as a threat this design defends against. Costs a second observability stack
and a machine not yet bought. ifrit's isolation mechanism is left open
deliberately rather than assumed — adding a segment is a decision this project
has already declined once.

0008 — services by data trust. A password vault and a film library aren't the
same kind of thing, so they don't get the same segment. The sensitive tier lands
on Winterfell under the 50→99 rule that already exists; the media tier lands with
the televisions it serves, which answers the terminal-VLAN problem by placement
rather than by exception. No new segment — the seven VLANs stand and ADR-0002
needs no amendment.

That last one carries a real cost and says so at length rather than burying it:
putting Immich on Winterfell dilutes the boundary ADR-0002 calls total, and that
is the strongest argument for the dedicated segment this ADR rejects. The
mitigations are stated, and so is what would change the decision. Single sign-on
is deferred on the strength of two users, no remote access, which leaves the
"no MFA on internal services" gap in security.md open knowingly.

Also fixes two README counts the last pass missed: three inter-VLAN rules rather
than two, and eight ADRs rather than five.

Blast radius

  • No change to network segmentation or firewall rules
  • No new port published to a VLAN that could not already reach the service
  • No credential added outside secrets/*.sops.yaml

Documentation only. These ADRs describe rules 50→40 and 99→20 as decided, but
neither exists yet and neither is created here — they land with the hardware.

Verification

  • make validate passes — all checks passed
  • Deployed to the lab and confirmed working — n/a, documentation only
  • Docs updated (docs/, service README, or docs/roadmap.md)

Form follows docs/adr/0003 and 0004: Nygard structure, numbered options in
Context, Consequences carrying the honest downsides rather than only the wins.


Generated by Claude Code

Three questions came up while planning what to actually build, and each
turned on a judgment worth recording rather than a fact worth looking up.

ADR-0006 puts network detection on the firewall. A sensor on the hypervisor
sees VLAN 30, which is to say it sees the hypervisor; the segment worth
inspecting is the one with seven cameras and a Tuya device on it. Mirroring
the trunk into the lab would fix the visibility and break the trust
boundary, so morpheus gets Suricata instead. The unconfigured Snort package
goes. Honest cost: more load on the single point of failure, and a
FreeBSD package rather than a digest-pinned container.

ADR-0007 splits the lab in two. Saruman becomes the estate you practise
defending; ifrit becomes the range that attacks it. Sharing one box would
confound "my detection fired" with "my own tooling made that noise". Lab
telemetry stays on VLAN 30 behind its own stack rather than remote-writing
into management, because security.md names a lab VM reaching the house as a
threat this design defends against. Costs a second observability stack and
a machine not yet bought. ifrit's isolation mechanism is deliberately left
open rather than assumed.

ADR-0008 places services by what their data is worth. A password vault and
a film library are not the same kind of thing, so they do not get the same
segment: the sensitive tier lands on management under the rule that already
exists, and the media tier lands with the televisions it serves, which
answers the terminal-VLAN problem by placement instead of by exception. No
new segment; the seven VLANs stand and ADR-0002 needs no amendment.

That one carries a real cost and says so at length. Putting Immich on
Winterfell dilutes the boundary ADR-0002 calls total, and that is the best
argument for the dedicated segment this rejects. Single sign-on is deferred
on the strength of two users and no remote access, which leaves the MFA gap
in security.md open knowingly. When either premise changes, so does the
decision.

Also corrects two counts the previous pass missed in the README: three
inter-VLAN rules rather than two, and eight ADRs rather than five.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013fvaAiKsdyFkX9HgqmuBoj
@Gerrrt
Gerrrt merged commit cc741eb into main Aug 20, 2026
3 checks passed
@Gerrrt
Gerrrt deleted the claude/ilo-vm-setup-planning-8ut1k5 branch August 20, 2026 21:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants