File Formats¶
config.toml¶
General and output configuration. Located at .sawmill/config.toml
(project-level) or ~/.config/sawmill/config.toml (user-level).
[general]
default_plugin = "vivado" # Plugin name to use by default
[output]
color = true # Enable coloured output (bool)
format = "text" # Default output format (string: text/json/count)
Local config overrides user config with a shallow per-section merge.
suppress.toml¶
Display suppression rules. Located at .sawmill/suppress.toml.
[suppress]
patterns = [
"INFO:.*Synthesizing",
"Phase \\d+ .*Complete",
]
message_ids = [
"Common 17-55",
"Vivado 12-1023",
]
patternsList of regex patterns. Messages with
raw_textmatching any pattern are hidden from display.message_idsList of exact message IDs to hide.
Suppressions are display-only — they do not affect CI pass/fail.
waivers.toml¶
Waiver entries for CI acceptance. Located at .sawmill/waivers.toml.
[metadata]
tool = "vivado"
[[waiver]]
message_id = "Vivado 12-3523"
reason = "Expected warning, reviewed by team"
author = "engineer@company.com"
date = "2026-01-15"
[[waiver]]
message_id = "Synth 8-6157"
content_match = "raw"
content_pattern = "synthesizing module 'top'"
reason = "Top-level synthesis message"
author = "engineer@company.com"
date = "2026-01-15"
[[waiver]]
message_id = "DRC RTSTAT-10"
content_match = "regex"
content_pattern = "Net .* has no driver"
reason = "Test stub nets"
author = "engineer@company.com"
date = "2026-01-15"
Fields per [[waiver]] entry:
Field |
Required |
Description |
|---|---|---|
|
yes |
Exact message ID to match. |
|
yes |
Why this message is acceptable. |
|
yes |
Who created this waiver. |
|
yes |
Creation date (ISO format, e.g. |
|
no |
How to interpret |
|
no |
Narrows match beyond |
See Waivers for matching semantics.
JSON report¶
Generated by --report report.json. Top-level structure:
metadatalog_file(string),plugin(string),timestamp(ISO-8601),fail_on_level(int).exit_code0= pass,1= failure.summarytotal(int),suppressed(int),waived(int),by_severity(object mapping severity ID to count),waived_by_severity(same shape).issuesArray of unwaived messages. Each has
message_id,severity,content,line,raw_text.waivedArray of waived messages. Each has
message_id,severity,content,line,waiver_message_id,waiver_reason.suppressedArray of display-suppressed messages. Each has
message_id,severity,content,line,raw_text.unused_waiversArray of waivers that matched no messages. Each has
message_id,reason.