The audit tool that ingests Reanimator exports treats any per-component field
change between imports as a component replacement. Importing an xFusion BMC dump
and an easy_bee BEE-SP bundle for one server produced large spurious diffs.
xfusion:
- parseMemInfo tolerates a stray 0x0A inside the binary SPD "bom number" column
(it was splitting a DIMM record in two and emitting a phantom "slot s" module)
- DIMM slot from the "dimm name" column ("DIMM071"), mainboard "location" dropped
- GPU slot = BDF (Reanimator contract)
- NIC emitted per PCI function from netcard_info.txt (BDF + per-port MAC, shared
card serial) instead of one card-level adapter with the wrong BDF, which had
been colliding with a GPU and vanishing in dedup
- NIC manufacturer left blank when it is the system OEM so the exporter resolves
the silicon vendor from pci.ids
- "(U6216)" chip designator stripped from firmware versions
easy_bee:
- PSU bay numbers rebased 0-indexed -> 1-indexed; bare single-letter PSU
"firmware" (a leaked FRU version) cleared
- board.part_number taken from the bundle's ipmitool-fru.txt chassis
"Product Part Number" to match the BMC value
exporter (cross-vendor):
- canonicalMemorySlot: drop dmidecode "(J)" channel tag, Memory111 -> DIMM111
- canonicalGPUModel: NVIDIA DC GPUs reduce to the bare chip token
- canonicalStorageMediaAndInterface: NVMe is a bus not a medium
- manufacturerFromStorageModel: fill blank drive vendor from the model prefix
- isRemovableUSBStorageDevice: drop live-CD boot sticks
- isOnboardControllerPCIeDevice: drop SATA/NVMe/MegaRAID/PCIe-switch controller
functions that only an lspci scan reports (keep add-in cards with an identity)
For the reference server every physical component now appears in both exports
keyed identically; residual diffs are one-sided enrichment only.
Refs ADL-061, ADL-062.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VFy4m7cVv4cqp25jJh2gSB
LOGPile Bible
bible-local/ is the project-specific source of truth for LOGPile.
Keep top-level docs minimal and put maintained architecture/API contracts here.
Rules
- Documentation language: English only
- Update relevant bible files in the same change as the code
- Record significant architectural decisions in
10-decisions.md - Do not duplicate shared rules from
bible/
Read order
| File | Purpose |
|---|---|
| 01-overview.md | Product scope, modes, non-goals |
| 02-architecture.md | Runtime structure, state, main flows |
| 04-data-models.md | Stable data contracts and canonical inventory |
| 03-api.md | HTTP endpoints and response contracts |
| 05-collectors.md | Live collection behavior |
| 06-parsers.md | Archive parser framework and vendor coverage |
| 07-exporters.md | Raw export, Reanimator export, batch convert |
| docs/hardware-ingest-contract.md | Reanimator ingest schema mirrored locally |
| 08-build-release.md | Build and release workflow |
| 09-testing.md | Test expectations and regression rules |
| 10-decisions.md | Architectural Decision Log |
Fast orientation
- Entry point:
cmd/logpile/main.go - HTTP layer:
internal/server/ - Core contracts:
internal/models/models.go - Live collection:
internal/collector/ - Archive parsing:
internal/parser/ - Export conversion:
internal/exporter/ - Frontend consumer:
web/static/js/app.js
Maintenance rule
If a document becomes stale, either fix it immediately or delete it. Stale docs are worse than missing docs.