Repository navigation
0.1.11 — a fourth surface status, and stored reports checked when read
Most of what follows applies only if your target answers an unknown-flag probe with an explicit
empty set. Item 4 is the exception — it can move an exit code for anyone holding stored report
files, whatever their target does.
No rule verdict, conformant, fullyVerified or acc check exit code moves.
1. A fourth surface.status: enumerated-none. A target that answers an unknown-flag probe
with a present-but-empty set now records what it said, instead of not-enumerated — which meant it
named no set, and dropped the path from the census. In the text report:
stated an empty set of flags at the root under `validFlags`; 7 rejections read, and the set the target named held nothing (the target's own answer, not silence read as one)
Recognised keys are every pairing of valid/accepted/allowed/known/supported/available
with flags/options/switches/arguments, plus choices. choices is the exception: at the
root an empty one still records not-enumerated, because the root is also where the kit reads
choices as a list of subcommands. Below the root it mints the new status like any other key.
2. Your report can gain declaration findings. The path enters the census instead of being
dropped, and is compared against an empty accepted set — so every flag your declaration marks
valid there is reported declared-not-accepted. This happens even with no recorded-surface batch,
if your root states an empty set:
1 of 1 declared command path compared; 1 disagreement (modelled declaration)
declared-not-accepted --help at (root) [probed-by-kit]
The trailing tag names where the accepted set came from, not which side declared the flag.
A run whose only evidence was empty enumerations no longer prints THE DIFF DID NOT RUN — the text
report's notice that no comparison happened — and a clean headline can gain a
· but see N declaration disagreement(s) clause.
If your CI asserts on a disagreement count or on the compared-paths fraction, re-baseline it.
And note a finding can be your serializer rather than your parser: an empty array reads the same
whether a tool has nothing to declare or something dropped the contents.
3. A new JSON field, emptySetKeys — an array of strings naming which recognised keys held the
empty set, so you can check the claim against your own bytes. Absent, not empty, on every other
status. It appears at .data.surface.emptySetKeys, on each entry of
.data.recordedSurfaces.readings[], and on each row of acc compare's .data.surfaces[].
4. acc report and acc compare now reject a malformed stored report. A surface carrying
flags on any status other than enumerated, or missing flags on enumerated, exits 2
(usage) with details.reason of flags-on-non-enumerated-surface or
enumerated-surface-without-flags. Previously compare accepted such a file at exit 0 and report
republished it. enumerated-none is not enumerated for this rule — it carries no flags.
Rewrite a rejected file with acc check <target> --json; there is no override, so a report whose
target you no longer have cannot be read by either command.
5. An acc older than this release mis-renders reports written by this one. It prints "nothing
readable was recorded" for the new status, the opposite of what it means. Reached through
acc report and acc compare, which accept any report file — so upgrade anywhere those run.
6. A stored not-enumerated written before this release is ambiguous. It was the only way to
say "named no set", so it cannot be told apart from a target that answered with an empty set, and it
cannot be recomputed. Re-run acc check if the distinction matters.
7. skills/acc/SKILL.md was wrong about coverage. It said adopting an enumerated rejection
converts part of your report from unverified to checked. It does not. What does still hold is
declaring your machine-readable default — "defaultOutput": "json" in acc.config.json.
0.1.11 (2026-09-03)
Features
- acc: the declaration diff admits the set the target named and left empty (6a8e425)
- acc: the third enumeration state, and a renderer that cannot fall through (05419c9)
- kit: a recorded reading publishes emptySetKeys, and the guide says what it carries (ca0a84f)
Bug Fixes
- acc: an empty
choicessettles nothing, and the exhaustiveness error names its member (c4b2782) - acc: carry the enumerated-none near-miss clause across check and compare (af69a27)
- acc: the empty-
choicesexclusion is a position, not a property of the key (8ec16f6) - check: re-type VERDICT_WORD as Record<SurfaceStatus, string> (3738419)
- compare: a malformed stored report is a usage error, not an internal one (0ab567c)
- kit: a stored status this build cannot read renders a sentence, not a token (5722d23)
- kit: the half of the flags contract the guard left open (8656c49)
- lint: the version check read git-ignored scratch, and its skip list was hand-kept (2d623cf)
- report: the second boundary that published a malformed surface (9a6319e)
- skills: the anchor check read a number that diagnoses nothing (ae1c21d)