Added
- Add machine-readable
--jsonoutput toavoid-ai-writing-gateand exposepass,total-findings, andfailed-filesstep outputs in the GitHub Action (#252). - Note in the README that the pinned
v3.35.0Action example predates the step outputs and--json, and cover the gate's--jsonoperational-error paths and the Action's output writer with executed tests.
Changed
-
Return one final rewrite after audit, correction, and available verification instead of publishing a first-pass draft and a superseding copy. Corrective edits and preservation repairs now share the two-pass limit;
--iterate 1|2, clean no-ops, protected or intentional residuals, edit-in-place reporting, and unavailable-check status remain explicit (#203). -
Define one editing contract for rewrite and file-edit decisions. Cleanup now separates candidate matches, justified findings, and authorized edits; preserves source-supported facts, attribution, negation, uncertainty, technical terms, intentional rhetoric, protected content, and established voice; allows explicitly requested structure or register changes without invented evidence or experience; respects context skips before voice targets; leaves clean input unchanged when no separate transformation is requested; and no longer requires confirmation solely because a clearly scoped file is large (#202).
-
Link the GitHub Marketplace listing from the Action instructions and pin the
example workflow to the releasedv3.35.0tag. -
Make acknowledgment loops a judgment-only rule. The detector no longer reports the
acknowledgment-looptype: its three phrases also open ordinary email, support, and docs replies ("To answer your question from Tuesday: ...", "You're asking about the retry limit. It is five by default ..."), and "the question of whether" is standard analytical English. The engine now exposes 53 issue types. The skill keeps the rule, with the deletion test and carve-outs (#239).
Fixed
- Require explicit skill names matching their directories and reject duplicate frontmatter keys, including mixed quoted/unquoted keys, while retaining required names in every generated distribution (#259).
- Accept
--context marketingand--context personalin theavoid-ai-writingscoring CLI, which previously rejected them with exit 2 even though the engine and the gate CLI support all four contexts.--helpnow lists the same values in both binaries (#207). - Detect unsegmented-script documents (Chinese/Japanese: no inter-word spaces) before the word gate and label them
Unsupported scriptinstead ofToo short, with the reason and CJK character count instats. The check recognizes the full Unicode Han and kana scripts (including supplementary-plane and halfwidth forms) and declines only when CJK characters dominate the non-whitespace text, so newline-wrapped lines cannot bypass it and short English documents with an incidental place name stay scorable. The gate CLI now exits 2 on such files — matching the documented unscannable-input exit code — instead of passing silently at every threshold, and the repository self-scan reports declined documents instead of scoring them as clean while keeping raw and exemption-aware declines distinct (#241). - Align false-positive preprocessing with CommonMark for backtick fence info strings and multiline setext headings, preserve unique normalized units as modified when only whitespace boundaries move their source spans, reject Windows OpenCode command shims with an actionable native-binary error, and recognize first-person
Iinside otherwise targeted Title Case headings (#314). - Restrict Title Case header word separators and trailing whitespace to horizontal whitespace, so a match can never run past one physical line.
\salso ate newlines, which let two unrelated lines or a blank-line-separated fragment combine into a single heading match that neither line independently satisfied (#291). - Report the underlying OpenCode export launch error instead of a secondary
stderr.trim()exception during rewrite evaluation. - Preserve non-tracking query parameters when removing AI-referrer parameters from URLs during rewrite validation (#210). Removing a tracker that sits directly before bold markers, a dash, or an ellipsis no longer reports the URL as altered.
- Replace four superlinear Markdown scans reachable through the detector API with bounded or forward-only parsing. Validate corpus cache IDs, stage and retry cache replacements, isolate CLI-test files in private temporary directories, and require push-triggered releases to prove the package version changed.
- Replace the preservation validator's fenced-code regex with a line scanner that tracks the opening fence marker and run length, so a fence closes only on the same marker at equal or greater length per CommonMark. A
~~~line inside a ``` block (the normal way to document Markdown fences) is content, and a three-backtick line inside a four-backtick fence no longer closes it. The same scanner replaces the marker-agnostic matcher inscripts/self-scan.js(#236). - Stop the preservation validator's fence scanner from opening a fence on a backtick line whose info string contains a backtick, which CommonMark forbids. A prose line that began with a triple-backtick inline span opened a fence that ran to end of document, so every later prose edit reported
code-block-modified.scripts/self-scan.jshad the same gap and exempted the rest of the document from its scan.