D-112 ADOPTED: option (c) post-boot network provisioning (operator ruling)
Operator ruled (c): "C since it is the way people automate opnsense" -- prefer the
mainstream automation path (the OPNsense REST API, as used by opn-cli and the
Ansible OPNsense collection) over image-baking or a media-import trick. The
rendered config (opnsense-config.xml.tmpl) is REUSED unchanged; only the DELIVERY
mechanism changes.

IMPLEMENTATION NOT STARTED -- deliberately. "Push the config over the API" is not
actually reachable from a factory-default OPNsense, and the bootstrap sub-choices
are unruled. Recorded in D-112 so the next session does not discover this the hard
way:

1. NO ROUTE. Factory-default LAN is 192.168.1.1/24 on office1-local, an ISOLATED
   libvirt network with no host leg on virbr2 (measured). The WAN side is reachable
   at 172.30.1.126 but OPNsense blocks all inbound on WAN by default, so it is not
   a way in.
2. NO CREDENTIALED API. The REST API authenticates with an API key+secret (not the
   root password), minted via the GUI. SSH is disabled in the factory default.
3. OUR SERIAL IS WRITE-ONLY. The module attaches <serial type='file'> -- a one-way
   capture that cannot be typed into. An interactive console means type='pty' +
   virsh console (module change + recreate).

Sub-choices B1 (how to reach it) and B2 (how to authenticate first) are left
UNRULED in D-112 rather than picked.

SELF-CORRECTION recorded: I had earlier described option (b) as making the ISO
mechanism "work as designed, unchanged". That was over-claimed -- even with a
read-only root the importer prompts with a 7s timeout and asks for a device name,
so (b) may have been (d) in disguise. Logged so nobody revives (b) on my bad
summary. Note a console LOGIN SHELL is not the rejected (d): (d) was rejected for
racing the importer's 7s timeout; a login shell has no timing race.

The config-ISO path (opnsense-build-config-iso.sh + harness, the module's
config_seed volume + cdrom disk) is RETIRED but left in place -- it is inert, not
harmful. Remove it in the same change that lands (c), not before.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y117t1F525ba9r1vXSBETk
1 parent 5f878b8 commit cbd72c7207340bd09544cfa92fede9b310e39d6b
@JANeumatrix JANeumatrix authored 1 day ago
Showing 2 changed files
View
docs/design-decisions.md
View
docs/session-ledger.md