Skip to content

rewrite(phase6): batch 5 — watchdog: one traceability gap found, no catalog change - #158

Merged
SoundMatt merged 1 commit into
rewrite/v3-from-c-rcpfrom
phase6/watchdog
Aug 22, 2026
Merged

rewrite(phase6): batch 5 — watchdog: one traceability gap found, no catalog change#158
SoundMatt merged 1 commit into
rewrite/v3-from-c-rcpfrom
phase6/watchdog

Conversation

@SoundMatt

Copy link
Copy Markdown
Owner

Part of the v3.0.0 ground-up rewrite (#129, ROADMAP.md Phase 17). Phase 6 (requirement catalog), batch 5 of 13.

This batch: watchdog (REQ-WDG-*, 12 c-RCP entries)

No new .fusa-reqs.json entries. REQ-WDG-009/011/012 confirmed as documented, sound non-transfers (c-RCP-specific background-thread/manual-lifecycle API shape, structurally moot in cpp-RCP's RAII design).

One real finding: REQ-WDG-010 is genuinely implemented and tested (mock.hpp's dispatch_e2e_core() kicks the watchdog unconditionally at both call sites, test_mock.cpp has a dedicated end-to-end test) but has zero formal //fusa:req///fusa:test tags anywhere — only prose mentions and an untagged Catch2 string that don't match cpp-FuSa's trace regex. Filed to .fusa-reqs-pending.json as a traceability-tag gap (not a behavioral one), since fixing it needs two tags in mock.hpp/test_mock.cpp — out of this batch's file-scope. Batch 13 (MOCK/PWRMODE) will pick this up.

Verification

.fusa-reqs.json unchanged, byte-identical (544 entries, sec-tested count still exactly 72 — confirmed via diff). Full tree rebuilt from scratch: 0 errors, 0 warnings, 58/58 ctest suites pass.

🤖 Generated with Claude Code

…atalog change

Part of the v3.0.0 ground-up rewrite (cpp-RCP #129, ROADMAP.md Phase 17),
branch rewrite/v3-from-c-rcp. Phase 6 (requirement catalog), batch 5 of 13.

## Scope

watchdog.hpp's REQ-WDG-* prefix. c-RCP has REQ-WDG-001..012 (12
entries); cpp-RCP's catalog already had REQ-WDG-001..008 (8 entries,
prior work); watchdog.hpp/test_watchdog.cpp reference all 12 ids, so
009-012 looked orphaned going in. Investigation found the premise only
half held.

## No new catalog entries this batch

REQ-WDG-009 (synchronous initial verdict), REQ-WDG-011 (default_config
poll interval), REQ-WDG-012 (destroy() null-safety): never tagged
anywhere in cpp-RCP -- they only appear in watchdog.hpp's own
header-comment prose explaining why they don't transfer, and carry no
c-RCP TC18 citation. They're c-RCP-specific API-shape artifacts
(background-thread poll config, cached-state staleness, manual
destroy()) structurally moot in cpp-RCP's RAII/live-compute design.
Confirmed this reasoning is sound; left as documented non-transfers,
no catalog entry, no pending-file gap (nothing is actually missing).

## One genuine finding: REQ-WDG-010 is implemented and tested, but has zero formal tags anywhere

Filed to .fusa-reqs-pending.json as a traceability-tag gap, NOT a
behavioral gap. The behavior itself is real and correctly wired:
mock.hpp's dispatch_e2e_core() calls rx_watchdog_kick() unconditionally
at both its call sites (mock.hpp:1147, mock.hpp:1343), forwarding to
watchdog::Manager::on_request_received(); test_mock.cpp has a
dedicated end-to-end test ("dispatch_e2e kicks the per-stream
RxWatchdog (REQ-WDG-010) on every call...", test_mock.cpp:1739+);
sim.hpp's Simulator independently wires the same hook. The blocker is
purely mechanical: cpp-FuSa's trace tool only counts a requirement as
traced/tested when a literal `// fusa:req`/`// fusa:test REQ-WDG-010`
comment exists somewhere -- mock.hpp's existing prose mentions and
test_mock.cpp's `[REQ-WDG-010]` Catch2 tag string don't match that
regex, so this id has zero formal annotations anywhere despite being
genuinely covered. Adding it to .fusa-reqs.json today (with no real
tag anywhere) would fail CI's hard `cpfusa trace --req-coverage 100`
/tested-coverage gates. Fixing this needs two tags added to
include/rcp/mock.hpp/tests/test_mock.cpp -- both out of this batch's
file-scope (batch 5 is restricted to watchdog.hpp/test_watchdog.cpp).
Filed here so batch 13 (MOCK/PWRMODE, the batch that touches mock.hpp)
can add those two tags and migrate this entry from pending into the
real catalog in the same change.

## REQ-WDG-001..008 re-verified, untouched

Existing tags checked against real code/tests and found accurate --
no placement fix needed, no catalog change.

## Verification

.fusa-reqs.json: unchanged, byte-identical (544 entries, sec-tested
count still exactly 72). .fusa-reqs-pending.json: 19 -> 20 entries
(+1, REQ-WDG-010). include/rcp/watchdog.hpp: expanded its existing
REQ-WDG-010 header-comment bullet with the mock.hpp citation and the
pending-migration note (+21/-3 net). tests/test_watchdog.cpp:
unchanged. Full tree rebuilt from scratch: 0 errors, 0 warnings, 58/58
ctest suites pass (100%).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Signed-off-by: Matt <47545907+SoundMatt@users.noreply.github.com>
@SoundMatt
SoundMatt merged commit a05ab56 into rewrite/v3-from-c-rcp Aug 22, 2026
22 checks passed
@SoundMatt
SoundMatt deleted the phase6/watchdog branch August 22, 2026 11:45
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