@memberjunction/db-auto-doc 6.2.0-edge.4 → 6.2.0-edge.6

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 (183) hide show
  1. package/README.md +105 -0
  2. package/dist/api/DBAutoDocAPI.d.ts +2 -0
  3. package/dist/api/DBAutoDocAPI.d.ts.map +1 -1
  4. package/dist/api/DBAutoDocAPI.js +2 -1
  5. package/dist/api/DBAutoDocAPI.js.map +1 -1
  6. package/dist/commands/analyze.d.ts +1 -0
  7. package/dist/commands/analyze.d.ts.map +1 -1
  8. package/dist/commands/analyze.js +6 -0
  9. package/dist/commands/analyze.js.map +1 -1
  10. package/dist/commands/export.d.ts +28 -19
  11. package/dist/commands/export.d.ts.map +1 -1
  12. package/dist/commands/export.js +91 -12
  13. package/dist/commands/export.js.map +1 -1
  14. package/dist/core/AnalysisEngine.d.ts +39 -6
  15. package/dist/core/AnalysisEngine.d.ts.map +1 -1
  16. package/dist/core/AnalysisEngine.js +144 -50
  17. package/dist/core/AnalysisEngine.js.map +1 -1
  18. package/dist/core/AnalysisOrchestrator.d.ts +20 -1
  19. package/dist/core/AnalysisOrchestrator.d.ts.map +1 -1
  20. package/dist/core/AnalysisOrchestrator.js +144 -28
  21. package/dist/core/AnalysisOrchestrator.js.map +1 -1
  22. package/dist/core/PKProposalGate.d.ts +22 -0
  23. package/dist/core/PKProposalGate.d.ts.map +1 -0
  24. package/dist/core/PKProposalGate.js +52 -0
  25. package/dist/core/PKProposalGate.js.map +1 -0
  26. package/dist/database/Database.d.ts +8 -0
  27. package/dist/database/Database.d.ts.map +1 -1
  28. package/dist/database/Database.js +23 -1
  29. package/dist/database/Database.js.map +1 -1
  30. package/dist/discovery/ColumnNormalizer.d.ts +31 -0
  31. package/dist/discovery/ColumnNormalizer.d.ts.map +1 -1
  32. package/dist/discovery/ColumnNormalizer.js +68 -2
  33. package/dist/discovery/ColumnNormalizer.js.map +1 -1
  34. package/dist/discovery/Composer.d.ts +33 -2
  35. package/dist/discovery/Composer.d.ts.map +1 -1
  36. package/dist/discovery/Composer.js +126 -5
  37. package/dist/discovery/Composer.js.map +1 -1
  38. package/dist/discovery/DiscoveryEngine.d.ts +3 -0
  39. package/dist/discovery/DiscoveryEngine.d.ts.map +1 -1
  40. package/dist/discovery/DiscoveryEngine.js +1 -1
  41. package/dist/discovery/DiscoveryEngine.js.map +1 -1
  42. package/dist/discovery/EmbeddingProvider.d.ts +6 -1
  43. package/dist/discovery/EmbeddingProvider.d.ts.map +1 -1
  44. package/dist/discovery/EmbeddingProvider.js +11 -1
  45. package/dist/discovery/EmbeddingProvider.js.map +1 -1
  46. package/dist/discovery/EnumCandidateGate.d.ts +19 -0
  47. package/dist/discovery/EnumCandidateGate.d.ts.map +1 -1
  48. package/dist/discovery/EnumCandidateGate.js +47 -5
  49. package/dist/discovery/EnumCandidateGate.js.map +1 -1
  50. package/dist/discovery/FKGraphWalker.d.ts +35 -0
  51. package/dist/discovery/FKGraphWalker.d.ts.map +1 -1
  52. package/dist/discovery/FKGraphWalker.js +113 -12
  53. package/dist/discovery/FKGraphWalker.js.map +1 -1
  54. package/dist/discovery/IndexKeyEvidence.d.ts +36 -0
  55. package/dist/discovery/IndexKeyEvidence.d.ts.map +1 -0
  56. package/dist/discovery/IndexKeyEvidence.js +42 -0
  57. package/dist/discovery/IndexKeyEvidence.js.map +1 -0
  58. package/dist/discovery/JoinProbe.d.ts +148 -0
  59. package/dist/discovery/JoinProbe.d.ts.map +1 -0
  60. package/dist/discovery/JoinProbe.js +233 -0
  61. package/dist/discovery/JoinProbe.js.map +1 -0
  62. package/dist/discovery/LLMDiscoveryValidator.d.ts +10 -1
  63. package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -1
  64. package/dist/discovery/LLMDiscoveryValidator.js +44 -12
  65. package/dist/discovery/LLMDiscoveryValidator.js.map +1 -1
  66. package/dist/discovery/LLMSanityChecker.d.ts.map +1 -1
  67. package/dist/discovery/LLMSanityChecker.js +10 -1
  68. package/dist/discovery/LLMSanityChecker.js.map +1 -1
  69. package/dist/discovery/OrganicKeyDetector.d.ts +29 -1
  70. package/dist/discovery/OrganicKeyDetector.d.ts.map +1 -1
  71. package/dist/discovery/OrganicKeyDetector.js +34 -5
  72. package/dist/discovery/OrganicKeyDetector.js.map +1 -1
  73. package/dist/discovery/OrganicKeyTranslator.d.ts +24 -5
  74. package/dist/discovery/OrganicKeyTranslator.d.ts.map +1 -1
  75. package/dist/discovery/OrganicKeyTranslator.js +32 -14
  76. package/dist/discovery/OrganicKeyTranslator.js.map +1 -1
  77. package/dist/discovery/PKDetector.d.ts +9 -0
  78. package/dist/discovery/PKDetector.d.ts.map +1 -1
  79. package/dist/discovery/PKDetector.js +86 -8
  80. package/dist/discovery/PKDetector.js.map +1 -1
  81. package/dist/discovery/SemanticPhase.d.ts +25 -0
  82. package/dist/discovery/SemanticPhase.d.ts.map +1 -1
  83. package/dist/discovery/SemanticPhase.js +55 -11
  84. package/dist/discovery/SemanticPhase.js.map +1 -1
  85. package/dist/discovery/StructuralPhase.d.ts +27 -5
  86. package/dist/discovery/StructuralPhase.d.ts.map +1 -1
  87. package/dist/discovery/StructuralPhase.js +42 -9
  88. package/dist/discovery/StructuralPhase.js.map +1 -1
  89. package/dist/discovery/TransitiveBridgeDetector.d.ts +5 -1
  90. package/dist/discovery/TransitiveBridgeDetector.d.ts.map +1 -1
  91. package/dist/discovery/TransitiveBridgeDetector.js +25 -3
  92. package/dist/discovery/TransitiveBridgeDetector.js.map +1 -1
  93. package/dist/discovery/embedding-provider-default.d.ts +25 -0
  94. package/dist/discovery/embedding-provider-default.d.ts.map +1 -0
  95. package/dist/discovery/embedding-provider-default.js +47 -0
  96. package/dist/discovery/embedding-provider-default.js.map +1 -0
  97. package/dist/drivers/BaseAutoDocDriver.d.ts +63 -0
  98. package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -1
  99. package/dist/drivers/BaseAutoDocDriver.js +3 -5
  100. package/dist/drivers/BaseAutoDocDriver.js.map +1 -1
  101. package/dist/drivers/MySQLDriver.d.ts +21 -1
  102. package/dist/drivers/MySQLDriver.d.ts.map +1 -1
  103. package/dist/drivers/MySQLDriver.js +64 -0
  104. package/dist/drivers/MySQLDriver.js.map +1 -1
  105. package/dist/drivers/PostgreSQLDriver.d.ts +43 -2
  106. package/dist/drivers/PostgreSQLDriver.d.ts.map +1 -1
  107. package/dist/drivers/PostgreSQLDriver.js +132 -19
  108. package/dist/drivers/PostgreSQLDriver.js.map +1 -1
  109. package/dist/drivers/SQLServerDriver.d.ts +28 -1
  110. package/dist/drivers/SQLServerDriver.d.ts.map +1 -1
  111. package/dist/drivers/SQLServerDriver.js +108 -1
  112. package/dist/drivers/SQLServerDriver.js.map +1 -1
  113. package/dist/drivers/probeErrors.d.ts +30 -0
  114. package/dist/drivers/probeErrors.d.ts.map +1 -0
  115. package/dist/drivers/probeErrors.js +94 -0
  116. package/dist/drivers/probeErrors.js.map +1 -0
  117. package/dist/generators/AdditionalSchemaInfoGenerator.d.ts +34 -18
  118. package/dist/generators/AdditionalSchemaInfoGenerator.d.ts.map +1 -1
  119. package/dist/generators/AdditionalSchemaInfoGenerator.js +130 -8
  120. package/dist/generators/AdditionalSchemaInfoGenerator.js.map +1 -1
  121. package/dist/generators/ErdClusterGenerator.d.ts +44 -0
  122. package/dist/generators/ErdClusterGenerator.d.ts.map +1 -0
  123. package/dist/generators/ErdClusterGenerator.js +216 -0
  124. package/dist/generators/ErdClusterGenerator.js.map +1 -0
  125. package/dist/generators/ErdClusterer.d.ts +130 -0
  126. package/dist/generators/ErdClusterer.d.ts.map +1 -0
  127. package/dist/generators/ErdClusterer.js +308 -0
  128. package/dist/generators/ErdClusterer.js.map +1 -0
  129. package/dist/generators/HTMLGenerator.d.ts +6 -0
  130. package/dist/generators/HTMLGenerator.d.ts.map +1 -1
  131. package/dist/generators/HTMLGenerator.js +41 -6
  132. package/dist/generators/HTMLGenerator.js.map +1 -1
  133. package/dist/generators/MermaidGenerator.d.ts +3 -0
  134. package/dist/generators/MermaidGenerator.d.ts.map +1 -1
  135. package/dist/generators/MermaidGenerator.js +4 -0
  136. package/dist/generators/MermaidGenerator.js.map +1 -1
  137. package/dist/generators/index.d.ts +2 -0
  138. package/dist/generators/index.d.ts.map +1 -1
  139. package/dist/generators/index.js +2 -0
  140. package/dist/generators/index.js.map +1 -1
  141. package/dist/prompts/PromptEngine.d.ts.map +1 -1
  142. package/dist/prompts/PromptEngine.js +10 -1
  143. package/dist/prompts/PromptEngine.js.map +1 -1
  144. package/dist/types/analysis.d.ts +2 -0
  145. package/dist/types/analysis.d.ts.map +1 -1
  146. package/dist/types/config.d.ts +128 -4
  147. package/dist/types/config.d.ts.map +1 -1
  148. package/dist/types/config.js +7 -1
  149. package/dist/types/config.js.map +1 -1
  150. package/dist/types/discovery.d.ts +41 -0
  151. package/dist/types/discovery.d.ts.map +1 -1
  152. package/dist/types/state.d.ts +29 -0
  153. package/dist/types/state.d.ts.map +1 -1
  154. package/dist/utils/call-deadline.d.ts +43 -0
  155. package/dist/utils/call-deadline.d.ts.map +1 -0
  156. package/dist/utils/call-deadline.js +81 -0
  157. package/dist/utils/call-deadline.js.map +1 -0
  158. package/dist/utils/config-loader.d.ts +5 -0
  159. package/dist/utils/config-loader.d.ts.map +1 -1
  160. package/dist/utils/config-loader.js +37 -0
  161. package/dist/utils/config-loader.js.map +1 -1
  162. package/dist/utils/index-hints.d.ts +43 -0
  163. package/dist/utils/index-hints.d.ts.map +1 -0
  164. package/dist/utils/index-hints.js +80 -0
  165. package/dist/utils/index-hints.js.map +1 -0
  166. package/dist/utils/index.d.ts +2 -0
  167. package/dist/utils/index.d.ts.map +1 -1
  168. package/dist/utils/index.js +2 -0
  169. package/dist/utils/index.js.map +1 -1
  170. package/dist/utils/llm-factory.d.ts +1 -0
  171. package/dist/utils/llm-factory.d.ts.map +1 -1
  172. package/dist/utils/llm-factory.js +6 -1
  173. package/dist/utils/llm-factory.js.map +1 -1
  174. package/dist/utils/seed-context.d.ts +23 -0
  175. package/dist/utils/seed-context.d.ts.map +1 -0
  176. package/dist/utils/seed-context.js +38 -0
  177. package/dist/utils/seed-context.js.map +1 -0
  178. package/package.json +5 -5
  179. package/prompts/fk-pruning-holistic.md +7 -0
  180. package/prompts/fk-pruning-table.md +20 -1
  181. package/prompts/pk-pruning-holistic.md +7 -0
  182. package/prompts/pk-pruning-table.md +17 -0
  183. package/prompts/table-analysis.md +11 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Probe failure classification.
