autowiki-ingest — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited autowiki-ingest (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.
The EN→PI→R loop for document ingestion. Process one document at a time. For batch runs (5+ docs), run a watchdog session in parallel.
_navigate.md, SCHEMA.md, index.md, log.md._navigate.md to understand directory layout and conventions.index.md for existing pages and log.md (last 30 lines) for recent activity.Use $WIKI/state.json to survive context resets:
{"current_doc": "...", "chunk": 0, "total_chunks": N,
"extracted": [], "pages_touched": [], "stale_count": 0, "last_seen": <ts>}Read state at session start. Update after each chunk. If state exists, resume from where it left off.
First, check if already ingested. Compute sha256 of the document content. Search existing raw/ files for this sha256:
grep -rl "sha256: <digest>" "$WIKI"/raw/ 2>/dev/nullIf found and the user didn't explicitly request re-ingestion, skip this document. Report: "Already ingested as <path>. Skipping."
If no match, proceed:
read_file for text/code/logs. For PDFs,extract text first: python3 -c "import fitz; ..." or paste content.
raw/<subdir>/<descriptive-slug>.md with frontmatter:---
source_url: <url or file path>
ingested: YYYY-MM-DD
sha256: <hex>
type: article|paper|code|log|data
---
<content>Compute sha256: python3 -c "import hashlib,sys; print(hashlib.sha256(sys.stdin.read().strip().encode()).hexdigest())" < <file>
Subdir: PDFs → papers/, code → code/<repo>/, logs/CSV → logs/, rest → articles/.
Load autowiki-chunk skill for chunking strategy and instructions. Pick strategy by file extension:
| Extension | Strategy |
|---|---|
.md, .txt | prose |
.log, .jsonl | log |
.csv, .tsv | data |
.py, .js, .go | code |
Load ONE chunk at a time. Process it fully before loading the next. To read specific lines: read_file <file> offset=<N> limit=<M>.
Implementation-only code blocks that yield no extractable concepts are normal — don't count them as stale. Only increment stale_count when a chunk yields ZERO items.
From the current chunk, pull out:
Note the provenance: which file, which section/line numbers.
Write extracted items to $WIKI/.tmp/extracted.json (append mode, one JSON object per line).
If a chunk yields ZERO extractable items:
stale_count in state.jsonImportant: implementation-only code blocks that yield no extractable concepts are normal for the code strategy. Only increment stale_count when a block yields ZERO items. Processing details without extracting new knowledge is expected, not a stall.
If a block references entities from earlier blocks (e.g., function using FEATURE_NAMES from imports block), search the current document's already-extracted items before creating duplicate pages. Two functions doing the same thing = one concept page. Update the existing page rather than creating a new one.
If extraction succeeds: proceed to PI phase. Don't touch stale_count. Update state.json: increment chunk counter, set last_seen timestamp.
For each extracted item (entity, concept, claim):
search_files "<name>" path=$WIKI file_glob="*.md" output_mode="files_only"add the new source to frontmatter sources: list, add cross-references. Bump updated date. Write back.
File at entities/<slug>.md or concepts/<slug>.md or claims/<slug>.md.
---
title: Page Title
created: YYYY-MM-DD
updated: YYYY-MM-DD
type: entity|concept|claim
tags: [from SCHEMA.md taxonomy]
sources: [raw/path/to/source.md]
confidence: high|medium|low
contested: false
contradictions: []
---Pages without links are invisible in the knowledge graph.
pages_touched in state.json.Before moving to next chunk:
Compare numbers, qualifiers, context. If claim text doesn't match source, set confidence: low and add a note.
search_files "<topic>" path=$WIKI/claims file_glob="*.md" output_mode="files_only"If found: mark both contested: true, add contradictions: [other-slug], set confidence: low on the newer claim. Do NOT auto-resolve.
high: 2+ independent sources, no contradictions, fidelity verifiedmedium: single source, no contradictions (default for new claims)low: contradiction exists, fidelity issue, or single-source opinionautowiki-index skill to rebuild index and log.If audit disagrees with original confidence, mark contested: true.
for f in "$WIKI"/raw/**/*.md; do
stored=$(grep '^sha256:' "$f" | cut -d' ' -f2)
body=$(sed '1,/^---$/d' "$f" | tail -n +2)
current=$(echo "$body" | python3 -c "import hashlib,sys; print(hashlib.sha256(sys.stdin.read().strip().encode()).hexdigest())")
[ "$stored" != "$current" ] && echo "DRIFT: $f"
done$WIKI/.tmp/ and $WIKI/state.json.In a separate session, check every hour:
state=$(cat "$WIKI/state.json" 2>/dev/null)last_seen > 2h ago → run is dead. Restart from chunk in state.stale_count ≥ 2 → run is stuck. Nudge by injecting alternative chunk size.stale_count ≥ 4 → flag for human.The watchdog never reads document content or wiki pages. Only state.json.
search_files output.raw/ files.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.