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.
- package/dist/cli-operation-metadata.d.ts +1 -1
- package/dist/cli-operation-metadata.js +1 -1
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +1 -0
- package/dist/commands/check.d.ts +0 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +47 -111
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +107 -5
- package/dist/commands/init-helpers.d.ts +14 -1
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +49 -10
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +27 -4
- package/dist/commands/legacy-storage-migration.d.ts +46 -1
- package/dist/commands/legacy-storage-migration.d.ts.map +1 -1
- package/dist/commands/legacy-storage-migration.js +244 -9
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +150 -166
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +9 -0
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +4 -0
- package/dist/decision-firmness.d.ts +39 -0
- package/dist/decision-firmness.d.ts.map +1 -0
- package/dist/decision-firmness.js +115 -0
- package/dist/extractors/markdown.d.ts +2 -0
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +14 -0
- package/dist/extractors/symbols-coordinator.js +1 -0
- package/dist/intent-search.d.ts.map +1 -1
- package/dist/intent-search.js +28 -6
- package/dist/operations/migration/inventory-rederive.d.ts +40 -1
- package/dist/operations/migration/inventory-rederive.d.ts.map +1 -1
- package/dist/operations/migration/inventory-rederive.js +99 -8
- package/dist/operations/migration/requirement-status.d.ts +25 -0
- package/dist/operations/migration/requirement-status.d.ts.map +1 -0
- package/dist/operations/migration/requirement-status.js +105 -0
- package/dist/operations/migration/schema6.d.ts +27 -0
- package/dist/operations/migration/schema6.d.ts.map +1 -1
- package/dist/operations/migration/schema6.js +308 -7
- package/dist/operations/migration/supersedes-reason.d.ts +26 -0
- package/dist/operations/migration/supersedes-reason.d.ts.map +1 -0
- package/dist/operations/migration/supersedes-reason.js +69 -0
- package/dist/operations/migration/symbol-legacy-links.d.ts +51 -0
- package/dist/operations/migration/symbol-legacy-links.d.ts.map +1 -0
- package/dist/operations/migration/symbol-legacy-links.js +319 -0
- package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applyplan.js +10 -2
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +11 -0
- package/dist/operations/modeling/predicate-types.d.ts +32 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +175 -35
- package/dist/operations/mutation/context-warning.d.ts +12 -2
- package/dist/operations/mutation/context-warning.d.ts.map +1 -1
- package/dist/operations/mutation/context-warning.js +6 -6
- package/dist/operations/mutation/delete.d.ts +5 -1
- package/dist/operations/mutation/delete.d.ts.map +1 -1
- package/dist/operations/mutation/delete.js +223 -17
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +1 -0
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
- package/dist/operations/mutation/source-authoring.js +130 -35
- package/dist/operations/mutation/types.d.ts +39 -1
- package/dist/operations/mutation/types.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.d.ts +17 -2
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +82 -13
- package/dist/operations/mutation/validate-upsert.d.ts.map +1 -1
- package/dist/operations/mutation/validate-upsert.js +40 -8
- package/dist/operations/planning/apply-plan.d.ts +6 -1
- package/dist/operations/planning/apply-plan.d.ts.map +1 -1
- package/dist/operations/planning/apply-plan.js +26 -5
- package/dist/public/impact/diagnostics.d.ts.map +1 -1
- package/dist/public/impact/diagnostics.js +24 -14
- package/dist/public/operations/catalog.d.ts +14 -5
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +6 -0
- package/dist/public/operations/contracts.d.ts.map +1 -1
- package/dist/public/operations/contracts.js +35 -2
- package/dist/public/operations/decision-firmness.d.ts +34 -0
- package/dist/public/operations/decision-firmness.d.ts.map +1 -0
- package/dist/public/operations/decision-firmness.js +216 -0
- package/dist/public/operations/discovery-executors.d.ts +2 -0
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +25 -4
- package/dist/public/operations/migration-plan.d.ts +2 -0
- package/dist/public/operations/migration-plan.d.ts.map +1 -1
- package/dist/public/operations/migration-plan.js +101 -16
- package/dist/public/operations/result-envelope.d.ts.map +1 -1
- package/dist/public/operations/result-envelope.js +27 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
- package/dist/public/operations/specs/check-rules.generated.js +6 -1
- package/dist/public/operations/specs/check.d.ts +1 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts +5 -0
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +5 -0
- package/dist/public/operations/specs/mutation.d.ts +6 -2
- package/dist/public/operations/specs/mutation.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation.js +6 -2
- package/dist/public/operations/specs/planning.d.ts +2 -2
- package/dist/public/operations/specs/planning.js +2 -2
- package/dist/public/operations/specs/upsert.d.ts +5 -0
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-granularity-check.d.ts +18 -0
- package/dist/public/operations/symbol-granularity-check.d.ts.map +1 -0
- package/dist/public/operations/symbol-granularity-check.js +175 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +11 -0
- package/dist/public/skills/kibi-traceability/SKILL.md +6 -4
- package/dist/public/skills/kibi-usage/SKILL.md +50 -10
- package/dist/public/skills/kibi-usage/resources/source-authoring.md +4 -2
- package/dist/public/symbol-granularity.d.ts +17 -0
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.js +21 -0
- package/dist/relationships/shards.d.ts +10 -0
- package/dist/relationships/shards.d.ts.map +1 -1
- package/dist/relationships/shards.js +27 -11
- package/dist/schemas/entity.schema.json +28 -0
- package/dist/search-answer.d.ts +31 -2
- package/dist/search-answer.d.ts.map +1 -1
- package/dist/search-answer.js +115 -17
- package/dist/traceability/evidence-model.d.ts +7 -3
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +6 -5
- package/dist/traceability/validate.d.ts +14 -1
- package/dist/traceability/validate.d.ts.map +1 -1
- package/dist/traceability/validate.js +41 -0
- package/dist/types/entities.d.ts +4 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/kb-manifest.d.ts +6 -0
- package/dist/utils/kb-manifest.d.ts.map +1 -1
- package/dist/utils/kb-manifest.js +6 -0
- package/dist/utils/rule-registry.generated.d.ts +26 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +31 -0
- package/dist/utils/schema-version.d.ts +1 -1
- package/dist/utils/schema-version.d.ts.map +1 -1
- package/dist/utils/schema-version.js +3 -1
- package/package.json +3 -3
- package/schema/entities.pl +6 -0
- package/src/public/impact/diagnostics.ts +29 -17
- package/src/public/operations/check-executor.ts +13 -0
- package/src/public/operations/contracts.ts +39 -2
- package/src/public/operations/decision-firmness.ts +280 -0
- package/src/public/operations/discovery-executors.ts +29 -4
- package/src/public/operations/migration-plan.ts +100 -19
- package/src/public/operations/result-envelope.ts +34 -1
- package/src/public/operations/specs/check-rules.generated.ts +6 -1
- package/src/public/operations/specs/mutation-schemas.ts +6 -0
- package/src/public/operations/specs/mutation.ts +7 -2
- package/src/public/operations/specs/planning.ts +2 -2
- package/src/public/operations/symbol-granularity-check.ts +233 -0
- package/src/public/schemas/entity.ts +12 -0
- package/src/public/skills/kibi-traceability/SKILL.md +6 -4
- package/src/public/skills/kibi-usage/SKILL.md +50 -10
- package/src/public/skills/kibi-usage/resources/source-authoring.md +4 -2
- package/src/public/symbol-granularity.ts +37 -0
- 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":"
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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"}
|