redline
Read one Text Artifact against the editorial contract, repair what the review found within the budget the invocation allows, say what is left, and close with one mechanical pass. The artifact may come from anywhere: this collection wrote it, a person wrote it, or something else produced it entirely.
$HERE is the directory that contains this SKILL.md, and $MANAGER is the Manager directory: $HERE/../kntnt/ if it exists, else kntnt/ under a Global harness skills directory (~/.claude/skills, ~/.config/opencode/skills, or wherever another Harness keeps them). Neither found: tell the user to install the Manager (npx skills add Kntnt/skills) and stop. $LIBRARY is $MANAGER/library/ — absent, tell the user to run /kntnt update, then stop.
Run uv run --no-cache --no-project "$MANAGER/scripts/kntnt.py" invoke --here="$HERE" with the invocation payload — everything the user typed after /redline, verbatim, however many lines — on stdin. On exit 0, answer the capabilities in its dependencies first: for each one, say whether its confirm sentence is true of you, and where it is not, give its how, change nothing, and stop. Then continue from the JSON. On any other exit print its stdout verbatim and stop: it has already printed what the user is to see, and none of that text is yours to write.
In the JSON, path is the command path as a list, flags holds each flag the user wrote — true where it stood bare, its value where it carried one, a list of values where it was repeated — operands is what followed the flags, in order, and instruction is the Contextual Instruction, or null, applied as $LIBRARY/references/invocation-envelope.md says.
Run every UV command in this Skill with a fresh private directory as TMPDIR, and remove that directory after the command, including when it fails. The private directory belongs to that one command and no other run, so cleanup removes only files this run created.
Arguments
The operand is the Text Artifact: inline text, one local path, or one URL, and exactly one of them — several paths, a glob reaching more than one file, or a directory of texts is more than one. Where the invocation carries no operand, it is the single text the current turn identifies.
--genre=<genre> names a resource under $LIBRARY/references/editorial/genres/, by its filename without the extension.
--technique=<technique> names a resource under $LIBRARY/references/editorial/techniques/, the same way.
--language=<language> names the language or locale whose editorial guidance applies. Any spelling the Collection's resolver reaches is accepted — a canonical code (sv, en_GB), a case or separator variant of one (en-GB, EN_GB), a curated alias (BrE, brittisk engelska), or an ordinary description of a language in any language.
--max=<n> is the Correction Budget: the greatest number of substantive corrections the review may delegate. It takes any non-negative integer and defaults to 1, so an ordinary review includes one correction and one opportunity to verify it. 0 reviews without correcting — the findings come back for the reader to act on, and the closing mechanical pass is still performed — and a higher value bounds a longer loop explicitly. It is a ceiling and never a quota: a run with nothing left to correct stops with the rest of it unspent.
--output=<response|path> names the Output Target. response is the default and the value response states it explicitly; anything else is one filesystem path. It and In-place Editing name two destinations for one text, which is why no form carries both.
--in-place[=<value>] selects In-place Editing. It accepts yes, on, and true against no, off, and false; bare --in-place means on, --in-place=off has the same effect as omitting the option, and the default is off.
Resolution
Genre, technique, and language are each resolved on their own, in this order of precedence:
- The Formal Invocation.
- A recognized Kntnt map in the Text Artifact's leading YAML frontmatter — the reserved
kntnt key and its genre, technique, and language values, and nothing else. A language, lang, genre, or technique key at the top level of the document's own frontmatter belongs to that document, whatever it is named and whatever it holds; frontmatter carrying no kntnt map carries no configuration of this collection's.
- The current Contextual Instruction.
- Applicable Conversation Context.
- Inference from the Text Artifact itself.
- For the technique alone: the technique the resolved genre names as the one it is ordinarily written with, where that genre names one.
- The parameter's default:
general for genre, no technique, and the language of the Text Artifact.
A value found at one level suppresses the levels below it for that parameter alone. An explicit genre beside a language read out of the map and a technique taken from an instruction is an ordinary invocation, not a conflict. Suppression is that precedence working rather than an error: a Contextual Instruction every higher level has already settled leaves nothing for it to settle, and the run continues rather than refusing it as unaddressable guidance. Where saying so is useful, the delivery names the suppressed instruction beside the resolved configuration.
Two things are never inferred. A technique applies because it was selected — by the invocation, the map, an instruction that names one, or the genre that was resolved — and never because the text happens to fall into its shape. A language is settled rather than guessed: where the artifact is materially ambiguous or mixed, with no dominant language or alternation inside paragraphs, name the candidates and ask before anything is reviewed.
A genre inferred rather than named is inferred against what is installed. The genre directory is the list of installed values, and a run inferring one may read a single thing besides that listing: the opening of each installed genre resource — its # <Name> heading and the paragraph under it, which every resource carries so that a reader choosing between them has something to read without loading the rest. Read that far and no further. What a genre asks for is not evidence about whether that genre applies, so a resource read past its opening has been loaded rather than considered — and the loading step below is unchanged by any of this: it loads the genre inference settled on, and no other. Where no installed genre fits what is in front of you better than the default does, the default at the foot of the precedence stands.
Level 6 belongs to the technique alone, and it is read after the genre is settled and out of the genre that was settled: that resource's base half names the technique this kind of text is ordinarily written with, or states that it has none, and nothing else is opened for it. What the genre carries there is a selection rather than evidence — an installed genre names its ordinary arc whatever text is in front of you — so a technique reached this way is settled exactly as an instruction naming one settles it, and a genre naming none leaves the level below it standing.
Handoff Metadata is never required and never created. A Text Artifact carrying no kntnt map is reviewed exactly like one that carries a complete one, and no map is added to it. Where a recognized map exists, it is used as defaults here and synchronized to the resolved configuration in step 8.
none for the technique is a value rather than a gap, and it is how the genre's arc is refused. Written in a recognized map it says that the run which wrote the map resolved no technique; said in an instruction or in Conversation Context it says the same thing at that level. Either settles the parameter where it sits, above the genre's level, so the genre supplies nothing and the draft has no arc. It names no resource, so it is not the uninstalled value the refusal below reaches. --technique takes an installed name and has no spelling for this, which is why the levels below the invocation are where it is said.
A recognized Kntnt map whose value cannot be used — a language nothing installs, a genre or technique that is not there — is reported as unusable artifact metadata and stops the run, unless the Formal Invocation already settled that parameter. It is never quietly read as the nearest usable value, so a spelling such as en_UK never becomes en_GB on its own.
Steps
Settle the single Text Artifact and the options from the JSON. A value outside what ## Arguments admits — --max that is not a non-negative integer, --in-place outside its vocabulary, or more than one Text Artifact — is refused as $LIBRARY/references/invocation-envelope.md says: review nothing, write nothing, and stop. That is the whole of what is refused over the invocation, the engine having already held its form: whatever the operand turns out to say, and whatever the review will have to say about it, an invocation the engine read and these values admit is reviewed. A run that finds itself wanting to refuse one has found a gap in the pages rather than a reason to stop — review the invocation, and name the gap beside the findings where it is worth naming. Done when one Text Artifact and a valid set of options are in hand, or you have stopped.
Settle the destination before anything is reviewed, following $LIBRARY/references/delivery.md. Make every refusal that contract names by reading alone — In-place Editing together with a separate Output Target, an output path equal to the input path, In-place Editing against inline text or a URL or a source that is not a writable local file, and a destination whose parent directory does not exist — so that a refusal has nothing written behind it. Done when the destination is settled, or you have stopped.
Read the Text Artifact's leading YAML frontmatter where it has any, and look in it for one top-level kntnt map. Read genre, technique, and language out of that map and nothing else out of it, and read nothing outside it as configuration. Done when the artifact's recognized values are known to be present, absent, or unusable.
Resolve genre, technique, and language by ## Resolution. A genre or technique is verified against the resources actually installed in the two directories named in ## Arguments; one that is not there is refused as $LIBRARY/references/invocation-envelope.md says, and the run reviews nothing, writes nothing, and stops. Where the genre has to be inferred rather than verified, ## Resolution says what may be read to infer it. Settle the genre before the technique, since the technique's last level reads what the settled genre names. A language selector is verified by uv run --no-cache --no-project "$LIBRARY/scripts/languages.py" resolve --scope=composition --scope=review --scope=anti-slop "<selector>", whose non-zero exit says which of the ways it failed — no installed Language Resource reached, or more than one — and takes that same refusal; an unlisted description of a language is interpreted first, then proposed as one installed candidate and verified through that same command. Report unusable recognized metadata as ## Resolution describes, and ask rather than guess at a mixed language. Nothing has been written yet, so asking costs nothing to undo. Done when all three are settled, or you have asked or refused.
Load what the review is read against, and nothing besides it: $LIBRARY/references/editorial/base.md and $LIBRARY/references/editorial/base.review.md; the selected genre from $LIBRARY/references/editorial/genres/ and the .review.md file beside it where one exists; the resolved technique from $LIBRARY/references/editorial/techniques/ and its .review.md the same way; $LIBRARY/references/editorial/anti-slop.md; and the three language scopes the resolver already returned in step 4. A review extension that is not there is not a defect — a base half on its own is a complete resource. Load no mechanics guidance: the mechanical pass in step 9 resolves its own. Done when those are loaded and nothing else has been.
Review the Text Artifact against everything loaded in step 5, and record what you find as findings: where in the text, which requirement, and what the reader loses. A code sample — a fenced block, an indented block, or an inline code span — is quoted material rather than the text's own prose: its contents are read past rather than read against the rules, so nothing inside one is a finding and nothing inside one is changed, the docstrings, comments, and string literals among them. Prose about code is ordinary prose and is read like every other sentence. Judge only what is in front of you. What the artifact turns out to be is a finding and never a ground for declining to review it: a text that reads as a brief, an outline, or notes rather than a finished piece is reviewed against the resolved genre like any other, and that mismatch is a finding — ordinarily the first one — instead of a reason to stop, to hand the invocation back, or to propose another Skill in its place. Reaching that judgement reads no other Skill's instructions, neither a SKILL.md of theirs nor a help.md; the mechanical pass in step 9 is the one Skill this run ever follows. This Skill never compares the Text Artifact with source material, never asks for material it was not given, and never remarks that source verification was unavailable — Source Fidelity is the contract of the Skill that wrote the text, and a caveat about material nobody supplied is noise in every run that was not one. A contradiction, an unsupported claim, or an editorial defect visible inside the artifact itself is an ordinary finding. Done when the review is complete.
Spend the Correction Budget, up to it and never towards it. While findings remain from the most recent review and budget remains, take one round:
- Delegate the correction to a subagent started fresh for this round, from
correction.md, filled in and delivered as that brief says. Fresh means it carries no history: not what an earlier round found, not what an earlier correction attempted, and not your own reading of the text, so the framing of the round before cannot bias this repair. It receives the complete current Text Artifact and the complete findings of the most recent review — the text as it now stands and every finding as it was recorded, never a summary and never a stale draft — the genre, technique, and language resolved in step 4, and the requirement to leave alone everything the findings do not concern.
- Decrement the budget once per correction, whatever that correction came back with. A round that repaired nothing has still spent what it spent.
- Retain the complete current text as the pre-round Text Artifact. Before the returned text becomes current, compare it with that pre-round Text Artifact and record every removed claim, whether the finding named that whole claim as the defect or the claim sat beside the defect. A shorter text can be clean against step 6 while having silently lost what the earlier state said, so this comparison is part of re-review rather than an inference from the returned text. Where a claim sat beside the defect, reject the returned correction, keep the pre-round Text Artifact as current, carry the original finding forward as unresolved, and treat the attempted loss as the repair-created finding that stops the loop below. Where the finding named the whole claim as the defect, its removal may stand, but the delivery still names the claim that went.
- Take an accepted returned text as the current Text Artifact and review it again, from the top, exactly as step 6 reviews and against everything loaded in step 5. A correction is verified by review and never accepted on the report of whoever made it: an agent reporting on its own work is the one reader who cannot check it. The findings of this review, and not the subagent's account of what it fixed, are the findings from here on.
The loop stops at the first of four conditions, and each ends step 7. It stops when no findings remain, leaving the rest of the budget unspent — a text that is already clean is not corrected again to use up a number. It stops when a correction makes no relevant progress, which is a round whose re-review leaves the findings it was given standing with nothing they named changed: the next round would be the same round, so stop and carry those findings forward, saying which of them are unresolved. It stops when a re-review raises a finding an earlier round's own repair created — a defect the text did not have when it arrived and one of your rounds put there, the clearest case being a finding about material a round removed. You hold every state the text has passed through and are the only party that does: the subagent is fresh by design and each review reads the text in front of it, so a loop that has begun to answer for its own work is visible here and nowhere else. Another round would repair what the round before it did, so stop, carry the outstanding findings forward the same way, and name the repair the new finding followed from, which is the thing a person has to settle. And it stops when the budget is spent with findings left, which carries them forward the same way for a person to finish. Done when one of the four has stopped the loop, or the budget was 0 and there was nothing to spend.
Where step 3 found a recognized kntnt map, synchronize its genre, technique, and language to the values resolved in step 4, writing none where no technique was resolved, and change nothing else in the frontmatter. Where the artifact carries no such map, add none. Done when the artifact's metadata, if it has any of ours, says what this run resolved.
Invoke the installed Proofread Skill exactly once by following $HERE/../proofread/SKILL.md, with the Formal Invocation --language=<resolved> --output=response and the current complete Text Artifact as its operand. If the outer Contextual Instruction contains guidance relevant to mechanical correction, append only that guidance after an explicit --; otherwise pass no Contextual Instruction. Never forward the genre, the technique, the Correction Budget, or unrelated outer context. Do not perform, select, or apply any mechanical corrections yourself: the nested Skill receives the whole artifact and owns the whole mechanical pass. Take its complete result as the Text Artifact from here on; a no-change status means the text you already hold is final. Done when the mechanical pass has run once.
Change nothing substantive after step 9. The mechanical pass is last so that its corrections cannot be undone by later editing, and a sentence improved here would put mechanical errors back into a text that was just cleaned of them. Done when nothing has been touched since the pass.
Deliver by $LIBRARY/references/delivery.md. On a response target, remove every artifact or scratch file this run created and base the delivery account on the filesystem state that remains after cleanup. Say what the review resolved, and where a technique was resolved say where it came from, naming the genre where the genre supplied it, so that somebody who named none can see why an arc was applied; the no-change status carries that too and stays as short as it is. Where findings remain — those step 7 carried forward, whichever of its conditions stopped the loop — deliver the Text Artifact to its Output Target and report the findings separately, saying which are unresolved; that holds where nothing in the text changed too, since the findings are the point of that run, and a file-targeted or in-place run leaves the findings in the response beside the destination it wrote. Where any round removed a passage carrying a claim, whether an accepted repair removed the claim as the defect or a rejected repair attempted to take it beside the defect, report every removed claim separately and say which repair removed or attempted to remove it; this account accompanies a clean artifact too, so the loss is visible without a diff. Where no findings or removed-claim account remain, deliver the Text Artifact alone, and where such a clean run was aimed at the response or at its own source and changed nothing, write nothing and return only the short no-change status. Keep the review to its findings and removed-claim account: the reasoning behind them, the passages you considered and dismissed, and any other correspondence with a correction subagent or a nested Skill stay out of the output. Done when the Text Artifact has been delivered, or the no-change status has been reported.
1---2name: redline3description: Review one supplied text against this collection's editorial contract — its genre, its optional technique, its language, and the shared anti-slop catalogue — repair what the review found through a bounded budget of fresh correction subagents, report whatever is left unresolved, and finish with exactly one mechanical pass.4---56# redline78Read one Text Artifact against the editorial contract, repair what the review found within the budget the invocation allows, say what is left, and close with one mechanical pass. The artifact may come from anywhere: this collection wrote it, a person wrote it, or something else produced it entirely.910`$HERE` is the directory that contains this SKILL.md, and `$MANAGER` is the Manager directory: `$HERE/../kntnt/` if it exists, else `kntnt/` under a Global harness skills directory (`~/.claude/skills`, `~/.config/opencode/skills`, or wherever another Harness keeps them). Neither found: tell the user to install the Manager (`npx skills add Kntnt/skills`) and stop. `$LIBRARY` is `$MANAGER/library/` — absent, tell the user to run `/kntnt update`, then stop.1112Run `uv run --no-cache --no-project "$MANAGER/scripts/kntnt.py" invoke --here="$HERE"` with the invocation payload — everything the user typed after `/redline`, verbatim, however many lines — on stdin. On exit 0, answer the `capabilities` in its `dependencies` first: for each one, say whether its `confirm` sentence is true of you, and where it is not, give its `how`, change nothing, and stop. Then continue from the JSON. On any other exit print its stdout verbatim and stop: it has already printed what the user is to see, and none of that text is yours to write.1314In the JSON, `path` is the command path as a list, `flags` holds each flag the user wrote — `true` where it stood bare, its value where it carried one, a list of values where it was repeated — `operands` is what followed the flags, in order, and `instruction` is the Contextual Instruction, or `null`, applied as `$LIBRARY/references/invocation-envelope.md` says.1516Run every UV command in this Skill with a fresh private directory as `TMPDIR`, and remove that directory after the command, including when it fails. The private directory belongs to that one command and no other run, so cleanup removes only files this run created.1718## Arguments1920The operand is the Text Artifact: inline text, one local path, or one URL, and exactly one of them — several paths, a glob reaching more than one file, or a directory of texts is more than one. Where the invocation carries no operand, it is the single text the current turn identifies.2122`--genre=<genre>` names a resource under `$LIBRARY/references/editorial/genres/`, by its filename without the extension.2324`--technique=<technique>` names a resource under `$LIBRARY/references/editorial/techniques/`, the same way.2526`--language=<language>` names the language or locale whose editorial guidance applies. Any spelling the Collection's resolver reaches is accepted — a canonical code (`sv`, `en_GB`), a case or separator variant of one (`en-GB`, `EN_GB`), a curated alias (`BrE`, `brittisk engelska`), or an ordinary description of a language in any language.2728`--max=<n>` is the Correction Budget: the greatest number of substantive corrections the review may delegate. It takes any non-negative integer and defaults to `1`, so an ordinary review includes one correction and one opportunity to verify it. `0` reviews without correcting — the findings come back for the reader to act on, and the closing mechanical pass is still performed — and a higher value bounds a longer loop explicitly. It is a ceiling and never a quota: a run with nothing left to correct stops with the rest of it unspent.2930`--output=<response|path>` names the Output Target. `response` is the default and the value `response` states it explicitly; anything else is one filesystem path. It and In-place Editing name two destinations for one text, which is why no form carries both.3132`--in-place[=<value>]` selects In-place Editing. It accepts `yes`, `on`, and `true` against `no`, `off`, and `false`; bare `--in-place` means `on`, `--in-place=off` has the same effect as omitting the option, and the default is `off`.3334## Resolution3536Genre, technique, and language are each resolved on their own, in this order of precedence:37381. The Formal Invocation.392. A recognized Kntnt map in the Text Artifact's leading YAML frontmatter — the reserved `kntnt` key and its `genre`, `technique`, and `language` values, and nothing else. A `language`, `lang`, `genre`, or `technique` key at the top level of the document's own frontmatter belongs to that document, whatever it is named and whatever it holds; frontmatter carrying no `kntnt` map carries no configuration of this collection's.403. The current Contextual Instruction.414. Applicable Conversation Context.425. Inference from the Text Artifact itself.436. For the technique alone: the technique the resolved genre names as the one it is ordinarily written with, where that genre names one.447. The parameter's default: `general` for genre, no technique, and the language of the Text Artifact.4546A value found at one level suppresses the levels below it for that parameter alone. An explicit genre beside a language read out of the map and a technique taken from an instruction is an ordinary invocation, not a conflict. Suppression is that precedence working rather than an error: a Contextual Instruction every higher level has already settled leaves nothing for it to settle, and the run continues rather than refusing it as unaddressable guidance. Where saying so is useful, the delivery names the suppressed instruction beside the resolved configuration.4748Two things are never inferred. A technique applies because it was selected — by the invocation, the map, an instruction that names one, or the genre that was resolved — and never because the text happens to fall into its shape. A language is settled rather than guessed: where the artifact is materially ambiguous or mixed, with no dominant language or alternation inside paragraphs, name the candidates and ask before anything is reviewed.4950A genre inferred rather than named is inferred against what is installed. The genre directory is the list of installed values, and a run inferring one may read a single thing besides that listing: the opening of each installed genre resource — its `# <Name>` heading and the paragraph under it, which every resource carries so that a reader choosing between them has something to read without loading the rest. Read that far and no further. What a genre asks for is not evidence about whether that genre applies, so a resource read past its opening has been loaded rather than considered — and the loading step below is unchanged by any of this: it loads the genre inference settled on, and no other. Where no installed genre fits what is in front of you better than the default does, the default at the foot of the precedence stands.5152Level 6 belongs to the technique alone, and it is read after the genre is settled and out of the genre that was settled: that resource's base half names the technique this kind of text is ordinarily written with, or states that it has none, and nothing else is opened for it. What the genre carries there is a selection rather than evidence — an installed genre names its ordinary arc whatever text is in front of you — so a technique reached this way is settled exactly as an instruction naming one settles it, and a genre naming none leaves the level below it standing.5354Handoff Metadata is never required and never created. A Text Artifact carrying no `kntnt` map is reviewed exactly like one that carries a complete one, and no map is added to it. Where a recognized map exists, it is used as defaults here and synchronized to the resolved configuration in step 8.5556`none` for the technique is a value rather than a gap, and it is how the genre's arc is refused. Written in a recognized map it says that the run which wrote the map resolved no technique; said in an instruction or in Conversation Context it says the same thing at that level. Either settles the parameter where it sits, above the genre's level, so the genre supplies nothing and the draft has no arc. It names no resource, so it is not the uninstalled value the refusal below reaches. `--technique` takes an installed name and has no spelling for this, which is why the levels below the invocation are where it is said.5758A recognized Kntnt map whose value cannot be used — a language nothing installs, a genre or technique that is not there — is reported as unusable artifact metadata and stops the run, unless the Formal Invocation already settled that parameter. It is never quietly read as the nearest usable value, so a spelling such as `en_UK` never becomes `en_GB` on its own.5960## Steps61621. Settle the single Text Artifact and the options from the JSON. A value outside what `## Arguments` admits — `--max` that is not a non-negative integer, `--in-place` outside its vocabulary, or more than one Text Artifact — is refused as `$LIBRARY/references/invocation-envelope.md` says: review nothing, write nothing, and stop. That is the whole of what is refused over the invocation, the engine having already held its form: whatever the operand turns out to say, and whatever the review will have to say about it, an invocation the engine read and these values admit is reviewed. A run that finds itself wanting to refuse one has found a gap in the pages rather than a reason to stop — review the invocation, and name the gap beside the findings where it is worth naming. Done when one Text Artifact and a valid set of options are in hand, or you have stopped.632. Settle the destination before anything is reviewed, following `$LIBRARY/references/delivery.md`. Make every refusal that contract names by reading alone — In-place Editing together with a separate Output Target, an output path equal to the input path, In-place Editing against inline text or a URL or a source that is not a writable local file, and a destination whose parent directory does not exist — so that a refusal has nothing written behind it. Done when the destination is settled, or you have stopped.643. Read the Text Artifact's leading YAML frontmatter where it has any, and look in it for one top-level `kntnt` map. Read `genre`, `technique`, and `language` out of that map and nothing else out of it, and read nothing outside it as configuration. Done when the artifact's recognized values are known to be present, absent, or unusable.654. Resolve genre, technique, and language by `## Resolution`. A genre or technique is verified against the resources actually installed in the two directories named in `## Arguments`; one that is not there is refused as `$LIBRARY/references/invocation-envelope.md` says, and the run reviews nothing, writes nothing, and stops. Where the genre has to be inferred rather than verified, `## Resolution` says what may be read to infer it. Settle the genre before the technique, since the technique's last level reads what the settled genre names. A language selector is verified by `uv run --no-cache --no-project "$LIBRARY/scripts/languages.py" resolve --scope=composition --scope=review --scope=anti-slop "<selector>"`, whose non-zero exit says which of the ways it failed — no installed Language Resource reached, or more than one — and takes that same refusal; an unlisted description of a language is interpreted first, then proposed as one installed candidate and verified through that same command. Report unusable recognized metadata as `## Resolution` describes, and ask rather than guess at a mixed language. Nothing has been written yet, so asking costs nothing to undo. Done when all three are settled, or you have asked or refused.665. Load what the review is read against, and nothing besides it: `$LIBRARY/references/editorial/base.md` and `$LIBRARY/references/editorial/base.review.md`; the selected genre from `$LIBRARY/references/editorial/genres/` and the `.review.md` file beside it where one exists; the resolved technique from `$LIBRARY/references/editorial/techniques/` and its `.review.md` the same way; `$LIBRARY/references/editorial/anti-slop.md`; and the three language scopes the resolver already returned in step 4. A review extension that is not there is not a defect — a base half on its own is a complete resource. Load no mechanics guidance: the mechanical pass in step 9 resolves its own. Done when those are loaded and nothing else has been.676. Review the Text Artifact against everything loaded in step 5, and record what you find as findings: where in the text, which requirement, and what the reader loses. A code sample — a fenced block, an indented block, or an inline code span — is quoted material rather than the text's own prose: its contents are read past rather than read against the rules, so nothing inside one is a finding and nothing inside one is changed, the docstrings, comments, and string literals among them. Prose about code is ordinary prose and is read like every other sentence. Judge only what is in front of you. What the artifact turns out to be is a finding and never a ground for declining to review it: a text that reads as a brief, an outline, or notes rather than a finished piece is reviewed against the resolved genre like any other, and that mismatch is a finding — ordinarily the first one — instead of a reason to stop, to hand the invocation back, or to propose another Skill in its place. Reaching that judgement reads no other Skill's instructions, neither a `SKILL.md` of theirs nor a `help.md`; the mechanical pass in step 9 is the one Skill this run ever follows. This Skill never compares the Text Artifact with source material, never asks for material it was not given, and never remarks that source verification was unavailable — Source Fidelity is the contract of the Skill that wrote the text, and a caveat about material nobody supplied is noise in every run that was not one. A contradiction, an unsupported claim, or an editorial defect visible inside the artifact itself is an ordinary finding. Done when the review is complete.687. Spend the Correction Budget, up to it and never towards it. While findings remain from the most recent review and budget remains, take one round:69 - Delegate the correction to a subagent started fresh for this round, from [`correction.md`](references/correction.md), filled in and delivered as that brief says. Fresh means it carries no history: not what an earlier round found, not what an earlier correction attempted, and not your own reading of the text, so the framing of the round before cannot bias this repair. It receives the complete current Text Artifact and the complete findings of the most recent review — the text as it now stands and every finding as it was recorded, never a summary and never a stale draft — the genre, technique, and language resolved in step 4, and the requirement to leave alone everything the findings do not concern.70 - Decrement the budget once per correction, whatever that correction came back with. A round that repaired nothing has still spent what it spent.71 - Retain the complete current text as the pre-round Text Artifact. Before the returned text becomes current, compare it with that pre-round Text Artifact and record every removed claim, whether the finding named that whole claim as the defect or the claim sat beside the defect. A shorter text can be clean against step 6 while having silently lost what the earlier state said, so this comparison is part of re-review rather than an inference from the returned text. Where a claim sat beside the defect, reject the returned correction, keep the pre-round Text Artifact as current, carry the original finding forward as unresolved, and treat the attempted loss as the repair-created finding that stops the loop below. Where the finding named the whole claim as the defect, its removal may stand, but the delivery still names the claim that went.72 - Take an accepted returned text as the current Text Artifact and review it again, from the top, exactly as step 6 reviews and against everything loaded in step 5. A correction is verified by review and never accepted on the report of whoever made it: an agent reporting on its own work is the one reader who cannot check it. The findings of this review, and not the subagent's account of what it fixed, are the findings from here on.7374 The loop stops at the first of four conditions, and each ends step 7. It stops when no findings remain, leaving the rest of the budget unspent — a text that is already clean is not corrected again to use up a number. It stops when a correction makes no relevant progress, which is a round whose re-review leaves the findings it was given standing with nothing they named changed: the next round would be the same round, so stop and carry those findings forward, saying which of them are unresolved. It stops when a re-review raises a finding an earlier round's own repair created — a defect the text did not have when it arrived and one of your rounds put there, the clearest case being a finding about material a round removed. You hold every state the text has passed through and are the only party that does: the subagent is fresh by design and each review reads the text in front of it, so a loop that has begun to answer for its own work is visible here and nowhere else. Another round would repair what the round before it did, so stop, carry the outstanding findings forward the same way, and name the repair the new finding followed from, which is the thing a person has to settle. And it stops when the budget is spent with findings left, which carries them forward the same way for a person to finish. Done when one of the four has stopped the loop, or the budget was `0` and there was nothing to spend.758. Where step 3 found a recognized `kntnt` map, synchronize its `genre`, `technique`, and `language` to the values resolved in step 4, writing `none` where no technique was resolved, and change nothing else in the frontmatter. Where the artifact carries no such map, add none. Done when the artifact's metadata, if it has any of ours, says what this run resolved.769. Invoke the installed Proofread Skill exactly once by following `$HERE/../proofread/SKILL.md`, with the Formal Invocation `--language=<resolved> --output=response` and the current complete Text Artifact as its operand. If the outer Contextual Instruction contains guidance relevant to mechanical correction, append only that guidance after an explicit `--`; otherwise pass no Contextual Instruction. Never forward the genre, the technique, the Correction Budget, or unrelated outer context. Do not perform, select, or apply any mechanical corrections yourself: the nested Skill receives the whole artifact and owns the whole mechanical pass. Take its complete result as the Text Artifact from here on; a no-change status means the text you already hold is final. Done when the mechanical pass has run once.7710. Change nothing substantive after step 9. The mechanical pass is last so that its corrections cannot be undone by later editing, and a sentence improved here would put mechanical errors back into a text that was just cleaned of them. Done when nothing has been touched since the pass.7811. Deliver by `$LIBRARY/references/delivery.md`. On a response target, remove every artifact or scratch file this run created and base the delivery account on the filesystem state that remains after cleanup. Say what the review resolved, and where a technique was resolved say where it came from, naming the genre where the genre supplied it, so that somebody who named none can see why an arc was applied; the no-change status carries that too and stays as short as it is. Where findings remain — those step 7 carried forward, whichever of its conditions stopped the loop — deliver the Text Artifact to its Output Target and report the findings separately, saying which are unresolved; that holds where nothing in the text changed too, since the findings are the point of that run, and a file-targeted or in-place run leaves the findings in the response beside the destination it wrote. Where any round removed a passage carrying a claim, whether an accepted repair removed the claim as the defect or a rejected repair attempted to take it beside the defect, report every removed claim separately and say which repair removed or attempted to remove it; this account accompanies a clean artifact too, so the loss is visible without a diff. Where no findings or removed-claim account remain, deliver the Text Artifact alone, and where such a clean run was aimed at the response or at its own source and changed nothing, write nothing and return only the short no-change status. Keep the review to its findings and removed-claim account: the reasoning behind them, the passages you considered and dismissed, and any other correspondence with a correction subagent or a nested Skill stay out of the output. Done when the Text Artifact has been delivered, or the no-change status has been reported.