dsh-novel-write-engine 0.2.7 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -217,6 +217,18 @@ interface WordMetrics {
217
217
  paragraph_count: number;
218
218
  paragraph_max_words: number;
219
219
  }
220
+ /** Protected evidence copied from the archived outline card at archive time. */
221
+ interface ArchivedCardSnapshot {
222
+ title: string;
223
+ scene_type: SceneType;
224
+ target_words: [number, number];
225
+ cast: string[];
226
+ goal: string;
227
+ conflict: string;
228
+ hook: string;
229
+ notes: string;
230
+ archived_at: string | null;
231
+ }
220
232
  /** Derived chapter row kept in `state/chapters.yaml`. */
221
233
  interface ChapterRecord {
222
234
  num: number;
@@ -239,6 +251,10 @@ interface ChapterRecord {
239
251
  assigned_ids?: Record<string, string>;
240
252
  /** Digest of the archive request that produced this row. */
241
253
  archive_digest?: string;
254
+ /** Immutable card fields written by the archive transaction, not by amend. */
255
+ archive_card?: ArchivedCardSnapshot;
256
+ /** Canonical digest of archive_card; v1-prefixed like archive_digest. */
257
+ archive_card_digest?: string;
242
258
  }
243
259
  /** Summary block the model supplies with a draft and the engine persists. */
244
260
  interface ChapterSummary {
@@ -301,8 +317,8 @@ interface CharacterDelta {
301
317
  role?: string;
302
318
  profile?: Record<string, unknown>;
303
319
  current_state?: Record<string, unknown>;
320
+ /** Chapter is engine-assigned from the archive transaction, not caller-supplied. */
304
321
  growth?: {
305
- chapter: number;
306
322
  change: string;
307
323
  status_change: string;
308
324
  };
@@ -760,7 +776,7 @@ interface BookReport {
760
776
  target: number | null;
761
777
  words: number;
762
778
  average_words: number;
763
- percent: number;
779
+ percent: number | null;
764
780
  remaining_words: number | null;
765
781
  remaining_words_min: number | null;
766
782
  remaining_words_average: number | null;
@@ -825,6 +841,7 @@ interface BookReport {
825
841
  id: string;
826
842
  average: number;
827
843
  samples: number;
844
+ max: number;
828
845
  }>;
829
846
  };
830
847
  /** Per-chapter effort survives archive (pipeline rounds are reset). */
@@ -972,6 +989,8 @@ interface GateInput {
972
989
  briefStage: BriefStage | null;
973
990
  draftTitle: string | null;
974
991
  sceneType: SceneType | null;
992
+ /** The submitted/active plan narrator; PG-05 uses it before a draft exists. */
993
+ narrator?: string | null;
975
994
  summary: ChapterSummary | null;
976
995
  /** P5 may omit `summary`; when omitted, the previous plan summary is reused. */
977
996
  summaryProvided?: boolean;
@@ -1034,6 +1053,36 @@ interface Selection {
1034
1053
  title?: string;
1035
1054
  created_at?: string;
1036
1055
  }
1056
+ /**
1057
+ * One human-readable projection of the pipeline's chapter boundary.
1058
+ *
1059
+ * `pipeline.chapter`/`stage` are protocol values: after archiving chapter N the
1060
+ * pipeline points at N+1 and still says `done` because `done` describes the
1061
+ * chapter that was just archived. This projection is the only place that turns
1062
+ * those values into "chapter N archived; chapter N+1 starts at P1".
1063
+ */
1064
+ interface ChapterProgress {
1065
+ active_chapter: number;
1066
+ stage: Stage;
1067
+ /** The chapter currently being written; null while `stage === 'done'`. */
1068
+ current: {
1069
+ chapter: number;
1070
+ stage: Stage;
1071
+ } | null;
1072
+ /** Highest archived chapter, or null before the first archive. */
1073
+ last_archived: number | null;
1074
+ /** Next chapter to start at P1; null while writing or after the book is finished. */
1075
+ next: {
1076
+ chapter: number;
1077
+ stage: 'P1';
1078
+ } | null;
1079
+ /** True only when the configured target has been reached at `stage === 'done'`. */
1080
+ finished: boolean;
1081
+ /** One line for status cards, commands and the panel. */
1082
+ label: string;
1083
+ /** Sentence used by the resume prompt instead of "当前第 N 章,阶段 done". */
1084
+ resume: string;
1085
+ }
1037
1086
  /** The `getStatus` payload. */
1038
1087
  interface StatusReport {
1039
1088
  project: {
@@ -1054,6 +1103,8 @@ interface StatusReport {
1054
1103
  /** SHA-256 of the active manuscript, or null when the stage has no draft. */
1055
1104
  manuscript_hash: string | null;
1056
1105
  stage: Stage;
1106
+ /** Chapter-boundary projection shared by every human-readable surface. */
1107
+ progress?: ChapterProgress;
1057
1108
  rounds: RoundCounters;
1058
1109
  blocking: BlockingItem[];
1059
1110
  /** Non-blocking recovery notes, e.g. a recoverable pending transaction. */
@@ -1106,6 +1157,8 @@ interface StatusReport {
1106
1157
  interface AdviceReport {
1107
1158
  stage: Stage;
1108
1159
  chapter: number;
1160
+ /** Same chapter-boundary projection as getStatus. */
1161
+ progress?: ChapterProgress;
1109
1162
  tool: string;
1110
1163
  args: Record<string, unknown>;
1111
1164
  reason: string;
@@ -1283,9 +1336,17 @@ interface Rulepack {
1283
1336
  words_per_chapter: [number, number];
1284
1337
  dialogue_ratio: [number, number];
1285
1338
  }>;
1286
- /** Genre guides injected into the task-book context; no threshold branches on them. */
1339
+ /** Genre guides plus optional advisory-only threshold profiles. */
1287
1340
  genres: Record<Genre, {
1288
1341
  note: string;
1342
+ profile?: {
1343
+ period_density?: {
1344
+ min: number;
1345
+ max: number;
1346
+ };
1347
+ water_words?: number;
1348
+ pleasure_density?: number;
1349
+ };
1289
1350
  }>;
1290
1351
  crosschapter: {
1291
1352
  duplicate_similarity: number;
@@ -1483,7 +1544,7 @@ interface PanelBookData {
1483
1544
  average_words: number;
1484
1545
  remaining_words: number | null;
1485
1546
  remaining_words_basis: 'actual_average' | 'minimum_target' | 'none';
1486
- percent: number;
1547
+ percent: number | null;
1487
1548
  };
1488
1549
  current: {
1489
1550
  card: PanelCardData | null;
@@ -1531,7 +1592,7 @@ interface PanelBookData {
1531
1592
  median: number;
1532
1593
  min: number;
1533
1594
  max: number;
1534
- last_ten_average: number;
1595
+ last_ten_average: number | null;
1535
1596
  trend: number | null;
1536
1597
  trend_basis: BookReport['quality']['trend_basis'];
1537
1598
  samples: number;
@@ -1566,7 +1627,7 @@ interface PanelDraft {
1566
1627
  num: number;
1567
1628
  title: string;
1568
1629
  wordCount: number;
1569
- score: number;
1630
+ score: number | null;
1570
1631
  status: 'draft' | 'blocked';
1571
1632
  details: string;
1572
1633
  }
@@ -1577,6 +1638,8 @@ interface PanelSnapshot {
1577
1638
  platform: string;
1578
1639
  chapter: number;
1579
1640
  stage: Stage;
1641
+ /** Chapter-boundary projection; `chapter`/`stage` stay as the protocol pair. */
1642
+ progress?: ChapterProgress;
1580
1643
  revision: number;
1581
1644
  rounds: {
1582
1645
  review: number;
@@ -1595,8 +1658,12 @@ interface PanelSnapshot {
1595
1658
  chapters: ChapterRecord[];
1596
1659
  /** The active, not-yet-archived chapter; archived rows come from `chapters`. */
1597
1660
  draft?: PanelDraft | null;
1598
- /** Total words across the index, for the header. */
1661
+ /** Archived words plus the active draft; the header shows this total. */
1599
1662
  totalWords: number;
1663
+ /** Words in archived chapters only. */
1664
+ archivedWords?: number;
1665
+ /** Active draft words, zero when no draft exists. */
1666
+ draftWords?: number;
1600
1667
  /** Book-wide archived average, not just the panel's capped rows. */
1601
1668
  averageScore?: number;
1602
1669
  /** The nine-phase strip state, derived from the pipeline stage. */
@@ -1609,6 +1676,7 @@ interface PanelSnapshot {
1609
1676
  book?: PanelBook;
1610
1677
  quality?: {
1611
1678
  averageScore: number;
1679
+ last_ten_average?: number | null;
1612
1680
  scores: number[];
1613
1681
  trend: number | null;
1614
1682
  trend_basis?: 'last_five_vs_previous_five' | 'insufficient_samples' | 'insufficient_history';
@@ -1694,8 +1762,14 @@ interface PanelSummaryDto {
1694
1762
  platform: string;
1695
1763
  chapter: number;
1696
1764
  stage: Stage;
1765
+ /** Chapter-boundary projection; absent on older payloads. */
1766
+ progress?: ChapterProgress;
1697
1767
  revision: number;
1698
1768
  totalWords: number;
1769
+ /** Words in archived chapters only; `totalWords` also counts the active draft. */
1770
+ archivedWords?: number;
1771
+ /** Active draft words, zero when no draft exists. */
1772
+ draftWords?: number;
1699
1773
  totalChapters: number;
1700
1774
  /** Book-wide archived average; absent on older payloads. */
1701
1775
  averageScore?: number;
@@ -1719,6 +1793,7 @@ interface PanelSummaryDto {
1719
1793
  book?: PanelBook;
1720
1794
  quality?: {
1721
1795
  averageScore: number;
1796
+ last_ten_average?: number | null;
1722
1797
  scores: number[];
1723
1798
  trend: number | null;
1724
1799
  trend_basis?: 'last_five_vs_previous_five' | 'insufficient_samples' | 'insufficient_history';
@@ -1763,7 +1838,7 @@ interface PanelChapterRow {
1763
1838
  num: number;
1764
1839
  title: string;
1765
1840
  wordCount: number;
1766
- score: number;
1841
+ score: number | null;
1767
1842
  stage: Stage;
1768
1843
  status: 'passed' | 'blocked' | 'draft';
1769
1844
  /** One-line summary shown when the row is expanded. */
@@ -1812,12 +1887,25 @@ interface PanelMissing {
1812
1887
  reason: 'missing' | 'not-project' | 'damaged' | 'not_registered' | 'unreadable' | 'busy';
1813
1888
  hint: string;
1814
1889
  }
1890
+ /** Additive v7 sections; the v6 bundle stays unchanged for old tabs. */
1891
+ type PanelSectionName = 'overview' | 'chapters' | 'characters' | 'foreshadows' | 'timeline' | 'relationships' | 'worldbook' | 'quality' | 'quality_detail' | 'health' | 'chapter_detail';
1892
+ interface PanelSectionMeta {
1893
+ payload_version: 7;
1894
+ section: PanelSectionName;
1895
+ items: unknown;
1896
+ total: number;
1897
+ returned: number;
1898
+ truncated: boolean;
1899
+ next_cursor: string | null;
1900
+ updated_at: string;
1901
+ etag: string;
1902
+ }
1815
1903
  interface PanelBundle {
1816
1904
  projects: PanelProjectOption[];
1817
1905
  selection: PanelSelection;
1818
1906
  summary?: PanelSummaryDto;
1819
1907
  chapters?: PanelChaptersDto;
1820
- gates?: PanelGatesDto;
1908
+ etag?: string;
1821
1909
  resume?: {
1822
1910
  text: string;
1823
1911
  };
@@ -1825,12 +1913,27 @@ interface PanelBundle {
1825
1913
  empty?: true;
1826
1914
  error?: string;
1827
1915
  }
1916
+ interface ChapterProgressInput {
1917
+ activeChapter: number;
1918
+ stage: Stage;
1919
+ archived: readonly number[];
1920
+ target: number | null;
1921
+ }
1922
+ /**
1923
+ * Turn the protocol pair (`chapter` + `stage`) into the only human-readable
1924
+ * chapter boundary. After archiving chapter N the protocol intentionally keeps
1925
+ * `stage: 'done'` and advances `chapter` to N+1; `done` describes chapter N,
1926
+ * not the chapter the pipeline now points at.
1927
+ */
1928
+ declare function projectChapterProgress(input: ChapterProgressInput): ChapterProgress;
1828
1929
  interface ResumePromptInput {
1829
1930
  title: string;
1830
1931
  root: string;
1831
1932
  chapter: number | string;
1832
1933
  stage: string;
1833
1934
  nextTool: string;
1935
+ /** When supplied, replaces the protocol pair with the chapter boundary text. */
1936
+ progress?: ChapterProgress;
1834
1937
  }
1835
1938
  /** One shared prompt template for `/novel resume` and the panel copy button. */
1836
1939
  declare function formatResumePrompt(input: ResumePromptInput): string;
@@ -1933,6 +2036,15 @@ type EngineEvent = {
1933
2036
  files: number;
1934
2037
  };
1935
2038
  };
2039
+ interface PanelSectionQuery {
2040
+ search?: string;
2041
+ status?: string;
2042
+ scene?: string;
2043
+ sort?: string;
2044
+ cursor?: string;
2045
+ limit?: number;
2046
+ chapter?: number;
2047
+ }
1936
2048
  interface InitProjectInput {
1937
2049
  title: string;
1938
2050
  genre: NovelProject['genre'];
@@ -2151,6 +2263,10 @@ declare class EngineService {
2151
2263
  private readonly briefContextCache;
2152
2264
  /** The 15s panel poll reuses the heavy book projection until revision/damage changes. */
2153
2265
  private readonly panelCache;
2266
+ /** Section-level cache; writes bump revision, so a stale entry cannot survive a commit. */
2267
+ private readonly sectionCache;
2268
+ private readonly journalCache;
2269
+ private readonly reviewKeyCache;
2154
2270
  private readonly briefs;
2155
2271
  private readonly now;
2156
2272
  private readonly metadataMutex;
@@ -2298,6 +2414,7 @@ declare class EngineService {
2298
2414
  }): Promise<OpResult<{
2299
2415
  stage: Stage;
2300
2416
  chapter: number;
2417
+ progress: ChapterProgress;
2301
2418
  tool: string;
2302
2419
  args: Record<string, unknown>;
2303
2420
  reason: string;
@@ -2400,6 +2517,21 @@ declare class EngineService {
2400
2517
  panelGates(input?: {
2401
2518
  root?: string;
2402
2519
  }): Promise<PanelGatesDto>;
2520
+ /**
2521
+ * Additive v7 section read model. Catalog sections reuse the Snapshot; only
2522
+ * the quality section reads archived reviews, and only chapter/quality
2523
+ * detail reads manuscripts or check files. Every section is byte-capped.
2524
+ */
2525
+ panelSection(input?: {
2526
+ root?: string;
2527
+ section: PanelSectionName;
2528
+ query?: PanelSectionQuery;
2529
+ }): Promise<PanelSectionMeta>;
2530
+ private panelSectionPage;
2531
+ private panelSectionReturned;
2532
+ /** WP3.7 free-text caps before the byte budget; both report truncation. */
2533
+ private panelSectionClip;
2534
+ private panelSectionBudget;
2403
2535
  /**
2404
2536
  * Build the read-only panel payload. The query root is accepted only when it
2405
2537
  * is registered, active or the configured root; arbitrary paths never reach
@@ -2407,6 +2539,7 @@ declare class EngineService {
2407
2539
  */
2408
2540
  panelBundle(input?: {
2409
2541
  root?: string;
2542
+ lean?: boolean;
2410
2543
  }): Promise<PanelBundle>;
2411
2544
  /** Read-only resume text shared with the panel copy button. */
2412
2545
  resumePrompt(input?: {
@@ -2419,6 +2552,8 @@ declare class EngineService {
2419
2552
  root?: string;
2420
2553
  }): Promise<{
2421
2554
  totalWords: number;
2555
+ archivedWords: number;
2556
+ draftWords: number;
2422
2557
  chapters: number;
2423
2558
  revision: number;
2424
2559
  rulepack: string;
@@ -2434,6 +2569,8 @@ declare class EngineService {
2434
2569
  worldbookEntries: number;
2435
2570
  strictOutline: boolean;
2436
2571
  targetChapters: number | null;
2572
+ state_errors: StateError[];
2573
+ partial: boolean;
2437
2574
  }>;
2438
2575
  private registry;
2439
2576
  /** List known projects with a cheap directory state for the panel/command. */
@@ -2586,6 +2723,8 @@ declare class EngineService {
2586
2723
  */
2587
2724
  private assertArchiveIndexReadable;
2588
2725
  private bookStatus;
2726
+ private panelReviewKey;
2727
+ private panelJournalIdentity;
2589
2728
  private panelSnapshot;
2590
2729
  /**
2591
2730
  * The archive stage can be left by a direct revision (the 0.2.3 workflow) or
@@ -2673,6 +2812,8 @@ declare const PANEL_ID = "novel-workshop";
2673
2812
  declare const PANEL_ROUTE = "/api/novel-write-engine/panel";
2674
2813
  declare const SKILL_NAME = "novel-write-engine";
2675
2814
  declare const REMOTE_VERSION = 6;
2815
+ /** User-visible panel/tutorial version; keep in sync with package.json. */
2816
+ declare const PANEL_VERSION = "0.2.9";
2676
2817
  /** The panel is a recent-history view; the wire payload and UI use one cap. */
2677
2818
  declare const PANEL_CHAPTER_LIMIT = 30;
2678
2819
  /** Project-relative locations. Every write goes through these constants. */
@@ -2805,4 +2946,4 @@ declare const Config: Schema<Config>;
2805
2946
  * created lazily per project root.
2806
2947
  */
2807
2948
  declare function apply(ctx: Context, config: Config): void;
2808
- export { ARCHIVE_DIGESTS_FILE, AdviceReport, ArchiveHandoff, AuditRow, BACKUP_DIR, BRIEF_RECEIPTS_FILE, BlockingItem, BookPlan, BookReport, BriefDocument, BriefLibrary, BriefReceipt, BriefReceiptsDocument, BriefStage, CHAPTERS_DIR, CHECK_DIR, CORE_TOOLS, ChapterCastMember, ChapterPlanInput, ChapterRecord, ChapterStatusRow, ChapterSummary, ChaptersDocument, CharacterDelta, CharactersDocument, CheckDocument, Config, DEFAULT_GENRE, DEFAULT_PLATFORM, Deduction, DeltaAction, DiffReport, DoctorCheck, DoctorReport, DraftInput, DraftState, ERROR_CODES, EXPORT_DIR, EngineBlockedError, EngineError, EngineFaultError, EngineInputError, EngineService, ErrorCode, ExportChapter, ExportKind, ForeshadowDelta, ForeshadowsDocument, GENRES, GateInput, GateOptions, GateResult, Genre, GuideReport, GuideStep, HISTORY_DIR, HISTORY_KINDS, HandoffDocument, HistoryKind, INITIAL_STAGE, LIMITS, LOCK_FILE, LocksDocument, METADATA_LOCK_FILE, MachineMetrics, NovelProject, OPERATIONS, OUTLINE_DEPRECATED_FILE, OUTLINE_DIR, OUTLINE_FILE, OpResult, Operation, OutlineChapter, OutlineDocument, OutlineProgress, OutlineVolume, PANEL_CHAPTER_LIMIT, PANEL_ID, PANEL_ROUTE, PHASE_STRIP, PLAN_DIR, PLATFORMS, PLUGIN_NAME, PROJECT_FILE, PanelBook, PanelBundle, PanelChapterRow, PanelChaptersDto, PanelDraft, PanelGatesDto, PanelMissing, PanelProjectOption, PanelSelection, PanelSnapshot, PanelSummaryDto, PipelineState, Platform, REGISTRY_FILE, REMOTE_VERSION, REVIEW_DIR, ReadingProof, ReadingProofReference, RelationshipDelta, RelationshipsDocument, ResumePromptInput, ReviewDocument, ReviewInput, ReviewIssue, RevisionEdit, RevisionInput, RevisionPatch, RoundCounters, SCENE_TYPES, SCENE_TYPE_DEFAULT, SCHEMA_VERSION, SESSION_BINDINGS_FILE, SKILL_NAME, STAGING_DIR, STATE_DIR, STATE_FILES, SceneType, ScoreDimension, SearchReport, SearchResultItem, Selection, SelectionSource, SemanticItem, Severity, Stage, StateDelta, StateError, StateErrorCode, StatusReport, TOOL_NAMES, TimelineDelta, TimelineDocument, ToolName, Violation, WORLDBOOK_FILE, Warning, WordMetrics, WorldDelta, WorldDocument, WorldPlanInput, WorldbookBackstory, WorldbookCharacter, WorldbookDocument, WorldbookFact, WorldbookFaction, WorldbookGlossary, WorldbookLocation, WorldbookRule, applicableGates, apply, blockedError, briefStageFor, chapterFile, chapterHeading, chapterHistoryFile, checkFile, checkHistoryFile, deprecatedChapterFile, deprecatedHistoryFile, evaluateGates, faultError, formatResumePrompt, gateName, inject, inputError, loadRulepack, name, parseParagraphLocation, phaseStrip, planChapterFile, planHistoryFile, planWorldFile, projectChapter, projectChapters, projectGates, projectSummary, renderBlurb, renderCover, renderEpubChapter, renderMarkdown, renderPlainText, renderProposal, reviewFile, reviewHistoryFile, verifyReference };
2949
+ export { ARCHIVE_DIGESTS_FILE, AdviceReport, ArchiveHandoff, ArchivedCardSnapshot, AuditRow, BACKUP_DIR, BRIEF_RECEIPTS_FILE, BlockingItem, BookPlan, BookReport, BriefDocument, BriefLibrary, BriefReceipt, BriefReceiptsDocument, BriefStage, CHAPTERS_DIR, CHECK_DIR, CORE_TOOLS, ChapterCastMember, ChapterPlanInput, ChapterProgress, ChapterProgressInput, ChapterRecord, ChapterStatusRow, ChapterSummary, ChaptersDocument, CharacterDelta, CharactersDocument, CheckDocument, Config, DEFAULT_GENRE, DEFAULT_PLATFORM, Deduction, DeltaAction, DiffReport, DoctorCheck, DoctorReport, DraftInput, DraftState, ERROR_CODES, EXPORT_DIR, EngineBlockedError, EngineError, EngineFaultError, EngineInputError, EngineService, ErrorCode, ExportChapter, ExportKind, ForeshadowDelta, ForeshadowsDocument, GENRES, GateInput, GateOptions, GateResult, Genre, GuideReport, GuideStep, HISTORY_DIR, HISTORY_KINDS, HandoffDocument, HistoryKind, INITIAL_STAGE, LIMITS, LOCK_FILE, LocksDocument, METADATA_LOCK_FILE, MachineMetrics, NovelProject, OPERATIONS, OUTLINE_DEPRECATED_FILE, OUTLINE_DIR, OUTLINE_FILE, OpResult, Operation, OutlineChapter, OutlineDocument, OutlineProgress, OutlineVolume, PANEL_CHAPTER_LIMIT, PANEL_ID, PANEL_ROUTE, PANEL_VERSION, PHASE_STRIP, PLAN_DIR, PLATFORMS, PLUGIN_NAME, PROJECT_FILE, PanelBook, PanelBundle, PanelChapterRow, PanelChaptersDto, PanelDraft, PanelGatesDto, PanelMissing, PanelProjectOption, PanelSectionMeta, PanelSectionName, PanelSelection, PanelSnapshot, PanelSummaryDto, PipelineState, Platform, REGISTRY_FILE, REMOTE_VERSION, REVIEW_DIR, ReadingProof, ReadingProofReference, RelationshipDelta, RelationshipsDocument, ResumePromptInput, ReviewDocument, ReviewInput, ReviewIssue, RevisionEdit, RevisionInput, RevisionPatch, RoundCounters, SCENE_TYPES, SCENE_TYPE_DEFAULT, SCHEMA_VERSION, SESSION_BINDINGS_FILE, SKILL_NAME, STAGING_DIR, STATE_DIR, STATE_FILES, SceneType, ScoreDimension, SearchReport, SearchResultItem, Selection, SelectionSource, SemanticItem, Severity, Stage, StateDelta, StateError, StateErrorCode, StatusReport, TOOL_NAMES, TimelineDelta, TimelineDocument, ToolName, Violation, WORLDBOOK_FILE, Warning, WordMetrics, WorldDelta, WorldDocument, WorldPlanInput, WorldbookBackstory, WorldbookCharacter, WorldbookDocument, WorldbookFact, WorldbookFaction, WorldbookGlossary, WorldbookLocation, WorldbookRule, applicableGates, apply, blockedError, briefStageFor, chapterFile, chapterHeading, chapterHistoryFile, checkFile, checkHistoryFile, deprecatedChapterFile, deprecatedHistoryFile, evaluateGates, faultError, formatResumePrompt, gateName, inject, inputError, loadRulepack, name, parseParagraphLocation, phaseStrip, planChapterFile, planHistoryFile, planWorldFile, projectChapter, projectChapterProgress, projectChapters, projectGates, projectSummary, renderBlurb, renderCover, renderEpubChapter, renderMarkdown, renderPlainText, renderProposal, reviewFile, reviewHistoryFile, verifyReference };