@akagilnc/pi-workflow-roles 0.1.6067 → 0.1.6074

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, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
1685
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, existenceRowUnion, MECHANISM_LABELS, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, clauseRowBase, CLAUSE_LABELS, clauseExistenceRowSchema, countersignSubmissionSchema, judgeMechanismRowSchema, judgeSubmissionSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
1686
1686
  var init_review_submission = __esm({
1687
1687
  "src/review-submission.ts"() {
1688
1688
  "use strict";
@@ -1779,39 +1779,81 @@ 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
- mechanismRowUnion = (extra = {}) => Type5.Union(
1782
+ existenceRowUnion = (base, labels, extra = {}) => Type5.Union(
1783
1783
  [
1784
1784
  Type5.Object(
1785
1785
  {
1786
- ...mechanismRowBase,
1786
+ ...base,
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(labels.without, { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
1791
1791
  ...extra
1792
1792
  },
1793
1793
  { additionalProperties: true }
1794
1794
  ),
1795
1795
  Type5.Object(
1796
1796
  {
1797
- ...mechanismRowBase,
1797
+ ...base,
1798
1798
  official: Type5.Null({
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
+ 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 ${labels.evidenceField} \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
1800
1800
  }),
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" }),
1801
+ disposition: Type5.Literal(labels.carries, { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
1802
1802
  ...extra
1803
1803
  },
1804
1804
  { additionalProperties: true }
1805
1805
  )
1806
1806
  ],
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" }
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${labels.without.split("\uFF1A")[0]}\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C${labels.carries.split("\uFF1A")[0]}\uFF09` }
1808
1808
  );
1809
+ MECHANISM_LABELS = { without: "\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "keeps" };
1810
+ mechanismRowUnion = (extra = {}) => existenceRowUnion(mechanismRowBase, MECHANISM_LABELS, extra);
1809
1811
  mechanismRowSchema = mechanismRowUnion();
1810
1812
  auditorMechanismRowSchema = mechanismRowUnion({
1811
1813
  judgeSaid: Type5.Union([Type5.String(), Type5.Null()], {
1812
1814
  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
1815
  })
1814
1816
  });
1817
+ clauseRowBase = {
1818
+ clause: Type5.String({ description: "\u73B0\u884C\u7968\u9762\u91CC\u8BA9\u67D0\u4E2A\u673A\u5236\u5B58\u5728\u7684\u90A3\u6761\u6761\u6B3E\u539F\u6587\uFF08\u7167\u6284\uFF0C\u4E0D\u5408\u5E76\u3001\u4E0D\u6539\u5199\uFF09" }),
1819
+ kind: Type5.Union(
1820
+ [Type5.Literal("\u660E\u5199\u673A\u5236\uFF1A\u6761\u6B3E\u81EA\u5DF1\u70B9\u540D\u4E86\u72B6\u6001\u3001\u8868\u3001\u7F13\u5B58\u3001\u9501\u3001\u4F9D\u8D56"), Type5.Literal("\u53EA\u5199\u7ED3\u679C\uFF1A\u6761\u6B3E\u53EA\u63D0\u8981\u6C42\uFF0C\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\uFF0C\u5F97\u957F\u51FA\u673A\u5236\u624D\u505A\u5F97\u5230")],
1821
+ { description: "\u4E24\u7C7B\u90FD\u8981\u5217\u3002\u7B2C\u4E8C\u7C7B\u6700\u5BB9\u6613\u6F0F\uFF1A\u96F6\u91CD\u590D\u3001\u8DE8\u63D0\u4EA4\u4E0D\u91CD\u8BFB\u3001\u4E0D\u5EFA\u8C41\u514D\u3001\u6BCF X \u53EA\u505A\u4E00\u6B21\u3001\u6C38\u4E0D Y\u2014\u2014\u8FD9\u79CD\u53E5\u5B50\u6CA1\u5199\u673A\u5236\u4E24\u4E2A\u5B57\uFF0C\u5374\u53EA\u80FD\u9760\u65B0\u72B6\u6001\u3001\u7F13\u5B58\u3001\u5931\u6548\u89C4\u5219\u6EE1\u8DB3\uFF1B\u5148\u6253\u5F00\u73B0\u72B6\u4EE3\u7801\u6838\u4E00\u904D\u5B83\u505A\u4E0D\u505A\u5F97\u5230\uFF0C\u505A\u4E0D\u5230\u5C31\u662F\u8FD9\u7C7B" }
1822
+ ),
1823
+ makes: Type5.String({ description: "\u8FD9\u6761\u6761\u6B3E\u843D\u5B9E\u540E\u4F1A\u8BA9\u4EC0\u4E48\u4E1C\u897F\u5B58\u5728\uFF1A\u8DE8\u8C03\u7528\u4FDD\u5B58\u7684\u72B6\u6001\u3001\u7F13\u5B58\u3001\u9501\u3001\u5931\u6548\u89C4\u5219\u3001\u9884\u8BA1\u7B97\u3001\u65B0\u4F9D\u8D56\uFF1B\u5199\u51FA\u5B83\u7684\u5F62\u72B6\u3002\u53EA\u5199\u7ED3\u679C\u7684\u6761\u6B3E\uFF0C\u5199\u6EE1\u8DB3\u5B83\u5FC5\u987B\u957F\u51FA\u7684\u90A3\u6837\u4E1C\u897F" })
1824
+ };
1825
+ CLAUSE_LABELS = { without: "\u4E0D\u8981\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u8981\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "makes" };
1826
+ clauseExistenceRowSchema = existenceRowUnion(clauseRowBase, CLAUSE_LABELS);
1827
+ countersignSubmissionSchema = withTerminatingOutputDeclarations(
1828
+ Type5.Object(
1829
+ {
1830
+ status: reviewStatusField,
1831
+ ...reviewNarrativeFields,
1832
+ existence: Type5.Array(clauseExistenceRowSchema, {
1833
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u73B0\u884C\u7968\u9762\u6BCF\u6761\u8BA9\u673A\u5236\u5B58\u5728\u7684\u6761\u6B3E\u5404\u4E00\u884C\u2014\u2014\u660E\u5199\u673A\u5236\u7684\uFF0C\u548C\u53EA\u5199\u7ED3\u679C\u8981\u6C42\u3001\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\u7684\uFF0C\u4E24\u7C7B\u90FD\u7B97\u2014\u2014\u5230 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u770B\u4E0D\u5E26\u5B83\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\u3002\u6709\u300C\u4E0D\u8981\u300D\u884C\u5728\uFF0C\u4E0D\u5F97\u7F72\uFF0C\u5C01\u9A73\u6216\u4E0A\u5448\u5E76\u70B9\u540D\u90A3\u6761\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u7B7E\u53D1\u65B9\u7B54\u8FC7\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u8981\u300D\u7684\u7406\u7531\uFF1B\u300C\u8981\u300D\u53EA\u8BA4\u793A\u8303\u91CC\u5E26\u540C\u6837\u7684\u5C42\u3002\u4E00\u6761\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
1834
+ })
1835
+ },
1836
+ { additionalProperties: true }
1837
+ )
1838
+ );
1839
+ judgeMechanismRowSchema = mechanismRowUnion({
1840
+ origin: Type5.Union(
1841
+ [Type5.Literal("\u5B9E\u73B0\u51C0\u589E\uFF1A\u672C\u7968\u8D77\u70B9\u5230\u6240\u5BA1 HEAD \u7684\u751F\u4EA7\u4EE3\u7801\u91CC\u5DF2\u6709\u7684"), Type5.Literal("\u672C\u5224\u5904\u65B9\uFF1A\u672C\u8F6E\u5224\u8BCD\u7684\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684")],
1842
+ { description: "\u8FD9\u4E00\u5C42\u4ECE\u54EA\u6765\u3002\u5904\u65B9\u884C\u7684 where \u5199\u5904\u65B9\u539F\u6587\u800C\u4E0D\u662F path:line\uFF1B\u5904\u65B9\u4F1A\u957F\u51FA\u793A\u8303\u4E0D\u5E26\u7684\u5C42\uFF0C\u5904\u65B9\u672C\u8EAB\u5C31\u4E0D\u80FD\u5F00" }
1843
+ )
1844
+ });
1845
+ judgeSubmissionSchema = withTerminatingOutputDeclarations(
1846
+ Type5.Object(
1847
+ {
1848
+ status: reviewStatusField,
1849
+ ...reviewNarrativeFields,
1850
+ mechanisms: Type5.Array(judgeMechanismRowSchema, {
1851
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u6240\u5BA1\u5B9E\u73B0\u4ECE\u672C\u7968\u8D77\u70B9\u5230 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\u5404\u4E00\u884C\uFF08origin \u5B9E\u73B0\u51C0\u589E\uFF09\uFF0C\u518D\u52A0\u672C\u8F6E\u5224\u8BCD\u6BCF\u6761\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684\u6BCF\u4E00\u5C42\u5404\u4E00\u884C\uFF08origin \u672C\u5224\u5904\u65B9\uFF09\u3002\u6BCF\u884C\u53EA\u95EE\u4E00\u4EF6\u4E8B\uFF1A\u8FD9\u4E00\u5173\u5207\uFF08\u8BFB\u590D\u7528\u3001\u5E76\u53D1\u3001\u5931\u6548\u2026\u2026\uFF09\u5728 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u600E\u4E48\u5904\u7406\u2014\u2014\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF0C\u5C31\u662F\u5220\uFF1B\u4E0D\u95EE\u7968\u9762\u90A3\u53E5\u8981\u6C42\u80FD\u4E0D\u80FD\u9760\u793A\u8303\u6EE1\u8DB3\u3002\u7968\u9762\u8981\u6C42\u8D85\u8FC7\u793A\u8303\u7684\uFF0C\u884C\u7167\u586B\u5220\uFF0C\u90A3\u53E5\u8981\u6C42\u4E0A\u5448\u3002\u6709\u300C\u5220\u300D\u884C\uFF1A\u5B9E\u73B0\u91CC\u7684\uFF0C\u5224\u5220\u6216\u4E0A\u5448\uFF0C\u4E0D\u5F97\u636E\u4EE5\u7F72\u6536\u655B\uFF1B\u5904\u65B9\u91CC\u7684\uFF0C\u90A3\u6761\u5904\u65B9\u4E0D\u80FD\u5F00\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u65BD\u5DE5\u81EA\u8FF0\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u7559\u300D\u7684\u7406\u7531\u3002\u884C\u53EA\u80FD\u8FDB\u8FD9\u5F20\u8868\uFF1A\u4E0D\u53E6\u5F00\u5B57\u6BB5\u5B58\u653E\uFF0C\u4E0D\u7559\u300C\u5F85\u5B9A\u300D\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
1852
+ })
1853
+ },
1854
+ { additionalProperties: true }
1855
+ )
1856
+ );
1815
1857
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
1816
1858
  Type5.Object(
1817
1859
  {
@@ -3225,9 +3267,9 @@ var init_role_submission_declarations = __esm({
3225
3267
  SUBMISSION_FACE = {
3226
3268
  judge: {
3227
3269
  label: "\u5927\u7406\u5BFA\u8F93\u51FA",
3228
- description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
3270
+ description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF08\u542B\u6240\u5BA1\u5B9E\u73B0\u4E0E\u672C\u5224\u5904\u65B9\u7684\u5B58\u5E9F\u5C3A mechanisms\uFF09\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
3229
3271
  promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
3230
- parameters: reviewSubmissionSchema
3272
+ parameters: judgeSubmissionSchema
3231
3273
  },
3232
3274
  fixer: {
3233
3275
  label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
@@ -3272,9 +3314,9 @@ var init_role_submission_declarations = __esm({
3272
3314
  },
3273
3315
  countersign: {
3274
3316
  label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
3275
- description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
3317
+ description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\uFF08\u542B\u73B0\u884C\u7968\u9762\u6761\u6B3E\u7684\u5B58\u5E9F\u5C3A existence\uFF09\u3002",
3276
3318
  promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
3277
- parameters: reviewSubmissionSchema
3319
+ parameters: countersignSubmissionSchema
3278
3320
  },
3279
3321
  secretariat: {
3280
3322
  label: "\u4E2D\u4E66\u7701\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, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
484
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, existenceRowUnion, MECHANISM_LABELS, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, clauseRowBase, CLAUSE_LABELS, clauseExistenceRowSchema, countersignSubmissionSchema, judgeMechanismRowSchema, judgeSubmissionSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
485
485
  var init_review_submission = __esm({
486
486
  "src/review-submission.ts"() {
487
487
  "use strict";
@@ -578,39 +578,81 @@ 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
- mechanismRowUnion = (extra = {}) => Type2.Union(
581
+ existenceRowUnion = (base, labels, extra = {}) => Type2.Union(
582
582
  [
583
583
  Type2.Object(
584
584
  {
585
- ...mechanismRowBase,
585
+ ...base,
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(labels.without, { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
590
590
  ...extra
591
591
  },
592
592
  { additionalProperties: true }
593
593
  ),
594
594
  Type2.Object(
595
595
  {
596
- ...mechanismRowBase,
596
+ ...base,
597
597
  official: Type2.Null({
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
+ 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 ${labels.evidenceField} \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
599
599
  }),
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" }),
600
+ disposition: Type2.Literal(labels.carries, { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
601
601
  ...extra
602
602
  },
603
603
  { additionalProperties: true }
604
604
  )
605
605
  ],
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" }
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${labels.without.split("\uFF1A")[0]}\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C${labels.carries.split("\uFF1A")[0]}\uFF09` }
607
607
  );
608
+ MECHANISM_LABELS = { without: "\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "keeps" };
609
+ mechanismRowUnion = (extra = {}) => existenceRowUnion(mechanismRowBase, MECHANISM_LABELS, extra);
608
610
  mechanismRowSchema = mechanismRowUnion();
609
611
  auditorMechanismRowSchema = mechanismRowUnion({
610
612
  judgeSaid: Type2.Union([Type2.String(), Type2.Null()], {
611
613
  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
614
  })
613
615
  });
616
+ clauseRowBase = {
617
+ clause: Type2.String({ description: "\u73B0\u884C\u7968\u9762\u91CC\u8BA9\u67D0\u4E2A\u673A\u5236\u5B58\u5728\u7684\u90A3\u6761\u6761\u6B3E\u539F\u6587\uFF08\u7167\u6284\uFF0C\u4E0D\u5408\u5E76\u3001\u4E0D\u6539\u5199\uFF09" }),
618
+ kind: Type2.Union(
619
+ [Type2.Literal("\u660E\u5199\u673A\u5236\uFF1A\u6761\u6B3E\u81EA\u5DF1\u70B9\u540D\u4E86\u72B6\u6001\u3001\u8868\u3001\u7F13\u5B58\u3001\u9501\u3001\u4F9D\u8D56"), Type2.Literal("\u53EA\u5199\u7ED3\u679C\uFF1A\u6761\u6B3E\u53EA\u63D0\u8981\u6C42\uFF0C\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\uFF0C\u5F97\u957F\u51FA\u673A\u5236\u624D\u505A\u5F97\u5230")],
620
+ { description: "\u4E24\u7C7B\u90FD\u8981\u5217\u3002\u7B2C\u4E8C\u7C7B\u6700\u5BB9\u6613\u6F0F\uFF1A\u96F6\u91CD\u590D\u3001\u8DE8\u63D0\u4EA4\u4E0D\u91CD\u8BFB\u3001\u4E0D\u5EFA\u8C41\u514D\u3001\u6BCF X \u53EA\u505A\u4E00\u6B21\u3001\u6C38\u4E0D Y\u2014\u2014\u8FD9\u79CD\u53E5\u5B50\u6CA1\u5199\u673A\u5236\u4E24\u4E2A\u5B57\uFF0C\u5374\u53EA\u80FD\u9760\u65B0\u72B6\u6001\u3001\u7F13\u5B58\u3001\u5931\u6548\u89C4\u5219\u6EE1\u8DB3\uFF1B\u5148\u6253\u5F00\u73B0\u72B6\u4EE3\u7801\u6838\u4E00\u904D\u5B83\u505A\u4E0D\u505A\u5F97\u5230\uFF0C\u505A\u4E0D\u5230\u5C31\u662F\u8FD9\u7C7B" }
621
+ ),
622
+ makes: Type2.String({ description: "\u8FD9\u6761\u6761\u6B3E\u843D\u5B9E\u540E\u4F1A\u8BA9\u4EC0\u4E48\u4E1C\u897F\u5B58\u5728\uFF1A\u8DE8\u8C03\u7528\u4FDD\u5B58\u7684\u72B6\u6001\u3001\u7F13\u5B58\u3001\u9501\u3001\u5931\u6548\u89C4\u5219\u3001\u9884\u8BA1\u7B97\u3001\u65B0\u4F9D\u8D56\uFF1B\u5199\u51FA\u5B83\u7684\u5F62\u72B6\u3002\u53EA\u5199\u7ED3\u679C\u7684\u6761\u6B3E\uFF0C\u5199\u6EE1\u8DB3\u5B83\u5FC5\u987B\u957F\u51FA\u7684\u90A3\u6837\u4E1C\u897F" })
623
+ };
624
+ CLAUSE_LABELS = { without: "\u4E0D\u8981\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u8981\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "makes" };
625
+ clauseExistenceRowSchema = existenceRowUnion(clauseRowBase, CLAUSE_LABELS);
626
+ countersignSubmissionSchema = withTerminatingOutputDeclarations(
627
+ Type2.Object(
628
+ {
629
+ status: reviewStatusField,
630
+ ...reviewNarrativeFields,
631
+ existence: Type2.Array(clauseExistenceRowSchema, {
632
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u73B0\u884C\u7968\u9762\u6BCF\u6761\u8BA9\u673A\u5236\u5B58\u5728\u7684\u6761\u6B3E\u5404\u4E00\u884C\u2014\u2014\u660E\u5199\u673A\u5236\u7684\uFF0C\u548C\u53EA\u5199\u7ED3\u679C\u8981\u6C42\u3001\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\u7684\uFF0C\u4E24\u7C7B\u90FD\u7B97\u2014\u2014\u5230 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u770B\u4E0D\u5E26\u5B83\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\u3002\u6709\u300C\u4E0D\u8981\u300D\u884C\u5728\uFF0C\u4E0D\u5F97\u7F72\uFF0C\u5C01\u9A73\u6216\u4E0A\u5448\u5E76\u70B9\u540D\u90A3\u6761\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u7B7E\u53D1\u65B9\u7B54\u8FC7\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u8981\u300D\u7684\u7406\u7531\uFF1B\u300C\u8981\u300D\u53EA\u8BA4\u793A\u8303\u91CC\u5E26\u540C\u6837\u7684\u5C42\u3002\u4E00\u6761\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
633
+ })
634
+ },
635
+ { additionalProperties: true }
636
+ )
637
+ );
638
+ judgeMechanismRowSchema = mechanismRowUnion({
639
+ origin: Type2.Union(
640
+ [Type2.Literal("\u5B9E\u73B0\u51C0\u589E\uFF1A\u672C\u7968\u8D77\u70B9\u5230\u6240\u5BA1 HEAD \u7684\u751F\u4EA7\u4EE3\u7801\u91CC\u5DF2\u6709\u7684"), Type2.Literal("\u672C\u5224\u5904\u65B9\uFF1A\u672C\u8F6E\u5224\u8BCD\u7684\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684")],
641
+ { description: "\u8FD9\u4E00\u5C42\u4ECE\u54EA\u6765\u3002\u5904\u65B9\u884C\u7684 where \u5199\u5904\u65B9\u539F\u6587\u800C\u4E0D\u662F path:line\uFF1B\u5904\u65B9\u4F1A\u957F\u51FA\u793A\u8303\u4E0D\u5E26\u7684\u5C42\uFF0C\u5904\u65B9\u672C\u8EAB\u5C31\u4E0D\u80FD\u5F00" }
642
+ )
643
+ });
644
+ judgeSubmissionSchema = withTerminatingOutputDeclarations(
645
+ Type2.Object(
646
+ {
647
+ status: reviewStatusField,
648
+ ...reviewNarrativeFields,
649
+ mechanisms: Type2.Array(judgeMechanismRowSchema, {
650
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u6240\u5BA1\u5B9E\u73B0\u4ECE\u672C\u7968\u8D77\u70B9\u5230 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\u5404\u4E00\u884C\uFF08origin \u5B9E\u73B0\u51C0\u589E\uFF09\uFF0C\u518D\u52A0\u672C\u8F6E\u5224\u8BCD\u6BCF\u6761\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684\u6BCF\u4E00\u5C42\u5404\u4E00\u884C\uFF08origin \u672C\u5224\u5904\u65B9\uFF09\u3002\u6BCF\u884C\u53EA\u95EE\u4E00\u4EF6\u4E8B\uFF1A\u8FD9\u4E00\u5173\u5207\uFF08\u8BFB\u590D\u7528\u3001\u5E76\u53D1\u3001\u5931\u6548\u2026\u2026\uFF09\u5728 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u600E\u4E48\u5904\u7406\u2014\u2014\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF0C\u5C31\u662F\u5220\uFF1B\u4E0D\u95EE\u7968\u9762\u90A3\u53E5\u8981\u6C42\u80FD\u4E0D\u80FD\u9760\u793A\u8303\u6EE1\u8DB3\u3002\u7968\u9762\u8981\u6C42\u8D85\u8FC7\u793A\u8303\u7684\uFF0C\u884C\u7167\u586B\u5220\uFF0C\u90A3\u53E5\u8981\u6C42\u4E0A\u5448\u3002\u6709\u300C\u5220\u300D\u884C\uFF1A\u5B9E\u73B0\u91CC\u7684\uFF0C\u5224\u5220\u6216\u4E0A\u5448\uFF0C\u4E0D\u5F97\u636E\u4EE5\u7F72\u6536\u655B\uFF1B\u5904\u65B9\u91CC\u7684\uFF0C\u90A3\u6761\u5904\u65B9\u4E0D\u80FD\u5F00\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u65BD\u5DE5\u81EA\u8FF0\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u7559\u300D\u7684\u7406\u7531\u3002\u884C\u53EA\u80FD\u8FDB\u8FD9\u5F20\u8868\uFF1A\u4E0D\u53E6\u5F00\u5B57\u6BB5\u5B58\u653E\uFF0C\u4E0D\u7559\u300C\u5F85\u5B9A\u300D\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
651
+ })
652
+ },
653
+ { additionalProperties: true }
654
+ )
655
+ );
614
656
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
615
657
  Type2.Object(
616
658
  {
@@ -4547,9 +4589,9 @@ var init_role_submission_declarations = __esm({
4547
4589
  SUBMISSION_FACE = {
4548
4590
  judge: {
4549
4591
  label: "\u5927\u7406\u5BFA\u8F93\u51FA",
4550
- description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
4592
+ description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF08\u542B\u6240\u5BA1\u5B9E\u73B0\u4E0E\u672C\u5224\u5904\u65B9\u7684\u5B58\u5E9F\u5C3A mechanisms\uFF09\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
4551
4593
  promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
4552
- parameters: reviewSubmissionSchema
4594
+ parameters: judgeSubmissionSchema
4553
4595
  },
4554
4596
  fixer: {
4555
4597
  label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
@@ -4594,9 +4636,9 @@ var init_role_submission_declarations = __esm({
4594
4636
  },
4595
4637
  countersign: {
4596
4638
  label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
4597
- description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
4639
+ description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\uFF08\u542B\u73B0\u884C\u7968\u9762\u6761\u6B3E\u7684\u5B58\u5E9F\u5C3A existence\uFF09\u3002",
4598
4640
  promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
4599
- parameters: reviewSubmissionSchema
4641
+ parameters: countersignSubmissionSchema
4600
4642
  },
4601
4643
  secretariat: {
4602
4644
  label: "\u4E2D\u4E66\u7701\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, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
8710
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, existenceRowUnion, MECHANISM_LABELS, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, clauseRowBase, CLAUSE_LABELS, clauseExistenceRowSchema, countersignSubmissionSchema, judgeMechanismRowSchema, judgeSubmissionSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
8711
8711
  var init_review_submission = __esm({
8712
8712
  "src/review-submission.ts"() {
8713
8713
  "use strict";
@@ -8805,39 +8805,81 @@ 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
- mechanismRowUnion = (extra = {}) => typebox_exports.Union(
8808
+ existenceRowUnion = (base, labels, extra = {}) => typebox_exports.Union(
8809
8809
  [
8810
8810
  typebox_exports.Object(
8811
8811
  {
8812
- ...mechanismRowBase,
8812
+ ...base,
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(labels.without, { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
8817
8817
  ...extra
8818
8818
  },
8819
8819
  { additionalProperties: true }
8820
8820
  ),
8821
8821
  typebox_exports.Object(
8822
8822
  {
8823
- ...mechanismRowBase,
8823
+ ...base,
8824
8824
  official: typebox_exports.Null({
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
+ 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 ${labels.evidenceField} \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
8826
8826
  }),
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" }),
8827
+ disposition: typebox_exports.Literal(labels.carries, { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
8828
8828
  ...extra
8829
8829
  },
8830
8830
  { additionalProperties: true }
8831
8831
  )
8832
8832
  ],
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" }
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${labels.without.split("\uFF1A")[0]}\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C${labels.carries.split("\uFF1A")[0]}\uFF09` }
8834
8834
  );
8835
+ MECHANISM_LABELS = { without: "\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "keeps" };
8836
+ mechanismRowUnion = (extra = {}) => existenceRowUnion(mechanismRowBase, MECHANISM_LABELS, extra);
8835
8837
  mechanismRowSchema = mechanismRowUnion();
8836
8838
  auditorMechanismRowSchema = mechanismRowUnion({
8837
8839
  judgeSaid: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], {
8838
8840
  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
8841
  })
8840
8842
  });
8843
+ clauseRowBase = {
8844
+ clause: typebox_exports.String({ description: "\u73B0\u884C\u7968\u9762\u91CC\u8BA9\u67D0\u4E2A\u673A\u5236\u5B58\u5728\u7684\u90A3\u6761\u6761\u6B3E\u539F\u6587\uFF08\u7167\u6284\uFF0C\u4E0D\u5408\u5E76\u3001\u4E0D\u6539\u5199\uFF09" }),
8845
+ kind: typebox_exports.Union(
8846
+ [typebox_exports.Literal("\u660E\u5199\u673A\u5236\uFF1A\u6761\u6B3E\u81EA\u5DF1\u70B9\u540D\u4E86\u72B6\u6001\u3001\u8868\u3001\u7F13\u5B58\u3001\u9501\u3001\u4F9D\u8D56"), typebox_exports.Literal("\u53EA\u5199\u7ED3\u679C\uFF1A\u6761\u6B3E\u53EA\u63D0\u8981\u6C42\uFF0C\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\uFF0C\u5F97\u957F\u51FA\u673A\u5236\u624D\u505A\u5F97\u5230")],
8847
+ { description: "\u4E24\u7C7B\u90FD\u8981\u5217\u3002\u7B2C\u4E8C\u7C7B\u6700\u5BB9\u6613\u6F0F\uFF1A\u96F6\u91CD\u590D\u3001\u8DE8\u63D0\u4EA4\u4E0D\u91CD\u8BFB\u3001\u4E0D\u5EFA\u8C41\u514D\u3001\u6BCF X \u53EA\u505A\u4E00\u6B21\u3001\u6C38\u4E0D Y\u2014\u2014\u8FD9\u79CD\u53E5\u5B50\u6CA1\u5199\u673A\u5236\u4E24\u4E2A\u5B57\uFF0C\u5374\u53EA\u80FD\u9760\u65B0\u72B6\u6001\u3001\u7F13\u5B58\u3001\u5931\u6548\u89C4\u5219\u6EE1\u8DB3\uFF1B\u5148\u6253\u5F00\u73B0\u72B6\u4EE3\u7801\u6838\u4E00\u904D\u5B83\u505A\u4E0D\u505A\u5F97\u5230\uFF0C\u505A\u4E0D\u5230\u5C31\u662F\u8FD9\u7C7B" }
8848
+ ),
8849
+ makes: typebox_exports.String({ description: "\u8FD9\u6761\u6761\u6B3E\u843D\u5B9E\u540E\u4F1A\u8BA9\u4EC0\u4E48\u4E1C\u897F\u5B58\u5728\uFF1A\u8DE8\u8C03\u7528\u4FDD\u5B58\u7684\u72B6\u6001\u3001\u7F13\u5B58\u3001\u9501\u3001\u5931\u6548\u89C4\u5219\u3001\u9884\u8BA1\u7B97\u3001\u65B0\u4F9D\u8D56\uFF1B\u5199\u51FA\u5B83\u7684\u5F62\u72B6\u3002\u53EA\u5199\u7ED3\u679C\u7684\u6761\u6B3E\uFF0C\u5199\u6EE1\u8DB3\u5B83\u5FC5\u987B\u957F\u51FA\u7684\u90A3\u6837\u4E1C\u897F" })
8850
+ };
8851
+ CLAUSE_LABELS = { without: "\u4E0D\u8981\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u8981\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "makes" };
8852
+ clauseExistenceRowSchema = existenceRowUnion(clauseRowBase, CLAUSE_LABELS);
8853
+ countersignSubmissionSchema = withTerminatingOutputDeclarations(
8854
+ typebox_exports.Object(
8855
+ {
8856
+ status: reviewStatusField,
8857
+ ...reviewNarrativeFields,
8858
+ existence: typebox_exports.Array(clauseExistenceRowSchema, {
8859
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u73B0\u884C\u7968\u9762\u6BCF\u6761\u8BA9\u673A\u5236\u5B58\u5728\u7684\u6761\u6B3E\u5404\u4E00\u884C\u2014\u2014\u660E\u5199\u673A\u5236\u7684\uFF0C\u548C\u53EA\u5199\u7ED3\u679C\u8981\u6C42\u3001\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\u7684\uFF0C\u4E24\u7C7B\u90FD\u7B97\u2014\u2014\u5230 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u770B\u4E0D\u5E26\u5B83\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\u3002\u6709\u300C\u4E0D\u8981\u300D\u884C\u5728\uFF0C\u4E0D\u5F97\u7F72\uFF0C\u5C01\u9A73\u6216\u4E0A\u5448\u5E76\u70B9\u540D\u90A3\u6761\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u7B7E\u53D1\u65B9\u7B54\u8FC7\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u8981\u300D\u7684\u7406\u7531\uFF1B\u300C\u8981\u300D\u53EA\u8BA4\u793A\u8303\u91CC\u5E26\u540C\u6837\u7684\u5C42\u3002\u4E00\u6761\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
8860
+ })
8861
+ },
8862
+ { additionalProperties: true }
8863
+ )
8864
+ );
8865
+ judgeMechanismRowSchema = mechanismRowUnion({
8866
+ origin: typebox_exports.Union(
8867
+ [typebox_exports.Literal("\u5B9E\u73B0\u51C0\u589E\uFF1A\u672C\u7968\u8D77\u70B9\u5230\u6240\u5BA1 HEAD \u7684\u751F\u4EA7\u4EE3\u7801\u91CC\u5DF2\u6709\u7684"), typebox_exports.Literal("\u672C\u5224\u5904\u65B9\uFF1A\u672C\u8F6E\u5224\u8BCD\u7684\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684")],
8868
+ { description: "\u8FD9\u4E00\u5C42\u4ECE\u54EA\u6765\u3002\u5904\u65B9\u884C\u7684 where \u5199\u5904\u65B9\u539F\u6587\u800C\u4E0D\u662F path:line\uFF1B\u5904\u65B9\u4F1A\u957F\u51FA\u793A\u8303\u4E0D\u5E26\u7684\u5C42\uFF0C\u5904\u65B9\u672C\u8EAB\u5C31\u4E0D\u80FD\u5F00" }
8869
+ )
8870
+ });
8871
+ judgeSubmissionSchema = withTerminatingOutputDeclarations(
8872
+ typebox_exports.Object(
8873
+ {
8874
+ status: reviewStatusField,
8875
+ ...reviewNarrativeFields,
8876
+ mechanisms: typebox_exports.Array(judgeMechanismRowSchema, {
8877
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u6240\u5BA1\u5B9E\u73B0\u4ECE\u672C\u7968\u8D77\u70B9\u5230 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\u5404\u4E00\u884C\uFF08origin \u5B9E\u73B0\u51C0\u589E\uFF09\uFF0C\u518D\u52A0\u672C\u8F6E\u5224\u8BCD\u6BCF\u6761\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684\u6BCF\u4E00\u5C42\u5404\u4E00\u884C\uFF08origin \u672C\u5224\u5904\u65B9\uFF09\u3002\u6BCF\u884C\u53EA\u95EE\u4E00\u4EF6\u4E8B\uFF1A\u8FD9\u4E00\u5173\u5207\uFF08\u8BFB\u590D\u7528\u3001\u5E76\u53D1\u3001\u5931\u6548\u2026\u2026\uFF09\u5728 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u600E\u4E48\u5904\u7406\u2014\u2014\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF0C\u5C31\u662F\u5220\uFF1B\u4E0D\u95EE\u7968\u9762\u90A3\u53E5\u8981\u6C42\u80FD\u4E0D\u80FD\u9760\u793A\u8303\u6EE1\u8DB3\u3002\u7968\u9762\u8981\u6C42\u8D85\u8FC7\u793A\u8303\u7684\uFF0C\u884C\u7167\u586B\u5220\uFF0C\u90A3\u53E5\u8981\u6C42\u4E0A\u5448\u3002\u6709\u300C\u5220\u300D\u884C\uFF1A\u5B9E\u73B0\u91CC\u7684\uFF0C\u5224\u5220\u6216\u4E0A\u5448\uFF0C\u4E0D\u5F97\u636E\u4EE5\u7F72\u6536\u655B\uFF1B\u5904\u65B9\u91CC\u7684\uFF0C\u90A3\u6761\u5904\u65B9\u4E0D\u80FD\u5F00\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u65BD\u5DE5\u81EA\u8FF0\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u7559\u300D\u7684\u7406\u7531\u3002\u884C\u53EA\u80FD\u8FDB\u8FD9\u5F20\u8868\uFF1A\u4E0D\u53E6\u5F00\u5B57\u6BB5\u5B58\u653E\uFF0C\u4E0D\u7559\u300C\u5F85\u5B9A\u300D\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
8878
+ })
8879
+ },
8880
+ { additionalProperties: true }
8881
+ )
8882
+ );
8841
8883
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
8842
8884
  typebox_exports.Object(
8843
8885
  {
@@ -9843,9 +9885,9 @@ var init_role_submission_declarations = __esm({
9843
9885
  SUBMISSION_FACE = {
9844
9886
  judge: {
9845
9887
  label: "\u5927\u7406\u5BFA\u8F93\u51FA",
9846
- description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
9888
+ description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF08\u542B\u6240\u5BA1\u5B9E\u73B0\u4E0E\u672C\u5224\u5904\u65B9\u7684\u5B58\u5E9F\u5C3A mechanisms\uFF09\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
9847
9889
  promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
9848
- parameters: reviewSubmissionSchema
9890
+ parameters: judgeSubmissionSchema
9849
9891
  },
9850
9892
  fixer: {
9851
9893
  label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
@@ -9890,9 +9932,9 @@ var init_role_submission_declarations = __esm({
9890
9932
  },
9891
9933
  countersign: {
9892
9934
  label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
9893
- description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
9935
+ description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\uFF08\u542B\u73B0\u884C\u7968\u9762\u6761\u6B3E\u7684\u5B58\u5E9F\u5C3A existence\uFF09\u3002",
9894
9936
  promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
9895
- parameters: reviewSubmissionSchema
9937
+ parameters: countersignSubmissionSchema
9896
9938
  },
9897
9939
  secretariat: {
9898
9940
  label: "\u4E2D\u4E66\u7701\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, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
9200
+ var REVIEW_SUBMISSION_OUTPUT_TOOL_NAME, REVIEW_QUEUE_WORDS, REVIEW_QUEUE_STATUSES, reviewStatusField, reviewNarrativeFields, reviewSubmissionSchema, notaryClauseItemSchema, notaryClausesField, notaryReviewSubmissionSchema, ticketComplexityRowSchema, mechanismRowBase, MECHANISM_FRAMEWORK_RULE, existenceRowUnion, MECHANISM_LABELS, mechanismRowUnion, mechanismRowSchema, auditorMechanismRowSchema, clauseRowBase, CLAUSE_LABELS, clauseExistenceRowSchema, countersignSubmissionSchema, judgeMechanismRowSchema, judgeSubmissionSchema, inspectorSubmissionSchema, auditorSubmissionSchema;
9201
9201
  var init_review_submission = __esm({
9202
9202
  "src/review-submission.ts"() {
9203
9203
  "use strict";
@@ -9295,39 +9295,81 @@ 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
- mechanismRowUnion = (extra = {}) => typebox_exports.Union(
9298
+ existenceRowUnion = (base, labels, extra = {}) => typebox_exports.Union(
9299
9299
  [
9300
9300
  typebox_exports.Object(
9301
9301
  {
9302
- ...mechanismRowBase,
9302
+ ...base,
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(labels.without, { description: "official \u586B\u4E86\u5B57\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
9307
9307
  ...extra
9308
9308
  },
9309
9309
  { additionalProperties: true }
9310
9310
  ),
9311
9311
  typebox_exports.Object(
9312
9312
  {
9313
- ...mechanismRowBase,
9313
+ ...base,
9314
9314
  official: typebox_exports.Null({
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
+ 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 ${labels.evidenceField} \u672B\u5C3E\u5199\u6846\u67B6\u540D\u4E0E\u793A\u8303\u91CC\u90A3\u4E00\u5904\u3002${MECHANISM_FRAMEWORK_RULE}`
9316
9316
  }),
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" }),
9317
+ disposition: typebox_exports.Literal(labels.carries, { description: "official \u4E3A null\uFF0C\u8FD9\u4E00\u884C\u53EA\u80FD\u662F\u8FD9\u4E2A\u5904\u7F6E" }),
9318
9318
  ...extra
9319
9319
  },
9320
9320
  { additionalProperties: true }
9321
9321
  )
9322
9322
  ],
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" }
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${labels.without.split("\uFF1A")[0]}\uFF09\uFF1B\u793A\u8303\u672C\u8EAB\u5C31\u5E26\u540C\u6837\u7684\u5C42\uFF08official null\uFF0C${labels.carries.split("\uFF1A")[0]}\uFF09` }
9324
9324
  );
9325
+ MECHANISM_LABELS = { without: "\u5220\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u7559\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "keeps" };
9326
+ mechanismRowUnion = (extra = {}) => existenceRowUnion(mechanismRowBase, MECHANISM_LABELS, extra);
9325
9327
  mechanismRowSchema = mechanismRowUnion();
9326
9328
  auditorMechanismRowSchema = mechanismRowUnion({
9327
9329
  judgeSaid: typebox_exports.Union([typebox_exports.String(), typebox_exports.Null()], {
9328
9330
  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
9331
  })
9330
9332
  });
9333
+ clauseRowBase = {
9334
+ clause: typebox_exports.String({ description: "\u73B0\u884C\u7968\u9762\u91CC\u8BA9\u67D0\u4E2A\u673A\u5236\u5B58\u5728\u7684\u90A3\u6761\u6761\u6B3E\u539F\u6587\uFF08\u7167\u6284\uFF0C\u4E0D\u5408\u5E76\u3001\u4E0D\u6539\u5199\uFF09" }),
9335
+ kind: typebox_exports.Union(
9336
+ [typebox_exports.Literal("\u660E\u5199\u673A\u5236\uFF1A\u6761\u6B3E\u81EA\u5DF1\u70B9\u540D\u4E86\u72B6\u6001\u3001\u8868\u3001\u7F13\u5B58\u3001\u9501\u3001\u4F9D\u8D56"), typebox_exports.Literal("\u53EA\u5199\u7ED3\u679C\uFF1A\u6761\u6B3E\u53EA\u63D0\u8981\u6C42\uFF0C\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\uFF0C\u5F97\u957F\u51FA\u673A\u5236\u624D\u505A\u5F97\u5230")],
9337
+ { description: "\u4E24\u7C7B\u90FD\u8981\u5217\u3002\u7B2C\u4E8C\u7C7B\u6700\u5BB9\u6613\u6F0F\uFF1A\u96F6\u91CD\u590D\u3001\u8DE8\u63D0\u4EA4\u4E0D\u91CD\u8BFB\u3001\u4E0D\u5EFA\u8C41\u514D\u3001\u6BCF X \u53EA\u505A\u4E00\u6B21\u3001\u6C38\u4E0D Y\u2014\u2014\u8FD9\u79CD\u53E5\u5B50\u6CA1\u5199\u673A\u5236\u4E24\u4E2A\u5B57\uFF0C\u5374\u53EA\u80FD\u9760\u65B0\u72B6\u6001\u3001\u7F13\u5B58\u3001\u5931\u6548\u89C4\u5219\u6EE1\u8DB3\uFF1B\u5148\u6253\u5F00\u73B0\u72B6\u4EE3\u7801\u6838\u4E00\u904D\u5B83\u505A\u4E0D\u505A\u5F97\u5230\uFF0C\u505A\u4E0D\u5230\u5C31\u662F\u8FD9\u7C7B" }
9338
+ ),
9339
+ makes: typebox_exports.String({ description: "\u8FD9\u6761\u6761\u6B3E\u843D\u5B9E\u540E\u4F1A\u8BA9\u4EC0\u4E48\u4E1C\u897F\u5B58\u5728\uFF1A\u8DE8\u8C03\u7528\u4FDD\u5B58\u7684\u72B6\u6001\u3001\u7F13\u5B58\u3001\u9501\u3001\u5931\u6548\u89C4\u5219\u3001\u9884\u8BA1\u7B97\u3001\u65B0\u4F9D\u8D56\uFF1B\u5199\u51FA\u5B83\u7684\u5F62\u72B6\u3002\u53EA\u5199\u7ED3\u679C\u7684\u6761\u6B3E\uFF0C\u5199\u6EE1\u8DB3\u5B83\u5FC5\u987B\u957F\u51FA\u7684\u90A3\u6837\u4E1C\u897F" })
9340
+ };
9341
+ CLAUSE_LABELS = { without: "\u4E0D\u8981\uFF1A\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86", carries: "\u8981\uFF1A\u793A\u8303\u672C\u8EAB\u5C31\u4E3A\u540C\u4E00\u5173\u5207\u5E26\u540C\u6837\u7684\u5C42", evidenceField: "makes" };
9342
+ clauseExistenceRowSchema = existenceRowUnion(clauseRowBase, CLAUSE_LABELS);
9343
+ countersignSubmissionSchema = withTerminatingOutputDeclarations(
9344
+ typebox_exports.Object(
9345
+ {
9346
+ status: reviewStatusField,
9347
+ ...reviewNarrativeFields,
9348
+ existence: typebox_exports.Array(clauseExistenceRowSchema, {
9349
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u73B0\u884C\u7968\u9762\u6BCF\u6761\u8BA9\u673A\u5236\u5B58\u5728\u7684\u6761\u6B3E\u5404\u4E00\u884C\u2014\u2014\u660E\u5199\u673A\u5236\u7684\uFF0C\u548C\u53EA\u5199\u7ED3\u679C\u8981\u6C42\u3001\u73B0\u72B6\u4EE3\u7801\u6EE1\u8DB3\u4E0D\u4E86\u7684\uFF0C\u4E24\u7C7B\u90FD\u7B97\u2014\u2014\u5230 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u770B\u4E0D\u5E26\u5B83\u65F6\u540C\u4E00\u5173\u5207\u600E\u4E48\u5904\u7406\u3002\u6709\u300C\u4E0D\u8981\u300D\u884C\u5728\uFF0C\u4E0D\u5F97\u7F72\uFF0C\u5C01\u9A73\u6216\u4E0A\u5448\u5E76\u70B9\u540D\u90A3\u6761\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u7B7E\u53D1\u65B9\u7B54\u8FC7\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u8981\u300D\u7684\u7406\u7531\uFF1B\u300C\u8981\u300D\u53EA\u8BA4\u793A\u8303\u91CC\u5E26\u540C\u6837\u7684\u5C42\u3002\u4E00\u6761\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
9350
+ })
9351
+ },
9352
+ { additionalProperties: true }
9353
+ )
9354
+ );
9355
+ judgeMechanismRowSchema = mechanismRowUnion({
9356
+ origin: typebox_exports.Union(
9357
+ [typebox_exports.Literal("\u5B9E\u73B0\u51C0\u589E\uFF1A\u672C\u7968\u8D77\u70B9\u5230\u6240\u5BA1 HEAD \u7684\u751F\u4EA7\u4EE3\u7801\u91CC\u5DF2\u6709\u7684"), typebox_exports.Literal("\u672C\u5224\u5904\u65B9\uFF1A\u672C\u8F6E\u5224\u8BCD\u7684\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684")],
9358
+ { description: "\u8FD9\u4E00\u5C42\u4ECE\u54EA\u6765\u3002\u5904\u65B9\u884C\u7684 where \u5199\u5904\u65B9\u539F\u6587\u800C\u4E0D\u662F path:line\uFF1B\u5904\u65B9\u4F1A\u957F\u51FA\u793A\u8303\u4E0D\u5E26\u7684\u5C42\uFF0C\u5904\u65B9\u672C\u8EAB\u5C31\u4E0D\u80FD\u5F00" }
9359
+ )
9360
+ });
9361
+ judgeSubmissionSchema = withTerminatingOutputDeclarations(
9362
+ typebox_exports.Object(
9363
+ {
9364
+ status: reviewStatusField,
9365
+ ...reviewNarrativeFields,
9366
+ mechanisms: typebox_exports.Array(judgeMechanismRowSchema, {
9367
+ description: "\u5B58\u5E9F\u5C3A\uFF1A\u6240\u5BA1\u5B9E\u73B0\u4ECE\u672C\u7968\u8D77\u70B9\u5230 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\u5404\u4E00\u884C\uFF08origin \u5B9E\u73B0\u51C0\u589E\uFF09\uFF0C\u518D\u52A0\u672C\u8F6E\u5224\u8BCD\u6BCF\u6761\u5904\u65B9\u6216\u7EA6\u675F\u843D\u5B9E\u540E\u4F1A\u957F\u51FA\u7684\u6BCF\u4E00\u5C42\u5404\u4E00\u884C\uFF08origin \u672C\u5224\u5904\u65B9\uFF09\u3002\u6BCF\u884C\u53EA\u95EE\u4E00\u4EF6\u4E8B\uFF1A\u8FD9\u4E00\u5173\u5207\uFF08\u8BFB\u590D\u7528\u3001\u5E76\u53D1\u3001\u5931\u6548\u2026\u2026\uFF09\u5728 ADR\uFF0F\u7968\u9762\u70B9\u540D\u7684\u5E94\u7528\u6846\u67B6\u5B98\u65B9\u793A\u8303\u91CC\u600E\u4E48\u5904\u7406\u2014\u2014\u793A\u8303\u4E0D\u5E26\u8FD9\u4E00\u5C42\u4E5F\u5904\u7406\u5F97\u4E86\uFF0C\u5C31\u662F\u5220\uFF1B\u4E0D\u95EE\u7968\u9762\u90A3\u53E5\u8981\u6C42\u80FD\u4E0D\u80FD\u9760\u793A\u8303\u6EE1\u8DB3\u3002\u7968\u9762\u8981\u6C42\u8D85\u8FC7\u793A\u8303\u7684\uFF0C\u884C\u7167\u586B\u5220\uFF0C\u90A3\u53E5\u8981\u6C42\u4E0A\u5448\u3002\u6709\u300C\u5220\u300D\u884C\uFF1A\u5B9E\u73B0\u91CC\u7684\uFF0C\u5224\u5220\u6216\u4E0A\u5448\uFF0C\u4E0D\u5F97\u636E\u4EE5\u7F72\u6536\u655B\uFF1B\u5904\u65B9\u91CC\u7684\uFF0C\u90A3\u6761\u5904\u65B9\u4E0D\u80FD\u5F00\u3002\u7968\u9762\u5DF2\u5199\u3001\u524D\u8F6E\u5224\u8BCD\u8981\u6C42\u8FC7\u3001\u65BD\u5DE5\u81EA\u8FF0\u3001\u965B\u4E0B\u5BF9\u522B\u7684\u9898\u70B9\u8FC7\u5934\uFF0C\u90FD\u4E0D\u662F\u300C\u7559\u300D\u7684\u7406\u7531\u3002\u884C\u53EA\u80FD\u8FDB\u8FD9\u5F20\u8868\uFF1A\u4E0D\u53E6\u5F00\u5B57\u6BB5\u5B58\u653E\uFF0C\u4E0D\u7559\u300C\u5F85\u5B9A\u300D\uFF1B\u4E00\u5904\u6CA1\u6709\u4E3A\u7A7A\u6570\u7EC4\u3002"
9368
+ })
9369
+ },
9370
+ { additionalProperties: true }
9371
+ )
9372
+ );
9331
9373
  inspectorSubmissionSchema = withTerminatingOutputDeclarations(
9332
9374
  typebox_exports.Object(
9333
9375
  {
@@ -11583,9 +11625,9 @@ var init_role_submission_declarations = __esm({
11583
11625
  SUBMISSION_FACE = {
11584
11626
  judge: {
11585
11627
  label: "\u5927\u7406\u5BFA\u8F93\u51FA",
11586
- description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
11628
+ description: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD\uFF08\u542B\u6240\u5BA1\u5B9E\u73B0\u4E0E\u672C\u5224\u5904\u65B9\u7684\u5B58\u5E9F\u5C3A mechanisms\uFF09\uFF1B\u4EA4\u5377\u8C03\u7528\u7ED3\u675F\u540E\uFF0C\u7531\u516C\u5F00\u8C03\u7528\u63A5\u7F1D\u6309\u5224\u8BCD\u72B6\u6001\u6267\u884C\u9002\u7528\u5BA1\u6838\u3002",
11587
11629
  promptSnippet: "\u63D0\u4EA4\u5927\u7406\u5BFA\u7EC8\u5C40\u5224\u8BCD",
11588
- parameters: reviewSubmissionSchema
11630
+ parameters: judgeSubmissionSchema
11589
11631
  },
11590
11632
  fixer: {
11591
11633
  label: "\u4FEE\u5185\u53F8\u8F93\u51FA",
@@ -11630,9 +11672,9 @@ var init_role_submission_declarations = __esm({
11630
11672
  },
11631
11673
  countersign: {
11632
11674
  label: "\u7ED9\u4E8B\u4E2D\u8F93\u51FA",
11633
- description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\u3002",
11675
+ description: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE\uFF08\u542B\u73B0\u884C\u7968\u9762\u6761\u6B3E\u7684\u5B58\u5E9F\u5C3A existence\uFF09\u3002",
11634
11676
  promptSnippet: "\u7ED9\u4E8B\u4E2D\u51B3\u8BAE",
11635
- parameters: reviewSubmissionSchema
11677
+ parameters: countersignSubmissionSchema
11636
11678
  },
11637
11679
  secretariat: {
11638
11680
  label: "\u4E2D\u4E66\u7701\u8F93\u51FA",
@@ -94,25 +94,26 @@ const mechanismRowBase = {
94
94
  layer: Type.Integer({ description: "从本票起点到 HEAD,这是第几处这样的新增(含前几轮已署过的)" }),
95
95
  };
96
96
  const MECHANISM_FRAMEWORK_RULE = "框架是仓库 ADR 或票面点名的那一个(读写模型、Web、测试等框架),不是席位自选;实现这一层所用的库(ORM、缓存库、解析库)不是框架,它的 API 页或示例填不进这格——那答的是「这层怎么做」,这格问的是「示范不带这层怎么办」";
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([
97
+ const existenceRowUnion = (base, labels, extra = {}) => Type.Union([
99
98
  Type.Object({
100
- ...mechanismRowBase,
99
+ ...base,
101
100
  official: Type.String({
102
101
  description: `这段代码所属应用框架的官方示范里,不带这一层时同一关切怎么处理:先写框架名,再链接+原句(示范里直接读、直接查、交给框架哪项设置)。${MECHANISM_FRAMEWORK_RULE}`,
103
102
  }),
104
- disposition: Type.Literal("删:示范不带这一层也处理得了", { description: "official 填了字,这一行只能是这个处置" }),
103
+ disposition: Type.Literal(labels.without, { description: "official 填了字,这一行只能是这个处置" }),
105
104
  ...extra,
106
105
  }, { additionalProperties: true }),
107
106
  Type.Object({
108
- ...mechanismRowBase,
107
+ ...base,
109
108
  official: Type.Null({
110
- description: `示范代码本身就为同一关切带同样的状态、锁、缓存或依赖:填 null,并在 keeps 末尾写框架名与示范里那一处。${MECHANISM_FRAMEWORK_RULE}`,
109
+ description: `示范代码本身就为同一关切带同样的状态、锁、缓存或依赖:填 null,并在 ${labels.evidenceField} 末尾写框架名与示范里那一处。${MECHANISM_FRAMEWORK_RULE}`,
111
110
  }),
112
- disposition: Type.Literal("留:示范本身就为同一关切带同样的层", { description: "official 为 null,这一行只能是这个处置" }),
111
+ disposition: Type.Literal(labels.carries, { description: "official 为 null,这一行只能是这个处置" }),
113
112
  ...extra,
114
113
  }, { additionalProperties: true }),
115
- ], { description: "两种行形,没有第三种:示范不带这一层也处理得了(official 填字,删);示范本身就带同样的层(official null,留)" });
114
+ ], { description: `两种行形,没有第三种:示范不带这一层也处理得了(official 填字,${labels.without.split(":")[0]});示范本身就带同样的层(official null,${labels.carries.split(":")[0]})` });
115
+ const MECHANISM_LABELS = { without: "删:示范不带这一层也处理得了", carries: "留:示范本身就为同一关切带同样的层", evidenceField: "keeps" };
116
+ const mechanismRowUnion = (extra = {}) => existenceRowUnion(mechanismRowBase, MECHANISM_LABELS, extra);
116
117
  export const mechanismRowSchema = mechanismRowUnion();
117
118
  /** 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
119
  export const auditorMechanismRowSchema = mechanismRowUnion({
@@ -120,6 +121,34 @@ export const auditorMechanismRowSchema = mechanismRowUnion({
120
121
  description: "大理寺判词里裁到这一层的那句原文(照抄);判词没提这一层,填 null",
121
122
  }),
122
123
  });
124
+ /** 存废尺 row for a ticket clause: what the clause makes exist, against the framework's example. */
125
+ const clauseRowBase = {
126
+ clause: Type.String({ description: "现行票面里让某个机制存在的那条条款原文(照抄,不合并、不改写)" }),
127
+ kind: Type.Union([Type.Literal("明写机制:条款自己点名了状态、表、缓存、锁、依赖"), Type.Literal("只写结果:条款只提要求,现状代码满足不了,得长出机制才做得到")], { description: "两类都要列。第二类最容易漏:零重复、跨提交不重读、不建豁免、每 X 只做一次、永不 Y——这种句子没写机制两个字,却只能靠新状态、缓存、失效规则满足;先打开现状代码核一遍它做不做得到,做不到就是这类" }),
128
+ makes: Type.String({ description: "这条条款落实后会让什么东西存在:跨调用保存的状态、缓存、锁、失效规则、预计算、新依赖;写出它的形状。只写结果的条款,写满足它必须长出的那样东西" }),
129
+ };
130
+ const CLAUSE_LABELS = { without: "不要:示范不带这一层也处理得了", carries: "要:示范本身就为同一关切带同样的层", evidenceField: "makes" };
131
+ export const clauseExistenceRowSchema = existenceRowUnion(clauseRowBase, CLAUSE_LABELS);
132
+ /** Countersign generation schema: shared review face plus the 存废尺 over the current ticket's clauses (package records as-is). */
133
+ export const countersignSubmissionSchema = withTerminatingOutputDeclarations(Type.Object({
134
+ status: reviewStatusField,
135
+ ...reviewNarrativeFields,
136
+ existence: Type.Array(clauseExistenceRowSchema, {
137
+ description: "存废尺:现行票面每条让机制存在的条款各一行——明写机制的,和只写结果要求、现状代码满足不了的,两类都算——到 ADR/票面点名的应用框架官方示范里看不带它时同一关切怎么处理。有「不要」行在,不得署,封驳或上呈并点名那条。票面已写、前轮判词要求过、签发方答过、陛下对别的题点过头,都不是「要」的理由;「要」只认示范里带同样的层。一条没有为空数组。",
138
+ }),
139
+ }, { additionalProperties: true }));
140
+ /** Judge row: the mechanism row plus where the layer comes from — the implementation under judgment, or the judge's own prescription. */
141
+ export const judgeMechanismRowSchema = mechanismRowUnion({
142
+ origin: Type.Union([Type.Literal("实现净增:本票起点到所审 HEAD 的生产代码里已有的"), Type.Literal("本判处方:本轮判词的处方或约束落实后会长出的")], { description: "这一层从哪来。处方行的 where 写处方原文而不是 path:line;处方会长出示范不带的层,处方本身就不能开" }),
143
+ });
144
+ /** Judge generation schema: shared review face plus the 存废尺 over everything the verdict rules on (package records as-is). */
145
+ export const judgeSubmissionSchema = withTerminatingOutputDeclarations(Type.Object({
146
+ status: reviewStatusField,
147
+ ...reviewNarrativeFields,
148
+ mechanisms: Type.Array(judgeMechanismRowSchema, {
149
+ description: "存废尺:所审实现从本票起点到 HEAD 生产代码新增的每一处依赖行、跨调用状态、锁、缓存装饰或包装各一行(origin 实现净增),再加本轮判词每条处方或约束落实后会长出的每一层各一行(origin 本判处方)。每行只问一件事:这一关切(读复用、并发、失效……)在 ADR/票面点名的应用框架官方示范里怎么处理——示范不带这一层也处理得了,就是删;不问票面那句要求能不能靠示范满足。票面要求超过示范的,行照填删,那句要求上呈。有「删」行:实现里的,判删或上呈,不得据以署收敛;处方里的,那条处方不能开。票面已写、前轮判词要求过、施工自述、陛下对别的题点过头,都不是「留」的理由。行只能进这张表:不另开字段存放,不留「待定」;一处没有为空数组。",
150
+ }),
151
+ }, { additionalProperties: true }));
123
152
  /** Inspector generation schema: shared review face plus the required whole-ticket complexity answer (package records as-is). */
124
153
  export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(Type.Object({
125
154
  status: reviewStatusField,
@@ -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 { auditorSubmissionSchema, notaryReviewSubmissionSchema, inspectorSubmissionSchema, reviewSubmissionSchema } from "./review-submission.js";
8
+ import { auditorSubmissionSchema, countersignSubmissionSchema, judgeSubmissionSchema, 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";
@@ -20,9 +20,9 @@ import { coderOutputSchema } from "./package-contracts/worker-output.js";
20
20
  const SUBMISSION_FACE = {
21
21
  judge: {
22
22
  label: "大理寺输出",
23
- description: "提交大理寺终局判词;交卷调用结束后,由公开调用接缝按判词状态执行适用审核。",
23
+ description: "提交大理寺终局判词(含所审实现与本判处方的存废尺 mechanisms);交卷调用结束后,由公开调用接缝按判词状态执行适用审核。",
24
24
  promptSnippet: "提交大理寺终局判词",
25
- parameters: reviewSubmissionSchema,
25
+ parameters: judgeSubmissionSchema,
26
26
  },
27
27
  fixer: {
28
28
  label: "修内司输出",
@@ -67,9 +67,9 @@ const SUBMISSION_FACE = {
67
67
  },
68
68
  countersign: {
69
69
  label: "给事中输出",
70
- description: "给事中决议。",
70
+ description: "给事中决议(含现行票面条款的存废尺 existence)。",
71
71
  promptSnippet: "给事中决议",
72
- parameters: reviewSubmissionSchema,
72
+ parameters: countersignSubmissionSchema,
73
73
  },
74
74
  secretariat: {
75
75
  label: "中书省输出",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akagilnc/pi-workflow-roles",
3
- "version": "0.1.6067",
3
+ "version": "0.1.6074",
4
4
  "description": "Soul-bound workflow roles for Pi",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -24,7 +24,7 @@
24
24
 
25
25
  **四、缺失** 法源要求的,票面有没有漏:适用法只查两类:票面与某条 ADR 决定相抵的,和把某条决定留给别的票承接的,票面须写明该条与「由 #x 承接」;这两类之外的 ADR 没引不算缺失,不得为此封驳;验收面须覆盖票面每条主张;票面里每一条行为都须答得出《送庭前三问》第一问:起、停、续、终、接各归谁没写的行为,即缺失;给模型、入口或调用方定了读写范围、却没按《设计法·好设计稿》写明一次给多少的,即缺失,沿用父票或 ADR 的也一样;前置产物、决定、答复须在;承重主张的源头不存在、不支持、已过时,同为缺失。缺失列表在能力范围内一次扫完,尽量避免因缺失导致多轮往返。
26
26
 
27
- **五、擅加** 票面有没有超出法源的机制、约束、验收、术语。票面按类各定一套行为或文案的,就是在要分类机制;陛下没点名要的,上呈,附单一做法。
27
+ **五、擅加** 票面有没有超出法源的机制、约束、验收、术语。票面按类各定一套行为或文案的,就是在要分类机制;陛下没点名要的,上呈,附单一做法。存废尺按条款过:票面每条让机制存在的条款各记一行进 existence——条款自己点名了状态、表、缓存、锁、依赖的是一类;只写结果要求(零重复、跨提交不重读、不建豁免、每 X 只做一次)而现状代码满足不了、得长出机制才做得到的是另一类,先打开现状代码核它做不做得到——到 ADR/票面点名的应用框架官方示范里看不带它时同一关切怎么处理;示范不带也处理得了的,这条不要,不得署。票面已写、前轮判词要求过、签发方答过、陛下对别的题点过头,都不是要它的理由——要,只认示范里本来就带同样的层。
28
28
 
29
29
  各步取证按《审法·取证授权》:工具与方式不受限,读码、开卷、传召、下探针皆可;不得删除、覆写或移动 worktree 与临时目录之外的既存路径(《审法·取证边界》)。交付时候清理回原样
30
30
 
package/souls/judge.md CHANGED
@@ -9,7 +9,7 @@ Judge Soul(大理寺)
9
9
  五、裁断。 主张不是证据。一切 LLM 主张须亲验;当前事实只认当前 head,修复者自述不能替代新 head 上的机械验证与独立复查。机器执行的事实怎么核,见《审法·取证授权》。
10
10
  事实与处方分判:事实成立而处方违法源,保留事实,驳回处方或另开合法处方。 每条问题显式记录和处置,严重度由你裁定,不因级别低而遗漏或暗降;裁决与驳回须锚定法源和证据。依当前一手证据独立双向抽样重推,误删与该删未删同查。
11
11
  测试质量须亲审。取证与同类复核依《审法》;复杂度、测试质量与成本依《质量法》,不另立一套标准。
12
- 删简根因优先。护栏类 finding(防误用、交错、边角的检查或绑定)无真实可复现的失败或历史实例的,按过度防御驳回,不列 P1;票面明写不做的机制,处方不得开(越权加戏)。批准护栏须说明不变式所属接缝及为何删简根因不足。
12
+ 删简根因优先。存废尺按层过:所审实现净增的每一处跨调用状态、锁、缓存、依赖,和你每条处方落实后会长出的每一层,各记一行进 mechanisms。每行只问一件事:这一关切在 ADR/票面点名的应用框架官方示范里怎么处理——示范不带这一层也处理得了,就填删;不问票面那句要求能不能靠示范满足,票面要求超过示范的,行照填删、那句要求上呈。实现里的删行判删或上呈,处方里的删行那条处方不能开;票面已写、前轮判词要求过、施工自述、陛下对别的题点过头,都不是留它的理由。行只进 mechanisms,不另开字段存放、不留待定。护栏类 finding(防误用、交错、边角的检查或绑定)无真实可复现的失败或历史实例的,按过度防御驳回,不列 P1;票面明写不做的机制,处方不得开(越权加戏)。批准护栏须说明不变式所属接缝及为何删简根因不足。
13
13
  区分原缺陷所需改动、修复自身造成的返工、无依据的新机制;后两类主导时优先拆除或简化。同缝反复、根因不明、范围发散、疑跨接缝或 flake,先做最小化、证据驱动的诊断,不继续猜修。一轮轮只加不减,本身就是须上报的问题。
14
14
  判词
15
15
 
@@ -136,36 +136,49 @@ const mechanismRowBase = {
136
136
  const MECHANISM_FRAMEWORK_RULE =
137
137
  "框架是仓库 ADR 或票面点名的那一个(读写模型、Web、测试等框架),不是席位自选;实现这一层所用的库(ORM、缓存库、解析库)不是框架,它的 API 页或示例填不进这格——那答的是「这层怎么做」,这格问的是「示范不带这层怎么办」";
138
138
 
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>> = {}) =>
139
+ /**
140
+ * The two row shapes of the 存废尺 (existence ruler), with any extra per-row fields a seat needs.
141
+ * `base` names the thing (a production line for 台院/大理寺/审刑院, a ticket clause for 中书省/给事中);
142
+ * `labels` are the two dispositions (删/留 for code, 不要/要 for clauses). The coupling is the same everywhere:
143
+ * official filled = the example manages without it; official null = the example carries the same layer.
144
+ */
145
+ type RowFields = Record<string, ReturnType<typeof Type.String> | ReturnType<typeof Type.Integer> | ReturnType<typeof Type.Union>>;
146
+ const existenceRowUnion = (
147
+ base: RowFields,
148
+ labels: { readonly without: string; readonly carries: string; readonly evidenceField: string },
149
+ extra: RowFields = {},
150
+ ) =>
141
151
  Type.Union(
142
152
  [
143
153
  Type.Object(
144
154
  {
145
- ...mechanismRowBase,
155
+ ...base,
146
156
  official: Type.String({
147
157
  description: `这段代码所属应用框架的官方示范里,不带这一层时同一关切怎么处理:先写框架名,再链接+原句(示范里直接读、直接查、交给框架哪项设置)。${MECHANISM_FRAMEWORK_RULE}`,
148
158
  }),
149
- disposition: Type.Literal("删:示范不带这一层也处理得了", { description: "official 填了字,这一行只能是这个处置" }),
159
+ disposition: Type.Literal(labels.without, { description: "official 填了字,这一行只能是这个处置" }),
150
160
  ...extra,
151
161
  },
152
162
  { additionalProperties: true },
153
163
  ),
154
164
  Type.Object(
155
165
  {
156
- ...mechanismRowBase,
166
+ ...base,
157
167
  official: Type.Null({
158
- description: `示范代码本身就为同一关切带同样的状态、锁、缓存或依赖:填 null,并在 keeps 末尾写框架名与示范里那一处。${MECHANISM_FRAMEWORK_RULE}`,
168
+ description: `示范代码本身就为同一关切带同样的状态、锁、缓存或依赖:填 null,并在 ${labels.evidenceField} 末尾写框架名与示范里那一处。${MECHANISM_FRAMEWORK_RULE}`,
159
169
  }),
160
- disposition: Type.Literal("留:示范本身就为同一关切带同样的层", { description: "official 为 null,这一行只能是这个处置" }),
170
+ disposition: Type.Literal(labels.carries, { description: "official 为 null,这一行只能是这个处置" }),
161
171
  ...extra,
162
172
  },
163
173
  { additionalProperties: true },
164
174
  ),
165
175
  ],
166
- { description: "两种行形,没有第三种:示范不带这一层也处理得了(official 填字,删);示范本身就带同样的层(official null,留)" },
176
+ { description: `两种行形,没有第三种:示范不带这一层也处理得了(official 填字,${labels.without.split(":")[0]});示范本身就带同样的层(official null,${labels.carries.split(":")[0]})` },
167
177
  );
168
178
 
179
+ const MECHANISM_LABELS = { without: "删:示范不带这一层也处理得了", carries: "留:示范本身就为同一关切带同样的层", evidenceField: "keeps" } as const;
180
+ const mechanismRowUnion = (extra: RowFields = {}) => existenceRowUnion(mechanismRowBase, MECHANISM_LABELS, extra);
181
+
169
182
  export const mechanismRowSchema = mechanismRowUnion();
170
183
 
171
184
  /** Auditor row: the inspector row plus what the judge's verdict said about this layer, verbatim, or null when the verdict never touched it. */
@@ -175,6 +188,56 @@ export const auditorMechanismRowSchema = mechanismRowUnion({
175
188
  }),
176
189
  });
177
190
 
191
+ /** 存废尺 row for a ticket clause: what the clause makes exist, against the framework's example. */
192
+ const clauseRowBase = {
193
+ clause: Type.String({ description: "现行票面里让某个机制存在的那条条款原文(照抄,不合并、不改写)" }),
194
+ kind: Type.Union(
195
+ [Type.Literal("明写机制:条款自己点名了状态、表、缓存、锁、依赖"), Type.Literal("只写结果:条款只提要求,现状代码满足不了,得长出机制才做得到")],
196
+ { description: "两类都要列。第二类最容易漏:零重复、跨提交不重读、不建豁免、每 X 只做一次、永不 Y——这种句子没写机制两个字,却只能靠新状态、缓存、失效规则满足;先打开现状代码核一遍它做不做得到,做不到就是这类" },
197
+ ),
198
+ makes: Type.String({ description: "这条条款落实后会让什么东西存在:跨调用保存的状态、缓存、锁、失效规则、预计算、新依赖;写出它的形状。只写结果的条款,写满足它必须长出的那样东西" }),
199
+ } as const;
200
+ const CLAUSE_LABELS = { without: "不要:示范不带这一层也处理得了", carries: "要:示范本身就为同一关切带同样的层", evidenceField: "makes" } as const;
201
+ export const clauseExistenceRowSchema = existenceRowUnion(clauseRowBase, CLAUSE_LABELS);
202
+
203
+ /** Countersign generation schema: shared review face plus the 存废尺 over the current ticket's clauses (package records as-is). */
204
+ export const countersignSubmissionSchema = withTerminatingOutputDeclarations(
205
+ Type.Object(
206
+ {
207
+ status: reviewStatusField,
208
+ ...reviewNarrativeFields,
209
+ existence: Type.Array(clauseExistenceRowSchema, {
210
+ description:
211
+ "存废尺:现行票面每条让机制存在的条款各一行——明写机制的,和只写结果要求、现状代码满足不了的,两类都算——到 ADR/票面点名的应用框架官方示范里看不带它时同一关切怎么处理。有「不要」行在,不得署,封驳或上呈并点名那条。票面已写、前轮判词要求过、签发方答过、陛下对别的题点过头,都不是「要」的理由;「要」只认示范里带同样的层。一条没有为空数组。",
212
+ }),
213
+ },
214
+ { additionalProperties: true },
215
+ ),
216
+ );
217
+
218
+ /** Judge row: the mechanism row plus where the layer comes from — the implementation under judgment, or the judge's own prescription. */
219
+ export const judgeMechanismRowSchema = mechanismRowUnion({
220
+ origin: Type.Union(
221
+ [Type.Literal("实现净增:本票起点到所审 HEAD 的生产代码里已有的"), Type.Literal("本判处方:本轮判词的处方或约束落实后会长出的")],
222
+ { description: "这一层从哪来。处方行的 where 写处方原文而不是 path:line;处方会长出示范不带的层,处方本身就不能开" },
223
+ ),
224
+ });
225
+
226
+ /** Judge generation schema: shared review face plus the 存废尺 over everything the verdict rules on (package records as-is). */
227
+ export const judgeSubmissionSchema = withTerminatingOutputDeclarations(
228
+ Type.Object(
229
+ {
230
+ status: reviewStatusField,
231
+ ...reviewNarrativeFields,
232
+ mechanisms: Type.Array(judgeMechanismRowSchema, {
233
+ description:
234
+ "存废尺:所审实现从本票起点到 HEAD 生产代码新增的每一处依赖行、跨调用状态、锁、缓存装饰或包装各一行(origin 实现净增),再加本轮判词每条处方或约束落实后会长出的每一层各一行(origin 本判处方)。每行只问一件事:这一关切(读复用、并发、失效……)在 ADR/票面点名的应用框架官方示范里怎么处理——示范不带这一层也处理得了,就是删;不问票面那句要求能不能靠示范满足。票面要求超过示范的,行照填删,那句要求上呈。有「删」行:实现里的,判删或上呈,不得据以署收敛;处方里的,那条处方不能开。票面已写、前轮判词要求过、施工自述、陛下对别的题点过头,都不是「留」的理由。行只能进这张表:不另开字段存放,不留「待定」;一处没有为空数组。",
235
+ }),
236
+ },
237
+ { additionalProperties: true },
238
+ ),
239
+ );
240
+
178
241
  /** Inspector generation schema: shared review face plus the required whole-ticket complexity answer (package records as-is). */
179
242
  export const inspectorSubmissionSchema = withTerminatingOutputDeclarations(
180
243
  Type.Object(
@@ -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 { auditorSubmissionSchema, notaryReviewSubmissionSchema, inspectorSubmissionSchema, reviewSubmissionSchema } from "./review-submission.ts";
8
+ import { auditorSubmissionSchema, countersignSubmissionSchema, judgeSubmissionSchema, 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";
@@ -32,9 +32,9 @@ type SubmissionFace = Omit<RoleSubmissionDeclaration, "role" | "name">;
32
32
  const SUBMISSION_FACE = {
33
33
  judge: {
34
34
  label: "大理寺输出",
35
- description: "提交大理寺终局判词;交卷调用结束后,由公开调用接缝按判词状态执行适用审核。",
35
+ description: "提交大理寺终局判词(含所审实现与本判处方的存废尺 mechanisms);交卷调用结束后,由公开调用接缝按判词状态执行适用审核。",
36
36
  promptSnippet: "提交大理寺终局判词",
37
- parameters: reviewSubmissionSchema,
37
+ parameters: judgeSubmissionSchema,
38
38
  },
39
39
  fixer: {
40
40
  label: "修内司输出",
@@ -79,9 +79,9 @@ const SUBMISSION_FACE = {
79
79
  },
80
80
  countersign: {
81
81
  label: "给事中输出",
82
- description: "给事中决议。",
82
+ description: "给事中决议(含现行票面条款的存废尺 existence)。",
83
83
  promptSnippet: "给事中决议",
84
- parameters: reviewSubmissionSchema,
84
+ parameters: countersignSubmissionSchema,
85
85
  },
86
86
  secretariat: {
87
87
  label: "中书省输出",