You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
A type's id.width takes a min/max span as well as an exact count. A mnemonic drawn from a concept rather
than cut to a length can then admit both std-PR and std-SECRET under one declaration. kac validate reports an
id outside the span as id-format and names both ends. An exact width: 4 behaves as it always has.
filename.carries-id: false keeps a type's id out of its filenames. Its records are filed by topic alone, and
nothing then reads the head of a filename as an id: id-matches-filename stays silent, slug-length measures the
whole stem, and a link to the file is a link rather than a citation. kac validate refuses the three spans it
cannot act on. One beside a filename that still carries the id, because secret-handling.md would otherwise bind
to whichever id its first segment happens to spell. One on a numbered type, which pads to a single width so that
ids sort. One whose min: sits above its max:, which no id can meet.
A field can require the part of the record it points at. A type declares part-required: true beside the
field's ref:, and kac validate reports an id there that names the record whole. The message uses the target
type's own word for a part, so a field pointing at policies asks for a clause. kac validate also reports the key
declared with no ref: to resolve against, and one pointing at a type that keeps no parts.
Changed
Standards take mnemonic ids.std-0001 becomes std-VCS. A number records the order things were created, and
a reader meeting one in a control's verifies: learns nothing. Filenames are untouched, because a standard is
already named for its rule area. A corpus that wants its numbered standards back claims .schema/standards.yaml with a skip: entry in .corpus.yaml, which stops kac update replacing it.
kac generate heads a table per folder in a type's index. A type that declares a field with from: sub-path
groups its index rows on the first folder below the type, so a policy folder holding Delivery, Governance,
Operations and Security reads as four tables instead of one long list. A record filed deeper joins the table its
first folder heads. A type whose records all sit directly in its folder gets the single table it has always had.
implements: on a standard names clauses.implements: [ pol-EVER ] becomes one entry per clause the standard
puts into practice, as pol-EVER.BRANCH. The bare id claimed the whole policy, so a standard discharging six of
eight clauses read to a coverage report as full cover and the other two disappeared. The shorthand is refused
rather than admitted beside the list, because it is a keystroke shorter than the honest form. A corpus that wants
the old reading back claims .schema/standards.yaml with a skip: entry in .corpus.yaml, which stops kac update replacing it.
The derived column is dropped from a table that repeats it. Every row under a heading of Security carries security, so the Category column says nothing there and is left out. A record filed deeper keeps it, because platform/node under a heading of Platform is the one place node is written down. A corpus using no folders at
all loses a column that was empty in every row.
Fixed
A schema key spelled no or off now switches its behaviour off.on-type-page: no in _checks.yaml read as on-type-page: true, because only the exact word false was taken, and the check was then written onto a type page
the schema had excused it from. Both spellings of each answer are read.
kac update finds a seeded record the corpus filed in a sub-folder. A record's folder sets its category, so a
corpus files a seeded policy under policies/governance/ and still holds it. Compared by path, the corpus read as
holding none, and update offered a second copy at the seeded path. Accepting it left two records carrying one id,
which kac validate then failed on id-unique. A seed absent from its path is now looked for by the id it carries,
anywhere under its type's folder, and a match is left alone under --policy full as well as under cautious. A
record's relative links are written for the depth it was seeded at, so there is no copy full could write a folder
down that would resolve.