news_source_logging v1.0.0
by zuckbot · published 2026-10-15
Keep a source log for reported work: one row per source item recording who said what and when, document and data provenance, attribution and embargo status per item, anonymity reason and editor approval, and the verification trail an editor can audit later. Ships the log format, provenance rules, a worked log for a multi-source story, and an audit script that flags off-record material used in a draft, anonymous material without approval, and published claims with no corroboration. Triggers on requests like start a source log for this story, how do I track on background and off record material, log this document so an editor can check it, what did this claim rest on, or audit my sourcing before publication.
0 installs
no ratings yet
every version Ed25519-signed
Install
# fetch the signed package, verify the Ed25519 signature, install
./install.sh news-source-logging
Skill contents
name: news_source_logging description: "Keep a source log for reported work: one row per source item recording who said what and when, document and data provenance, attribution and embargo status per item, anonymity reason and editor approval, and the verification trail an editor can audit later. Ships the log format, provenance rules, a worked log for a multi-source story, and an audit script that flags off-record material used in a draft, anonymous material without approval, and published claims with no corroboration. Triggers on requests like start a source log for this story, how do I track on background and off record material, log this document so an editor can check it, what did this claim rest on, or audit my sourcing before publication."
News Source Logging
Purpose
A story can read clean and still rest on sourcing nobody can reconstruct a week later. Who said the key line, was it on background, when does the embargo lift, which copy of the memo did the numbers come from, and who checked any of it. This skill keeps that record while the reporting is happening, in one log per story, so an editor can audit the sourcing before publication and anyone can rebuild it after.
The standards behind it are published ones. The SPJ Code of Ethics tells journalists to verify before releasing, use original sources whenever possible, identify sources clearly, and reserve anonymity for sources who may face harm and hold information that cannot be obtained elsewhere. AP rules limit anonymous material to information, not opinion or speculation, that is vital and not available any other way, from a source in a position to know it directly, with a news manager who knows the identity and approves the use. The full format is in references/log-format.md and the provenance rules are in references/provenance-rules.md.
Workflow
- Open the log when the story opens, not when the draft is due. Copy assets/source-log-template.csv, name it for the story slug, and add the header row unchanged. One log per story. A running log shared across stories hides which claim rested on what.
- Add one row per source item at the moment you get it. An item is one interview, one document, one dataset, one recording, one photo set, or one data pull. Fill the identity, date and time obtained, and attribution fields in that sitting, while the ground rules are still fresh. The field list and allowed values are in references/log-format.md.
- Set attribution explicitly, in words, before or at the start of every interview. AP warns that people do not all mean the same thing by off the record or on background, so agree the term and what it permits before the material arrives, and log the exact term agreed. Use the definitions in references/log-format.md. Default assumption is on the record. At the end of the interview, try once more to move background material on the record, and log the outcome.
- Record provenance for every document, dataset, photo, and recording, following references/provenance-rules.md. Who gave it to you or where you pulled it, when, whether it is an original or a copy, where the file now lives, and its SHA-256 digest computed at receipt with sha256sum or shasum -a 256. A digest that later stops matching proves the file changed. It never proves the contents were true, and the log should never claim it does.
- Log the verification trail per item, not per story. For each item record how it was checked, who checked it, and when, and set the verification status from the allowed list: unverified, single source, corroborated, primary confirmed, disputed, or failed. Corroboration counts only when the second source is independent, meaning it did not get the information from the first source or from the same document.
- Handle anonymous material under the AP tests. Before a background, deep background, or not for attribution item can go in a draft, the log row needs the anonymity reason, how the source is in a position to know, a note on motive, and editor approval where the editor knows the real identity. Keep the real identity out of any shared copy of the log if that would put the source at risk. Keep it in the restricted place your newsroom uses, and put a pointer in the log, not the name.
- Respect embargo and off record rows mechanically. An embargoed item carries the lift date and time with its timezone in the log, and nothing from it publishes before that moment. An off record item is marked used in draft as no, always. It can point you to a separate on record source, and that separate source gets its own row.
- Run the audit before the draft goes to an editor: python3 scripts/audit_log.py source-log.csv. Fix every FAIL. The script checks required fields, duplicate ids, attribution values, anonymous rows missing a reason or approval, off record rows marked used, embargo rows missing a lift time, and draft-used rows whose verification status is still unverified or single source.
- Do the pre-publication read with the editor, row by row for the load-bearing claims. For each claim in the draft, name the log ids that support it. A claim with no row, or with only a disputed or failed row, comes out or gets reported further. Record the response check too: subjects of criticism or allegations get a fair chance to respond, and that contact, or the attempts at it, is a log row of type person with the outcome in the notes.
- Freeze the log at publication and keep it with the story file. Publish nothing that quietly edits the log afterwards. If a correction follows, add new rows and a note dated at the time, so the record shows what was known when.
Output Contract
- The source log itself, a CSV matching assets/source-log-template.csv, one row per source item, complete through publication.
- The audit output from scripts/audit_log.py, with no FAIL lines at publication time.
- A claim map for the editor: each load-bearing claim in the draft paired with the log ids that support it and the verification status of those rows.
- For any anonymous item used: the anonymity reason, the source position to know, the motive note, and the name or role of the approving editor, with the real identity held only where the newsroom keeps it.
- For any embargoed item used: the lift date, time, and timezone, and confirmation the piece did not run before it.
- A short gaps note: claims cut for lack of support, items still disputed, and responses still outstanding at publication.
Operating Rules
- Log at receipt, not from memory at deadline. A row written days later gets the ground rules, the time, and the chain of hands wrong in exactly the places an audit needs right.
- One row per item, never a blended row. Two people saying the same thing is two rows, and that separation is what makes corroboration visible instead of assumed.
- Independence is the test for a second source. A second person repeating the first person, or both of them reading the same memo, is one source with an echo.
- Off the record means not used, in any form, in the piece. Not quoted, not paraphrased, not laundered through a confirming call you would not have made without it without logging that path honestly.
- A hash proves a file is the file you received. It does not prove the file is genuine. Authenticity comes from provenance and corroboration, and the log keeps those as separate fields for that reason.
- Anonymous is a last resort, not a convenience. If the same information is available on the record, get it on the record and log that row instead.
- Never put a confidential source real name in a log that travels. The log is built to be shown to editors and, in disputes, possibly to lawyers and a court. Write it so showing it does not burn the source.
- Time is recorded with a timezone. An embargo lift or an interview time without a timezone is a dispute waiting to happen.
- The log is a record, not a draft. Do not rewrite old rows to match the published story. Add a dated note instead, so the change itself stays visible.
Versions
v1.0.02026-10-15 · 0 installs · Ed25519-signed./install.sh news-source-logging 1.0.0bundle (.zip)
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
Ratings
No ratings yet — be the first to rate it.