All skills
danjdewhurst avatar

/feedback-triage

@2d67b42

This skill should be used when the user asks to "process beta reader feedback", "alpha reader feedback", "feedback round", "synthesize reader feedback", "reader notes", "beta feedback", "reader readiness check", "review copy", "send the draft to readers", "share with readers who don't use GitHub", "triage the reader panel", or wants to collect, reconcile, and act on external reader feedback for a story project. NOT for rounds with a professional editor (use editorial-review), or for checking a manuscript is ready to query or publish (use submission or publishing).

Use this Skill: https://skilld.dev/gh/danjdewhurst/story-skills/feedback-triage

This session only. Nothing lands on disk.

SKILL.md

≈147 tokens always: the name and description. ≈2.8k when used: this file. ≈1.8k more on demand in 2 files.

Feedback Triage

Overview

Process alpha/beta reader feedback as a structured, reconcilable workflow: collect per-reader feedback files, hold all revision until the round is complete, synthesize convergent/divergent/single-reader findings into a decision record with a readiness verdict, and hand a concrete revision plan to the revision-continuity skill.

Prerequisites

A story project with at least one drafted chapter (or a complete draft) that readers have read. Verify story.md exists in the project root.

When to Use

  • Starting a feedback round (recruiting readers, sending chapters out)
  • Recording feedback as it arrives
  • Synthesizing a completed round into decisions
  • NOT for revising the manuscript (use revision-continuity with the synthesis's revision plan)
  • NOT for the agent's own critique of the draft (use revision-continuity audits; reader feedback is external input)
  • NOT for producing simulated persona reads (use reader-panel; this skill synthesises the round it writes)

Workflow

1. Set up the round

  1. Decide the round scope: which chapters readers get (chapters-read range) and how many readers (2–4 per round is typical; one reader is a data point, not a round).

  2. Create the round folder: feedback/round-{N}/.

  3. Give readers a review copy they can open without a terminal:

    git tag feedback-round-{N}
    story build . --format html --stamp feedback-round-{N}

    Tag the commit you share (with the user's approval) so the round's text can be rebuilt later. The single-file HTML copy in dist/ has a table of contents, the build stamp at the top, and a paragraph label beside every paragraph (ch03-p12 is chapter 3, paragraph 12). A label is the chapter and the paragraph's position in that build, not a permanent id: any earlier edit in the chapter renumbers it, and story move changes its chapter part. Ask readers to cite the label, the build stamp, and the paragraph's first few words with each note. For projects on GitHub, the templates/github/review-copy.yml workflow publishes the HTML copy to GitHub Pages on each push to main, stamped with the date and short commit, with a Note link beside every label (--note-url) that opens the issue form prefilled with the label, build, and first words, and templates/github/ISSUE_TEMPLATE/manuscript-note.yml gives readers an issue form with label, build, first few words, note type (typo or wording, confusing, continuity, pacing, character, sensitivity or authenticity, loved this, other), how much it affected their reading, and the note. Create a manuscript-note label first; GitHub only applies existing labels. Copy them into the story repository's .github/workflows/ and .github/ISSUE_TEMPLATE/ only with the user's approval.

  4. For each expected reader, create a stub file from references/feedback-template.md at feedback/round-{N}/{reader-kebab}.md with frontmatter filled in and the body sections empty. The stub list is the round's checklist.

2. Collect feedback (the discipline)

  1. As each reader's notes arrive, record them in their file using the template. Quote or closely paraphrase; do not editorialize yet. Keep each note's paragraph anchor (ch03-p12) in its Where line; convert chapter or page references from other formats to anchors when the location is unambiguous. For notes filed through the issue form, fetch them with gh issue list --label manuscript-note --state open --json number,title,body,author and map the form's "How much did it affect your reading?" answer to the template's severity: Made me want to stop reading is major (blocking when several readers stopped at the same place), Pulled me out for a moment is minor, Barely noticed is nit, and no answer is left blank. A Typo or wording note is a nit unless the reader says more.

  2. Map old labels to the current text. When a note's build is older than the manuscript, its label may point at a different paragraph now. Resolve every label from the round in one run against the tag (or the short commit in the note's build stamp):

    story compare . --ref feedback-round-{N} --anchor ch03-p12 --anchor ch07-p4

    Each line gives the current label: (text unchanged), or (edited, NN% similar) when the paragraph was revised (check it is the one the reader meant). not found in the current text ("…") means the paragraph was cut or rewritten past recognition: search the chapter for the reader's quoted words, or the words shown, and mark the note ambiguous if nothing matches. no such label means the label never existed in that build: check the note's build and the reader's typing. Record the current label in the Where line, keeping the reader's original label in brackets. Sensitivity and authenticity reads use the same file shape; see the editorial-review skill for commissioning them.

  3. Run the canon check on each problem note: verified against the bible, contradicts canon (usually a setup problem — note the canon file), or outside canon scope. Record the result in the file.

  4. Do NOT revise until all feedback for the round is in. Revising on partial feedback optimizes for the first reader and invalidates the others' reads. If a reader is late, either wait or formally close the round without them (note it in the synthesis) — never silently proceed on a partial set.

3. Synthesize

Only when every expected reader file is collected. If the round's files carry source: simulated, it is a panel round from the reader-panel skill: follow "Simulated rounds" below as well.

  1. Read all reader files for the round.
  2. Sort every finding into exactly one category:
    • Convergent — ≥2 readers agree independently. Strongest signal; becomes a revision item by default.
    • Divergent — readers disagree. Adjudicate: check both sides against canon and premise, record which side wins and why.
    • Single-reader — one reader only. Weigh by specificity: specific + canon-verifiable → investigate or accept; vague + taste-based → usually decline.
    • Declined-with-reason — explicitly rejected, with a recorded reason referencing canon, premise, genre contract, or craft principle.
  3. Write feedback/round-{N}/synthesis.md using references/synthesis-template.md, including the frontmatter readiness verdict: ready | needs-revision | not-ready.
  4. Build the numbered revision plan with concrete file targets.

4. Hand off the revision plan

  1. Present the synthesis summary and readiness verdict to the user.
  2. If the verdict is needs-revision or not-ready, hand the revision plan to the revision-continuity skill for execution. The synthesis is the input; revision-continuity owns the edits.
  3. If the verdict is ready, the round is closed — proceed to the next round, the next drafting stage, export, or the submission skill.

Simulated rounds

The reader-panel skill writes persona reads in this skill's file shape, with source: simulated and persona in the frontmatter. A file without source, or with source: human, is a human reader's. Synthesise a panel round as usual, with these differences:

  • Label it. Set source: simulated in the synthesis frontmatter and start the readiness line with "Simulated round:". Refer to the files by persona ("the line-editor persona"), never as readers or beta readers.
  • Personas are not independent. Several personas run by one model agreeing is one signal, not convergence. Sort every simulated finding as single-reader or declined-with-reason, weighed by how specific and checkable it is: a quoted POV slip or a contradiction with both sides cited is worth acting on; a taste note is usually declined.
  • Check before acting. Personas leave the canon check to you (they cannot read past their range), so run it here, and confirm each simulated problem in the text before it enters the revision plan. A note the text does not bear out is declined with the reason "not borne out by the text".
  • What ready means. A simulated round's ready means ready for human readers, nothing more. It never closes a book for submission or publication; hand off to a human round, not to submission.
  • Never mix rounds. Simulated and human reads go in separate rounds. If a round holds both, move the simulated files to their own round before synthesising. When a later human round repeats a simulated finding, the human readers' notes carry it; the earlier panel adds no weight.
  • The sensitivity persona only flags passages for a human reader. Its notes become items for an editorial-review brief, never a finding that a portrayal is fine.

Conventions

  • Feedback lives under feedback/round-{N}/; {N} is a plain integer (round-1, round-2).
  • Reader files use kebab-case reader ids: feedback/round-1/maria-chen.md.
  • Locations cite paragraph labels from story build --format html (ch03-p12) where available. Labels are paragraph positions in one build, so tag and stamp each round's build, rebuild and resend the review copy between rounds, and map an old label to the current text with story compare . --ref <round-tag> --anchor <label> (step 2.3) rather than reusing it after a revision.
  • Every feedback file and the synthesis carry YAML frontmatter (reader, round, chapters-read, overall-verdict / readers, readiness). Simulated reads and their synthesis also carry source: simulated; simulated reads carry persona.
  • Findings are quoted or closely paraphrased from readers, never invented. If a note is ambiguous, mark it ambiguous in the file rather than resolving it silently.
  • Declined findings always carry a recorded reason. A synthesis with unexplained rejections is incomplete.
  • Bidirectional discipline: when synthesis creates or resolves continuity/questions/ entries (reader confusion often reveals clarity gaps), update those files too.

CLI Maintenance

Use the Story CLI when it is available. If story is not installed, use bun run story -- from the Story Skills repository checkout or the bundled fallback node ../story-maintenance/scripts/story.js with the same arguments, resolving the path relative to this skill folder. If no CLI is available, perform the registry, backlink, and word-count checks manually.

After creating or updating feedback files and synthesis:

story reindex .
story links .
story validate .
story continuity .

Reference Files

  • references/feedback-template.md - Per-reader feedback file template with frontmatter (reader, round, chapters-read, overall-verdict, and source/persona for simulated reads), paragraph anchor citations, the review-copy note for readers, and canon-check discipline
  • references/synthesis-template.md - Round synthesis template: convergent/divergent/single-reader/declined-with-reason categories, readiness verdict, revision plan

Source: SKILL.md on GitHub

1 warning2d3 checks · Risk SAFE
  • Gen Agent Trust Hub2d

    This skill facilitates a structured workflow for triaging story feedback from alpha/beta readers. It integrates with Git and GitHub, and utilizes a custom 'story' CLI tool for building and validating content. The security profile is generally low-risk, with the primary observation being the processing of untrusted external feedback data, which is a common vector for indirect prompt injection.

  • Socket2d

    No alerts

  • Snyk2d

    Risk: MEDIUM · 1 issue

Signed by skilld at 2d67b42. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 18 hours ago.

Activeupdated 3 days ago

README badge

README badge for danjdewhurst/story-skills/feedback-triage