noteconnection 1.6.8 → 1.8.0

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.
Files changed (212) hide show
  1. package/LICENSE +674 -21
  2. package/README.md +258 -64
  3. package/dist/src/agent_workspace.contract.parity.test.js +475 -0
  4. package/dist/src/agent_workspace.frontend.test.js +9989 -0
  5. package/dist/src/agent_workspace.locale.contract.test.js +95 -0
  6. package/dist/src/agent_workspace.runtime.behavior.test.js +5072 -0
  7. package/dist/src/copy.assets.contract.test.js +130 -0
  8. package/dist/src/core/PathBridge.js +28 -3
  9. package/dist/src/export/WorkspaceExportBundle.js +1130 -0
  10. package/dist/src/export/WorkspaceExportBundle.test.js +1480 -0
  11. package/dist/src/export/index.js +18 -0
  12. package/dist/src/export/types.js +2 -0
  13. package/dist/src/fixrisk.issue.verifier.contract.test.js +3 -1
  14. package/dist/src/foundation.ann.runtime.contract.test.js +81 -0
  15. package/dist/src/foundation.release.evidence.contract.test.js +406 -0
  16. package/dist/src/foundation.sqlite.runtime.contract.test.js +82 -0
  17. package/dist/src/frontend/README.md +258 -64
  18. package/dist/src/frontend/agent_workspace.js +5353 -0
  19. package/dist/src/frontend/agent_workspace_runtime.js +4434 -0
  20. package/dist/src/frontend/analysis.js +31 -4
  21. package/dist/src/frontend/app.js +3597 -141
  22. package/dist/src/frontend/focus_mode_interactions.js +33 -0
  23. package/dist/src/frontend/godot_future_path_renderer.js +540 -0
  24. package/dist/src/frontend/godot_tree_interactions.js +178 -0
  25. package/dist/src/frontend/graph_state.mjs +105 -0
  26. package/dist/src/frontend/hosted_future_path_runtime.js +157 -0
  27. package/dist/src/frontend/i18n.mjs +186 -0
  28. package/dist/src/frontend/index.html +641 -266
  29. package/dist/src/frontend/layout_gpu.js +12 -4
  30. package/dist/src/frontend/locales/en.json +721 -5
  31. package/dist/src/frontend/locales/zh.json +721 -5
  32. package/dist/src/frontend/main.mjs +60 -0
  33. package/dist/src/frontend/markdown_runtime.js +827 -0
  34. package/dist/src/frontend/notemd.css +49 -0
  35. package/dist/src/frontend/notemd.html +7 -1
  36. package/dist/src/frontend/notemd.js +64 -0
  37. package/dist/src/frontend/path.html +107 -0
  38. package/dist/src/frontend/path_app.js +2189 -150
  39. package/dist/src/frontend/path_layout.mjs +143 -0
  40. package/dist/src/frontend/path_mermaid_utils.mjs +108 -0
  41. package/dist/src/frontend/path_modules_bridge.js +486 -0
  42. package/dist/src/frontend/path_state.mjs +118 -0
  43. package/dist/src/frontend/path_styles.css +146 -0
  44. package/dist/src/frontend/path_worker_bridge.mjs +85 -0
  45. package/dist/src/frontend/reader.js +522 -27
  46. package/dist/src/frontend/runtime_bridge.js +67 -54
  47. package/dist/src/frontend/runtime_bridge.mjs +279 -0
  48. package/dist/src/frontend/settings.js +130 -12
  49. package/dist/src/frontend/simulationWorker.js +241 -6
  50. package/dist/src/frontend/source_manager.js +190 -21
  51. package/dist/src/frontend/styles.css +2853 -72
  52. package/dist/src/frontend/workbench_state.mjs +101 -0
  53. package/dist/src/frontend/workspace_panes.js +10168 -0
  54. package/dist/src/frontend.locale.contract.test.js +62 -0
  55. package/dist/src/godot.sidecar.bootstrap.contract.test.js +244 -0
  56. package/dist/src/indexing/IndexLifecycle.js +195 -0
  57. package/dist/src/indexing/IndexLifecycle.test.js +49 -0
  58. package/dist/src/indexing/SegmentBuilder.js +64 -0
  59. package/dist/src/indexing/UnitBuilder.js +48 -0
  60. package/dist/src/indexing/types.js +2 -0
  61. package/dist/src/knowledge.api.contract.test.js +170 -0
  62. package/dist/src/learning/KnowledgeLearningPlatform.js +10386 -0
  63. package/dist/src/learning/KnowledgeLearningPlatform.persistence.test.js +327 -0
  64. package/dist/src/learning/KnowledgeLearningPlatform.program-f.test.js +99 -0
  65. package/dist/src/learning/KnowledgeLearningPlatform.test.js +2971 -0
  66. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.js +2974 -0
  67. package/dist/src/learning/KnowledgeWorkspaceConversationRegression.test.js +3928 -0
  68. package/dist/src/learning/answerReleaseReview.js +4319 -0
  69. package/dist/src/learning/answerReleaseReview.test.js +2888 -0
  70. package/dist/src/learning/api.js +2 -0
  71. package/dist/src/learning/conversationComposer.js +1480 -0
  72. package/dist/src/learning/conversationComposer.test.js +1817 -0
  73. package/dist/src/learning/domains/ConversationManager.js +53 -0
  74. package/dist/src/learning/domains/KnowledgeIngestor.js +238 -0
  75. package/dist/src/learning/domains/KnowledgeQuerier.js +187 -0
  76. package/dist/src/learning/domains/MasteryEngine.js +387 -0
  77. package/dist/src/learning/domains/MemoryPolicyManager.js +408 -0
  78. package/dist/src/learning/domains/QualityEvaluator.js +307 -0
  79. package/dist/src/learning/domains/TutorRouter.js +313 -0
  80. package/dist/src/learning/domains/index.js +33 -0
  81. package/dist/src/learning/domains/types.js +7 -0
  82. package/dist/src/learning/errors.js +29 -0
  83. package/dist/src/learning/evidenceContextAssembler.js +1176 -0
  84. package/dist/src/learning/evidenceContextAssembler.test.js +6332 -0
  85. package/dist/src/learning/graphContextAssembler.js +870 -0
  86. package/dist/src/learning/graphContextAssembler.test.js +1033 -0
  87. package/dist/src/learning/index.js +28 -0
  88. package/dist/src/learning/queryBackend.js +1898 -0
  89. package/dist/src/learning/queryBackend.test.js +955 -0
  90. package/dist/src/learning/ragContextPack.js +257 -0
  91. package/dist/src/learning/ragContextPack.test.js +160 -0
  92. package/dist/src/learning/ragPublicText.js +38 -0
  93. package/dist/src/learning/ragSufficiencyJudge.js +161 -0
  94. package/dist/src/learning/ragSufficiencyJudge.test.js +177 -0
  95. package/dist/src/learning/ragSufficiencyProviderJudge.js +227 -0
  96. package/dist/src/learning/ragSufficiencyProviderJudge.test.js +156 -0
  97. package/dist/src/learning/requestNormalization.js +198 -0
  98. package/dist/src/learning/runtimeCapability.js +4677 -0
  99. package/dist/src/learning/runtimeCapability.test.js +3635 -0
  100. package/dist/src/learning/store.js +1240 -0
  101. package/dist/src/learning/store.test.js +1126 -0
  102. package/dist/src/learning/tutorAdapter.js +2 -0
  103. package/dist/src/learning/types.js +2 -0
  104. package/dist/src/learning/vectorAccelerationAdapter.js +942 -0
  105. package/dist/src/learning/vectorAccelerationAdapter.test.js +382 -0
  106. package/dist/src/lfs.asset.policy.contract.test.js +153 -0
  107. package/dist/src/license.policy.contract.test.js +66 -0
  108. package/dist/src/memory/MemoryGovernance.js +74 -0
  109. package/dist/src/memory/MemoryGovernance.test.js +46 -0
  110. package/dist/src/memory/types.js +2 -0
  111. package/dist/src/mermaid.frontend.guard.contract.test.js +77 -0
  112. package/dist/src/middleware/auth.js +17 -0
  113. package/dist/src/middleware/body-parser.js +45 -0
  114. package/dist/src/middleware/cors.js +44 -0
  115. package/dist/src/middleware/index.js +21 -0
  116. package/dist/src/middleware/request-trace.js +96 -0
  117. package/dist/src/notemd/AppConfigToml.js +6 -4
  118. package/dist/src/notemd/MermaidProcessor.js +400 -50
  119. package/dist/src/notemd/NotemdService.js +498 -13
  120. package/dist/src/notemd/PromptManager.js +15 -0
  121. package/dist/src/notemd/cli/commands.js +357 -0
  122. package/dist/src/notemd/cli/dispatcher.js +225 -0
  123. package/dist/src/notemd/cli/index.js +169 -0
  124. package/dist/src/notemd/cli/parser.js +68 -0
  125. package/dist/src/notemd/cli/types.js +2 -0
  126. package/dist/src/notemd/constants.js +43 -0
  127. package/dist/src/notemd/diagram/diagramGenerationService.js +78 -0
  128. package/dist/src/notemd/diagram/diagramSpec.js +79 -0
  129. package/dist/src/notemd/diagram/diagramSpecResponseParser.js +131 -0
  130. package/dist/src/notemd/diagram/intent.js +95 -0
  131. package/dist/src/notemd/diagram/planner.js +71 -0
  132. package/dist/src/notemd/diagram/prompts/diagramSpecPrompt.js +42 -0
  133. package/dist/src/notemd/diagram/types.js +18 -0
  134. package/dist/src/notemd/index.js +26 -0
  135. package/dist/src/notemd/operations/capabilityManifest.js +23 -0
  136. package/dist/src/notemd/operations/cliContracts.js +17 -0
  137. package/dist/src/notemd/operations/configProfileCommands.js +85 -0
  138. package/dist/src/notemd/operations/registry.contract.test.js +95 -0
  139. package/dist/src/notemd/operations/registry.js +991 -0
  140. package/dist/src/notemd/operations/types.js +2 -0
  141. package/dist/src/notemd/providerDiagnostics.js +220 -0
  142. package/dist/src/notemd/providerProfiles.js +42 -0
  143. package/dist/src/notemd/providerTemplates.js +231 -0
  144. package/dist/src/notemd/search/DuckDuckGoProvider.js +39 -0
  145. package/dist/src/notemd/search/SearchManager.js +13 -0
  146. package/dist/src/notemd/search/SearchProvider.js +2 -0
  147. package/dist/src/notemd/search/TavilyProvider.js +44 -0
  148. package/dist/src/notemd.agent.manifest.test.js +85 -0
  149. package/dist/src/notemd.api.contract.test.js +14 -1
  150. package/dist/src/notemd.app_config_toml.test.js +2 -1
  151. package/dist/src/notemd.batch.workflow.test.js +117 -0
  152. package/dist/src/notemd.cli.e2e.test.js +136 -0
  153. package/dist/src/notemd.core.test.js +51 -0
  154. package/dist/src/notemd.diagram.pipeline.test.js +233 -0
  155. package/dist/src/notemd.providerTemplates.test.js +34 -0
  156. package/dist/src/notemd.server.integration.test.js +143 -35
  157. package/dist/src/notemd.workflow.pipeline.test.js +162 -0
  158. package/dist/src/pathbridge.handshake.contract.test.js +16 -2
  159. package/dist/src/pathmode.background.contract.test.js +69 -0
  160. package/dist/src/pathmode.settings.api.contract.test.js +9 -0
  161. package/dist/src/pkg.sidecar.contract.test.js +9 -3
  162. package/dist/src/platform/ExportProfile.js +58 -0
  163. package/dist/src/platform/PlatformCapabilities.js +45 -0
  164. package/dist/src/platform/PlatformCapabilities.test.js +30 -0
  165. package/dist/src/platform/RenderMaterializer.js +33 -0
  166. package/dist/src/platform/RenderMaterializer.test.js +32 -0
  167. package/dist/src/query_backend.external_http.integration.test.js +410 -0
  168. package/dist/src/reader_renderer.js +404 -3
  169. package/dist/src/reader_renderer.test.js +87 -0
  170. package/dist/src/release.godot.mirror.contract.test.js +73 -0
  171. package/dist/src/resources/ResourceRegistry.js +223 -0
  172. package/dist/src/resources/ResourceRegistry.test.js +61 -0
  173. package/dist/src/resources/types.js +2 -0
  174. package/dist/src/routes/agentWorkspaceDiagnostics.js +173 -0
  175. package/dist/src/routes/data.js +267 -0
  176. package/dist/src/routes/diagnostics.js +51 -0
  177. package/dist/src/routes/index.js +23 -0
  178. package/dist/src/routes/knowledge.js +968 -0
  179. package/dist/src/routes/markdown.js +287 -0
  180. package/dist/src/routes/notemd.js +565 -0
  181. package/dist/src/routes/registry.contract.test.js +130 -0
  182. package/dist/src/routes/render.js +285 -0
  183. package/dist/src/routes/runtimeRunbookRouteOps.js +149 -0
  184. package/dist/src/routes/runtimeRunbookRouteOps.test.js +194 -0
  185. package/dist/src/routes/settings.js +6 -0
  186. package/dist/src/routes/staticFiles.js +94 -0
  187. package/dist/src/routes/types.js +2 -0
  188. package/dist/src/runtime.transport.adapter.contract.test.js +81 -0
  189. package/dist/src/server.js +11090 -1549
  190. package/dist/src/server.migration.test.js +193 -21
  191. package/dist/src/server.port.fallback.contract.test.js +63 -0
  192. package/dist/src/session/SessionStateStore.js +81 -0
  193. package/dist/src/session/SessionStateStore.test.js +58 -0
  194. package/dist/src/session/types.js +2 -0
  195. package/dist/src/settings.runtime.contract.test.js +50 -0
  196. package/dist/src/shared/types.contract.test.js +107 -0
  197. package/dist/src/shared/types.js +22 -0
  198. package/dist/src/sidecar.replacement.boundary.contract.test.js +128 -0
  199. package/dist/src/sidecar.supply.readiness.contract.test.js +144 -0
  200. package/dist/src/source_manager.loadflow.test.js +46 -0
  201. package/dist/src/startup.layout.snapshot.contract.test.js +57 -0
  202. package/dist/src/tauri.frontend.build.contract.test.js +60 -0
  203. package/dist/src/tauri.sidecar.cleanup.contract.test.js +21 -0
  204. package/dist/src/utils/RuntimePaths.js +4 -13
  205. package/dist/src/utils/platform.js +153 -0
  206. package/dist/src/workflows/WorkflowArtifactStore.js +96 -0
  207. package/dist/src/workflows/WorkflowArtifactStore.test.js +80 -0
  208. package/dist/src/workflows/types.js +2 -0
  209. package/dist/src/workspace/WorkspaceRegistry.js +122 -0
  210. package/dist/src/workspace/WorkspaceRegistry.test.js +29 -0
  211. package/dist/src/workspace/types.js +2 -0
  212. package/package.json +61 -10
