markdown-section-summarizer — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited markdown-section-summarizer (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Create section-aware Markdown summaries with strict, auditable sentence counts.
headings, preserved image embeds, and per-section sentence-count comment blocks.
each comment block.
python3 -m pip install -r markdown-section-summarizer/scripts/requirements.txt# Step 1 — build inventory (--language is required; use the ISO 639-1 code of the source document)
python3 markdown-section-summarizer/scripts/build_inventory.py input.md --language en -o input.inventory.json
# Step 2 — generate summary file (headings + preserved images + sentence-count placeholders)
python3 markdown-section-summarizer/scripts/generate_summary.py input.inventory.json -o input.summary.md
# Step 3 — fill in input.summary.md: write the target number of sentences after each comment block
# Step 4 — verify
python3 markdown-section-summarizer/scripts/verify_summary.py input.md --inventory input.inventory.json --summary input.summary.mdSupported language codes (pysbd): am ar bg da de el en es fa fr hi hy it ja kk mr my nl pl ru sk ur zh
floor(sqrt(n)), where n is source sentence count for that section.--language to verify_summary.py._preamble pseudo-section for text before the first heading.) are extracted from prose and excluded from sentencecounts. They are preserved in the summary file and do not affect sentence targets.
Each section has a heading, followed by any image embeds preserved from the source, followed by a comment block:
## Section Heading
<!-- source: 12 sentences (lines 47–61) | target: 3 sentences -->

## Section Heading (no image)
<!-- source: 12 sentences (lines 47–61) | target: 3 sentences -->
## Empty Section
<!-- source: 0 sentences (lines 95–96) | target: 0 sentences — leave empty -->The comment block is for reference only — the verifier ignores HTML comments. Image lines are also ignored by the sentence counter. Sections marked "leave empty" must have no prose in the summary.
generate_summary.py before writing anycontent: it guarantees all section headings are present with correct levels and text, and all image embeds are pre-populated. The verifier requires both before it can validate any individual sentence count.
inventory before checking individual sentence counts. A partial file (missing any headings) fails immediately on the ID check.
deciding what to summarise.
verifier counts only prose sentences — image lines are ignored.
Input: docs/guide.md (English)
python3 markdown-section-summarizer/scripts/build_inventory.py docs/guide.md --language en -o docs/guide.inventory.json
python3 markdown-section-summarizer/scripts/generate_summary.py docs/guide.inventory.json -o docs/guide.summary.md
# fill in docs/guide.summary.md — write prose after each comment block
python3 markdown-section-summarizer/scripts/verify_summary.py docs/guide.md --inventory docs/guide.inventory.json --summary docs/guide.summary.mdExpected output:
build_inventory.py prints a section inventory table.generate_summary.py prints the output path, language, and section counts.PASS: summary matches inventory targets. when all sections match.FAIL: and section-by-section mismatches when any section is off-target.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.