← NovelistCONTENT HISTORY

Update to Novelist

Snapshot Sep 30, 2026 · 23:13 UTC · version 0.2.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Publish this Markdown novel project as a validated EPUB using the skill's bundled packaging script. Use when the author asks to publish, export, build, regenerate, package, or validate the novel or EPUB; when checking publication metadata, chapter readiness, covers, illustrations, generated output, or EPUB integrity; or when coordinating a missing cover before publication.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 194
    },
    {
      "relative_path": "scripts/build_epub.py",
      "size_in_bytes": 37177
    },
    {
      "relative_path": "tests/test_build_epub.py",
      "size_in_bytes": 7760
    }
  ],
  "name": "publish-novel",
  "skill_md_contents": "---\nname: publish-novel\ndescription: Publish this Markdown novel project as a validated EPUB using the skill's bundled packaging script. Use when the author asks to publish, export, build, regenerate, package, or validate the novel or EPUB; when checking publication metadata, chapter readiness, covers, illustrations, generated output, or EPUB integrity; or when coordinating a missing cover before publication.\n---\n\n# Publish Novel\n\nBefore running a bundled command, resolve `<skill-dir>` to the absolute directory\ncontaining this `SKILL.md`, and resolve `<skills-dir>` to its parent directory.\nKeep `--project-root` pointed at the active novel workspace, not at the skill or\nplugin installation.\n\n## Operating Contract\n\nTurn an author request such as \"Publish this novel\" into the complete EPUB workflow. Do not ask the author to type shell commands. Run the bundled script yourself, verify the result, and report the artifact path.\n\nTreat Markdown and project assets as canonical source. Treat `published/epub/` and `.epub` files as generated output. Never repair a generated EPUB by hand; update source and republish.\n\nRetain both outputs after a successful build. `published/epub/` is the\ninspectable staging tree, while `published/*.epub` is the ZIP-based EPUB\ncontainer intended for reading software. Rebuilding may replace the contents of\nthe staging tree, but publication must not delete it after packaging.\n\nInterpret `publish` as local EPUB generation only. Do not upload, distribute, email, release, or submit the book to a storefront or external service unless the author explicitly requests that separate action.\n\nDo not invoke `analytical-review` merely because the author asks to publish,\nexport, build, regenerate, package, or validate an existing novel. Ordinary\npublication retains the structural and continuity preflight below. When a\nfully autonomous start-to-publication workflow was explicitly authorized, the\norchestrating storytelling workflow must complete analytical review,\nfinding disposition, revision, and bounded regression review before handing\nthe manuscript to this skill. Keep literary judgment out of `build_epub.py`.\n\n## Workflow\n\n### 1. Read Publication Context\n\nRead:\n\n- `AGENTS.md`\n- `project.md`\n- `published/README.md`\n- publishable chapter filenames and frontmatter, plus image references needed for packaging\n- `style/visual-style-guide.md`\n- existing files under `assets/cover/` and `assets/illustrations/`\n\nPreserve the manuscript language and project terminology.\n\nDo not load the full prose of every chapter into model context. Let the bundled script stream chapter bodies during rendering. Read chapter prose only when diagnosing a rendering, image, or metadata problem.\n\n### 2. Run Preflight\n\nConfirm:\n\n- at least one chapter matches `NNN.ascii-slug.md`;\n- chapter numbers and filenames are in the intended order;\n- every chapter's H2 sections are exactly `## Synopsis`, `## Draft`, and\n  `## Revision Notes` in that order, with one non-empty, case-sensitive Draft\n  outside fenced code;\n- the requested manuscript is complete enough to publish;\n- title, author or pen name, and language are known;\n- all local Markdown image references inside Draft exist, and the selected\n  cover exists;\n- the output and staging paths remain under the intended project.\n\nRun the story skill's strict structural audit before packaging:\n\n```bash\npython3 \"<skills-dir>/novel-story-telling/scripts/check_continuity.py\" \\\n  --project-root . \\\n  --strict\n```\n\nStop on malformed dialogue markup or any other structural error. Canonical\ndialogue is an exact `*“…”*` range that may stand alone or share a paragraph\nwith narration; interior thought is unquoted `*…*`, and cited wording uses\n`‘…’`.\n\nIf any chapter is not `final`, list it and ask for confirmation before publishing unless the author explicitly requests a draft or proof EPUB.\n\nIf the title is empty or still a placeholder, ask for the publication title. If the author is missing, ask for the author or pen name; do not silently publish as `Unknown Author` without confirmation. Pass one-time metadata as script options. Update `project.md` only when the author asks to make it canonical.\n\n### 3. Resolve The Cover\n\nFind a cover in this order:\n\n1. a path explicitly supplied by the author;\n2. `cover_image` in `project.md` frontmatter;\n3. `assets/cover/cover.png`, `.jpg`, `.jpeg`, or `.webp`.\n\nIf no cover exists, ask whether to create one or publish without one. When the\nauthor wants a cover, use the `create-visual-asset` skill, save it under\n`assets/cover/`, verify the final image, and resume publication. Do not block a\ncoverless publication after the author confirms that choice.\n\n### 4. Publish\n\nRun the bundled script from the repository root:\n\n```bash\npython3 \"<skill-dir>/scripts/build_epub.py\" \\\n  --project-root .\n```\n\nAdd only the options needed for confirmed metadata or output choices:\n\n```bash\npython3 \"<skill-dir>/scripts/build_epub.py\" \\\n  --project-root . \\\n  --title \"Publication Title\" \\\n  --author \"Author or Pen Name\" \\\n  --language ko \\\n  --cover assets/cover/cover.png \\\n  --output published/novel.epub\n```\n\nThe script must:\n\n- render only each numbered chapter's `## Draft` content in filename order;\n- fail before staging changes when the exact H2 sequence differs or Draft is\n  missing, duplicated, or empty;\n- exclude the title-container H1, Synopsis, and Revision Notes from manuscript\n  rendering, while adding the canonical chapter title from frontmatter;\n- render ordinary Markdown paragraphs as `p.prose` in a sans-serif stack and\n  each canonical `*“…”*` speech range as `<i class=\"dialog\">`, styled with a\n  serif italic stack without forcing a paragraph boundary;\n- render inline Markdown backtick ranges as fixed-width `<code>` text and use\n  local CSS `::before` and `::after` content to show the opening and closing\n  backtick glyphs to readers; these visible delimiters are a narrative marker\n  for machine text that is evaluated literally, not disposable source syntax;\n  place the complete inline code range on a subtle translucent background with\n  a dark-mode override, while inheriting the reader's foreground color;\n- render a standalone `---` or legacy Markdown thematic break as a semantic\n  `<hr class=\"scene-break\" />` paired with visible centered `* * *` text before\n  list parsing;\n- treat legacy thematic-break rendering as defensive compatibility only;\n  canonical Draft source must use standalone `---` and pass the strict audit;\n- use reader-compatible CSS with no external font or stylesheet dependency;\n- ignore template files;\n- package block and inline local images;\n- include the selected cover when present;\n- keep staging inside `published/epub/` by default;\n- retain that staging tree after packaging;\n- write `published/novel.epub` by default as a ZIP-compatible EPUB container;\n- write `mimetype` as the archive's first, uncompressed member;\n- validate the final archive automatically.\n\n### 5. Verify And Report\n\nRequire the script's successful validation report. It checks:\n\n- a non-empty ZIP-compatible EPUB;\n- the first, uncompressed `mimetype` entry;\n- required container, navigation, package, and stylesheet members;\n- at least one rendered chapter;\n- well-formed XML and XHTML;\n- packaged targets for local `href` and `src` references.\n\nAlso inspect the generated chapter XHTML when changing the publisher or chapter\nmarkup rules. Confirm that editorial headings and text from Synopsis or Revision\nNotes are absent; every marked speech range becomes `<i class=\"dialog\">` even\nwhen narration follows in the same paragraph; unmarked thought remains `<em>`;\ninline `<code>` uses a fixed-width stack and visibly retains both backtick\ndelimiters through CSS; and each scene break has a visible centered `* * *`\nornament instead of being emitted as a list.\n\nTo validate an existing artifact without rebuilding, run:\n\n```bash\npython3 \"<skill-dir>/scripts/build_epub.py\" \\\n  --project-root . \\\n  --validate-only published/novel.epub\n```\n\nReport:\n\n- the absolute EPUB path;\n- title, author, and language used;\n- chapter and packaged-image counts;\n- whether a cover was included;\n- confirmation that the staging tree was retained alongside the final EPUB;\n- any warnings or intentionally accepted draft conditions.\n\nRun `git status --short` and separate generated ignored output from source changes. Do not commit `published/*.epub` or `published/epub/` unless the author explicitly asks.\n\n## Failure Handling\n\n- Stop when no publishable chapter exists.\n- Stop when a chapter has no unique, non-empty `## Draft` section.\n- Stop when a referenced local image is missing.\n- Stop when the cover path is invalid.\n- Stop when staging points outside a generated subdirectory of `published/`.\n- Stop when the EPUB output points outside `published/` or inside its staging directory.\n- Stop when EPUB validation fails; report the exact member or reference and repair the canonical source or bundled script before rebuilding.\n- Never claim publication success from file existence alone.\n"
}

SHA-256 of public snapshot: 341260d877b05c68437c02c8f33324c8e95ddd60a8b753bc127066eb0684565b