Skip to content

Reports and machine contracts

RustSys exposes product reports for direct jobs and a workspace envelope for revision-aware commands. They are different JSON contracts. Read the format/schema before interpreting fields, and keep the exit status and exact input artifacts alongside the JSON.

Synthesis report

rustsys synth --report FILE writes a JSON report. In direct file mode, --print json also emits it on stdout. The counter quickstart includes these values; this is a selected-field excerpt, not the whole object:

{
  "format": "rustsys-synth-report",
  "format_version": 1,
  "top": "counter",
  "area": 115.0,
  "sequential_cells": 8,
  "combinational_cells": 37,
  "logic_depth": 4,
  "estimated_delay": 0.3,
  "state_bits_rtl": 8,
  "state_bits_retained": 8,
  "after_reset": [],
  "uninitialized_dont_care": false,
  "assume_full_case": false,
  "assume_parallel_case": false,
  "map_backend": "cpu",
  "time_unit_ns": 1.0
}
Field Interpretation
cells Map from cell name to instance count; sum counts for total cells.
cell_area, area Library cell areas and total area in library area units.
logic_depth, estimated_delay Mapping quality estimates; delay uses the library time unit reported by time_unit_ns.
aig_nodes_before, aig_nodes_after Logic size before/after optimization.
map_requested_cuts, map_effective_cuts Requested search breadth and the breadth actually used under the memory budget.
map_cut_memory_budget_bytes Cut-storage budget; not measured process RSS.
runtime_s, phase_s, map_phase_s Engine/phase timing; not a substitute for externally measured end-to-end wall time.
unused_cells Cells that cannot be used and the corresponding reasons.
electrical Optional load-aware refinement results and unresolved targets.

Timing estimates do not include routed wires or clock-tree effects. Without a separate analysis, timing signoff and DRC remain unchecked. No missing result should be translated into zero violations.

Check report

The native report format is rustsys-check-synth-report, version 2. Selected fields from the quickstart:

{
  "format": "rustsys-check-synth-report",
  "format_version": 2,
  "verdict": "equivalent",
  "outputs_checked": 9,
  "state_pairs_checked": 8,
  "rtl_state_bits": 8,
  "netlist_state_elements": 8,
  "unmatched_rtl_state_bits": [],
  "after_reset": [],
  "uninitialized_dont_care": false,
  "assume_full_case": false,
  "assume_parallel_case": false,
  "mismatches": [],
  "errors": [],
  "internal_error": false,
  "undecided": []
}

mismatches holds differences and counterexample information. errors identifies rejected models or failures. undecided records exhausted proof/search budgets. supply_ports, discovered state relations, constant-state checks and uninitialized choices make scope changes inspectable. sweep describes an optimization of the proof flow, and seq_sim records optional simulation, including a skip reason where applicable.

Use the verdict directly. Do not infer equivalence from an empty mismatch list, zero simulation failures, a successful model export, or the number of obligations attempted. See proof scope.

Workspace envelopes

rusteda --format json and rustsys -w DIR --format json print one rusteda.v1 object on stdout. Standard keys are always present; tool-specific keys are added by the command.

Key Meaning
schema Envelope contract, currently rusteda.v1.
ok Whether the operation completed, rather than whether every analyzed property passed.
command, workspace Invoked operation and selected workspace.
base_rev, rev, new_rev Revision context; absent values are null.
scope Analysis scope, such as top, corners and equivalence status.
completeness Explicit completeness metadata when supplied.
metrics Command summary metrics.
diagnostics Structured severity, code, location, message and help.
error Structured operation failure, or null.
next_actions Suggested canonical POSIX-shell command lines.

Workspace synthesis can embed its product report as report and, with --check, its check report as check. A successful counter example has new_rev: "rev2", scope.equivalence: "equivalent" and check.verdict: "equivalent". The scope's refinement spelling uses initial_state_refinement, whereas the product verdict is initial-state-refinement; parse the correct field for the selected contract.

A completed negative/undecided check can commit evidence and set ok: true while returning exit 3/5. Gate an acceptance decision on operation status, the expected verdict, and its scope. timing: "not_analyzed" and equivalence: "unchecked" are explicit missing analyses, not passing results.

The workspace specification defines all envelope keys, diagnostic codes and commit behavior.

Run records and event streams

run.json uses format: "rustsys-run", format_version: 1. It records the command, canonical command, working directory, program version, compiled runtimes, input file roles/paths/sizes/hashes, output paths, timings and terminal status. events.jsonl stores one event per line with elapsed time.

The recorded input hashes are 64-bit FNV-1a values; workspace tables use xxh3 hashes. Neither is a cryptographic authenticity proof. Benchmark evidence additionally pins artifacts with SHA-256 inventories. Retain exact bytes and stronger hashes when your audit requirements call for them.

Run IDs and timestamps vary. Netlist bytes are deterministic for identical inputs/options on supported backends; runtime fields are not. Report readers reject newer unsupported format versions rather than treating them as compatible. For the complete contract, see the job protocol.