Skip to content

fix(conformance): separate not-applicable checks from met and from review - #662

Merged
haksungjang merged 2 commits into
mainfrom
fix/conformance-not-applicable
Aug 10, 2026
Merged

fix(conformance): separate not-applicable checks from met and from review#662
haksungjang merged 2 commits into
mainfrom
fix/conformance-not-applicable

Conversation

@haksungjang

Copy link
Copy Markdown
Member

What

A check that measures something the document does not contain was counted as
met — "no packages to measure", "no file components", "nothing to relate". That
inverts the incentive: a document declaring fewer parts scores higher than one
declaring them and being measured on them. Measured on four public AI models,
a card naming no dataset collected three format checks for having nothing to
measure, while the one naming three datasets was measured and could lose points.
It is the same inversion #656 fixed for the dataset producer field.

The empty case had also become a mandatory failure. #661 removed the generator's
root dependency edge (keyed on an id nothing in the document defines), so a model
with no declared datasets had no edges left and failed a required check for
having no parts to relate.

Change

Twelve checks now carry naKind: "not-applicable" when their subject is empty,
and such a check leaves both sides of every fraction:

  • verdict tally (mandatory passed / total)
  • advisory coverage base for G7 and the 2026 minimum elements
  • format tally
  • AI profile rollup, including per-cluster counts

It is not folded into the existing review category: a review item has something
to judge and no automated source for it, while this one gives a reviewer nothing
to look at. Reports and the UI label it separately (N/A, muted tone, sorted
below review rows), and the summary line carries the count. A document with parts
and no edges still fails.

Verification

Four public AI models, same settings, before and after:

model format before format after
declares 3 datasets 16/17 9/10 (7 n/a)
declares none 17/17 6/6 (11 n/a)

The 17/17 was the bug: eleven of those checks had nothing to measure. The 2026
minimum elements (17/23 vs 16/23) and G7 (32/51 vs 23/51) are unchanged, so the
baselines that do measure something still say what they said.

  • tests/test-aibom.sh: 262 passed, 0 failed (5 new assertions)
  • tests/test-web-ui.sh: 118 passed, 0 failed
  • frontend: 317 passed, 0 failed (3 new/extended cases), tsc and lint clean
  • shellcheck --severity=warning clean

…view

A check that measures something the document does not contain was reported as
met: no packages to measure, no files, no parts to relate. That ranked a
document declaring less above one declaring more. An AI SBOM whose card names
no dataset collected three format checks for having nothing to measure, while
one that names three datasets was measured on them and could lose points —
the same inversion #656 fixed for the dataset producer field.

It also turned into a mandatory failure. #661 removed the generator's root
dependency edge, which was keyed on an id nothing in the document defined, so
a model with no declared datasets had no edges left and failed a required
check for having no parts to relate.

Mark those checks naKind "not-applicable" and keep them out of both sides of
every fraction: the verdict tally, the advisory coverage base, the format
tally, and the AI profile rollup. Neither met nor a gap a reader can close,
and not a review item either, since a reviewer has nothing to look at. The
reports and the UI carry their own label and a muted state; a document with
parts and no edges still fails.
test-postprocess.sh pinned the earlier reading of an empty package denominator
as met. It stays not-uncovered, which is what that check was defending, but it
is no longer credited either. The data-only case reads the two coverage checks
alone: removing the model from an AI SBOM also takes the 1.7 spec version out
of its allowed range, which fails the document for an unrelated reason.
@haksungjang
haksungjang merged commit 925e73e into main Aug 10, 2026
37 checks passed
@haksungjang
haksungjang deleted the fix/conformance-not-applicable branch August 10, 2026 22:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant