benchmark — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited benchmark (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.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.
Run OfficeDocBench, regenerate summary.json (the single source of truth for benchmark numbers across the website), and verify the docs site stays in sync.
OfficeDocBench scores live in one place: benchmarks/officedocbench/results/summary.json. From there they propagate to the static site via docs/data/officedocbench-summary.json (a mirror) and the data-bench injector at docs/js/bench-data.js. If you re-run the benchmark without using this skill, you risk:
docs/data-bench and must be hand-edited if the AILANG Parse composite changesThis skill bundles all of those steps so they happen together.
| When | Use script | What it does |
|---|---|---|
| Changed parser code, want to re-verify everything | scripts/full.sh | Full eval across all 8 adapters (~1 minute), regenerates summary, syncs docs |
| Changed parser code, only care about AILANG Parse | scripts/quick.sh | docparse-only eval (~10 sec), regenerates summary, syncs docs |
Just want to refresh summary.json from existing per-adapter results without re-parsing | scripts/refresh-summary.sh | Re-aggregates the existing results/<adapter>/results.json files into a fresh summary.json + mirror |
After any of these, the script automatically:
data-bench)# Standard: re-run all adapters and refresh the site
.claude/skills/benchmark/scripts/full.sh
# Fast iteration: only re-run AILANG Parse
.claude/skills/benchmark/scripts/quick.sh
# Just regenerate summary.json from existing results (no parsing)
.claude/skills/benchmark/scripts/refresh-summary.shdocparse/services/*.ail (parser code) — to verify no regressionbenchmarks/officedocbench/scoring.py or enrich_gt.pydata/test_files/ or new ground truth under benchmarks/officedocbench/ground_truth/Do not use this skill for:
summary.json)eval_officedocbench.py)docparse/services/*.ail
↓ (parser changes)
benchmarks/officedocbench/eval_officedocbench.py --all
↓
benchmarks/officedocbench/results/<adapter>/results.json ← per-adapter detail
↓ (_write_summary aggregates)
benchmarks/officedocbench/results/summary.json ← canonical headline numbers
↓ (mirrored in same script)
docs/data/officedocbench-summary.json ← static-site fetchable
↓ (fetched at page load)
docs/js/bench-data.js → resolves data-bench="<adapter>.<field>" attrs
↓
docs/index.html, benchmarks.html, why.html, vs-pdf-conversion.html,
docs/migrate-from-unstructured.html, pricing.html ← all auto-updatePages not wired to data-bench (they need literal text for SEO/JSON-LD): docs/docx-parsing.html, docs/pptx-parsing.html, docs/xlsx-parsing.html, docs/tables.html, docs/integrations.html. The skill prints a reminder to update these by hand whenever the AILANG Parse composite score changes.
scripts/full.shFull benchmark across all 8 adapters. Run after any non-trivial parser change. Takes ~1 minute. Requires the competitor adapters to be installed (uv pip install -e '.[competitors]') — script warns if missing.
scripts/quick.shdocparse-only run. Use during fast iteration when you only care about whether AILANG Parse regressed. Other adapters in summary.json are left at their previous values, so the site still shows a consistent snapshot.
scripts/refresh-summary.shRe-aggregates existing per-adapter results.json files into a fresh summary.json + docs mirror. Useful if you tweaked the summary writer in eval_officedocbench.py but the underlying scores haven't changed.
All three scripts call scripts/_postcheck.sh at the end to:
.previous-summary.json)The scripts will tell you what (if anything) needs manual attention. Common follow-ups:
results/docparse/results.json for files with status: ERRORSee resources/reference.md for the full data path reference (every data-bench field and where it appears on the site).
/Users/mark/dev/sunholo/ailang-parse)uv per the project rule — never pip or python directlysummary.json and the docs mirror should both be committed; they're the contract between the benchmark and the website~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.