@@ -0,0 +1,3928 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const KnowledgeLearningPlatform_1 = require("./KnowledgeLearningPlatform");
39
+ const KnowledgeWorkspaceConversationRegression_1 = require("./KnowledgeWorkspaceConversationRegression");
40
+ const store_1 = require("./store");
41
+ function deriveScopedConversationRequest(caseEntry) {
42
+ const activeTarget = String(caseEntry.activeTarget || '').trim();
43
+ return {
44
+ userId: `regression_user_${caseEntry.id}`,
45
+ sessionId: `regression_session_${caseEntry.id}`,
46
+ message: caseEntry.query,
47
+ persistMemory: false,
48
+ topK: Number.isInteger(caseEntry.topK) && Number(caseEntry.topK) > 0
49
+ ? Number(caseEntry.topK)
50
+ : 8,
51
+ scope: {
52
+ workspaceId: activeTarget.toLowerCase(),
53
+ corpusId: activeTarget.toLowerCase(),
54
+ sourcePathPrefixes: [`Knowledge_Base/${activeTarget}`],
55
+ },
56
+ };
57
+ }
58
+ function buildContextBudgetProbeContent() {
59
+ const longBudgetParagraph = [
60
+ 'Context budget probe evidence defines bounded context assembly as a RAG practice that reads the full source document for provenance and section routing, while only selected fragments enter the model-visible context pack.',
61
+ 'The source-reading boundary is intentionally wider than the answer prompt boundary, because source inspection may need headings, local paragraphs, terminal qualifiers, and graph-linked evidence before the pack budget chooses what the model can see.',
62
+ 'The context pack must record budget decisions such as fragment_included, fragment_truncated, and fragment_dropped so runtime probes can distinguish complete source access from unbounded prompt growth.',
63
+ 'A robust answer should use the direct hit, parent section context, and available graph-neighbor evidence, but it should not paste the entire source note into the user-facing response.',
64
+ ].join(' ');
65
+ return [
66
+ '# Context Budget Probe',
67
+ 'Context budget probe is a runtime fixture for validating full-document source reading with a bounded model-visible RAG context pack.',
68
+ '',
69
+ '## Bounded Context Assembly',
70
+ longBudgetParagraph.repeat(5),
71
+ '',
72
+ 'Terminal qualifier: this fixture is scoped to budget verification and should not be treated as a general product explanation.',
73
+ ].join('\n');
74
+ }
75
+ function buildOverflowBudgetProbeContent() {
76
+ const sections = Array.from({ length: 18 }, (_entry, index) => {
77
+ const segmentNumber = String(index + 1).padStart(2, '0');
78
+ return [
79
+ `## Overflow Budget Probe Segment ${segmentNumber}`,
80
+ [
81
+ `Overflow budget probe segment ${segmentNumber} records a distinct scoped evidence fragment for testing max-fragment pressure.`,
82
+ 'Overflow budget probe answers must remain deterministic when no LLM provider is configured.',
83
+ 'The RAG context pack should keep direct support first, then include only as much parent context as the budget allows.',
84
+ `Segment ${segmentNumber} is intentionally concise so the probe stresses fragment count rather than per-fragment truncation.`,
85
+ ].join(' '),
86
+ ].join('\n');
87
+ });
88
+ return [
89
+ '# Overflow Budget Probe',
90
+ 'Overflow budget probe validates deterministic no-provider RAG fallback under dense same-document evidence.',
91
+ '',
92
+ ...sections,
93
+ ].join('\n\n');
94
+ }
95
+ function buildCausalAnswerProfileProbeContent() {
96
+ return [
97
+ '# Causal Answer Profile Probe',
98
+ 'Causal answer profile probe explains why graph-backed RAG answers need bounded causal evidence instead of a single definition sentence.',
99
+ '',
100
+ '## Mechanism',
101
+ 'The direct cause is that a why question asks for mechanism evidence, not only a label.',
102
+ '',
103
+ 'The mechanism layer keeps the direct cause, the source boundary, and the downstream implication available before the bounded RAG pack chooses visible fragments.',
104
+ '',
105
+ '## Downstream Evidence',
106
+ 'The downstream implication is that graph-neighbor evidence can clarify consequences while the public answer still remains one bounded message.',
107
+ ].join('\n');
108
+ }
109
+ function buildRegressionDocuments() {
110
+ return [
111
+ {
112
+ documentId: 'doc_financial_liquidity',
113
+ sourcePath: 'Knowledge_Base/financial/liquidity.md',
114
+ language: 'en',
115
+ workspaceId: 'financial',
116
+ corpusId: 'financial',
117
+ content: '# Liquidity\nLiquidity analysis explains cash conversion and working capital timing.',
118
+ },
119
+ {
120
+ documentId: 'doc_financial_glass_steagall',
121
+ sourcePath: 'Knowledge_Base/financial/glass steagall act.md',
122
+ language: 'en',
123
+ workspaceId: 'financial',
124
+ corpusId: 'financial',
125
+ content: '# Glass-Steagall Act\nThe Glass-Steagall Act separated commercial and investment banking activities.',
126
+ },
127
+ {
128
+ documentId: 'doc_financial_watered_stock',
129
+ sourcePath: 'Knowledge_Base/financial/watered stock.md',
130
+ language: 'en',
131
+ workspaceId: 'financial',
132
+ corpusId: 'financial',
133
+ content: '# Watered Stock\nWatered stock refers to shares issued at a value greater than the assets that back them.',
134
+ },
135
+ {
136
+ documentId: 'doc_water_glass_runtime',
137
+ sourcePath: 'Knowledge_Base/waterglass/water glass.md',
138
+ language: 'zh',
139
+ workspaceId: 'waterglass',
140
+ corpusId: 'waterglass',
141
+ content: [
142
+ '# 水杯 (water glass)',
143
+ '水杯 (water glass) 是一个用于盛水的透明容器。',
144
+ '',
145
+ '## Material role',
146
+ 'The water glass body provides a boundary between the liquid and the environment.',
147
+ '',
148
+ '## Container material comparison',
149
+ 'A water glass uses soda-lime glass, so it is transparent, stiff, brittle, and chemically inert.',
150
+ 'A plastic cup uses PET plastic, so it is lightweight, ductile, less stiff, and more insulating.',
151
+ 'Compared with a plastic cup, a water glass gives better optical transparency and rigidity, while the plastic cup reduces fracture risk.',
152
+ ].join('\n'),
153
+ },
154
+ {
155
+ documentId: 'doc_conflicting_adjacent_evidence_probe',
156
+ sourcePath: 'Knowledge_Base/ragconflict/calibration tolerance conflict probe.md',
157
+ language: 'en',
158
+ workspaceId: 'ragconflict',
159
+ corpusId: 'ragconflict',
160
+ content: [
161
+ '# The Calibration Tolerance Conflict Probe',
162
+ 'Calibration tolerance conflict probe validates that adjacent contradictory source facts are not flattened into a stable value.',
163
+ '',
164
+ '## Tolerance Statements',
165
+ 'The calibration tolerance is +/-0.10 mm in the nominal bench procedure.',
166
+ 'The calibration tolerance is +/-0.50 mm in the field override note.',
167
+ 'Operators must resolve the active procedure before publishing a tolerance value.',
168
+ ].join('\n'),
169
+ },
170
+ {
171
+ documentId: 'doc_conflicting_nonadjacent_evidence_probe',
172
+ sourcePath: 'Knowledge_Base/ragconflict/remote calibration tolerance conflict probe.md',
173
+ language: 'en',
174
+ workspaceId: 'ragconflict',
175
+ corpusId: 'ragconflict',
176
+ content: [
177
+ '# Remote Calibration Tolerance Conflict Probe',
178
+ 'Remote calibration tolerance conflict probe validates that non-adjacent contradictory source facts inside one section are not flattened into a stable value.',
179
+ '',
180
+ '## Tolerance Statements',
181
+ 'The calibration tolerance is +/-0.10 mm in the nominal bench procedure.',
182
+ '',
183
+ 'Context paragraph one keeps the source section long enough to exceed the local window.',
184
+ '',
185
+ 'Context paragraph two keeps the source section long enough to exceed the local window.',
186
+ '',
187
+ 'Context paragraph three keeps the source section long enough to exceed the local window.',
188
+ '',
189
+ 'Context paragraph four keeps the source section long enough to exceed the local window.',
190
+ '',
191
+ 'Context paragraph five keeps the source section long enough to exceed the local window.',
192
+ '',
193
+ 'Context paragraph six keeps the source section long enough to exceed the local window.',
194
+ '',
195
+ 'Context paragraph seven keeps the source section long enough to exceed the local window.',
196
+ '',
197
+ 'The calibration tolerance is +/-0.50 mm in the field override note.',
198
+ 'Operators must resolve the active procedure before publishing a tolerance value.',
199
+ ].join('\n'),
200
+ },
201
+ {
202
+ documentId: 'doc_conflicting_release_date_probe',
203
+ sourcePath: 'Knowledge_Base/ragdateconflict/release date conflict probe.md',
204
+ language: 'en',
205
+ workspaceId: 'ragdateconflict',
206
+ corpusId: 'ragdateconflict',
207
+ content: [
208
+ '# Release Date Conflict Probe',
209
+ 'Release date conflict probe validates that date contradictions inside one section are not flattened into a stable schedule.',
210
+ '',
211
+ '## Release Schedule',
212
+ 'The migration release date is 2026-07-01.',
213
+ '',
214
+ 'Context paragraph one keeps the release schedule section beyond the local window.',
215
+ '',
216
+ 'Context paragraph two keeps the release schedule section beyond the local window.',
217
+ '',
218
+ 'Context paragraph three keeps the release schedule section beyond the local window.',
219
+ '',
220
+ 'Context paragraph four keeps the release schedule section beyond the local window.',
221
+ '',
222
+ 'Context paragraph five keeps the release schedule section beyond the local window.',
223
+ '',
224
+ 'Context paragraph six keeps the release schedule section beyond the local window.',
225
+ '',
226
+ 'The migration release date is 2026-08-15.',
227
+ 'Operators must resolve the active release record before publishing the schedule.',
228
+ ].join('\n'),
229
+ },
230
+ {
231
+ documentId: 'doc_nominal_date_full_scan_source',
232
+ sourcePath: 'Knowledge_Base/ragdatefullscan/nominal date full scan source.md',
233
+ language: 'en',
234
+ workspaceId: 'ragdatefullscan',
235
+ corpusId: 'ragdatefullscan',
236
+ content: [
237
+ '# Nominal Date Full Scan Source',
238
+ 'Nominal date full scan source is the scoped comparison document for full-document release-date augmentation.',
239
+ '',
240
+ 'This opening section is intentionally separate from the remote release-date statement.',
241
+ '',
242
+ 'Local date filler paragraph one keeps the remote appendix away from the matched opening span.',
243
+ '',
244
+ 'Local date filler paragraph two keeps the remote appendix away from the matched opening span.',
245
+ '',
246
+ 'Local date filler paragraph three keeps the remote appendix away from the matched opening span.',
247
+ '',
248
+ 'Local date filler paragraph four keeps the remote appendix away from the matched opening span.',
249
+ '',
250
+ 'Local date filler paragraph five keeps the remote appendix away from the matched opening span.',
251
+ '',
252
+ 'Local date filler paragraph six keeps the remote appendix away from the matched opening span.',
253
+ '',
254
+ '## Remote Nominal Date Appendix',
255
+ 'The migration release date is 2026-07-01 in the remote nominal date appendix.',
256
+ ].join('\n'),
257
+ },
258
+ {
259
+ documentId: 'doc_field_date_full_scan_source',
260
+ sourcePath: 'Knowledge_Base/ragdatefullscan/field date full scan source.md',
261
+ language: 'en',
262
+ workspaceId: 'ragdatefullscan',
263
+ corpusId: 'ragdatefullscan',
264
+ content: [
265
+ '# Field Date Full Scan Source',
266
+ 'Field date full scan source is the scoped comparison document for full-document release-date augmentation.',
267
+ '',
268
+ 'This opening section is intentionally separate from the remote release-date statement.',
269
+ '',
270
+ 'Local date filler paragraph one keeps the remote appendix away from the matched opening span.',
271
+ '',
272
+ 'Local date filler paragraph two keeps the remote appendix away from the matched opening span.',
273
+ '',
274
+ 'Local date filler paragraph three keeps the remote appendix away from the matched opening span.',
275
+ '',
276
+ 'Local date filler paragraph four keeps the remote appendix away from the matched opening span.',
277
+ '',
278
+ 'Local date filler paragraph five keeps the remote appendix away from the matched opening span.',
279
+ '',
280
+ 'Local date filler paragraph six keeps the remote appendix away from the matched opening span.',
281
+ '',
282
+ '## Remote Field Date Appendix',
283
+ 'The migration release date is 2026-08-15 in the remote field date appendix.',
284
+ ].join('\n'),
285
+ },
286
+ {
287
+ documentId: 'doc_conflicting_state_status_probe',
288
+ sourcePath: 'Knowledge_Base/ragstateconflict/state status conflict probe.md',
289
+ language: 'en',
290
+ workspaceId: 'ragstateconflict',
291
+ corpusId: 'ragstateconflict',
292
+ content: [
293
+ '# State Status Conflict Probe',
294
+ 'State status conflict probe validates that categorical state contradictions are not flattened into one stable status.',
295
+ '',
296
+ '## Gate Status',
297
+ 'The migration gate status is enabled in the release checklist.',
298
+ '',
299
+ 'Context paragraph keeps the categorical state conflict inside one scoped section.',
300
+ '',
301
+ 'The migration gate status is disabled in the rollback appendix.',
302
+ 'Operators must resolve which status record is active before release.',
303
+ ].join('\n'),
304
+ },
305
+ {
306
+ documentId: 'doc_nominal_state_full_scan_source',
307
+ sourcePath: 'Knowledge_Base/ragstatefullscan/nominal state full scan source.md',
308
+ language: 'en',
309
+ workspaceId: 'ragstatefullscan',
310
+ corpusId: 'ragstatefullscan',
311
+ content: [
312
+ '# Nominal State Full Scan Source',
313
+ 'Nominal state full scan source is the scoped comparison document for full-document state augmentation.',
314
+ '',
315
+ 'This opening section is intentionally separate from the remote state statement.',
316
+ '',
317
+ 'Local state filler paragraph one keeps the remote appendix away from the matched opening span.',
318
+ '',
319
+ 'Local state filler paragraph two keeps the remote appendix away from the matched opening span.',
320
+ '',
321
+ 'Local state filler paragraph three keeps the remote appendix away from the matched opening span.',
322
+ '',
323
+ 'Local state filler paragraph four keeps the remote appendix away from the matched opening span.',
324
+ '',
325
+ 'Local state filler paragraph five keeps the remote appendix away from the matched opening span.',
326
+ '',
327
+ 'Local state filler paragraph six keeps the remote appendix away from the matched opening span.',
328
+ '',
329
+ '## Remote Nominal State Appendix',
330
+ 'The migration gate status is enabled in the remote nominal state appendix.',
331
+ ].join('\n'),
332
+ },
333
+ {
334
+ documentId: 'doc_field_state_full_scan_source',
335
+ sourcePath: 'Knowledge_Base/ragstatefullscan/field state full scan source.md',
336
+ language: 'en',
337
+ workspaceId: 'ragstatefullscan',
338
+ corpusId: 'ragstatefullscan',
339
+ content: [
340
+ '# Field State Full Scan Source',
341
+ 'Field state full scan source is the scoped comparison document for full-document state augmentation.',
342
+ '',
343
+ 'This opening section is intentionally separate from the remote state statement.',
344
+ '',
345
+ 'Local state filler paragraph one keeps the remote appendix away from the matched opening span.',
346
+ '',
347
+ 'Local state filler paragraph two keeps the remote appendix away from the matched opening span.',
348
+ '',
349
+ 'Local state filler paragraph three keeps the remote appendix away from the matched opening span.',
350
+ '',
351
+ 'Local state filler paragraph four keeps the remote appendix away from the matched opening span.',
352
+ '',
353
+ 'Local state filler paragraph five keeps the remote appendix away from the matched opening span.',
354
+ '',
355
+ 'Local state filler paragraph six keeps the remote appendix away from the matched opening span.',
356
+ '',
357
+ '## Remote Field State Appendix',
358
+ 'The migration gate status is disabled in the remote field state appendix.',
359
+ ].join('\n'),
360
+ },
361
+ {
362
+ documentId: 'doc_conflicting_quantity_limit_probe',
363
+ sourcePath: 'Knowledge_Base/ragquantityconflict/quantity limit conflict probe.md',
364
+ language: 'en',
365
+ workspaceId: 'ragquantityconflict',
366
+ corpusId: 'ragquantityconflict',
367
+ content: [
368
+ '# Quantity Limit Conflict Probe',
369
+ 'Quantity limit conflict probe validates that unitless operational limits are not flattened into one stable value.',
370
+ '',
371
+ '## Retry Limit',
372
+ 'The retry limit is 3 in the release checklist.',
373
+ '',
374
+ 'Context paragraph keeps the retry limit conflict inside one scoped section.',
375
+ '',
376
+ 'The retry limit is 5 in the rollback appendix.',
377
+ 'Operators must resolve which retry limit is active before release.',
378
+ ].join('\n'),
379
+ },
380
+ {
381
+ documentId: 'doc_nominal_quantity_full_scan_source',
382
+ sourcePath: 'Knowledge_Base/ragquantityfullscan/nominal quantity full scan source.md',
383
+ language: 'en',
384
+ workspaceId: 'ragquantityfullscan',
385
+ corpusId: 'ragquantityfullscan',
386
+ content: [
387
+ '# Nominal Quantity Full Scan Source',
388
+ 'Nominal quantity full scan source is the scoped comparison document for full-document quantity augmentation.',
389
+ '',
390
+ 'This opening section is intentionally separate from the remote quantity statement.',
391
+ '',
392
+ 'Local quantity filler paragraph one keeps the remote appendix away from the matched opening span.',
393
+ '',
394
+ 'Local quantity filler paragraph two keeps the remote appendix away from the matched opening span.',
395
+ '',
396
+ 'Local quantity filler paragraph three keeps the remote appendix away from the matched opening span.',
397
+ '',
398
+ 'Local quantity filler paragraph four keeps the remote appendix away from the matched opening span.',
399
+ '',
400
+ 'Local quantity filler paragraph five keeps the remote appendix away from the matched opening span.',
401
+ '',
402
+ 'Local quantity filler paragraph six keeps the remote appendix away from the matched opening span.',
403
+ '',
404
+ '## Remote Nominal Quantity Appendix',
405
+ 'The retry limit is 3 in the remote nominal quantity appendix.',
406
+ ].join('\n'),
407
+ },
408
+ {
409
+ documentId: 'doc_field_quantity_full_scan_source',
410
+ sourcePath: 'Knowledge_Base/ragquantityfullscan/field quantity full scan source.md',
411
+ language: 'en',
412
+ workspaceId: 'ragquantityfullscan',
413
+ corpusId: 'ragquantityfullscan',
414
+ content: [
415
+ '# Field Quantity Full Scan Source',
416
+ 'Field quantity full scan source is the scoped comparison document for full-document quantity augmentation.',
417
+ '',
418
+ 'This opening section is intentionally separate from the remote quantity statement.',
419
+ '',
420
+ 'Local quantity filler paragraph one keeps the remote appendix away from the matched opening span.',
421
+ '',
422
+ 'Local quantity filler paragraph two keeps the remote appendix away from the matched opening span.',
423
+ '',
424
+ 'Local quantity filler paragraph three keeps the remote appendix away from the matched opening span.',
425
+ '',
426
+ 'Local quantity filler paragraph four keeps the remote appendix away from the matched opening span.',
427
+ '',
428
+ 'Local quantity filler paragraph five keeps the remote appendix away from the matched opening span.',
429
+ '',
430
+ 'Local quantity filler paragraph six keeps the remote appendix away from the matched opening span.',
431
+ '',
432
+ '## Remote Field Quantity Appendix',
433
+ 'The retry limit is 5 in the remote field quantity appendix.',
434
+ ].join('\n'),
435
+ },
436
+ {
437
+ documentId: 'doc_conflicting_ownership_identity_probe',
438
+ sourcePath: 'Knowledge_Base/ragidentityconflict/ownership conflict probe.md',
439
+ language: 'en',
440
+ workspaceId: 'ragidentityconflict',
441
+ corpusId: 'ragidentityconflict',
442
+ content: [
443
+ '# Ownership Conflict Probe',
444
+ 'Ownership conflict probe validates that controlled responsibility records are not flattened into one stable owner.',
445
+ '',
446
+ '## Deployment Ownership',
447
+ 'The deployment owner is Release Ops in the handoff sheet.',
448
+ '',
449
+ 'Context paragraph keeps the ownership conflict inside one scoped section.',
450
+ '',
451
+ 'The deployment owner is Rollback Team in the rollback appendix.',
452
+ 'Operators must resolve which deployment owner is active before release.',
453
+ ].join('\n'),
454
+ },
455
+ {
456
+ documentId: 'doc_nominal_owner_full_scan_source',
457
+ sourcePath: 'Knowledge_Base/ragidentityfullscan/nominal owner full scan source.md',
458
+ language: 'en',
459
+ workspaceId: 'ragidentityfullscan',
460
+ corpusId: 'ragidentityfullscan',
461
+ content: [
462
+ '# Nominal Owner Full Scan Source',
463
+ 'Nominal owner full scan source is the scoped comparison document for full-document ownership augmentation.',
464
+ '',
465
+ 'This opening section is intentionally separate from the remote owner statement.',
466
+ '',
467
+ 'Local owner filler paragraph one keeps the remote appendix away from the matched opening span.',
468
+ '',
469
+ 'Local owner filler paragraph two keeps the remote appendix away from the matched opening span.',
470
+ '',
471
+ 'Local owner filler paragraph three keeps the remote appendix away from the matched opening span.',
472
+ '',
473
+ 'Local owner filler paragraph four keeps the remote appendix away from the matched opening span.',
474
+ '',
475
+ 'Local owner filler paragraph five keeps the remote appendix away from the matched opening span.',
476
+ '',
477
+ 'Local owner filler paragraph six keeps the remote appendix away from the matched opening span.',
478
+ '',
479
+ '## Remote Nominal Owner Appendix',
480
+ 'The deployment owner is Release Ops in the remote nominal owner appendix.',
481
+ ].join('\n'),
482
+ },
483
+ {
484
+ documentId: 'doc_field_owner_full_scan_source',
485
+ sourcePath: 'Knowledge_Base/ragidentityfullscan/field owner full scan source.md',
486
+ language: 'en',
487
+ workspaceId: 'ragidentityfullscan',
488
+ corpusId: 'ragidentityfullscan',
489
+ content: [
490
+ '# Field Owner Full Scan Source',
491
+ 'Field owner full scan source is the scoped comparison document for full-document ownership augmentation.',
492
+ '',
493
+ 'This opening section is intentionally separate from the remote owner statement.',
494
+ '',
495
+ 'Local owner filler paragraph one keeps the remote appendix away from the matched opening span.',
496
+ '',
497
+ 'Local owner filler paragraph two keeps the remote appendix away from the matched opening span.',
498
+ '',
499
+ 'Local owner filler paragraph three keeps the remote appendix away from the matched opening span.',
500
+ '',
501
+ 'Local owner filler paragraph four keeps the remote appendix away from the matched opening span.',
502
+ '',
503
+ 'Local owner filler paragraph five keeps the remote appendix away from the matched opening span.',
504
+ '',
505
+ 'Local owner filler paragraph six keeps the remote appendix away from the matched opening span.',
506
+ '',
507
+ '## Remote Field Owner Appendix',
508
+ 'The deployment owner is Rollback Team in the remote field owner appendix.',
509
+ ].join('\n'),
510
+ },
511
+ {
512
+ documentId: 'doc_conflicting_endpoint_probe',
513
+ sourcePath: 'Knowledge_Base/ragendpointconflict/endpoint conflict probe.md',
514
+ language: 'en',
515
+ workspaceId: 'ragendpointconflict',
516
+ corpusId: 'ragendpointconflict',
517
+ content: [
518
+ '# Endpoint Conflict Probe',
519
+ 'Endpoint conflict probe records competing webhook endpoint values: /api/v1/hooks and /api/v2/hooks.',
520
+ '',
521
+ '## Webhook Routing',
522
+ 'The webhook endpoint is /api/v1/hooks.',
523
+ '',
524
+ 'Context paragraph keeps the endpoint conflict inside one scoped section.',
525
+ '',
526
+ 'The webhook endpoint is /api/v2/hooks.',
527
+ 'Operators must resolve which webhook endpoint is active before release.',
528
+ ].join('\n'),
529
+ },
530
+ {
531
+ documentId: 'doc_nominal_endpoint_full_scan_source',
532
+ sourcePath: 'Knowledge_Base/ragendpointfullscan/nominal endpoint full scan source.md',
533
+ language: 'en',
534
+ workspaceId: 'ragendpointfullscan',
535
+ corpusId: 'ragendpointfullscan',
536
+ content: [
537
+ '# Nominal Endpoint Full Scan Source',
538
+ 'Nominal endpoint full scan source is the scoped comparison document for full-document endpoint augmentation.',
539
+ '',
540
+ 'This opening section is intentionally separate from the remote endpoint statement.',
541
+ '',
542
+ 'Local endpoint filler paragraph one keeps the remote appendix away from the matched opening span.',
543
+ '',
544
+ 'Local endpoint filler paragraph two keeps the remote appendix away from the matched opening span.',
545
+ '',
546
+ 'Local endpoint filler paragraph three keeps the remote appendix away from the matched opening span.',
547
+ '',
548
+ 'Local endpoint filler paragraph four keeps the remote appendix away from the matched opening span.',
549
+ '',
550
+ 'Local endpoint filler paragraph five keeps the remote appendix away from the matched opening span.',
551
+ '',
552
+ 'Local endpoint filler paragraph six keeps the remote appendix away from the matched opening span.',
553
+ '',
554
+ '## Remote Nominal Endpoint Appendix',
555
+ 'The webhook endpoint is /api/v1/hooks in the remote nominal endpoint appendix.',
556
+ ].join('\n'),
557
+ },
558
+ {
559
+ documentId: 'doc_field_endpoint_full_scan_source',
560
+ sourcePath: 'Knowledge_Base/ragendpointfullscan/field endpoint full scan source.md',
561
+ language: 'en',
562
+ workspaceId: 'ragendpointfullscan',
563
+ corpusId: 'ragendpointfullscan',
564
+ content: [
565
+ '# Field Endpoint Full Scan Source',
566
+ 'Field endpoint full scan source is the scoped comparison document for full-document endpoint augmentation.',
567
+ '',
568
+ 'This opening section is intentionally separate from the remote endpoint statement.',
569
+ '',
570
+ 'Local endpoint filler paragraph one keeps the remote appendix away from the matched opening span.',
571
+ '',
572
+ 'Local endpoint filler paragraph two keeps the remote appendix away from the matched opening span.',
573
+ '',
574
+ 'Local endpoint filler paragraph three keeps the remote appendix away from the matched opening span.',
575
+ '',
576
+ 'Local endpoint filler paragraph four keeps the remote appendix away from the matched opening span.',
577
+ '',
578
+ 'Local endpoint filler paragraph five keeps the remote appendix away from the matched opening span.',
579
+ '',
580
+ 'Local endpoint filler paragraph six keeps the remote appendix away from the matched opening span.',
581
+ '',
582
+ '## Remote Field Endpoint Appendix',
583
+ 'The webhook endpoint is /api/v2/hooks in the remote field endpoint appendix.',
584
+ ].join('\n'),
585
+ },
586
+ {
587
+ documentId: 'doc_environment_scoped_endpoint_probe',
588
+ sourcePath: 'Knowledge_Base/ragendpointqualifier/environment scoped endpoint probe.md',
589
+ language: 'en',
590
+ workspaceId: 'ragendpointqualifier',
591
+ corpusId: 'ragendpointqualifier',
592
+ content: [
593
+ '# Environment Scoped Endpoint Probe',
594
+ 'Environment scoped endpoint probe records that the webhook endpoint is /api/staging/hooks for staging and /api/prod/hooks for production.',
595
+ '',
596
+ '## Environment Routes',
597
+ 'The webhook endpoint is /api/staging/hooks in the staging environment.',
598
+ '',
599
+ 'Context paragraph keeps both environment-specific endpoints in one scoped section.',
600
+ '',
601
+ 'The webhook endpoint is /api/prod/hooks in the production environment.',
602
+ 'Operators should not collapse staging and production endpoint records into one single route.',
603
+ ].join('\n'),
604
+ },
605
+ {
606
+ documentId: 'doc_conflicting_dependency_probe',
607
+ sourcePath: 'Knowledge_Base/ragdependencyconflict/dependency conflict probe.md',
608
+ language: 'en',
609
+ workspaceId: 'ragdependencyconflict',
610
+ corpusId: 'ragdependencyconflict',
611
+ content: [
612
+ '# Dependency Conflict Probe',
613
+ 'Dependency conflict probe records competing storage dependency values: SQLite and PostgreSQL.',
614
+ '',
615
+ '## Storage Dependency',
616
+ 'The storage dependency is SQLite in the release manifest.',
617
+ '',
618
+ 'Context paragraph keeps the dependency conflict inside one scoped section.',
619
+ '',
620
+ 'The storage dependency is PostgreSQL in the rollback manifest.',
621
+ 'Operators must resolve which storage dependency is active before release.',
622
+ ].join('\n'),
623
+ },
624
+ {
625
+ documentId: 'doc_environment_scoped_dependency_probe',
626
+ sourcePath: 'Knowledge_Base/ragdependencyqualifier/environment scoped dependency probe.md',
627
+ language: 'en',
628
+ workspaceId: 'ragdependencyqualifier',
629
+ corpusId: 'ragdependencyqualifier',
630
+ content: [
631
+ '# Environment Scoped Dependency Probe',
632
+ 'Environment scoped dependency probe records that the storage dependency is SQLite for staging and PostgreSQL for production.',
633
+ '',
634
+ '## Environment Dependencies',
635
+ 'The storage dependency is SQLite in the staging environment.',
636
+ '',
637
+ 'Context paragraph keeps both environment-specific dependencies in one scoped section.',
638
+ '',
639
+ 'The storage dependency is PostgreSQL in the production environment.',
640
+ 'Operators should not collapse staging and production dependency records into one single storage dependency.',
641
+ ].join('\n'),
642
+ },
643
+ {
644
+ documentId: 'doc_nominal_storage_dependency_conflict_probe',
645
+ sourcePath: 'Knowledge_Base/ragdependencymulticonflict/nominal storage dependency conflict probe.md',
646
+ language: 'en',
647
+ workspaceId: 'ragdependencymulticonflict',
648
+ corpusId: 'ragdependencymulticonflict',
649
+ content: [
650
+ '# Nominal Storage Dependency Conflict Probe',
651
+ 'Nominal storage dependency conflict probe records the nominal storage dependency as SQLite.',
652
+ '',
653
+ '## Nominal Dependency',
654
+ 'The storage dependency is SQLite in the nominal deployment manifest.',
655
+ 'Operators must compare this nominal dependency source against field evidence before publishing a dependency value.',
656
+ ].join('\n'),
657
+ },
658
+ {
659
+ documentId: 'doc_field_storage_dependency_conflict_evidence',
660
+ sourcePath: 'Knowledge_Base/ragdependencymulticonflict/field storage dependency conflict evidence.md',
661
+ language: 'en',
662
+ workspaceId: 'ragdependencymulticonflict',
663
+ corpusId: 'ragdependencymulticonflict',
664
+ content: [
665
+ '# Field Storage Dependency Conflict Evidence',
666
+ 'Field storage dependency conflict evidence records the field storage dependency as PostgreSQL.',
667
+ '',
668
+ '## Field Dependency',
669
+ 'The storage dependency is PostgreSQL in the field deployment manifest.',
670
+ 'Operators must resolve the active dependency source before publishing a dependency value.',
671
+ ].join('\n'),
672
+ },
673
+ {
674
+ documentId: 'doc_nominal_dependency_full_scan_source',
675
+ sourcePath: 'Knowledge_Base/ragdependencyfullscan/nominal dependency full scan source.md',
676
+ language: 'en',
677
+ workspaceId: 'ragdependencyfullscan',
678
+ corpusId: 'ragdependencyfullscan',
679
+ content: [
680
+ '# Nominal Dependency Full Scan Source',
681
+ 'Nominal dependency full scan source is the scoped document anchor for full-document dependency augmentation.',
682
+ '',
683
+ 'This opening section is intentionally separate from the remote dependency statement.',
684
+ '',
685
+ 'Local dependency filler paragraph one keeps the remote appendix away from the matched opening span.',
686
+ '',
687
+ 'Local dependency filler paragraph two keeps the remote appendix away from the matched opening span.',
688
+ '',
689
+ 'Local dependency filler paragraph three keeps the remote appendix away from the matched opening span.',
690
+ '',
691
+ 'Local dependency filler paragraph four keeps the remote appendix away from the matched opening span.',
692
+ '',
693
+ 'Local dependency filler paragraph five keeps the remote appendix away from the matched opening span.',
694
+ '',
695
+ 'Local dependency filler paragraph six keeps the remote appendix away from the matched opening span.',
696
+ '',
697
+ '## Remote Nominal Dependency Appendix',
698
+ 'The storage dependency is SQLite in the remote nominal dependency appendix.',
699
+ ].join('\n'),
700
+ },
701
+ {
702
+ documentId: 'doc_field_dependency_full_scan_source',
703
+ sourcePath: 'Knowledge_Base/ragdependencyfullscan/field dependency full scan source.md',
704
+ language: 'en',
705
+ workspaceId: 'ragdependencyfullscan',
706
+ corpusId: 'ragdependencyfullscan',
707
+ content: [
708
+ '# Field Dependency Full Scan Source',
709
+ 'Field dependency full scan source is the scoped comparison document for full-document dependency augmentation.',
710
+ '',
711
+ 'This opening section is intentionally separate from the remote dependency statement.',
712
+ '',
713
+ 'Local dependency filler paragraph one keeps the remote appendix away from the matched opening span.',
714
+ '',
715
+ 'Local dependency filler paragraph two keeps the remote appendix away from the matched opening span.',
716
+ '',
717
+ 'Local dependency filler paragraph three keeps the remote appendix away from the matched opening span.',
718
+ '',
719
+ 'Local dependency filler paragraph four keeps the remote appendix away from the matched opening span.',
720
+ '',
721
+ 'Local dependency filler paragraph five keeps the remote appendix away from the matched opening span.',
722
+ '',
723
+ 'Local dependency filler paragraph six keeps the remote appendix away from the matched opening span.',
724
+ '',
725
+ '## Remote Field Dependency Appendix',
726
+ 'The storage dependency is PostgreSQL in the remote field dependency appendix.',
727
+ ].join('\n'),
728
+ },
729
+ {
730
+ documentId: 'doc_nominal_format_full_scan_source',
731
+ sourcePath: 'Knowledge_Base/ragformatfullscan/nominal format full scan source.md',
732
+ language: 'en',
733
+ workspaceId: 'ragformatfullscan',
734
+ corpusId: 'ragformatfullscan',
735
+ content: [
736
+ '# Nominal Format Full Scan Source',
737
+ 'Nominal format full scan source is the scoped comparison document for full-document format augmentation.',
738
+ '',
739
+ 'This opening section is intentionally separate from the remote format statement.',
740
+ '',
741
+ 'Local format filler paragraph one keeps the remote appendix away from the matched opening span.',
742
+ '',
743
+ 'Local format filler paragraph two keeps the remote appendix away from the matched opening span.',
744
+ '',
745
+ 'Local format filler paragraph three keeps the remote appendix away from the matched opening span.',
746
+ '',
747
+ 'Local format filler paragraph four keeps the remote appendix away from the matched opening span.',
748
+ '',
749
+ 'Local format filler paragraph five keeps the remote appendix away from the matched opening span.',
750
+ '',
751
+ 'Local format filler paragraph six keeps the remote appendix away from the matched opening span.',
752
+ '',
753
+ '## Remote Nominal Format Appendix',
754
+ 'The payload format is JSON in the remote nominal format appendix.',
755
+ ].join('\n'),
756
+ },
757
+ {
758
+ documentId: 'doc_field_format_full_scan_source',
759
+ sourcePath: 'Knowledge_Base/ragformatfullscan/field format full scan source.md',
760
+ language: 'en',
761
+ workspaceId: 'ragformatfullscan',
762
+ corpusId: 'ragformatfullscan',
763
+ content: [
764
+ '# Field Format Full Scan Source',
765
+ 'Field format full scan source is the scoped comparison document for full-document format augmentation.',
766
+ '',
767
+ 'This opening section is intentionally separate from the remote format statement.',
768
+ '',
769
+ 'Local format filler paragraph one keeps the remote appendix away from the matched opening span.',
770
+ '',
771
+ 'Local format filler paragraph two keeps the remote appendix away from the matched opening span.',
772
+ '',
773
+ 'Local format filler paragraph three keeps the remote appendix away from the matched opening span.',
774
+ '',
775
+ 'Local format filler paragraph four keeps the remote appendix away from the matched opening span.',
776
+ '',
777
+ 'Local format filler paragraph five keeps the remote appendix away from the matched opening span.',
778
+ '',
779
+ 'Local format filler paragraph six keeps the remote appendix away from the matched opening span.',
780
+ '',
781
+ '## Remote Field Format Appendix',
782
+ 'The payload format is YAML in the remote field format appendix.',
783
+ ].join('\n'),
784
+ },
785
+ {
786
+ documentId: 'doc_nominal_protocol_full_scan_source',
787
+ sourcePath: 'Knowledge_Base/ragprotocolfullscan/nominal protocol full scan source.md',
788
+ language: 'en',
789
+ workspaceId: 'ragprotocolfullscan',
790
+ corpusId: 'ragprotocolfullscan',
791
+ content: [
792
+ '# Nominal Protocol Full Scan Source',
793
+ 'Nominal protocol full scan source is the scoped comparison document for full-document protocol augmentation.',
794
+ '',
795
+ 'This opening section is intentionally separate from the remote protocol statement.',
796
+ '',
797
+ 'Local protocol filler paragraph one keeps the remote appendix away from the matched opening span.',
798
+ '',
799
+ 'Local protocol filler paragraph two keeps the remote appendix away from the matched opening span.',
800
+ '',
801
+ 'Local protocol filler paragraph three keeps the remote appendix away from the matched opening span.',
802
+ '',
803
+ 'Local protocol filler paragraph four keeps the remote appendix away from the matched opening span.',
804
+ '',
805
+ 'Local protocol filler paragraph five keeps the remote appendix away from the matched opening span.',
806
+ '',
807
+ 'Local protocol filler paragraph six keeps the remote appendix away from the matched opening span.',
808
+ '',
809
+ '## Remote Nominal Protocol Appendix',
810
+ 'The transport protocol is HTTP/1.1 in the remote nominal protocol appendix.',
811
+ ].join('\n'),
812
+ },
813
+ {
814
+ documentId: 'doc_field_protocol_full_scan_source',
815
+ sourcePath: 'Knowledge_Base/ragprotocolfullscan/field protocol full scan source.md',
816
+ language: 'en',
817
+ workspaceId: 'ragprotocolfullscan',
818
+ corpusId: 'ragprotocolfullscan',
819
+ content: [
820
+ '# Field Protocol Full Scan Source',
821
+ 'Field protocol full scan source is the scoped comparison document for full-document protocol augmentation.',
822
+ '',
823
+ 'This opening section is intentionally separate from the remote protocol statement.',
824
+ '',
825
+ 'Local protocol filler paragraph one keeps the remote appendix away from the matched opening span.',
826
+ '',
827
+ 'Local protocol filler paragraph two keeps the remote appendix away from the matched opening span.',
828
+ '',
829
+ 'Local protocol filler paragraph three keeps the remote appendix away from the matched opening span.',
830
+ '',
831
+ 'Local protocol filler paragraph four keeps the remote appendix away from the matched opening span.',
832
+ '',
833
+ 'Local protocol filler paragraph five keeps the remote appendix away from the matched opening span.',
834
+ '',
835
+ 'Local protocol filler paragraph six keeps the remote appendix away from the matched opening span.',
836
+ '',
837
+ '## Remote Field Protocol Appendix',
838
+ 'The transport protocol is WebSocket in the remote field protocol appendix.',
839
+ ].join('\n'),
840
+ },
841
+ {
842
+ documentId: 'doc_conflicting_format_probe',
843
+ sourcePath: 'Knowledge_Base/ragformatconflict/format conflict probe.md',
844
+ language: 'en',
845
+ workspaceId: 'ragformatconflict',
846
+ corpusId: 'ragformatconflict',
847
+ content: [
848
+ '# Format Conflict Probe',
849
+ 'Format conflict probe records competing payload format values: JSON and YAML.',
850
+ '',
851
+ '## Payload Contract',
852
+ 'The payload format is JSON in the release contract.',
853
+ '',
854
+ 'Context paragraph keeps the format conflict inside one scoped section.',
855
+ '',
856
+ 'The payload format is YAML in the rollback contract.',
857
+ 'Operators must resolve which payload format is active before release.',
858
+ ].join('\n'),
859
+ },
860
+ {
861
+ documentId: 'doc_environment_scoped_format_probe',
862
+ sourcePath: 'Knowledge_Base/ragformatqualifier/environment scoped format probe.md',
863
+ language: 'en',
864
+ workspaceId: 'ragformatqualifier',
865
+ corpusId: 'ragformatqualifier',
866
+ content: [
867
+ '# Environment Scoped Format Probe',
868
+ 'Environment scoped format probe records that the payload format is JSON for staging and XML for production.',
869
+ '',
870
+ '## Environment Payload Formats',
871
+ 'The payload format is JSON in the staging environment.',
872
+ '',
873
+ 'Context paragraph keeps both environment-specific formats in one scoped section.',
874
+ '',
875
+ 'The payload format is XML in the production environment.',
876
+ 'Operators should not collapse staging and production format records into one single payload format.',
877
+ ].join('\n'),
878
+ },
879
+ {
880
+ documentId: 'doc_conflicting_protocol_probe',
881
+ sourcePath: 'Knowledge_Base/ragprotocolconflict/protocol conflict probe.md',
882
+ language: 'en',
883
+ workspaceId: 'ragprotocolconflict',
884
+ corpusId: 'ragprotocolconflict',
885
+ content: [
886
+ '# Protocol Conflict Probe',
887
+ 'Protocol conflict probe records competing transport protocol values: HTTP/1.1 and WebSocket.',
888
+ '',
889
+ '## Transport Contract',
890
+ 'The transport protocol is HTTP/1.1 in the release channel.',
891
+ '',
892
+ 'Context paragraph keeps the protocol conflict inside one scoped section.',
893
+ '',
894
+ 'The transport protocol is WebSocket in the rollback channel.',
895
+ 'Operators must resolve which transport protocol is active before release.',
896
+ ].join('\n'),
897
+ },
898
+ {
899
+ documentId: 'doc_environment_scoped_protocol_probe',
900
+ sourcePath: 'Knowledge_Base/ragprotocolqualifier/environment scoped protocol probe.md',
901
+ language: 'en',
902
+ workspaceId: 'ragprotocolqualifier',
903
+ corpusId: 'ragprotocolqualifier',
904
+ content: [
905
+ '# Environment Scoped Protocol Probe',
906
+ 'Environment scoped protocol probe records that the transport protocol is HTTP/2 for staging and gRPC for production.',
907
+ '',
908
+ '## Environment Transport Protocols',
909
+ 'The transport protocol is HTTP/2 in the staging environment.',
910
+ '',
911
+ 'Context paragraph keeps both environment-specific protocols in one scoped section.',
912
+ '',
913
+ 'The transport protocol is gRPC in the production environment.',
914
+ 'Operators should not collapse staging and production protocol records into one single transport protocol.',
915
+ ].join('\n'),
916
+ },
917
+ {
918
+ documentId: 'doc_semantic_version_conflict_probe',
919
+ sourcePath: 'Knowledge_Base/ragversionfactconflict/semantic version conflict probe.md',
920
+ language: 'en',
921
+ workspaceId: 'ragversionfactconflict',
922
+ corpusId: 'ragversionfactconflict',
923
+ content: [
924
+ '# Semantic Version Conflict Probe',
925
+ 'Semantic version conflict probe records competing runtime version values: 1.2.0 and 2.0.0.',
926
+ '',
927
+ '## Runtime Version',
928
+ 'The runtime version is 1.2.0 in the release manifest.',
929
+ '',
930
+ 'Context paragraph keeps the semantic version conflict inside one scoped section.',
931
+ '',
932
+ 'The runtime version is 2.0.0 in the rollback manifest.',
933
+ 'Operators must resolve which runtime version is active before release.',
934
+ ].join('\n'),
935
+ },
936
+ {
937
+ documentId: 'doc_nominal_semantic_version_full_scan_source',
938
+ sourcePath: 'Knowledge_Base/ragversionfactfullscan/nominal semantic version full scan source.md',
939
+ language: 'en',
940
+ workspaceId: 'ragversionfactfullscan',
941
+ corpusId: 'ragversionfactfullscan',
942
+ content: [
943
+ '# Nominal Semantic Version Full Scan Source',
944
+ 'Nominal semantic version full scan source is the scoped comparison document for full-document version augmentation.',
945
+ '',
946
+ 'This opening section is intentionally separate from the remote runtime-version statement.',
947
+ '',
948
+ 'Local version filler paragraph one keeps the remote appendix away from the matched opening span.',
949
+ '',
950
+ 'Local version filler paragraph two keeps the remote appendix away from the matched opening span.',
951
+ '',
952
+ 'Local version filler paragraph three keeps the remote appendix away from the matched opening span.',
953
+ '',
954
+ 'Local version filler paragraph four keeps the remote appendix away from the matched opening span.',
955
+ '',
956
+ 'Local version filler paragraph five keeps the remote appendix away from the matched opening span.',
957
+ '',
958
+ 'Local version filler paragraph six keeps the remote appendix away from the matched opening span.',
959
+ '',
960
+ '## Remote Nominal Semantic Version Appendix',
961
+ 'The runtime version is 1.2.0 in the remote nominal version appendix.',
962
+ ].join('\n'),
963
+ },
964
+ {
965
+ documentId: 'doc_field_semantic_version_full_scan_source',
966
+ sourcePath: 'Knowledge_Base/ragversionfactfullscan/field semantic version full scan source.md',
967
+ language: 'en',
968
+ workspaceId: 'ragversionfactfullscan',
969
+ corpusId: 'ragversionfactfullscan',
970
+ content: [
971
+ '# Field Semantic Version Full Scan Source',
972
+ 'Field semantic version full scan source is the scoped comparison document for full-document version augmentation.',
973
+ '',
974
+ 'This opening section is intentionally separate from the remote runtime-version statement.',
975
+ '',
976
+ 'Local version filler paragraph one keeps the remote appendix away from the matched opening span.',
977
+ '',
978
+ 'Local version filler paragraph two keeps the remote appendix away from the matched opening span.',
979
+ '',
980
+ 'Local version filler paragraph three keeps the remote appendix away from the matched opening span.',
981
+ '',
982
+ 'Local version filler paragraph four keeps the remote appendix away from the matched opening span.',
983
+ '',
984
+ 'Local version filler paragraph five keeps the remote appendix away from the matched opening span.',
985
+ '',
986
+ 'Local version filler paragraph six keeps the remote appendix away from the matched opening span.',
987
+ '',
988
+ '## Remote Field Semantic Version Appendix',
989
+ 'The runtime version is 2.0.0 in the remote field version appendix.',
990
+ ].join('\n'),
991
+ },
992
+ {
993
+ documentId: 'doc_cross_environment_staging_runtime_version_source',
994
+ sourcePath: 'Knowledge_Base/ragconditionversionfactcrossscope/cross environment staging runtime version source.md',
995
+ language: 'en',
996
+ workspaceId: 'ragconditionversionfactcrossscope',
997
+ corpusId: 'ragconditionversionfactcrossscope',
998
+ content: [
999
+ '# Cross Environment Staging Runtime Version Source',
1000
+ 'Cross environment staging runtime version source records that the runtime version is 1.2.0 in the staging environment.',
1001
+ '',
1002
+ '## Staging Runtime Version',
1003
+ 'The runtime version is 1.2.0 in the staging environment.',
1004
+ ].join('\n'),
1005
+ },
1006
+ {
1007
+ documentId: 'doc_cross_environment_production_runtime_version_source',
1008
+ sourcePath: 'Knowledge_Base/ragconditionversionfactcrossscope/cross environment production runtime version source.md',
1009
+ language: 'en',
1010
+ workspaceId: 'ragconditionversionfactcrossscope',
1011
+ corpusId: 'ragconditionversionfactcrossscope',
1012
+ content: [
1013
+ '# Cross Environment Production Runtime Version Source',
1014
+ 'Cross environment production runtime version source records that the runtime version is 2.0.0 in the production environment.',
1015
+ '',
1016
+ '## Production Runtime Version',
1017
+ 'The runtime version is 2.0.0 in the production environment.',
1018
+ ].join('\n'),
1019
+ },
1020
+ {
1021
+ documentId: 'doc_service_port_conflict_probe',
1022
+ sourcePath: 'Knowledge_Base/ragportconflict/service port conflict probe.md',
1023
+ language: 'en',
1024
+ workspaceId: 'ragportconflict',
1025
+ corpusId: 'ragportconflict',
1026
+ content: [
1027
+ '# Service Port Conflict Probe',
1028
+ 'Service port conflict probe records competing listener port values: 443 and 8443.',
1029
+ '',
1030
+ '## Listener Port',
1031
+ 'The service port is 443 in the release manifest.',
1032
+ '',
1033
+ 'Context paragraph keeps the service port conflict inside one scoped section.',
1034
+ '',
1035
+ 'The service port is 8443 in the rollback manifest.',
1036
+ 'Operators must resolve which service port is active before release.',
1037
+ ].join('\n'),
1038
+ },
1039
+ {
1040
+ documentId: 'doc_nominal_service_port_full_scan_source',
1041
+ sourcePath: 'Knowledge_Base/ragportfullscan/nominal service port full scan source.md',
1042
+ language: 'en',
1043
+ workspaceId: 'ragportfullscan',
1044
+ corpusId: 'ragportfullscan',
1045
+ content: [
1046
+ '# Nominal Service Port Full Scan Source',
1047
+ 'Nominal service port full scan source is the scoped comparison document for full-document port augmentation.',
1048
+ '',
1049
+ 'This opening section is intentionally separate from the remote service-port statement.',
1050
+ '',
1051
+ 'Local port filler paragraph one keeps the remote appendix away from the matched opening span.',
1052
+ '',
1053
+ 'Local port filler paragraph two keeps the remote appendix away from the matched opening span.',
1054
+ '',
1055
+ 'Local port filler paragraph three keeps the remote appendix away from the matched opening span.',
1056
+ '',
1057
+ 'Local port filler paragraph four keeps the remote appendix away from the matched opening span.',
1058
+ '',
1059
+ 'Local port filler paragraph five keeps the remote appendix away from the matched opening span.',
1060
+ '',
1061
+ 'Local port filler paragraph six keeps the remote appendix away from the matched opening span.',
1062
+ '',
1063
+ '## Remote Nominal Service Port Appendix',
1064
+ 'The service port is 443 in the remote nominal port appendix.',
1065
+ ].join('\n'),
1066
+ },
1067
+ {
1068
+ documentId: 'doc_field_service_port_full_scan_source',
1069
+ sourcePath: 'Knowledge_Base/ragportfullscan/field service port full scan source.md',
1070
+ language: 'en',
1071
+ workspaceId: 'ragportfullscan',
1072
+ corpusId: 'ragportfullscan',
1073
+ content: [
1074
+ '# Field Service Port Full Scan Source',
1075
+ 'Field service port full scan source is the scoped comparison document for full-document port augmentation.',
1076
+ '',
1077
+ 'This opening section is intentionally separate from the remote service-port statement.',
1078
+ '',
1079
+ 'Local port filler paragraph one keeps the remote appendix away from the matched opening span.',
1080
+ '',
1081
+ 'Local port filler paragraph two keeps the remote appendix away from the matched opening span.',
1082
+ '',
1083
+ 'Local port filler paragraph three keeps the remote appendix away from the matched opening span.',
1084
+ '',
1085
+ 'Local port filler paragraph four keeps the remote appendix away from the matched opening span.',
1086
+ '',
1087
+ 'Local port filler paragraph five keeps the remote appendix away from the matched opening span.',
1088
+ '',
1089
+ 'Local port filler paragraph six keeps the remote appendix away from the matched opening span.',
1090
+ '',
1091
+ '## Remote Field Service Port Appendix',
1092
+ 'The service port is 8443 in the remote field port appendix.',
1093
+ ].join('\n'),
1094
+ },
1095
+ {
1096
+ documentId: 'doc_cross_environment_staging_service_port_source',
1097
+ sourcePath: 'Knowledge_Base/ragconditionportcrossscope/cross environment staging service port source.md',
1098
+ language: 'en',
1099
+ workspaceId: 'ragconditionportcrossscope',
1100
+ corpusId: 'ragconditionportcrossscope',
1101
+ content: [
1102
+ '# Cross Environment Staging Service Port Source',
1103
+ 'Cross environment staging service port source records that the service port is 443 in the staging environment.',
1104
+ '',
1105
+ '## Staging Service Port',
1106
+ 'The service port is 443 in the staging environment.',
1107
+ ].join('\n'),
1108
+ },
1109
+ {
1110
+ documentId: 'doc_cross_environment_production_service_port_source',
1111
+ sourcePath: 'Knowledge_Base/ragconditionportcrossscope/cross environment production service port source.md',
1112
+ language: 'en',
1113
+ workspaceId: 'ragconditionportcrossscope',
1114
+ corpusId: 'ragconditionportcrossscope',
1115
+ content: [
1116
+ '# Cross Environment Production Service Port Source',
1117
+ 'Cross environment production service port source records that the service port is 8443 in the production environment.',
1118
+ '',
1119
+ '## Production Service Port',
1120
+ 'The service port is 8443 in the production environment.',
1121
+ ].join('\n'),
1122
+ },
1123
+ {
1124
+ documentId: 'doc_response_status_code_conflict_probe',
1125
+ sourcePath: 'Knowledge_Base/ragstatuscodeconflict/response status code conflict probe.md',
1126
+ language: 'en',
1127
+ workspaceId: 'ragstatuscodeconflict',
1128
+ corpusId: 'ragstatuscodeconflict',
1129
+ content: [
1130
+ '# Response Status Code Conflict Probe',
1131
+ 'Response status code conflict probe records competing HTTP response status values: 200 and 503.',
1132
+ '',
1133
+ '## Endpoint Response Code',
1134
+ 'The response status code is 200 in the release manifest.',
1135
+ '',
1136
+ 'Context paragraph keeps the response status code conflict inside one scoped section.',
1137
+ '',
1138
+ 'The response status code is 503 in the rollback manifest.',
1139
+ 'Operators must resolve which response status code is active before release.',
1140
+ ].join('\n'),
1141
+ },
1142
+ {
1143
+ documentId: 'doc_nominal_response_status_code_full_scan_source',
1144
+ sourcePath: 'Knowledge_Base/ragstatuscodefullscan/nominal response status code full scan source.md',
1145
+ language: 'en',
1146
+ workspaceId: 'ragstatuscodefullscan',
1147
+ corpusId: 'ragstatuscodefullscan',
1148
+ content: [
1149
+ '# Nominal Response Status Code Full Scan Source',
1150
+ 'Nominal response status code full scan source is the scoped comparison document for full-document status-code augmentation.',
1151
+ '',
1152
+ 'This opening section is intentionally separate from the remote response-status-code statement.',
1153
+ '',
1154
+ 'Local status-code filler paragraph one keeps the remote appendix away from the matched opening span.',
1155
+ '',
1156
+ 'Local status-code filler paragraph two keeps the remote appendix away from the matched opening span.',
1157
+ '',
1158
+ 'Local status-code filler paragraph three keeps the remote appendix away from the matched opening span.',
1159
+ '',
1160
+ 'Local status-code filler paragraph four keeps the remote appendix away from the matched opening span.',
1161
+ '',
1162
+ 'Local status-code filler paragraph five keeps the remote appendix away from the matched opening span.',
1163
+ '',
1164
+ 'Local status-code filler paragraph six keeps the remote appendix away from the matched opening span.',
1165
+ '',
1166
+ '## Remote Nominal Response Status Code Appendix',
1167
+ 'The response status code is 200 in the remote nominal status-code appendix.',
1168
+ ].join('\n'),
1169
+ },
1170
+ {
1171
+ documentId: 'doc_field_response_status_code_full_scan_source',
1172
+ sourcePath: 'Knowledge_Base/ragstatuscodefullscan/field response status code full scan source.md',
1173
+ language: 'en',
1174
+ workspaceId: 'ragstatuscodefullscan',
1175
+ corpusId: 'ragstatuscodefullscan',
1176
+ content: [
1177
+ '# Field Response Status Code Full Scan Source',
1178
+ 'Field response status code full scan source is the scoped comparison document for full-document status-code augmentation.',
1179
+ '',
1180
+ 'This opening section is intentionally separate from the remote response-status-code statement.',
1181
+ '',
1182
+ 'Local status-code filler paragraph one keeps the remote appendix away from the matched opening span.',
1183
+ '',
1184
+ 'Local status-code filler paragraph two keeps the remote appendix away from the matched opening span.',
1185
+ '',
1186
+ 'Local status-code filler paragraph three keeps the remote appendix away from the matched opening span.',
1187
+ '',
1188
+ 'Local status-code filler paragraph four keeps the remote appendix away from the matched opening span.',
1189
+ '',
1190
+ 'Local status-code filler paragraph five keeps the remote appendix away from the matched opening span.',
1191
+ '',
1192
+ 'Local status-code filler paragraph six keeps the remote appendix away from the matched opening span.',
1193
+ '',
1194
+ '## Remote Field Response Status Code Appendix',
1195
+ 'The response status code is 503 in the remote field status-code appendix.',
1196
+ ].join('\n'),
1197
+ },
1198
+ {
1199
+ documentId: 'doc_cross_environment_staging_response_status_code_source',
1200
+ sourcePath: 'Knowledge_Base/ragconditionstatuscodecrossscope/cross environment staging response status code source.md',
1201
+ language: 'en',
1202
+ workspaceId: 'ragconditionstatuscodecrossscope',
1203
+ corpusId: 'ragconditionstatuscodecrossscope',
1204
+ content: [
1205
+ '# Cross Environment Staging Response Status Code Source',
1206
+ 'Cross environment staging response status code source records that the response status code is 200 in the staging environment.',
1207
+ '',
1208
+ '## Staging Response Status Code',
1209
+ 'The response status code is 200 in the staging environment.',
1210
+ ].join('\n'),
1211
+ },
1212
+ {
1213
+ documentId: 'doc_cross_environment_production_response_status_code_source',
1214
+ sourcePath: 'Knowledge_Base/ragconditionstatuscodecrossscope/cross environment production response status code source.md',
1215
+ language: 'en',
1216
+ workspaceId: 'ragconditionstatuscodecrossscope',
1217
+ corpusId: 'ragconditionstatuscodecrossscope',
1218
+ content: [
1219
+ '# Cross Environment Production Response Status Code Source',
1220
+ 'Cross environment production response status code source records that the response status code is 503 in the production environment.',
1221
+ '',
1222
+ '## Production Response Status Code',
1223
+ 'The response status code is 503 in the production environment.',
1224
+ ].join('\n'),
1225
+ },
1226
+ {
1227
+ documentId: 'doc_version_scoped_dependency_probe',
1228
+ sourcePath: 'Knowledge_Base/ragdependencyversionqualifier/version scoped dependency probe.md',
1229
+ language: 'en',
1230
+ workspaceId: 'ragdependencyversionqualifier',
1231
+ corpusId: 'ragdependencyversionqualifier',
1232
+ content: [
1233
+ '# Version Scoped Dependency Probe',
1234
+ 'Version scoped dependency probe records that the storage dependency is SQLite for version 1.0 and PostgreSQL for version 2.0.',
1235
+ '',
1236
+ '## Version Dependencies',
1237
+ 'The storage dependency is SQLite in version 1.0.',
1238
+ '',
1239
+ 'Context paragraph keeps both version-specific dependencies in one scoped section.',
1240
+ '',
1241
+ 'The storage dependency is PostgreSQL in version 2.0.',
1242
+ 'Operators should not collapse version 1.0 and version 2.0 dependency records into one single storage dependency.',
1243
+ ].join('\n'),
1244
+ },
1245
+ {
1246
+ documentId: 'doc_handoff_deployment_owner_conflict_probe',
1247
+ sourcePath: 'Knowledge_Base/ragidentitymulticonflict/handoff deployment owner conflict probe.md',
1248
+ language: 'en',
1249
+ workspaceId: 'ragidentitymulticonflict',
1250
+ corpusId: 'ragidentitymulticonflict',
1251
+ content: [
1252
+ '# Handoff Deployment Owner Conflict Probe',
1253
+ 'Handoff deployment owner conflict probe provides the handoff-side owner record.',
1254
+ '',
1255
+ '## Handoff Owner Source',
1256
+ 'The deployment owner is Release Ops in the handoff owner record.',
1257
+ 'Operators must compare this owner source against rollback evidence before publishing a deployment owner.',
1258
+ ].join('\n'),
1259
+ },
1260
+ {
1261
+ documentId: 'doc_rollback_deployment_owner_conflict_evidence',
1262
+ sourcePath: 'Knowledge_Base/ragidentitymulticonflict/rollback deployment owner conflict evidence.md',
1263
+ language: 'en',
1264
+ workspaceId: 'ragidentitymulticonflict',
1265
+ corpusId: 'ragidentitymulticonflict',
1266
+ content: [
1267
+ '# Rollback Deployment Owner Conflict Evidence',
1268
+ 'Rollback deployment owner conflict evidence provides the rollback-side owner record.',
1269
+ '',
1270
+ '## Rollback Owner Source',
1271
+ 'The deployment owner is Rollback Team in the rollback owner record.',
1272
+ 'Operators must resolve the active owner source before publishing a stable deployment owner.',
1273
+ ].join('\n'),
1274
+ },
1275
+ {
1276
+ documentId: 'doc_cross_environment_staging_owner_source',
1277
+ sourcePath: 'Knowledge_Base/ragconditionownercrossscope/cross environment staging owner source.md',
1278
+ language: 'en',
1279
+ workspaceId: 'ragconditionownercrossscope',
1280
+ corpusId: 'ragconditionownercrossscope',
1281
+ content: [
1282
+ '# Cross Environment Staging Owner Source',
1283
+ 'Cross environment staging owner source records that the deployment owner is Release Ops in the staging environment.',
1284
+ '',
1285
+ '## Staging Owner',
1286
+ 'The deployment owner is Release Ops in the staging environment.',
1287
+ ].join('\n'),
1288
+ },
1289
+ {
1290
+ documentId: 'doc_cross_environment_production_owner_source',
1291
+ sourcePath: 'Knowledge_Base/ragconditionownercrossscope/cross environment production owner source.md',
1292
+ language: 'en',
1293
+ workspaceId: 'ragconditionownercrossscope',
1294
+ corpusId: 'ragconditionownercrossscope',
1295
+ content: [
1296
+ '# Cross Environment Production Owner Source',
1297
+ 'Cross environment production owner source records that the deployment owner is Rollback Team in the production environment.',
1298
+ '',
1299
+ '## Production Owner',
1300
+ 'The deployment owner is Rollback Team in the production environment.',
1301
+ ].join('\n'),
1302
+ },
1303
+ {
1304
+ documentId: 'doc_cross_version_one_owner_source',
1305
+ sourcePath: 'Knowledge_Base/ragconditionownercrossscope/cross version one owner source.md',
1306
+ language: 'en',
1307
+ workspaceId: 'ragconditionownercrossscope',
1308
+ corpusId: 'ragconditionownercrossscope',
1309
+ content: [
1310
+ '# Cross Version One Owner Source',
1311
+ 'Cross version one owner source records that the deployment owner is Release Ops in version 1.0.',
1312
+ '',
1313
+ '## Version One Owner',
1314
+ 'The deployment owner is Release Ops in version 1.0.',
1315
+ ].join('\n'),
1316
+ },
1317
+ {
1318
+ documentId: 'doc_cross_version_two_owner_source',
1319
+ sourcePath: 'Knowledge_Base/ragconditionownercrossscope/cross version two owner source.md',
1320
+ language: 'en',
1321
+ workspaceId: 'ragconditionownercrossscope',
1322
+ corpusId: 'ragconditionownercrossscope',
1323
+ content: [
1324
+ '# Cross Version Two Owner Source',
1325
+ 'Cross version two owner source records that the deployment owner is Rollback Team in version 2.0.',
1326
+ '',
1327
+ '## Version Two Owner',
1328
+ 'The deployment owner is Rollback Team in version 2.0.',
1329
+ ].join('\n'),
1330
+ },
1331
+ {
1332
+ documentId: 'doc_cross_platform_windows_owner_source',
1333
+ sourcePath: 'Knowledge_Base/ragconditionownercrossscope/cross platform windows owner source.md',
1334
+ language: 'en',
1335
+ workspaceId: 'ragconditionownercrossscope',
1336
+ corpusId: 'ragconditionownercrossscope',
1337
+ content: [
1338
+ '# Cross Platform Windows Owner Source',
1339
+ 'Cross platform windows owner source records that the deployment owner is Release Ops on the Windows platform.',
1340
+ '',
1341
+ '## Windows Owner',
1342
+ 'The deployment owner is Release Ops on the Windows platform.',
1343
+ ].join('\n'),
1344
+ },
1345
+ {
1346
+ documentId: 'doc_cross_platform_android_owner_source',
1347
+ sourcePath: 'Knowledge_Base/ragconditionownercrossscope/cross platform android owner source.md',
1348
+ language: 'en',
1349
+ workspaceId: 'ragconditionownercrossscope',
1350
+ corpusId: 'ragconditionownercrossscope',
1351
+ content: [
1352
+ '# Cross Platform Android Owner Source',
1353
+ 'Cross platform android owner source records that the deployment owner is Rollback Team on the Android platform.',
1354
+ '',
1355
+ '## Android Owner',
1356
+ 'The deployment owner is Rollback Team on the Android platform.',
1357
+ ].join('\n'),
1358
+ },
1359
+ {
1360
+ documentId: 'doc_cross_environment_staging_state_source',
1361
+ sourcePath: 'Knowledge_Base/ragconditionstatecrossscope/cross environment staging state source.md',
1362
+ language: 'en',
1363
+ workspaceId: 'ragconditionstatecrossscope',
1364
+ corpusId: 'ragconditionstatecrossscope',
1365
+ content: [
1366
+ '# Cross Environment Staging State Source',
1367
+ 'Cross environment staging state source records that the migration gate status is enabled in the staging environment.',
1368
+ '',
1369
+ '## Staging State',
1370
+ 'The migration gate status is enabled in the staging environment.',
1371
+ ].join('\n'),
1372
+ },
1373
+ {
1374
+ documentId: 'doc_cross_environment_production_state_source',
1375
+ sourcePath: 'Knowledge_Base/ragconditionstatecrossscope/cross environment production state source.md',
1376
+ language: 'en',
1377
+ workspaceId: 'ragconditionstatecrossscope',
1378
+ corpusId: 'ragconditionstatecrossscope',
1379
+ content: [
1380
+ '# Cross Environment Production State Source',
1381
+ 'Cross environment production state source records that the migration gate status is disabled in the production environment.',
1382
+ '',
1383
+ '## Production State',
1384
+ 'The migration gate status is disabled in the production environment.',
1385
+ ].join('\n'),
1386
+ },
1387
+ {
1388
+ documentId: 'doc_cross_version_one_state_source',
1389
+ sourcePath: 'Knowledge_Base/ragconditionstatecrossscope/cross version one state source.md',
1390
+ language: 'en',
1391
+ workspaceId: 'ragconditionstatecrossscope',
1392
+ corpusId: 'ragconditionstatecrossscope',
1393
+ content: [
1394
+ '# Cross Version One State Source',
1395
+ 'Cross version one state source records that the migration gate status is enabled in version 1.0.',
1396
+ '',
1397
+ '## Version One State',
1398
+ 'The migration gate status is enabled in version 1.0.',
1399
+ ].join('\n'),
1400
+ },
1401
+ {
1402
+ documentId: 'doc_cross_version_two_state_source',
1403
+ sourcePath: 'Knowledge_Base/ragconditionstatecrossscope/cross version two state source.md',
1404
+ language: 'en',
1405
+ workspaceId: 'ragconditionstatecrossscope',
1406
+ corpusId: 'ragconditionstatecrossscope',
1407
+ content: [
1408
+ '# Cross Version Two State Source',
1409
+ 'Cross version two state source records that the migration gate status is disabled in version 2.0.',
1410
+ '',
1411
+ '## Version Two State',
1412
+ 'The migration gate status is disabled in version 2.0.',
1413
+ ].join('\n'),
1414
+ },
1415
+ {
1416
+ documentId: 'doc_cross_platform_windows_state_source',
1417
+ sourcePath: 'Knowledge_Base/ragconditionstatecrossscope/cross platform windows state source.md',
1418
+ language: 'en',
1419
+ workspaceId: 'ragconditionstatecrossscope',
1420
+ corpusId: 'ragconditionstatecrossscope',
1421
+ content: [
1422
+ '# Cross Platform Windows State Source',
1423
+ 'Cross platform windows state source records that the migration gate status is enabled on the Windows platform.',
1424
+ '',
1425
+ '## Windows State',
1426
+ 'The migration gate status is enabled on the Windows platform.',
1427
+ ].join('\n'),
1428
+ },
1429
+ {
1430
+ documentId: 'doc_cross_platform_android_state_source',
1431
+ sourcePath: 'Knowledge_Base/ragconditionstatecrossscope/cross platform android state source.md',
1432
+ language: 'en',
1433
+ workspaceId: 'ragconditionstatecrossscope',
1434
+ corpusId: 'ragconditionstatecrossscope',
1435
+ content: [
1436
+ '# Cross Platform Android State Source',
1437
+ 'Cross platform android state source records that the migration gate status is disabled on the Android platform.',
1438
+ '',
1439
+ '## Android State',
1440
+ 'The migration gate status is disabled on the Android platform.',
1441
+ ].join('\n'),
1442
+ },
1443
+ {
1444
+ documentId: 'doc_cross_environment_staging_endpoint_source',
1445
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross environment staging endpoint source.md',
1446
+ language: 'en',
1447
+ workspaceId: 'ragconditioninterfacecrossscope',
1448
+ corpusId: 'ragconditioninterfacecrossscope',
1449
+ content: [
1450
+ '# Cross Environment Staging Endpoint Source',
1451
+ 'Cross environment staging endpoint source records that the webhook endpoint is /api/staging/hooks in the staging environment.',
1452
+ '',
1453
+ '## Staging Endpoint',
1454
+ 'The webhook endpoint is /api/staging/hooks in the staging environment.',
1455
+ ].join('\n'),
1456
+ },
1457
+ {
1458
+ documentId: 'doc_cross_environment_production_endpoint_source',
1459
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross environment production endpoint source.md',
1460
+ language: 'en',
1461
+ workspaceId: 'ragconditioninterfacecrossscope',
1462
+ corpusId: 'ragconditioninterfacecrossscope',
1463
+ content: [
1464
+ '# Cross Environment Production Endpoint Source',
1465
+ 'Cross environment production endpoint source records that the webhook endpoint is /api/production/hooks in the production environment.',
1466
+ '',
1467
+ '## Production Endpoint',
1468
+ 'The webhook endpoint is /api/production/hooks in the production environment.',
1469
+ ].join('\n'),
1470
+ },
1471
+ {
1472
+ documentId: 'doc_cross_version_one_endpoint_source',
1473
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross version one endpoint source.md',
1474
+ language: 'en',
1475
+ workspaceId: 'ragconditioninterfacecrossscope',
1476
+ corpusId: 'ragconditioninterfacecrossscope',
1477
+ content: [
1478
+ '# Cross Version One Endpoint Source',
1479
+ 'Cross version one endpoint source records that the webhook endpoint is /api/release-one/hooks in version 1.0.',
1480
+ '',
1481
+ '## Version One Endpoint',
1482
+ 'The webhook endpoint is /api/release-one/hooks in version 1.0.',
1483
+ ].join('\n'),
1484
+ },
1485
+ {
1486
+ documentId: 'doc_cross_version_two_endpoint_source',
1487
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross version two endpoint source.md',
1488
+ language: 'en',
1489
+ workspaceId: 'ragconditioninterfacecrossscope',
1490
+ corpusId: 'ragconditioninterfacecrossscope',
1491
+ content: [
1492
+ '# Cross Version Two Endpoint Source',
1493
+ 'Cross version two endpoint source records that the webhook endpoint is /api/release-two/hooks in version 2.0.',
1494
+ '',
1495
+ '## Version Two Endpoint',
1496
+ 'The webhook endpoint is /api/release-two/hooks in version 2.0.',
1497
+ ].join('\n'),
1498
+ },
1499
+ {
1500
+ documentId: 'doc_cross_platform_windows_endpoint_source',
1501
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross platform windows endpoint source.md',
1502
+ language: 'en',
1503
+ workspaceId: 'ragconditioninterfacecrossscope',
1504
+ corpusId: 'ragconditioninterfacecrossscope',
1505
+ content: [
1506
+ '# Cross Platform Windows Endpoint Source',
1507
+ 'Cross platform windows endpoint source records that the webhook endpoint is /api/windows/hooks on the Windows platform.',
1508
+ '',
1509
+ '## Windows Endpoint',
1510
+ 'The webhook endpoint is /api/windows/hooks on the Windows platform.',
1511
+ ].join('\n'),
1512
+ },
1513
+ {
1514
+ documentId: 'doc_cross_platform_android_endpoint_source',
1515
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross platform android endpoint source.md',
1516
+ language: 'en',
1517
+ workspaceId: 'ragconditioninterfacecrossscope',
1518
+ corpusId: 'ragconditioninterfacecrossscope',
1519
+ content: [
1520
+ '# Cross Platform Android Endpoint Source',
1521
+ 'Cross platform android endpoint source records that the webhook endpoint is /api/android/hooks on the Android platform.',
1522
+ '',
1523
+ '## Android Endpoint',
1524
+ 'The webhook endpoint is /api/android/hooks on the Android platform.',
1525
+ ].join('\n'),
1526
+ },
1527
+ {
1528
+ documentId: 'doc_cross_environment_staging_format_source',
1529
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross environment staging format source.md',
1530
+ language: 'en',
1531
+ workspaceId: 'ragconditioninterfacecrossscope',
1532
+ corpusId: 'ragconditioninterfacecrossscope',
1533
+ content: [
1534
+ '# Cross Environment Staging Format Source',
1535
+ 'Cross environment staging format source records that the payload format is JSON in the staging environment.',
1536
+ '',
1537
+ '## Staging Format',
1538
+ 'The payload format is JSON in the staging environment.',
1539
+ ].join('\n'),
1540
+ },
1541
+ {
1542
+ documentId: 'doc_cross_environment_production_format_source',
1543
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross environment production format source.md',
1544
+ language: 'en',
1545
+ workspaceId: 'ragconditioninterfacecrossscope',
1546
+ corpusId: 'ragconditioninterfacecrossscope',
1547
+ content: [
1548
+ '# Cross Environment Production Format Source',
1549
+ 'Cross environment production format source records that the payload format is XML in the production environment.',
1550
+ '',
1551
+ '## Production Format',
1552
+ 'The payload format is XML in the production environment.',
1553
+ ].join('\n'),
1554
+ },
1555
+ {
1556
+ documentId: 'doc_cross_version_one_format_source',
1557
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross version one format source.md',
1558
+ language: 'en',
1559
+ workspaceId: 'ragconditioninterfacecrossscope',
1560
+ corpusId: 'ragconditioninterfacecrossscope',
1561
+ content: [
1562
+ '# Cross Version One Format Source',
1563
+ 'Cross version one format source records that the payload format is JSON in version 1.0.',
1564
+ '',
1565
+ '## Version One Format',
1566
+ 'The payload format is JSON in version 1.0.',
1567
+ ].join('\n'),
1568
+ },
1569
+ {
1570
+ documentId: 'doc_cross_version_two_format_source',
1571
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross version two format source.md',
1572
+ language: 'en',
1573
+ workspaceId: 'ragconditioninterfacecrossscope',
1574
+ corpusId: 'ragconditioninterfacecrossscope',
1575
+ content: [
1576
+ '# Cross Version Two Format Source',
1577
+ 'Cross version two format source records that the payload format is XML in version 2.0.',
1578
+ '',
1579
+ '## Version Two Format',
1580
+ 'The payload format is XML in version 2.0.',
1581
+ ].join('\n'),
1582
+ },
1583
+ {
1584
+ documentId: 'doc_cross_platform_windows_format_source',
1585
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross platform windows format source.md',
1586
+ language: 'en',
1587
+ workspaceId: 'ragconditioninterfacecrossscope',
1588
+ corpusId: 'ragconditioninterfacecrossscope',
1589
+ content: [
1590
+ '# Cross Platform Windows Format Source',
1591
+ 'Cross platform windows format source records that the payload format is JSON on the Windows platform.',
1592
+ '',
1593
+ '## Windows Format',
1594
+ 'The payload format is JSON on the Windows platform.',
1595
+ ].join('\n'),
1596
+ },
1597
+ {
1598
+ documentId: 'doc_cross_platform_android_format_source',
1599
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross platform android format source.md',
1600
+ language: 'en',
1601
+ workspaceId: 'ragconditioninterfacecrossscope',
1602
+ corpusId: 'ragconditioninterfacecrossscope',
1603
+ content: [
1604
+ '# Cross Platform Android Format Source',
1605
+ 'Cross platform android format source records that the payload format is XML on the Android platform.',
1606
+ '',
1607
+ '## Android Format',
1608
+ 'The payload format is XML on the Android platform.',
1609
+ ].join('\n'),
1610
+ },
1611
+ {
1612
+ documentId: 'doc_cross_environment_staging_protocol_source',
1613
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross environment staging protocol source.md',
1614
+ language: 'en',
1615
+ workspaceId: 'ragconditioninterfacecrossscope',
1616
+ corpusId: 'ragconditioninterfacecrossscope',
1617
+ content: [
1618
+ '# Cross Environment Staging Protocol Source',
1619
+ 'Cross environment staging protocol source records that the transport protocol is HTTP/2 in the staging environment.',
1620
+ '',
1621
+ '## Staging Protocol',
1622
+ 'The transport protocol is HTTP/2 in the staging environment.',
1623
+ ].join('\n'),
1624
+ },
1625
+ {
1626
+ documentId: 'doc_cross_environment_production_protocol_source',
1627
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross environment production protocol source.md',
1628
+ language: 'en',
1629
+ workspaceId: 'ragconditioninterfacecrossscope',
1630
+ corpusId: 'ragconditioninterfacecrossscope',
1631
+ content: [
1632
+ '# Cross Environment Production Protocol Source',
1633
+ 'Cross environment production protocol source records that the transport protocol is gRPC in the production environment.',
1634
+ '',
1635
+ '## Production Protocol',
1636
+ 'The transport protocol is gRPC in the production environment.',
1637
+ ].join('\n'),
1638
+ },
1639
+ {
1640
+ documentId: 'doc_cross_version_one_protocol_source',
1641
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross version one protocol source.md',
1642
+ language: 'en',
1643
+ workspaceId: 'ragconditioninterfacecrossscope',
1644
+ corpusId: 'ragconditioninterfacecrossscope',
1645
+ content: [
1646
+ '# Cross Version One Protocol Source',
1647
+ 'Cross version one protocol source records that the transport protocol is HTTP/2 in version 1.0.',
1648
+ '',
1649
+ '## Version One Protocol',
1650
+ 'The transport protocol is HTTP/2 in version 1.0.',
1651
+ ].join('\n'),
1652
+ },
1653
+ {
1654
+ documentId: 'doc_cross_version_two_protocol_source',
1655
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross version two protocol source.md',
1656
+ language: 'en',
1657
+ workspaceId: 'ragconditioninterfacecrossscope',
1658
+ corpusId: 'ragconditioninterfacecrossscope',
1659
+ content: [
1660
+ '# Cross Version Two Protocol Source',
1661
+ 'Cross version two protocol source records that the transport protocol is gRPC in version 2.0.',
1662
+ '',
1663
+ '## Version Two Protocol',
1664
+ 'The transport protocol is gRPC in version 2.0.',
1665
+ ].join('\n'),
1666
+ },
1667
+ {
1668
+ documentId: 'doc_cross_platform_windows_protocol_source',
1669
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross platform windows protocol source.md',
1670
+ language: 'en',
1671
+ workspaceId: 'ragconditioninterfacecrossscope',
1672
+ corpusId: 'ragconditioninterfacecrossscope',
1673
+ content: [
1674
+ '# Cross Platform Windows Protocol Source',
1675
+ 'Cross platform windows protocol source records that the transport protocol is HTTP/2 on the Windows platform.',
1676
+ '',
1677
+ '## Windows Protocol',
1678
+ 'The transport protocol is HTTP/2 on the Windows platform.',
1679
+ ].join('\n'),
1680
+ },
1681
+ {
1682
+ documentId: 'doc_cross_platform_android_protocol_source',
1683
+ sourcePath: 'Knowledge_Base/ragconditioninterfacecrossscope/cross platform android protocol source.md',
1684
+ language: 'en',
1685
+ workspaceId: 'ragconditioninterfacecrossscope',
1686
+ corpusId: 'ragconditioninterfacecrossscope',
1687
+ content: [
1688
+ '# Cross Platform Android Protocol Source',
1689
+ 'Cross platform android protocol source records that the transport protocol is gRPC on the Android platform.',
1690
+ '',
1691
+ '## Android Protocol',
1692
+ 'The transport protocol is gRPC on the Android platform.',
1693
+ ].join('\n'),
1694
+ },
1695
+ {
1696
+ documentId: 'doc_cross_environment_staging_dependency_source',
1697
+ sourcePath: 'Knowledge_Base/ragconditiondependencycrossscope/cross environment staging dependency source.md',
1698
+ language: 'en',
1699
+ workspaceId: 'ragconditiondependencycrossscope',
1700
+ corpusId: 'ragconditiondependencycrossscope',
1701
+ content: [
1702
+ '# Cross Environment Staging Dependency Source',
1703
+ 'Cross environment staging dependency source records that the storage dependency is SQLite in the staging environment.',
1704
+ '',
1705
+ '## Staging Dependency',
1706
+ 'The storage dependency is SQLite in the staging environment.',
1707
+ ].join('\n'),
1708
+ },
1709
+ {
1710
+ documentId: 'doc_cross_environment_production_dependency_source',
1711
+ sourcePath: 'Knowledge_Base/ragconditiondependencycrossscope/cross environment production dependency source.md',
1712
+ language: 'en',
1713
+ workspaceId: 'ragconditiondependencycrossscope',
1714
+ corpusId: 'ragconditiondependencycrossscope',
1715
+ content: [
1716
+ '# Cross Environment Production Dependency Source',
1717
+ 'Cross environment production dependency source records that the storage dependency is PostgreSQL in the production environment.',
1718
+ '',
1719
+ '## Production Dependency',
1720
+ 'The storage dependency is PostgreSQL in the production environment.',
1721
+ ].join('\n'),
1722
+ },
1723
+ {
1724
+ documentId: 'doc_cross_version_one_dependency_source',
1725
+ sourcePath: 'Knowledge_Base/ragconditiondependencycrossscope/cross version one dependency source.md',
1726
+ language: 'en',
1727
+ workspaceId: 'ragconditiondependencycrossscope',
1728
+ corpusId: 'ragconditiondependencycrossscope',
1729
+ content: [
1730
+ '# Cross Version One Dependency Source',
1731
+ 'Cross version one dependency source records that the storage dependency is SQLite in version 1.0.',
1732
+ '',
1733
+ '## Version One Dependency',
1734
+ 'The storage dependency is SQLite in version 1.0.',
1735
+ ].join('\n'),
1736
+ },
1737
+ {
1738
+ documentId: 'doc_cross_version_two_dependency_source',
1739
+ sourcePath: 'Knowledge_Base/ragconditiondependencycrossscope/cross version two dependency source.md',
1740
+ language: 'en',
1741
+ workspaceId: 'ragconditiondependencycrossscope',
1742
+ corpusId: 'ragconditiondependencycrossscope',
1743
+ content: [
1744
+ '# Cross Version Two Dependency Source',
1745
+ 'Cross version two dependency source records that the storage dependency is PostgreSQL in version 2.0.',
1746
+ '',
1747
+ '## Version Two Dependency',
1748
+ 'The storage dependency is PostgreSQL in version 2.0.',
1749
+ ].join('\n'),
1750
+ },
1751
+ {
1752
+ documentId: 'doc_cross_platform_windows_dependency_source',
1753
+ sourcePath: 'Knowledge_Base/ragconditiondependencycrossscope/cross platform windows dependency source.md',
1754
+ language: 'en',
1755
+ workspaceId: 'ragconditiondependencycrossscope',
1756
+ corpusId: 'ragconditiondependencycrossscope',
1757
+ content: [
1758
+ '# Cross Platform Windows Dependency Source',
1759
+ 'Cross platform windows dependency source records that the storage dependency is SQLite on the Windows platform.',
1760
+ '',
1761
+ '## Windows Dependency',
1762
+ 'The storage dependency is SQLite on the Windows platform.',
1763
+ ].join('\n'),
1764
+ },
1765
+ {
1766
+ documentId: 'doc_cross_platform_android_dependency_source',
1767
+ sourcePath: 'Knowledge_Base/ragconditiondependencycrossscope/cross platform android dependency source.md',
1768
+ language: 'en',
1769
+ workspaceId: 'ragconditiondependencycrossscope',
1770
+ corpusId: 'ragconditiondependencycrossscope',
1771
+ content: [
1772
+ '# Cross Platform Android Dependency Source',
1773
+ 'Cross platform android dependency source records that the storage dependency is PostgreSQL on the Android platform.',
1774
+ '',
1775
+ '## Android Dependency',
1776
+ 'The storage dependency is PostgreSQL on the Android platform.',
1777
+ ].join('\n'),
1778
+ },
1779
+ {
1780
+ documentId: 'doc_cross_environment_staging_retry_limit_source',
1781
+ sourcePath: 'Knowledge_Base/ragconditionquantitycrossscope/cross environment staging retry limit source.md',
1782
+ language: 'en',
1783
+ workspaceId: 'ragconditionquantitycrossscope',
1784
+ corpusId: 'ragconditionquantitycrossscope',
1785
+ content: [
1786
+ '# Cross Environment Staging Retry Limit Source',
1787
+ 'Cross environment staging retry limit source records that the retry limit is 3 in the staging environment.',
1788
+ '',
1789
+ '## Staging Retry Limit',
1790
+ 'The retry limit is 3 in the staging environment.',
1791
+ ].join('\n'),
1792
+ },
1793
+ {
1794
+ documentId: 'doc_cross_environment_production_retry_limit_source',
1795
+ sourcePath: 'Knowledge_Base/ragconditionquantitycrossscope/cross environment production retry limit source.md',
1796
+ language: 'en',
1797
+ workspaceId: 'ragconditionquantitycrossscope',
1798
+ corpusId: 'ragconditionquantitycrossscope',
1799
+ content: [
1800
+ '# Cross Environment Production Retry Limit Source',
1801
+ 'Cross environment production retry limit source records that the retry limit is 5 in the production environment.',
1802
+ '',
1803
+ '## Production Retry Limit',
1804
+ 'The retry limit is 5 in the production environment.',
1805
+ ].join('\n'),
1806
+ },
1807
+ {
1808
+ documentId: 'doc_cross_version_one_retry_limit_source',
1809
+ sourcePath: 'Knowledge_Base/ragconditionquantitycrossscope/cross version one retry limit source.md',
1810
+ language: 'en',
1811
+ workspaceId: 'ragconditionquantitycrossscope',
1812
+ corpusId: 'ragconditionquantitycrossscope',
1813
+ content: [
1814
+ '# Cross Version One Retry Limit Source',
1815
+ 'Cross version one retry limit source records that the retry limit is 3 in version 1.0.',
1816
+ '',
1817
+ '## Version One Retry Limit',
1818
+ 'The retry limit is 3 in version 1.0.',
1819
+ ].join('\n'),
1820
+ },
1821
+ {
1822
+ documentId: 'doc_cross_version_two_retry_limit_source',
1823
+ sourcePath: 'Knowledge_Base/ragconditionquantitycrossscope/cross version two retry limit source.md',
1824
+ language: 'en',
1825
+ workspaceId: 'ragconditionquantitycrossscope',
1826
+ corpusId: 'ragconditionquantitycrossscope',
1827
+ content: [
1828
+ '# Cross Version Two Retry Limit Source',
1829
+ 'Cross version two retry limit source records that the retry limit is 5 in version 2.0.',
1830
+ '',
1831
+ '## Version Two Retry Limit',
1832
+ 'The retry limit is 5 in version 2.0.',
1833
+ ].join('\n'),
1834
+ },
1835
+ {
1836
+ documentId: 'doc_cross_platform_windows_retry_limit_source',
1837
+ sourcePath: 'Knowledge_Base/ragconditionquantitycrossscope/cross platform windows retry limit source.md',
1838
+ language: 'en',
1839
+ workspaceId: 'ragconditionquantitycrossscope',
1840
+ corpusId: 'ragconditionquantitycrossscope',
1841
+ content: [
1842
+ '# Cross Platform Windows Retry Limit Source',
1843
+ 'Cross platform windows retry limit source records that the retry limit is 3 on the Windows platform.',
1844
+ '',
1845
+ '## Windows Retry Limit',
1846
+ 'The retry limit is 3 on the Windows platform.',
1847
+ ].join('\n'),
1848
+ },
1849
+ {
1850
+ documentId: 'doc_cross_platform_android_retry_limit_source',
1851
+ sourcePath: 'Knowledge_Base/ragconditionquantitycrossscope/cross platform android retry limit source.md',
1852
+ language: 'en',
1853
+ workspaceId: 'ragconditionquantitycrossscope',
1854
+ corpusId: 'ragconditionquantitycrossscope',
1855
+ content: [
1856
+ '# Cross Platform Android Retry Limit Source',
1857
+ 'Cross platform android retry limit source records that the retry limit is 5 on the Android platform.',
1858
+ '',
1859
+ '## Android Retry Limit',
1860
+ 'The retry limit is 5 on the Android platform.',
1861
+ ].join('\n'),
1862
+ },
1863
+ {
1864
+ documentId: 'doc_conflicting_location_probe',
1865
+ sourcePath: 'Knowledge_Base/raglocationconflict/location conflict probe.md',
1866
+ language: 'en',
1867
+ workspaceId: 'raglocationconflict',
1868
+ corpusId: 'raglocationconflict',
1869
+ content: [
1870
+ '# Control Module Location Conflict Probe',
1871
+ 'Control module location conflict probe validates that controlled location contradictions are not flattened into one stable site.',
1872
+ '',
1873
+ '## Module Placement',
1874
+ 'The control module location is Rack A in the primary bay.',
1875
+ '',
1876
+ 'Context paragraph keeps the controlled location conflict inside one scoped section.',
1877
+ '',
1878
+ 'The control module location is Rack B in the field bay.',
1879
+ 'Operators must resolve the active placement record before publishing location guidance.',
1880
+ ].join('\n'),
1881
+ },
1882
+ {
1883
+ documentId: 'doc_nominal_location_full_scan_source',
1884
+ sourcePath: 'Knowledge_Base/raglocationfullscan/nominal location full scan source.md',
1885
+ language: 'en',
1886
+ workspaceId: 'raglocationfullscan',
1887
+ corpusId: 'raglocationfullscan',
1888
+ content: [
1889
+ '# Nominal Location Full Scan Source',
1890
+ 'Nominal location full scan source is the scoped comparison document for full-document location augmentation.',
1891
+ '',
1892
+ 'This opening section is intentionally separate from the remote location statement.',
1893
+ '',
1894
+ 'Local location filler paragraph one keeps the remote appendix away from the matched opening span.',
1895
+ '',
1896
+ 'Local location filler paragraph two keeps the remote appendix away from the matched opening span.',
1897
+ '',
1898
+ 'Local location filler paragraph three keeps the remote appendix away from the matched opening span.',
1899
+ '',
1900
+ 'Local location filler paragraph four keeps the remote appendix away from the matched opening span.',
1901
+ '',
1902
+ 'Local location filler paragraph five keeps the remote appendix away from the matched opening span.',
1903
+ '',
1904
+ 'Local location filler paragraph six keeps the remote appendix away from the matched opening span.',
1905
+ '',
1906
+ '## Remote Nominal Location Appendix',
1907
+ 'The control module location is Rack A in the remote nominal location appendix.',
1908
+ ].join('\n'),
1909
+ },
1910
+ {
1911
+ documentId: 'doc_field_location_full_scan_source',
1912
+ sourcePath: 'Knowledge_Base/raglocationfullscan/field location full scan source.md',
1913
+ language: 'en',
1914
+ workspaceId: 'raglocationfullscan',
1915
+ corpusId: 'raglocationfullscan',
1916
+ content: [
1917
+ '# Field Location Full Scan Source',
1918
+ 'Field location full scan source is the scoped comparison document for full-document location augmentation.',
1919
+ '',
1920
+ 'This opening section is intentionally separate from the remote location statement.',
1921
+ '',
1922
+ 'Local location filler paragraph one keeps the remote appendix away from the matched opening span.',
1923
+ '',
1924
+ 'Local location filler paragraph two keeps the remote appendix away from the matched opening span.',
1925
+ '',
1926
+ 'Local location filler paragraph three keeps the remote appendix away from the matched opening span.',
1927
+ '',
1928
+ 'Local location filler paragraph four keeps the remote appendix away from the matched opening span.',
1929
+ '',
1930
+ 'Local location filler paragraph five keeps the remote appendix away from the matched opening span.',
1931
+ '',
1932
+ 'Local location filler paragraph six keeps the remote appendix away from the matched opening span.',
1933
+ '',
1934
+ '## Remote Field Location Appendix',
1935
+ 'The control module location is Rack B in the remote field location appendix.',
1936
+ ].join('\n'),
1937
+ },
1938
+ {
1939
+ documentId: 'doc_temporal_state_status_probe',
1940
+ sourcePath: 'Knowledge_Base/ragtemporalqualifier/temporal state status probe.md',
1941
+ language: 'en',
1942
+ workspaceId: 'ragtemporalqualifier',
1943
+ corpusId: 'ragtemporalqualifier',
1944
+ content: [
1945
+ '# Temporal State Status Probe',
1946
+ 'Temporal state status probe validates that the migration gate status is enabled in the current release record while historical status facts remain condition-qualified evidence rather than a conflict.',
1947
+ '',
1948
+ '## Gate Status History',
1949
+ 'The migration gate status is enabled in the current release record.',
1950
+ '',
1951
+ 'Operators should answer with the active record while retaining the older record as provenance.',
1952
+ '',
1953
+ 'The migration gate status is disabled in the historical rollback archive.',
1954
+ ].join('\n'),
1955
+ },
1956
+ {
1957
+ documentId: 'doc_temporal_deployment_owner_probe',
1958
+ sourcePath: 'Knowledge_Base/ragtemporalqualifier/temporal deployment owner probe.md',
1959
+ language: 'en',
1960
+ workspaceId: 'ragtemporalqualifier',
1961
+ corpusId: 'ragtemporalqualifier',
1962
+ content: [
1963
+ '# Temporal Deployment Owner Probe',
1964
+ 'Temporal deployment owner probe validates that the deployment owner is Release Ops in the current release record while historical owner facts remain condition-qualified evidence rather than a conflict.',
1965
+ '',
1966
+ '## Deployment Owner History',
1967
+ 'The deployment owner is Release Ops in the current release record.',
1968
+ '',
1969
+ 'Operators should answer with the active owner while retaining the older owner as provenance.',
1970
+ '',
1971
+ 'The deployment owner is Rollback Team in the historical rollback archive.',
1972
+ ].join('\n'),
1973
+ },
1974
+ {
1975
+ documentId: 'doc_environment_scoped_state_status_probe',
1976
+ sourcePath: 'Knowledge_Base/ragenvironmentqualifier/environment scoped state status probe.md',
1977
+ language: 'en',
1978
+ workspaceId: 'ragenvironmentqualifier',
1979
+ corpusId: 'ragenvironmentqualifier',
1980
+ content: [
1981
+ '# Environment Scoped State Status Probe',
1982
+ 'Environment scoped state status probe validates that the migration gate status is enabled in the staging environment while production status facts remain environment-qualified evidence rather than a conflict.',
1983
+ '',
1984
+ '## Gate Status By Environment',
1985
+ 'The migration gate status is enabled in the staging environment.',
1986
+ '',
1987
+ 'Operators should preserve the environment label when comparing deployment records.',
1988
+ '',
1989
+ 'The migration gate status is disabled in the production environment.',
1990
+ ].join('\n'),
1991
+ },
1992
+ {
1993
+ documentId: 'doc_environment_scoped_retry_limit_probe',
1994
+ sourcePath: 'Knowledge_Base/ragenvironmentqualifier/environment scoped retry limit probe.md',
1995
+ language: 'en',
1996
+ workspaceId: 'ragenvironmentqualifier',
1997
+ corpusId: 'ragenvironmentqualifier',
1998
+ content: [
1999
+ '# Environment Scoped Retry Limit Probe',
2000
+ 'Environment scoped retry limit probe validates that the retry limit is 3 in the staging environment while production quantity facts remain environment-qualified evidence rather than a conflict.',
2001
+ '',
2002
+ '## Retry Limit By Environment',
2003
+ 'The retry limit is 3 in the staging environment.',
2004
+ '',
2005
+ 'Operators should preserve the environment label when comparing retry records.',
2006
+ '',
2007
+ 'The retry limit is 5 in the production environment.',
2008
+ ].join('\n'),
2009
+ },
2010
+ {
2011
+ documentId: 'doc_environment_scoped_deployment_owner_probe',
2012
+ sourcePath: 'Knowledge_Base/ragenvironmentqualifier/environment scoped deployment owner probe.md',
2013
+ language: 'en',
2014
+ workspaceId: 'ragenvironmentqualifier',
2015
+ corpusId: 'ragenvironmentqualifier',
2016
+ content: [
2017
+ '# Environment Scoped Deployment Owner Probe',
2018
+ 'Environment scoped deployment owner probe validates that the deployment owner is Release Ops in the staging environment while production owner facts remain environment-qualified evidence rather than a conflict.',
2019
+ '',
2020
+ '## Deployment Owner By Environment',
2021
+ 'The deployment owner is Release Ops in the staging environment.',
2022
+ '',
2023
+ 'Operators should preserve the environment label before comparing owner records.',
2024
+ '',
2025
+ 'The deployment owner is Rollback Team in the production environment.',
2026
+ ].join('\n'),
2027
+ },
2028
+ {
2029
+ documentId: 'doc_version_scoped_state_status_probe',
2030
+ sourcePath: 'Knowledge_Base/ragversionqualifier/version scoped state status probe.md',
2031
+ language: 'en',
2032
+ workspaceId: 'ragversionqualifier',
2033
+ corpusId: 'ragversionqualifier',
2034
+ content: [
2035
+ '# Version Scoped State Status Probe',
2036
+ 'Version scoped state status probe validates that the migration gate status is enabled in version 1.0 while version 2.0 status facts remain version-qualified evidence rather than a conflict.',
2037
+ '',
2038
+ '## Gate Status By Version',
2039
+ 'The migration gate status is enabled in version 1.0.',
2040
+ '',
2041
+ 'Operators should preserve the version label when comparing release records.',
2042
+ '',
2043
+ 'The migration gate status is disabled in version 2.0.',
2044
+ ].join('\n'),
2045
+ },
2046
+ {
2047
+ documentId: 'doc_version_scoped_retry_limit_probe',
2048
+ sourcePath: 'Knowledge_Base/ragversionqualifier/version scoped retry limit probe.md',
2049
+ language: 'en',
2050
+ workspaceId: 'ragversionqualifier',
2051
+ corpusId: 'ragversionqualifier',
2052
+ content: [
2053
+ '# Version Scoped Retry Limit Probe',
2054
+ 'Version scoped retry limit probe validates that the retry limit is 3 in version 1.0 while version 2.0 quantity facts remain version-qualified evidence rather than a conflict.',
2055
+ '',
2056
+ '## Retry Limit By Version',
2057
+ 'The retry limit is 3 in version 1.0.',
2058
+ '',
2059
+ 'Operators should preserve the version label when comparing retry records.',
2060
+ '',
2061
+ 'The retry limit is 5 in version 2.0.',
2062
+ ].join('\n'),
2063
+ },
2064
+ {
2065
+ documentId: 'doc_version_scoped_deployment_owner_probe',
2066
+ sourcePath: 'Knowledge_Base/ragversionqualifier/version scoped deployment owner probe.md',
2067
+ language: 'en',
2068
+ workspaceId: 'ragversionqualifier',
2069
+ corpusId: 'ragversionqualifier',
2070
+ content: [
2071
+ '# Version Scoped Deployment Owner Probe',
2072
+ 'Version scoped deployment owner probe validates that the deployment owner is Release Ops in version 1.0 while version 2.0 owner facts remain version-qualified evidence rather than a conflict.',
2073
+ '',
2074
+ '## Deployment Owner By Version',
2075
+ 'The deployment owner is Release Ops in version 1.0.',
2076
+ '',
2077
+ 'Operators should preserve the version label before comparing owner records.',
2078
+ '',
2079
+ 'The deployment owner is Rollback Team in version 2.0.',
2080
+ ].join('\n'),
2081
+ },
2082
+ {
2083
+ documentId: 'doc_platform_scoped_state_status_probe',
2084
+ sourcePath: 'Knowledge_Base/ragplatformqualifier/platform scoped state status probe.md',
2085
+ language: 'en',
2086
+ workspaceId: 'ragplatformqualifier',
2087
+ corpusId: 'ragplatformqualifier',
2088
+ content: [
2089
+ '# Platform Scoped State Status Probe',
2090
+ 'Platform scoped state status probe validates that the migration gate status is enabled on the Windows platform while Android status facts remain platform-qualified evidence rather than a conflict.',
2091
+ '',
2092
+ '## Gate Status By Platform',
2093
+ 'The migration gate status is enabled on the Windows platform.',
2094
+ '',
2095
+ 'Operators should preserve the platform label when comparing runtime records.',
2096
+ '',
2097
+ 'The migration gate status is disabled on the Android platform.',
2098
+ ].join('\n'),
2099
+ },
2100
+ {
2101
+ documentId: 'doc_platform_scoped_retry_limit_probe',
2102
+ sourcePath: 'Knowledge_Base/ragplatformqualifier/platform scoped retry limit probe.md',
2103
+ language: 'en',
2104
+ workspaceId: 'ragplatformqualifier',
2105
+ corpusId: 'ragplatformqualifier',
2106
+ content: [
2107
+ '# Platform Scoped Retry Limit Probe',
2108
+ 'Platform scoped retry limit probe validates that the retry limit is 3 on the Windows platform while Android quantity facts remain platform-qualified evidence rather than a conflict.',
2109
+ '',
2110
+ '## Retry Limit By Platform',
2111
+ 'The retry limit is 3 on the Windows platform.',
2112
+ '',
2113
+ 'Operators should preserve the platform label when comparing retry records.',
2114
+ '',
2115
+ 'The retry limit is 5 on the Android platform.',
2116
+ ].join('\n'),
2117
+ },
2118
+ {
2119
+ documentId: 'doc_platform_scoped_deployment_owner_probe',
2120
+ sourcePath: 'Knowledge_Base/ragplatformqualifier/platform scoped deployment owner probe.md',
2121
+ language: 'en',
2122
+ workspaceId: 'ragplatformqualifier',
2123
+ corpusId: 'ragplatformqualifier',
2124
+ content: [
2125
+ '# Platform Scoped Deployment Owner Probe',
2126
+ 'Platform scoped deployment owner probe validates that the deployment owner is Release Ops on the Windows platform while Android owner facts remain platform-qualified evidence rather than a conflict.',
2127
+ '',
2128
+ '## Deployment Owner By Platform',
2129
+ 'The deployment owner is Release Ops on the Windows platform.',
2130
+ '',
2131
+ 'Operators should preserve the platform label before comparing owner records.',
2132
+ '',
2133
+ 'The deployment owner is Rollback Team on the Android platform.',
2134
+ ].join('\n'),
2135
+ },
2136
+ {
2137
+ documentId: 'doc_temporal_location_probe',
2138
+ sourcePath: 'Knowledge_Base/ragtemporalqualifier/temporal location probe.md',
2139
+ language: 'en',
2140
+ workspaceId: 'ragtemporalqualifier',
2141
+ corpusId: 'ragtemporalqualifier',
2142
+ content: [
2143
+ '# Temporal Module Placement Probe',
2144
+ 'Temporal module placement probe validates that the control module location is Rack A in the current release record while historical placement facts remain condition-qualified evidence rather than a conflict.',
2145
+ '',
2146
+ '## Module Placement History',
2147
+ 'The control module location is Rack A in the current release record.',
2148
+ '',
2149
+ 'Operators should answer with the active placement while retaining the older placement as provenance.',
2150
+ '',
2151
+ 'The control module location is Rack B in the historical placement archive.',
2152
+ ].join('\n'),
2153
+ },
2154
+ {
2155
+ documentId: 'doc_temporal_release_date_probe',
2156
+ sourcePath: 'Knowledge_Base/ragtemporalqualifier/temporal release date probe.md',
2157
+ language: 'en',
2158
+ workspaceId: 'ragtemporalqualifier',
2159
+ corpusId: 'ragtemporalqualifier',
2160
+ content: [
2161
+ '# Temporal Release Date Probe',
2162
+ 'Temporal release date probe validates that the migration release date is 2026-08-15 in the current release record while historical dates remain condition-qualified evidence rather than a conflict.',
2163
+ '',
2164
+ '## Release Date History',
2165
+ 'The migration release date is 2026-08-15 in the current release record.',
2166
+ '',
2167
+ 'Operators should answer with the current schedule while retaining the older schedule as provenance.',
2168
+ '',
2169
+ 'The migration release date is 2026-07-01 in the historical rollout archive.',
2170
+ ].join('\n'),
2171
+ },
2172
+ {
2173
+ documentId: 'doc_temporal_retry_limit_probe',
2174
+ sourcePath: 'Knowledge_Base/ragtemporalqualifier/temporal retry limit probe.md',
2175
+ language: 'en',
2176
+ workspaceId: 'ragtemporalqualifier',
2177
+ corpusId: 'ragtemporalqualifier',
2178
+ content: [
2179
+ '# Temporal Retry Limit Probe',
2180
+ 'Temporal retry limit probe validates that the retry limit is 3 in the current release record while historical quantity facts remain condition-qualified evidence rather than a conflict.',
2181
+ '',
2182
+ '## Retry Limit History',
2183
+ 'The retry limit is 3 in the current release record.',
2184
+ '',
2185
+ 'Operators should answer with the active limit while retaining the older limit as provenance.',
2186
+ '',
2187
+ 'The retry limit is 5 in the historical rollback archive.',
2188
+ ].join('\n'),
2189
+ },
2190
+ {
2191
+ documentId: 'doc_temporal_planned_release_date_probe',
2192
+ sourcePath: 'Knowledge_Base/ragtemporalqualifier/temporal planned release date probe.md',
2193
+ language: 'en',
2194
+ workspaceId: 'ragtemporalqualifier',
2195
+ corpusId: 'ragtemporalqualifier',
2196
+ content: [
2197
+ '# Temporal Planned Release Date Probe',
2198
+ 'Temporal planned release date probe validates that the migration release date is 2026-08-15 in the current release record while planned roadmap dates remain future-qualified evidence rather than a conflict.',
2199
+ '',
2200
+ '## Release Date Roadmap',
2201
+ 'The migration release date is 2026-08-15 in the current release record.',
2202
+ '',
2203
+ 'Operators should answer with the current schedule while retaining planned roadmap material as future-qualified evidence.',
2204
+ '',
2205
+ 'The migration release date is 2026-09-20 in the planned rollout draft.',
2206
+ ].join('\n'),
2207
+ },
2208
+ {
2209
+ documentId: 'doc_temporal_current_release_source',
2210
+ sourcePath: 'Knowledge_Base/ragtemporalcrossscope/temporal current release source.md',
2211
+ language: 'en',
2212
+ workspaceId: 'ragtemporalcrossscope',
2213
+ corpusId: 'ragtemporalcrossscope',
2214
+ content: [
2215
+ '# Temporal Current Release Source',
2216
+ 'Temporal current release source records that the migration release date is 2026-08-15 in the current release record.',
2217
+ '',
2218
+ '## Current Schedule',
2219
+ 'The migration release date is 2026-08-15 in the current release record.',
2220
+ ].join('\n'),
2221
+ },
2222
+ {
2223
+ documentId: 'doc_temporal_planned_roadmap_source',
2224
+ sourcePath: 'Knowledge_Base/ragtemporalcrossscope/temporal planned roadmap source.md',
2225
+ language: 'en',
2226
+ workspaceId: 'ragtemporalcrossscope',
2227
+ corpusId: 'ragtemporalcrossscope',
2228
+ content: [
2229
+ '# Temporal Planned Roadmap Source',
2230
+ 'Temporal planned roadmap source records that the migration release date is 2026-09-20 in the planned rollout draft.',
2231
+ '',
2232
+ '## Planned Roadmap',
2233
+ 'The migration release date is 2026-09-20 in the planned rollout draft.',
2234
+ ].join('\n'),
2235
+ },
2236
+ {
2237
+ documentId: 'doc_temporal_current_retry_limit_source',
2238
+ sourcePath: 'Knowledge_Base/ragtemporalcrossscope/temporal current retry limit source.md',
2239
+ language: 'en',
2240
+ workspaceId: 'ragtemporalcrossscope',
2241
+ corpusId: 'ragtemporalcrossscope',
2242
+ content: [
2243
+ '# Temporal Current Retry Limit Source',
2244
+ 'Temporal current retry limit source records that the retry limit is 3 in the current release record.',
2245
+ '',
2246
+ '## Current Retry Limit',
2247
+ 'The retry limit is 3 in the current release record.',
2248
+ ].join('\n'),
2249
+ },
2250
+ {
2251
+ documentId: 'doc_temporal_historical_retry_limit_source',
2252
+ sourcePath: 'Knowledge_Base/ragtemporalcrossscope/temporal historical retry limit source.md',
2253
+ language: 'en',
2254
+ workspaceId: 'ragtemporalcrossscope',
2255
+ corpusId: 'ragtemporalcrossscope',
2256
+ content: [
2257
+ '# Temporal Historical Retry Limit Source',
2258
+ 'Temporal historical retry limit source records that the retry limit is 5 in the historical rollback archive.',
2259
+ '',
2260
+ '## Historical Retry Limit',
2261
+ 'The retry limit is 5 in the historical rollback archive.',
2262
+ ].join('\n'),
2263
+ },
2264
+ {
2265
+ documentId: 'doc_multi_document_calibration_tolerance_conflict_probe',
2266
+ sourcePath: 'Knowledge_Base/ragmulticonflict/multi document calibration tolerance conflict probe.md',
2267
+ language: 'en',
2268
+ workspaceId: 'ragmulticonflict',
2269
+ corpusId: 'ragmulticonflict',
2270
+ content: [
2271
+ '# Multi Document Calibration Tolerance Conflict Probe',
2272
+ 'Multi document calibration tolerance conflict probe validates that contradictory scoped facts across documents are not flattened into one stable value.',
2273
+ '',
2274
+ '## Nominal Source',
2275
+ 'The calibration tolerance is +/-0.10 mm in the nominal record.',
2276
+ 'Operators must compare this source against field evidence before publishing a tolerance value.',
2277
+ ].join('\n'),
2278
+ },
2279
+ {
2280
+ documentId: 'doc_field_calibration_tolerance_conflict_evidence',
2281
+ sourcePath: 'Knowledge_Base/ragmulticonflict/field calibration tolerance conflict evidence.md',
2282
+ language: 'en',
2283
+ workspaceId: 'ragmulticonflict',
2284
+ corpusId: 'ragmulticonflict',
2285
+ content: [
2286
+ '# Field Calibration Tolerance Conflict Evidence',
2287
+ 'Multi document calibration tolerance conflict probe field evidence records the field-side tolerance statement.',
2288
+ '',
2289
+ '## Field Source',
2290
+ 'The calibration tolerance is +/-0.50 mm in the field record.',
2291
+ 'Operators must resolve the active source before publishing a stable calibration tolerance.',
2292
+ ].join('\n'),
2293
+ },
2294
+ {
2295
+ documentId: 'doc_nominal_retry_attempts_quantity_conflict_probe',
2296
+ sourcePath: 'Knowledge_Base/ragquantitymulticonflict/nominal retry attempts quantity conflict probe.md',
2297
+ language: 'en',
2298
+ workspaceId: 'ragquantitymulticonflict',
2299
+ corpusId: 'ragquantitymulticonflict',
2300
+ content: [
2301
+ '# Nominal Retry Attempts Quantity Conflict Probe',
2302
+ 'Nominal retry attempts quantity conflict probe validates that plural unitless quantity facts across documents are not flattened into one stable count.',
2303
+ '',
2304
+ '## Nominal Retry Source',
2305
+ 'The retry attempts are 3 in the nominal retry record.',
2306
+ 'Operators must compare this source against field evidence before publishing a retry-attempt count.',
2307
+ ].join('\n'),
2308
+ },
2309
+ {
2310
+ documentId: 'doc_field_retry_attempts_quantity_conflict_evidence',
2311
+ sourcePath: 'Knowledge_Base/ragquantitymulticonflict/field retry attempts quantity conflict evidence.md',
2312
+ language: 'en',
2313
+ workspaceId: 'ragquantitymulticonflict',
2314
+ corpusId: 'ragquantitymulticonflict',
2315
+ content: [
2316
+ '# Field Retry Attempts Quantity Conflict Evidence',
2317
+ 'Field retry attempts quantity conflict evidence records the field-side plural retry quantity.',
2318
+ '',
2319
+ '## Field Retry Source',
2320
+ 'The retry attempts are 5 in the field retry record.',
2321
+ 'Operators must resolve the active retry source before publishing a stable retry-attempt count.',
2322
+ ].join('\n'),
2323
+ },
2324
+ {
2325
+ documentId: 'doc_nominal_full_scan_source',
2326
+ sourcePath: 'Knowledge_Base/ragfullscan/nominal full scan source.md',
2327
+ language: 'en',
2328
+ workspaceId: 'ragfullscan',
2329
+ corpusId: 'ragfullscan',
2330
+ content: [
2331
+ '# Nominal Full Scan Source',
2332
+ 'Nominal full scan source is the scoped document anchor for full-document augmentation.',
2333
+ '',
2334
+ 'This opening section is intentionally separate from the remote tolerance statement.',
2335
+ '',
2336
+ 'Local filler paragraph one keeps the remote appendix away from the matched opening span.',
2337
+ '',
2338
+ 'Local filler paragraph two keeps the remote appendix away from the matched opening span.',
2339
+ '',
2340
+ 'Local filler paragraph three keeps the remote appendix away from the matched opening span.',
2341
+ '',
2342
+ 'Local filler paragraph four keeps the remote appendix away from the matched opening span.',
2343
+ '',
2344
+ 'Local filler paragraph five keeps the remote appendix away from the matched opening span.',
2345
+ '',
2346
+ 'Local filler paragraph six keeps the remote appendix away from the matched opening span.',
2347
+ '',
2348
+ '## Remote Nominal Appendix',
2349
+ 'The calibration tolerance is +/-0.10 mm in the remote nominal appendix.',
2350
+ ].join('\n'),
2351
+ },
2352
+ {
2353
+ documentId: 'doc_field_full_scan_source',
2354
+ sourcePath: 'Knowledge_Base/ragfullscan/field full scan source.md',
2355
+ language: 'en',
2356
+ workspaceId: 'ragfullscan',
2357
+ corpusId: 'ragfullscan',
2358
+ content: [
2359
+ '# Field Full Scan Source',
2360
+ 'Field full scan source is the scoped comparison document for full-document augmentation.',
2361
+ '',
2362
+ 'This opening section is intentionally separate from the remote tolerance statement.',
2363
+ '',
2364
+ 'Local filler paragraph one keeps the remote appendix away from the matched opening span.',
2365
+ '',
2366
+ 'Local filler paragraph two keeps the remote appendix away from the matched opening span.',
2367
+ '',
2368
+ 'Local filler paragraph three keeps the remote appendix away from the matched opening span.',
2369
+ '',
2370
+ 'Local filler paragraph four keeps the remote appendix away from the matched opening span.',
2371
+ '',
2372
+ 'Local filler paragraph five keeps the remote appendix away from the matched opening span.',
2373
+ '',
2374
+ 'Local filler paragraph six keeps the remote appendix away from the matched opening span.',
2375
+ '',
2376
+ '## Remote Field Appendix',
2377
+ 'The calibration tolerance is +/-0.50 mm in the remote field appendix.',
2378
+ ].join('\n'),
2379
+ },
2380
+ {
2381
+ documentId: 'doc_repeated_snippet_target_probe',
2382
+ sourcePath: 'Knowledge_Base/ragrepeatedspan/repeated snippet target section.md',
2383
+ language: 'en',
2384
+ workspaceId: 'ragrepeatedspan',
2385
+ corpusId: 'ragrepeatedspan',
2386
+ content: [
2387
+ '# Repeated Snippet Target Section',
2388
+ 'Repeated snippet target probe validates source anchoring when the same clause appears in multiple sections.',
2389
+ '',
2390
+ '## Repeated Snippet Distractor Section',
2391
+ 'The repeated snippet uses shared repeated wording.',
2392
+ 'Distractor section context belongs to the first occurrence and must not guide the target answer.',
2393
+ '',
2394
+ '## Repeated Snippet Target Section',
2395
+ 'The repeated snippet uses shared repeated wording.',
2396
+ 'Target section context says the second occurrence controls the answer.',
2397
+ ].join('\n'),
2398
+ },
2399
+ {
2400
+ documentId: 'doc_graphintent_brittle_glass_vessel',
2401
+ sourcePath: 'Knowledge_Base/graphintent/brittle glass vessel.md',
2402
+ language: 'en',
2403
+ workspaceId: 'graphintent',
2404
+ corpusId: 'graphintent',
2405
+ content: [
2406
+ '# Brittle Glass Vessel',
2407
+ 'Brittle glass vessel water container material wall stiffness clarity fracture comparison impact tolerance.',
2408
+ ].join('\n'),
2409
+ },
2410
+ {
2411
+ documentId: 'doc_graphintent_procedural_calibration_sequence',
2412
+ sourcePath: 'Knowledge_Base/graphintent/procedural calibration sequence.md',
2413
+ language: 'en',
2414
+ workspaceId: 'graphintent',
2415
+ corpusId: 'graphintent',
2416
+ content: [
2417
+ '# Procedural Calibration Sequence',
2418
+ 'Procedural calibration sequence brittle glass vessel water container material wall stiffness clarity fracture comparison impact tolerance rinse align fill record.',
2419
+ ].join('\n'),
2420
+ },
2421
+ {
2422
+ documentId: 'doc_graphintent_ductile_polymer_cup',
2423
+ sourcePath: 'Knowledge_Base/graphintent/ductile polymer cup analogy.md',
2424
+ language: 'en',
2425
+ workspaceId: 'graphintent',
2426
+ corpusId: 'graphintent',
2427
+ content: [
2428
+ '# Ductile Polymer Cup Analogy',
2429
+ 'Ductile polymer cup water container material wall comparison impact tolerance flexible fracture resistance.',
2430
+ ].join('\n'),
2431
+ },
2432
+ {
2433
+ documentId: 'doc_graphintent_reusable_polymer_vessel',
2434
+ sourcePath: 'Knowledge_Base/graphintent/reusable polymer vessel analogy.md',
2435
+ language: 'en',
2436
+ workspaceId: 'graphintent',
2437
+ corpusId: 'graphintent',
2438
+ content: [
2439
+ '# Reusable Polymer Vessel Analogy',
2440
+ 'Reusable polymer vessel water container material wall comparison impact tolerance flexible ductility stiffness tradeoff.',
2441
+ ].join('\n'),
2442
+ },
2443
+ {
2444
+ documentId: 'doc_context_budget_probe',
2445
+ sourcePath: 'Knowledge_Base/contextbudget/context budget probe.md',
2446
+ language: 'en',
2447
+ workspaceId: 'contextbudget',
2448
+ corpusId: 'contextbudget',
2449
+ content: buildContextBudgetProbeContent(),
2450
+ },
2451
+ {
2452
+ documentId: 'doc_overflow_budget_probe',
2453
+ sourcePath: 'Knowledge_Base/contextoverflow/overflow budget probe.md',
2454
+ language: 'en',
2455
+ workspaceId: 'contextoverflow',
2456
+ corpusId: 'contextoverflow',
2457
+ content: buildOverflowBudgetProbeContent(),
2458
+ },
2459
+ {
2460
+ documentId: 'doc_causal_answer_profile_probe',
2461
+ sourcePath: 'Knowledge_Base/ragcausalprofile/causal answer profile probe.md',
2462
+ language: 'en',
2463
+ workspaceId: 'ragcausalprofile',
2464
+ corpusId: 'ragcausalprofile',
2465
+ content: buildCausalAnswerProfileProbeContent(),
2466
+ },
2467
+ ];
2468
+ }
2469
+ function countRagSourceDecisionStatuses(decisions) {
2470
+ return (Array.isArray(decisions) ? decisions : []).reduce((counts, decision) => {
2471
+ const status = String(decision?.status || '').trim();
2472
+ if (!status) {
2473
+ return counts;
2474
+ }
2475
+ counts[status] = (counts[status] || 0) + 1;
2476
+ return counts;
2477
+ }, {});
2478
+ }
2479
+ function expectRagBudget(actual, expected) {
2480
+ if (!expected) {
2481
+ return;
2482
+ }
2483
+ expect(actual).toBeDefined();
2484
+ if (typeof expected.maxFragments === 'number') {
2485
+ expect(actual?.maxFragments).toBe(expected.maxFragments);
2486
+ }
2487
+ if (typeof expected.maxCharsPerFragment === 'number') {
2488
+ expect(actual?.maxCharsPerFragment).toBe(expected.maxCharsPerFragment);
2489
+ }
2490
+ if (typeof expected.maxTotalChars === 'number') {
2491
+ expect(actual?.maxTotalChars).toBe(expected.maxTotalChars);
2492
+ }
2493
+ }
2494
+ function countFullDocumentRagFragmentsByRole(response) {
2495
+ return (response.trace.ragContextPack?.fragments || []).reduce((counts, fragment) => {
2496
+ if (fragment.sourceBoundary !== 'full_document') {
2497
+ return counts;
2498
+ }
2499
+ counts[fragment.role] = (counts[fragment.role] || 0) + 1;
2500
+ return counts;
2501
+ }, {});
2502
+ }
2503
+ function collectRagFailureStages(response) {
2504
+ return (response.trace.ragFailureClassifications || [])
2505
+ .map((classification) => classification.stage)
2506
+ .filter((stage) => Boolean(stage));
2507
+ }
2508
+ function expectReasonFragments(observedReasons, requiredFragments) {
2509
+ if (!requiredFragments || requiredFragments.length <= 0) {
2510
+ return;
2511
+ }
2512
+ const reasons = Array.isArray(observedReasons)
2513
+ ? observedReasons.map((reason) => String(reason || ''))
2514
+ : [];
2515
+ requiredFragments.forEach((fragment) => {
2516
+ expect(reasons.some((reason) => reason.includes(fragment))).toBe(true);
2517
+ });
2518
+ }
2519
+ function graphSuccessorWindow(response) {
2520
+ const graphContext = response.trace.graphContext;
2521
+ return Array.isArray(graphContext?.successorWindow) ? graphContext.successorWindow : [];
2522
+ }
2523
+ function graphSuccessorTitles(response) {
2524
+ return graphSuccessorWindow(response)
2525
+ .map((node) => String(node?.title || '').trim())
2526
+ .filter(Boolean);
2527
+ }
2528
+ function graphSuccessorRelationKinds(response) {
2529
+ return graphSuccessorWindow(response)
2530
+ .map((node) => String(node?.relationKind || '').trim())
2531
+ .filter(Boolean);
2532
+ }
2533
+ function graphNeighborFragmentTitles(response) {
2534
+ return (response.trace.ragContextPack?.fragments || [])
2535
+ .filter((fragment) => fragment.role === 'graph_neighbor_support')
2536
+ .map((fragment) => String(fragment.title || '').trim())
2537
+ .filter(Boolean);
2538
+ }
2539
+ function graphDiagnostics(response) {
2540
+ const graphContext = response.trace.graphContext;
2541
+ return graphContext?.diagnostics && typeof graphContext.diagnostics === 'object'
2542
+ ? graphContext.diagnostics
2543
+ : {};
2544
+ }
2545
+ function caseNeedsGraphOpsStore(caseEntry) {
2546
+ const expected = caseEntry.expected;
2547
+ return Boolean(expected.requiredFirstGraphSuccessorTitle
2548
+ || (expected.requiredGraphSuccessorTitles && expected.requiredGraphSuccessorTitles.length > 0)
2549
+ || (expected.forbiddenGraphSuccessorTitles && expected.forbiddenGraphSuccessorTitles.length > 0)
2550
+ || (expected.requiredGraphSuccessorRelationKinds && expected.requiredGraphSuccessorRelationKinds.length > 0)
2551
+ || typeof expected.minimumGraphIntentAlignedPredecessorCandidates === 'number'
2552
+ || typeof expected.minimumGraphIntentAlignedSuccessorCandidates === 'number'
2553
+ || typeof expected.minimumGraphIntentMisalignedPredecessorCandidates === 'number'
2554
+ || typeof expected.minimumGraphIntentMisalignedSuccessorCandidates === 'number'
2555
+ || typeof expected.expectedGraphUsedMisalignedPredecessorFallback === 'boolean'
2556
+ || typeof expected.expectedGraphUsedMisalignedSuccessorFallback === 'boolean');
2557
+ }
2558
+ function createRegressionPlatform(caseEntry) {
2559
+ if (!caseNeedsGraphOpsStore(caseEntry)) {
2560
+ return {
2561
+ platform: new KnowledgeLearningPlatform_1.KnowledgeLearningPlatform(() => new Date('2026-06-18T00:00:00.000Z')),
2562
+ cleanup: () => { },
2563
+ };
2564
+ }
2565
+ const tempDir = fs.mkdtempSync(path.join(process.cwd(), 'tmp-knowledge-conversation-regression-'));
2566
+ const store = (0, store_1.createKnowledgeGraphStore)({
2567
+ backend: 'file',
2568
+ filePath: path.join(tempDir, 'knowledge_graph.snapshot.json'),
2569
+ });
2570
+ return {
2571
+ platform: new KnowledgeLearningPlatform_1.KnowledgeLearningPlatform({
2572
+ nowProvider: () => new Date('2026-06-18T00:00:00.000Z'),
2573
+ store,
2574
+ autoPersist: true,
2575
+ }),
2576
+ cleanup: () => {
2577
+ fs.rmSync(tempDir, { recursive: true, force: true });
2578
+ },
2579
+ };
2580
+ }
2581
+ describe('KnowledgeWorkspaceConversationRegression', () => {
2582
+ test('case ids stay unique', () => {
2583
+ const caseIds = KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES.map((entry) => entry.id);
2584
+ expect(new Set(caseIds).size).toBe(caseIds.length);
2585
+ });
2586
+ test('registers a runtime provider timeout fallback case', () => {
2587
+ expect(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES).toEqual(expect.arrayContaining([
2588
+ expect.objectContaining({
2589
+ id: 'contextoverflow_timeout_provider_judge_fallback_en',
2590
+ runtimeProviderFixture: 'timeout',
2591
+ expected: expect.objectContaining({
2592
+ expectedRagDeterministic: true,
2593
+ expectedRagLlmJudgeUsed: false,
2594
+ expectedRagRecoveryAttempted: true,
2595
+ runtimeRequiredRagRecoveryBeforeReasonFragments: ['llm_judge_failed'],
2596
+ }),
2597
+ }),
2598
+ ]));
2599
+ });
2600
+ test('registers a compare-intent graph neighbor selection probe', () => {
2601
+ expect(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES).toEqual(expect.arrayContaining([
2602
+ expect.objectContaining({
2603
+ id: 'graphintent_compare_neighbor_selection_en',
2604
+ expected: expect.objectContaining({
2605
+ requiredGraphSuccessorTitles: [
2606
+ 'Ductile Polymer Cup Analogy',
2607
+ 'Reusable Polymer Vessel Analogy',
2608
+ ],
2609
+ minimumRagFullDocumentFragmentCounts: {
2610
+ graph_neighbor_support: 1,
2611
+ },
2612
+ forbiddenGraphSuccessorTitles: ['Procedural Calibration Sequence'],
2613
+ requiredGraphSuccessorRelationKinds: ['analogy'],
2614
+ forbiddenGraphNeighborFragmentTitles: ['Procedural Calibration Sequence'],
2615
+ minimumGraphIntentAlignedSuccessorCandidates: 2,
2616
+ minimumGraphIntentMisalignedSuccessorCandidates: 1,
2617
+ expectedGraphUsedMisalignedSuccessorFallback: false,
2618
+ }),
2619
+ }),
2620
+ ]));
2621
+ });
2622
+ test('registers a runtime graph-neighbor source-missing hard-negative probe', () => {
2623
+ expect(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES).toEqual(expect.arrayContaining([
2624
+ expect.objectContaining({
2625
+ id: 'graphintent_missing_neighbor_source_window_en',
2626
+ runtimeUnavailableSourcePaths: expect.arrayContaining([
2627
+ 'Knowledge_Base/graphintent/ductile polymer cup analogy.md',
2628
+ 'Knowledge_Base/graphintent/reusable polymer vessel analogy.md',
2629
+ ]),
2630
+ expected: expect.objectContaining({
2631
+ runtimeAcceptedRagSufficiencyStatuses: ['borderline'],
2632
+ runtimeAcceptedRagDegradationStates: ['partial_coverage'],
2633
+ minimumRagSourceDecisionStatusCounts: {
2634
+ source_window_unavailable: 1,
2635
+ },
2636
+ inMemoryMinimumRagSourceDecisionStatusCounts: {
2637
+ read: 1,
2638
+ },
2639
+ runtimeRequiredRagFailureStages: ['parsing_source', 'graph_evidence'],
2640
+ runtimeRequiredRagSufficiencyReasonFragments: ['graph_neighbor_evidence_missing'],
2641
+ runtimeRequiredRagSourceDecisionReasonFragments: ['graph_neighbor_support'],
2642
+ expectedRagRecoveryAttempted: true,
2643
+ inMemoryExpectedRagRecoveryAttempted: false,
2644
+ minimumGraphIntentAlignedSuccessorCandidates: 2,
2645
+ minimumGraphIntentMisalignedSuccessorCandidates: 1,
2646
+ expectedGraphUsedMisalignedSuccessorFallback: false,
2647
+ }),
2648
+ }),
2649
+ ]));
2650
+ });
2651
+ test('registers a runtime multi-neighbor source-loss probe', () => {
2652
+ expect(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES).toEqual(expect.arrayContaining([
2653
+ expect.objectContaining({
2654
+ id: 'graphintent_multi_neighbor_source_loss_en',
2655
+ runtimeUnavailableSourcePaths: expect.arrayContaining([
2656
+ 'Knowledge_Base/graphintent/ductile polymer cup analogy.md',
2657
+ 'Knowledge_Base/graphintent/reusable polymer vessel analogy.md',
2658
+ ]),
2659
+ expected: expect.objectContaining({
2660
+ runtimeAcceptedRagSufficiencyStatuses: ['borderline'],
2661
+ runtimeAcceptedRagDegradationStates: ['partial_coverage'],
2662
+ minimumRagSourceDecisionStatusCounts: {
2663
+ source_window_unavailable: 2,
2664
+ },
2665
+ inMemoryMinimumRagSourceDecisionStatusCounts: {
2666
+ read: 1,
2667
+ },
2668
+ runtimeRequiredRagFailureStages: ['parsing_source', 'graph_evidence'],
2669
+ runtimeRequiredRagSufficiencyReasonFragments: ['graph_neighbor_evidence_missing'],
2670
+ runtimeRequiredRagSourceDecisionReasonFragments: ['graph_neighbor_support'],
2671
+ expectedRagRecoveryAttempted: true,
2672
+ inMemoryExpectedRagRecoveryAttempted: false,
2673
+ requiredGraphSuccessorTitles: [
2674
+ 'Ductile Polymer Cup Analogy',
2675
+ 'Reusable Polymer Vessel Analogy',
2676
+ ],
2677
+ requiredGraphSuccessorRelationKinds: ['analogy'],
2678
+ }),
2679
+ }),
2680
+ ]));
2681
+ });
2682
+ test('registers waterglass RAG claim-gate and preamble-leak runtime acceptance', () => {
2683
+ const expectedWaterglassReleaseAcceptance = expect.objectContaining({
2684
+ runtimeAnswerReleaseDecision: 'revise',
2685
+ runtimeRequiredFailedGateIds: expect.arrayContaining([
2686
+ 'query_intent_alignment',
2687
+ 'rag_claim_citation_support',
2688
+ ]),
2689
+ answerMustNotContain: expect.arrayContaining([
2690
+ '所有推理过程',
2691
+ '最终输出',
2692
+ '遵从您的指示',
2693
+ ]),
2694
+ });
2695
+ expect(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES).toEqual(expect.arrayContaining([
2696
+ expect.objectContaining({
2697
+ id: 'waterglass_explicit_scope_compact_zh',
2698
+ expected: expectedWaterglassReleaseAcceptance,
2699
+ }),
2700
+ expect.objectContaining({
2701
+ id: 'waterglass_explicit_scope_spaced_zh',
2702
+ expected: expectedWaterglassReleaseAcceptance,
2703
+ }),
2704
+ ]));
2705
+ });
2706
+ test('registers causal and explicit deep RAG answer profile budget probes', () => {
2707
+ expect(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES).toEqual(expect.arrayContaining([
2708
+ expect.objectContaining({
2709
+ id: 'causal_answer_profile_budget_en',
2710
+ query: 'why causal answer profile probe needs bounded evidence?',
2711
+ expected: expect.objectContaining({
2712
+ expectedRagBudget: {
2713
+ maxFragments: 20,
2714
+ maxCharsPerFragment: 1500,
2715
+ maxTotalChars: 7600,
2716
+ },
2717
+ expectedRagRecoveryAttempted: false,
2718
+ requirePlannerTitleHitDocumentIds: false,
2719
+ }),
2720
+ }),
2721
+ expect.objectContaining({
2722
+ id: 'contextoverflow_deep_profile_budget_en',
2723
+ query: 'explain in detail overflow budget probe',
2724
+ expected: expect.objectContaining({
2725
+ expectedRagBudget: {
2726
+ maxFragments: 24,
2727
+ maxCharsPerFragment: 1600,
2728
+ maxTotalChars: 9000,
2729
+ },
2730
+ expectedRagRecoveryAttempted: false,
2731
+ }),
2732
+ }),
2733
+ ]));
2734
+ });
2735
+ test('registers conflicting evidence hard-negative probes', () => {
2736
+ expect(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES).toEqual(expect.arrayContaining([
2737
+ expect.objectContaining({
2738
+ id: 'conflicting_adjacent_evidence_probe_en',
2739
+ expected: expect.objectContaining({
2740
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2741
+ acceptedRagSufficiencyStatuses: ['borderline'],
2742
+ acceptedRagDegradationStates: ['conflict'],
2743
+ requiredRagFailureStages: ['context_assembly'],
2744
+ answerMustNotContain: expect.arrayContaining([
2745
+ 'single stable calibration tolerance',
2746
+ ]),
2747
+ }),
2748
+ }),
2749
+ expect.objectContaining({
2750
+ id: 'conflicting_nonadjacent_section_evidence_probe_en',
2751
+ expected: expect.objectContaining({
2752
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2753
+ acceptedRagSufficiencyStatuses: ['borderline'],
2754
+ acceptedRagDegradationStates: ['conflict'],
2755
+ requiredRagFailureStages: ['context_assembly'],
2756
+ answerMustNotContain: expect.arrayContaining([
2757
+ 'single stable calibration tolerance',
2758
+ ]),
2759
+ }),
2760
+ }),
2761
+ expect.objectContaining({
2762
+ id: 'conflicting_release_date_evidence_probe_en',
2763
+ expected: expect.objectContaining({
2764
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2765
+ acceptedRagSufficiencyStatuses: ['borderline'],
2766
+ acceptedRagDegradationStates: ['conflict'],
2767
+ requiredRagFailureStages: ['context_assembly'],
2768
+ answerMustNotContain: expect.arrayContaining([
2769
+ 'stable migration release date',
2770
+ ]),
2771
+ }),
2772
+ }),
2773
+ expect.objectContaining({
2774
+ id: 'full_document_date_scan_remote_conflict_probe_en',
2775
+ expected: expect.objectContaining({
2776
+ minCitations: 2,
2777
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2778
+ acceptedRagSufficiencyStatuses: ['borderline'],
2779
+ acceptedRagDegradationStates: ['conflict'],
2780
+ requiredRagFailureStages: ['context_assembly'],
2781
+ answerMustContain: expect.arrayContaining(['migration release date', '2026-07-01', '2026-08-15']),
2782
+ answerMustNotContain: expect.arrayContaining([
2783
+ 'stable migration release date',
2784
+ ]),
2785
+ }),
2786
+ }),
2787
+ expect.objectContaining({
2788
+ id: 'conflicting_state_status_evidence_probe_en',
2789
+ expected: expect.objectContaining({
2790
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2791
+ acceptedRagSufficiencyStatuses: ['borderline'],
2792
+ acceptedRagDegradationStates: ['conflict'],
2793
+ requiredRagFailureStages: ['context_assembly'],
2794
+ answerMustContain: expect.arrayContaining(['enabled', 'disabled']),
2795
+ answerMustNotContain: expect.arrayContaining([
2796
+ 'stable migration gate status',
2797
+ ]),
2798
+ }),
2799
+ }),
2800
+ expect.objectContaining({
2801
+ id: 'full_document_state_scan_remote_conflict_probe_en',
2802
+ expected: expect.objectContaining({
2803
+ minCitations: 2,
2804
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2805
+ acceptedRagSufficiencyStatuses: ['borderline'],
2806
+ acceptedRagDegradationStates: ['conflict'],
2807
+ requiredRagFailureStages: ['context_assembly'],
2808
+ answerMustContain: expect.arrayContaining(['migration gate status', 'enabled', 'disabled']),
2809
+ answerMustNotContain: expect.arrayContaining([
2810
+ 'stable migration gate status',
2811
+ ]),
2812
+ }),
2813
+ }),
2814
+ expect.objectContaining({
2815
+ id: 'conflicting_quantity_limit_evidence_probe_en',
2816
+ expected: expect.objectContaining({
2817
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2818
+ acceptedRagSufficiencyStatuses: ['borderline'],
2819
+ acceptedRagDegradationStates: ['conflict'],
2820
+ requiredRagFailureStages: ['context_assembly'],
2821
+ answerMustContain: expect.arrayContaining(['retry limit', '3', '5']),
2822
+ answerMustNotContain: expect.arrayContaining([
2823
+ 'stable retry limit',
2824
+ ]),
2825
+ }),
2826
+ }),
2827
+ expect.objectContaining({
2828
+ id: 'full_document_quantity_scan_remote_conflict_probe_en',
2829
+ expected: expect.objectContaining({
2830
+ minCitations: 2,
2831
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2832
+ acceptedRagSufficiencyStatuses: ['borderline'],
2833
+ acceptedRagDegradationStates: ['conflict'],
2834
+ requiredRagFailureStages: ['context_assembly'],
2835
+ answerMustContain: expect.arrayContaining(['retry limit', '3', '5']),
2836
+ answerMustNotContain: expect.arrayContaining([
2837
+ 'stable retry limit',
2838
+ ]),
2839
+ }),
2840
+ }),
2841
+ expect.objectContaining({
2842
+ id: 'conflicting_ownership_identity_evidence_probe_en',
2843
+ expected: expect.objectContaining({
2844
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2845
+ acceptedRagSufficiencyStatuses: ['borderline'],
2846
+ acceptedRagDegradationStates: ['conflict'],
2847
+ requiredRagFailureStages: ['context_assembly'],
2848
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'Rollback Team']),
2849
+ answerMustNotContain: expect.arrayContaining([
2850
+ 'stable deployment owner',
2851
+ ]),
2852
+ }),
2853
+ }),
2854
+ expect.objectContaining({
2855
+ id: 'full_document_identity_scan_remote_conflict_probe_en',
2856
+ expected: expect.objectContaining({
2857
+ minCitations: 2,
2858
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2859
+ acceptedRagSufficiencyStatuses: ['borderline'],
2860
+ acceptedRagDegradationStates: ['conflict'],
2861
+ requiredRagFailureStages: ['context_assembly'],
2862
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'Rollback Team']),
2863
+ answerMustNotContain: expect.arrayContaining([
2864
+ 'stable deployment owner',
2865
+ ]),
2866
+ }),
2867
+ }),
2868
+ expect.objectContaining({
2869
+ id: 'conflicting_multi_document_ownership_identity_evidence_probe_en',
2870
+ expected: expect.objectContaining({
2871
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2872
+ acceptedRagSufficiencyStatuses: ['borderline'],
2873
+ acceptedRagDegradationStates: ['conflict'],
2874
+ requiredRagFailureStages: ['context_assembly'],
2875
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'Rollback Team']),
2876
+ answerMustNotContain: expect.arrayContaining([
2877
+ 'stable deployment owner',
2878
+ ]),
2879
+ }),
2880
+ }),
2881
+ expect.objectContaining({
2882
+ id: 'conflicting_endpoint_evidence_probe_en',
2883
+ expected: expect.objectContaining({
2884
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2885
+ acceptedRagSufficiencyStatuses: ['borderline'],
2886
+ acceptedRagDegradationStates: ['conflict'],
2887
+ requiredRagFailureStages: ['context_assembly'],
2888
+ answerMustContain: expect.arrayContaining(['webhook endpoint', '/api/v1/hooks', '/api/v2/hooks']),
2889
+ answerMustNotContain: expect.arrayContaining([
2890
+ 'stable webhook endpoint',
2891
+ ]),
2892
+ }),
2893
+ }),
2894
+ expect.objectContaining({
2895
+ id: 'full_document_endpoint_scan_remote_conflict_probe_en',
2896
+ expected: expect.objectContaining({
2897
+ minCitations: 2,
2898
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2899
+ acceptedRagSufficiencyStatuses: ['borderline'],
2900
+ acceptedRagDegradationStates: ['conflict'],
2901
+ requiredRagFailureStages: ['context_assembly'],
2902
+ answerMustContain: expect.arrayContaining(['webhook endpoint', '/api/v1/hooks', '/api/v2/hooks']),
2903
+ answerMustNotContain: expect.arrayContaining([
2904
+ 'stable webhook endpoint',
2905
+ ]),
2906
+ }),
2907
+ }),
2908
+ expect.objectContaining({
2909
+ id: 'environment_scoped_endpoint_probe_en',
2910
+ expected: expect.objectContaining({
2911
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
2912
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
2913
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
2914
+ acceptedRagDegradationStates: ['none'],
2915
+ answerMustContain: expect.arrayContaining(['webhook endpoint', '/api/staging/hooks', 'staging']),
2916
+ answerMustNotContain: expect.arrayContaining([
2917
+ 'Conflicting evidence',
2918
+ 'stable webhook endpoint',
2919
+ ]),
2920
+ }),
2921
+ }),
2922
+ expect.objectContaining({
2923
+ id: 'conflicting_dependency_evidence_probe_en',
2924
+ expected: expect.objectContaining({
2925
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2926
+ acceptedRagSufficiencyStatuses: ['borderline'],
2927
+ acceptedRagDegradationStates: ['conflict'],
2928
+ requiredRagFailureStages: ['context_assembly'],
2929
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'PostgreSQL']),
2930
+ answerMustNotContain: expect.arrayContaining([
2931
+ 'stable storage dependency',
2932
+ ]),
2933
+ }),
2934
+ }),
2935
+ expect.objectContaining({
2936
+ id: 'environment_scoped_dependency_probe_en',
2937
+ expected: expect.objectContaining({
2938
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
2939
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
2940
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
2941
+ acceptedRagDegradationStates: ['none'],
2942
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'staging']),
2943
+ answerMustNotContain: expect.arrayContaining([
2944
+ 'Conflicting evidence',
2945
+ 'stable storage dependency',
2946
+ ]),
2947
+ }),
2948
+ }),
2949
+ expect.objectContaining({
2950
+ id: 'conflicting_multi_document_dependency_evidence_probe_en',
2951
+ expected: expect.objectContaining({
2952
+ minCitations: 2,
2953
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2954
+ acceptedRagSufficiencyStatuses: ['borderline'],
2955
+ acceptedRagDegradationStates: ['conflict'],
2956
+ requiredRagFailureStages: ['context_assembly'],
2957
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'PostgreSQL']),
2958
+ answerMustNotContain: expect.arrayContaining([
2959
+ 'stable storage dependency',
2960
+ ]),
2961
+ }),
2962
+ }),
2963
+ expect.objectContaining({
2964
+ id: 'full_document_dependency_scan_remote_conflict_probe_en',
2965
+ expected: expect.objectContaining({
2966
+ minCitations: 2,
2967
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2968
+ acceptedRagSufficiencyStatuses: ['borderline'],
2969
+ acceptedRagDegradationStates: ['conflict'],
2970
+ requiredRagFailureStages: ['context_assembly'],
2971
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'PostgreSQL']),
2972
+ answerMustNotContain: expect.arrayContaining([
2973
+ 'stable storage dependency',
2974
+ ]),
2975
+ }),
2976
+ }),
2977
+ expect.objectContaining({
2978
+ id: 'conflicting_format_evidence_probe_en',
2979
+ expected: expect.objectContaining({
2980
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2981
+ acceptedRagSufficiencyStatuses: ['borderline'],
2982
+ acceptedRagDegradationStates: ['conflict'],
2983
+ requiredRagFailureStages: ['context_assembly'],
2984
+ answerMustContain: expect.arrayContaining(['payload format', 'JSON', 'YAML']),
2985
+ answerMustNotContain: expect.arrayContaining([
2986
+ 'stable payload format',
2987
+ ]),
2988
+ }),
2989
+ }),
2990
+ expect.objectContaining({
2991
+ id: 'full_document_format_scan_remote_conflict_probe_en',
2992
+ expected: expect.objectContaining({
2993
+ minCitations: 2,
2994
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
2995
+ acceptedRagSufficiencyStatuses: ['borderline'],
2996
+ acceptedRagDegradationStates: ['conflict'],
2997
+ requiredRagFailureStages: ['context_assembly'],
2998
+ answerMustContain: expect.arrayContaining(['payload format', 'JSON', 'YAML']),
2999
+ answerMustNotContain: expect.arrayContaining([
3000
+ 'stable payload format',
3001
+ ]),
3002
+ }),
3003
+ }),
3004
+ expect.objectContaining({
3005
+ id: 'environment_scoped_format_probe_en',
3006
+ expected: expect.objectContaining({
3007
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3008
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3009
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3010
+ acceptedRagDegradationStates: ['none'],
3011
+ answerMustContain: expect.arrayContaining(['payload format', 'JSON', 'staging']),
3012
+ answerMustNotContain: expect.arrayContaining([
3013
+ 'Conflicting evidence',
3014
+ 'stable payload format',
3015
+ ]),
3016
+ }),
3017
+ }),
3018
+ expect.objectContaining({
3019
+ id: 'conflicting_protocol_evidence_probe_en',
3020
+ expected: expect.objectContaining({
3021
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
3022
+ acceptedRagSufficiencyStatuses: ['borderline'],
3023
+ acceptedRagDegradationStates: ['conflict'],
3024
+ requiredRagFailureStages: ['context_assembly'],
3025
+ answerMustContain: expect.arrayContaining(['transport protocol', 'HTTP/1.1', 'WebSocket']),
3026
+ answerMustNotContain: expect.arrayContaining([
3027
+ 'stable transport protocol',
3028
+ ]),
3029
+ }),
3030
+ }),
3031
+ expect.objectContaining({
3032
+ id: 'full_document_protocol_scan_remote_conflict_probe_en',
3033
+ expected: expect.objectContaining({
3034
+ minCitations: 2,
3035
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
3036
+ acceptedRagSufficiencyStatuses: ['borderline'],
3037
+ acceptedRagDegradationStates: ['conflict'],
3038
+ requiredRagFailureStages: ['context_assembly'],
3039
+ answerMustContain: expect.arrayContaining(['transport protocol', 'HTTP/1.1', 'WebSocket']),
3040
+ answerMustNotContain: expect.arrayContaining([
3041
+ 'stable transport protocol',
3042
+ ]),
3043
+ }),
3044
+ }),
3045
+ expect.objectContaining({
3046
+ id: 'environment_scoped_protocol_probe_en',
3047
+ expected: expect.objectContaining({
3048
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3049
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3050
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3051
+ acceptedRagDegradationStates: ['none'],
3052
+ answerMustContain: expect.arrayContaining(['transport protocol', 'HTTP/2', 'staging']),
3053
+ answerMustNotContain: expect.arrayContaining([
3054
+ 'Conflicting evidence',
3055
+ 'stable transport protocol',
3056
+ ]),
3057
+ }),
3058
+ }),
3059
+ expect.objectContaining({
3060
+ id: 'version_scoped_dependency_probe_en',
3061
+ expected: expect.objectContaining({
3062
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3063
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3064
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3065
+ acceptedRagDegradationStates: ['none'],
3066
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'version 1.0']),
3067
+ answerMustNotContain: expect.arrayContaining([
3068
+ 'Conflicting evidence',
3069
+ 'stable storage dependency',
3070
+ ]),
3071
+ }),
3072
+ }),
3073
+ expect.objectContaining({
3074
+ id: 'cross_document_environment_scoped_ownership_identity_probe_en',
3075
+ expected: expect.objectContaining({
3076
+ minCitations: 2,
3077
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3078
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3079
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3080
+ acceptedRagDegradationStates: ['none'],
3081
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'Rollback Team', 'staging', 'production']),
3082
+ answerMustNotContain: expect.arrayContaining([
3083
+ 'Conflicting evidence',
3084
+ 'stable deployment owner',
3085
+ 'immediate predecessors',
3086
+ 'likely next nodes',
3087
+ ]),
3088
+ }),
3089
+ }),
3090
+ expect.objectContaining({
3091
+ id: 'cross_document_version_scoped_ownership_identity_probe_en',
3092
+ expected: expect.objectContaining({
3093
+ minCitations: 2,
3094
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3095
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3096
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3097
+ acceptedRagDegradationStates: ['none'],
3098
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'Rollback Team', 'version 1.0', 'version 2.0']),
3099
+ answerMustNotContain: expect.arrayContaining([
3100
+ 'Conflicting evidence',
3101
+ 'stable deployment owner',
3102
+ 'immediate predecessors',
3103
+ 'likely next nodes',
3104
+ ]),
3105
+ }),
3106
+ }),
3107
+ expect.objectContaining({
3108
+ id: 'cross_document_platform_scoped_ownership_identity_probe_en',
3109
+ expected: expect.objectContaining({
3110
+ minCitations: 2,
3111
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3112
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3113
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3114
+ acceptedRagDegradationStates: ['none'],
3115
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'Rollback Team', 'Windows', 'Android']),
3116
+ answerMustNotContain: expect.arrayContaining([
3117
+ 'Conflicting evidence',
3118
+ 'stable deployment owner',
3119
+ 'immediate predecessors',
3120
+ 'likely next nodes',
3121
+ ]),
3122
+ }),
3123
+ }),
3124
+ expect.objectContaining({
3125
+ id: 'cross_document_environment_scoped_state_status_probe_en',
3126
+ expected: expect.objectContaining({
3127
+ minCitations: 2,
3128
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3129
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3130
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3131
+ acceptedRagDegradationStates: ['none'],
3132
+ answerMustContain: expect.arrayContaining(['migration gate status', 'enabled', 'disabled', 'staging', 'production']),
3133
+ answerMustNotContain: expect.arrayContaining([
3134
+ 'Conflicting evidence',
3135
+ 'stable migration gate status',
3136
+ 'immediate predecessors',
3137
+ 'likely next nodes',
3138
+ ]),
3139
+ }),
3140
+ }),
3141
+ expect.objectContaining({
3142
+ id: 'cross_document_version_scoped_state_status_probe_en',
3143
+ expected: expect.objectContaining({
3144
+ minCitations: 2,
3145
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3146
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3147
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3148
+ acceptedRagDegradationStates: ['none'],
3149
+ answerMustContain: expect.arrayContaining(['migration gate status', 'enabled', 'disabled', 'version 1.0', 'version 2.0']),
3150
+ answerMustNotContain: expect.arrayContaining([
3151
+ 'Conflicting evidence',
3152
+ 'stable migration gate status',
3153
+ 'immediate predecessors',
3154
+ 'likely next nodes',
3155
+ ]),
3156
+ }),
3157
+ }),
3158
+ expect.objectContaining({
3159
+ id: 'cross_document_platform_scoped_state_status_probe_en',
3160
+ expected: expect.objectContaining({
3161
+ minCitations: 2,
3162
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3163
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3164
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3165
+ acceptedRagDegradationStates: ['none'],
3166
+ answerMustContain: expect.arrayContaining(['migration gate status', 'enabled', 'disabled', 'Windows', 'Android']),
3167
+ answerMustNotContain: expect.arrayContaining([
3168
+ 'Conflicting evidence',
3169
+ 'stable migration gate status',
3170
+ 'immediate predecessors',
3171
+ 'likely next nodes',
3172
+ ]),
3173
+ }),
3174
+ }),
3175
+ expect.objectContaining({
3176
+ id: 'cross_document_environment_scoped_endpoint_probe_en',
3177
+ expected: expect.objectContaining({
3178
+ minCitations: 2,
3179
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3180
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3181
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3182
+ acceptedRagDegradationStates: ['none'],
3183
+ answerMustContain: expect.arrayContaining(['webhook endpoint', '/api/staging/hooks', '/api/production/hooks', 'staging', 'production']),
3184
+ answerMustNotContain: expect.arrayContaining([
3185
+ 'Conflicting evidence',
3186
+ 'stable webhook endpoint',
3187
+ 'immediate predecessors',
3188
+ 'likely next nodes',
3189
+ ]),
3190
+ }),
3191
+ }),
3192
+ expect.objectContaining({
3193
+ id: 'cross_document_version_scoped_endpoint_probe_en',
3194
+ expected: expect.objectContaining({
3195
+ minCitations: 2,
3196
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3197
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3198
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3199
+ acceptedRagDegradationStates: ['none'],
3200
+ answerMustContain: expect.arrayContaining(['webhook endpoint', '/api/release-one/hooks', '/api/release-two/hooks', 'version 1.0', 'version 2.0']),
3201
+ answerMustNotContain: expect.arrayContaining([
3202
+ 'Conflicting evidence',
3203
+ 'stable webhook endpoint',
3204
+ 'immediate predecessors',
3205
+ 'likely next nodes',
3206
+ ]),
3207
+ }),
3208
+ }),
3209
+ expect.objectContaining({
3210
+ id: 'cross_document_platform_scoped_endpoint_probe_en',
3211
+ expected: expect.objectContaining({
3212
+ minCitations: 2,
3213
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3214
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3215
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3216
+ acceptedRagDegradationStates: ['none'],
3217
+ answerMustContain: expect.arrayContaining(['webhook endpoint', '/api/windows/hooks', '/api/android/hooks', 'Windows', 'Android']),
3218
+ answerMustNotContain: expect.arrayContaining([
3219
+ 'Conflicting evidence',
3220
+ 'stable webhook endpoint',
3221
+ 'immediate predecessors',
3222
+ 'likely next nodes',
3223
+ ]),
3224
+ }),
3225
+ }),
3226
+ expect.objectContaining({
3227
+ id: 'cross_document_environment_scoped_format_probe_en',
3228
+ expected: expect.objectContaining({
3229
+ minCitations: 2,
3230
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3231
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3232
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3233
+ acceptedRagDegradationStates: ['none'],
3234
+ answerMustContain: expect.arrayContaining(['payload format', 'JSON', 'XML', 'staging', 'production']),
3235
+ answerMustNotContain: expect.arrayContaining([
3236
+ 'Conflicting evidence',
3237
+ 'stable payload format',
3238
+ 'immediate predecessors',
3239
+ 'likely next nodes',
3240
+ ]),
3241
+ }),
3242
+ }),
3243
+ expect.objectContaining({
3244
+ id: 'cross_document_version_scoped_format_probe_en',
3245
+ expected: expect.objectContaining({
3246
+ minCitations: 2,
3247
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3248
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3249
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3250
+ acceptedRagDegradationStates: ['none'],
3251
+ answerMustContain: expect.arrayContaining(['payload format', 'JSON', 'XML', 'version 1.0', 'version 2.0']),
3252
+ answerMustNotContain: expect.arrayContaining([
3253
+ 'Conflicting evidence',
3254
+ 'stable payload format',
3255
+ 'immediate predecessors',
3256
+ 'likely next nodes',
3257
+ ]),
3258
+ }),
3259
+ }),
3260
+ expect.objectContaining({
3261
+ id: 'cross_document_platform_scoped_format_probe_en',
3262
+ expected: expect.objectContaining({
3263
+ minCitations: 2,
3264
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3265
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3266
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3267
+ acceptedRagDegradationStates: ['none'],
3268
+ answerMustContain: expect.arrayContaining(['payload format', 'JSON', 'XML', 'Windows', 'Android']),
3269
+ answerMustNotContain: expect.arrayContaining([
3270
+ 'Conflicting evidence',
3271
+ 'stable payload format',
3272
+ 'immediate predecessors',
3273
+ 'likely next nodes',
3274
+ ]),
3275
+ }),
3276
+ }),
3277
+ expect.objectContaining({
3278
+ id: 'cross_document_environment_scoped_protocol_probe_en',
3279
+ expected: expect.objectContaining({
3280
+ minCitations: 2,
3281
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3282
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3283
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3284
+ acceptedRagDegradationStates: ['none'],
3285
+ answerMustContain: expect.arrayContaining(['transport protocol', 'HTTP/2', 'gRPC', 'staging', 'production']),
3286
+ answerMustNotContain: expect.arrayContaining([
3287
+ 'Conflicting evidence',
3288
+ 'stable transport protocol',
3289
+ 'immediate predecessors',
3290
+ 'likely next nodes',
3291
+ ]),
3292
+ }),
3293
+ }),
3294
+ expect.objectContaining({
3295
+ id: 'cross_document_version_scoped_protocol_probe_en',
3296
+ expected: expect.objectContaining({
3297
+ minCitations: 2,
3298
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3299
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3300
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3301
+ acceptedRagDegradationStates: ['none'],
3302
+ answerMustContain: expect.arrayContaining(['transport protocol', 'HTTP/2', 'gRPC', 'version 1.0', 'version 2.0']),
3303
+ answerMustNotContain: expect.arrayContaining([
3304
+ 'Conflicting evidence',
3305
+ 'stable transport protocol',
3306
+ 'immediate predecessors',
3307
+ 'likely next nodes',
3308
+ ]),
3309
+ }),
3310
+ }),
3311
+ expect.objectContaining({
3312
+ id: 'cross_document_platform_scoped_protocol_probe_en',
3313
+ expected: expect.objectContaining({
3314
+ minCitations: 2,
3315
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3316
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3317
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3318
+ acceptedRagDegradationStates: ['none'],
3319
+ answerMustContain: expect.arrayContaining(['transport protocol', 'HTTP/2', 'gRPC', 'Windows', 'Android']),
3320
+ answerMustNotContain: expect.arrayContaining([
3321
+ 'Conflicting evidence',
3322
+ 'stable transport protocol',
3323
+ 'immediate predecessors',
3324
+ 'likely next nodes',
3325
+ ]),
3326
+ }),
3327
+ }),
3328
+ expect.objectContaining({
3329
+ id: 'cross_document_environment_scoped_dependency_probe_en',
3330
+ expected: expect.objectContaining({
3331
+ minCitations: 2,
3332
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3333
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3334
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3335
+ acceptedRagDegradationStates: ['none'],
3336
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'PostgreSQL', 'staging', 'production']),
3337
+ answerMustNotContain: expect.arrayContaining([
3338
+ 'Conflicting evidence',
3339
+ 'stable storage dependency',
3340
+ 'immediate predecessors',
3341
+ 'likely next nodes',
3342
+ ]),
3343
+ }),
3344
+ }),
3345
+ expect.objectContaining({
3346
+ id: 'cross_document_version_scoped_dependency_probe_en',
3347
+ expected: expect.objectContaining({
3348
+ minCitations: 2,
3349
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3350
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3351
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3352
+ acceptedRagDegradationStates: ['none'],
3353
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'PostgreSQL', 'version 1.0', 'version 2.0']),
3354
+ answerMustNotContain: expect.arrayContaining([
3355
+ 'Conflicting evidence',
3356
+ 'stable storage dependency',
3357
+ 'immediate predecessors',
3358
+ 'likely next nodes',
3359
+ ]),
3360
+ }),
3361
+ }),
3362
+ expect.objectContaining({
3363
+ id: 'cross_document_platform_scoped_dependency_probe_en',
3364
+ expected: expect.objectContaining({
3365
+ minCitations: 2,
3366
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3367
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3368
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3369
+ acceptedRagDegradationStates: ['none'],
3370
+ answerMustContain: expect.arrayContaining(['storage dependency', 'SQLite', 'PostgreSQL', 'Windows', 'Android']),
3371
+ answerMustNotContain: expect.arrayContaining([
3372
+ 'Conflicting evidence',
3373
+ 'stable storage dependency',
3374
+ 'immediate predecessors',
3375
+ 'likely next nodes',
3376
+ ]),
3377
+ }),
3378
+ }),
3379
+ expect.objectContaining({
3380
+ id: 'cross_document_environment_scoped_quantity_limit_probe_en',
3381
+ expected: expect.objectContaining({
3382
+ minCitations: 2,
3383
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3384
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3385
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3386
+ acceptedRagDegradationStates: ['none'],
3387
+ answerMustContain: expect.arrayContaining(['retry limit', '3', '5', 'staging', 'production']),
3388
+ answerMustNotContain: expect.arrayContaining([
3389
+ 'Conflicting evidence',
3390
+ 'stable retry limit',
3391
+ 'immediate predecessors',
3392
+ 'likely next nodes',
3393
+ ]),
3394
+ }),
3395
+ }),
3396
+ expect.objectContaining({
3397
+ id: 'cross_document_version_scoped_quantity_limit_probe_en',
3398
+ expected: expect.objectContaining({
3399
+ minCitations: 2,
3400
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3401
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3402
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3403
+ acceptedRagDegradationStates: ['none'],
3404
+ answerMustContain: expect.arrayContaining(['retry limit', '3', '5', 'version 1.0', 'version 2.0']),
3405
+ answerMustNotContain: expect.arrayContaining([
3406
+ 'Conflicting evidence',
3407
+ 'stable retry limit',
3408
+ 'immediate predecessors',
3409
+ 'likely next nodes',
3410
+ ]),
3411
+ }),
3412
+ }),
3413
+ expect.objectContaining({
3414
+ id: 'cross_document_platform_scoped_quantity_limit_probe_en',
3415
+ expected: expect.objectContaining({
3416
+ minCitations: 2,
3417
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3418
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3419
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3420
+ acceptedRagDegradationStates: ['none'],
3421
+ answerMustContain: expect.arrayContaining(['retry limit', '3', '5', 'Windows', 'Android']),
3422
+ answerMustNotContain: expect.arrayContaining([
3423
+ 'Conflicting evidence',
3424
+ 'stable retry limit',
3425
+ 'immediate predecessors',
3426
+ 'likely next nodes',
3427
+ ]),
3428
+ }),
3429
+ }),
3430
+ expect.objectContaining({
3431
+ id: 'temporal_cross_document_quantity_limit_probe_en',
3432
+ expected: expect.objectContaining({
3433
+ minCitations: 2,
3434
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3435
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3436
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3437
+ acceptedRagDegradationStates: ['none'],
3438
+ answerMustContain: expect.arrayContaining(['retry limit', '3', '5', 'current', 'historical']),
3439
+ answerMustNotContain: expect.arrayContaining([
3440
+ 'Conflicting evidence',
3441
+ 'stable retry limit',
3442
+ 'immediate predecessors',
3443
+ 'likely next nodes',
3444
+ ]),
3445
+ }),
3446
+ }),
3447
+ expect.objectContaining({
3448
+ id: 'conflicting_location_evidence_probe_en',
3449
+ expected: expect.objectContaining({
3450
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
3451
+ acceptedRagSufficiencyStatuses: ['borderline'],
3452
+ acceptedRagDegradationStates: ['conflict'],
3453
+ requiredRagFailureStages: ['context_assembly'],
3454
+ answerMustContain: expect.arrayContaining(['control module location', 'Rack A', 'Rack B']),
3455
+ answerMustNotContain: expect.arrayContaining([
3456
+ 'stable control module location',
3457
+ ]),
3458
+ }),
3459
+ }),
3460
+ expect.objectContaining({
3461
+ id: 'full_document_location_scan_remote_conflict_probe_en',
3462
+ expected: expect.objectContaining({
3463
+ minCitations: 2,
3464
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
3465
+ acceptedRagSufficiencyStatuses: ['borderline'],
3466
+ acceptedRagDegradationStates: ['conflict'],
3467
+ requiredRagFailureStages: ['context_assembly'],
3468
+ answerMustContain: expect.arrayContaining(['control module location', 'Rack A', 'Rack B']),
3469
+ answerMustNotContain: expect.arrayContaining([
3470
+ 'stable control module location',
3471
+ ]),
3472
+ }),
3473
+ }),
3474
+ expect.objectContaining({
3475
+ id: 'temporal_scoped_state_status_probe_en',
3476
+ expected: expect.objectContaining({
3477
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3478
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3479
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3480
+ acceptedRagDegradationStates: ['none'],
3481
+ answerMustContain: expect.arrayContaining(['enabled', 'current']),
3482
+ answerMustNotContain: expect.arrayContaining([
3483
+ 'Conflicting evidence',
3484
+ 'immediate predecessors',
3485
+ 'likely next nodes',
3486
+ ]),
3487
+ }),
3488
+ }),
3489
+ expect.objectContaining({
3490
+ id: 'temporal_scoped_ownership_identity_probe_en',
3491
+ expected: expect.objectContaining({
3492
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3493
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3494
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3495
+ acceptedRagDegradationStates: ['none'],
3496
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'current']),
3497
+ answerMustNotContain: expect.arrayContaining([
3498
+ 'Conflicting evidence',
3499
+ 'stable deployment owner',
3500
+ 'immediate predecessors',
3501
+ 'likely next nodes',
3502
+ ]),
3503
+ }),
3504
+ }),
3505
+ expect.objectContaining({
3506
+ id: 'environment_scoped_state_status_probe_en',
3507
+ expected: expect.objectContaining({
3508
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3509
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3510
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3511
+ acceptedRagDegradationStates: ['none'],
3512
+ answerMustContain: expect.arrayContaining(['enabled', 'staging']),
3513
+ answerMustNotContain: expect.arrayContaining([
3514
+ 'Conflicting evidence',
3515
+ 'stable migration gate status',
3516
+ 'immediate predecessors',
3517
+ 'likely next nodes',
3518
+ ]),
3519
+ }),
3520
+ }),
3521
+ expect.objectContaining({
3522
+ id: 'environment_scoped_quantity_limit_probe_en',
3523
+ expected: expect.objectContaining({
3524
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3525
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3526
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3527
+ acceptedRagDegradationStates: ['none'],
3528
+ answerMustContain: expect.arrayContaining(['retry limit', '3', 'staging']),
3529
+ answerMustNotContain: expect.arrayContaining([
3530
+ 'Conflicting evidence',
3531
+ 'stable retry limit',
3532
+ 'immediate predecessors',
3533
+ 'likely next nodes',
3534
+ ]),
3535
+ }),
3536
+ }),
3537
+ expect.objectContaining({
3538
+ id: 'environment_scoped_ownership_identity_probe_en',
3539
+ expected: expect.objectContaining({
3540
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3541
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3542
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3543
+ acceptedRagDegradationStates: ['none'],
3544
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'staging']),
3545
+ answerMustNotContain: expect.arrayContaining([
3546
+ 'Conflicting evidence',
3547
+ 'stable deployment owner',
3548
+ 'immediate predecessors',
3549
+ 'likely next nodes',
3550
+ ]),
3551
+ }),
3552
+ }),
3553
+ expect.objectContaining({
3554
+ id: 'version_scoped_state_status_probe_en',
3555
+ expected: expect.objectContaining({
3556
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3557
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3558
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3559
+ acceptedRagDegradationStates: ['none'],
3560
+ answerMustContain: expect.arrayContaining(['enabled', 'version 1.0']),
3561
+ answerMustNotContain: expect.arrayContaining([
3562
+ 'Conflicting evidence',
3563
+ 'stable migration gate status',
3564
+ 'immediate predecessors',
3565
+ 'likely next nodes',
3566
+ ]),
3567
+ }),
3568
+ }),
3569
+ expect.objectContaining({
3570
+ id: 'version_scoped_quantity_limit_probe_en',
3571
+ expected: expect.objectContaining({
3572
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3573
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3574
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3575
+ acceptedRagDegradationStates: ['none'],
3576
+ answerMustContain: expect.arrayContaining(['retry limit', '3', 'version 1.0']),
3577
+ answerMustNotContain: expect.arrayContaining([
3578
+ 'Conflicting evidence',
3579
+ 'stable retry limit',
3580
+ 'immediate predecessors',
3581
+ 'likely next nodes',
3582
+ ]),
3583
+ }),
3584
+ }),
3585
+ expect.objectContaining({
3586
+ id: 'version_scoped_ownership_identity_probe_en',
3587
+ expected: expect.objectContaining({
3588
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3589
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3590
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3591
+ acceptedRagDegradationStates: ['none'],
3592
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'version 1.0']),
3593
+ answerMustNotContain: expect.arrayContaining([
3594
+ 'Conflicting evidence',
3595
+ 'stable deployment owner',
3596
+ 'immediate predecessors',
3597
+ 'likely next nodes',
3598
+ ]),
3599
+ }),
3600
+ }),
3601
+ expect.objectContaining({
3602
+ id: 'platform_scoped_state_status_probe_en',
3603
+ expected: expect.objectContaining({
3604
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3605
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3606
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3607
+ acceptedRagDegradationStates: ['none'],
3608
+ answerMustContain: expect.arrayContaining(['enabled', 'Windows']),
3609
+ answerMustNotContain: expect.arrayContaining([
3610
+ 'Conflicting evidence',
3611
+ 'stable migration gate status',
3612
+ 'immediate predecessors',
3613
+ 'likely next nodes',
3614
+ ]),
3615
+ }),
3616
+ }),
3617
+ expect.objectContaining({
3618
+ id: 'platform_scoped_quantity_limit_probe_en',
3619
+ expected: expect.objectContaining({
3620
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3621
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3622
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3623
+ acceptedRagDegradationStates: ['none'],
3624
+ answerMustContain: expect.arrayContaining(['retry limit', '3', 'Windows']),
3625
+ answerMustNotContain: expect.arrayContaining([
3626
+ 'Conflicting evidence',
3627
+ 'stable retry limit',
3628
+ 'immediate predecessors',
3629
+ 'likely next nodes',
3630
+ ]),
3631
+ }),
3632
+ }),
3633
+ expect.objectContaining({
3634
+ id: 'platform_scoped_ownership_identity_probe_en',
3635
+ expected: expect.objectContaining({
3636
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3637
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3638
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3639
+ acceptedRagDegradationStates: ['none'],
3640
+ answerMustContain: expect.arrayContaining(['deployment owner', 'Release Ops', 'Windows']),
3641
+ answerMustNotContain: expect.arrayContaining([
3642
+ 'Conflicting evidence',
3643
+ 'stable deployment owner',
3644
+ 'immediate predecessors',
3645
+ 'likely next nodes',
3646
+ ]),
3647
+ }),
3648
+ }),
3649
+ expect.objectContaining({
3650
+ id: 'temporal_scoped_release_date_probe_en',
3651
+ expected: expect.objectContaining({
3652
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3653
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3654
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3655
+ acceptedRagDegradationStates: ['none'],
3656
+ answerMustContain: expect.arrayContaining(['2026-08-15', 'current']),
3657
+ answerMustNotContain: expect.arrayContaining([
3658
+ 'Conflicting evidence',
3659
+ 'immediate predecessors',
3660
+ 'likely next nodes',
3661
+ ]),
3662
+ }),
3663
+ }),
3664
+ expect.objectContaining({
3665
+ id: 'temporal_scoped_quantity_limit_probe_en',
3666
+ expected: expect.objectContaining({
3667
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3668
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3669
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3670
+ acceptedRagDegradationStates: ['none'],
3671
+ answerMustContain: expect.arrayContaining(['retry limit', '3', 'current']),
3672
+ answerMustNotContain: expect.arrayContaining([
3673
+ 'Conflicting evidence',
3674
+ 'stable retry limit',
3675
+ 'immediate predecessors',
3676
+ 'likely next nodes',
3677
+ ]),
3678
+ }),
3679
+ }),
3680
+ expect.objectContaining({
3681
+ id: 'temporal_scoped_planned_release_date_probe_en',
3682
+ expected: expect.objectContaining({
3683
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3684
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3685
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3686
+ acceptedRagDegradationStates: ['none'],
3687
+ answerMustContain: expect.arrayContaining(['2026-08-15', 'current']),
3688
+ answerMustNotContain: expect.arrayContaining([
3689
+ 'Conflicting evidence',
3690
+ 'immediate predecessors',
3691
+ 'likely next nodes',
3692
+ ]),
3693
+ }),
3694
+ }),
3695
+ expect.objectContaining({
3696
+ id: 'temporal_cross_document_planned_release_date_probe_en',
3697
+ expected: expect.objectContaining({
3698
+ minCitations: 2,
3699
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3700
+ forbiddenRagRoles: expect.arrayContaining(['conflict']),
3701
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3702
+ acceptedRagDegradationStates: ['none'],
3703
+ answerMustContain: expect.arrayContaining(['2026-08-15', '2026-09-20', 'planned']),
3704
+ answerMustNotContain: expect.arrayContaining([
3705
+ 'Conflicting evidence',
3706
+ 'immediate predecessors',
3707
+ 'likely next nodes',
3708
+ ]),
3709
+ }),
3710
+ }),
3711
+ expect.objectContaining({
3712
+ id: 'conflicting_multi_document_evidence_probe_en',
3713
+ expected: expect.objectContaining({
3714
+ minCitations: 2,
3715
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
3716
+ acceptedRagSufficiencyStatuses: ['borderline'],
3717
+ acceptedRagDegradationStates: ['conflict'],
3718
+ requiredRagFailureStages: ['context_assembly'],
3719
+ answerMustContain: expect.arrayContaining(['+/-0.10 mm', '+/-0.50 mm']),
3720
+ answerMustNotContain: expect.arrayContaining([
3721
+ 'single stable calibration tolerance',
3722
+ ]),
3723
+ }),
3724
+ }),
3725
+ expect.objectContaining({
3726
+ id: 'conflicting_multi_document_quantity_evidence_probe_en',
3727
+ expected: expect.objectContaining({
3728
+ minCitations: 2,
3729
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
3730
+ acceptedRagSufficiencyStatuses: ['borderline'],
3731
+ acceptedRagDegradationStates: ['conflict'],
3732
+ requiredRagFailureStages: ['context_assembly'],
3733
+ answerMustContain: expect.arrayContaining(['retry attempts', '3', '5']),
3734
+ answerMustNotContain: expect.arrayContaining([
3735
+ 'single stable retry-attempt count',
3736
+ ]),
3737
+ }),
3738
+ }),
3739
+ expect.objectContaining({
3740
+ id: 'full_document_scan_remote_conflict_probe_en',
3741
+ expected: expect.objectContaining({
3742
+ minCitations: 2,
3743
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context', 'conflict']),
3744
+ acceptedRagSufficiencyStatuses: ['borderline'],
3745
+ acceptedRagDegradationStates: ['conflict'],
3746
+ requiredRagFailureStages: ['context_assembly'],
3747
+ answerMustContain: expect.arrayContaining(['+/-0.10 mm', '+/-0.50 mm']),
3748
+ answerMustNotContain: expect.arrayContaining([
3749
+ 'single stable calibration tolerance',
3750
+ ]),
3751
+ }),
3752
+ }),
3753
+ expect.objectContaining({
3754
+ id: 'repeated_snippet_target_section_probe_en',
3755
+ expected: expect.objectContaining({
3756
+ minCitations: 1,
3757
+ requiredRagRoles: expect.arrayContaining(['direct_support', 'parent_context']),
3758
+ acceptedRagSufficiencyStatuses: expect.arrayContaining(['sufficient', 'borderline']),
3759
+ answerMustContain: expect.arrayContaining([
3760
+ 'Target section context says the second occurrence controls the answer',
3761
+ ]),
3762
+ answerMustNotContain: expect.arrayContaining([
3763
+ 'Distractor section context belongs to the first occurrence',
3764
+ ]),
3765
+ }),
3766
+ }),
3767
+ ]));
3768
+ });
3769
+ test.each(KnowledgeWorkspaceConversationRegression_1.KNOWLEDGE_WORKSPACE_CONVERSATION_REGRESSION_CASES)('conversation regression case: $id', async (caseEntry) => {
3770
+ const regressionPlatform = createRegressionPlatform(caseEntry);
3771
+ try {
3772
+ await regressionPlatform.platform.ingestKnowledge({
3773
+ incremental: true,
3774
+ documents: buildRegressionDocuments(),
3775
+ });
3776
+ const response = await regressionPlatform.platform.agentConversation(deriveScopedConversationRequest(caseEntry));
3777
+ const expected = caseEntry.expected;
3778
+ const minimumRagSourceDecisionStatusCounts = expected.inMemoryMinimumRagSourceDecisionStatusCounts
3779
+ || expected.minimumRagSourceDecisionStatusCounts;
3780
+ const expectedRagRecoveryAttempted = typeof expected.inMemoryExpectedRagRecoveryAttempted === 'boolean'
3781
+ ? expected.inMemoryExpectedRagRecoveryAttempted
3782
+ : expected.expectedRagRecoveryAttempted;
3783
+ const minimumRagRecoveryBeforeSourceDecisionStatusCounts = expected.inMemoryMinimumRagRecoveryBeforeSourceDecisionStatusCounts
3784
+ || expected.minimumRagRecoveryBeforeSourceDecisionStatusCounts;
3785
+ const citations = Array.isArray(response.citations) ? response.citations : [];
3786
+ const planner = response.trace.planner || {
3787
+ plannerQuery: null,
3788
+ titleLikeQueries: [],
3789
+ titleHitDocumentIds: [],
3790
+ };
3791
+ const retrieval = response.trace.retrieval || {
3792
+ retrievalModes: [],
3793
+ };
3794
+ const acceptedDecisions = Array.isArray(expected.acceptedAnswerReleaseDecisions)
3795
+ && expected.acceptedAnswerReleaseDecisions.length > 0
3796
+ ? expected.acceptedAnswerReleaseDecisions
3797
+ : (expected.answerReleaseDecision ? [expected.answerReleaseDecision] : []);
3798
+ expect(citations.length).toBeGreaterThanOrEqual(expected.minCitations);
3799
+ if (acceptedDecisions.length > 0) {
3800
+ expect(acceptedDecisions).toContain(response.answerReleaseReview?.decision);
3801
+ }
3802
+ expect(response.answerReleaseReview?.publicAnswer).toBe(response.answer);
3803
+ expect(response.trace.usedScope.scopeSource).toBe(expected.scopeSource);
3804
+ expect(response.knowledgePoints.length).toBeGreaterThan(0);
3805
+ expect(response.knowledgePoints[0]?.sourcePath).toBe(expected.primarySourcePath);
3806
+ expect(planner.titleLikeQueries).toEqual(expect.arrayContaining(expected.plannerTitleLikeQueries));
3807
+ if (expected.requirePlannerTitleHitDocumentIds !== false) {
3808
+ expect(planner.titleHitDocumentIds.length).toBeGreaterThan(0);
3809
+ }
3810
+ expected.answerMustContain?.forEach((fragment) => {
3811
+ expect(response.answer).toContain(fragment);
3812
+ });
3813
+ expected.answerMustNotContain?.forEach((fragment) => {
3814
+ expect(response.answer).not.toContain(fragment);
3815
+ });
3816
+ if (expected.ragSourceBoundary) {
3817
+ expect(response.trace.ragContextPack).toEqual(expect.objectContaining({
3818
+ sourceBoundary: expected.ragSourceBoundary,
3819
+ }));
3820
+ }
3821
+ if (expected.requiredRagRoles && expected.requiredRagRoles.length > 0) {
3822
+ const observedRagRoles = (response.trace.ragContextPack?.fragments || [])
3823
+ .map((fragment) => fragment.role);
3824
+ expect(observedRagRoles).toEqual(expect.arrayContaining(expected.requiredRagRoles));
3825
+ }
3826
+ if (expected.forbiddenRagRoles && expected.forbiddenRagRoles.length > 0) {
3827
+ const observedRagRoles = (response.trace.ragContextPack?.fragments || [])
3828
+ .map((fragment) => fragment.role);
3829
+ expected.forbiddenRagRoles.forEach((role) => {
3830
+ expect(observedRagRoles).not.toContain(role);
3831
+ });
3832
+ }
3833
+ if (expected.minimumRagFullDocumentFragmentCounts) {
3834
+ const observedFullDocumentFragmentCounts = countFullDocumentRagFragmentsByRole(response);
3835
+ Object.entries(expected.minimumRagFullDocumentFragmentCounts).forEach(([role, minimumCount]) => {
3836
+ expect(observedFullDocumentFragmentCounts[role] || 0)
3837
+ .toBeGreaterThanOrEqual(minimumCount || 0);
3838
+ });
3839
+ }
3840
+ if (expected.acceptedRagSufficiencyStatuses && expected.acceptedRagSufficiencyStatuses.length > 0) {
3841
+ expect(expected.acceptedRagSufficiencyStatuses).toContain(response.trace.ragSufficiencyReview?.status);
3842
+ }
3843
+ expectRagBudget(response.trace.ragContextPack?.budget, expected.expectedRagBudget);
3844
+ if (expected.requiredRagFailureStages && expected.requiredRagFailureStages.length > 0) {
3845
+ expect(collectRagFailureStages(response)).toEqual(expect.arrayContaining(expected.requiredRagFailureStages));
3846
+ }
3847
+ if (expected.requiredFirstGraphSuccessorTitle) {
3848
+ expect(graphSuccessorTitles(response)[0]).toBe(expected.requiredFirstGraphSuccessorTitle);
3849
+ }
3850
+ if (expected.requiredGraphSuccessorTitles && expected.requiredGraphSuccessorTitles.length > 0) {
3851
+ expect(graphSuccessorTitles(response)).toEqual(expect.arrayContaining(expected.requiredGraphSuccessorTitles));
3852
+ }
3853
+ if (expected.forbiddenGraphSuccessorTitles && expected.forbiddenGraphSuccessorTitles.length > 0) {
3854
+ expected.forbiddenGraphSuccessorTitles.forEach((title) => {
3855
+ expect(graphSuccessorTitles(response)).not.toContain(title);
3856
+ });
3857
+ }
3858
+ if (expected.requiredGraphSuccessorRelationKinds && expected.requiredGraphSuccessorRelationKinds.length > 0) {
3859
+ expect(graphSuccessorRelationKinds(response)).toEqual(expect.arrayContaining(expected.requiredGraphSuccessorRelationKinds));
3860
+ }
3861
+ if (expected.forbiddenGraphNeighborFragmentTitles && expected.forbiddenGraphNeighborFragmentTitles.length > 0) {
3862
+ expected.forbiddenGraphNeighborFragmentTitles.forEach((title) => {
3863
+ expect(graphNeighborFragmentTitles(response)).not.toContain(title);
3864
+ });
3865
+ }
3866
+ const diagnostics = graphDiagnostics(response);
3867
+ if (typeof expected.minimumGraphIntentAlignedPredecessorCandidates === 'number') {
3868
+ expect(Number(diagnostics.intentAlignedPredecessorCandidateCount || 0))
3869
+ .toBeGreaterThanOrEqual(expected.minimumGraphIntentAlignedPredecessorCandidates);
3870
+ }
3871
+ if (typeof expected.minimumGraphIntentAlignedSuccessorCandidates === 'number') {
3872
+ expect(Number(diagnostics.intentAlignedSuccessorCandidateCount || 0))
3873
+ .toBeGreaterThanOrEqual(expected.minimumGraphIntentAlignedSuccessorCandidates);
3874
+ }
3875
+ if (typeof expected.minimumGraphIntentMisalignedPredecessorCandidates === 'number') {
3876
+ expect(Number(diagnostics.intentMisalignedPredecessorCandidateCount || 0))
3877
+ .toBeGreaterThanOrEqual(expected.minimumGraphIntentMisalignedPredecessorCandidates);
3878
+ }
3879
+ if (typeof expected.minimumGraphIntentMisalignedSuccessorCandidates === 'number') {
3880
+ expect(Number(diagnostics.intentMisalignedSuccessorCandidateCount || 0))
3881
+ .toBeGreaterThanOrEqual(expected.minimumGraphIntentMisalignedSuccessorCandidates);
3882
+ }
3883
+ if (typeof expected.expectedGraphUsedMisalignedPredecessorFallback === 'boolean') {
3884
+ expect(Boolean(diagnostics.usedIntentMisalignedPredecessorFallback))
3885
+ .toBe(expected.expectedGraphUsedMisalignedPredecessorFallback);
3886
+ }
3887
+ if (typeof expected.expectedGraphUsedMisalignedSuccessorFallback === 'boolean') {
3888
+ expect(Boolean(diagnostics.usedIntentMisalignedSuccessorFallback))
3889
+ .toBe(expected.expectedGraphUsedMisalignedSuccessorFallback);
3890
+ }
3891
+ if (typeof expected.expectedRagDeterministic === 'boolean') {
3892
+ expect(response.trace.ragSufficiencyReview?.deterministic).toBe(expected.expectedRagDeterministic);
3893
+ }
3894
+ if (typeof expected.expectedRagLlmJudgeUsed === 'boolean') {
3895
+ expect(response.trace.ragSufficiencyReview?.llmJudgeUsed).toBe(expected.expectedRagLlmJudgeUsed);
3896
+ }
3897
+ if (typeof expectedRagRecoveryAttempted === 'boolean') {
3898
+ expect(response.trace.ragSufficiencyReview?.recoveryAttempted).toBe(expectedRagRecoveryAttempted);
3899
+ }
3900
+ if (expected.acceptedRagDegradationStates && expected.acceptedRagDegradationStates.length > 0) {
3901
+ expect(expected.acceptedRagDegradationStates).toContain(response.trace.ragSufficiencyReview?.degradationState);
3902
+ }
3903
+ if (minimumRagSourceDecisionStatusCounts) {
3904
+ const observedDecisionCounts = countRagSourceDecisionStatuses(response.trace.ragContextPack?.sourceDecisions);
3905
+ Object.entries(minimumRagSourceDecisionStatusCounts).forEach(([status, minimumCount]) => {
3906
+ expect(observedDecisionCounts[status] || 0).toBeGreaterThanOrEqual(minimumCount || 0);
3907
+ });
3908
+ }
3909
+ if (minimumRagRecoveryBeforeSourceDecisionStatusCounts) {
3910
+ const observedRecoveryDecisionCounts = response.trace.ragRecovery?.beforeSourceDecisionStatusCounts || {};
3911
+ Object.entries(minimumRagRecoveryBeforeSourceDecisionStatusCounts).forEach(([status, minimumCount]) => {
3912
+ expect(observedRecoveryDecisionCounts[status] || 0)
3913
+ .toBeGreaterThanOrEqual(minimumCount || 0);
3914
+ });
3915
+ }
3916
+ expectReasonFragments(response.trace.ragRecovery?.beforeReasons, expected.requiredRagRecoveryBeforeReasonFragments);
3917
+ if (expected.retrievalModes && expected.retrievalModes.length > 0) {
3918
+ expect(retrieval.retrievalModes).toEqual(expect.arrayContaining(expected.retrievalModes));
3919
+ }
3920
+ if (expected.recoveredSourcePaths && expected.recoveredSourcePaths.length > 0) {
3921
+ expect(retrieval.scopeRecovery?.recoveredSourcePaths || []).toEqual(expect.arrayContaining(expected.recoveredSourcePaths));
3922
+ }
3923
+ }
3924
+ finally {
3925
+ regressionPlatform.cleanup();
3926
+ }
3927
+ });
3928
+ });