IFlowV5.t.sol imports sentinel from V4, not V5
test/interface/IFlowV5.t.sol:7 imports RAIN_FLOW_SENTINEL from src/interface/deprecated/v4/IFlowV4.sol instead of from src/interface/IFlowV5.sol. The test is named IFlowV5Test.testSentinelValue and exists to pin the V5 sentinel value, but it pins the V4 constant directly. The IFlowV5.t.sol file is byte-identical to test/interface/deprecated/v4/IFlowV4.t.sol (except the contract name).
IFlowV5.sol re-exports the sentinel from IFlowV4.sol (lines 23-24, 28). The intent is clearly that V5 reuses the V4 sentinel value — but the V5 test should verify this through the V5 interface, not bypass it.
If IFlowV5.sol ever changes the sentinel re-export (intentionally or by mistake), the V5 test will pass because it does not import from V5 at all.
Fix: change test/interface/IFlowV5.t.sol:7 to import {RAIN_FLOW_SENTINEL} from "src/interface/IFlowV5.sol"; (or the appropriate relative path consistent with #411).
IFlowV5.t.solimports sentinel from V4, not V5test/interface/IFlowV5.t.sol:7importsRAIN_FLOW_SENTINELfromsrc/interface/deprecated/v4/IFlowV4.solinstead of fromsrc/interface/IFlowV5.sol. The test is namedIFlowV5Test.testSentinelValueand exists to pin the V5 sentinel value, but it pins the V4 constant directly. TheIFlowV5.t.solfile is byte-identical totest/interface/deprecated/v4/IFlowV4.t.sol(except the contract name).IFlowV5.solre-exports the sentinel fromIFlowV4.sol(lines 23-24, 28). The intent is clearly that V5 reuses the V4 sentinel value — but the V5 test should verify this through the V5 interface, not bypass it.If
IFlowV5.solever changes the sentinel re-export (intentionally or by mistake), the V5 test will pass because it does not import from V5 at all.Fix: change
test/interface/IFlowV5.t.sol:7toimport {RAIN_FLOW_SENTINEL} from "src/interface/IFlowV5.sol";(or the appropriate relative path consistent with #411).