Keep the writer prominent while giving every editor credit. The default theme shows editors below the author byline. The first credited editor is visible; additional editors appear in a compact avatar stack that expands to show their names and roles. Credit order follows the post's authors list. Editing and reviewing roles, including copy editor, internal-link-editor, editor, and writing-review-editing, are grouped as editors. Coauthors keep their original order and prominence.

authors:
  - waylon
  - id: copy-editor-agent
    role: copy editor
  - id: linking-agent
    role: internal link editor

Configure contributor names and avatars as described in Authors. The native editorial authoring commands can commit selected human or agent edits and fill in the revision history automatically.

Record a revision

Add an event to editorial_history after committing an editor's changes. Keep previous events. Each event points to one file at one exact revision, even when a commit edits several posts.

editorial_history:
  - schema_version: 1
    event_id: "session-id:pages/blog/example.md"
    author: copy-editor-agent
    role: copy-editor
    action: edited
    recorded_by: copy-editor-agent
    recorded_at: "2026-10-11T15:00:00Z"
    base_commit: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    commit: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    path: pages/blog/example.md
    file_url: https://github.com/OWNER/REPO/blob/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/pages/blog/example.md
    summary: Corrected spelling and grammar.

Replace the example SHAs with real full 40-character commit SHAs and the URL with the matching repository and file. Use action: reviewed for an unchanged review. Set recorded_by to the importer when someone else records existing work; the page displays that distinction. The native tools also record digest fields, diff URLs, and event IDs for later automation. The viewer does not claim that a historical review covers today's content.

Inspect changes

The built post has a collapsed Editorial history section, newest event first. Each entry identifies the contributor, role, action, timestamp, summary, and commit. Readers can open the exact file or its diff in GitHub. These links and the history work without JavaScript.

For edit events with valid before and after revisions, Show changes here loads a small comparison viewer and fetches those two files directly from GitHub. Added words are underlined and removed words are struck through. The viewer compares historical Markdown source, excluding YAML frontmatter. Markdown syntax remains visible; it does not execute historical HTML or reconstruct ownership of the current rendered article. A change affecting only frontmatter reports that no Markdown body changes occurred.

Revision fetching starts only after a reader clicks the comparison control. The build does not contact GitHub or require the site's full Git history. The viewer has no third-party script dependency, limits each file to 512 KiB, and caps comparison work for extensive rewrites. Large rewrites may highlight a whole changed passage rather than each word.

Push the recorded commits before publishing their links. Private repositories, missing revisions, offline connections, and restrictive content security policies can prevent inline comparisons. Readers can retry or open the GitHub diff with their own account. No credentials are sent to GitHub by the inline viewer. For a CSP, allow the site's own scripts and styles and permit connect-src https://raw.githubusercontent.com for inline comparisons.

Custom templates

The normalized template fields are post.editorial_history_view, post.byline_authors, post.byline_editors, and post.additional_editor_count. The original post.author_objects and post.Extra.editorial_history remain available. The default template uses components/editorial_history.html; sites overriding post.html should include that component and conditionally load css/editorial-history.css and js/editorial-history.js when normalized history exists. Asset paths should use theme_asset_hashed. The component supplies the heavy viewer's hashed asset URL for loading only on demand.

Malformed records and unsupported schema versions are skipped. Unsafe or mismatched revision coordinates leave metadata without executable links. GitHub diff links are rebuilt from validated file coordinates, so they always target the recorded file in the recorded commit.