dsh-novel-write-engine 0.2.3 → 0.2.5

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.
@@ -102,6 +102,12 @@ export interface SummaryDto {
102
102
  code: string;
103
103
  detail: string;
104
104
  }>;
105
+ /** Crash-left pending transaction; read-only diagnostics. */
106
+ pending?: {
107
+ state: string;
108
+ txid: string;
109
+ detail: string;
110
+ };
105
111
  }
106
112
  export interface ChapterRowDto {
107
113
  num: number;
@@ -136,6 +136,12 @@ export interface PanelView {
136
136
  code: string;
137
137
  detail: string;
138
138
  }>;
139
+ /** Crash-left pending transaction, read-only. */
140
+ pending: {
141
+ state: string;
142
+ txid: string;
143
+ detail: string;
144
+ } | null;
139
145
  nextTitle: string;
140
146
  nextDetail: string;
141
147
  nextTool: string;
@@ -10,6 +10,8 @@ export declare const PANEL_CHAPTER_LIMIT = 30;
10
10
  /** Project-relative locations. Every write goes through these constants. */
11
11
  export declare const PROJECT_FILE = "novel.yaml";
12
12
  export declare const OUTLINE_FILE = "outline/outline.yaml";
13
+ /** Last outline replaced by a normal planning write; one level is enough for repair. */
14
+ export declare const OUTLINE_DEPRECATED_FILE = "outline/outline.deprecated.yaml";
13
15
  export declare const WORLDBOOK_FILE = "outline/worldbook.yaml";
14
16
  export declare const STATE_DIR = "state";
15
17
  export declare const CHAPTERS_DIR = "chapters";
@@ -66,6 +66,9 @@ export declare const ERROR_CODES: {
66
66
  /** The exact same keyed submission already failed in the same context. */
67
67
  readonly RETRY_UNCHANGED: "ENGINE_RETRY_UNCHANGED";
68
68
  readonly GATE_BLOCKED: "ENGINE_GATE_BLOCKED";
69
+ readonly CHECK_SUBMISSION_INVALID: "ENGINE_CHECK_SUBMISSION_INVALID";
70
+ readonly PENDING_PARTIAL: "ENGINE_PENDING_PARTIAL";
71
+ readonly IO_PERMISSION: "ENGINE_IO_PERMISSION";
69
72
  readonly READING_PROOF_INVALID: "ENGINE_READING_PROOF_INVALID";
70
73
  readonly SCORE_MISMATCH: "ENGINE_SCORE_MISMATCH";
71
74
  /** A revision tried to rewrite reviewer-owned issue fields. */
@@ -178,9 +181,14 @@ export interface CheckDocument {
178
181
  evidence: string;
179
182
  note: string;
180
183
  }>;
184
+ /** 0.2.5: explain a persisted content failure; historical checks omit it. */
185
+ findings?: BlockingItem[];
181
186
  };
182
187
  /** Advisory codes the author has explicitly acknowledged for this content. */
183
188
  acknowledged?: string[];
189
+ /** 0.2.5: content failures consume the check budget; submission errors never persist. */
190
+ failure_class?: 'submission' | 'content';
191
+ counted?: boolean;
184
192
  verdict: 'pass' | 'fail';
185
193
  }
186
194
  /** Every persisted document whose damage status/panel can report. */
@@ -953,6 +961,10 @@ export interface GateInput {
953
961
  summary: ChapterSummary | null;
954
962
  /** P5 may omit `summary`; when omitted, the previous plan summary is reused. */
955
963
  summaryProvided?: boolean;
964
+ /** Summary-only repair: no manuscript change, no P4/P6 proof requirement. */
965
+ summaryOnly?: boolean;
966
+ /** The last write was a summary-only repair; P6 may continue without a new brief. */
967
+ summaryOnlyRevision?: boolean;
956
968
  review: ReviewDocument | null;
957
969
  check: CheckDocument | null;
958
970
  /** When set, result-bearing gates run only the named check scopes. */
@@ -1030,6 +1042,8 @@ export interface StatusReport {
1030
1042
  stage: Stage;
1031
1043
  rounds: RoundCounters;
1032
1044
  blocking: BlockingItem[];
1045
+ /** Non-blocking recovery notes, e.g. a recoverable pending transaction. */
1046
+ warnings?: Warning[];
1033
1047
  /** plan/review/check/ledger files that exist but cannot be read safely. */
1034
1048
  state_errors: StateError[];
1035
1049
  metrics: WordMetrics | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-novel-write-engine",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Novel writing engine for DeepSeek Harness: state machine, gates, rulepacks and ledgers moved from prompts into code.",
5
5
  "keywords": [
6
6
  "dsh-plugin",
package/skills/entry.md CHANGED
@@ -25,7 +25,7 @@ description: 引擎版小说创作流程——状态、门控、字数与写盘
25
25
 
26
26
  ## 书级规划(0.2.0)
27
27
 
28
- 新项目先 `novel_guide`;推荐但不强制:`novel_blueprint`(蓝图/卷)→ `novel_outline`(章卡)→ `novel_worldbook`(设定集)。已有大纲可用 `novel_outline_import` 导入 Markdown/YAML/JSON。只要存在章卡,P2/P3 就按章卡校验标题、场景、字数与 cast;严格模式还要求章卡必须存在。要改已归档章先 `novel_reopen`(必须带 reason)。
28
+ 新项目先 `novel_guide`;推荐但不强制:`novel_blueprint`(蓝图/卷)→ `novel_outline`(章卡)→ `novel_worldbook`(设定集)。已有大纲可用 `novel_outline_import` 导入 Markdown/YAML/JSON。`novel_outline` 的章卡按 `num`、卷按 `title` upsert:只提交要改的对象,省略的卡保持不动;删除必须显式 `remove`/`remove_volumes`,不要用重交全量卡来“确保存在”。只要存在章卡,P2/P3 就按章卡校验标题、场景、字数与 cast;严格模式还要求章卡必须存在。要改已归档章先 `novel_reopen`(必须带 reason)。
29
29
 
30
30
  ## 流程路由
31
31