pin-tracking-advisory

Two pins of one part sit outside a tracking bound their datasheet recommends between them.

Remedy

Restore the recommended ordering between the two terminals where the design allows it, or record that the loss of margin is accepted. Unlike the required bound, this costs performance rather than the part.

What it means

A component joined to a seeded datasheet spec has two pins, and the datasheet recommends a tracking bound between them. The datasheet states the bound with a verb like “should” or a phrase like “for best operation”, and the difference between the two pins breaks it.

Why engineers want it

The vendor is telling you how the part works best, not where it breaks. Take a level shifter whose enable “should be at least 1 V higher than the reference for best translator operation”. It will still function below that, with degraded translation margin. That is worth a reviewer’s attention and is not worth failing a build over, so it is a separate rule from pin-tracking-violated rather than the same rule at the same severity.

Keeping the two apart lets a team gate CI on datasheet requirements while still seeing the recommendations in the report. Folding them together would either raise advice to an error or demote a stress requirement to a warning.

Everything else matches pin-tracking-violated

The bound is a signed value on subject - reference; the two evidence tiers are the same, with connectivity settling the shared-net case exactly and the rail-gated name tier as the fallback; and the same inputs are skipped rather than guessed. See that rule’s page for the detail.

One thing differs. pin-tracking-violated handles a relation with no recorded modality, and this rule does not, so it is reported once rather than by both rules.

Query structure

select C in components where spec(C) has pins and relations
  for R in tracking relations of spec(C) where recommended(R)
    S = terminal(C, subject_pin(R)); T = terminal(C, reference_pin(R))   -- may refuse
    if net(S) == net(T): diff = 0                                        -- connectivity
    else: require net.rail(net(S)) and net.rail(net(T)); diff = nominal(net(S)) - nominal(net(T))
    diff outside bound(R) -> finding

Reads: param.pin, param.pin_relation, net.role, net.nominal_voltage, net.name, on_net. Tier R.