kibi-cli 2.21.0 → 2.22.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 (164) hide show
  1. package/dist/cli-operation-metadata.d.ts +1 -1
  2. package/dist/cli-operation-metadata.js +1 -1
  3. package/dist/cli-register-foundation.d.ts.map +1 -1
  4. package/dist/cli-register-foundation.js +1 -0
  5. package/dist/commands/check.d.ts +0 -1
  6. package/dist/commands/check.d.ts.map +1 -1
  7. package/dist/commands/check.js +47 -111
  8. package/dist/commands/doctor.d.ts.map +1 -1
  9. package/dist/commands/doctor.js +107 -5
  10. package/dist/commands/init-helpers.d.ts +14 -1
  11. package/dist/commands/init-helpers.d.ts.map +1 -1
  12. package/dist/commands/init-helpers.js +49 -10
  13. package/dist/commands/init.d.ts +1 -0
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +27 -4
  16. package/dist/commands/legacy-storage-migration.d.ts +46 -1
  17. package/dist/commands/legacy-storage-migration.d.ts.map +1 -1
  18. package/dist/commands/legacy-storage-migration.js +244 -9
  19. package/dist/commands/migrate.d.ts.map +1 -1
  20. package/dist/commands/migrate.js +150 -166
  21. package/dist/commands/sync/manifest.d.ts.map +1 -1
  22. package/dist/commands/sync/manifest.js +9 -0
  23. package/dist/commands/sync/persistence.d.ts.map +1 -1
  24. package/dist/commands/sync/persistence.js +4 -0
  25. package/dist/decision-firmness.d.ts +39 -0
  26. package/dist/decision-firmness.d.ts.map +1 -0
  27. package/dist/decision-firmness.js +115 -0
  28. package/dist/extractors/markdown.d.ts +2 -0
  29. package/dist/extractors/markdown.d.ts.map +1 -1
  30. package/dist/extractors/markdown.js +14 -0
  31. package/dist/extractors/symbols-coordinator.js +1 -0
  32. package/dist/intent-search.d.ts.map +1 -1
  33. package/dist/intent-search.js +28 -6
  34. package/dist/operations/migration/inventory-rederive.d.ts +40 -1
  35. package/dist/operations/migration/inventory-rederive.d.ts.map +1 -1
  36. package/dist/operations/migration/inventory-rederive.js +99 -8
  37. package/dist/operations/migration/requirement-status.d.ts +25 -0
  38. package/dist/operations/migration/requirement-status.d.ts.map +1 -0
  39. package/dist/operations/migration/requirement-status.js +105 -0
  40. package/dist/operations/migration/schema6.d.ts +27 -0
  41. package/dist/operations/migration/schema6.d.ts.map +1 -1
  42. package/dist/operations/migration/schema6.js +308 -7
  43. package/dist/operations/migration/supersedes-reason.d.ts +26 -0
  44. package/dist/operations/migration/supersedes-reason.d.ts.map +1 -0
  45. package/dist/operations/migration/supersedes-reason.js +69 -0
  46. package/dist/operations/migration/symbol-legacy-links.d.ts +51 -0
  47. package/dist/operations/migration/symbol-legacy-links.d.ts.map +1 -0
  48. package/dist/operations/migration/symbol-legacy-links.js +319 -0
  49. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  50. package/dist/operations/modeling/predicate-applyplan.js +10 -2
  51. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  52. package/dist/operations/modeling/predicate-loader.js +11 -0
  53. package/dist/operations/modeling/predicate-types.d.ts +32 -1
  54. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  55. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  56. package/dist/operations/modeling/suggest-predicates.js +175 -35
  57. package/dist/operations/mutation/context-warning.d.ts +12 -2
  58. package/dist/operations/mutation/context-warning.d.ts.map +1 -1
  59. package/dist/operations/mutation/context-warning.js +6 -6
  60. package/dist/operations/mutation/delete.d.ts +5 -1
  61. package/dist/operations/mutation/delete.d.ts.map +1 -1
  62. package/dist/operations/mutation/delete.js +223 -17
  63. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  64. package/dist/operations/mutation/serialization.js +1 -0
  65. package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
  66. package/dist/operations/mutation/source-authoring.js +130 -35
  67. package/dist/operations/mutation/types.d.ts +39 -1
  68. package/dist/operations/mutation/types.d.ts.map +1 -1
  69. package/dist/operations/mutation/upsert.d.ts +17 -2
  70. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  71. package/dist/operations/mutation/upsert.js +82 -13
  72. package/dist/operations/mutation/validate-upsert.d.ts.map +1 -1
  73. package/dist/operations/mutation/validate-upsert.js +40 -8
  74. package/dist/operations/planning/apply-plan.d.ts +6 -1
  75. package/dist/operations/planning/apply-plan.d.ts.map +1 -1
  76. package/dist/operations/planning/apply-plan.js +26 -5
  77. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  78. package/dist/public/impact/diagnostics.js +24 -14
  79. package/dist/public/operations/catalog.d.ts +14 -5
  80. package/dist/public/operations/catalog.d.ts.map +1 -1
  81. package/dist/public/operations/check-executor.d.ts.map +1 -1
  82. package/dist/public/operations/check-executor.js +6 -0
  83. package/dist/public/operations/contracts.d.ts.map +1 -1
  84. package/dist/public/operations/contracts.js +35 -2
  85. package/dist/public/operations/decision-firmness.d.ts +34 -0
  86. package/dist/public/operations/decision-firmness.d.ts.map +1 -0
  87. package/dist/public/operations/decision-firmness.js +216 -0
  88. package/dist/public/operations/discovery-executors.d.ts +2 -0
  89. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  90. package/dist/public/operations/discovery-executors.js +25 -4
  91. package/dist/public/operations/migration-plan.d.ts +2 -0
  92. package/dist/public/operations/migration-plan.d.ts.map +1 -1
  93. package/dist/public/operations/migration-plan.js +101 -16
  94. package/dist/public/operations/result-envelope.d.ts.map +1 -1
  95. package/dist/public/operations/result-envelope.js +27 -1
  96. package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
  97. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
  98. package/dist/public/operations/specs/check-rules.generated.js +6 -1
  99. package/dist/public/operations/specs/check.d.ts +1 -1
  100. package/dist/public/operations/specs/mutation-schemas.d.ts +5 -0
  101. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  102. package/dist/public/operations/specs/mutation-schemas.js +5 -0
  103. package/dist/public/operations/specs/mutation.d.ts +6 -2
  104. package/dist/public/operations/specs/mutation.d.ts.map +1 -1
  105. package/dist/public/operations/specs/mutation.js +6 -2
  106. package/dist/public/operations/specs/planning.d.ts +2 -2
  107. package/dist/public/operations/specs/planning.js +2 -2
  108. package/dist/public/operations/specs/upsert.d.ts +5 -0
  109. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  110. package/dist/public/operations/symbol-granularity-check.d.ts +18 -0
  111. package/dist/public/operations/symbol-granularity-check.d.ts.map +1 -0
  112. package/dist/public/operations/symbol-granularity-check.js +175 -0
  113. package/dist/public/schemas/entity.d.ts.map +1 -1
  114. package/dist/public/schemas/entity.js +11 -0
  115. package/dist/public/skills/kibi-traceability/SKILL.md +6 -4
  116. package/dist/public/skills/kibi-usage/SKILL.md +50 -10
  117. package/dist/public/skills/kibi-usage/resources/source-authoring.md +4 -2
  118. package/dist/public/symbol-granularity.d.ts +17 -0
  119. package/dist/public/symbol-granularity.d.ts.map +1 -1
  120. package/dist/public/symbol-granularity.js +21 -0
  121. package/dist/relationships/shards.d.ts +10 -0
  122. package/dist/relationships/shards.d.ts.map +1 -1
  123. package/dist/relationships/shards.js +27 -11
  124. package/dist/schemas/entity.schema.json +28 -0
  125. package/dist/search-answer.d.ts +31 -2
  126. package/dist/search-answer.d.ts.map +1 -1
  127. package/dist/search-answer.js +115 -17
  128. package/dist/traceability/evidence-model.d.ts +7 -3
  129. package/dist/traceability/evidence-model.d.ts.map +1 -1
  130. package/dist/traceability/staged-symbols-manifest.js +6 -5
  131. package/dist/traceability/validate.d.ts +14 -1
  132. package/dist/traceability/validate.d.ts.map +1 -1
  133. package/dist/traceability/validate.js +41 -0
  134. package/dist/types/entities.d.ts +4 -0
  135. package/dist/types/entities.d.ts.map +1 -1
  136. package/dist/utils/kb-manifest.d.ts +6 -0
  137. package/dist/utils/kb-manifest.d.ts.map +1 -1
  138. package/dist/utils/kb-manifest.js +6 -0
  139. package/dist/utils/rule-registry.generated.d.ts +26 -0
  140. package/dist/utils/rule-registry.generated.d.ts.map +1 -1
  141. package/dist/utils/rule-registry.generated.js +31 -0
  142. package/dist/utils/schema-version.d.ts +1 -1
  143. package/dist/utils/schema-version.d.ts.map +1 -1
  144. package/dist/utils/schema-version.js +3 -1
  145. package/package.json +3 -3
  146. package/schema/entities.pl +6 -0
  147. package/src/public/impact/diagnostics.ts +29 -17
  148. package/src/public/operations/check-executor.ts +13 -0
  149. package/src/public/operations/contracts.ts +39 -2
  150. package/src/public/operations/decision-firmness.ts +280 -0
  151. package/src/public/operations/discovery-executors.ts +29 -4
  152. package/src/public/operations/migration-plan.ts +100 -19
  153. package/src/public/operations/result-envelope.ts +34 -1
  154. package/src/public/operations/specs/check-rules.generated.ts +6 -1
  155. package/src/public/operations/specs/mutation-schemas.ts +6 -0
  156. package/src/public/operations/specs/mutation.ts +7 -2
  157. package/src/public/operations/specs/planning.ts +2 -2
  158. package/src/public/operations/symbol-granularity-check.ts +233 -0
  159. package/src/public/schemas/entity.ts +12 -0
  160. package/src/public/skills/kibi-traceability/SKILL.md +6 -4
  161. package/src/public/skills/kibi-usage/SKILL.md +50 -10
  162. package/src/public/skills/kibi-usage/resources/source-authoring.md +4 -2
  163. package/src/public/symbol-granularity.ts +37 -0
  164. package/src/schemas/entity.schema.json +28 -0
