Files
core/bible-local/decisions/2026-03-19-platform-config.md
Mikhail Chusavitin aac3a69526 Add platform config ingest, storage, API, and UI tab
Auditors can now send BIOS/Redfish platform settings via
POST /ingest/hardware as hardware.platform_config (map[string]any).
Stored as latest-snapshot per machine with per-key change history.
Exposed via GET /api/assets/{id}/platform-config and .../history.
Asset page gets a third tab "Platform Config" with inline history expand.
Contract bumped to v2.9, migration 0024 adds two new tables.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 15:07:21 +03:00

1.6 KiB

ADR: Platform Config — Storage and UI Tab

Date: 2026-03-19 Status: Accepted

Context

Auditors collect platform settings (BIOS parameters from Redfish) and want to transmit them via the existing POST /ingest/hardware endpoint. These settings need to be stored and displayed on the asset page.

Decision

  • Add an optional hardware.platform_config field to the ingest contract: a free-form map[string]any object (keys are strings, values are strings/numbers/booleans).
  • Store as a latest-snapshot per machine in machine_platform_config (upserted on each ingest).
  • Track per-key change history in machine_platform_config_history — a new row is inserted whenever a key value changes or first appears.
  • Expose via two new API endpoints:
    • GET /api/assets/{id}/platform-config — current snapshot with per-key change counts
    • GET /api/assets/{id}/platform-config/{key}/history — history for a specific key
  • Display in a third tab "Platform Config" on the asset page (alongside Current Components and Host Logs).

Rationale

  • map[string]any keeps the contract simple and avoids premature schema design for BIOS parameters that vary by vendor.
  • Latest-snapshot + change history separates two use cases: quick audit view (current state) vs. change tracking (what changed and when).
  • Reuses the existing ingest transaction and tab UI pattern, minimizing new infrastructure.

Consequences

  • Platform config contents are not validated by the system — integrators are responsible for key naming consistency.
  • History is append-only per key change; no compaction/TTL is applied initially.