Part 10 · Advanced Topics · Intermediate
Seeds and Coverage Merge
Per-seed coverage artifacts, merge strategy, and data interpretation for closure without overcounting.
Why one seed is never enough
Constrained-random verification explores state space over many seeds. A single seed can hit a narrow region and produce misleading closure confidence. Coverage planning must treat seed as an axis of exploration.
[REG] [COVER] seed contribution model
test T, seed S1 -> coverage C1
test T, seed S2 -> coverage C2
test T, seed S3 -> coverage C3
merged(T) = union(C1, C2, C3, ...)
Stop condition should reference merged progress slope,
not per-run pass/fail count alone.Artifact naming for traceability
# Keep seed in coverage artifact names
run_20260610_axi_random_seed821734.ucdb
run_20260610_axi_random_seed155002.ucdb
run_20260610_axi_random_seed993421.ucdbMerge workflow
Coverage merge should be deterministic and auditable: known input set, stable merge command, and output manifest.
# Generic pattern; actual tool command varies
python3 tools/merge_cov.py \
--input-glob "out/cov/run_*_axi_random_seed*.ucdb" \
--output out/cov/merged_axi_random.ucdb \
--manifest out/cov/merged_axi_random_manifest.json[REG] merge audit trail
inputs:
- run_id
- test_name
- seed
- ucdb path
- status (PASS/FAIL)
output:
merged ucdb
merge manifest
summary report with delta from previous mergeInclude only valid runs
Exclude runs that crashed before coverage dump unless policy says otherwise.
Tag unstable or infra-failed runs separately from design failures.
Prevent duplicate ingestion of same run_id.
Interpreting merged coverage with seed context
Merged percentages can hide inefficiency. Two regressions with same merged number may differ massively in seed count and runtime cost.
[PERF] coverage efficiency view
Regression A:
200 seeds -> 94.1% merged
Regression B:
60 seeds -> 93.8% merged
Interpretation:
B is likely better targeted unless gap analysis proves otherwise.
Track coverage gain per additional seed.def coverage_gain_curve(points):
# points: list[(seed_index, merged_percent)]
gains = []
prev = 0.0
for idx, pct in points:
gains.append((idx, pct - prev))
prev = pct
return gainsSeed-aware closure dashboard fields
merged coverage %
seeds executed and seeds merged
coverage gain over last N seeds
top tests contributing new bins
plateau detection flag
Key takeaways
Coverage closure is a merged multi-seed property, not a single-run metric.
Keep per-seed coverage artifacts traceable by run_id and seed.
Audit merge inputs and exclude invalid/incomplete runs explicitly.
Track marginal coverage gain per seed to detect plateaus early.
Common pitfalls
Merging duplicate artifacts and inflating confidence.
Ignoring pass/fail context when selecting merge inputs.
Chasing raw coverage % without seed efficiency analysis.