Fix scanner false negatives, skill plumbing, and Windows install; rebase pass 1 onto blader 2.9.1 - #1
Open
adevra wants to merge 5 commits into
Open
Conversation
- copy_scan.py: stop exempting headings, blockquotes, * bullets, and table cells from the em-dash rule (the suppression regex was inherited from a web-source scanner). Code stays out of scope via stateful fence tracking, blank-line-anchored indented blocks, and inline-code blanking. - copy_scan.py: report all non-overlapping matches per line instead of breaking after the first, and flag en dashes alongside em dashes. - structural_scan.py: group paragraphs with real line numbers so tidy_closer hits are not offset by trailing blank lines. - add tests/run_tests.sh (16 fixture assertions) and .gitattributes.
The bundled pass-1 skill was a fork of upstream 2.1.1. Upstream 2.9.1 adds the never-invent-facts rule (with a fabrication check in the output loop), voice calibration from a writing sample, nine more patterns, false-positive guidance, and invocation modes. The old copy's worked examples rewrote vague claims into invented specifics, teaching what that rule forbids; upstream has since fixed them. Frontmatter now records the upstream version it tracks. Re-applied on top: the pass-1-of-2 scope note, the plain-emotion paragraph, the public-facing-copy section, and the pipeline handoff. Plumbing: copy_scan.py now lives inside the humanizer skill, so the path the skill tells the model to run resolves after install.sh (it previously pointed at a file install.sh never copied). Bash added to allowed-tools, since the skill runs a Python scanner. install.sh falls back to copying when ln -s is refused.
- README: style is not weak in StoryScope (85.8% style-only, 99.8-99.9% for text baselines); the finding is durability under rewriting. LAMP result now carries its scope (278 Gemini stories, Gemini as rewriter) and both numbers. - copy-tells.md: record the upstream auditor dissent on the em-dash 7.1% rank. - PIPELINE: the two --strict contracts differ; document each. - ATTRIBUTION/LICENSE: reproduce the MIT notices the file itself requires, and credit the structural skill to upstream rather than to this repo. - CHANGES.md: what this fork changed and why.
Git Bash turns 'ln -s' into a deep copy unless MSYS is set up for native symlinks, and reports success either way, so an install that claims to be linked silently stops tracking 'git pull'. mklink /J needs no elevation and behaves like the symlink the installer intends.
Removes CHANGES.md (its content is the PR description), the fork notes in README/ATTRIBUTION, the extra LICENSE copyright line, and restores the NulightJens clone URL.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I installed this and hit a few things that stopped the skills from working as documented. Fixes are grouped so you can take or drop each one separately.
The scanner missed em dashes in most markdown prose
copy_scan.pyinherited its suppression regex fromdevibe_scan.py, where the input was web source. That regex skips any line starting with#,>,*, or|, so em dashes in headings, blockquotes,*bullets, and table cells were never flagged. In a markdown draft that is a lot of user-facing copy going unchecked.* A star bullet—with dashreported clean.Code still stays out of scope, but now on purpose: fenced blocks are tracked statefully, indented blocks count as code only when they open after a blank line (so a list continuation is still prose), and inline code spans are blanked before matching, which preserves match offsets.
Two smaller things in the same file. Both scanners had a
breakafter the first matching pattern per rule per line, soSupercharge, unleash, and effortlesslycounted once instead of three times. And the rule only looked for—, whileSKILL.md§14 bans en dashes too, so–now matches as well.structural_scan tidy_closer line numbers drift
The old code rebuilt the last two paragraphs as a string and back-computed an offset with
len(lines) - len(tail.splitlines()). Any trailing blank line throws that off. A closer on line 6 got reported as line 8. Paragraphs are now grouped while keeping each line's real number, so the offset math is gone.copy_scan.py was not installed with the skill that calls it
It lived in
scripts/at the repo root, butinstall.shonly installsskills/*. After installation, the humanizer skill tells the model to runpython3 scripts/copy_scan.pyand that path does not exist. I moved it toskills/humanizer/scripts/copy_scan.py, next to howstructural_scan.pyalready ships, and both skills now reference their scanner relative to their ownSKILL.md. Docs andinstall.shfollow.While in there:
Bashwas missing from the humanizer skill'sallowed-tools, so the skill instructed running a Python script with no permission to run anything.install.sh silently stopped tracking git pull on Windows
Git Bash turns
ln -sinto a deep copy unless MSYS is configured for native symlinks, and it reports success either way. The install claims to be linked,git pullthen updates nothing, and there is no sign of it. I verified this on my own machine: appending a line to a source file did not show up through the installed path.mklink /Jneeds no elevation and behaves like the symlink the installer intends, so Windows now gets a junction, with a copy as the fallback and a message saying so.Pass 1 rebased onto blader 2.9.1
This is the opinionated commit. Drop it if you would rather sync upstream yourself, since the rest does not depend on it.
The bundled skill was a fork of blader 2.1.1. Upstream is at 2.9.1 and the gap includes two guardrails that change output quality more than any pattern in the list:
Also in the gap: nine more patterns (aphorism formulas, manufactured punchlines, persuasive authority tropes, signposting, fragmented headers, hyphenated pairs, passive voice, diff-anchored writing, conversational openers), a false-positive section, a list of human-writing signals to preserve, and three invocation modes.
The stack's own additions are re-applied on top: the pass-1-of-2 scope note, the plain-emotion paragraph in PERSONALITY AND SOUL, the public-facing-copy section, and the pipeline handoff. The frontmatter now records which upstream version it tracks, so the next sync is a diff instead of an archaeology exercise.
Documentation
I checked the research claims against the paper before touching anything, and the numbers all hold: 93.2%, 84.8%, 91.1%, 85.8%, 68.4%, the LAMP delta, and the full feature table in
storyscope-findings.md. Two places where the framing outruns the source:copy-tells.mdcalls the em dash "the highest-signal writing tell in the entire dataset." The upstream synthesis kept it at number one but recorded that one of its five auditors argued the count is inflated by incidental punctuation rather than actual complaints. That caveat now travels with the number.PIPELINE.mdsaid both scanners exit 1 on any hit under--strict. The structural one exits 1 only at its 2-hit threshold, which is the better behavior, so I documented it rather than changing it.ATTRIBUTION.mdstates that the MIT obligation is to keep the copyright notice, but no upstream notice appeared anywhere in the repo. The notices for Siqi Chen and Carter Johnson are now reproduced there, andcopy_scan.pycarries its upstream notice in its docstring.tests/run_tests.sh
16 fixture assertions, no dependencies beyond Python and bash. They cover every behavior above: markdown prose is scanned, code is not, multi-hit lines, en dashes,
copy-ignore, exact closer line numbers, tail scoping, and both--strictcontracts. Run it after editing any rule and you find out immediately whether the rule still matches the docs.Both scanners also report clean on the repo's own docs.
Left alone deliberately
The hype vocabulary matches
unlock your potentialbut notunlock their potential. Widening the word lists is a different judgment call from fixing defects, so it is not in here.Description written with the humanizer skill from this repo, then scanned with both passes.