$ taskset -c 0-3 <pack>/install/released/node_modules/.bin/nightshade <pack>/findings/freshness-bound-caller-time/vulnerable.compact --config <pack>/findings/freshness-bound-caller-time/config.json --compiler <compact-toolchains>/0.34.0/compactc

MEDIUM — Caller time is not bound to protocol time [freshness-bound-caller-time]
<pack>/findings/freshness-bound-caller-time/vulnerable.compact:14:3
  14 |   startedAt = disclose(expectedTimeWindow);
     |   ^
authenticate accepts caller-supplied expectedTimeWindow and uses it in a state-changing or public effect without an asserted canonical block-time bound. A delayed, future-dated or stale proof may remain valid outside the intended freshness window. This source/effect review does not establish transaction ordering or exploitability.
Source: <pack>/findings/freshness-bound-caller-time/vulnerable.compact:12:29
Call path: authenticate
Remediation: Compare the caller value with block time using canonical blockTimeGte/blockTimeGt and blockTimeLte/blockTimeLt checks, or derive the deadline solely from a kernel-bound timestamp. Keep the bound on the same successful path as the state-changing effect.

Semantic profile: compact-0.34.0-zkir2.
Baseline analysis: complete; selected rules: complete.
Rule coverage: 1 selected rule(s); 0 with incomplete entries.
1 finding(s), 0 suppressed, 0 baseline; 2/2 entrypoint(s) completed; analysis complete. Compiler validation passed.
