manuscript-canon-ledger — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited manuscript-canon-ledger (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.
A snapshot tells you what canon is in one book. This ledger tells you what canon is across the series and which changes were on purpose. That distinction is the whole point: it lets manuscript-continuity-audit flag only unintentional drift instead of drowning the author in intentional evolution (a character aging, a relationship deepening, a secret shifting).
From the current working directory, walk up for .manuscript/. The ledger lives at the path the profile's ledger_path names (default .manuscript/canon-ledger.json), relative to that project root. If there is no .manuscript/ yet, invoke manuscript-profile-setup first (it creates the folder and seeds an empty ledger).
The JSON is the source of truth. The xlsx is a one-way view — never edit the xlsx as the authority; edit the JSON, then re-render. Keep both inside the project's .manuscript/ folder so they travel with the manuscript.
value — the current canonical factstatus — STABLE (safe), DISPUTED (sources disagree; see governed_by OQ),EVOLVING (changes on purpose; see governed_by delta)
baseline / since — where it was establishedconflict / note — what diverges and wheregoverned_by — the OQ or delta id that rules this attributefrom, to,book, chapter, reason, intentional: true, and status. A difference matching a delta is NOT an error — it is recorded evolution.
OQ-n) with severity, baseline,conflict, options, recommended, and decision (null until decided).
When no ledger exists, write this skeleton to ledger_path:
{
"schema_version": 1,
"ledger_version": "0.1.0",
"title": "",
"series": "",
"author": "",
"updated": "",
"baseline_source": "",
"books": [],
"canon": [],
"deltas": [],
"open_questions": [],
"legend": {
"status": {
"STABLE": "Safe, settled canon.",
"DISPUTED": "Sources disagree; governed by an open question (OQ-n).",
"EVOLVING": "Changes on purpose; governed by a delta (Dn)."
}
}
}Fill title/series/author from the profile if available.
Read the JSON, find the entity/attribute. Report the value, its status, and the governing OQ/delta. If DISPUTED, say so and cite the open question — never present a disputed value as settled.
When the author makes an intentional change, append a delta with from→to, the book + chapter where it happens, and the reason. Set the affected attribute's status to EVOLVING and point governed_by at the new delta id. Bump ledger_version patch. Re-render the xlsx.
To raise: add an OQ-n with baseline, conflict, options, recommended. Set affected attributes to DISPUTED, governed_by the OQ. To resolve: set decision, apply the decided value to the attribute, flip its status to STABLE (or EVOLVING if the resolution is a delta), and record a delta if the decision changes established canon. Bump ledger_version minor.
Extract that book's canon (characters, places, timeline, threads, established facts, each cited to chapter + short quote), then merge:
STABLE with since.OQ-n (or, if the authorconfirms it's intentional, record a delta). The ledger never silently overwrites established canon.
Run scripts/render_ledger.py <ledger_path> to regenerate the human view next to the JSON (canon-ledger.xlsx in the same .manuscript/ folder). Requires openpyxl (pip install openpyxl).
ledger_version is semver: patch for a delta/citation, minor for an OQ resolution or a book seed, major for a schema change. Always update updated (pass the date in; do not rely on the system clock).
manuscript-continuity-audit loads this JSON FIRST, then, for every cross-book difference it finds:
deltas entry → "intentional evolution (delta Dn) — not a flag."DISPUTED → "governed by OQ-n (undecided)" — not a fresh error.proposed fix, and offer to record it (as a delta if intentional, or a new OQ).
This is the difference between a snapshot and a graph that grows with the series.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.