@@ -0,0 +1,69 @@
1
+ /*
2
+ Kibi — repo-local, per-branch, queryable long-term memory for software projects
3
+ Copyright (C) 2026 Piotr Franczyk
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU Affero General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Affero General Public License
16
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ import { authoredSupersedes, listDecisionEntities, supersedeAcknowledgements, unexplainedSupersedes, } from "../../public/operations/decision-firmness.js";
19
+ import { readKbManifest, writeKbManifest } from "../../utils/kb-manifest.js";
20
+ /** Migration action code for the schema 9 acknowledgement. */
21
+ // implements REQ-kb-decision-firmness, REQ-cli-schema-migration
22
+ export const SUPERSEDES_REASON_ACKNOWLEDGE_CODE = "supersedes_reason_acknowledge";
23
+ /**
24
+ * Superseding requirements and ADRs without a "Why this changed" section
25
+ * whose supersede edges the manifest does not acknowledge yet, retired ones
26
+ * included. Nothing in the sources changes: no reason is written, the
27
+ * manifest only records that these edges predate the rule. Read-only.
28
+ */
29
+ // implements REQ-kb-decision-firmness, REQ-cli-schema-migration
30
+ export function planSupersedesReasonAcknowledgement(workspaceRoot) {
31
+ const entities = listDecisionEntities(workspaceRoot);
32
+ const known = new Set(readKbManifest(workspaceRoot)?.supersedesReasonAcknowledged ?? []);
33
+ const edges = authoredSupersedes(workspaceRoot, entities);
34
+ return unexplainedSupersedes(entities, edges)
35
+ .map((entity) => ({
36
+ id: entity.id,
37
+ type: entity.type,
38
+ path: entity.path,
39
+ edges: supersedeAcknowledgements(entity.id, edges).filter((edge) => !known.has(edge)),
40
+ }))
41
+ .filter((target) => target.edges.length > 0);
42
+ }
43
+ /** The manifest list with the targets' edges added, sorted and unique. */
44
+ // implements REQ-kb-decision-firmness
45
+ export function mergeSupersedesAcknowledgements(existing, targets) {
46
+ return [
47
+ ...new Set([...(existing ?? []), ...targets.flatMap((t) => t.edges)]),
48
+ ].sort();
49
+ }
50
+ /**
51
+ * Record the acknowledged edges in the manifest; returns how many entities
52
+ * were acknowledged. Without a manifest there is no schema to upgrade from,
53
+ * so it refuses rather than report an acknowledgement it did not write.
54
+ */
55
+ // implements REQ-kb-decision-firmness, REQ-cli-schema-migration
56
+ export function applySupersedesReasonAcknowledgement(workspaceRoot) {
57
+ const targets = planSupersedesReasonAcknowledgement(workspaceRoot);
58
+ if (targets.length === 0)
59
+ return 0;
60
+ const manifest = readKbManifest(workspaceRoot);
61
+ if (manifest === null) {
62
+ throw new Error("Cannot acknowledge existing supersedes without .kb/manifest.json; run 'kibi migrate --yes', which writes the manifest and the acknowledgement together.");
63
+ }
64
+ writeKbManifest(workspaceRoot, {
65
+ ...manifest,
66
+ supersedesReasonAcknowledged: mergeSupersedesAcknowledgements(manifest.supersedesReasonAcknowledged, targets),
67
+ });
68
+ return targets.length;
69
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Mark the coarse traceability links of a symbols manifest
3
+ * `granularity_reason: legacy-link`.
4
+ *
5
+ * A link is coarse by the staged granularity gate's own rule
6
+ * (`coarseLinkBehavioralNames`): the source declares behavioral symbols
7
+ * narrower than the manifest symbol, so `kibi check --staged` would block the
8
+ * first commit that touches it. The pass is idempotent and independent of
9
+ * the schema version: it marks whatever the current rule calls coarse and
10
+ * has no reason yet, and a second run finds nothing.
11
+ */
12
+ /** Automatic migration action code of the legacy-link pass. */
13
+ export declare const SYMBOL_LEGACY_LINK_MARK_CODE = "symbol_legacy_link_mark";
14
+ export declare const SYMBOL_LEGACY_LINK_MARK_ACTION_ID = "symbol-legacy-link-mark";
15
+ /** One coarse link the pass marks. */
16
+ export type LegacyLinkTarget = Readonly<{
17
+ id: string;
18
+ title: string;
19
+ sourceFile: string;
20
+ /** The narrower behavioral symbols that make the link coarse. */
21
+ granularSymbols: readonly string[];
22
+ }>;
23
+ export type LegacyLinkPlan = Readonly<{
24
+ /** Workspace-relative manifest path. */
25
+ manifestPath: string;
26
+ /** SHA-256 of the manifest bytes the plan was read from; null when absent. */
27
+ manifestHash: string | null;
28
+ targets: readonly LegacyLinkTarget[];
29
+ }>;
30
+ /**
31
+ * The coarse links of `manifestPath` (default `.kb/symbols.yaml`) that carry
32
+ * no granularity_reason yet. Read-only.
33
+ */
34
+ export declare function planSymbolLegacyLinks(workspaceRoot: string, manifestPath?: string): LegacyLinkPlan;
35
+ /**
36
+ * Mark the coarse links found by `planSymbolLegacyLinks`. With
37
+ * `expectedHash` (a migration plan's evidence), the manifest must still hold
38
+ * the bytes the plan was read from; a manifest whose planned links are all
39
+ * marked already is left alone, so the pass is idempotent. Returns the ids
40
+ * marked, and the planned ones that could not be marked in place (an entry
41
+ * whose `id` is not its first key, for example).
42
+ */
43
+ export declare function applySymbolLegacyLinks(workspaceRoot: string, options?: {
44
+ manifestPath?: string;
45
+ expectedHash?: string;
46
+ expectedIds?: readonly string[];
47
+ }): {
48
+ marked: string[];
49
+ unmarked: string[];
50
+ };
51
+ //# sourceMappingURL=symbol-legacy-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-legacy-links.d.ts","sourceRoot":"","sources":["../../../src/operations/migration/symbol-legacy-links.ts"],"names":[],"mappings":"AAmCA;;;;;;;;;;GAUG;AAEH,+DAA+D;AAE/D,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAEtE,eAAO,MAAM,iCAAiC,4BAA4B,CAAC;AAE3E,sCAAsC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC,CAAC;AAGH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACtC,CAAC,CAAC;AAkHH;;;GAGG;AAEH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,YAAY,GAAE,MAAiC,GAC9C,cAAc,CAwDhB;AAoED;;;;;;;GAOG;AAEH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,GACL;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC1C"}
@@ -0,0 +1,319 @@
1
+ /*
2
+ Kibi — repo-local, per-branch, queryable long-term memory for software projects
3
+ Copyright (C) 2026 Piotr Franczyk
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU Affero General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Affero General Public License
16
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ import { createHash } from "node:crypto";
19
+ import { existsSync, readFileSync } from "node:fs";
20
+ import path from "node:path";
21
+ import { isDeepStrictEqual } from "node:util";
22
+ import { load as parseYAML } from "js-yaml";
23
+ import { createTsMorphSourceAnalysisProvider } from "../../extractors/symbols-ts.js";
24
+ import { coarseLinkBehavioralNames, isTraceabilityRelationshipType, } from "../../public/symbol-granularity.js";
25
+ import { extractSymbolsFromStagedFile, } from "../../traceability/symbol-extract.js";
26
+ import { KB_PATHS } from "../../utils/kb-paths.js";
27
+ import { writeFileAtomically } from "./kb-sources.js";
28
+ /**
29
+ * Mark the coarse traceability links of a symbols manifest
30
+ * `granularity_reason: legacy-link`.
31
+ *
32
+ * A link is coarse by the staged granularity gate's own rule
33
+ * (`coarseLinkBehavioralNames`): the source declares behavioral symbols
34
+ * narrower than the manifest symbol, so `kibi check --staged` would block the
35
+ * first commit that touches it. The pass is idempotent and independent of
36
+ * the schema version: it marks whatever the current rule calls coarse and
37
+ * has no reason yet, and a second run finds nothing.
38
+ */
39
+ /** Automatic migration action code of the legacy-link pass. */
40
+ // implements REQ-cli-schema-migration
41
+ export const SYMBOL_LEGACY_LINK_MARK_CODE = "symbol_legacy_link_mark";
42
+ // implements REQ-cli-schema-migration
43
+ export const SYMBOL_LEGACY_LINK_MARK_ACTION_ID = "symbol-legacy-link-mark";
44
+ function isRecord(value) {
45
+ return value !== null && typeof value === "object" && !Array.isArray(value);
46
+ }
47
+ function linkType(link) {
48
+ // A bare string link compiles as `implements`; a typed link keeps its type.
49
+ if (typeof link === "string")
50
+ return "implements";
51
+ return isRecord(link) ? link.type : undefined;
52
+ }
53
+ /** True when the record compiles at least one traceability relationship. */
54
+ function hasTraceabilityRelationship(record) {
55
+ const links = Array.isArray(record.links) ? record.links : [];
56
+ const relationships = Array.isArray(record.relationships)
57
+ ? record.relationships
58
+ : [];
59
+ return [
60
+ ...links.map(linkType),
61
+ ...relationships.map((relationship) => isRecord(relationship) ? relationship.type : undefined),
62
+ ].some(isTraceabilityRelationshipType);
63
+ }
64
+ /**
65
+ * The analyzer the staged gate uses (the built-in ts-morph provider), built
66
+ * once per pass: a provider per file would rebuild the TypeScript project for
67
+ * every source the manifest names.
68
+ */
69
+ function sharedAnalyzer() {
70
+ let provider = null;
71
+ return (filePath, content) => {
72
+ provider ??= createTsMorphSourceAnalysisProvider();
73
+ return provider.supportsFile(filePath)
74
+ ? provider.analyzeText(filePath, content)
75
+ : null;
76
+ };
77
+ }
78
+ function sourceSymbols(workspaceRoot, sourceFile, analyzeText) {
79
+ const absolutePath = path.isAbsolute(sourceFile)
80
+ ? sourceFile
81
+ : path.join(workspaceRoot, sourceFile);
82
+ if (!existsSync(absolutePath))
83
+ return [];
84
+ try {
85
+ return extractSymbolsFromStagedFile({
86
+ path: sourceFile,
87
+ status: "M",
88
+ hunkRanges: [{ start: 1, end: Number.MAX_SAFE_INTEGER }],
89
+ content: readFileSync(absolutePath, "utf8"),
90
+ }, undefined, { analyzeText });
91
+ }
92
+ catch {
93
+ return [];
94
+ }
95
+ }
96
+ function escapeRegExp(value) {
97
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
98
+ }
99
+ /**
100
+ * True when `title` is an exported function, variable (not a class
101
+ * expression), interface, type or enum declaration of the source file
102
+ * and no class of that name exists. The extractor then reports `title`
103
+ * itself and no `title.*` member, so nothing is narrower and the link is not
104
+ * coarse: the full analysis reaches the same answer, only much slower, and a
105
+ * manifest names hundreds of such functions.
106
+ */
107
+ function declaresMemberlessSymbol(workspaceRoot, sourceFile, title, cache) {
108
+ if (!/^[A-Za-z_$][\w$]*$/.test(title))
109
+ return false;
110
+ let content = cache.get(sourceFile);
111
+ if (content === undefined) {
112
+ try {
113
+ content = readFileSync(path.resolve(workspaceRoot, sourceFile), "utf8");
114
+ }
115
+ catch {
116
+ content = null;
117
+ }
118
+ cache.set(sourceFile, content);
119
+ }
120
+ if (content === null)
121
+ return false;
122
+ const name = escapeRegExp(title);
123
+ if (new RegExp(`\\bclass\\s+${name}\\b`).test(content))
124
+ return false;
125
+ return [
126
+ `^export\\s+(?:default\\s+)?(?:async\\s+)?function\\s*\\*?\\s*${name}\\s*[(<]`,
127
+ `^export\\s+(?:declare\\s+)?(?:interface|type|enum|const\\s+enum)\\s+${name}\\b`,
128
+ // A variable, unless its initializer is a class expression (members).
129
+ `^export\\s+(?:const|let|var)\\s+${name}\\s*(?::[^=\\n]*)?=\\s*(?!class\\b)\\S`,
130
+ ].some((pattern) => new RegExp(pattern, "m").test(content));
131
+ }
132
+ function digest(content) {
133
+ return createHash("sha256").update(content, "utf8").digest("hex");
134
+ }
135
+ /**
136
+ * The coarse links of `manifestPath` (default `.kb/symbols.yaml`) that carry
137
+ * no granularity_reason yet. Read-only.
138
+ */
139
+ // implements REQ-cli-schema-migration, REQ-symbol-behavioral-anchors
140
+ export function planSymbolLegacyLinks(workspaceRoot, manifestPath = KB_PATHS.symbolsManifest) {
141
+ const absolute = path.resolve(workspaceRoot, manifestPath);
142
+ let content;
143
+ try {
144
+ content = readFileSync(absolute, "utf8");
145
+ }
146
+ catch {
147
+ return { manifestPath, manifestHash: null, targets: [] };
148
+ }
149
+ const empty = { manifestPath, manifestHash: digest(content), targets: [] };
150
+ let parsed;
151
+ try {
152
+ parsed = parseYAML(content);
153
+ }
154
+ catch {
155
+ // A malformed manifest fails sync with its own diagnostic.
156
+ return empty;
157
+ }
158
+ if (!isRecord(parsed) || !Array.isArray(parsed.symbols))
159
+ return empty;
160
+ const targets = [];
161
+ const symbolsByFile = new Map();
162
+ const analyzeText = sharedAnalyzer();
163
+ const sourceText = new Map();
164
+ for (const record of parsed.symbols) {
165
+ if (!isRecord(record))
166
+ continue;
167
+ if (typeof record.id !== "string" ||
168
+ typeof record.title !== "string" ||
169
+ typeof record.sourceFile !== "string")
170
+ continue;
171
+ if (record.granularity_reason !== undefined)
172
+ continue;
173
+ if (!hasTraceabilityRelationship(record))
174
+ continue;
175
+ if (declaresMemberlessSymbol(workspaceRoot, record.sourceFile, record.title, sourceText))
176
+ continue;
177
+ let symbols = symbolsByFile.get(record.sourceFile);
178
+ if (symbols === undefined) {
179
+ symbols = sourceSymbols(workspaceRoot, record.sourceFile, analyzeText);
180
+ symbolsByFile.set(record.sourceFile, symbols);
181
+ }
182
+ const granularSymbols = coarseLinkBehavioralNames(record.title, symbols);
183
+ if (granularSymbols.length === 0)
184
+ continue;
185
+ targets.push({
186
+ id: record.id,
187
+ title: record.title,
188
+ sourceFile: record.sourceFile,
189
+ granularSymbols,
190
+ });
191
+ }
192
+ return { manifestPath, manifestHash: digest(content), targets };
193
+ }
194
+ function unquoted(value) {
195
+ const trimmed = value.trim();
196
+ if (trimmed.length >= 2 &&
197
+ (trimmed.startsWith('"') || trimmed.startsWith("'")) &&
198
+ trimmed.endsWith(trimmed[0] ?? "")) {
199
+ return trimmed.slice(1, -1);
200
+ }
201
+ return trimmed;
202
+ }
203
+ /**
204
+ * Insert `granularity_reason: legacy-link` into each listed symbol entry,
205
+ * leaving every other byte of the manifest as it was.
206
+ */
207
+ function withLegacyReasons(content, symbolIds) {
208
+ const lines = content.split("\n");
209
+ const output = [];
210
+ let activeId = null;
211
+ let activeHasReason = false;
212
+ let activePropertyIndent = "";
213
+ const flushLegacyReason = () => {
214
+ if (activeId !== null &&
215
+ symbolIds.has(activeId) &&
216
+ !activeHasReason &&
217
+ activePropertyIndent.length > 0) {
218
+ output.push(`${activePropertyIndent}granularity_reason: legacy-link`);
219
+ activeHasReason = true;
220
+ }
221
+ };
222
+ for (const line of lines) {
223
+ const idMatch = line.match(/^(\s*)-\s+id:\s+(.+?)\s*$/);
224
+ if (idMatch) {
225
+ flushLegacyReason();
226
+ activeId = unquoted(idMatch[2] ?? "");
227
+ activeHasReason = false;
228
+ activePropertyIndent = `${idMatch[1] ?? ""} `;
229
+ }
230
+ if (activeId !== null && /^\s+granularity_reason:\s+/.test(line)) {
231
+ activeHasReason = true;
232
+ }
233
+ if (activeId !== null &&
234
+ symbolIds.has(activeId) &&
235
+ !activeHasReason &&
236
+ /^\s+status:\s+/.test(line)) {
237
+ const indent = line.match(/^\s*/)?.[0] ?? "";
238
+ output.push(`${indent}granularity_reason: legacy-link`);
239
+ activeHasReason = true;
240
+ }
241
+ output.push(line);
242
+ }
243
+ flushLegacyReason();
244
+ return output.join("\n");
245
+ }
246
+ /**
247
+ * Mark the coarse links found by `planSymbolLegacyLinks`. With
248
+ * `expectedHash` (a migration plan's evidence), the manifest must still hold
249
+ * the bytes the plan was read from; a manifest whose planned links are all
250
+ * marked already is left alone, so the pass is idempotent. Returns the ids
251
+ * marked, and the planned ones that could not be marked in place (an entry
252
+ * whose `id` is not its first key, for example).
253
+ */
254
+ // implements REQ-cli-schema-migration, REQ-symbol-behavioral-anchors
255
+ export function applySymbolLegacyLinks(workspaceRoot, options = {}) {
256
+ const plan = planSymbolLegacyLinks(workspaceRoot, options.manifestPath ?? KB_PATHS.symbolsManifest);
257
+ if (plan.targets.length === 0)
258
+ return { marked: [], unmarked: [] };
259
+ if (options.expectedHash !== undefined &&
260
+ plan.manifestHash !== options.expectedHash) {
261
+ throw new Error(`${plan.manifestPath} changed since planning; rerun kibi migrate and approve the new plan.`);
262
+ }
263
+ const ids = new Set(plan.targets
264
+ .map((target) => target.id)
265
+ .filter((id) => options.expectedIds === undefined || options.expectedIds.includes(id)));
266
+ if (ids.size === 0)
267
+ return { marked: [], unmarked: [] };
268
+ const absolute = path.resolve(workspaceRoot, plan.manifestPath);
269
+ const content = readFileSync(absolute, "utf8");
270
+ const next = withLegacyReasons(content, ids);
271
+ const marked = markedIds(content, next, ids);
272
+ if (marked === null)
273
+ throw new Error(`${plan.manifestPath}: legacy-link reasons could not be added without changing other symbol fields; add granularity_reason: legacy-link by hand.`);
274
+ if (marked.length > 0)
275
+ writeFileAtomically(absolute, next);
276
+ return {
277
+ marked,
278
+ unmarked: [...ids].filter((id) => !marked.includes(id)).sort(),
279
+ };
280
+ }
281
+ /**
282
+ * The ids whose only change between `before` and `after` is a new
283
+ * `granularity_reason: legacy-link`, or null when anything else changed.
284
+ */
285
+ function markedIds(before, after, ids) {
286
+ try {
287
+ const previous = parseYAML(before);
288
+ const next = parseYAML(after);
289
+ if (!Array.isArray(previous.symbols) ||
290
+ !Array.isArray(next.symbols) ||
291
+ previous.symbols.length !== next.symbols.length)
292
+ return null;
293
+ const marked = [];
294
+ for (const [index, entry] of next.symbols.entries()) {
295
+ const old = previous.symbols[index];
296
+ if (!isRecord(entry) || !isRecord(old)) {
297
+ if (!isDeepStrictEqual(entry, old))
298
+ return null;
299
+ continue;
300
+ }
301
+ const { granularity_reason: reason, ...rest } = entry;
302
+ const { granularity_reason: oldReason, ...oldRest } = old;
303
+ if (!isDeepStrictEqual(rest, oldRest))
304
+ return null;
305
+ if (reason === oldReason)
306
+ continue;
307
+ if (reason !== "legacy-link" ||
308
+ oldReason !== undefined ||
309
+ typeof entry.id !== "string" ||
310
+ !ids.has(entry.id))
311
+ return null;
312
+ marked.push(entry.id);
313
+ }
314
+ return marked.sort();
315
+ }
316
+ catch {
317
+ return null;
318
+ }
319
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"predicate-applyplan.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/predicate-applyplan.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAQ9B,wBAAgB,eAAe,CAC7B,MAAM,EAAE,wBAAwB,EAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EACvD,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,EAChC,WAAW,CAAC,EAAE;IACZ,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,GACA,mBAAmB,CAuLrB;AAGD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE,qBAAqB,GAC1B,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0ChC;AAGD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,CAAC,EAAE,MAAM,EAClB,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAuBhC;AAoBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,qBAAqB,GAC1B,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwBhC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,0BAA0B,CAoE5B"}
1
+ {"version":3,"file":"predicate-applyplan.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/predicate-applyplan.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAQ9B,wBAAgB,eAAe,CAC7B,MAAM,EAAE,wBAAwB,EAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EACvD,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,EAChC,WAAW,CAAC,EAAE;IACZ,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,GACA,mBAAmB,CAuLrB;AAGD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE,qBAAqB,GAC1B,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkDhC;AAGD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,CAAC,EAAE,MAAM,EAClB,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAuBhC;AAoBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,qBAAqB,GAC1B,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwBhC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,0BAA0B,CAoE5B"}
@@ -1,4 +1,4 @@
1
- import { semanticClaimKey } from "../semantic-advisor/clauses.js";
1
+ import { normalizeSemanticClause, semanticClaimKey, } from "../semantic-advisor/clauses.js";
2
2
  import { exactLauncherPredicateArgs } from "../semantic-advisor/predicate-rules-launcher.js";
3
3
  import { aggregateBindingProvenance, bindingCanBeApplied, classifyBinding, isGenericPlaceholder, isParticipantArgumentType, } from "./predicate-bindings.js";
4
4
  import { inferArgs } from "./predicate-inference.js";
@@ -190,11 +190,19 @@ export function buildPredicateApplyPlan(suggestion, args) {
190
190
  ? { subject_key: suggestion.subject_key }
191
191
  : {}),
192
192
  predicate_name: suggestion.predicate_name,
193
+ // The schema's namespace, so the fact conforms to the project
194
+ // schema it was planned from rather than to default:<name>.
195
+ ...(suggestion.schema.predicate_namespace
196
+ ? { predicate_namespace: suggestion.schema.predicate_namespace }
197
+ : {}),
193
198
  predicate_args: suggestion.predicate_args,
194
199
  canonical_key: suggestion.canonical_key,
195
200
  polarity: suggestion.polarity,
196
201
  claim_key: claimKey,
197
- claim_text: args.text.trim(),
202
+ // The ledger stores the clause without its sentence punctuation, and
203
+ // the proof compares the fact's claim_text with the ledger entry
204
+ // verbatim, so the fact quotes the same normalised clause.
205
+ claim_text: normalizeSemanticClause(args.text),
198
206
  },
