@adbayb/stack 3.5.0 → 3.5.1-next.1792937252705.2503019
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/skills/skill-audit/SKILL.md +23 -11
- package/skills/skill-audit/references/checklist.md +13 -11
- package/skills/skill-design/references/anatomy.md +9 -7
- package/skills/skill-design/references/writing.md +1 -1
- package/skills/software-audit/SKILL.md +8 -3
- package/skills/software-audit/references/checklist.md +4 -2
package/README.md
CHANGED
|
@@ -72,9 +72,9 @@ stack release
|
|
|
72
72
|
`@adbayb/stack` ships four [Agent Skills](https://agentskills.io/specification) for coding agents:
|
|
73
73
|
|
|
74
74
|
- [software-design](https://github.com/adbayb/stack/blob/main/stack/skills/software-design/): design and write clean, testable code; the single source of the design rules and glossary.
|
|
75
|
-
- [software-audit](https://github.com/adbayb/stack/blob/main/stack/skills/software-audit/): audit code or pull requests against the `software-design` rules (
|
|
75
|
+
- [software-audit](https://github.com/adbayb/stack/blob/main/stack/skills/software-audit/): audit code or pull requests against the `software-design` rules (depends on `software-design`).
|
|
76
76
|
- [skill-design](https://github.com/adbayb/stack/blob/main/stack/skills/skill-design/): design and write skills with one shared anatomy, plus agent instructions such as `AGENTS.md`; the single source of the writing rules.
|
|
77
|
-
- [skill-audit](https://github.com/adbayb/stack/blob/main/stack/skills/skill-audit/): audit and score skills and agent instructions such as `AGENTS.md` against the `skill-design` rules (
|
|
77
|
+
- [skill-audit](https://github.com/adbayb/stack/blob/main/stack/skills/skill-audit/): audit and score skills and agent instructions such as `AGENTS.md` against the `skill-design` rules (depends on `skill-design` and Anthropic `skill-creator` for skill evaluation).
|
|
78
78
|
|
|
79
79
|
With [pnpm 12.11.0 or later](https://pnpm.io/agent-skills), install the package as a direct dependency and approve its skills:
|
|
80
80
|
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skill-audit
|
|
3
|
-
description: "Audit and score agent instructions: Agent Skills (SKILL.md, references, frontmatter, descriptions) and instruction files such as AGENTS.md, including pull request and diff reviews. Use when asked to review, audit, score, or assess skills or engineering instructions for duplication, single source of truth, rule ownership, conflicting precedence, trigger quality, anatomy drift, actionability, or size budgets.
|
|
3
|
+
description: "Audit and score agent instructions: Agent Skills (SKILL.md, references, frontmatter, descriptions) and instruction files such as AGENTS.md, including pull request and diff reviews. Use when asked to review, audit, score, or assess skills or engineering instructions for duplication, single source of truth, rule ownership, conflicting precedence, trigger quality, anatomy drift, actionability, or size budgets. Execute skill-creator evaluations for skill targets; report findings before fixes. Requires the `skill-design` and `skill-creator` skills."
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: adbayb
|
|
7
7
|
repository: adbayb/stack
|
|
8
|
-
requires:
|
|
8
|
+
requires:
|
|
9
|
+
- "skill-design >=1.0.0"
|
|
10
|
+
- "skill-creator"
|
|
9
11
|
version: "1.0.0"
|
|
10
12
|
---
|
|
11
13
|
|
|
@@ -15,19 +17,20 @@ Audit agent instructions against `skill-design`, report findings first, then fix
|
|
|
15
17
|
|
|
16
18
|
## Prerequisite
|
|
17
19
|
|
|
18
|
-
`skill-design`
|
|
20
|
+
`skill-design` and `skill-creator` are required by the `metadata.requires` array; version bounds apply where declared. If either skill is unavailable, or a declared bound is not met, stop before auditing and ask the user to install or update the affected prerequisite:
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
23
|
pnpm dlx skills add adbayb/stack --skill skill-design -g
|
|
24
|
+
pnpm dlx skills add anthropics/skills --skill skill-creator -g
|
|
22
25
|
```
|
|
23
26
|
|
|
24
|
-
Do not install
|
|
27
|
+
When this gate fails, return only a prerequisite notice: identify what is unavailable or incompatible, state the required version or missing reference when applicable, ask the user to make it available, and include **Score: not assessed (prerequisite blocked)**. Do not report target findings, assign a numerical score, or continue with a partial audit. Never install without explicit approval. After approval, load the prerequisite and confirm the `skill-design` version satisfies `metadata.requires`, `skill-creator` is available, and every mapped reference exists before resuming. If any check still fails, stop and report the incompatibility.
|
|
25
28
|
|
|
26
29
|
`metadata.requires` is a lower bound: if a reference mapped here is missing from the installed `skill-design`, stop and report the incompatibility.
|
|
27
30
|
|
|
28
31
|
## Workflow
|
|
29
32
|
|
|
30
|
-
Never run installs, publishes, or releases while auditing, except installing or updating
|
|
33
|
+
Never run installs, publishes, or releases while auditing, except installing or updating explicitly approved prerequisites with the commands above.
|
|
31
34
|
|
|
32
35
|
### 1. Scope
|
|
33
36
|
|
|
@@ -43,11 +46,17 @@ Trace each rule to its owner and every consumer: skills, `AGENTS.md` files, temp
|
|
|
43
46
|
|
|
44
47
|
Record each finding as an `Output` table row, grading severity and confidence with `references/checklist.md`. If no rule matches, report a gap and propose a rule for its canonical owner instead of inventing one.
|
|
45
48
|
|
|
46
|
-
### 3.
|
|
49
|
+
### 3. Evaluate skill behavior
|
|
47
50
|
|
|
48
|
-
|
|
51
|
+
- For every skill target, including audit-only requests, load `skill-creator` and `skill-design` reference `evaluation.md`; execute representative evaluations using `skill-creator`. Loading the prerequisite, scenario walks, and repository checks do not substitute for executed runs.
|
|
52
|
+
- Write prompts and assertions before running; retain them with outputs, grading results, and available execution transcripts in a session workspace outside the shipped skill. Use fresh contexts and paired baseline runs for new skills, behavior changes, or disputed results; ordinary unchanged-skill audits still require executed evaluations.
|
|
53
|
+
- If execution is unavailable or fails, report the blocker and mark the audit incomplete; do not substitute a claimed success or install tools without approval.
|
|
49
54
|
|
|
50
|
-
### 4.
|
|
55
|
+
### 4. Report before fixing
|
|
56
|
+
|
|
57
|
+
Present the `Output` section's report before editing. If the request is audit-only, stop there. Otherwise, ask whether the user approves the proposed fixes before starting; an explicit request to fix identified issues authorizes fixes only within that stated scope. Ask separately before expanding scope or making destructive changes not explicitly authorized.
|
|
58
|
+
|
|
59
|
+
### 5. Fix with minimal blast radius
|
|
51
60
|
|
|
52
61
|
- Fix only present gaps: add no skills, sections, or rules unless a finding requires them; removing duplicated text is in scope.
|
|
53
62
|
- Fix Blockers first, then Majors. Fix cheap Minors in touched files as a separate change; park the rest in the report. Do not create a commit unless asked.
|
|
@@ -55,10 +64,11 @@ Present the `Output` section's report first. If audit-only, stop there. If fixin
|
|
|
55
64
|
- Edit the owner first, then consumers, guards, and version metadata per the repository's versioning rule.
|
|
56
65
|
- Keep changes to triggers, workflows, or prerequisites separate from wording cleanups.
|
|
57
66
|
|
|
58
|
-
###
|
|
67
|
+
### 6. Verify
|
|
59
68
|
|
|
60
69
|
- Re-run the baseline checks, then the checks that `skill-design` reference `evaluation.md` requires for the fixes.
|
|
61
70
|
- Re-scan touched files against `references/checklist.md`; no new violations. Mark blocked checks as unverified; never claim a clean audit from a partial scan.
|
|
71
|
+
- Before declaring a skill audit complete, confirm step 3 has saved execution evidence and report its location and results. Without that evidence, return an incomplete audit, even when there are no findings or edits.
|
|
62
72
|
|
|
63
73
|
## Output
|
|
64
74
|
|
|
@@ -72,12 +82,14 @@ Present the `Output` section's report first. If audit-only, stop there. If fixin
|
|
|
72
82
|
|
|
73
83
|
Write each Issue as one sentence: the owning `skill-design` rule, then the contradicting text and the agent decision it changes; cite the rule instead of pasting its prose. Keep each Solution to a fix direction.
|
|
74
84
|
|
|
75
|
-
Then totals by severity, reviewed and skipped dimensions, unaudited out-of-scope files, verification limits (Supported rows and Unverified gaps),
|
|
85
|
+
Then totals by severity, reviewed and skipped dimensions, unaudited out-of-scope files, verification limits (Supported rows and Unverified gaps), evaluation evidence location and results (or an incomplete status and blocker), and up to 3 highest-leverage fixes. Always include the five criterion scores and **Total score: ?/10** using `references/checklist.md`, even when scoring was not requested or there are no findings; mark incomplete verification provisional. No findings: say so and skip fixes; do not invent work. When fixing, close with what changed per owner, what was left and why, verification results, and the updated score.
|
|
76
86
|
|
|
77
87
|
## Example
|
|
78
88
|
|
|
79
89
|
Request: "Audit and score our skills."
|
|
80
90
|
|
|
81
91
|
- Findings: 1 Major (a dependent skill restates a rule its prerequisite owns, and the copies conflict), 1 Minor (a reference is not linked from `SKILL.md`).
|
|
82
|
-
-
|
|
92
|
+
- Criteria: Consistency 1/2, Ownership 1/2, Actionability 2/2, Proportionality 2/2, Verification 2/2.
|
|
93
|
+
- **Total score: 8/10** (provisional because trigger checks did not run).
|
|
94
|
+
- Evaluation: representative runs passed; prompts, assertions, outputs, and grades saved in the session workspace; trigger accuracy remains unverified.
|
|
83
95
|
- Top fix: delete the restated rule and link the owning reference.
|
|
@@ -27,7 +27,7 @@ Rules: `skill-design` reference `writing.md`.
|
|
|
27
27
|
|
|
28
28
|
Rules: `skill-design` reference `writing.md`.
|
|
29
29
|
|
|
30
|
-
- Evidence: each instruction states when it applies, its scope and prerequisites, and what to do when blocked; workflow steps name the reference to load and when.
|
|
30
|
+
- Evidence: each instruction states when it applies, its scope and prerequisites, and what to do when blocked; workflow steps name the reference to load and when. Check fix authorization against `SKILL.md` workflow step 4; an audit request alone does not authorize edits.
|
|
31
31
|
- Deltas: walk counterexamples from the instruction's own domain and exceptions (for design rules: a flat input/output script, a data-only transfer object, a closed union switch, a failed lookup versus absence), plus an unavailable prerequisite. A rule that forces speculative work in a counterexample is a finding.
|
|
32
32
|
|
|
33
33
|
## E. Progressive disclosure
|
|
@@ -41,8 +41,8 @@ Rules: `skill-design` reference `writing.md`.
|
|
|
41
41
|
|
|
42
42
|
Rules: `skill-design` reference `evaluation.md`.
|
|
43
43
|
|
|
44
|
-
- Evidence: reference targets, prerequisites, and documented commands exist;
|
|
45
|
-
- Deltas: demand a guard only where drift is costly or already occurred, not for every sentence.
|
|
44
|
+
- Evidence: reference targets, prerequisites, and documented commands exist; guards cover anatomy, links, budgets, and mirrors. For skill targets, check the execution evidence and completion gate in `SKILL.md` workflow steps 3 and 6, including audit-only requests; distinguish executed evaluations from scenario walks and mark unavailable or unrun checks unverified.
|
|
45
|
+
- Deltas: demand a guard only where drift is costly or already occurred, not for every sentence. Do not demand comparative runs for a wording-only change.
|
|
46
46
|
|
|
47
47
|
## Severity
|
|
48
48
|
|
|
@@ -61,14 +61,16 @@ Assign by demonstrated impact on agent decisions, after applying the owning rule
|
|
|
61
61
|
|
|
62
62
|
## Scoring
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
For every audit report, including no-findings reports and requests that do not ask for scoring, score each criterion 0 (absent or conflicting), 1 (partial), or 2 (complete in the audited scope); the total is out of 10. Tie deductions to confirmed findings and keep criteria unchanged for before/after scores. A prerequisite-blocked notice follows the non-numerical status in `SKILL.md` instead.
|
|
65
65
|
|
|
66
|
-
| Criterion | Evidence for 2 points
|
|
67
|
-
| --------------- |
|
|
68
|
-
| Consistency | No unresolved conflicts across canonical rules and consumers; every skill follows the anatomy.
|
|
69
|
-
| Ownership | One owner per rule; consumers link to it, and justified standalone copies have drift guards.
|
|
70
|
-
| Actionability | Clear triggers, prerequisites, scope, evidence requirements, and failure/blocked paths.
|
|
71
|
-
| Proportionality | Rules honor style exceptions and present needs; counterexamples do not force speculative work.
|
|
72
|
-
| Verification | Relevant reference/metadata/mirror checks and scenario
|
|
66
|
+
| Criterion | Evidence for 2 points |
|
|
67
|
+
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
68
|
+
| Consistency | No unresolved conflicts across canonical rules and consumers; every skill follows the anatomy. |
|
|
69
|
+
| Ownership | One owner per rule; consumers link to it, and justified standalone copies have drift guards. |
|
|
70
|
+
| Actionability | Clear triggers, prerequisites, scope, evidence requirements, and failure/blocked paths. |
|
|
71
|
+
| Proportionality | Rules honor style exceptions and present needs; counterexamples do not force speculative work. |
|
|
72
|
+
| Verification | Relevant reference/metadata/mirror checks and scenario or comparative evaluations pass; state any remaining limits and confirm fixes were authorized. |
|
|
73
73
|
|
|
74
74
|
An unresolved confirmed finding prevents full marks in its affected criterion. Unverified relevant areas make the score provisional; 10/10 means no identified gap within the stated scope, not universal perfection or proof from lint alone.
|
|
75
|
+
|
|
76
|
+
End the scoring report with **Total score: ?/10**, replacing `?` with the sum of the five criterion scores; mark it provisional when applicable.
|
|
@@ -26,7 +26,9 @@ license: <license>
|
|
|
26
26
|
metadata:
|
|
27
27
|
author: <owner>
|
|
28
28
|
repository: <owner>/<repository>
|
|
29
|
-
requires:
|
|
29
|
+
requires:
|
|
30
|
+
- "<prerequisite> >=<major>.<minor>.<patch>"
|
|
31
|
+
- "<unversioned-prerequisite>"
|
|
30
32
|
version: "<major>.<minor>.<patch>"
|
|
31
33
|
---
|
|
32
34
|
```
|
|
@@ -35,7 +37,7 @@ metadata:
|
|
|
35
37
|
- `description`: at most 1024 characters in a double-quoted scalar, so colons stay valid; write it per `writing.md`. Drop the "Requires" sentence when there is no prerequisite.
|
|
36
38
|
- `license`, `metadata.author`, and `metadata.repository`: always set, so installed copies stay attributable.
|
|
37
39
|
- `metadata.version`: a semantic version, bumped on contract changes per the repository's versioning rule.
|
|
38
|
-
- `metadata.requires`:
|
|
40
|
+
- `metadata.requires`: optional nonempty array of hard prerequisite skill names, each optionally followed by `>=<major>.<minor>.<patch>`. Use the lowest version within the prerequisite's current major that provides every required rule and reference when it publishes version metadata; otherwise omit the bound. Declare all prerequisites in this array regardless of install source.
|
|
39
41
|
- Leave `compatibility` and `allowed-tools` unset unless a real environment or tool constraint exists.
|
|
40
42
|
|
|
41
43
|
## Body sections
|
|
@@ -54,11 +56,11 @@ Use these level-two headings in this order and no others; omit optional ones tha
|
|
|
54
56
|
|
|
55
57
|
State, in order:
|
|
56
58
|
|
|
57
|
-
1.
|
|
58
|
-
2.
|
|
59
|
-
3.
|
|
60
|
-
4.
|
|
61
|
-
5. A mapped reference missing from
|
|
59
|
+
1. Name each prerequisite in `metadata.requires` and explain that version bounds apply where declared; mention glossary reuse when relevant.
|
|
60
|
+
2. If a prerequisite is missing or too old for its declared bound, stop before doing the work and ask the user to install or update it.
|
|
61
|
+
3. Show each prerequisite's install command in a fenced block, using its verified source and the repository's documented installer.
|
|
62
|
+
4. Never install without explicit approval; after approval, install or load the prerequisite, verify its declared version when applicable, and resume. Never continue with partial work.
|
|
63
|
+
5. A mapped reference missing from an installed prerequisite is an incompatibility to report, not to work around.
|
|
62
64
|
|
|
63
65
|
## Budgets
|
|
64
66
|
|
|
@@ -15,7 +15,7 @@ What to write and where it lives. `anatomy.md` owns the file shape; `evaluation.
|
|
|
15
15
|
- The name and description are all an agent sees before choosing a skill. State the capability, then "Use when" or "Use whenever" with the tasks, artifacts, and phrasings that should load it, including requests that never name the skill.
|
|
16
16
|
- Lean toward triggering: agents tend to skip skills, so name adjacent requests that still need it. Target substantive work; agents answer trivial one-step requests without any skill.
|
|
17
17
|
- Put all when-to-use information in the description; the body is read only after loading. State out-of-scope artifacts in the body intro.
|
|
18
|
-
- End with "Requires the `<prerequisite>` skill."
|
|
18
|
+
- End with "Requires the `<prerequisite>` skill." for one prerequisite, or list all declared prerequisites in the same sentence when there are several.
|
|
19
19
|
|
|
20
20
|
## Body
|
|
21
21
|
|
|
@@ -5,7 +5,8 @@ license: MIT
|
|
|
5
5
|
metadata:
|
|
6
6
|
author: adbayb
|
|
7
7
|
repository: adbayb/stack
|
|
8
|
-
requires:
|
|
8
|
+
requires:
|
|
9
|
+
- "software-design >=1.0.0"
|
|
9
10
|
version: "1.0.0"
|
|
10
11
|
---
|
|
11
12
|
|
|
@@ -23,7 +24,7 @@ pnpm dlx skills add adbayb/stack --skill software-design -g
|
|
|
23
24
|
|
|
24
25
|
Do not install it without explicit approval. After approval, run the command, load the skill, confirm the installed `software-design` frontmatter `metadata.version` satisfies `metadata.requires`, and resume. Do not continue with a partial audit.
|
|
25
26
|
|
|
26
|
-
`metadata.requires` is a lower bound: if a reference mapped here is missing from the installed `software-design`, stop and report the incompatibility.
|
|
27
|
+
`metadata.requires` is a lower bound: if a reference mapped here is missing from the installed `software-design`, stop and report the incompatibility. When prerequisites block the audit, include **Score: not assessed (prerequisite blocked)**; do not invent a numerical score.
|
|
27
28
|
|
|
28
29
|
## Workflow
|
|
29
30
|
|
|
@@ -44,6 +45,8 @@ Scan A-G in order for a full audit; for a PR, cover dimensions touched by the ch
|
|
|
44
45
|
|
|
45
46
|
Trace the changed contract through direct callers, alternate entry points, adapters, exports/configuration, and instruction/template consumers that can affect it. Inspect actual implementations, not only matching names.
|
|
46
47
|
|
|
48
|
+
For test-gap findings, follow the evidence threshold in `references/checklist.md` dimension F; a diff that omits test files alone does not establish missing coverage.
|
|
49
|
+
|
|
47
50
|
Record each finding as an `Output` table row, grading severity and confidence with `references/checklist.md`. If no rule matches, report a gap and propose a rule for its canonical owner instead of inventing one.
|
|
48
51
|
|
|
49
52
|
### 3. Report before fixing
|
|
@@ -85,7 +88,7 @@ Present the `Output` section's report first. For a PR review, default to the rep
|
|
|
85
88
|
|
|
86
89
|
Write each Issue as one sentence: the violated rule or smell, then the evidence and its consequence; cite the rule instead of pasting its prose or theory. Keep each Solution to a fix direction.
|
|
87
90
|
|
|
88
|
-
Then total counts by severity, reviewed/skipped dimensions, unaudited out-of-scope files, verification limits (Supported rows and Unverified gaps),
|
|
91
|
+
Then total counts by severity, reviewed/skipped dimensions, unaudited out-of-scope files, verification limits (Supported rows and Unverified gaps), and up to 3 highest-leverage fixes. Always include the in-scope criterion scores per `references/checklist.md` and end the report with **Total score: ?/10**, even when scoring was not requested or there are no findings; mark incomplete verification provisional. No findings: say so and skip fixes; do not invent work. When fixing, close with what was fixed and each fix's blast radius, what was left and why, and verification results, then end with the updated score.
|
|
89
92
|
|
|
90
93
|
## Example
|
|
91
94
|
|
|
@@ -94,3 +97,5 @@ Request: "Audit `src/refund/` and fix what matters."
|
|
|
94
97
|
- Report: 1 Major (SRP at `src/refund/refund.ts:42`), 1 Minor (a new `fetchRefund` helper uses a banned verb); G skipped, no new input boundary.
|
|
95
98
|
- Fixes: retry policy extracted (blast radius: one module and its test); helper renamed to `getRefund`.
|
|
96
99
|
- Verification: unit tests, lint, and type checks pass; the re-scan finds no new violations.
|
|
100
|
+
- Criteria after fixes: A-F each 2/2; G inapplicable, excluded from the denominator.
|
|
101
|
+
- **Total score: 10/10** (qualitative judgment within the audited scope).
|
|
@@ -42,7 +42,7 @@ Rules: `software-design` reference `clean-code.md`.
|
|
|
42
42
|
Rules: `software-design` reference `cohesion-coupling.md`, `software-design` reference `testing-refactoring.md`, and `software-design` reference `clean-code.md`.
|
|
43
43
|
|
|
44
44
|
- Evidence: change impact/coupling (cycles, globals, hidden I/O, Demeter, surprise side effects, new third-party dependencies); deterministic tests, adapter contracts, and changed boundary/failure coverage; error convention/boundary mapping/query purity/absence; resource ownership, cancellation, retry/idempotency safety, and bounded workload.
|
|
45
|
-
- Deltas:
|
|
45
|
+
- Deltas: a diff that omits test files alone does not establish a coverage gap. Report missing changed-behavior coverage only after identifying the changed contract and inspecting the relevant suite to confirm that its boundary or failure behavior is untested; if that evidence is unavailable, record an investigation gap rather than a finding or score deduction. Untouched coverage gaps are not findings. Trace success, rejection, timeout/cancellation, duplicate/concurrent execution, and partial-failure paths when relevant; check final state, effect count, cleanup, and reported errors.
|
|
46
46
|
|
|
47
47
|
## G. Security
|
|
48
48
|
|
|
@@ -68,6 +68,8 @@ Assign by demonstrated impact, after applying the owning reference's style and s
|
|
|
68
68
|
|
|
69
69
|
## Scoring
|
|
70
70
|
|
|
71
|
-
Use the in-scope A-G dimensions as criteria unless the user names others, and label the score a qualitative judgment. Score each criterion 0 (absent or conflicting), 1 (partial), or 2 (complete in the audited scope); the total is out of twice the criterion count. Tie deductions to confirmed findings and keep criteria unchanged for before/after scores.
|
|
71
|
+
Always score every audit report, including no-findings reports and requests that do not ask for scoring. Use the in-scope A-G dimensions as criteria unless the user names others, and label the score a qualitative judgment. Score each criterion 0 (absent or conflicting), 1 (partial), or 2 (complete in the audited scope); the total is out of twice the criterion count. Tie deductions to confirmed findings and keep criteria unchanged for before/after scores. Exclude inapplicable dimensions from the denominator; if nothing can be assessed, report **Score: not assessed** with the blocker instead of inventing a numerical score.
|
|
72
72
|
|
|
73
73
|
An unresolved confirmed finding prevents full marks in its affected criterion. Unverified relevant areas make the score provisional; a full score means no identified gap within the stated scope, not universal perfection or proof from lint alone.
|
|
74
|
+
|
|
75
|
+
End the scoring report with **Total score: ?/10**, replacing `?` with the criterion total divided by the maximum possible total and multiplied by 10; mark it provisional when applicable.
|