Skip to content

docs(silicon): withdraw the cannot-un-start claim from the wdg G474RE result - #230

Merged
avrabe merged 2 commits into
mainfrom
docs/wdg-silicon-honesty
Jul 29, 2026
Merged

docs(silicon): withdraw the cannot-un-start claim from the wdg G474RE result#230
avrabe merged 2 commits into
mainfrom
docs/wdg-silicon-honesty

Conversation

@avrabe

@avrabe avrabe commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Found while a persona review panel audited the showcase video's claims against docs/safety/verification-honesty.md. The panel's finding turned out to apply to the repo, not just the video.

The defect

benches/gust/silicon/RESULTS-wdg-g474re.md claimed the silicon run:

validates the wdg driver's IWDG programming + the cannot-un-start effect on real silicon

It does not. gust_wdg_silicon.rs arms the watchdog and then simply stops refreshing it — it never attempts an un-start (grep -c 'wdg_(refresh|stop|disable)' on that firmware → 0). No rejection path was exercised on hardware. p2_cannot_un_start is a source-level Kani property over the pure FSM, and that is all it is.

The correction

  • States what the run does evidence: one happy path, once, on one die — the dissolved object emitted an unlock → configure → lock → start sequence the real IWDG accepted, and the hardware fired.
  • Notes the effect has reproduced across two sessions (0x1c→0x3c and 0x14→0x34) — we were under-claiming reproducibility while over-claiming the inference.
  • Flags that ~1.2 s is the configured timeout (PR=5 / RLR=0x123, nominal LSI), not a measured interval, and that the probe-rs log's wall-clock gap is host detection latency and supports no timing claim.

Docs-only. No code, no artifacts, no rivet status changes.

🤖 Generated with Claude Code

… result

A persona review panel auditing the showcase material against
docs/safety/verification-honesty.md found this file claiming the silicon run
'validates the wdg driver's IWDG programming + the cannot-un-start effect on real
silicon'. It does not. gust_wdg_silicon.rs arms the watchdog and stops refreshing
it; it never ATTEMPTS an un-start (grep for wdg_refresh/stop/disable in that
firmware returns 0 hits), so no rejection path was exercised on hardware.
p2_cannot_un_start is a source-level Kani property over the pure FSM and stays
exactly that.

Restates what the run does evidence — one happy path, once, on one die: the
dissolved object emitted an unlock/configure/lock/start key sequence the real IWDG
accepted, and the hardware fired — and notes the effect has reproduced across two
sessions (0x1c->0x3c and 0x14->0x34).

Also flags that the ~1.2 s is the CONFIGURED timeout (PR=5, RLR=0x123, nominal LSI),
not a measured interval; the probe-rs log's wall-clock gap is host detection latency
and carries no timing claim.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…IWDG on STM32F100

The G474RE result carried an n=1 caveat. This reproduces it on a different family and
a different die: the identical wdg-thin-cm3.o (same wasm, same dissolve, unrebuilt)
arms the real IWDG on an STM32F100/Cortex-M3 and the hardware fires the reset —
RCC_CSR 0x14000000 -> 0x34000000, IWDGRSTF set. Twice, back to back.

It is also cleaner evidence than the G4 run. probe-rs loses its session when the
watchdog resets the G4, so boot 1 and boot 2 there are two invocations. openocd holds
SWD across the reset, so this is one unspliced capture, and the harness clears RMVF
and starts the CPU with SYSRESETREQ (which sets SFTRSTF, not IWDGRSTF) — a set
IWDGRSTF at boot 2 cannot be stale.

Scope is unchanged: a second die for the same happy path, not a new property. It does
not evidence cannot-un-start, ~1.2 s is still the configured timeout and not a
measurement, and the cross-architecture claim stays narrow — no thin-seam driver
dissolves to RISC-V today (synth 0.49.0 emits no relocations for imported calls;
filed as synth#871), so what is shown is one wasm -> one Cortex-M object -> two dies.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011QG86sovTbfnPNY9SfhSmo
@avrabe
avrabe merged commit f2e0460 into main Jul 29, 2026
61 checks passed
@avrabe
avrabe deleted the docs/wdg-silicon-honesty branch July 29, 2026 05:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant