Faculty I · Observation

Eyes

Observation only works if it reads sources that are already authoritative. Everything below already holds truth about itself — the work is reading it, normalising it, and never pretending to know more than it says.

Rule Strictly read-only. An observer that can act is not an observer.

The estate9 sources

What there is to watch

  • 6Operational
  • 2In progress
  • 1Experiment

Expand a source for what it exposes and how it is read

  1. ESP32 lighting nodesDevicesIn progress

    Microcontrollers driving addressable LEDs, connected outbound to the broker over Wi-Fi. They are told what to do by topic, never by address.

    Exposes
    • Reported colour and brightness per zone, retained
    • Availability, published by the broker on unclean disconnect
    • Firmware identity on connect
    Read by

    Subscribe to the retained state and availability topics. Current state arrives on connect — there is nothing to poll.

    Constraint Commands are never retained. A retained command replays to every device that subscribes later, which is how a light turns itself on at 3am.

  2. Managed switchesNetworkOperational

    Cisco lab gear carrying VLANs, 802.1Q trunks, and inter-VLAN routing. Torn down and rebuilt deliberately rather than left static.

    Exposes
    • Running configuration
    • Interface state, counters, and duplex
    • VLAN membership and trunk allow-lists
    Read by

    Collected over SSH and parsed into a block tree, then compared against declared intent. Drift is reported as a finding.

    Constraint Read-only. Pushing configuration needs rollback, change windows, and far more trust in the parser than reading does.

  3. MQTT brokerNetworkOperational

    The transport every device speaks. Publishers address a topic, not a device, so adding hardware changes nothing on the sending side.

    Exposes
    • Retained state for every topic
    • Connection and disconnection events
    • Last Will messages on unclean drops
    Read by

    A subscriber holding the topic tree. The broker already knows current state; asking it is a subscribe, not a query.

    Constraint A message delivered to nobody looks identical to one delivered to everybody. Observability here needs a subscriber, not an assumption.

  4. Container runtimeServicesOperational

    Docker Compose stacks on a Linux host — one stack per module plus a platform stack, with internal-only networks for anything holding data.

    Exposes
    • What is running, and what exited
    • Restart counts and health
    • Image and build identity per service
    Read by

    The runtime already tracks all of this. Reading it is an API call, not a metrics pipeline that has to be built and fed.

    Constraint Single host. This is a deliberate scope, recorded in ADR-0002, and it stops being the right answer the moment the workload needs a second machine.

  5. PostgreSQLDataOperational

    The single persistence layer, attached only to an internal network with no route off the host.

    Exposes
    • Schema version, via applied migrations
    • Table and index state
    • Connection counts
    Read by

    Queried directly by the service layer. Schema changes are migration files, never manual edits.

    Constraint A backup that has never been restored is a belief, not a capability. Restore drills are on the list, not yet on a schedule.

  6. Reverse proxyIngressOperational

    Caddy as the only door. Services publish no host ports and are reachable by container name from inside the network, or not at all.

    Exposes
    • One access log covering every request in
    • Certificate state and renewal
    • Which routes resolve to which upstream
    Read by

    A single structured access log. One ingress point is what makes request review practical instead of theoretical.

    Constraint Proxy-to-service traffic is plaintext on the container network. Acceptable on one host; not acceptable once those hops cross a physical link.

  7. Networked FDM printerDevicesExperiment

    A 3D printer with a network-attached controller — a low-stakes subject for exercising the observation path against real hardware.

    Exposes
    • Hotend and bed temperature
    • Job progress and elapsed time
    • Connection state
    Read by

    Polling an authenticated HTTP API, normalised and republished onto the broker so device state has one consumption model.

    Constraint Read and control paths are separated at the client level. The observer holds no method capable of issuing motion — a monitoring integration that can move an axis is not a monitoring integration.

  8. Service layerServicesIn progress

    FastAPI services exposing module capabilities, with typed request models generating an API description from the same definitions the code uses.

    Exposes
    • An OpenAPI description that cannot drift from the API
    • Module endpoints and their schemas
    • Request validation failures
    Read by

    The generated description is itself readable state — Argus can learn what the platform can do without being told separately.

  9. Public site deliveryCloudOperational

    This site: every route prerendered to static HTML, built on AWS Amplify, served over a Route 53 domain.

    Exposes
    • Build result and duration
    • Commit the published output was built from
    • Certificate and domain association state
    Read by

    Build events from the hosting platform — the one source in this list that lives outside the house.

    Constraint The common failure here is never the build. It is a DNS validation record that was never added, so a certificate never issues.

Direction02

Standing, building, designed

The line between these three columns is the most important thing on this site. Work moves left to right only by being built.

Standing

Built and running.

  • Composed container stacks on a Linux host, with internal-only data networks.
  • A single reverse proxy as the only ingress, terminating TLS.
  • PostgreSQL as the one persistence layer.
  • An MQTT broker carrying device traffic, with retained state and Last Will.
  • Physical switching gear configured, torn down, and rebuilt as a working lab.
  • This site: prerendered, built on Amplify, served from Route 53.

Under construction

Real code, actively being shaped.

  • A formal platform/module contract so modules add without touching platform code.
  • ESP32 provisioning that does not require reflashing to change a broker address.
  • Configuration verification output that is diffable between runs.
  • The record store — numbers, statuses, and supersession.

Designed, not built

Specified. Explicitly not claimed as working.

  • The observation API — read-only, over platform and device state.
  • Argus as a text interface over observation and memory.
  • Voice interaction, once the text path earns it.
  • A second, non-technical domain — the real test of whether the faculties generalise.

Observation without retention is a dashboard. What makes it useful is that the reasoning survives alongside the state.

Memory