opp-repl-fingerprint-tests — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited opp-repl-fingerprint-tests (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Fingerprint tests hash a trajectory of per-event simulation state (event types, packet counts, etc.) and compare the result against a value stored in the project's fingerprint_store JSON file. A tiny behavioral change produces a completely different hash, catching regressions that pass smoke/statistical tests.
Upstream reference: https://github.com/omnetpp/opp_repl/blob/main/doc/fingerprint_tests.md
SimulationProject parameter fingerprint_store (default "fingerprint.json") points to a JSON file containing (config, run_number, sim_time_limit) -> fingerprint entries. INET convention: tests/fingerprint/store.json.
update_fingerprint_test_results(simulation_project=inet_project, sim_time_limit="1s")
Output includes INSERT lines for every new entry:
[04/42] Updating fingerprint . -c PureAlohaExperiment -r 3 for 1s INSERT 856a-c13d/tplx ... Multiple update fingerprint results: INSERT, summary: 42 INSERT (unexpected) in 0:00:01.567
Re-running the update when nothing has changed gives KEEP (baseline preserved):
Multiple update fingerprint results: KEEP, summary: 7 KEEP in 0:00:00.218
r = run_fingerprint_tests(simulation_project=inet_project, sim_time_limit="1s")
Output:
[02/42] Checking fingerprint . -c PureAlohaExperiment -r 1 for 1s PASS ... Multiple fingerprint test results: PASS, summary: 42 PASS in 0:00:01.129
Re-run only failures, or narrow to a region after intentional changes:
r.get_fail_results().rerun() update_fingerprint_test_results(simulation_project=inet_project, working_directory_filter="examples/ethernet", sim_time_limit="10s")
Typical CI workflow starting from an empty store:
opp_run_fingerprint_tests --load inet.opp -p inet -t 1s
opp_update_fingerprint_test_results --load inet.opp -p inet -t 1s
opp_run_fingerprint_tests --load inet.opp -p inet -t 1s
A FAIL means the live simulation trajectory no longer matches the stored hash. Two useful follow-ups:
TaskResult (see opp-repl-tasks-and-results):
failed = r.get_fail_results().results[0] ft = failed.simulation_task_result.get_fingerprint_trajectory()
compare_simulations() orcompare_simulations_between_commits() (see opp-repl-comparing-simulations) to locate the first divergent event.
fingerprint. Keep sim_time_limit stable across runs or regenerate the baseline.
(config, run, time limit).Running the tests with a different sim_time_limit than was stored yields SKIP (no baseline for this key).
fingerprint_store JSON alongside intentionalbehavioral changes — otherwise CI will keep failing.
simulation is deterministic. Non-deterministic features (e.g. real-time scheduler, certain exponential() RNG setups without fixed seeds) will produce PASS/FAIL flapping.
opp-repl-running-simulations — underlying run machinery.opp-repl-comparing-simulations — locate the divergence.opp-repl-tasks-and-results — .get_fingerprint_trajectory().opp-repl-statistical-tests — coarser, scalar-level regression.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.