Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
# akcli.toml — reference configuration
#
# Copy to your project root as `akcli.toml`. `akcli` discovers it by walking up from the
# current directory; override with `-C/--config <path>`. Paths are resolved relative to THIS file's
# directory. Unknown keys are rejected with ERROR: BAD_CONFIG.
[project]
# Designator of the MCU whose pin->net mapping `akcli pinmap` reports.
mcu_designator = "U3"
# Schematic pin grid the net checks measure against: bare number = mils, or "Nmil"/"Nmm".
grid = "50mil"
# Rotated undo-backup depth under .akcli/backups/ (1..99; default 3).
backup_depth = 3
# One [[rail]] table per power rail. `akcli power` enumerates rails and sanity-checks voltages;
# `akcli check` uses rail names for net-name-based power/ground detection.
[[rail]]
name = "RAIL_A"
voltage = 3.3
tolerance_pct = 5
# Input file locations, resolved relative to this file's directory.
# [paths] accepts arbitrary keys (string values); an entry ending in .kicad_sym
# is additionally offered to the writer as a symbol source.
[paths]
schematic = "hardware/altium/main.SchDoc"
# dts / pinout_md are reserved — nothing reads them today; feed pin tables to
# `akcli pinmap --expected` (via `akcli expected`) instead.
dts = "firmware/boards/mcu/board.dts"
pinout_md = "hardware/docs/pinout.md"
# Design-intent snapshot `akcli check --intent` / `akcli gate` fall back to when no value/flag is given.
intent = "intent.json"
# `akcli gate`'s sch-pcb-gate board, when --pcb is not given.
pcb = "hardware/altium/main.kicad_pcb"
# `akcli gate`'s bom-lock-gate lockfile (`jlc bom --lock`), when --lock is not given.
bom_lock = "bom.lock.json"
# Where `jlc add`, `library import-altium` and `library new-symbol` place
# converted libraries when --out is not given (a committed asset dir). Without
# this key, only `jlc add` defaults to ./akcli-parts; the `library` commands
# write into the current directory.
parts_dir = "hardware/libs"
# ERC waivers suppress a specific rule on a specific net, with a recorded reason. Each waiver is a
# [[erc_waiver]] table. Waived findings are downgraded to NOTE and tagged with the reason.
[[erc_waiver]]
net = "LED1_GPIO_RD"
rule = "driver_conflict"
reason = "LED1 shares the charger's open-drain STAT output by design; FW reads it as input"
# BOM policy: sourcing-coverage thresholds, stock floor, assembly economics
# and the structural refdes classes that never carry an orderable part.
[bom]
coverage_floor = 0.5 # BOM_MPN_COVERAGE fires below this (fitted parts)
coverage_min_parts = 10 # boards smaller than this skip the coverage check
min_stock = 1 # `jlc bom` low-stock floor
extended_fee = 3.0 # per-Extended-line feeder fee estimate (USD)
[bom.classes]
no_part = ["TP", "FID", "MH", "H", "LOGO"]
# Checker-agnostic waivers, applied centrally to EVERY checker's findings. `code` is a finding
# code or fnmatch glob; `severity` downgrades to note/info or drops with "off".
[[waiver]]
code = "PAIR_INCOMPLETE"
refs = ["USB_D_P"]
severity = "off"
reason = "single-ended debug tap by design"
# Check-family tuning: diff-pair/bus continuity and the group-clearance layout floor.
[check]
pairs = true # keep `--pairs` in the default check set
pair_suffixes = [["_P", "_N"]] # replaces the built-in suffix table
bus_min_family = 4 # BUS_GAP fires for families >= this size
group_clearance = 1000 # mils between functional groups (0 = off)
# Group-layout policy for `arrange --groups` (mils; per-invocation flags override).
[arrange]
group_margin = 200 # clearance between bundles inside a group
group_gap = 1000 # channel between group blocks, both axes
row_width = 4000 # wrap a group's internal shelf past this width
page_width = 20000 # pack blocks side by side, wrapping past this width
2126c3284This file is pinned to the selected release. Download the original to open it in your design tool.