# danjdewhurst/story-skills architecture

> Architecture diagram of the GitHub repository danjdewhurst/story-skills, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/danjdewhurst/story-skills
- Repository: https://github.com/danjdewhurst/story-skills

## Overview

Story Skills provides a markdown-and-frontmatter story project format, agent writing/planning skills, and a companion CLI that checks and manages story projects. The principal CLI workflow is to inspect a project, run deterministic continuity and craft checks, and report file-addressed findings; documented commands also support repair guidance, project validation, links, and publishing. The graph centers on the sampled CLI/runtime modules. README-documented capabilities whose implementation paths are absent from the tree are represented only where a supported source path exists; unsampled internal wiring is omitted or marked unverified.

Main entry points: [`src/story.js`](https://github.com/danjdewhurst/story-skills/blob/main/src/story.js) (Story operations), [`src/continuity.js`](https://github.com/danjdewhurst/story-skills/blob/main/src/continuity.js) (Continuity engine), [`src/commands.js`](https://github.com/danjdewhurst/story-skills/blob/main/src/commands.js) (Command handling), [`src/context.js`](https://github.com/danjdewhurst/story-skills/blob/main/src/context.js) (Draft context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI entry"]
  node_cli["Story CLI<br/>[cli.js]"]
  node_command_dispatch["Command handling<br/>[commands.js]"]
end

subgraph group_project["Project model"]
  node_story_ops["Story operations<br/>[story.js]"]
  node_frontmatter["Frontmatter parser<br/>[frontmatter.js]"]
  node_project_files["Project files<br/>[files.js]"]
  node_context["Draft context<br/>[context.js]"]
end

subgraph group_checks["Story analysis"]
  node_chronology["Chapter chronology<br/>[chronology.js]"]
  node_continuity["Continuity engine<br/>[continuity.js]"]
  node_progressions["State progressions<br/>[progressions.js]"]
  node_series["Series canon<br/>[series.js]"]
  node_prose["Prose analysis<br/>[prose.js]"]
  node_voices["Voice analysis<br/>[voices.js]"]
end

subgraph group_outputs["Findings and outputs"]
  node_findings["Finding rules<br/>[findings.js]"]
  node_exemptions["Finding exemptions<br/>[exemptions.js]"]
  node_markdown["Markdown utilities<br/>[markdown.js]"]
  node_publishing["Publishing<br/>[publishing.js]"]
  node_book_packaging["Book packaging<br/>[packaging.js]"]
  node_html_output["HTML output<br/>[html.js]"]
  node_exit_codes["Exit status<br/>[exit-codes.js]"]
end

node_author(("Author or agent"))

node_author -->|"invokes"| node_cli
node_cli -.->|"dispatches"| node_command_dispatch
node_command_dispatch -.->|"manages projects"| node_story_ops
node_story_ops -->|"parses metadata"| node_frontmatter
node_story_ops -->|"reads and writes"| node_project_files
node_story_ops -->|"runs checks"| node_continuity
node_story_ops -->|"uses ordering"| node_chronology
node_story_ops -->|"sorts state changes"| node_progressions
node_story_ops -->|"checks linked books"| node_series
node_story_ops -->|"builds draft context"| node_context
node_context -->|"uses ordering"| node_chronology
node_context -->|"uses identifiers"| node_continuity
node_context -->|"resolves state"| node_progressions
node_continuity -->|"checks story order"| node_chronology
node_continuity -->|"checks state changes"| node_progressions
node_continuity -->|"creates findings"| node_findings
node_continuity -->|"applies exemptions"| node_exemptions
node_continuity -->|"normalizes text"| node_markdown
node_command_dispatch -->|"runs prose checks"| node_prose
node_command_dispatch -->|"runs voice checks"| node_voices
node_prose -->|"uses voice helpers"| node_voices
node_prose -->|"creates warnings"| node_findings
node_voices -->|"creates warnings"| node_findings
node_publishing -->|"checks canon"| node_continuity
node_publishing -->|"uses series data"| node_series
node_book_packaging -->|"uses HTML helpers"| node_html_output
node_book_packaging -->|"writes files"| node_project_files
node_html_output -->|"uses publishing data"| node_publishing
node_command_dispatch -.->|"reports command status"| node_exit_codes

click node_cli "https://github.com/danjdewhurst/story-skills/blob/main/src/cli.js"
click node_command_dispatch "https://github.com/danjdewhurst/story-skills/blob/main/src/commands.js"
click node_story_ops "https://github.com/danjdewhurst/story-skills/blob/main/src/story.js"
click node_frontmatter "https://github.com/danjdewhurst/story-skills/blob/main/src/frontmatter.js"
click node_project_files "https://github.com/danjdewhurst/story-skills/blob/main/src/files.js"
click node_context "https://github.com/danjdewhurst/story-skills/blob/main/src/context.js"
click node_chronology "https://github.com/danjdewhurst/story-skills/blob/main/src/chronology.js"
click node_continuity "https://github.com/danjdewhurst/story-skills/blob/main/src/continuity.js"
click node_progressions "https://github.com/danjdewhurst/story-skills/blob/main/src/progressions.js"
click node_series "https://github.com/danjdewhurst/story-skills/blob/main/src/series.js"
click node_prose "https://github.com/danjdewhurst/story-skills/blob/main/src/prose.js"
click node_voices "https://github.com/danjdewhurst/story-skills/blob/main/src/voices.js"
click node_findings "https://github.com/danjdewhurst/story-skills/blob/main/src/findings.js"
click node_exemptions "https://github.com/danjdewhurst/story-skills/blob/main/src/exemptions.js"
click node_markdown "https://github.com/danjdewhurst/story-skills/blob/main/src/markdown.js"
click node_publishing "https://github.com/danjdewhurst/story-skills/blob/main/src/publishing.js"
click node_book_packaging "https://github.com/danjdewhurst/story-skills/blob/main/src/packaging.js"
click node_html_output "https://github.com/danjdewhurst/story-skills/blob/main/src/html.js"
click node_exit_codes "https://github.com/danjdewhurst/story-skills/blob/main/src/exit-codes.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_command_dispatch toneBlue
class node_story_ops,node_frontmatter,node_project_files,node_context toneAmber
class node_chronology,node_continuity,node_progressions,node_series,node_prose,node_voices toneMint
class node_findings,node_exemptions,node_markdown,node_publishing,node_book_packaging,node_html_output,node_exit_codes toneRose
class node_author toneIndigo
```

## Components

### CLI entry

- [Story CLI](https://github.com/danjdewhurst/story-skills/blob/main/src/cli.js): `src/cli.js`
- [Command handling](https://github.com/danjdewhurst/story-skills/blob/main/src/commands.js): `src/commands.js`

### Project model

- [Story operations](https://github.com/danjdewhurst/story-skills/blob/main/src/story.js): `src/story.js`
- [Frontmatter parser](https://github.com/danjdewhurst/story-skills/blob/main/src/frontmatter.js): `src/frontmatter.js`
- [Project files](https://github.com/danjdewhurst/story-skills/blob/main/src/files.js): `src/files.js`
- [Draft context](https://github.com/danjdewhurst/story-skills/blob/main/src/context.js): `src/context.js`

### Story analysis

- [Chapter chronology](https://github.com/danjdewhurst/story-skills/blob/main/src/chronology.js): `src/chronology.js`
- [Continuity engine](https://github.com/danjdewhurst/story-skills/blob/main/src/continuity.js): `src/continuity.js`
- [State progressions](https://github.com/danjdewhurst/story-skills/blob/main/src/progressions.js): `src/progressions.js`
- [Series canon](https://github.com/danjdewhurst/story-skills/blob/main/src/series.js): `src/series.js`
- [Prose analysis](https://github.com/danjdewhurst/story-skills/blob/main/src/prose.js): `src/prose.js`
- [Voice analysis](https://github.com/danjdewhurst/story-skills/blob/main/src/voices.js): `src/voices.js`

### Findings and outputs

- [Finding rules](https://github.com/danjdewhurst/story-skills/blob/main/src/findings.js): `src/findings.js`
- [Finding exemptions](https://github.com/danjdewhurst/story-skills/blob/main/src/exemptions.js): `src/exemptions.js`
- [Markdown utilities](https://github.com/danjdewhurst/story-skills/blob/main/src/markdown.js): `src/markdown.js`
- [Publishing](https://github.com/danjdewhurst/story-skills/blob/main/src/publishing.js): `src/publishing.js`
- [Book packaging](https://github.com/danjdewhurst/story-skills/blob/main/src/packaging.js): `src/packaging.js`
- [HTML output](https://github.com/danjdewhurst/story-skills/blob/main/src/html.js): `src/html.js`
- [Exit status](https://github.com/danjdewhurst/story-skills/blob/main/src/exit-codes.js): `src/exit-codes.js`

### Other components

- **Author or agent**

## Connections

- Author or agent → Story CLI: invokes (evidence: `README.md`)
- Story CLI → Command handling: dispatches
- Command handling → Story operations: manages projects (evidence: `src/commands.js`)
- Story operations → Frontmatter parser: parses metadata (evidence: `src/story.js`)
- Story operations → Project files: reads and writes (evidence: `src/story.js`)
- Story operations → Continuity engine: runs checks (evidence: `src/story.js`)
- Story operations → Chapter chronology: uses ordering (evidence: `src/story.js`)
- Story operations → State progressions: sorts state changes (evidence: `src/story.js`)
- Story operations → Series canon: checks linked books (evidence: `src/story.js`)
- Story operations → Draft context: builds draft context (evidence: `src/story.js`)
- Draft context → Chapter chronology: uses ordering (evidence: `src/context.js`)
- Draft context → Continuity engine: uses identifiers (evidence: `src/context.js`)
- Draft context → State progressions: resolves state (evidence: `src/context.js`)
- Continuity engine → Chapter chronology: checks story order (evidence: `src/continuity.js`)
- Continuity engine → State progressions: checks state changes (evidence: `src/continuity.js`)
- Continuity engine → Finding rules: creates findings (evidence: `src/continuity.js`)
- Continuity engine → Finding exemptions: applies exemptions (evidence: `src/continuity.js`)
- Continuity engine → Markdown utilities: normalizes text (evidence: `src/continuity.js`)
- Command handling → Prose analysis: runs prose checks (evidence: `src/commands.js`)
- Command handling → Voice analysis: runs voice checks (evidence: `src/commands.js`)
- Prose analysis → Voice analysis: uses voice helpers (evidence: `src/prose.js`)
- Prose analysis → Finding rules: creates warnings (evidence: `src/prose.js`)
- Voice analysis → Finding rules: creates warnings (evidence: `src/voices.js`)
- Publishing → Continuity engine: checks canon (evidence: `src/publishing.js`)
- Publishing → Series canon: uses series data (evidence: `src/publishing.js`)
- Book packaging → HTML output: uses HTML helpers (evidence: `src/packaging.js`)
- Book packaging → Project files: writes files (evidence: `src/packaging.js`)
- HTML output → Publishing: uses publishing data (evidence: `src/html.js`)
- Command handling → Exit status: reports command status (evidence: `src/commands.js`)
