Skip to content

0.5.1

Choose a tag to compare

@TomD4vs TomD4vs released this 05 Sep 01:45
· 25 commits to main since this release

The rest of the audit, plus a defect the same reviewer found in 0.5.0. The generator rule now reads the verb, two checks that were on the list since the first measurement are in, and every rule was measured on an eighth corpus of sixty skills that write files.

A path the sentence says gets written. "Output: docs/report.md", "save the plan to docs/plan.md" and "docs/run.log is generated by the build" are no longer missing paths, whether or not the folder exists yet. The verb nearest the path in its sentence decides, so "read a and write the result to b" still checks a; a list, a table or a fenced block takes the verdict from the sentence that introduces it or from the section heading; in a command, a > redirect, an -o flag and mkdir mark what is written. A verb after the path counts only in the passive, since "x creates users" makes the path the author. A wrongly cased path is reported whatever the sentence says. Up to 0.5.0 the rule fired only when the parent folder was absent, which is the less common half of the cases.

UNKNOWN COMMAND, a fourth check. A note that says "run npm run test:unit", yarn build, make deploy or composer lint when no package.json, Makefile or composer.json git tracks defines that script or target. Every manifest in the repository counts, yarn x and pnpm x also accept a dependency's binary, and a command pointed elsewhere with -w, --filter or make -C is left alone. The suggestion after the arrow is the closest defined name. schemaVersion is 2: the JSON gains unknownCommands.

Heading anchors. [setup](docs/guide.md#quick-start) and [top](#quick-start) are checked against the headings of that page, turned into anchors the way GitHub does it, plus any id or name attribute and {#custom} id. Reported as a broken link with kind: "anchor".

A fenced block in a programming language is not read. The reviewer of 0.5.0 found that require('lib/gone.js') inside a block was cited as require('lib/gone.js, a string no consumer of the JSON could use, and that the same form with the wrong case was silently dropped. A block marked js, python, php and the like is source now, and its strings belong to the language; in a block that is read, require('lib/x.js') and path=lib/x.js are checked as lib/x.js.

Smaller. A link from a nested note that resolves from the repository root and from nowhere else is read from the root, as an agent reads it. foo/ and bar/ are placeholders. A sentence that puts a path in .gitignore excuses it. dist, node_modules and coverage are transient at any depth. A heading in a file with Windows line endings answers to its anchor.

Measured. Fixed corpora first, 0.5.0 against this release, on the three checks both have: the fourth pass is unchanged at 39 findings with 34 real; the fifth goes from 31 findings to 16 with the same 7 real, 23% to 50%; the sixth from 24 to 14 with the same 8 real, 33% to 57%. The two new checks raised 32 findings on the fourth corpus, four commands, all real, and twenty-eight anchors, every one a table of contents that does not scroll on GitHub. Then an eighth corpus, sixty repositories found by searching SKILL.md for "Output", "generates" and "Save to", none on any earlier list, the verb rule frozen before it ran: on the twenty-eight repositories that are not catalogues of skills for other projects, 294 findings to 267, real 133 to 134, precision 45% to 50%; in the seventeen catalogues, 29825 to 29626, and of forty removals read by hand thirty-nine were false and the fortieth became a rule. What stays false there is a skill that documents the project it will be installed into, which no sentence reaches. Three rules were built from that corpus and are therefore unmeasured: the root-relative link, the tool after "generated by", and pnpm --dir. The design page has the tables.

Suite 105 to 124, simulation 97 to 102.