3
+ *
4
+ * A probe's failure reason is persisted into `additionalSchemaInfo` next to the key
5
+ * it explains, so it leaves the database and lands in a file a human reads. Database
6
+ * error messages routinely quote the offending value — PostgreSQL's
7
+ * `invalid input syntax for type uuid: "0f3c-not-a-uuid"`, SQL Server's
8
+ * `Conversion failed when converting the varchar value 'AA:1000000'` — which would
9
+ * smuggle customer data into the output of a component whose contract is counts only.
10
+ *
11
+ * So a raw driver error is never persisted. It is classified into one of a fixed set
12
+ * of reasons, and anything that could be a value is stripped from whatever tail is
13
+ * kept. {@link SanitizeErrorText} is the belt to the classifier's braces.
14
+ */
15
+ /** Fixed causes a probe can fail for. The persisted reason is always one of these. */
16
+ const PROBE_FAILURE_PATTERNS = [
17
+ // Type incompatibility — the shape that matters most, because a silent 0 here is
18
+ // what hides a real cross-type soft key.
19
+ { test: /operator does not exist|no operator matches|cannot be compared|operand type clash|invalid input syntax|conversion failed|data type .* is invalid|incompatible types|could not identify an equality operator/i,
20
+ reason: 'columns are not comparable (type mismatch)' },
21
+ // Cancellation / timeout.
22
+ { test: /statement timeout|canceling statement|query was cancelled|query timeout|execution timeout|timeout expired|lock timeout|ETIMEDOUT/i,
23
+ reason: 'probe exceeded its timeout' },
24
+ // Authorization.
25
+ { test: /permission denied|access is denied|insufficient privilege|not authorized|the SELECT permission was denied|must be owner/i,
26
+ reason: 'no permission to read one of the columns' },
27
+ // Missing object.
28
+ { test: /does not exist|invalid object name|invalid column name|undefined table|undefined column|unknown column|relation .* does not exist/i,
29
+ reason: 'table or column no longer exists' },
30
+ // Connectivity.
31
+ { test: /ECONNREFUSED|ECONNRESET|EPIPE|connection terminated|connection closed|server closed the connection|socket hang up|no connection|client has encountered/i,
32
+ reason: 'lost the database connection during the probe' },
33
+ // Resource pressure.
34
+ { test: /out of memory|insufficient resources|too many connections|disk full|no space left|temporary file size exceeds/i,
35
+ reason: 'database refused the probe for lack of resources' },
36
+ ];
37
+ /**
38
+ * Remove anything from a message that could be a data value: single- or double-quoted
39
+ * runs, backticked runs, bracketed runs, and any long unbroken token. What survives is
40
+ * prose.
41
+ */
42
+ export function SanitizeErrorText(text) {
43
+ return text
44
+ .replace(/'[^']*'/g, "'?'")
45
+ .replace(/"[^"]*"/g, '"?"')
46
+ .replace(/`[^`]*`/g, '`?`')
47
+ .replace(/\[[^\]]*\]/g, '[?]')
48
+ // Any remaining token of 25+ non-space characters is far more likely to be a
49
+ // value, identifier or key than a word of explanation.
50
+ .replace(/\S{25,}/g, '?')
51
+ .replace(/\s+/g, ' ')
52
+ .trim();
53
+ }
54
+ /**
55
+ * Classify a driver error into a fixed, value-free reason.
56
+ *
57
+ * Unrecognised errors fall back to a sanitised, length-capped tail so a novel failure
58
+ * is still debuggable, but it goes through {@link SanitizeErrorText} first.
59
+ */
60
+ export function DescribeProbeFailure(error) {
61
+ const raw = errorMessage(error);
62
+ for (const { test, reason } of PROBE_FAILURE_PATTERNS) {
63
+ if (test.test(raw))
64
+ return reason;
65
+ }
66
+ const cleaned = SanitizeErrorText(raw);
67
+ const capped = cleaned.length > 120 ? `${cleaned.slice(0, 120)}…` : cleaned;
68
+ return capped.length > 0 ? `probe failed: ${capped}` : 'probe failed for an unknown reason';
69
+ }
70
+ /** Pull a provider error code (PostgreSQL SQLSTATE, MySQL errno, SQL Server number) if present. */
71
+ export function ExtractSqlState(error) {
72
+ if (error === null || typeof error !== 'object')
73
+ return undefined;
74
+ const rec = error;
75
+ const code = rec.code ?? rec.number ?? rec.errno;
76
+ if (typeof code === 'string' && code.length > 0)
77
+ return code;
78
+ if (typeof code === 'number')
79
+ return String(code);
80
+ return undefined;
81
+ }
82
+ function errorMessage(error) {
83
+ if (error instanceof Error)
84
+ return error.message;
85
+ if (typeof error === 'string')
86
+ return error;
87
+ if (error !== null && typeof error === 'object') {
88
+ const m = error.message;
89
+ if (typeof m === 'string')
90
+ return m;
91
+ }
92
+ return '';
93
+ }
94
+ //# sourceMappingURL=probeErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probeErrors.js","sourceRoot":"","sources":["../../src/drivers/probeErrors.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,3 @@
1
- /**
2
- * Generates additionalSchemaInfo.json compatible with MemberJunction CodeGen.
3
- *
4
- * CodeGen uses this file to set IsSoftPrimaryKey / IsSoftForeignKey flags on
5
- * EntityField records, enabling relationship metadata for databases that lack
6
- * proper FK/PK constraints.
7
- *
8
- * The output format is:
9
- * {
10
- * "<schemaName>": [
11
- * {
12
- * "TableName": "<tableName>",
13
- * "PrimaryKey": [{ "FieldName": "...", "Description": "..." }],
14
- * "ForeignKeys": [{ "FieldName": "...", "SchemaName": "...", "RelatedTable": "...", "RelatedField": "...", "Description": "..." }]
15
- * }
16
- * ]
17
- * }
18
- */
19
1
  import { DatabaseDocumentation } from '../types/state.js';
20
2
  import { DetectedOrganicKeysOutput } from '../discovery/OrganicKeyTranslator.js';
21
3
  export interface AdditionalSchemaInfoOptions {
@@ -49,6 +31,7 @@ export interface FieldValueListEntry {
49
31
  Confidence?: number;
50
32
  }
51
33
  export declare class AdditionalSchemaInfoGenerator {
34
+ private readonly enumCandidateGate;
52
35
  /**
53
36
  * Generate additionalSchemaInfo JSON from analysis state.
54
37
  *
@@ -101,6 +84,15 @@ export declare class AdditionalSchemaInfoGenerator {
101
84
  * Collect value-list field entries from columns with enum verdicts.
102
85
  * Only includes columns where the LLM marked isEnum=true and confidence
103
86
  * meets the threshold.
87
+ *
88
+ * Unless a user approved the column, the verdict must also pass the enum candidate gate against
89
+ * the column's statistics, and only values observed in the column are kept. That way, a state
90
+ * file written before the gate existed does not export `__mj_*`, audit, year or GUID lists, or
91
+ * invented values. A list is closed (`List`) only when a user approved it; a list inferred from
92
+ * data is `ListOrUserEntry`, since the data cannot show that no other value is allowed. That holds
93
+ * for a column with a CHECK constraint too: CodeGen builds the closed list from a value-list
94
+ * CHECK itself, and a CHECK that is not a value list (e.g. `Status <> ''`) allows values the
95
+ * data does not hold.
104
96
  */
105
97
  private collectValueListFields;
106
98
  /**
@@ -111,6 +103,30 @@ export declare class AdditionalSchemaInfoGenerator {
111
103
  * Collect foreign key columns from introspected table definition.
112
104
  */
113
105
  private collectIntrospectedFKs;
106
+ /**
107
+ * MJ models a foreign key as one column, so a composite key is written as one entry per column
108
+ * pair. Only a pair whose target is unique on its own is kept: the other columns of a composite
109
+ * key usually point at columns that repeat in the target table (a join on them alone multiplies
110
+ * rows), so they are left out rather than guessed. A column of the constraint that points
111
+ * somewhere else (a different, real target) is kept; single-column keys are unchanged.
112
+ * A constraint read as a cross product (see {@link isCrossProduct}) keeps none of its pairs.
113
+ */
114
+ private dropNonUniqueCompositePairs;
115
+ /** The introspected column pairs of each multi-column foreign key constraint, by constraint name. */
116
+ private compositeConstraints;
117
+ /**
118
+ * True when a constraint's pairs repeat a source column. A foreign key pairs each source column
119
+ * with exactly one referenced column, so a repeat can only be the N x N cross product the
120
+ * PostgreSQL driver produced before it read pg_constraint. Which pairing is right is unknown, so
121
+ * a state file written then must be re-introspected rather than exported as it is.
122
+ */
123
+ private isCrossProduct;
124
+ /**
125
+ * Whether a column identifies one row of its table by itself: it is the table's only primary
126
+ * key column, or it has a unique, unfiltered single-column index. A target table that is not in
127
+ * the analysed state cannot be checked, so it counts as not unique.
128
+ */
129
+ private isUniqueOnItsOwn;
114
130
  /**
115
131
  * Collect discovered PKs from the key detection phase.
116
132
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalSchemaInfoGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,qBAAqB,EAAuD,MAAM,mBAAmB,CAAC;AAE/G,OAAO,EAAE,yBAAyB,EAAoB,MAAM,sCAAsC,CAAC;AAEnG,MAAM,WAAW,2BAA2B;IAC1C,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAeD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,qBAAa,6BAA6B;IACxC;;;;;;;;;;;;;OAaG;IACI,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IA4DT,wCAAwC;IACjC,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IAIT;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8CtB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
1
+ {"version":3,"file":"AdditionalSchemaInfoGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"AA6DA,OAAO,EAAE,qBAAqB,EAAuD,MAAM,mBAAmB,CAAC;AAE/G,OAAO,EAAE,yBAAyB,EAAoB,MAAM,sCAAsC,CAAC;AAGnG,MAAM,WAAW,2BAA2B;IAC1C,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAwBD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAE7D;;;;;;;;;;;;;OAaG;IACI,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IA6DT,wCAAwC;IACjC,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IAIT;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmDtB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,sBAAsB;IAiC9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgD9B;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;IAiBnC,qGAAqG;IACrG,OAAO,CAAC,oBAAoB;IAU5B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAItB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
@@ -1,3 +1,36 @@
1
+ /**
2
+ * Describe a discovered FK, including what the probe measured.
3
+ *
4
+ * The confidence number alone is the LLM's self-report; the containment counts are the
5
+ * only part of this sentence grounded in the data.
6
+ */
7
+ function describeDiscoveredFK(fk) {
8
+ const base = `AI-discovered relationship (confidence: ${fk.confidence}%)`;
9
+ const v = fk.verification;
10
+ if (!v)
11
+ return base;
12
+ if (v.Verification === 'Verified' && v.MatchedRows !== null && v.SampledRows !== null) {
13
+ return `${base} — join verified, ${v.MatchedRows}/${v.SampledRows} sampled values matched`;
14
+ }
15
+ if (v.Verification === 'Refuted') {
16
+ return `${base} — join REFUTED: ${v.VerificationNote}`;
17
+ }
18
+ return `${base} — join NOT verified: ${v.VerificationNote}`;
19
+ }
20
+ /**
21
+ * Find the verification stamp for a column that was stamped `isForeignKey` by a
22
+ * discovery stage, so the introspected-FK branch can report provenance for keys that
23
+ * did not actually come from a database constraint.
24
+ *
25
+ * Returns undefined for a genuinely introspected FK — a real constraint needs no probe,
26
+ * and claiming a verification nobody performed would be the same defect in reverse.
27
+ */
28
+ function findVerificationForColumn(schemaName, tableName, columnName, discoveredFKs) {
29
+ const match = discoveredFKs.find(fk => fk.schemaName === schemaName &&
30
+ fk.sourceTable === tableName &&
31
+ fk.sourceColumn === columnName);
32
+ return match?.verification;
33
+ }
1
34
  /**
2
35
  * Generates additionalSchemaInfo.json compatible with MemberJunction CodeGen.
3
36
  *
@@ -16,7 +49,12 @@
16
49
  * ]
17
50
  * }
18
51
  */
52
+ import { IsUniquelyIndexed } from '../utils/index-hints.js';
53
+ import { EnumCandidateGate } from '../discovery/EnumCandidateGate.js';
19
54
  export class AdditionalSchemaInfoGenerator {
55
+ constructor() {
56
+ this.enumCandidateGate = new EnumCandidateGate();
57
+ }
20
58
  /**
21
59
  * Generate additionalSchemaInfo JSON from analysis state.
22
60
  *
@@ -45,7 +83,7 @@ export class AdditionalSchemaInfoGenerator {
45
83
  if (options.ApprovedOnly && !table.userApproved) {
46
84
  continue;
47
85
  }
48
- const tableInfo = this.buildTableInfo(schema, table, discoveredPKs, discoveredFKs, options.DiscoveredOnly ?? false, options.ValueListConfidenceThreshold ?? 85, options.ExcludeValueLists ?? false, options.ConfirmedOnly ?? false);
86
+ const tableInfo = this.buildTableInfo(state, schema, table, discoveredPKs, discoveredFKs, options.DiscoveredOnly ?? false, options.ValueListConfidenceThreshold ?? 85, options.ExcludeValueLists ?? false, options.ConfirmedOnly ?? false);
49
87
  if (tableInfo) {
50
88
  // Attach organic keys for this table when detection output is present.
51
89
  const orgKeys = this.getOrganicKeysForTable(options.OrganicKeys, schema.name, table.name);
@@ -157,17 +195,20 @@ export class AdditionalSchemaInfoGenerator {
157
195
  * Build a single table's schema info entry by combining
158
196
  * introspected and discovered keys, plus value-list fields.
159
197
  */
160
- buildTableInfo(schema, table, discoveredPKs, discoveredFKs, discoveredOnly, valueListThreshold, excludeValueLists, confirmedOnly) {
198
+ buildTableInfo(state, schema, table, discoveredPKs, discoveredFKs, discoveredOnly, valueListThreshold, excludeValueLists, confirmedOnly) {
161
199
  const pks = [];
162
200
  const fks = [];
163
201
  // Source 1: Hard keys from introspection (skip if discoveredOnly)
164
202
  if (!discoveredOnly) {
165
203
  this.collectIntrospectedPKs(table, pks);
166
- this.collectIntrospectedFKs(schema, table, fks);
204
+ this.collectIntrospectedFKs(schema, table, fks, discoveredFKs);
167
205
  }
168
206
  // Source 2: AI-discovered keys
169
207
  this.collectDiscoveredPKs(schema.name, table.name, discoveredPKs, pks);
170
208
  this.collectDiscoveredFKs(schema.name, table.name, discoveredFKs, fks);
209
+ // A composite FK's column pairs whose target is not unique on its own are dropped whichever
210
+ // source proposed them: introspection, a discovery pass, or the LLM confirming the constraint.
211
+ this.dropNonUniqueCompositePairs(state, schema, table, fks);
171
212
  // Source 3: Value-list fields from enum detection
172
213
  const fields = excludeValueLists
173
214
  ? []
@@ -191,6 +232,15 @@ export class AdditionalSchemaInfoGenerator {
191
232
  * Collect value-list field entries from columns with enum verdicts.
192
233
  * Only includes columns where the LLM marked isEnum=true and confidence
193
234
  * meets the threshold.
235
+ *
236
+ * Unless a user approved the column, the verdict must also pass the enum candidate gate against
237
+ * the column's statistics, and only values observed in the column are kept. That way, a state
238
+ * file written before the gate existed does not export `__mj_*`, audit, year or GUID lists, or
239
+ * invented values. A list is closed (`List`) only when a user approved it; a list inferred from
240
+ * data is `ListOrUserEntry`, since the data cannot show that no other value is allowed. That holds
241
+ * for a column with a CHECK constraint too: CodeGen builds the closed list from a value-list
242
+ * CHECK itself, and a CHECK that is not a value list (e.g. `Status <> ''`) allows values the
243
+ * data does not hold.
194
244
  */
195
245
  collectValueListFields(table, threshold, confirmedOnly) {
196
246
  const fields = [];
@@ -202,11 +252,16 @@ export class AdditionalSchemaInfoGenerator {
202
252
  continue;
203
253
  if (confirmedOnly && !col.userApproved)
204
254
  continue;
255
+ const values = col.userApproved
256
+ ? verdict.values
257
+ : this.enumCandidateGate.FilterVerdictValues(col, table.rowCount, verdict.values);
258
+ if (!values)
259
+ continue;
205
260
  // Sort values alphabetically — matches CHECK-constraint pass behavior
206
- const sortedValues = [...verdict.values].sort();
261
+ const sortedValues = [...values].sort();
207
262
  fields.push({
208
263
  FieldName: col.name,
209
- ValueListType: verdict.type,
264
+ ValueListType: col.userApproved ? verdict.type : 'ListOrUserEntry',
210
265
  PossibleValues: sortedValues,
211
266
  Description: col.description ?? undefined,
212
267
  Confidence: Math.round(verdict.confidence * 100),
@@ -231,7 +286,7 @@ export class AdditionalSchemaInfoGenerator {
231
286
  /**
232
287
  * Collect foreign key columns from introspected table definition.
233
288
  */
234
- collectIntrospectedFKs(schema, table, fks) {
289
+ collectIntrospectedFKs(schema, table, fks, discoveredFKs = []) {
235
290
  const existingKeys = new Set(fks.map(f => `${f.FieldName}->${f.RelatedTable}.${f.RelatedField}`));
236
291
  // From column-level foreignKeyReferences
237
292
  for (const col of table.columns) {
@@ -240,12 +295,19 @@ export class AdditionalSchemaInfoGenerator {
240
295
  const key = `${col.name}->${ref.table}.${ref.referencedColumn}`;
241
296
  if (!existingKeys.has(key)) {
242
297
  existingKeys.add(key);
298
+ // NOTE: this branch has no confidence, status or containment gate — whatever
299
+ // set `col.isForeignKey` gets emitted. The LLM-proposed FK path stamps exactly
300
+ // these two fields on the column, so before the probe gate existed an
301
+ // unverified key reached the output here even when the `discovered.foreignKeys`
302
+ // filter would have rejected it. The provenance below is what makes that
303
+ // visible rather than indistinguishable from a real introspected constraint.
243
304
  fks.push({
244
305
  FieldName: col.name,
245
306
  SchemaName: ref.schema || schema.name,
246
307
  RelatedTable: ref.table,
247
308
  RelatedField: ref.referencedColumn,
248
- Description: col.description
309
+ Description: col.description,
310
+ Verification: findVerificationForColumn(schema.name, table.name, col.name, discoveredFKs)
249
311
  });
250
312
  }
251
313
  }
@@ -264,6 +326,65 @@ export class AdditionalSchemaInfoGenerator {
264
326
  }
265
327
  }
266
328
  }
329
+ /**
330
+ * MJ models a foreign key as one column, so a composite key is written as one entry per column
331
+ * pair. Only a pair whose target is unique on its own is kept: the other columns of a composite
332
+ * key usually point at columns that repeat in the target table (a join on them alone multiplies
333
+ * rows), so they are left out rather than guessed. A column of the constraint that points
334
+ * somewhere else (a different, real target) is kept; single-column keys are unchanged.
335
+ * A constraint read as a cross product (see {@link isCrossProduct}) keeps none of its pairs.
336
+ */
337
+ dropNonUniqueCompositePairs(state, schema, table, fks) {
338
+ const drop = new Set();
339
+ for (const pairs of this.compositeConstraints(table).values()) {
340
+ const crossProduct = this.isCrossProduct(pairs);
341
+ for (const dep of pairs) {
342
+ if (crossProduct || !this.isUniqueOnItsOwn(state, dep.schema || schema.name, dep.table, dep.referencedColumn)) {
343
+ drop.add(`${dep.column}->${dep.table}.${dep.referencedColumn}`);
344
+ }
345
+ }
346
+ }
347
+ if (drop.size === 0) {
348
+ return;
349
+ }
350
+ const kept = fks.filter(f => !drop.has(`${f.FieldName}->${f.RelatedTable}.${f.RelatedField}`));
351
+ fks.splice(0, fks.length, ...kept);
352
+ }
353
+ /** The introspected column pairs of each multi-column foreign key constraint, by constraint name. */
354
+ compositeConstraints(table) {
355
+ const byConstraint = new Map();
356
+ for (const dep of table.dependsOn) {
357
+ if (dep.constraintName) {
358
+ byConstraint.set(dep.constraintName, [...(byConstraint.get(dep.constraintName) ?? []), dep]);
359
+ }
360
+ }
361
+ return new Map([...byConstraint].filter(([, pairs]) => pairs.length > 1));
362
+ }
363
+ /**
364
+ * True when a constraint's pairs repeat a source column. A foreign key pairs each source column
365
+ * with exactly one referenced column, so a repeat can only be the N x N cross product the
366
+ * PostgreSQL driver produced before it read pg_constraint. Which pairing is right is unknown, so
367
+ * a state file written then must be re-introspected rather than exported as it is.
368
+ */
369
+ isCrossProduct(pairs) {
370
+ return new Set(pairs.map(p => p.column.toLowerCase())).size < pairs.length;
371
+ }
372
+ /**
373
+ * Whether a column identifies one row of its table by itself: it is the table's only primary
374
+ * key column, or it has a unique, unfiltered single-column index. A target table that is not in
375
+ * the analysed state cannot be checked, so it counts as not unique.
376
+ */
377
+ isUniqueOnItsOwn(state, schemaName, tableName, columnName) {
378
+ const target = state.schemas.find(s => s.name === schemaName)?.tables.find(t => t.name === tableName);
379
+ if (!target) {
380
+ return false;
381
+ }
382
+ const pkColumns = target.columns.filter(c => c.isPrimaryKey);
383
+ if (pkColumns.length === 1 && pkColumns[0].name.toLowerCase() === columnName.toLowerCase()) {
384
+ return true;
385
+ }
386
+ return IsUniquelyIndexed(target, columnName) === true;
387
+ }
267
388
  /**
268
389
  * Collect discovered PKs from the key detection phase.
269
390
  */
@@ -297,7 +418,8 @@ export class AdditionalSchemaInfoGenerator {
297
418
  SchemaName: fk.targetSchema || schemaName,
298
419
  RelatedTable: fk.targetTable,
299
420
  RelatedField: fk.targetColumn,
300
- Description: `AI-discovered relationship (confidence: ${fk.confidence}%)`
421
+ Description: describeDiscoveredFK(fk),
422
+ Verification: fk.verification
301
423
  });
302
424
  }
303
425
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalSchemaInfoGenerator.js","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdditionalSchemaInfoGenerator.js","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Renders an ErdClusterPlan as one Mermaid ERD per cluster page, each wrapped in a standalone HTML
3
+ * page, plus an index (HTML and Markdown) that lists the subject areas, the reference tables and the
4
+ * tables no diagram shows. Every page stays well inside Mermaid's text limit by drawing primary and
5
+ * foreign key columns only (configurable).
6
+ */
7
+ import { DatabaseDocumentation } from '../types/state.js';
8
+ import { ErdColumnMode } from '../types/config.js';
9
+ import { ErdCluster, ErdClusterPage, ErdClusterPlan } from './ErdClusterer.js';
10
+ export interface ErdClusterGeneratorOptions {
11
+ /** Which columns each entity shows. Default `keys`. */
12
+ columns?: ErdColumnMode;
13
+ }
14
+ export interface ErdClusterFile {
15
+ /** File name without extension, e.g. `cluster-Customer-2`. */
16
+ BaseName: string;
17
+ Title: string;
18
+ Cluster: ErdCluster;
19
+ Page: ErdClusterPage;
20
+ Mermaid: string;
21
+ Html: string;
22
+ }
23
+ export interface ErdClusterOutput {
24
+ Files: ErdClusterFile[];
25
+ IndexHtml: string;
26
+ IndexMarkdown: string;
27
+ }
28
+ export declare class ErdClusterGenerator {
29
+ Generate(state: DatabaseDocumentation, plan: ErdClusterPlan, options?: ErdClusterGeneratorOptions): ErdClusterOutput;
30
+ /** The Mermaid source for one page: its tables and the FK edges between them. */
31
+ RenderPage(plan: ErdClusterPlan, cluster: ErdCluster, page: ErdClusterPage, columns?: ErdColumnMode): string;
32
+ private showColumn;
33
+ /** Mermaid entity and attribute names allow only word characters. */
34
+ private identifier;
35
+ /** `label` plus the tables at the far end of `edges`, each with how many edges reach it. */
36
+ private linkedAreas;
37
+ private renderPageHtml;
38
+ private renderIndexHtml;
39
+ private renderIndexMarkdown;
40
+ /** The one-paragraph description of how the plan was built, shared by both indexes. */
41
+ private planSummary;
42
+ private escape;
43
+ }
44
+ //# sourceMappingURL=ErdClusterGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErdClusterGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/ErdClusterGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAoB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAW,MAAM,mBAAmB,CAAC;AAExF,MAAM,WAAW,0BAA0B;IACzC,uDAAuD;IACvD,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AASD,qBAAa,mBAAmB;IACvB,QAAQ,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,0BAA+B,GAAG,gBAAgB;IAwB/H,iFAAiF;IAC1E,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,aAAsB,GAAG,MAAM;IAwB3H,OAAO,CAAC,UAAU;IAMlB,qEAAqE;IACrE,OAAO,CAAC,UAAU;IAIlB,4FAA4F;IAC5F,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,eAAe;IA8CvB,OAAO,CAAC,mBAAmB;IA2B3B,uFAAuF;IACvF,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,MAAM;CAGf"}