Commit Graph

9 Commits

Author SHA1 Message Date
Mikhail Chusavitin
04ad1f0568 Structured logging + request ID middleware — ingest v2.0, history v2.0, api v2.0
Migrate all log.Printf/log.Fatalf to log/slog with structured key-value
attributes per bible go-logging contract.

- Add withRequestID middleware: generates crypto/rand 8-byte hex ID per
  request, sets X-Request-ID response header, injects into context
- withErrorLogging uses slog with request_id from context
- writeError internal log calls migrated to slog.Error/slog.Warn
- All handler log calls in api, ingest, history packages use slog
- cmd/reanimator-api configures slog.NewTextHandler(os.Stdout) at startup
- cmd/reanimator-migrate, cmd/reanimator-reset migrated to slog

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 15:03:22 +03:00
Mikhail Chusavitin
824e377a17 Add module versioning, drop deferred tasks — ingest v1.0, history v1.0, api v1.0
Implement release note discipline per bible module-versioning contract:
- Add version.go with Version = "1.0" to ingest, history, api packages
- Drop CI task (no CI infrastructure planned)
- Drop Release note discipline task (now implemented)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 14:47:41 +03:00
4c284505a8 Async ingest, deferred history, batch delete, vendor normalization, CI identifiers
- history/worker: fix deadlock by moving stale job requeue out of claimNextJob
  into dedicated staleJobRequeuer goroutine (runs every 2 min)
- history/service,tx_apply,cross_entity: add deferred=true mode — write events+
  snapshots but skip projection updates; queue recompute after commit
- ingest/service: IngestHardwareDeferred uses deferred mode; CSV workers up to 8
  (INGEST_CSV_WORKERS env); serial/prefetch lookups use normalize.SerialKey
- api/ingest: JSON /ingest/hardware now async (202 + job_id); new GET
  /ingest/hardware/jobs/{id} endpoint; CSV already async
- history/admin_cancel: replace per-event softDelete loop with batchSoftDeleteEvents
  using IN-clause chunks of 500 to prevent request timeout on large deletes
- normalize: new internal/normalize package with VendorKey, VendorDisplay,
  VendorDisplayPtr, SerialKey, FirmwareKey
- ingest/parser_hardware: vendor fields use normalize.VendorDisplayPtr
- migrations/0021_ci_identifiers: change identifier columns to utf8mb4_unicode_ci
  (case-insensitive) in parts, machines, observations, machine_firmware_states
- bible submodule: update to add identifier-normalization contract

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 22:23:17 +03:00
09593019b1 Fix recompute conflict and refine timeline event modal 2026-03-01 15:28:19 +03:00
229db81229 feat: improve timeline/admin flows and ingest projection repairs 2026-03-01 00:22:22 +03:00
eba3b60b48 Add manual failures UI and global list filtering 2026-02-23 17:44:05 +03:00
8aa8b26184 Finalize history admin tools and semantic UI navigation 2026-02-23 16:59:09 +03:00
5a6a1c9d4d Redesign timeline cards and drilldown UX 2026-02-22 21:19:43 +03:00
ec54d3249e Add history-based state changes and recompute pipeline 2026-02-22 19:52:07 +03:00