@akagilnc/pi-workflow-roles 0.1.6054 → 0.1.6063

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.
@@ -1682,7 +1682,7 @@ var init_navigator_output = __esm({
1682
1682
 
1683
1683
  // src/review-submission.ts
1684
1684
  import { Type as Type5 } from "typebox";
1685
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowSchema, inspectorSubmissionSchema;
1685
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
1686
1686
  var init_review_submission = __esm({
1687
1687
  "src/review-submission.ts"() {
1688
1688
  "use strict";
@@ -1732,7 +1732,7 @@ var init_review_submission = __esm({
1732
1732
  description: "\u90A3\u53E5\u539F\u8BDD\u6240\u7B54\u7684 runner \u53E5\u539F\u6587\uFF08\u95EE\u53E5\u3001\u9009\u9879\u3001\u8868\u683C\u884C\uFF0C\u7167\u6284\uFF09\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u3001\u4E0D\u662F\u5728\u7B54\u8C01\u7684\uFF0C\u586B null"
1733
1733
  }),
1734
1734
  askedObject: Type5.Union([Type5.String(), Type5.Null()], {
1735
- description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF08\u5B83\u7684\u5BF9\u8C61\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
1735
+ description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF1A\u7167\u6284 answered \u91CC\u70B9\u540D\u5BF9\u8C61\u7684\u539F\u8BCD\uFF0C\u4E0D\u8F6C\u8FF0\u3001\u4E0D\u6982\u62EC\uFF08\u90A3\u53E5\u95EE\u300C\u7F13\u5B58\u662F\u89E3\u7981\u8FD8\u662F\u7EF4\u6301\u7981\u4EE4\u300D\uFF0C\u8FD9\u683C\u5C31\u662F\u300C\u7F13\u5B58\u7981\u4EE4\u300D\uFF0C\u4E0D\u662F\u300C\u8FD0\u884C\u65F6 DRY \u4FEE\u590D\u300D\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
1736
1736
  }),
1737
1737
  derivation: Type5.String({
1738
1738
  description: "\u4E00\u53E5\u63A8\u5BFC\uFF1A\u4ECE\u539F\u8BDD\u54EA\u4E2A\u610F\u601D\u5230\u8BE5\u6761\u6B3E\u3002answered \u4E0D\u4E3A null \u65F6\uFF0C\u6761\u6B3E\u7684\u5BF9\u8C61\u987B\u5728 askedObject \u4E4B\u5185\uFF0C\u6216\u53E6\u6709\u539F\u8BDD\u70B9\u540D\u66F4\u5927\u7684\u5BF9\u8C61\uFF0CownerUuid \u624D\u7AD9\u5F97\u4F4F\uFF0C\u5426\u5219\u586B null\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u7684\u539F\u8BDD\u76F4\u63A5\u6309\u5B83\u7684\u610F\u601D\u63A8"
@@ -1779,7 +1779,7 @@ var init_review_submission = __esm({
1779
1779
  layer: Type5.Integer({ description: "\u4ECE\u672C\u7968\u8D77\u70B9\u5230 HEAD\uFF0C\u8FD9\u662F\u7B2C\u51E0\u5904\u8FD9\u6837\u7684\u65B0\u589E\uFF08\u542B\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\uFF09" })
1780
1780
  };
1781
1781
  MECHANISM_FRAMEWORK_RULE = "\u6846\u67B6\u662F\u4ED3\u5E93 ADR \u6216\u7968\u9762\u70B9\u540D\u7684\u90A3\u4E00\u4E2A\uFF08\u8BFB\u5199\u6A21\u578B\u3001Web\u3001\u6D4B\u8BD5\u7B49\u6846\u67B6\uFF09\uFF0C\u4E0D\u662F\u5E2D\u4F4D\u81EA\u9009\uFF1B\u5B9E\u73B0\u8FD9\u4E00\u5C42\u6240\u7528\u7684\u5E93\uFF08ORM\u3001\u7F13\u5B58\u5E93\u3001\u89E3\u6790\u5E93\uFF09\u4E0D\u662F\u6846\u67B6\uFF0C\u5B83\u7684 API \u9875\u6216\u793A\u4F8B\u586B\u4E0D\u8FDB\u8FD9\u683C\u2014\u2014\u90A3\u7B54\u7684\u662F\u300C\u8FD9\u5C42\u600E\u4E48\u505A\u300D\uFF0C\u8FD9\u683C\u95EE\u7684\u662F\u300C\u793A\u8303\u4E0D\u5E26\u8FD9\u5C42\u600E\u4E48\u529E\u300D";
1782
- mechanismRowSchema = Type5.Union(
1782
+ mechanismRowUnion = (extra = {}) => Type5.Union(
1783
1783
  [
1784
1784
  Type5.Object(
1785
1785
  {
@@ -1787,7 +1787,8 @@ var init_review_submission = __esm({
1787
1787
  official: Type5.String({
1788
1788
  description: `\u8FD9\u6BB5\u4EE3\u7801\u6240\u5C5E\u5E94\u7528\u6846\u67B6\u7684\u5B98\u65B9\u793A\u8303\u91CC\uFF0C\u4E0D\u5E26\u8FD9\u4E00\u5C42\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\uFF1A\u5148\u5199\u6846\u67B6\u540D\uFF0C\u518D\u94FE\u63A5\uFF0B\u539F\u53E5\uFF08\u793A\u8303\u91CC\u76F4\u63A5\u8BFB\u3001\u76F4\u63A5\u67E5\u3001\u4EA4\u7ED9\u6846\u67B6\u54EA\u9879\u8BBE\u7F6E\uFF09\u3002${MECHANISM_FRAMEWORK_RULE}`
1789
1789
  }),
1790
- disposition: Type5.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
1790
+ disposition: Type5.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
1791
+ ...extra
1791
1792
  },
1792
1793
  { additionalProperties: true }
1793
1794
  ),
@@ -1797,13 +1798,20 @@ var init_review_submission = __esm({
1797
1798
  official: Type5.Null({
1798
1799
  description: `\u793A\u8303\u4EE3\u7801\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u6216\u4F9D\u8D56\uFF1A\u586B null\uFF0C\u5E76\u5728 keeps \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
1799
1800
  }),
1800
- disposition: Type5.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
1801
+ disposition: Type5.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
1802
+ ...extra
1801
1803
  },
1802
1804
  { additionalProperties: true }
1803
1805
  )
1804
1806
  ],
1805
1807
  { description: "\u4E24\u79CD\u884C\u5F62\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF08official \u586B\u5B57\uFF0C\u5220\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C\u7559\uFF09" }
1806
1808
  );
1809
+ mechanismRowSchema = mechanismRowUnion();
1810
+ auditorMechanismRowSchema = mechanismRowUnion({
1811
+ judgeSaid: Type5.Union([Type5.String(), Type5.Null()], {
1812
+ description: "\u5927\u7406\u5BFA\u5224\u8BCD\u91CC\u88C1\u5230\u8FD9\u4E00\u5C42\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u5224\u8BCD\u6CA1\u63D0\u8FD9\u4E00\u5C42\uFF0C\u586B null"
1813
+ })
1814
+ });
1807
1815
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
1808
1816
  Type5.Object(
1809
1817
  {
@@ -1822,6 +1830,36 @@ var init_review_submission = __esm({
1822
1830
  { additionalProperties: true }
1823
1831
  )
1824
1832
  );
1833
+ auditorSubmissionSchema = withTerminatingOutputDeclarations(
1834
+ Type5.Object(
1835
+ {
1836
+ status: reviewStatusField,
1837
+ ...reviewNarrativeFields,
1838
+ mechanisms: Type5.Array(auditorMechanismRowSchema, {
1839
+ description: "\u590D\u6742\u5EA6\u8D26\uFF1A\u5927\u7406\u5BFA\u672C\u8F6E\u5224\u8BCD\u6240\u88C1\u7684\u5B9E\u73B0\uFF0C\u4ECE\u672C\u7968\u8D77\u70B9\u5230\u8BE5 HEAD \u751F\u4EA7\u4EE3\u7801\u65B0\u589E\u7684\u6BCF\u4E00\u5904\u4F9D\u8D56\u884C\u3001\u8DE8\u8C03\u7528\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u88C5\u9970\u6216\u5305\u88C5\uFF0C\u5404\u4E00\u884C\uFF08\u540C\u53F0\u9662\u673A\u5236\u5C42\u8868\uFF09\uFF0C\u518D\u5199\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5C42\u8BF4\u4E86\u4EC0\u4E48\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002\u5224\u8BCD\u7F72\u4E86\u800C\u8868\u91CC\u6709\u300C\u5220\u300D\u884C\u5224\u8BCD\u6CA1\u5904\u7F6E\uFF0C\u5C31\u662F\u9519\u7F72\u3002"
1840
+ }),
1841
+ runtime: Type5.Array(
1842
+ Type5.Object(
1843
+ {
1844
+ entry: Type5.String({ description: "\u771F\u5B9E\u5165\u53E3\uFF1A\u4F60\u4EB2\u8DD1\u7684\u547D\u4EE4\u539F\u6587\uFF08\u6D4B\u8BD5\u7528\u4F8B\u6216\u7A0B\u5E8F\u5165\u53E3\uFF09\u3002\u7968\u9762\u3001\u5224\u8BCD\u3001\u65BD\u5DE5\u8BB0\u5F55\u3001\u53F0\u9662\u56DE\u6267\u91CC\u70B9\u540D\u8FC7\u7684\u6BCF\u4E2A\u771F\u5B9E\u5165\u53E3\u90FD\u8981\u6709\u4E00\u884C\uFF0C\u4E00\u4E2A\u4E0D\u6F0F\uFF0C\u518D\u52A0\u4F60\u81EA\u5DF1\u9009\u7684\uFF1B\u6570\u5B57\u53EA\u8BA4\u81EA\u5DF1\u8DD1\u51FA\u6765\u7684\uFF0C\u4E0D\u6284\u8BB0\u5F55" }),
1845
+ atBase: Type5.String({ description: "\u5728\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF0C\u540C\u53F0\u9662\uFF09\u4E0A\u8DD1\u8FD9\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF1A\u7528\u65F6\u3001SQL\uFF0F\u8BFB\u6B21\u6570\u3001\u5CF0\u503C\u5185\u5B58\u7B49\u80FD\u8BFB\u5230\u7684\u6570\u5B57\uFF1B\u5165\u53E3\u662F\u672C\u7968\u65B0\u52A0\u3001\u7968\u8D77\u70B9\u4E0A\u6CA1\u6709\u7684\uFF0C\u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D" }),
1846
+ atHead: Type5.String({ description: "\u5728\u6240\u88C1 HEAD \u4E0A\u8DD1\u540C\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF0C\u540C\u4E00\u673A\u5668\u540C\u4E00\u73AF\u5883" }),
1847
+ judgeSaid: Type5.Union([Type5.String(), Type5.Null()], { description: "\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5165\u53E3\u5FEB\u6162\u8BF4\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u6CA1\u8BF4\u586B null" }),
1848
+ compared: Type5.Union(
1849
+ [Type5.Literal("HEAD \u6BD4\u7968\u8D77\u70B9\u6162\u6216\u8BFB\u5F97\u591A"), Type5.Literal("HEAD \u4E0D\u6BD4\u7968\u8D77\u70B9\u6162\u3001\u4E0D\u591A\u8BFB"), Type5.Literal("\u65E0\u4ECE\u6BD4\uFF1A\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\uFF0C\u6216\u8FD9\u4E00\u7AEF\u8DD1\u5931\u8D25")],
1850
+ { description: "\u53EA\u8BA4 atBase \u4E0E atHead \u5E76\u6392\u7684\u6570\u5B57\uFF1A\u7528\u65F6\u6216\u8BFB\u6B21\u6570\u4EFB\u4E00\u53D8\u5927\u5C31\u662F\u7B2C\u4E00\u79CD\uFF1B\u4E00\u6B21\u6027\u6210\u672C\u3001CI \u53E6\u7B97\u3001\u4E0D\u963B\u65AD\u90FD\u4E0D\u662F\u7406\u7531\u3002\u7B2C\u4E09\u79CD\u7ED9\u4E24\u7C7B\u884C\uFF1A\u7968\u8D77\u70B9\u4E0A\u4E0D\u5B58\u5728\u7684\u5165\u53E3\uFF08atBase \u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D\uFF09\uFF0C\u6216\u4EFB\u4E00\u7AEF\u8DD1\u5931\u8D25\uFF08\u628A\u5931\u8D25\u8F93\u51FA\u539F\u6837\u5199\u8FDB\u90A3\u4E00\u7AEF\uFF09\uFF1B\u8DD1\u5931\u8D25\u7684\u884C\u6CA1\u89E3\u51B3\u524D\u4E0D\u5F97 converged" }
1851
+ )
1852
+ },
1853
+ { additionalProperties: true }
1854
+ ),
1855
+ {
1856
+ description: "\u6027\u80FD\u8D26\uFF08\u53D7\u5BA1\u4E4B\u7269\u662F\u5927\u7406\u5BFA\u5224\u8BCD\u65F6\u586B\uFF1B\u53D7\u5BA1\u592A\u533B\u7F72\u65F6\u6B64\u8868\u4E0E mechanisms \u90FD\u4E3A\u7A7A\u6570\u7EC4\uFF09\uFF1A\u7968\u9762\u6D89\u53CA\u7684\u771F\u5B9E\u5165\u53E3\uFF0C\u6BCF\u4E2A\u4E00\u884C\uFF0C\u7968\u8D77\u70B9\u4E0E\u6240\u88C1 HEAD \u5404\u4EB2\u8DD1\u4E00\u6B21\u5E76\u6392\u8BB0\uFF1B\u81F3\u5C11\u4E00\u884C\u662F\u7968\u8D77\u70B9\u4E0A\u5C31\u6709\u3001\u4E24\u7AEF\u90FD\u8DD1\u51FA\u6570\u5B57\u7684\u65E2\u6709\u5165\u53E3\u3002\u6709\u4E00\u884C compared \u4E3A\u300C\u6162\u6216\u8BFB\u5F97\u591A\u300D\u800C judgeSaid \u4E3A null\uFF0C\u5224\u8BCD\u5C31\u662F\u7F72\u4E86\u6CA1\u5904\u7F6E\uFF0Cstatus \u4E0D\u80FD\u662F converged\uFF1B\u6709\u8DD1\u5931\u8D25\u7684\u884C\uFF0C\u6216\u6CA1\u6709\u4E00\u884C\u53EF\u6BD4\uFF0Cstatus \u540C\u6837\u4E0D\u80FD\u662F converged\u3002"
1857
+ }
1858
+ )
1859
+ },
1860
+ { additionalProperties: true }
1861
+ )
1862
+ );
1825
1863
  }
1826
1864
  });
1827
1865
 
@@ -3270,9 +3308,9 @@ var init_role_submission_declarations = __esm({
3270
3308
  },
3271
3309
  auditor: {
3272
3310
  label: "\u5BA1\u5211\u9662\u8F93\u51FA",
3273
- description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
3311
+ description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\uFF08\u542B\u6240\u88C1\u5B9E\u73B0\u7684\u590D\u6742\u5EA6\u8D26 mechanisms\uFF09\u3002",
3274
3312
  promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
3275
- parameters: reviewSubmissionSchema
3313
+ parameters: auditorSubmissionSchema
3276
3314
  },
3277
3315
  diarist: {
3278
3316
  label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
@@ -481,7 +481,7 @@ var init_terminating_infrastructure = __esm({
481
481
 
482
482
  // src/review-submission.ts
483
483
  import { Type as Type2 } from "typebox";
484
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowSchema, inspectorSubmissionSchema;
484
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
485
485
  var init_review_submission = __esm({
486
486
  "src/review-submission.ts"() {
487
487
  "use strict";
@@ -531,7 +531,7 @@ var init_review_submission = __esm({
531
531
  description: "\u90A3\u53E5\u539F\u8BDD\u6240\u7B54\u7684 runner \u53E5\u539F\u6587\uFF08\u95EE\u53E5\u3001\u9009\u9879\u3001\u8868\u683C\u884C\uFF0C\u7167\u6284\uFF09\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u3001\u4E0D\u662F\u5728\u7B54\u8C01\u7684\uFF0C\u586B null"
532
532
  }),
533
533
  askedObject: Type2.Union([Type2.String(), Type2.Null()], {
534
- description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF08\u5B83\u7684\u5BF9\u8C61\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
534
+ description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF1A\u7167\u6284 answered \u91CC\u70B9\u540D\u5BF9\u8C61\u7684\u539F\u8BCD\uFF0C\u4E0D\u8F6C\u8FF0\u3001\u4E0D\u6982\u62EC\uFF08\u90A3\u53E5\u95EE\u300C\u7F13\u5B58\u662F\u89E3\u7981\u8FD8\u662F\u7EF4\u6301\u7981\u4EE4\u300D\uFF0C\u8FD9\u683C\u5C31\u662F\u300C\u7F13\u5B58\u7981\u4EE4\u300D\uFF0C\u4E0D\u662F\u300C\u8FD0\u884C\u65F6 DRY \u4FEE\u590D\u300D\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
535
535
  }),
536
536
  derivation: Type2.String({
537
537
  description: "\u4E00\u53E5\u63A8\u5BFC\uFF1A\u4ECE\u539F\u8BDD\u54EA\u4E2A\u610F\u601D\u5230\u8BE5\u6761\u6B3E\u3002answered \u4E0D\u4E3A null \u65F6\uFF0C\u6761\u6B3E\u7684\u5BF9\u8C61\u987B\u5728 askedObject \u4E4B\u5185\uFF0C\u6216\u53E6\u6709\u539F\u8BDD\u70B9\u540D\u66F4\u5927\u7684\u5BF9\u8C61\uFF0CownerUuid \u624D\u7AD9\u5F97\u4F4F\uFF0C\u5426\u5219\u586B null\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u7684\u539F\u8BDD\u76F4\u63A5\u6309\u5B83\u7684\u610F\u601D\u63A8"
@@ -578,7 +578,7 @@ var init_review_submission = __esm({
578
578
  layer: Type2.Integer({ description: "\u4ECE\u672C\u7968\u8D77\u70B9\u5230 HEAD\uFF0C\u8FD9\u662F\u7B2C\u51E0\u5904\u8FD9\u6837\u7684\u65B0\u589E\uFF08\u542B\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\uFF09" })
579
579
  };
580
580
  MECHANISM_FRAMEWORK_RULE = "\u6846\u67B6\u662F\u4ED3\u5E93 ADR \u6216\u7968\u9762\u70B9\u540D\u7684\u90A3\u4E00\u4E2A\uFF08\u8BFB\u5199\u6A21\u578B\u3001Web\u3001\u6D4B\u8BD5\u7B49\u6846\u67B6\uFF09\uFF0C\u4E0D\u662F\u5E2D\u4F4D\u81EA\u9009\uFF1B\u5B9E\u73B0\u8FD9\u4E00\u5C42\u6240\u7528\u7684\u5E93\uFF08ORM\u3001\u7F13\u5B58\u5E93\u3001\u89E3\u6790\u5E93\uFF09\u4E0D\u662F\u6846\u67B6\uFF0C\u5B83\u7684 API \u9875\u6216\u793A\u4F8B\u586B\u4E0D\u8FDB\u8FD9\u683C\u2014\u2014\u90A3\u7B54\u7684\u662F\u300C\u8FD9\u5C42\u600E\u4E48\u505A\u300D\uFF0C\u8FD9\u683C\u95EE\u7684\u662F\u300C\u793A\u8303\u4E0D\u5E26\u8FD9\u5C42\u600E\u4E48\u529E\u300D";
581
- mechanismRowSchema = Type2.Union(
581
+ mechanismRowUnion = (extra = {}) => Type2.Union(
582
582
  [
583
583
  Type2.Object(
584
584
  {
@@ -586,7 +586,8 @@ var init_review_submission = __esm({
586
586
  official: Type2.String({
587
587
  description: `\u8FD9\u6BB5\u4EE3\u7801\u6240\u5C5E\u5E94\u7528\u6846\u67B6\u7684\u5B98\u65B9\u793A\u8303\u91CC\uFF0C\u4E0D\u5E26\u8FD9\u4E00\u5C42\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\uFF1A\u5148\u5199\u6846\u67B6\u540D\uFF0C\u518D\u94FE\u63A5\uFF0B\u539F\u53E5\uFF08\u793A\u8303\u91CC\u76F4\u63A5\u8BFB\u3001\u76F4\u63A5\u67E5\u3001\u4EA4\u7ED9\u6846\u67B6\u54EA\u9879\u8BBE\u7F6E\uFF09\u3002${MECHANISM_FRAMEWORK_RULE}`
588
588
  }),
589
- disposition: Type2.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
589
+ disposition: Type2.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
590
+ ...extra
590
591
  },
591
592
  { additionalProperties: true }
592
593
  ),
@@ -596,13 +597,20 @@ var init_review_submission = __esm({
596
597
  official: Type2.Null({
597
598
  description: `\u793A\u8303\u4EE3\u7801\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u6216\u4F9D\u8D56\uFF1A\u586B null\uFF0C\u5E76\u5728 keeps \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
598
599
  }),
599
- disposition: Type2.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
600
+ disposition: Type2.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
601
+ ...extra
600
602
  },
601
603
  { additionalProperties: true }
602
604
  )
603
605
  ],
604
606
  { description: "\u4E24\u79CD\u884C\u5F62\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF08official \u586B\u5B57\uFF0C\u5220\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C\u7559\uFF09" }
605
607
  );
608
+ mechanismRowSchema = mechanismRowUnion();
609
+ auditorMechanismRowSchema = mechanismRowUnion({
610
+ judgeSaid: Type2.Union([Type2.String(), Type2.Null()], {
611
+ description: "\u5927\u7406\u5BFA\u5224\u8BCD\u91CC\u88C1\u5230\u8FD9\u4E00\u5C42\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u5224\u8BCD\u6CA1\u63D0\u8FD9\u4E00\u5C42\uFF0C\u586B null"
612
+ })
613
+ });
606
614
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
607
615
  Type2.Object(
608
616
  {
@@ -621,6 +629,36 @@ var init_review_submission = __esm({
621
629
  { additionalProperties: true }
622
630
  )
623
631
  );
632
+ auditorSubmissionSchema = withTerminatingOutputDeclarations(
633
+ Type2.Object(
634
+ {
635
+ status: reviewStatusField,
636
+ ...reviewNarrativeFields,
637
+ mechanisms: Type2.Array(auditorMechanismRowSchema, {
638
+ description: "\u590D\u6742\u5EA6\u8D26\uFF1A\u5927\u7406\u5BFA\u672C\u8F6E\u5224\u8BCD\u6240\u88C1\u7684\u5B9E\u73B0\uFF0C\u4ECE\u672C\u7968\u8D77\u70B9\u5230\u8BE5 HEAD \u751F\u4EA7\u4EE3\u7801\u65B0\u589E\u7684\u6BCF\u4E00\u5904\u4F9D\u8D56\u884C\u3001\u8DE8\u8C03\u7528\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u88C5\u9970\u6216\u5305\u88C5\uFF0C\u5404\u4E00\u884C\uFF08\u540C\u53F0\u9662\u673A\u5236\u5C42\u8868\uFF09\uFF0C\u518D\u5199\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5C42\u8BF4\u4E86\u4EC0\u4E48\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002\u5224\u8BCD\u7F72\u4E86\u800C\u8868\u91CC\u6709\u300C\u5220\u300D\u884C\u5224\u8BCD\u6CA1\u5904\u7F6E\uFF0C\u5C31\u662F\u9519\u7F72\u3002"
639
+ }),
640
+ runtime: Type2.Array(
641
+ Type2.Object(
642
+ {
643
+ entry: Type2.String({ description: "\u771F\u5B9E\u5165\u53E3\uFF1A\u4F60\u4EB2\u8DD1\u7684\u547D\u4EE4\u539F\u6587\uFF08\u6D4B\u8BD5\u7528\u4F8B\u6216\u7A0B\u5E8F\u5165\u53E3\uFF09\u3002\u7968\u9762\u3001\u5224\u8BCD\u3001\u65BD\u5DE5\u8BB0\u5F55\u3001\u53F0\u9662\u56DE\u6267\u91CC\u70B9\u540D\u8FC7\u7684\u6BCF\u4E2A\u771F\u5B9E\u5165\u53E3\u90FD\u8981\u6709\u4E00\u884C\uFF0C\u4E00\u4E2A\u4E0D\u6F0F\uFF0C\u518D\u52A0\u4F60\u81EA\u5DF1\u9009\u7684\uFF1B\u6570\u5B57\u53EA\u8BA4\u81EA\u5DF1\u8DD1\u51FA\u6765\u7684\uFF0C\u4E0D\u6284\u8BB0\u5F55" }),
644
+ atBase: Type2.String({ description: "\u5728\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF0C\u540C\u53F0\u9662\uFF09\u4E0A\u8DD1\u8FD9\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF1A\u7528\u65F6\u3001SQL\uFF0F\u8BFB\u6B21\u6570\u3001\u5CF0\u503C\u5185\u5B58\u7B49\u80FD\u8BFB\u5230\u7684\u6570\u5B57\uFF1B\u5165\u53E3\u662F\u672C\u7968\u65B0\u52A0\u3001\u7968\u8D77\u70B9\u4E0A\u6CA1\u6709\u7684\uFF0C\u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D" }),
645
+ atHead: Type2.String({ description: "\u5728\u6240\u88C1 HEAD \u4E0A\u8DD1\u540C\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF0C\u540C\u4E00\u673A\u5668\u540C\u4E00\u73AF\u5883" }),
646
+ judgeSaid: Type2.Union([Type2.String(), Type2.Null()], { description: "\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5165\u53E3\u5FEB\u6162\u8BF4\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u6CA1\u8BF4\u586B null" }),
647
+ compared: Type2.Union(
648
+ [Type2.Literal("HEAD \u6BD4\u7968\u8D77\u70B9\u6162\u6216\u8BFB\u5F97\u591A"), Type2.Literal("HEAD \u4E0D\u6BD4\u7968\u8D77\u70B9\u6162\u3001\u4E0D\u591A\u8BFB"), Type2.Literal("\u65E0\u4ECE\u6BD4\uFF1A\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\uFF0C\u6216\u8FD9\u4E00\u7AEF\u8DD1\u5931\u8D25")],
649
+ { description: "\u53EA\u8BA4 atBase \u4E0E atHead \u5E76\u6392\u7684\u6570\u5B57\uFF1A\u7528\u65F6\u6216\u8BFB\u6B21\u6570\u4EFB\u4E00\u53D8\u5927\u5C31\u662F\u7B2C\u4E00\u79CD\uFF1B\u4E00\u6B21\u6027\u6210\u672C\u3001CI \u53E6\u7B97\u3001\u4E0D\u963B\u65AD\u90FD\u4E0D\u662F\u7406\u7531\u3002\u7B2C\u4E09\u79CD\u7ED9\u4E24\u7C7B\u884C\uFF1A\u7968\u8D77\u70B9\u4E0A\u4E0D\u5B58\u5728\u7684\u5165\u53E3\uFF08atBase \u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D\uFF09\uFF0C\u6216\u4EFB\u4E00\u7AEF\u8DD1\u5931\u8D25\uFF08\u628A\u5931\u8D25\u8F93\u51FA\u539F\u6837\u5199\u8FDB\u90A3\u4E00\u7AEF\uFF09\uFF1B\u8DD1\u5931\u8D25\u7684\u884C\u6CA1\u89E3\u51B3\u524D\u4E0D\u5F97 converged" }
650
+ )
651
+ },
652
+ { additionalProperties: true }
653
+ ),
654
+ {
655
+ description: "\u6027\u80FD\u8D26\uFF08\u53D7\u5BA1\u4E4B\u7269\u662F\u5927\u7406\u5BFA\u5224\u8BCD\u65F6\u586B\uFF1B\u53D7\u5BA1\u592A\u533B\u7F72\u65F6\u6B64\u8868\u4E0E mechanisms \u90FD\u4E3A\u7A7A\u6570\u7EC4\uFF09\uFF1A\u7968\u9762\u6D89\u53CA\u7684\u771F\u5B9E\u5165\u53E3\uFF0C\u6BCF\u4E2A\u4E00\u884C\uFF0C\u7968\u8D77\u70B9\u4E0E\u6240\u88C1 HEAD \u5404\u4EB2\u8DD1\u4E00\u6B21\u5E76\u6392\u8BB0\uFF1B\u81F3\u5C11\u4E00\u884C\u662F\u7968\u8D77\u70B9\u4E0A\u5C31\u6709\u3001\u4E24\u7AEF\u90FD\u8DD1\u51FA\u6570\u5B57\u7684\u65E2\u6709\u5165\u53E3\u3002\u6709\u4E00\u884C compared \u4E3A\u300C\u6162\u6216\u8BFB\u5F97\u591A\u300D\u800C judgeSaid \u4E3A null\uFF0C\u5224\u8BCD\u5C31\u662F\u7F72\u4E86\u6CA1\u5904\u7F6E\uFF0Cstatus \u4E0D\u80FD\u662F converged\uFF1B\u6709\u8DD1\u5931\u8D25\u7684\u884C\uFF0C\u6216\u6CA1\u6709\u4E00\u884C\u53EF\u6BD4\uFF0Cstatus \u540C\u6837\u4E0D\u80FD\u662F converged\u3002"
656
+ }
657
+ )
658
+ },
659
+ { additionalProperties: true }
660
+ )
661
+ );
624
662
  }
625
663
  });
626
664
 
@@ -4592,9 +4630,9 @@ var init_role_submission_declarations = __esm({
4592
4630
  },
4593
4631
  auditor: {
4594
4632
  label: "\u5BA1\u5211\u9662\u8F93\u51FA",
4595
- description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
4633
+ description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\uFF08\u542B\u6240\u88C1\u5B9E\u73B0\u7684\u590D\u6742\u5EA6\u8D26 mechanisms\uFF09\u3002",
4596
4634
  promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
4597
- parameters: reviewSubmissionSchema
4635
+ parameters: auditorSubmissionSchema
4598
4636
  },
4599
4637
  diarist: {
4600
4638
  label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
@@ -8707,7 +8707,7 @@ var init_navigator_output = __esm({
8707
8707
  });
8708
8708
 
8709
8709
  // src/review-submission.ts
8710
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowSchema, inspectorSubmissionSchema;
8710
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
8711
8711
  var init_review_submission = __esm({
8712
8712
  "src/review-submission.ts"() {
8713
8713
  "use strict";
@@ -8758,7 +8758,7 @@ var init_review_submission = __esm({
8758
8758
  description: "\u90A3\u53E5\u539F\u8BDD\u6240\u7B54\u7684 runner \u53E5\u539F\u6587\uFF08\u95EE\u53E5\u3001\u9009\u9879\u3001\u8868\u683C\u884C\uFF0C\u7167\u6284\uFF09\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u3001\u4E0D\u662F\u5728\u7B54\u8C01\u7684\uFF0C\u586B null"
8759
8759
  }),
8760
8760
  askedObject: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], {
8761
- description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF08\u5B83\u7684\u5BF9\u8C61\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
8761
+ description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF1A\u7167\u6284 answered \u91CC\u70B9\u540D\u5BF9\u8C61\u7684\u539F\u8BCD\uFF0C\u4E0D\u8F6C\u8FF0\u3001\u4E0D\u6982\u62EC\uFF08\u90A3\u53E5\u95EE\u300C\u7F13\u5B58\u662F\u89E3\u7981\u8FD8\u662F\u7EF4\u6301\u7981\u4EE4\u300D\uFF0C\u8FD9\u683C\u5C31\u662F\u300C\u7F13\u5B58\u7981\u4EE4\u300D\uFF0C\u4E0D\u662F\u300C\u8FD0\u884C\u65F6 DRY \u4FEE\u590D\u300D\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
8762
8762
  }),
8763
8763
  derivation: typebox_exports.String({
8764
8764
  description: "\u4E00\u53E5\u63A8\u5BFC\uFF1A\u4ECE\u539F\u8BDD\u54EA\u4E2A\u610F\u601D\u5230\u8BE5\u6761\u6B3E\u3002answered \u4E0D\u4E3A null \u65F6\uFF0C\u6761\u6B3E\u7684\u5BF9\u8C61\u987B\u5728 askedObject \u4E4B\u5185\uFF0C\u6216\u53E6\u6709\u539F\u8BDD\u70B9\u540D\u66F4\u5927\u7684\u5BF9\u8C61\uFF0CownerUuid \u624D\u7AD9\u5F97\u4F4F\uFF0C\u5426\u5219\u586B null\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u7684\u539F\u8BDD\u76F4\u63A5\u6309\u5B83\u7684\u610F\u601D\u63A8"
@@ -8805,7 +8805,7 @@ var init_review_submission = __esm({
8805
8805
  layer: typebox_exports.Integer({ description: "\u4ECE\u672C\u7968\u8D77\u70B9\u5230 HEAD\uFF0C\u8FD9\u662F\u7B2C\u51E0\u5904\u8FD9\u6837\u7684\u65B0\u589E\uFF08\u542B\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\uFF09" })
8806
8806
  };
8807
8807
  MECHANISM_FRAMEWORK_RULE = "\u6846\u67B6\u662F\u4ED3\u5E93 ADR \u6216\u7968\u9762\u70B9\u540D\u7684\u90A3\u4E00\u4E2A\uFF08\u8BFB\u5199\u6A21\u578B\u3001Web\u3001\u6D4B\u8BD5\u7B49\u6846\u67B6\uFF09\uFF0C\u4E0D\u662F\u5E2D\u4F4D\u81EA\u9009\uFF1B\u5B9E\u73B0\u8FD9\u4E00\u5C42\u6240\u7528\u7684\u5E93\uFF08ORM\u3001\u7F13\u5B58\u5E93\u3001\u89E3\u6790\u5E93\uFF09\u4E0D\u662F\u6846\u67B6\uFF0C\u5B83\u7684 API \u9875\u6216\u793A\u4F8B\u586B\u4E0D\u8FDB\u8FD9\u683C\u2014\u2014\u90A3\u7B54\u7684\u662F\u300C\u8FD9\u5C42\u600E\u4E48\u505A\u300D\uFF0C\u8FD9\u683C\u95EE\u7684\u662F\u300C\u793A\u8303\u4E0D\u5E26\u8FD9\u5C42\u600E\u4E48\u529E\u300D";
8808
- mechanismRowSchema = typebox_exports.Union(
8808
+ mechanismRowUnion = (extra = {}) => typebox_exports.Union(
8809
8809
  [
8810
8810
  typebox_exports.Object(
8811
8811
  {
@@ -8813,7 +8813,8 @@ var init_review_submission = __esm({
8813
8813
  official: typebox_exports.String({
8814
8814
  description: `\u8FD9\u6BB5\u4EE3\u7801\u6240\u5C5E\u5E94\u7528\u6846\u67B6\u7684\u5B98\u65B9\u793A\u8303\u91CC\uFF0C\u4E0D\u5E26\u8FD9\u4E00\u5C42\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\uFF1A\u5148\u5199\u6846\u67B6\u540D\uFF0C\u518D\u94FE\u63A5\uFF0B\u539F\u53E5\uFF08\u793A\u8303\u91CC\u76F4\u63A5\u8BFB\u3001\u76F4\u63A5\u67E5\u3001\u4EA4\u7ED9\u6846\u67B6\u54EA\u9879\u8BBE\u7F6E\uFF09\u3002${MECHANISM_FRAMEWORK_RULE}`
8815
8815
  }),
8816
- disposition: typebox_exports.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
8816
+ disposition: typebox_exports.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
8817
+ ...extra
8817
8818
  },
8818
8819
  { additionalProperties: true }
8819
8820
  ),
@@ -8823,13 +8824,20 @@ var init_review_submission = __esm({
8823
8824
  official: typebox_exports.Null({
8824
8825
  description: `\u793A\u8303\u4EE3\u7801\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u6216\u4F9D\u8D56\uFF1A\u586B null\uFF0C\u5E76\u5728 keeps \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
8825
8826
  }),
8826
- disposition: typebox_exports.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
8827
+ disposition: typebox_exports.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
8828
+ ...extra
8827
8829
  },
8828
8830
  { additionalProperties: true }
8829
8831
  )
8830
8832
  ],
8831
8833
  { description: "\u4E24\u79CD\u884C\u5F62\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF08official \u586B\u5B57\uFF0C\u5220\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C\u7559\uFF09" }
8832
8834
  );
8835
+ mechanismRowSchema = mechanismRowUnion();
8836
+ auditorMechanismRowSchema = mechanismRowUnion({
8837
+ judgeSaid: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], {
8838
+ description: "\u5927\u7406\u5BFA\u5224\u8BCD\u91CC\u88C1\u5230\u8FD9\u4E00\u5C42\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u5224\u8BCD\u6CA1\u63D0\u8FD9\u4E00\u5C42\uFF0C\u586B null"
8839
+ })
8840
+ });
8833
8841
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
8834
8842
  typebox_exports.Object(
8835
8843
  {
@@ -8848,6 +8856,36 @@ var init_review_submission = __esm({
8848
8856
  { additionalProperties: true }
8849
8857
  )
8850
8858
  );
8859
+ auditorSubmissionSchema = withTerminatingOutputDeclarations(
8860
+ typebox_exports.Object(
8861
+ {
8862
+ status: reviewStatusField,
8863
+ ...reviewNarrativeFields,
8864
+ mechanisms: typebox_exports.Array(auditorMechanismRowSchema, {
8865
+ description: "\u590D\u6742\u5EA6\u8D26\uFF1A\u5927\u7406\u5BFA\u672C\u8F6E\u5224\u8BCD\u6240\u88C1\u7684\u5B9E\u73B0\uFF0C\u4ECE\u672C\u7968\u8D77\u70B9\u5230\u8BE5 HEAD \u751F\u4EA7\u4EE3\u7801\u65B0\u589E\u7684\u6BCF\u4E00\u5904\u4F9D\u8D56\u884C\u3001\u8DE8\u8C03\u7528\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u88C5\u9970\u6216\u5305\u88C5\uFF0C\u5404\u4E00\u884C\uFF08\u540C\u53F0\u9662\u673A\u5236\u5C42\u8868\uFF09\uFF0C\u518D\u5199\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5C42\u8BF4\u4E86\u4EC0\u4E48\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002\u5224\u8BCD\u7F72\u4E86\u800C\u8868\u91CC\u6709\u300C\u5220\u300D\u884C\u5224\u8BCD\u6CA1\u5904\u7F6E\uFF0C\u5C31\u662F\u9519\u7F72\u3002"
8866
+ }),
8867
+ runtime: typebox_exports.Array(
8868
+ typebox_exports.Object(
8869
+ {
8870
+ entry: typebox_exports.String({ description: "\u771F\u5B9E\u5165\u53E3\uFF1A\u4F60\u4EB2\u8DD1\u7684\u547D\u4EE4\u539F\u6587\uFF08\u6D4B\u8BD5\u7528\u4F8B\u6216\u7A0B\u5E8F\u5165\u53E3\uFF09\u3002\u7968\u9762\u3001\u5224\u8BCD\u3001\u65BD\u5DE5\u8BB0\u5F55\u3001\u53F0\u9662\u56DE\u6267\u91CC\u70B9\u540D\u8FC7\u7684\u6BCF\u4E2A\u771F\u5B9E\u5165\u53E3\u90FD\u8981\u6709\u4E00\u884C\uFF0C\u4E00\u4E2A\u4E0D\u6F0F\uFF0C\u518D\u52A0\u4F60\u81EA\u5DF1\u9009\u7684\uFF1B\u6570\u5B57\u53EA\u8BA4\u81EA\u5DF1\u8DD1\u51FA\u6765\u7684\uFF0C\u4E0D\u6284\u8BB0\u5F55" }),
8871
+ atBase: typebox_exports.String({ description: "\u5728\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF0C\u540C\u53F0\u9662\uFF09\u4E0A\u8DD1\u8FD9\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF1A\u7528\u65F6\u3001SQL\uFF0F\u8BFB\u6B21\u6570\u3001\u5CF0\u503C\u5185\u5B58\u7B49\u80FD\u8BFB\u5230\u7684\u6570\u5B57\uFF1B\u5165\u53E3\u662F\u672C\u7968\u65B0\u52A0\u3001\u7968\u8D77\u70B9\u4E0A\u6CA1\u6709\u7684\uFF0C\u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D" }),
8872
+ atHead: typebox_exports.String({ description: "\u5728\u6240\u88C1 HEAD \u4E0A\u8DD1\u540C\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF0C\u540C\u4E00\u673A\u5668\u540C\u4E00\u73AF\u5883" }),
8873
+ judgeSaid: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], { description: "\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5165\u53E3\u5FEB\u6162\u8BF4\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u6CA1\u8BF4\u586B null" }),
8874
+ compared: typebox_exports.Union(
8875
+ [typebox_exports.Literal("HEAD \u6BD4\u7968\u8D77\u70B9\u6162\u6216\u8BFB\u5F97\u591A"), typebox_exports.Literal("HEAD \u4E0D\u6BD4\u7968\u8D77\u70B9\u6162\u3001\u4E0D\u591A\u8BFB"), typebox_exports.Literal("\u65E0\u4ECE\u6BD4\uFF1A\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\uFF0C\u6216\u8FD9\u4E00\u7AEF\u8DD1\u5931\u8D25")],
8876
+ { description: "\u53EA\u8BA4 atBase \u4E0E atHead \u5E76\u6392\u7684\u6570\u5B57\uFF1A\u7528\u65F6\u6216\u8BFB\u6B21\u6570\u4EFB\u4E00\u53D8\u5927\u5C31\u662F\u7B2C\u4E00\u79CD\uFF1B\u4E00\u6B21\u6027\u6210\u672C\u3001CI \u53E6\u7B97\u3001\u4E0D\u963B\u65AD\u90FD\u4E0D\u662F\u7406\u7531\u3002\u7B2C\u4E09\u79CD\u7ED9\u4E24\u7C7B\u884C\uFF1A\u7968\u8D77\u70B9\u4E0A\u4E0D\u5B58\u5728\u7684\u5165\u53E3\uFF08atBase \u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D\uFF09\uFF0C\u6216\u4EFB\u4E00\u7AEF\u8DD1\u5931\u8D25\uFF08\u628A\u5931\u8D25\u8F93\u51FA\u539F\u6837\u5199\u8FDB\u90A3\u4E00\u7AEF\uFF09\uFF1B\u8DD1\u5931\u8D25\u7684\u884C\u6CA1\u89E3\u51B3\u524D\u4E0D\u5F97 converged" }
8877
+ )
8878
+ },
8879
+ { additionalProperties: true }
8880
+ ),
8881
+ {
8882
+ description: "\u6027\u80FD\u8D26\uFF08\u53D7\u5BA1\u4E4B\u7269\u662F\u5927\u7406\u5BFA\u5224\u8BCD\u65F6\u586B\uFF1B\u53D7\u5BA1\u592A\u533B\u7F72\u65F6\u6B64\u8868\u4E0E mechanisms \u90FD\u4E3A\u7A7A\u6570\u7EC4\uFF09\uFF1A\u7968\u9762\u6D89\u53CA\u7684\u771F\u5B9E\u5165\u53E3\uFF0C\u6BCF\u4E2A\u4E00\u884C\uFF0C\u7968\u8D77\u70B9\u4E0E\u6240\u88C1 HEAD \u5404\u4EB2\u8DD1\u4E00\u6B21\u5E76\u6392\u8BB0\uFF1B\u81F3\u5C11\u4E00\u884C\u662F\u7968\u8D77\u70B9\u4E0A\u5C31\u6709\u3001\u4E24\u7AEF\u90FD\u8DD1\u51FA\u6570\u5B57\u7684\u65E2\u6709\u5165\u53E3\u3002\u6709\u4E00\u884C compared \u4E3A\u300C\u6162\u6216\u8BFB\u5F97\u591A\u300D\u800C judgeSaid \u4E3A null\uFF0C\u5224\u8BCD\u5C31\u662F\u7F72\u4E86\u6CA1\u5904\u7F6E\uFF0Cstatus \u4E0D\u80FD\u662F converged\uFF1B\u6709\u8DD1\u5931\u8D25\u7684\u884C\uFF0C\u6216\u6CA1\u6709\u4E00\u884C\u53EF\u6BD4\uFF0Cstatus \u540C\u6837\u4E0D\u80FD\u662F converged\u3002"
8883
+ }
8884
+ )
8885
+ },
8886
+ { additionalProperties: true }
8887
+ )
8888
+ );
8851
8889
  }
8852
8890
  });
8853
8891
 
@@ -9888,9 +9926,9 @@ var init_role_submission_declarations = __esm({
9888
9926
  },
9889
9927
  auditor: {
9890
9928
  label: "\u5BA1\u5211\u9662\u8F93\u51FA",
9891
- description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
9929
+ description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\uFF08\u542B\u6240\u88C1\u5B9E\u73B0\u7684\u590D\u6742\u5EA6\u8D26 mechanisms\uFF09\u3002",
9892
9930
  promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
9893
- parameters: reviewSubmissionSchema
9931
+ parameters: auditorSubmissionSchema
9894
9932
  },
9895
9933
  diarist: {
9896
9934
  label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
@@ -9197,7 +9197,7 @@ var init_navigator_output = __esm({
9197
9197
  });
9198
9198
 
9199
9199
  // src/review-submission.ts
9200
- var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowSchema, inspectorSubmissionSchema;
9200
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
9201
9201
  var init_review_submission = __esm({
9202
9202
  "src/review-submission.ts"() {
9203
9203
  "use strict";
@@ -9248,7 +9248,7 @@ var init_review_submission = __esm({
9248
9248
  description: "\u90A3\u53E5\u539F\u8BDD\u6240\u7B54\u7684 runner \u53E5\u539F\u6587\uFF08\u95EE\u53E5\u3001\u9009\u9879\u3001\u8868\u683C\u884C\uFF0C\u7167\u6284\uFF09\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u3001\u4E0D\u662F\u5728\u7B54\u8C01\u7684\uFF0C\u586B null"
9249
9249
  }),
9250
9250
  askedObject: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], {
9251
- description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF08\u5B83\u7684\u5BF9\u8C61\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
9251
+ description: "\u6240\u7B54\u90A3\u53E5\u95EE\u7684\u662F\u54EA\u4EF6\u4E8B\uFF1A\u7167\u6284 answered \u91CC\u70B9\u540D\u5BF9\u8C61\u7684\u539F\u8BCD\uFF0C\u4E0D\u8F6C\u8FF0\u3001\u4E0D\u6982\u62EC\uFF08\u90A3\u53E5\u95EE\u300C\u7F13\u5B58\u662F\u89E3\u7981\u8FD8\u662F\u7EF4\u6301\u7981\u4EE4\u300D\uFF0C\u8FD9\u683C\u5C31\u662F\u300C\u7F13\u5B58\u7981\u4EE4\u300D\uFF0C\u4E0D\u662F\u300C\u8FD0\u884C\u65F6 DRY \u4FEE\u590D\u300D\uFF09\uFF1Banswered \u4E3A null \u65F6\u540C\u4E3A null"
9252
9252
  }),
9253
9253
  derivation: typebox_exports.String({
9254
9254
  description: "\u4E00\u53E5\u63A8\u5BFC\uFF1A\u4ECE\u539F\u8BDD\u54EA\u4E2A\u610F\u601D\u5230\u8BE5\u6761\u6B3E\u3002answered \u4E0D\u4E3A null \u65F6\uFF0C\u6761\u6B3E\u7684\u5BF9\u8C61\u987B\u5728 askedObject \u4E4B\u5185\uFF0C\u6216\u53E6\u6709\u539F\u8BDD\u70B9\u540D\u66F4\u5927\u7684\u5BF9\u8C61\uFF0CownerUuid \u624D\u7AD9\u5F97\u4F4F\uFF0C\u5426\u5219\u586B null\uFF1B\u965B\u4E0B\u72EC\u7ACB\u63D0\u51FA\u7684\u539F\u8BDD\u76F4\u63A5\u6309\u5B83\u7684\u610F\u601D\u63A8"
@@ -9295,7 +9295,7 @@ var init_review_submission = __esm({
9295
9295
  layer: typebox_exports.Integer({ description: "\u4ECE\u672C\u7968\u8D77\u70B9\u5230 HEAD\uFF0C\u8FD9\u662F\u7B2C\u51E0\u5904\u8FD9\u6837\u7684\u65B0\u589E\uFF08\u542B\u524D\u51E0\u8F6E\u5DF2\u7F72\u8FC7\u7684\uFF09" })
9296
9296
  };
9297
9297
  MECHANISM_FRAMEWORK_RULE = "\u6846\u67B6\u662F\u4ED3\u5E93 ADR \u6216\u7968\u9762\u70B9\u540D\u7684\u90A3\u4E00\u4E2A\uFF08\u8BFB\u5199\u6A21\u578B\u3001Web\u3001\u6D4B\u8BD5\u7B49\u6846\u67B6\uFF09\uFF0C\u4E0D\u662F\u5E2D\u4F4D\u81EA\u9009\uFF1B\u5B9E\u73B0\u8FD9\u4E00\u5C42\u6240\u7528\u7684\u5E93\uFF08ORM\u3001\u7F13\u5B58\u5E93\u3001\u89E3\u6790\u5E93\uFF09\u4E0D\u662F\u6846\u67B6\uFF0C\u5B83\u7684 API \u9875\u6216\u793A\u4F8B\u586B\u4E0D\u8FDB\u8FD9\u683C\u2014\u2014\u90A3\u7B54\u7684\u662F\u300C\u8FD9\u5C42\u600E\u4E48\u505A\u300D\uFF0C\u8FD9\u683C\u95EE\u7684\u662F\u300C\u793A\u8303\u4E0D\u5E26\u8FD9\u5C42\u600E\u4E48\u529E\u300D";
9298
- mechanismRowSchema = typebox_exports.Union(
9298
+ mechanismRowUnion = (extra = {}) => typebox_exports.Union(
9299
9299
  [
9300
9300
  typebox_exports.Object(
9301
9301
  {
@@ -9303,7 +9303,8 @@ var init_review_submission = __esm({
9303
9303
  official: typebox_exports.String({
9304
9304
  description: `\u8FD9\u6BB5\u4EE3\u7801\u6240\u5C5E\u5E94\u7528\u6846\u67B6\u7684\u5B98\u65B9\u793A\u8303\u91CC\uFF0C\u4E0D\u5E26\u8FD9\u4E00\u5C42\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\uFF1A\u5148\u5199\u6846\u67B6\u540D\uFF0C\u518D\u94FE\u63A5\uFF0B\u539F\u53E5\uFF08\u793A\u8303\u91CC\u76F4\u63A5\u8BFB\u3001\u76F4\u63A5\u67E5\u3001\u4EA4\u7ED9\u6846\u67B6\u54EA\u9879\u8BBE\u7F6E\uFF09\u3002${MECHANISM_FRAMEWORK_RULE}`
9305
9305
  }),
9306
- disposition: typebox_exports.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
9306
+ disposition: typebox_exports.Literal("\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
9307
+ ...extra
9307
9308
  },
9308
9309
  { additionalProperties: true }
9309
9310
  ),
@@ -9313,13 +9314,20 @@ var init_review_submission = __esm({
9313
9314
  official: typebox_exports.Null({
9314
9315
  description: `\u793A\u8303\u4EE3\u7801\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u6216\u4F9D\u8D56\uFF1A\u586B null\uFF0C\u5E76\u5728 keeps \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
9315
9316
  }),
9316
- disposition: typebox_exports.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" })
9317
+ disposition: typebox_exports.Literal("\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
9318
+ ...extra
9317
9319
  },
9318
9320
  { additionalProperties: true }
9319
9321
  )
9320
9322
  ],
9321
9323
  { description: "\u4E24\u79CD\u884C\u5F62\uFF0C\u6CA1\u6709\u7B2C\u4E09\u79CD\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF08official \u586B\u5B57\uFF0C\u5220\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C\u7559\uFF09" }
9322
9324
  );
9325
+ mechanismRowSchema = mechanismRowUnion();
9326
+ auditorMechanismRowSchema = mechanismRowUnion({
9327
+ judgeSaid: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], {
9328
+ description: "\u5927\u7406\u5BFA\u5224\u8BCD\u91CC\u88C1\u5230\u8FD9\u4E00\u5C42\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u5224\u8BCD\u6CA1\u63D0\u8FD9\u4E00\u5C42\uFF0C\u586B null"
9329
+ })
9330
+ });
9323
9331
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
9324
9332
  typebox_exports.Object(
9325
9333
  {
@@ -9338,6 +9346,36 @@ var init_review_submission = __esm({
9338
9346
  { additionalProperties: true }
9339
9347
  )
9340
9348
  );
9349
+ auditorSubmissionSchema = withTerminatingOutputDeclarations(
9350
+ typebox_exports.Object(
9351
+ {
9352
+ status: reviewStatusField,
9353
+ ...reviewNarrativeFields,
9354
+ mechanisms: typebox_exports.Array(auditorMechanismRowSchema, {
9355
+ description: "\u590D\u6742\u5EA6\u8D26\uFF1A\u5927\u7406\u5BFA\u672C\u8F6E\u5224\u8BCD\u6240\u88C1\u7684\u5B9E\u73B0\uFF0C\u4ECE\u672C\u7968\u8D77\u70B9\u5230\u8BE5 HEAD \u751F\u4EA7\u4EE3\u7801\u65B0\u589E\u7684\u6BCF\u4E00\u5904\u4F9D\u8D56\u884C\u3001\u8DE8\u8C03\u7528\u72B6\u6001\u3001\u9501\u3001\u7F13\u5B58\u88C5\u9970\u6216\u5305\u88C5\uFF0C\u5404\u4E00\u884C\uFF08\u540C\u53F0\u9662\u673A\u5236\u5C42\u8868\uFF09\uFF0C\u518D\u5199\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5C42\u8BF4\u4E86\u4EC0\u4E48\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002\u5224\u8BCD\u7F72\u4E86\u800C\u8868\u91CC\u6709\u300C\u5220\u300D\u884C\u5224\u8BCD\u6CA1\u5904\u7F6E\uFF0C\u5C31\u662F\u9519\u7F72\u3002"
9356
+ }),
9357
+ runtime: typebox_exports.Array(
9358
+ typebox_exports.Object(
9359
+ {
9360
+ entry: typebox_exports.String({ description: "\u771F\u5B9E\u5165\u53E3\uFF1A\u4F60\u4EB2\u8DD1\u7684\u547D\u4EE4\u539F\u6587\uFF08\u6D4B\u8BD5\u7528\u4F8B\u6216\u7A0B\u5E8F\u5165\u53E3\uFF09\u3002\u7968\u9762\u3001\u5224\u8BCD\u3001\u65BD\u5DE5\u8BB0\u5F55\u3001\u53F0\u9662\u56DE\u6267\u91CC\u70B9\u540D\u8FC7\u7684\u6BCF\u4E2A\u771F\u5B9E\u5165\u53E3\u90FD\u8981\u6709\u4E00\u884C\uFF0C\u4E00\u4E2A\u4E0D\u6F0F\uFF0C\u518D\u52A0\u4F60\u81EA\u5DF1\u9009\u7684\uFF1B\u6570\u5B57\u53EA\u8BA4\u81EA\u5DF1\u8DD1\u51FA\u6765\u7684\uFF0C\u4E0D\u6284\u8BB0\u5F55" }),
9361
+ atBase: typebox_exports.String({ description: "\u5728\u672C\u7968\u8D77\u70B9\uFF08\u672C\u5206\u652F\u4E0E\u5BB6\u65CF\u5206\u652F\u6216\u76EE\u6807\u5206\u652F\u7684 git merge-base\uFF0C\u540C\u53F0\u9662\uFF09\u4E0A\u8DD1\u8FD9\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF1A\u7528\u65F6\u3001SQL\uFF0F\u8BFB\u6B21\u6570\u3001\u5CF0\u503C\u5185\u5B58\u7B49\u80FD\u8BFB\u5230\u7684\u6570\u5B57\uFF1B\u5165\u53E3\u662F\u672C\u7968\u65B0\u52A0\u3001\u7968\u8D77\u70B9\u4E0A\u6CA1\u6709\u7684\uFF0C\u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D" }),
9362
+ atHead: typebox_exports.String({ description: "\u5728\u6240\u88C1 HEAD \u4E0A\u8DD1\u540C\u4E00\u5165\u53E3\u7684\u673A\u5668\u8F93\u51FA\uFF0C\u540C\u4E00\u673A\u5668\u540C\u4E00\u73AF\u5883" }),
9363
+ judgeSaid: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], { description: "\u5224\u8BCD\u5BF9\u8FD9\u4E00\u5165\u53E3\u5FEB\u6162\u8BF4\u7684\u90A3\u53E5\u539F\u6587\uFF08\u7167\u6284\uFF09\uFF1B\u6CA1\u8BF4\u586B null" }),
9364
+ compared: typebox_exports.Union(
9365
+ [typebox_exports.Literal("HEAD \u6BD4\u7968\u8D77\u70B9\u6162\u6216\u8BFB\u5F97\u591A"), typebox_exports.Literal("HEAD \u4E0D\u6BD4\u7968\u8D77\u70B9\u6162\u3001\u4E0D\u591A\u8BFB"), typebox_exports.Literal("\u65E0\u4ECE\u6BD4\uFF1A\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\uFF0C\u6216\u8FD9\u4E00\u7AEF\u8DD1\u5931\u8D25")],
9366
+ { description: "\u53EA\u8BA4 atBase \u4E0E atHead \u5E76\u6392\u7684\u6570\u5B57\uFF1A\u7528\u65F6\u6216\u8BFB\u6B21\u6570\u4EFB\u4E00\u53D8\u5927\u5C31\u662F\u7B2C\u4E00\u79CD\uFF1B\u4E00\u6B21\u6027\u6210\u672C\u3001CI \u53E6\u7B97\u3001\u4E0D\u963B\u65AD\u90FD\u4E0D\u662F\u7406\u7531\u3002\u7B2C\u4E09\u79CD\u7ED9\u4E24\u7C7B\u884C\uFF1A\u7968\u8D77\u70B9\u4E0A\u4E0D\u5B58\u5728\u7684\u5165\u53E3\uFF08atBase \u5199\u300C\u7968\u8D77\u70B9\u65E0\u6B64\u5165\u53E3\u300D\uFF09\uFF0C\u6216\u4EFB\u4E00\u7AEF\u8DD1\u5931\u8D25\uFF08\u628A\u5931\u8D25\u8F93\u51FA\u539F\u6837\u5199\u8FDB\u90A3\u4E00\u7AEF\uFF09\uFF1B\u8DD1\u5931\u8D25\u7684\u884C\u6CA1\u89E3\u51B3\u524D\u4E0D\u5F97 converged" }
9367
+ )
9368
+ },
9369
+ { additionalProperties: true }
9370
+ ),
9371
+ {
9372
+ description: "\u6027\u80FD\u8D26\uFF08\u53D7\u5BA1\u4E4B\u7269\u662F\u5927\u7406\u5BFA\u5224\u8BCD\u65F6\u586B\uFF1B\u53D7\u5BA1\u592A\u533B\u7F72\u65F6\u6B64\u8868\u4E0E mechanisms \u90FD\u4E3A\u7A7A\u6570\u7EC4\uFF09\uFF1A\u7968\u9762\u6D89\u53CA\u7684\u771F\u5B9E\u5165\u53E3\uFF0C\u6BCF\u4E2A\u4E00\u884C\uFF0C\u7968\u8D77\u70B9\u4E0E\u6240\u88C1 HEAD \u5404\u4EB2\u8DD1\u4E00\u6B21\u5E76\u6392\u8BB0\uFF1B\u81F3\u5C11\u4E00\u884C\u662F\u7968\u8D77\u70B9\u4E0A\u5C31\u6709\u3001\u4E24\u7AEF\u90FD\u8DD1\u51FA\u6570\u5B57\u7684\u65E2\u6709\u5165\u53E3\u3002\u6709\u4E00\u884C compared \u4E3A\u300C\u6162\u6216\u8BFB\u5F97\u591A\u300D\u800C judgeSaid \u4E3A null\uFF0C\u5224\u8BCD\u5C31\u662F\u7F72\u4E86\u6CA1\u5904\u7F6E\uFF0Cstatus \u4E0D\u80FD\u662F converged\uFF1B\u6709\u8DD1\u5931\u8D25\u7684\u884C\uFF0C\u6216\u6CA1\u6709\u4E00\u884C\u53EF\u6BD4\uFF0Cstatus \u540C\u6837\u4E0D\u80FD\u662F converged\u3002"
9373
+ }
9374
+ )
9375
+ },
9376
+ { additionalProperties: true }
9377
+ )
9378
+ );
9341
9379
  }
9342
9380
  });
9343
9381
 
@@ -11628,9 +11666,9 @@ var init_role_submission_declarations = __esm({
11628
11666
  },
11629
11667
  auditor: {
11630
11668
  label: "\u5BA1\u5211\u9662\u8F93\u51FA",
11631
- description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\u3002",
11669
+ description: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267\uFF0Cstatus \u4E3A converged\u3001continue \u6216 escalate\uFF08\u542B\u6240\u88C1\u5B9E\u73B0\u7684\u590D\u6742\u5EA6\u8D26 mechanisms\uFF09\u3002",
11632
11670
  promptSnippet: "\u5BA1\u5211\u9662\u7EC8\u5C40\u56DE\u6267",
11633
- parameters: reviewSubmissionSchema
11671
+ parameters: auditorSubmissionSchema
11634
11672
  },
11635
11673
  diarist: {
11636
11674
  label: "\u8D77\u5C45\u90CE\u8F93\u51FA",
@@ -50,7 +50,7 @@ export const notaryClauseItemSchema = Type.Object({
50
50
  description: "那句原话所答的 runner 句原文(问句、选项、表格行,照抄);陛下独立提出、不是在答谁的,填 null",
51
51
  }),
52
52
  askedObject: Type.Union([Type.String(), Type.Null()], {
53
- description: "所答那句问的是哪件事(它的对象);answered 为 null 时同为 null",
53
+ description: "所答那句问的是哪件事:照抄 answered 里点名对象的原词,不转述、不概括(那句问「缓存是解禁还是维持禁令」,这格就是「缓存禁令」,不是「运行时 DRY 修复」);answered 为 null 时同为 null",
54
54
  }),
55
55
  derivation: Type.String({
56
56
  description: "一句推导:从原话哪个意思到该条款。answered 不为 null 时,条款的对象须在 askedObject 之内,或另有原话点名更大的对象,ownerUuid 才站得住,否则填 null;陛下独立提出的原话直接按它的意思推",
@@ -94,13 +94,15 @@ const mechanismRowBase = {
94
94
  layer: Type.Integer({ description: "从本票起点到 HEAD,这是第几处这样的新增(含前几轮已署过的)" }),
95
95
  };
96
96
  const MECHANISM_FRAMEWORK_RULE = "框架是仓库 ADR 或票面点名的那一个(读写模型、Web、测试等框架),不是席位自选;实现这一层所用的库(ORM、缓存库、解析库)不是框架,它的 API 页或示例填不进这格——那答的是「这层怎么做」,这格问的是「示范不带这层怎么办」";
97
- export const mechanismRowSchema = Type.Union([
97
+ /** The two row shapes, with any extra per-row fields a seat needs (the auditor adds what the verdict said about the layer). */
98
+ const mechanismRowUnion = (extra = {}) => Type.Union([
98
99
  Type.Object({
99
100
  ...mechanismRowBase,
100
101
  official: Type.String({
101
102
  description: `这段代码所属应用框架的官方示范里,不带这一层时同一关切怎么处理:先写框架名,再链接+原句(示范里直接读、直接查、交给框架哪项设置)。${MECHANISM_FRAMEWORK_RULE}`,
102
103
  }),
103
104
  disposition: Type.Literal("删:示范不带这一层也处理得了", { description: "official 填了字,这一行只能是这个处置" }),
105
+ ...extra,
104
106
  }, { additionalProperties: true }),
105
107
  Type.Object({
106
108
  ...mechanismRowBase,
@@ -108,8 +110,16 @@ export const mechanismRowSchema = Type.Union([
108
110
  description: `示范代码本身就为同一关切带同样的状态、锁、缓存或依赖:填 null,并在 keeps 末尾写框架名与示范里那一处。${MECHANISM_FRAMEWORK_RULE}`,
109
111
  }),
110
112
  disposition: Type.Literal("留:示范本身就为同一关切带同样的层", { description: "official 为 null,这一行只能是这个处置" }),
113
+ ...extra,
111
114
  }, { additionalProperties: true }),
112
115
  ], { description: "两种行形,没有第三种:示范不带这一层也处理得了(official 填字,删);示范本身就带同样的层(official null,留)" });
116
+ export const mechanismRowSchema = mechanismRowUnion();
117
+ /** Auditor row: the inspector row plus what the judge's verdict said about this layer, verbatim, or null when the verdict never touched it. */
118
+ export const auditorMechanismRowSchema = mechanismRowUnion({
119
+ judgeSaid: Type.Union([Type.String(), Type.Null()], {
120
+ description: "大理寺判词里裁到这一层的那句原文(照抄);判词没提这一层,填 null",
121
+ }),
122
+ });
113
123
  /** Inspector generation schema: shared review face plus the required whole-ticket complexity answer (package records as-is). */
114
124
  export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(Type.Object({
115
125
  status: reviewStatusField,
@@ -124,3 +134,20 @@ export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(Type.
124
134
  description: "整票机制层:本票起点到 HEAD 生产代码新增的每一处依赖行、跨调用状态、锁、缓存装饰或包装,各一行,前几轮已署过的也列,测试夹具不列;一处没有为空数组。",
125
135
  }),
126
136
  }, { additionalProperties: true }));
137
+ /** Auditor generation schema: shared review face plus the complexity account of the implementation the verdict ruled on (package records as-is). */
138
+ export const auditorSubmissionSchema = withTerminatingOutputDeclarations(Type.Object({
139
+ status: reviewStatusField,
140
+ ...reviewNarrativeFields,
141
+ mechanisms: Type.Array(auditorMechanismRowSchema, {
142
+ description: "复杂度账:大理寺本轮判词所裁的实现,从本票起点到该 HEAD 生产代码新增的每一处依赖行、跨调用状态、锁、缓存装饰或包装,各一行(同台院机制层表),再写判词对这一层说了什么;一处没有为空数组。判词署了而表里有「删」行判词没处置,就是错署。",
143
+ }),
144
+ runtime: Type.Array(Type.Object({
145
+ entry: Type.String({ description: "真实入口:你亲跑的命令原文(测试用例或程序入口)。票面、判词、施工记录、台院回执里点名过的每个真实入口都要有一行,一个不漏,再加你自己选的;数字只认自己跑出来的,不抄记录" }),
146
+ atBase: Type.String({ description: "在本票起点(本分支与家族分支或目标分支的 git merge-base,同台院)上跑这一入口的机器输出:用时、SQL/读次数、峰值内存等能读到的数字;入口是本票新加、票起点上没有的,写「票起点无此入口」" }),
147
+ atHead: Type.String({ description: "在所裁 HEAD 上跑同一入口的机器输出,同一机器同一环境" }),
148
+ judgeSaid: Type.Union([Type.String(), Type.Null()], { description: "判词对这一入口快慢说的那句原文(照抄);没说填 null" }),
149
+ compared: Type.Union([Type.Literal("HEAD 比票起点慢或读得多"), Type.Literal("HEAD 不比票起点慢、不多读"), Type.Literal("无从比:票起点无此入口,或这一端跑失败")], { description: "只认 atBase 与 atHead 并排的数字:用时或读次数任一变大就是第一种;一次性成本、CI 另算、不阻断都不是理由。第三种给两类行:票起点上不存在的入口(atBase 写「票起点无此入口」),或任一端跑失败(把失败输出原样写进那一端);跑失败的行没解决前不得 converged" }),
150
+ }, { additionalProperties: true }), {
151
+ description: "性能账(受审之物是大理寺判词时填;受审太医署时此表与 mechanisms 都为空数组):票面涉及的真实入口,每个一行,票起点与所裁 HEAD 各亲跑一次并排记;至少一行是票起点上就有、两端都跑出数字的既有入口。有一行 compared 为「慢或读得多」而 judgeSaid 为 null,判词就是署了没处置,status 不能是 converged;有跑失败的行,或没有一行可比,status 同样不能是 converged。",
152
+ }),
153
+ }, { 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 { notaryReviewSubmissionSchema, inspectorSubmissionSchema, reviewSubmissionSchema } from "./review-submission.js";
8
+ import { auditorSubmissionSchema, notaryReviewSubmissionSchema, 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";
@@ -103,9 +103,9 @@ const SUBMISSION_FACE = {
103
103
  },
104
104
  auditor: {
105
105
  label: "审刑院输出",
106
- description: "审刑院终局回执,status 为 converged、continue 或 escalate。",
106
+ description: "审刑院终局回执,status 为 converged、continue 或 escalate(含所裁实现的复杂度账 mechanisms)。",
107
107
  promptSnippet: "审刑院终局回执",
108
- parameters: reviewSubmissionSchema,
108
+ parameters: auditorSubmissionSchema,
109
109
  },
110
110
  diarist: {
111
111
  label: "起居郎输出",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akagilnc/pi-workflow-roles",
3
- "version": "0.1.6054",
3
+ "version": "0.1.6063",
4
4
  "description": "Soul-bound workflow roles for Pi",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -2,7 +2,7 @@
2
2
 
3
3
  你是审刑院,审大理寺的判词,不审施工。判词里每一条承重事实、每一句「已核」,你都要亲自打开源头核一遍——核的是判词说的对不对,不是施工做完没有。一份判词只有三种错,按序查:
4
4
 
5
- 一、错署——署了,但票面有要求未做到、有票面外之物未处置、或判词称「已核」「已真跑」而卷宗里没有命令与结果(尺是《质量法》:变异真跑、复杂度账)。
5
+ 一、错署——署了,但票面有要求未做到、有票面外之物未处置、或判词称「已核」「已真跑」而卷宗里没有命令与结果(尺是《质量法》:变异真跑、复杂度账)。复杂度账按层记进 mechanisms:所裁实现生产代码每一处新增的跨调用状态、锁、缓存、依赖各一行,到所属应用框架(ADR/票面点名的那一个,不是实现这层所用的库)的官方示范里看不带这一层时同一关切怎么处理,再照抄判词对这一层说的那句;示范不带也处理得了而判词署了、没处置这一层,即错署。性能账按入口记进 runtime:票面、判词、施工记录、台院回执里点名过的每个真实入口一个不漏,再加你自己选的,在票起点与所裁 HEAD 上各亲跑一次,用时与读次数并排写下,再照抄判词对它说的那句;每行只认并排的两个数填「慢或读得多」还是「不慢不多」——一次性成本、CI 另算、不阻断都不是理由;本票新加、票起点上没有的入口,或任一端跑失败的,填「无从比」——新加的不计快慢,跑失败的没解决前不得 converged;至少要有一行票起点上就有、两端都跑出数字的既有入口;有一行「慢或读得多」而判词没处置,即错署,不得 converged。
6
6
  二、错封——封驳或所加约束指不出法源,或超出票面与陛下的话。
7
7
  三、事实错——判词所引代码事实、法源引文与源头不符。
8
8
 
package/souls/notary.md CHANGED
@@ -7,7 +7,7 @@
7
7
  条款表每一轮都做,受审之物是票面、还是大理寺的判词、修法方向或收敛的实现,都一样:判词是拿现行票面当法源判的,票面在票庭最后一签之后改过,判词的法源就不是过了庭的那份。每条写明它是最后一签时就在你交的条款表里,还是签后才出现在票面上——现行票面的更新时间对起居录里最后一次签押的时间,条款对你上次签时交的表;「签后才出现」只用于受审之物是大理寺的判词、修法方向或收敛的实现——它们拿票面当法源;受审之物是给事中对票面的判词(票庭,含修订后重送的票庭),本轮就是在为新的签押做表,每条都是前者;票庭尚无签押、或签押那一轮没有可对照的表,同样每条都是前者。现行票面的更新时间只是线索(评论也会改它),定夺看条款在不在那张表里;表漏列的条款不算签后,拿不准就查 issue 的编辑记录。真无票对象没有票面可列,clauses 为空数组,照 ADR 0075 以 source-run 核旨。签后才出现的条款没有过庭,不是现行票面,不得当法源:status 只能是 escalate,把这些条款原文列进 decisionGate,写明要重送给事中。
8
8
 
9
9
  **二、核旨**:受审之物是票面本身——`gh issue view N` 的现行全文,加起居录与源卷里陛下的原话。先独立做完条款表,再开给事中这一轮的判词对照;判词是待核主张,不是你的依据。
10
- 只有一个方向:先把票面「要做什么」「怎么验」里每一条改变实际行为的条款逐条列出(一条一行,照原文,不合并、不改写),写进交卷的 clauses;再为每一条找陛下哪一句原话推得出它——填那句的 uuid(ownerUuid)和一句推导(derivation:从那句话的哪个意思到这条条款)。推不出的,ownerUuid 填 null、derivation 写「无原话」。陛下答一句,只答那一句问的事:所答的句子(问句、选项、表格行)问的是什么,原话就只管什么。条款的对象比所答那句问的大——答的是备注画不画全,条款管的是整张票修不修——又没有别的原话点名大的那个,就是无原话,ownerUuid 填 null;选项正文里多写的字是 runner 写的,不是陛下说的。「承接设计」「保留现有能力」「合理」「接缝归属」这类话不是推导,不能顶替 uuid。
10
+ 只有一个方向:先把票面「要做什么」「怎么验」里每一条改变实际行为的条款逐条列出(一条一行,照原文,不合并、不改写),写进交卷的 clauses;再为每一条找陛下哪一句原话推得出它——填那句的 uuid(ownerUuid)和一句推导(derivation:从那句话的哪个意思到这条条款)。推不出的,ownerUuid 填 null、derivation 写「无原话」。陛下答一句,只答那一句问的事:所答的句子(问句、选项、表格行)问的是什么,原话就只管什么;askedObject 照抄所答那句里点名对象的原词,不用自己的话转述——一转述就能把对象说宽,条款就塞得进。条款的对象比所答那句问的大——答的是备注画不画全,条款管的是整张票修不修——又没有别的原话点名大的那个,就是无原话,ownerUuid 填 null;选项正文里多写的字是 runner 写的,不是陛下说的。「承接设计」「保留现有能力」「合理」「接缝归属」这类话不是推导,不能顶替 uuid。
11
11
  clauses 里有任何一条 ownerUuid 为 null,status 只能是 escalate,并把这些条款原文列进 decisionGate 请陛下定;有条款与所引原话的意思相抵的,点名该条,再按「结论」对给事中这一轮的判词定署或封驳。
12
12
  **是否符合陛下原意**——先根据起居录对话判断陛下意图,再看受审之物 是不是陛下想要的;字面对得上、意思不对(曲解、断章、只取字面不取法意)同为病。
13
13
  **陛下原话逐句核销**——起居录里陛下对本票说过的每一句,逐句过:先写明它答的是起居录哪一句、哪一行(问句、表格行、选项),那一句描述的对象是什么,写进判词证据;再问他这句话想要什么、在担心什么,再看受审之物给没给到——不是为了凑齐引文。受审之物动作的对象比所答对象大——答的是代码代劳却删席位、删衙门、删能力、改流程——而原话没有点名该对象的,封驳。衙门与替它干活的代码是两个对象:说某机制多余、可以删,不是说撤该衙门;席位、衙门、能力的存废只认点名它本身的原话。质问句——陛下在问这张票、这条约束凭什么存在——是对受审之物的未决挑战,不是授权:没被事实或适用的法答掉的,或被摘来当「支持」的,封驳。runner 在录里已自认不成立的理由仍撑着受审之物的,同。
@@ -68,7 +68,7 @@ export const notaryClauseItemSchema = Type.Object(
68
68
  "那句原话所答的 runner 句原文(问句、选项、表格行,照抄);陛下独立提出、不是在答谁的,填 null",
69
69
  }),
70
70
  askedObject: Type.Union([Type.String(), Type.Null()], {
71
- description: "所答那句问的是哪件事(它的对象);answered 为 null 时同为 null",
71
+ description: "所答那句问的是哪件事:照抄 answered 里点名对象的原词,不转述、不概括(那句问「缓存是解禁还是维持禁令」,这格就是「缓存禁令」,不是「运行时 DRY 修复」);answered 为 null 时同为 null",
72
72
  }),
73
73
  derivation: Type.String({
74
74
  description:
@@ -136,31 +136,44 @@ const mechanismRowBase = {
136
136
  const MECHANISM_FRAMEWORK_RULE =
137
137
  "框架是仓库 ADR 或票面点名的那一个(读写模型、Web、测试等框架),不是席位自选;实现这一层所用的库(ORM、缓存库、解析库)不是框架,它的 API 页或示例填不进这格——那答的是「这层怎么做」,这格问的是「示范不带这层怎么办」";
138
138
 
139
- export const mechanismRowSchema = Type.Union(
140
- [
141
- Type.Object(
142
- {
143
- ...mechanismRowBase,
144
- official: Type.String({
145
- description: `这段代码所属应用框架的官方示范里,不带这一层时同一关切怎么处理:先写框架名,再链接+原句(示范里直接读、直接查、交给框架哪项设置)。${MECHANISM_FRAMEWORK_RULE}`,
146
- }),
147
- disposition: Type.Literal("删:示范不带这一层也处理得了", { description: "official 填了字,这一行只能是这个处置" }),
148
- },
149
- { additionalProperties: true },
150
- ),
151
- Type.Object(
152
- {
153
- ...mechanismRowBase,
154
- official: Type.Null({
155
- description: `示范代码本身就为同一关切带同样的状态、锁、缓存或依赖:填 null,并在 keeps 末尾写框架名与示范里那一处。${MECHANISM_FRAMEWORK_RULE}`,
156
- }),
157
- disposition: Type.Literal("留:示范本身就为同一关切带同样的层", { description: "official 为 null,这一行只能是这个处置" }),
158
- },
159
- { additionalProperties: true },
160
- ),
161
- ],
162
- { description: "两种行形,没有第三种:示范不带这一层也处理得了(official 填字,删);示范本身就带同样的层(official null,留)" },
163
- );
139
+ /** The two row shapes, with any extra per-row fields a seat needs (the auditor adds what the verdict said about the layer). */
140
+ const mechanismRowUnion = (extra: Record<string, ReturnType<typeof Type.Union> | ReturnType<typeof Type.String>> = {}) =>
141
+ Type.Union(
142
+ [
143
+ Type.Object(
144
+ {
145
+ ...mechanismRowBase,
146
+ official: Type.String({
147
+ description: `这段代码所属应用框架的官方示范里,不带这一层时同一关切怎么处理:先写框架名,再链接+原句(示范里直接读、直接查、交给框架哪项设置)。${MECHANISM_FRAMEWORK_RULE}`,
148
+ }),
149
+ disposition: Type.Literal("删:示范不带这一层也处理得了", { description: "official 填了字,这一行只能是这个处置" }),
150
+ ...extra,
151
+ },
152
+ { additionalProperties: true },
153
+ ),
154
+ Type.Object(
155
+ {
156
+ ...mechanismRowBase,
157
+ official: Type.Null({
158
+ description: `示范代码本身就为同一关切带同样的状态、锁、缓存或依赖:填 null,并在 keeps 末尾写框架名与示范里那一处。${MECHANISM_FRAMEWORK_RULE}`,
159
+ }),
160
+ disposition: Type.Literal("留:示范本身就为同一关切带同样的层", { description: "official 为 null,这一行只能是这个处置" }),
161
+ ...extra,
162
+ },
163
+ { additionalProperties: true },
164
+ ),
165
+ ],
166
+ { description: "两种行形,没有第三种:示范不带这一层也处理得了(official 填字,删);示范本身就带同样的层(official null,留)" },
167
+ );
168
+
169
+ export const mechanismRowSchema = mechanismRowUnion();
170
+
171
+ /** Auditor row: the inspector row plus what the judge's verdict said about this layer, verbatim, or null when the verdict never touched it. */
172
+ export const auditorMechanismRowSchema = mechanismRowUnion({
173
+ judgeSaid: Type.Union([Type.String(), Type.Null()], {
174
+ description: "大理寺判词里裁到这一层的那句原文(照抄);判词没提这一层,填 null",
175
+ }),
176
+ });
164
177
 
165
178
  /** Inspector generation schema: shared review face plus the required whole-ticket complexity answer (package records as-is). */
166
179
  export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(
@@ -184,4 +197,38 @@ export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(
184
197
  ),
185
198
  );
186
199
 
200
+ /** Auditor generation schema: shared review face plus the complexity account of the implementation the verdict ruled on (package records as-is). */
201
+ export const auditorSubmissionSchema = withTerminatingOutputDeclarations(
202
+ Type.Object(
203
+ {
204
+ status: reviewStatusField,
205
+ ...reviewNarrativeFields,
206
+ mechanisms: Type.Array(auditorMechanismRowSchema, {
207
+ description:
208
+ "复杂度账:大理寺本轮判词所裁的实现,从本票起点到该 HEAD 生产代码新增的每一处依赖行、跨调用状态、锁、缓存装饰或包装,各一行(同台院机制层表),再写判词对这一层说了什么;一处没有为空数组。判词署了而表里有「删」行判词没处置,就是错署。",
209
+ }),
210
+ runtime: Type.Array(
211
+ Type.Object(
212
+ {
213
+ entry: Type.String({ description: "真实入口:你亲跑的命令原文(测试用例或程序入口)。票面、判词、施工记录、台院回执里点名过的每个真实入口都要有一行,一个不漏,再加你自己选的;数字只认自己跑出来的,不抄记录" }),
214
+ atBase: Type.String({ description: "在本票起点(本分支与家族分支或目标分支的 git merge-base,同台院)上跑这一入口的机器输出:用时、SQL/读次数、峰值内存等能读到的数字;入口是本票新加、票起点上没有的,写「票起点无此入口」" }),
215
+ atHead: Type.String({ description: "在所裁 HEAD 上跑同一入口的机器输出,同一机器同一环境" }),
216
+ judgeSaid: Type.Union([Type.String(), Type.Null()], { description: "判词对这一入口快慢说的那句原文(照抄);没说填 null" }),
217
+ compared: Type.Union(
218
+ [Type.Literal("HEAD 比票起点慢或读得多"), Type.Literal("HEAD 不比票起点慢、不多读"), Type.Literal("无从比:票起点无此入口,或这一端跑失败")],
219
+ { description: "只认 atBase 与 atHead 并排的数字:用时或读次数任一变大就是第一种;一次性成本、CI 另算、不阻断都不是理由。第三种给两类行:票起点上不存在的入口(atBase 写「票起点无此入口」),或任一端跑失败(把失败输出原样写进那一端);跑失败的行没解决前不得 converged" },
220
+ ),
221
+ },
222
+ { additionalProperties: true },
223
+ ),
224
+ {
225
+ description:
226
+ "性能账(受审之物是大理寺判词时填;受审太医署时此表与 mechanisms 都为空数组):票面涉及的真实入口,每个一行,票起点与所裁 HEAD 各亲跑一次并排记;至少一行是票起点上就有、两端都跑出数字的既有入口。有一行 compared 为「慢或读得多」而 judgeSaid 为 null,判词就是署了没处置,status 不能是 converged;有跑失败的行,或没有一行可比,status 同样不能是 converged。",
227
+ },
228
+ ),
229
+ },
230
+ { additionalProperties: true },
231
+ ),
232
+ );
233
+
187
234
  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 { notaryReviewSubmissionSchema, inspectorSubmissionSchema, reviewSubmissionSchema } from "./review-submission.ts";
8
+ import { auditorSubmissionSchema, notaryReviewSubmissionSchema, 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";
@@ -115,9 +115,9 @@ const SUBMISSION_FACE = {
115
115
  },
116
116
  auditor: {
117
117
  label: "审刑院输出",
118
- description: "审刑院终局回执,status 为 converged、continue 或 escalate。",
118
+ description: "审刑院终局回执,status 为 converged、continue 或 escalate(含所裁实现的复杂度账 mechanisms)。",
119
119
  promptSnippet: "审刑院终局回执",
120
- parameters: reviewSubmissionSchema,
120
+ parameters: auditorSubmissionSchema,
121
121
  },
122
122
  diarist: {
123
123
  label: "起居郎输出",