199
207
  relationships: [],
200
208
  },
@@ -1 +1 @@
1
- {"version":3,"file":"predicate-loader.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/predicate-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAK3E,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAI9B,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAExE;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CACxE,wBAAwB,EACxB,UAAU,CACX,GAAG;IACF,WAAW,EAAE,mBAAmB,CAAC;CAClC,CA6BA;AAGD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,sBAAsB,EAAE,OAAO,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAwBrC;AAGD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,wBAAwB,EAAE,CA0D5B;AAGD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,mBAAmB,GAAG,SAAS,CAOjC;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAQpD"}
1
+ {"version":3,"file":"predicate-loader.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/predicate-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAK3E,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAI9B,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAExE;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CACxE,wBAAwB,EACxB,UAAU,CACX,GAAG;IACF,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAgCA;AAGD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,sBAAsB,EAAE,OAAO,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAwBrC;AAGD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,wBAAwB,EAAE,CAoE5B;AAGD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,mBAAmB,GAAG,SAAS,CAOjC;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAQpD"}
@@ -10,6 +10,9 @@ export function schemaForCandidate(schema) {
10
10
  return {
11
11
  id: schema.id,
12
12
  predicate_name: schema.predicate_name,
13
+ ...(schema.predicate_namespace
14
+ ? { predicate_namespace: schema.predicate_namespace }
15
+ : {}),
13
16
  title: schema.title,
14
17
  description: schema.description,
15
18
  argument_names: schema.argument_names,
@@ -67,10 +70,18 @@ export function predicateSchemaFromEntity(entity) {
67
70
  const argumentDescriptions = stringArray(entity.argument_descriptions);
68
71
  const keyArguments = stringArray(entity.key_arguments);
69
72
  const vocabulary = predicateVocabularyFromEntity(entity);
73
+ // A project schema's namespace is part of the predicate signature the
74
+ // conformance rule checks, so a planned fact has to carry it.
75
+ const predicateNamespace = normalizeOptionalString(typeof entity.predicate_namespace === "string"
76
+ ? entity.predicate_namespace
77
+ : undefined);
70
78
  return [
71
79
  {
72
80
  id: String(entity.id ?? hashId("FACT-SCHEMA", [predicateName])),
73
81
  predicate_name: predicateName,
82
+ ...(predicateNamespace && predicateNamespace !== "default"
83
+ ? { predicate_namespace: predicateNamespace }
84
+ : {}),
74
85
  title: String(entity.title ?? predicateName),
75
86
  description: String(entity.description ??
76
87
  `Project-local ${predicateName} predicate schema.`),
@@ -6,6 +6,8 @@ export interface PredicateUsageHints {
6
6
  export interface PredicateSchemaCandidate {
7
7
  id: string;
8
8
  predicate_name: string;
9
+ /** The schema's predicate_namespace; absent for the default namespace. */
10
+ predicate_namespace?: string;
9
11
  title: string;
10
12
  description: string;
11
13
  argument_names: string[];
@@ -128,7 +130,30 @@ export interface ExistingClaimGrounding {
128
130
  };
129
131
  factId: string;
130
132
  factKind: string | null;
133
+ /** The stored claim_key of the grounding fact. */
131
134
  claimKey: string;
135
+ /** The stored canonical_key of the grounding fact (predicate facts), else null. */
136
+ canonicalKey: string | null;
137
+ /**
138
+ * How the fact was recognised as grounding this claim: the same claim_key
139
+ * (the same proposition text), or the same canonical_key as the recommended
140
+ * candidate (the same predicate tuple stated in other words).
141
+ */
142
+ matchedBy: "claim_key" | "canonical_key";
143
+ }
144
+ /**
145
+ * A stored decision-predicate fact of a current requirement that agrees with
146
+ * the recommended candidate on every key argument and decides the opposite,
147
+ * found when no hash-bound plan carried the contradiction analysis.
148
+ */
149
+ export interface CandidateDecisionConflict {
150
+ requirementId: string;
151
+ factId: string;
152
+ /** The stored fact's effective decision. */
153
+ effect: string;
154
+ /** The candidate's effective decision. */
155
+ proposedEffect: string;
156
+ canonicalKey: string;
132
157
  }
133
158
  export interface SuggestPredicatesResult {
134
159
  content: Array<{
@@ -143,7 +168,7 @@ export interface SuggestPredicatesResult {
143
168
  requirementId: string | null;
144
169
  subject: string;
145
170
  candidates: PredicateSuggestion[];
146
- recommendedAction: "apply_requires_predicate" | "provide_argument_bindings" | "resolve_schema_reference" | "record_ontology_gap" | "review_nonlogical" | "replace_grounding";
171
+ recommendedAction: "apply_requires_predicate" | "provide_argument_bindings" | "resolve_schema_reference" | "record_ontology_gap" | "review_nonlogical" | "replace_grounding" | "extend_requirement" | "keep_existing_grounding";
147
172
  recommendedPredicateSchema: RecommendedPredicateSchema | null;
148
173
  applyPlan: Array<Record<string, unknown>>;
149
174
  relationshipPlan: Record<string, unknown> | null;
@@ -156,6 +181,12 @@ export interface SuggestPredicatesResult {
156
181
  /** The planned predicate fact id a requires_predicate link must target (never a candidate id). */
157
182
  relationshipTarget?: string | null;
158
183
  existingGrounding?: ExistingClaimGrounding[];
184
+ /**
185
+ * Stored decision facts of current requirements that contradict the
186
+ * recommended candidate on its key arguments; empty when a plan carried
187
+ * the contradiction analysis or no complete candidate was found.
188
+ */
189
+ decisionConflicts?: CandidateDecisionConflict[];
159
190
  replacementPlan?: Record<string, unknown> | null;
160
191
  /** On provide_argument_bindings: one hint per unbound argument of the recommended candidate. */
161
192
  bindingHints?: BindingHint[];
@@ -1 +1 @@
1
- {"version":3,"file":"predicate-types.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/predicate-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"predicate-types.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/predicate-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"suggest-predicates.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/suggest-predicates.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACX,MAAM,0CAA0C,CAAC;AA2BlD,OAAO,KAAK,EAGV,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AA+H9B,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,EACzE,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,GACzE,MAAM,CAIR;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,IAAI,CACR,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,EACD,KAAK,EAAE,IAAI,CACT,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,GACA,MAAM,CAKR;AA+HD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAmUlC;AAiRD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,uBAAuB,CAAC,CAElC"}
1
+ {"version":3,"file":"suggest-predicates.d.ts","sourceRoot":"","sources":["../../../src/operations/modeling/suggest-predicates.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACX,MAAM,0CAA0C,CAAC;AA2BlD,OAAO,KAAK,EAIV,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AA+H9B,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,EACzE,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,GACzE,MAAM,CAIR;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,IAAI,CACR,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,EACD,KAAK,EAAE,IAAI,CACT,mBAAmB,EACnB,qBAAqB,GAAG,OAAO,GAAG,gBAAgB,CACnD,GACA,MAAM,CAKR;AA+ID,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAyYlC;AA+WD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,uBAAuB,CAAC,CAElC"}