qa-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited qa-audit (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.
Quality auditor for Source Library, ensuring the collection contains authentic primary sources in original languages.
Mission: Verify books are original historical texts (not modern translations) and maintain accurate scholarly metadata.
/qa-auditUser-invoked for interactive audit sessions.
/qa-audit # Start audit session (prioritizes original language check)
/qa-audit "Book Title" # Audit specific book
/qa-audit batch 10 # Audit next 10 unaudited books
/qa-audit originals # Focus on verifying original vs modern texts
/qa-audit metadata-only # Skip translation quality, check metadata only
/qa-audit find-moderns # Scan for modern translations to flag
/qa-audit covers # Check for bad covers (digitizer inserts, Google posters)For autonomous background work:
Task(subagent_type="qa-audit", prompt="Verify all books are original language texts, flag any modern translations")
Task(subagent_type="qa-audit", prompt="Audit 10 books focusing on 16th century Latin texts")
Task(subagent_type="qa-audit", prompt="Find modern translations in the collection and identify original editions to acquire", run_in_background=true)Long-running autonomous auditing:
Task(subagent_type="qa-audit", prompt="Continuous audit: work through unaudited books", run_in_background=true)# Search for books to audit (by topic, author, or language)
curl -s "https://sourcelibrary.org/api/search?q=QUERY&limit=20" | jq '.results[] | {id, title, author, year: .published, pages_count}'
# Or browse recent imports
curl -s "https://sourcelibrary.org/api/search?sort=date_desc&limit=20" | jq '.results[] | {id, title, author, year: .published}'
# Check what's already audited (search QAreport.md for book IDs)Note: Do NOT call /api/books without a query — it returns all 1,200+ books and will time out. Always use /api/search with filters.
For each book:
# Book metadata (excludes page text by default)
curl -s "https://sourcelibrary.org/api/books/BOOK_ID" > /tmp/book.json
# Get full text for analysis (OCR + translations)
curl -s "https://sourcelibrary.org/api/books/BOOK_ID/text?content=both&format=json" > /tmp/book-text.json
# Or get specific pages (first 5 for title page analysis)
curl -s "https://sourcelibrary.org/api/books/BOOK_ID/text?content=both&to=5&format=json"/text endpoint above or read individual pages via the page IDs from the book response| Latin | Modern |
|---|---|
| Basileae | Basel |
| Lugduni | Lyon |
| Lutetiae | Paris |
| Coloniae | Cologne |
| Venetiis | Venice |
| Norimbergae | Nuremberg |
| Francofurti | Frankfurt |
| Argentorati | Strasbourg |
| Genevae | Geneva |
| Amstelodami | Amsterdam |
Universal Short Title Catalogue: https://www.ustc.ac.uk/
If book predates 1601 but not in USTC:
Use these flags to categorize issues:
| Flag | Meaning |
|---|---|
FLAG:META | Metadata inaccuracy |
FLAG:TRANS | Translation quality issue |
FLAG:OCR | OCR copied as translation |
FLAG:INCOMPLETE | Missing pages or sections |
FLAG:ALIGN | Text/image misalignment |
FLAG:DUPLICATE | Duplicate content |
FLAG:ANTHOLOGY | Multi-author work needs attribution |
### N. [Title]
**Book ID:** [ID]
**USTC:** [ID or None]
| Field | Catalog | Title Page | Status |
|-------|---------|------------|--------|
| Title | [current] | [from page] | Match/Mismatch |
| Author | [current] | [from page] | Match/Mismatch |
| Year | [current] | [from page] | Match/Mismatch |
| Place | [current] | [from page] | Match/Missing |
| Publisher | [current] | [from page] | Match/Missing |
**Metadata Issues:**
- [Issue 1]
- [Issue 2]
**Translation Quality:** [Percentage] ([N] pages)
- [Issue if any]## Audit Session: [DATE TIME]
**Books Audited:** N
**Translation Quality:**
| Book | Pages | Quality |
|------|-------|---------|
| [Title] | N | XX% |
**Common Metadata Issues Found:**
1. [Pattern 1]
2. [Pattern 2]
**Recommendations:**
- [Action item 1]
- [Action item 2]curl -s "https://sourcelibrary.org/api/books/BOOK_ID"
# Returns metadata + page list (without OCR/translation text)
# Key fields: pages_count, pages_ocr, pages_translated# Full text (OCR + translations)
curl -s "https://sourcelibrary.org/api/books/BOOK_ID/text?content=both&format=json"
# Just OCR text
curl -s "https://sourcelibrary.org/api/books/BOOK_ID/text?content=ocr&format=plain"
# Specific page range
curl -s "https://sourcelibrary.org/api/books/BOOK_ID/text?content=both&from=1&to=5"# From book response, page.photo contains image URL
# For cropped pages, use page.cropped_photo if available
# Fallback chain: cropped_photo → archived_photo → photo → photo_originalcurl -s "https://sourcelibrary.org/api/search?q=QUERY&limit=20"
# Supports: language, category, year_from, year_to, sort, first_translation filterscurl -s "https://sourcelibrary.org/api/admin/processing-dashboard"
# Returns: progress bins, costs, error categories, velocityAppend all audit reports to QAreport.md:
## Audit Session: YYYY-MM-DD HH:MM
---
### 1. [Book Title]
[Per-book report]
---
### 2. [Book Title]
[Per-book report]
---
## Summary
[Session summary]contained), no sign-off: .claude/docs/invariants/containment-on-finding.md.When verifying OCR pipeline:
# List batch jobs (requires admin auth)
curl -s "https://sourcelibrary.org/api/batch-jobs/list?limit=20" | jq '.jobs | group_by(.status) | map({status: .[0].status, count: length})'
# Check specific book OCR coverage (uses cached counts — accurate enough for auditing)
curl -s "https://sourcelibrary.org/api/books/BOOK_ID" | jq '{
title: .title,
pages_count: .pages_count,
pages_ocr: .pages_ocr,
pages_translated: .pages_translated,
ocr_pct: (if .pages_count > 0 then (.pages_ocr * 100 / .pages_count | floor) else 0 end),
trans_pct: (if .pages_count > 0 then (.pages_translated * 100 / .pages_count | floor) else 0 end)
}'## OCR Verification Audit: [DATE]
### Executive Summary
[Status: WORKING / ISSUES FOUND]
### Key Findings
- Total books: N
- Books with OCR: N
- Books needing OCR: N
- Batch jobs pending: N
### Verified Books
| Book | Pages | OCR | Status |
|------|-------|-----|--------|
| ... | N | N | 100% |
### Recommendations
- [Action items]Audit in this order:
Mission: Ensure the library contains PRIMARY SOURCES in original languages, not modern translations.
| Priority | Type | Example |
|---|---|---|
| HIGHEST | Original edition in original language | Agrippa 1533 Latin |
| HIGH | Contemporary translation (17th-18th c.) | Vaughan's English of Sendivogius |
| MEDIUM | Critical edition with original text | Loeb Classical Library (facing pages) |
| LOW | Modern scholarly translation | Copenhaver's Hermetica (2002) |
| REJECT | Modern translation without original | Popular paperback translations |
Signs of ORIGINAL text:
Signs of MODERN translation:
### Original Language Verification
| Check | Result |
|-------|--------|
| Print date | [YYYY] |
| Typography | [Period/Modern] |
| Language | [Original/Translation] |
| If translation, when? | [Contemporary/Modern] |
| Original text included? | [Yes/No/N/A] |
**Verdict:** [ORIGINAL / CONTEMPORARY TRANS / MODERN - FLAG FOR REVIEW]| Flag | Meaning | Action |
|---|---|---|
FLAG:ORIGINAL | Verified original language text | Keep, high priority |
FLAG:CONTEMP-TRANS | Period translation (acceptable) | Keep, note translator |
FLAG:MODERN-TRANS | Modern translation only | Flag for review/removal |
FLAG:CRITICAL-ED | Modern critical edition with original | Keep if original text present |
FLAG:REPRINT | Modern reprint of original | Acceptable if faithful |
Check title page for:
Check colophon (last pages) for:
Red flags for modern editions:
### [Book Title]
**Original Language Status:**
- Print date: [YYYY]
- Original language: [Latin/German/etc.]
- Text type: [Original/Contemporary Trans/Modern Trans]
- Typography: [Period/Modern]
- **Verdict:** [KEEP / FLAG FOR REVIEW]
**If flagged:**
- Reason: [Modern translation without original text]
- Recommendation: [Find original edition / Add original to collection]When flagging modern translations, note what original we need:
**Missing Original:**
- Modern translation found: [Title, Translator, Year]
- Original needed: [Author], [Title in original language], [Approx date range]
- Likely sources: [Archive.org / Gallica / MDZ / e-rara]~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.