test: certify graph_engine gather/guard (C.6), find related BUG-006

Gather/padding/src_id<out_id guard certified via existing solid
pre-session tests (graph_engine_tb.v checks act_buffer contents via
hierarchical reference, not just final output; graph_engine_guard_tb.v
covers 4 adversarial cases incl. recovery).

BUG-006 (LOW severity): num_neurons_graph=0 shares BUG-005's exact
root cause (neuron_idx is a full 16-bit register, no guard), but
graph_engine's existing per-edge src_id<out_id guard incidentally
catches most garbage-data patterns fast (err at cycle 58 for a
non-trivial test pattern, vs. layer_sequencer's 21761-cycle full run
in BUG-005) -- not a designed protection for this case, so not closed
as a non-issue, but lower severity given the observed practical risk.
Not run to full 65536-iteration completion (impractical for this
campaign's time budget) -- limitation stated explicitly.

Full regression: 40/40 real tests pass, 1 new observational test.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
This commit is contained in:
2026-09-04 14:52:52 +02:00
co-authored by Claude Sonnet 5
parent f81d7fa1b3
commit 6db44efcfd
21 changed files with 220 additions and 17 deletions
+18
View File
@@ -1337,3 +1337,21 @@ integrazione nel top level (F5), verifica consolidata e misure reali (F6).
BUG-005.
- **Prossimo passo**: C.6 (motore grafo — `graph_engine`, `act_buffer`, guard
`src_id<out_id`).
## Campagna di ri-certificazione — C.6: Motore grafo (2026-09-04)
- **Gather/padding/guard esistenti certificati** citando test pre-esistenti già solidi
(`graph_engine_tb.v` verifica `act_buffer` via riferimento gerarchico non solo l'output
finale; `graph_engine_guard_tb.v` copre 4 casi avversari incl. recovery).
- **BUG-006 (BASSA) trovato**: stessa causa radice esatta di BUG-005
(`num_neurons_graph=0`, `neuron_idx` a 16 bit pieni, nessun guard) ma con una differenza
pratica importante: `graph_engine` ha già un guard per-edge (`src_id<out_id`) che, per
un pattern di dati non banale, ha fermato l'esecuzione dopo soli 58 cicli invece di
girare per le 65536 iterazioni possibili come farebbe `layer_sequencer` — protezione
incidentale, non garantita per ogni contenuto PSRAM, quindi non chiuso come non-bug ma
classificato a severità inferiore di BUG-005. Test non fatto girare a completamento
(65536 iterazioni impraticabili per il budget di questa campagna) — limite dichiarato.
- **Regressione completa**: 40/40 test reali PASS invariati, 1 nuovo test osservazionale.
- **Deliverable**: `docs/validation/06-graph-engine.md`, `bugs.md` con BUG-006.
- **Prossimo passo**: C.7 (SPI slave + engine — CDC, opcode, `STATUS` sticky/clear-on-read,
`READ_CONFIG`).