@akagilnc/pi-workflow-roles 0.1.5877 → 0.1.5882

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.
@@ -1698,7 +1698,7 @@ var init_navigator_output = __esm({
1698
1698
 
1699
1699
  // src/review-submission.ts
1700
1700
  import { Type as Type5 } from "typebox";
1701
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema;
1701
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema, ticketComplexityRowSchema, inspectorSubmissionSchema;
1702
1702
  var init_review_submission = __esm({
1703
1703
  "src/review-submission.ts"() {
1704
1704
  "use strict";
@@ -1763,6 +1763,27 @@ var init_review_submission = __esm({
1763
1763
  { additionalProperties: true }
1764
1764
  )
1765
1765
  );
1766
+ ticketComplexityRowSchema = Type5.Object(
1767
+ {
1768
+ class: Type5.String({ description: "\u7167\u6284\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u90A3\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587" }),
1769
+ hits: Type5.Array(Type5.String(), {
1770
+ description: "\u672C\u7968\u51C0\u589E\u91CC\u547D\u4E2D\u8FD9\u4E00\u53E5\u7684\u6BCF\u4E00\u5904 path:line\uFF0C\u5E76\u5199\u5220\u5230\u54EA\u3001\u5E76\u5230\u54EA\uFF1B\u6253\u5F00\u770B\u8FC7\u624D\u7B97\u3002\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\u7B54\u6CD5"
1771
+ })
1772
+ },
1773
+ { additionalProperties: true }
1774
+ );
1775
+ inspectorSubmissionSchema = withTerminatingOutputDeclarations(
1776
+ Type5.Object(
1777
+ {
1778
+ status: reviewStatusField,
1779
+ ...reviewNarrativeFields,
1780
+ ticketComplexity: Type5.Array(ticketComplexityRowSchema, {
1781
+ description: "\u6574\u7968\u590D\u6742\u5EA6\uFF1A\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF09\u5230 HEAD \u7684\u751F\u4EA7\u4E0E\u6D4B\u8BD5\u51C0\u589E\uFF0C\u5BF9\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u6BCF\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587\u5404\u7B54\u4E00\u884C\u3002\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\u6539\u52A8\u4E5F\u7B97\u5728\u5185\u3002"
1782
+ })
1783
+ },
1784
+ { additionalProperties: true }
1785
+ )
1786
+ );
1766
1787
  }
1767
1788
  });
1768
1789
 
@@ -3203,7 +3224,7 @@ var init_role_submission_declarations = __esm({
3203
3224
  label: "\u53F0\u9662\u8F93\u51FA",
3204
3225
  description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
3205
3226
  promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
3206
- parameters: reviewSubmissionSchema
3227
+ parameters: inspectorSubmissionSchema
3207
3228
  },
3208
3229
  gatekeeper: {
3209
3230
  label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
@@ -497,7 +497,7 @@ var init_terminating_infrastructure = __esm({
497
497
 
498
498
  // src/review-submission.ts
499
499
  import { Type as Type2 } from "typebox";
500
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema;
500
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema, ticketComplexityRowSchema, inspectorSubmissionSchema;
501
501
  var init_review_submission = __esm({
502
502
  "src/review-submission.ts"() {
503
503
  "use strict";
@@ -562,6 +562,27 @@ var init_review_submission = __esm({
562
562
  { additionalProperties: true }
563
563
  )
564
564
  );
565
+ ticketComplexityRowSchema = Type2.Object(
566
+ {
567
+ class: Type2.String({ description: "\u7167\u6284\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u90A3\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587" }),
568
+ hits: Type2.Array(Type2.String(), {
569
+ description: "\u672C\u7968\u51C0\u589E\u91CC\u547D\u4E2D\u8FD9\u4E00\u53E5\u7684\u6BCF\u4E00\u5904 path:line\uFF0C\u5E76\u5199\u5220\u5230\u54EA\u3001\u5E76\u5230\u54EA\uFF1B\u6253\u5F00\u770B\u8FC7\u624D\u7B97\u3002\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\u7B54\u6CD5"
570
+ })
571
+ },
572
+ { additionalProperties: true }
573
+ );
574
+ inspectorSubmissionSchema = withTerminatingOutputDeclarations(
575
+ Type2.Object(
576
+ {
577
+ status: reviewStatusField,
578
+ ...reviewNarrativeFields,
579
+ ticketComplexity: Type2.Array(ticketComplexityRowSchema, {
580
+ description: "\u6574\u7968\u590D\u6742\u5EA6\uFF1A\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF09\u5230 HEAD \u7684\u751F\u4EA7\u4E0E\u6D4B\u8BD5\u51C0\u589E\uFF0C\u5BF9\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u6BCF\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587\u5404\u7B54\u4E00\u884C\u3002\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\u6539\u52A8\u4E5F\u7B97\u5728\u5185\u3002"
581
+ })
582
+ },
583
+ { additionalProperties: true }
584
+ )
585
+ );
565
586
  }
566
587
  });
567
588
 
@@ -4466,7 +4487,7 @@ var init_role_submission_declarations = __esm({
4466
4487
  label: "\u53F0\u9662\u8F93\u51FA",
4467
4488
  description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
4468
4489
  promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
4469
- parameters: reviewSubmissionSchema
4490
+ parameters: inspectorSubmissionSchema
4470
4491
  },
4471
4492
  gatekeeper: {
4472
4493
  label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
@@ -1,11 +1,11 @@
1
- import { reviewSubmissionSchema } from "./review-submission.js";
1
+ import { inspectorSubmissionSchema } from "./review-submission.js";
2
2
  import { roleSubmissionDeclaration } from "./role-submission-declarations.js";
3
3
  import { INSPECTOR_OUTPUT_TOOL_NAME, validateRecordedInspectorOutput, } from "./inspector-contracts.js";
4
4
  export { INSPECTOR_OUTPUT_TOOL_NAME, };
5
5
  export { INSPECTOR_OUTPUT_TOOL_NAME as INSPECTOR_OUTPUT_TOOL };
6
6
  export { validateRecordedInspectorOutput };
7
7
  /** 台院事后察举交卷形状。 */
8
- export const inspectorOutputSchema = reviewSubmissionSchema;
8
+ export const inspectorOutputSchema = inspectorSubmissionSchema;
9
9
  /**
10
10
  * 决定工具规格。生命周期装配归注册信封 owner——src/role-runtime.ts(ADR 0018)。
11
11
  */
@@ -8723,7 +8723,7 @@ var init_navigator_output = __esm({
8723
8723
  });
8724
8724
 
8725
8725
  // src/review-submission.ts
8726
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema;
8726
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema, ticketComplexityRowSchema, inspectorSubmissionSchema;
8727
8727
  var init_review_submission = __esm({
8728
8728
  "src/review-submission.ts"() {
8729
8729
  "use strict";
@@ -8789,6 +8789,27 @@ var init_review_submission = __esm({
8789
8789
  { additionalProperties: true }
8790
8790
  )
8791
8791
  );
8792
+ ticketComplexityRowSchema = typebox_exports.Object(
8793
+ {
8794
+ class: typebox_exports.String({ description: "\u7167\u6284\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u90A3\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587" }),
8795
+ hits: typebox_exports.Array(typebox_exports.String(), {
8796
+ description: "\u672C\u7968\u51C0\u589E\u91CC\u547D\u4E2D\u8FD9\u4E00\u53E5\u7684\u6BCF\u4E00\u5904 path:line\uFF0C\u5E76\u5199\u5220\u5230\u54EA\u3001\u5E76\u5230\u54EA\uFF1B\u6253\u5F00\u770B\u8FC7\u624D\u7B97\u3002\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\u7B54\u6CD5"
8797
+ })
8798
+ },
8799
+ { additionalProperties: true }
8800
+ );
8801
+ inspectorSubmissionSchema = withTerminatingOutputDeclarations(
8802
+ typebox_exports.Object(
8803
+ {
8804
+ status: reviewStatusField,
8805
+ ...reviewNarrativeFields,
8806
+ ticketComplexity: typebox_exports.Array(ticketComplexityRowSchema, {
8807
+ description: "\u6574\u7968\u590D\u6742\u5EA6\uFF1A\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF09\u5230 HEAD \u7684\u751F\u4EA7\u4E0E\u6D4B\u8BD5\u51C0\u589E\uFF0C\u5BF9\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u6BCF\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587\u5404\u7B54\u4E00\u884C\u3002\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\u6539\u52A8\u4E5F\u7B97\u5728\u5185\u3002"
8808
+ })
8809
+ },
8810
+ { additionalProperties: true }
8811
+ )
8812
+ );
8792
8813
  }
8793
8814
  });
8794
8815
 
@@ -9821,7 +9842,7 @@ var init_role_submission_declarations = __esm({
9821
9842
  label: "\u53F0\u9662\u8F93\u51FA",
9822
9843
  description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
9823
9844
  promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
9824
- parameters: reviewSubmissionSchema
9845
+ parameters: inspectorSubmissionSchema
9825
9846
  },
9826
9847
  gatekeeper: {
9827
9848
  label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
@@ -9213,7 +9213,7 @@ var init_navigator_output = __esm({
9213
9213
  });
9214
9214
 
9215
9215
  // src/review-submission.ts
9216
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema;
9216
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, courtClauseItemSchema, courtClausesField, courtReviewSubmissionSchema, ticketComplexityRowSchema, inspectorSubmissionSchema;
9217
9217
  var init_review_submission = __esm({
9218
9218
  "src/review-submission.ts"() {
9219
9219
  "use strict";
@@ -9279,6 +9279,27 @@ var init_review_submission = __esm({
9279
9279
  { additionalProperties: true }
9280
9280
  )
9281
9281
  );
9282
+ ticketComplexityRowSchema = typebox_exports.Object(
9283
+ {
9284
+ class: typebox_exports.String({ description: "\u7167\u6284\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u90A3\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587" }),
9285
+ hits: typebox_exports.Array(typebox_exports.String(), {
9286
+ description: "\u672C\u7968\u51C0\u589E\u91CC\u547D\u4E2D\u8FD9\u4E00\u53E5\u7684\u6BCF\u4E00\u5904 path:line\uFF0C\u5E76\u5199\u5220\u5230\u54EA\u3001\u5E76\u5230\u54EA\uFF1B\u6253\u5F00\u770B\u8FC7\u624D\u7B97\u3002\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\u7B54\u6CD5"
9287
+ })
9288
+ },
9289
+ { additionalProperties: true }
9290
+ );
9291
+ inspectorSubmissionSchema = withTerminatingOutputDeclarations(
9292
+ typebox_exports.Object(
9293
+ {
9294
+ status: reviewStatusField,
9295
+ ...reviewNarrativeFields,
9296
+ ticketComplexity: typebox_exports.Array(ticketComplexityRowSchema, {
9297
+ description: "\u6574\u7968\u590D\u6742\u5EA6\uFF1A\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF09\u5230 HEAD \u7684\u751F\u4EA7\u4E0E\u6D4B\u8BD5\u51C0\u589E\uFF0C\u5BF9\u300A\u8D28\u91CF\u6CD5\u300B\u91CC\u6BCF\u4E00\u53E5\u8981\u6C42\u5220\u9664\u3001\u5408\u5E76\u3001\u590D\u7528\u6216\u4E0D\u53E6\u5199\u7684\u6761\u6587\u5404\u7B54\u4E00\u884C\u3002\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\u6539\u52A8\u4E5F\u7B97\u5728\u5185\u3002"
9298
+ })
9299
+ },
9300
+ { additionalProperties: true }
9301
+ )
9302
+ );
9282
9303
  }
9283
9304
  });
9284
9305
 
@@ -11566,7 +11587,7 @@ var init_role_submission_declarations = __esm({
11566
11587
  label: "\u53F0\u9662\u8F93\u51FA",
11567
11588
  description: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267\uFF0C\u72B6\u6001\u4E3A converged\u3001continue \u6216 escalate\u3002",
11568
11589
  promptSnippet: "\u53F0\u9662\u7EC8\u5C40\u56DE\u6267",
11569
- parameters: reviewSubmissionSchema
11590
+ parameters: inspectorSubmissionSchema
11570
11591
  },
11571
11592
  gatekeeper: {
11572
11593
  label: "\u95E8\u4E0B\u7701\u51B3\u8BAE",
@@ -62,3 +62,18 @@ export const courtReviewSubmissionSchema = withTerminatingOutputDeclarations(Typ
62
62
  ...reviewNarrativeFields,
63
63
  clauses: courtClausesField,
64
64
  }, { additionalProperties: true }));
65
+ /** Inspector whole-ticket complexity row: one quality-law deletion clause, answered for the whole ticket. */
66
+ export const ticketComplexityRowSchema = Type.Object({
67
+ class: Type.String({ description: "照抄《质量法》里那一句要求删除、合并、复用或不另写的条文" }),
68
+ hits: Type.Array(Type.String(), {
69
+ description: "本票净增里命中这一句的每一处 path:line,并写删到哪、并到哪;打开看过才算。一处没有为空数组,没有第三种答法",
70
+ }),
71
+ }, { additionalProperties: true });
72
+ /** Inspector generation schema: shared review face plus the required whole-ticket complexity answer (package records as-is). */
73
+ export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(Type.Object({
74
+ status: reviewStatusField,
75
+ ...reviewNarrativeFields,
76
+ ticketComplexity: Type.Array(ticketComplexityRowSchema, {
77
+ description: "整票复杂度:本票起点(本分支与家族分支或目标分支的 git merge-base)到 HEAD 的生产与测试净增,对《质量法》里每一句要求删除、合并、复用或不另写的条文各答一行。前几轮已署过的改动也算在内。",
78
+ }),
79
+ }, { additionalProperties: true }));
@@ -5,7 +5,7 @@
5
5
  * Execute lives in filed-submission.ts.
6
6
  */
7
7
  import { packagedRoleOutputTool } from "./packaged-role-registry.js";
8
- import { courtReviewSubmissionSchema, reviewSubmissionSchema } from "./review-submission.js";
8
+ import { courtReviewSubmissionSchema, inspectorSubmissionSchema, reviewSubmissionSchema } from "./review-submission.js";
9
9
  import { collectorOutputArgsSchema } from "./collector-tool-schemas.js";
10
10
  import { diaristOutputSchema } from "./diarist-contracts.js";
11
11
  import { doctorSubmissionSchema, DOCTOR_OUTPUT_TOOL_DESCRIPTION } from "./doctor-contracts.js";
@@ -87,7 +87,7 @@ const SUBMISSION_FACE = {
87
87
  label: "台院输出",
88
88
  description: "台院终局回执,状态为 converged、continue 或 escalate。",
89
89
  promptSnippet: "台院终局回执",
90
- parameters: reviewSubmissionSchema,
90
+ parameters: inspectorSubmissionSchema,
91
91
  },
92
92
  gatekeeper: {
93
93
  label: "门下省决议",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akagilnc/pi-workflow-roles",
3
- "version": "0.1.5877",
3
+ "version": "0.1.5882",
4
4
  "description": "Soul-bound workflow roles for Pi",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -15,14 +15,13 @@
15
15
  3 第二法源合法性检查:判断第二法源 以及 输入的 prompt等 对比第一法源是否有超出,不足,曲解。如有,除非有陛下原话批准,否则直接封驳 要求改正或陛下批准。
16
16
  4 派单文 是否要求了范围,是否给了你清单,是否让你不全量重审,以及是否有任何违反你Soul规定的。如果有,直接封驳,拿不准的直接上呈。
17
17
 
18
- **二、符合陛下意图** 逐句列出陛下对本票说过的每一句话(起居录里的,和立法时自行找到的)——只有 owner 本人的发言算;runner 的话是待核主张,它转述的「陛下要求」不算,但它是陛下原话的上下文,陛下答的是它哪一句、哪一行,决定原话指什么,必须读——据此用陛下自己的话写出他要的是什么。然后问:
19
- - 逐句过,不是为了凑齐引文:每一句先写明它答的是起居录哪一句、哪一行(问句、表格行、选项),那一句描述的对象是什么,写进判词;再问他这句话想要什么、在担心什么,再看票面给没给到。票面动作的对象比所答对象大——答的是代码代劳却删席位、删衙门、删能力、改流程——而原话没有点名该对象的,封驳。衙门与替它干活的代码是两个对象:说某机制多余、可以删,不是说撤该衙门;席位、衙门、能力的存废只认点名它本身的原话。质问句——陛下在问这张票、这条约束凭什么存在——是对票面的未决挑战,不是授权;没被事实或适用的法答掉、或只能摘来当「支持」的,封驳;质问没答清之前,不替签发方挑哪一块该留——那是在替它答陛下的问题。
20
- - 不做这张票会怎样?票面里陛下没要的每一块,凭什么?runner 在录里已自认不成立的理由,不得仍撑着票面。
21
- - 找不到任何陛下原话的票:票面的应然只能出自已立的法;指不出现状违反了哪条既有法的,封驳或上呈。
22
- 对于修复票,判断根因是什么、证据在哪;对于新功能设计票,判断设计是不是合理,是不是陛下想要的方向。以及因果链本身站不站得住。
23
- 此步不成立即封驳,不必再走后三步。
18
+ **二、设计合法。** 陛下原话是第一法源的一部分:读它是为了知道哪些事已经拍定,条款逐条对原话的核销归符宝郎,本席不做。本步审的是设计答案的来路:
19
+ - 中书省问了而由宰相作答、没等陛下拍的每一题(中书省回执里有答案、未上呈的题),其答案须能从适用法(第一、第二法源)或已定事项(父票、前票里陛下拍定的,和中书省问答里陛下拍定并写进票面的;宰相自己的答案不算)推出来;判词里写出这条推导。推不出的,该题宰相答不了,改标陛下题,上呈,附原题原选项;不得以「合理」「承接设计」「现状如此」顶替推导。
20
+ - 中书省在题里否决某个做法的(「旧模型,不选」之类),否决须引法或已定事项;引不出的,该做法并列呈陛下。
21
+ - 对于修复票,判断根因是什么、证据在哪;对于设计票,判断设计能否从法推出,以及因果链本身站不站得住。
22
+ 此步不成立即封驳或上呈,不必再走后三步。
24
23
 
25
- **三、相抵** 票面,相关票与在飞分支与法源有无抵触。票面自相抵同为相抵。
24
+ **三、相抵** 票面、相关票与在飞分支,与法源和已定事项有无抵触。在飞分支里已做出来的东西与已定事项相抵的,是相抵,不是现状。票面自相抵同为相抵。
26
25
 
27
26
  **四、缺失** 法源要求的,票面有没有漏:适用法只查两类:票面与某条 ADR 决定相抵的,和把某条决定留给别的票承接的,票面须写明该条与「由 #x 承接」;这两类之外的 ADR 没引不算缺失,不得为此封驳;验收面须覆盖票面每条主张;票面里每一条行为都须答得出《送庭前三问》第一问:起、停、续、终、接各归谁没写的行为,即缺失;前置产物、决定、答复须在;承重主张的源头不存在、不支持、已过时,同为缺失。缺失列表在能力范围内一次扫完,尽量避免因缺失导致多轮往返。
28
27
 
@@ -34,8 +33,8 @@
34
33
 
35
34
  五步是审读,五问是裁决口径,对应关系固定,不重做:
36
35
  1. 票面是否符合既定制度——由「相抵」答;
37
- 2. 授权是否真实——由「立法②」答:不认转述与口头;
38
- 3. 文书是否与原意一致——由「缺失」「擅加」「符合陛下意图」答:无过度解释、无夹带、无缺口、符合原意;
36
+ 2. 设计是否合法——由「设计合法」答:宰相可答之题的答案可从法或已定事项推出,否决有出处;
37
+ 3. 文书是否与法一致——由「缺失」「擅加」答:无夹带、无缺口;条款与陛下原话的对应归符宝郎;
39
38
  4. 是否存在必须退回重议的问题;
40
39
  5. 是否已具备正式发布与执行资格。
41
40
 
@@ -8,6 +8,8 @@
8
8
 
9
9
  正确性由真实调用追到外部结果,核对正常、边界、失败路径及跨层传递;要求与改动双向对表。测试审查须辨识指标合格而契约失效的反例。
10
10
 
11
+ 本腿判完,再审整票:本票从起点到 HEAD 的生产与测试净增,还剩哪些能删、能合并,按 ticketComplexity 逐条答。有一条命中就封驳;封驳按那句条文写类、列全命中处,不用某一处实例的说法。
12
+
11
13
  取证与同类复核依《审法》;复杂度、测试质量与成本依《质量法》。
12
14
 
13
15
  封驳写清现象,原因,具体问题。根因不明先指诊断。
@@ -1,5 +1,5 @@
1
1
  import type { Static } from "typebox";
2
- import { reviewSubmissionSchema } from "./review-submission.ts";
2
+ import { inspectorSubmissionSchema } from "./review-submission.ts";
3
3
  import { roleSubmissionDeclaration } from "./role-submission-declarations.ts";
4
4
  import {
5
5
  INSPECTOR_OUTPUT_TOOL_NAME,
@@ -15,7 +15,7 @@ export type { InspectorOutput };
15
15
  export { validateRecordedInspectorOutput };
16
16
 
17
17
  /** 台院事后察举交卷形状。 */
18
- export const inspectorOutputSchema = reviewSubmissionSchema;
18
+ export const inspectorOutputSchema = inspectorSubmissionSchema;
19
19
 
20
20
  export type InspectorOutputParameters = Static<typeof inspectorOutputSchema>;
21
21
 
@@ -91,4 +91,30 @@ export const courtReviewSubmissionSchema = withTerminatingOutputDeclarations(
91
91
  ),
92
92
  );
93
93
 
94
+ /** Inspector whole-ticket complexity row: one quality-law deletion clause, answered for the whole ticket. */
95
+ export const ticketComplexityRowSchema = Type.Object(
96
+ {
97
+ class: Type.String({ description: "照抄《质量法》里那一句要求删除、合并、复用或不另写的条文" }),
98
+ hits: Type.Array(Type.String(), {
99
+ description: "本票净增里命中这一句的每一处 path:line,并写删到哪、并到哪;打开看过才算。一处没有为空数组,没有第三种答法",
100
+ }),
101
+ },
102
+ { additionalProperties: true },
103
+ );
104
+
105
+ /** Inspector generation schema: shared review face plus the required whole-ticket complexity answer (package records as-is). */
106
+ export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(
107
+ Type.Object(
108
+ {
109
+ status: reviewStatusField,
110
+ ...reviewNarrativeFields,
111
+ ticketComplexity: Type.Array(ticketComplexityRowSchema, {
112
+ description:
113
+ "整票复杂度:本票起点(本分支与家族分支或目标分支的 git merge-base)到 HEAD 的生产与测试净增,对《质量法》里每一句要求删除、合并、复用或不另写的条文各答一行。前几轮已署过的改动也算在内。",
114
+ }),
115
+ },
116
+ { additionalProperties: true },
117
+ ),
118
+ );
119
+
94
120
  export type ReviewSubmission = { readonly status?: unknown; readonly [key: string]: unknown };
@@ -5,7 +5,7 @@
5
5
  * Execute lives in filed-submission.ts.
6
6
  */
7
7
  import { packagedRoleOutputTool, type PackagedRole } from "./packaged-role-registry.ts";
8
- import { courtReviewSubmissionSchema, reviewSubmissionSchema } from "./review-submission.ts";
8
+ import { courtReviewSubmissionSchema, inspectorSubmissionSchema, reviewSubmissionSchema } from "./review-submission.ts";
9
9
  import { collectorOutputArgsSchema } from "./collector-tool-schemas.ts";
10
10
  import { diaristOutputSchema } from "./diarist-contracts.ts";
11
11
  import { doctorSubmissionSchema, DOCTOR_OUTPUT_TOOL_DESCRIPTION } from "./doctor-contracts.ts";
@@ -99,7 +99,7 @@ const SUBMISSION_FACE = {
99
99
  label: "台院输出",
100
100
  description: "台院终局回执,状态为 converged、continue 或 escalate。",
101
101
  promptSnippet: "台院终局回执",
102
- parameters: reviewSubmissionSchema,
102
+ parameters: inspectorSubmissionSchema,
103
103
  },
104
104
  gatekeeper: {
105
105
  label: "门下省决议",