planfs-core 1.2.0 → 1.4.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/README.md +107 -0
- package/dist/ai.d.ts +1 -19
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +0 -124
- package/dist/ai.js.map +1 -1
- package/dist/entity-content.d.ts +6 -0
- package/dist/entity-content.d.ts.map +1 -0
- package/dist/entity-content.js +94 -0
- package/dist/entity-content.js.map +1 -0
- package/dist/entity-factory.d.ts +13 -0
- package/dist/entity-factory.d.ts.map +1 -0
- package/dist/entity-factory.js +109 -0
- package/dist/entity-factory.js.map +1 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +7 -0
- package/dist/files.js.map +1 -1
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +73 -0
- package/dist/format.js.map +1 -0
- package/dist/history.d.ts +8 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +59 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/repository.d.ts +5 -29
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +20 -196
- package/dist/repository.js.map +1 -1
- package/dist/search.d.ts +3 -0
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +34 -1
- package/dist/search.js.map +1 -1
- package/dist/semantic-analyzer.d.ts +50 -0
- package/dist/semantic-analyzer.d.ts.map +1 -0
- package/dist/semantic-analyzer.js +315 -0
- package/dist/semantic-analyzer.js.map +1 -0
- package/dist/semantic-context.d.ts +67 -0
- package/dist/semantic-context.d.ts.map +1 -0
- package/dist/semantic-context.js +109 -0
- package/dist/semantic-context.js.map +1 -0
- package/dist/semantic-formatter.d.ts +52 -0
- package/dist/semantic-formatter.d.ts.map +1 -0
- package/dist/semantic-formatter.js +354 -0
- package/dist/semantic-formatter.js.map +1 -0
- package/dist/semantic-inspection.d.ts +119 -0
- package/dist/semantic-inspection.d.ts.map +1 -0
- package/dist/semantic-inspection.js +295 -0
- package/dist/semantic-inspection.js.map +1 -0
- package/dist/semantic-profiles.d.ts +5 -0
- package/dist/semantic-profiles.d.ts.map +1 -0
- package/dist/semantic-profiles.js +70 -0
- package/dist/semantic-profiles.js.map +1 -0
- package/dist/semantic-types.d.ts +199 -0
- package/dist/semantic-types.d.ts.map +1 -0
- package/dist/semantic-types.js +3 -0
- package/dist/semantic-types.js.map +1 -0
- package/dist/semantic-validator.d.ts +46 -0
- package/dist/semantic-validator.d.ts.map +1 -0
- package/dist/semantic-validator.js +313 -0
- package/dist/semantic-validator.js.map +1 -0
- package/dist/semantic.d.ts +4 -0
- package/dist/semantic.d.ts.map +1 -0
- package/dist/semantic.js +641 -0
- package/dist/semantic.js.map +1 -0
- package/dist/task-update.d.ts +26 -0
- package/dist/task-update.d.ts.map +1 -0
- package/dist/task-update.js +165 -0
- package/dist/task-update.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +18 -1
- package/dist/validator.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { EntityType } from './types';
|
|
2
|
+
export type SemanticContractVersion = '1.0.0';
|
|
3
|
+
export type SemanticProfileVersion = '1.0.0';
|
|
4
|
+
export type SemanticProvenance = 'canonical' | 'alias' | 'rule-inferred' | 'nlp-inferred';
|
|
5
|
+
export interface SourcePoint {
|
|
6
|
+
offset: number;
|
|
7
|
+
line: number;
|
|
8
|
+
column: number;
|
|
9
|
+
}
|
|
10
|
+
export interface SourceRange {
|
|
11
|
+
start: SourcePoint;
|
|
12
|
+
end: SourcePoint;
|
|
13
|
+
}
|
|
14
|
+
export interface SemanticSource {
|
|
15
|
+
filePath: string;
|
|
16
|
+
rawMarkdown: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SemanticPreamble {
|
|
19
|
+
markdown: string;
|
|
20
|
+
text: string;
|
|
21
|
+
range: SourceRange;
|
|
22
|
+
empty: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type SectionKey = string;
|
|
25
|
+
export type ContentShape = 'prose' | 'list' | 'task-list' | 'references' | 'mixed' | 'empty';
|
|
26
|
+
export interface SemanticSubsection {
|
|
27
|
+
heading: string;
|
|
28
|
+
headingLevel: 3 | 4 | 5 | 6;
|
|
29
|
+
headingRange: SourceRange;
|
|
30
|
+
range: SourceRange;
|
|
31
|
+
markdown: string;
|
|
32
|
+
text: string;
|
|
33
|
+
children: SemanticSubsection[];
|
|
34
|
+
}
|
|
35
|
+
export interface OrderedSection {
|
|
36
|
+
index: number;
|
|
37
|
+
heading: string;
|
|
38
|
+
normalizedHeading: string;
|
|
39
|
+
headingLevel: 2;
|
|
40
|
+
key: SectionKey | null;
|
|
41
|
+
provenance: Exclude<SemanticProvenance, 'nlp-inferred'>;
|
|
42
|
+
headingRange: SourceRange;
|
|
43
|
+
contentRange: SourceRange;
|
|
44
|
+
range: SourceRange;
|
|
45
|
+
markdown: string;
|
|
46
|
+
contentMarkdown: string;
|
|
47
|
+
text: string;
|
|
48
|
+
contentShape: ContentShape;
|
|
49
|
+
empty: boolean;
|
|
50
|
+
subsections: SemanticSubsection[];
|
|
51
|
+
}
|
|
52
|
+
export interface SemanticCriterion {
|
|
53
|
+
id: string;
|
|
54
|
+
checked: true | false | null;
|
|
55
|
+
markdown: string;
|
|
56
|
+
text: string;
|
|
57
|
+
range: SourceRange;
|
|
58
|
+
sectionIndex: number;
|
|
59
|
+
listDepth: number;
|
|
60
|
+
parentCriterionId: string | null;
|
|
61
|
+
provenance: Exclude<SemanticProvenance, 'nlp-inferred'>;
|
|
62
|
+
}
|
|
63
|
+
export interface SemanticFinding {
|
|
64
|
+
markdown: string;
|
|
65
|
+
text: string;
|
|
66
|
+
range: SourceRange;
|
|
67
|
+
sectionIndex: number;
|
|
68
|
+
provenance: Exclude<SemanticProvenance, 'nlp-inferred'>;
|
|
69
|
+
}
|
|
70
|
+
export interface SemanticQuestion {
|
|
71
|
+
markdown: string;
|
|
72
|
+
text: string;
|
|
73
|
+
range: SourceRange;
|
|
74
|
+
sectionIndex: number;
|
|
75
|
+
provenance: Exclude<SemanticProvenance, 'nlp-inferred'>;
|
|
76
|
+
}
|
|
77
|
+
export interface SemanticDecisionStatement {
|
|
78
|
+
markdown: string;
|
|
79
|
+
text: string;
|
|
80
|
+
range: SourceRange;
|
|
81
|
+
sectionIndex: number;
|
|
82
|
+
provenance: Exclude<SemanticProvenance, 'nlp-inferred'>;
|
|
83
|
+
}
|
|
84
|
+
export interface SemanticReference {
|
|
85
|
+
kind: 'link' | 'autolink' | 'bare-entity-id';
|
|
86
|
+
label: string | null;
|
|
87
|
+
target: string;
|
|
88
|
+
range: SourceRange;
|
|
89
|
+
sectionIndex: number | null;
|
|
90
|
+
provenance: Exclude<SemanticProvenance, 'nlp-inferred'>;
|
|
91
|
+
}
|
|
92
|
+
export type MentionEntityType = 'task' | 'epic' | 'milestone' | 'decision';
|
|
93
|
+
export interface EntityMention {
|
|
94
|
+
id: string;
|
|
95
|
+
entityType: MentionEntityType;
|
|
96
|
+
form: 'prose' | 'link-label' | 'link-target';
|
|
97
|
+
range: SourceRange;
|
|
98
|
+
sectionIndex: number | null;
|
|
99
|
+
referenceTarget: string | null;
|
|
100
|
+
resolved: boolean | null;
|
|
101
|
+
authoritative: false;
|
|
102
|
+
provenance: 'rule-inferred' | 'nlp-inferred';
|
|
103
|
+
}
|
|
104
|
+
export interface KnownSectionView {
|
|
105
|
+
[key: SectionKey]: OrderedSection[];
|
|
106
|
+
}
|
|
107
|
+
export interface ConformanceSummary {
|
|
108
|
+
baseline: 'conformant' | 'nonconformant';
|
|
109
|
+
automationReady: 'conformant' | 'nonconformant' | 'not-evaluated';
|
|
110
|
+
lifecycle: 'conformant' | 'nonconformant' | 'not-applicable' | 'not-evaluated';
|
|
111
|
+
}
|
|
112
|
+
export type SemanticSeverity = 'info' | 'warning' | 'error';
|
|
113
|
+
export interface DiagnosticRepair {
|
|
114
|
+
summary: string;
|
|
115
|
+
kind: 'edit-markdown' | 'edit-frontmatter' | 'format' | 'none';
|
|
116
|
+
previewable: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface SemanticDiagnostic {
|
|
119
|
+
code: string;
|
|
120
|
+
severity: SemanticSeverity;
|
|
121
|
+
message: string;
|
|
122
|
+
range: SourceRange | null;
|
|
123
|
+
sectionIndex: number | null;
|
|
124
|
+
provenance: SemanticProvenance;
|
|
125
|
+
conformance: 'baseline' | 'automation-ready' | 'lifecycle' | 'analysis';
|
|
126
|
+
repair: DiagnosticRepair;
|
|
127
|
+
data?: Record<string, string | number | boolean | null>;
|
|
128
|
+
}
|
|
129
|
+
export interface AnalyzerIdentity {
|
|
130
|
+
id: string;
|
|
131
|
+
version: string;
|
|
132
|
+
}
|
|
133
|
+
export interface AnalyzerEvidence {
|
|
134
|
+
text: string;
|
|
135
|
+
range: SourceRange;
|
|
136
|
+
}
|
|
137
|
+
export interface AdvisorySignal {
|
|
138
|
+
kind: string;
|
|
139
|
+
message: string;
|
|
140
|
+
language: string;
|
|
141
|
+
analyzer: AnalyzerIdentity;
|
|
142
|
+
provenance: 'nlp-inferred';
|
|
143
|
+
range: SourceRange;
|
|
144
|
+
evidence: AnalyzerEvidence[];
|
|
145
|
+
confidence: number | null;
|
|
146
|
+
authoritative: false;
|
|
147
|
+
data: Record<string, string | number | boolean | null>;
|
|
148
|
+
}
|
|
149
|
+
export interface AnalyzerResult {
|
|
150
|
+
analyzer: AnalyzerIdentity;
|
|
151
|
+
language: string;
|
|
152
|
+
signals: AdvisorySignal[];
|
|
153
|
+
diagnostics: SemanticDiagnostic[];
|
|
154
|
+
}
|
|
155
|
+
export interface SemanticDocument {
|
|
156
|
+
contractVersion: SemanticContractVersion;
|
|
157
|
+
profile: {
|
|
158
|
+
entityType: EntityType;
|
|
159
|
+
version: SemanticProfileVersion;
|
|
160
|
+
};
|
|
161
|
+
source: SemanticSource;
|
|
162
|
+
preamble: SemanticPreamble;
|
|
163
|
+
sections: OrderedSection[];
|
|
164
|
+
knownSections: KnownSectionView;
|
|
165
|
+
criteria: SemanticCriterion[];
|
|
166
|
+
findings: SemanticFinding[];
|
|
167
|
+
questions: SemanticQuestion[];
|
|
168
|
+
decisions: SemanticDecisionStatement[];
|
|
169
|
+
references: SemanticReference[];
|
|
170
|
+
mentions: EntityMention[];
|
|
171
|
+
diagnostics: SemanticDiagnostic[];
|
|
172
|
+
conformance: ConformanceSummary;
|
|
173
|
+
analyzerResults: AnalyzerResult[];
|
|
174
|
+
}
|
|
175
|
+
export interface AnalyzerRequest {
|
|
176
|
+
document: SemanticDocument;
|
|
177
|
+
language: string;
|
|
178
|
+
}
|
|
179
|
+
export interface SemanticAnalyzer {
|
|
180
|
+
readonly identity: AnalyzerIdentity;
|
|
181
|
+
readonly supportedLanguages: readonly string[];
|
|
182
|
+
analyze(request: AnalyzerRequest): Promise<AnalyzerResult>;
|
|
183
|
+
}
|
|
184
|
+
export interface SemanticSectionDefinition {
|
|
185
|
+
key: SectionKey;
|
|
186
|
+
canonicalHeading: string;
|
|
187
|
+
aliases: readonly string[];
|
|
188
|
+
cardinality: '0..1';
|
|
189
|
+
expectedContent: ContentShape | 'prose-or-list' | 'list-or-references';
|
|
190
|
+
}
|
|
191
|
+
export interface SemanticContentProfile {
|
|
192
|
+
entityType: EntityType;
|
|
193
|
+
version: SemanticProfileVersion;
|
|
194
|
+
sections: readonly SemanticSectionDefinition[];
|
|
195
|
+
}
|
|
196
|
+
export interface ParseSemanticDocumentOptions {
|
|
197
|
+
filePath?: string;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=semantic-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-types.d.ts","sourceRoot":"","sources":["../src/semantic-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-types.js","sourceRoot":"","sources":["../src/semantic-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { AnalyzerResult, ConformanceSummary, SemanticAnalyzer, SemanticDiagnostic, SemanticDocument, SemanticSeverity } from './semantic-types';
|
|
2
|
+
import { Entity, Repository } from './types';
|
|
3
|
+
export type SemanticValidationTier = 'baseline' | 'automation-ready';
|
|
4
|
+
export type CriterionCheckStatePolicy = 'ignore' | SemanticSeverity;
|
|
5
|
+
export interface SemanticValidationOptions {
|
|
6
|
+
tier?: SemanticValidationTier;
|
|
7
|
+
lifecycle?: boolean;
|
|
8
|
+
criterionCheckState?: CriterionCheckStatePolicy;
|
|
9
|
+
analysis?: boolean;
|
|
10
|
+
language?: string;
|
|
11
|
+
analyzer?: SemanticAnalyzer;
|
|
12
|
+
}
|
|
13
|
+
export interface SemanticValidationDiagnostic extends SemanticDiagnostic {
|
|
14
|
+
entityId: string;
|
|
15
|
+
filePath: string;
|
|
16
|
+
sectionKey: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface SemanticEntityValidationResult {
|
|
19
|
+
entityId: string;
|
|
20
|
+
entityType: Entity['type'];
|
|
21
|
+
filePath: string;
|
|
22
|
+
tier: SemanticValidationTier;
|
|
23
|
+
conformance: ConformanceSummary;
|
|
24
|
+
valid: boolean;
|
|
25
|
+
diagnostics: SemanticValidationDiagnostic[];
|
|
26
|
+
analysis: AnalyzerResult | null;
|
|
27
|
+
}
|
|
28
|
+
export interface SemanticRepositoryValidationResult {
|
|
29
|
+
tier: SemanticValidationTier;
|
|
30
|
+
lifecycle: boolean;
|
|
31
|
+
analysisEnabled: boolean;
|
|
32
|
+
valid: boolean;
|
|
33
|
+
severityCounts: Record<SemanticSeverity, number>;
|
|
34
|
+
entities: SemanticEntityValidationResult[];
|
|
35
|
+
diagnostics: SemanticValidationDiagnostic[];
|
|
36
|
+
}
|
|
37
|
+
/** Validate one loaded entity without changing its body or metadata. */
|
|
38
|
+
export declare function validateSemanticEntity(entity: Entity, options?: SemanticValidationOptions): Promise<SemanticEntityValidationResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Validate an already parsed document. This deterministic path performs no
|
|
41
|
+
* analyzer work and is identical whether an analyzer is installed or not.
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateSemanticDocument(entity: Entity, document: SemanticDocument, options?: SemanticValidationOptions): SemanticEntityValidationResult;
|
|
44
|
+
/** Validate every active entity and apply repository-aware lifecycle policy. */
|
|
45
|
+
export declare function validateSemanticRepository(repository: Repository, options?: SemanticValidationOptions): Promise<SemanticRepositoryValidationResult>;
|
|
46
|
+
//# sourceMappingURL=semantic-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-validator.d.ts","sourceRoot":"","sources":["../src/semantic-validator.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,kBAAkB,EAElB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AACrE,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAEpE,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA6B,SAAQ,kBAAkB;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC5C,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,EAAE,8BAA8B,EAAE,CAAC;IAC3C,WAAW,EAAE,4BAA4B,EAAE,CAAC;CAC7C;AASD,wEAAwE;AACxE,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,8BAA8B,CAAC,CAsBzC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE,yBAA8B,GACtC,8BAA8B,CA2ChC;AAED,gFAAgF;AAChF,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAwD7C"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSemanticEntity = validateSemanticEntity;
|
|
4
|
+
exports.validateSemanticDocument = validateSemanticDocument;
|
|
5
|
+
exports.validateSemanticRepository = validateSemanticRepository;
|
|
6
|
+
const semantic_analyzer_1 = require("./semantic-analyzer");
|
|
7
|
+
const semantic_profiles_1 = require("./semantic-profiles");
|
|
8
|
+
const semantic_1 = require("./semantic");
|
|
9
|
+
const NON_READY_REFINEMENT_STATES = new Set([
|
|
10
|
+
'captured',
|
|
11
|
+
'needs-refinement',
|
|
12
|
+
'deferred',
|
|
13
|
+
'discarded'
|
|
14
|
+
]);
|
|
15
|
+
/** Validate one loaded entity without changing its body or metadata. */
|
|
16
|
+
async function validateSemanticEntity(entity, options = {}) {
|
|
17
|
+
const tier = options.tier ?? 'baseline';
|
|
18
|
+
const document = (0, semantic_1.parseSemanticDocument)(entity.type, entity.body, { filePath: entity.filePath });
|
|
19
|
+
const result = validateSemanticDocument(entity, document, options);
|
|
20
|
+
const analysis = await (0, semantic_analyzer_1.runSemanticAnalysis)(document, {
|
|
21
|
+
enabled: options.analysis === true,
|
|
22
|
+
language: options.language ?? 'en',
|
|
23
|
+
analyzer: options.analyzer
|
|
24
|
+
});
|
|
25
|
+
const analysisDiagnostics = analysis?.diagnostics.map(diagnostic => enrichDiagnostic(entity, document, diagnostic)) ?? [];
|
|
26
|
+
const diagnostics = [...result.diagnostics, ...analysisDiagnostics].sort(compareDiagnostics);
|
|
27
|
+
return {
|
|
28
|
+
...result,
|
|
29
|
+
tier,
|
|
30
|
+
valid: !diagnostics.some(diagnostic => diagnostic.severity === 'error'),
|
|
31
|
+
diagnostics,
|
|
32
|
+
analysis
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate an already parsed document. This deterministic path performs no
|
|
37
|
+
* analyzer work and is identical whether an analyzer is installed or not.
|
|
38
|
+
*/
|
|
39
|
+
function validateSemanticDocument(entity, document, options = {}) {
|
|
40
|
+
const tier = options.tier ?? 'baseline';
|
|
41
|
+
const diagnostics = document.diagnostics
|
|
42
|
+
.filter(diagnostic => diagnostic.conformance === 'baseline')
|
|
43
|
+
.map(diagnostic => enrichDiagnostic(entity, document, diagnostic));
|
|
44
|
+
const automationEvaluated = tier === 'automation-ready' && shouldEvaluateAutomation(entity);
|
|
45
|
+
if (automationEvaluated) {
|
|
46
|
+
diagnostics.push(...document.diagnostics
|
|
47
|
+
.filter(diagnostic => diagnostic.conformance === 'automation-ready')
|
|
48
|
+
.map(diagnostic => enrichDiagnostic(entity, document, diagnostic)));
|
|
49
|
+
diagnostics.push(...validateAutomationReady(entity, document, options));
|
|
50
|
+
}
|
|
51
|
+
if (options.lifecycle === true) {
|
|
52
|
+
diagnostics.push(...validateLifecycle(entity, document));
|
|
53
|
+
}
|
|
54
|
+
const uniqueDiagnostics = deduplicateDiagnostics(diagnostics).sort(compareDiagnostics);
|
|
55
|
+
const baseline = document.conformance.baseline;
|
|
56
|
+
const automationReady = tier === 'baseline' || !automationEvaluated
|
|
57
|
+
? 'not-evaluated'
|
|
58
|
+
: hasNonconformingDiagnostics(uniqueDiagnostics, 'automation-ready') || baseline === 'nonconformant'
|
|
59
|
+
? 'nonconformant'
|
|
60
|
+
: 'conformant';
|
|
61
|
+
const lifecycle = options.lifecycle !== true
|
|
62
|
+
? 'not-evaluated'
|
|
63
|
+
: hasNonconformingDiagnostics(uniqueDiagnostics, 'lifecycle')
|
|
64
|
+
? 'nonconformant'
|
|
65
|
+
: lifecycleApplies(entity)
|
|
66
|
+
? 'conformant'
|
|
67
|
+
: 'not-applicable';
|
|
68
|
+
return {
|
|
69
|
+
entityId: entity.id,
|
|
70
|
+
entityType: entity.type,
|
|
71
|
+
filePath: entity.filePath,
|
|
72
|
+
tier,
|
|
73
|
+
conformance: { baseline, automationReady, lifecycle },
|
|
74
|
+
valid: !uniqueDiagnostics.some(diagnostic => diagnostic.severity === 'error'),
|
|
75
|
+
diagnostics: uniqueDiagnostics,
|
|
76
|
+
analysis: null
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Validate every active entity and apply repository-aware lifecycle policy. */
|
|
80
|
+
async function validateSemanticRepository(repository, options = {}) {
|
|
81
|
+
const entities = [
|
|
82
|
+
...repository.tasks.values(),
|
|
83
|
+
...repository.epics.values(),
|
|
84
|
+
...repository.milestones.values(),
|
|
85
|
+
...repository.decisions.values()
|
|
86
|
+
];
|
|
87
|
+
const results = await Promise.all(entities.map(entity => validateSemanticEntity(entity, options)));
|
|
88
|
+
if (options.lifecycle === true) {
|
|
89
|
+
for (const result of results) {
|
|
90
|
+
if (result.entityType !== 'epic')
|
|
91
|
+
continue;
|
|
92
|
+
const epic = repository.epics.get(result.entityId);
|
|
93
|
+
if (!epic || epic.status !== 'completed')
|
|
94
|
+
continue;
|
|
95
|
+
const openChildren = [...repository.tasks.values()]
|
|
96
|
+
.filter(task => task.epic === epic.id && task.status !== 'done')
|
|
97
|
+
.map(task => task.id)
|
|
98
|
+
.sort();
|
|
99
|
+
if (openChildren.length === 0)
|
|
100
|
+
continue;
|
|
101
|
+
result.diagnostics.push(createDiagnostic(epic, null, 'content.lifecycle.open-child-work', 'warning', `Completed epic has open child tasks: ${openChildren.join(', ')}.`, null, null, 'canonical', 'lifecycle', 'Complete or reassign the authoritative child tasks, or reopen the epic.', 'edit-frontmatter', false, { openChildTaskIds: openChildren.join(',') }));
|
|
102
|
+
result.conformance.lifecycle = 'nonconformant';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
for (const result of results) {
|
|
106
|
+
result.diagnostics = deduplicateDiagnostics(result.diagnostics).sort(compareDiagnostics);
|
|
107
|
+
result.valid = !result.diagnostics.some(diagnostic => diagnostic.severity === 'error');
|
|
108
|
+
}
|
|
109
|
+
const diagnostics = results.flatMap(result => result.diagnostics).sort(compareDiagnostics);
|
|
110
|
+
const severityCounts = diagnostics.reduce((counts, diagnostic) => ({ ...counts, [diagnostic.severity]: counts[diagnostic.severity] + 1 }), { info: 0, warning: 0, error: 0 });
|
|
111
|
+
return {
|
|
112
|
+
tier: options.tier ?? 'baseline',
|
|
113
|
+
lifecycle: options.lifecycle === true,
|
|
114
|
+
analysisEnabled: options.analysis === true,
|
|
115
|
+
valid: severityCounts.error === 0,
|
|
116
|
+
severityCounts,
|
|
117
|
+
entities: results,
|
|
118
|
+
diagnostics
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function validateAutomationReady(entity, document, options) {
|
|
122
|
+
const diagnostics = [];
|
|
123
|
+
const profile = (0, semantic_profiles_1.getSemanticContentProfile)(entity.type);
|
|
124
|
+
const criterionPolicy = options.criterionCheckState ?? 'warning';
|
|
125
|
+
if (entity.type !== 'decision' && document.preamble.empty) {
|
|
126
|
+
diagnostics.push(createDiagnostic(entity, document, 'content.preamble.missing', 'warning', `Automation-ready ${entity.type}s require a non-empty summary before the first section.`, document.preamble.range, null, 'rule-inferred', 'automation-ready', 'Add a concise summary before the first level-two heading.', 'edit-markdown', false));
|
|
127
|
+
}
|
|
128
|
+
const requiredSections = requiredSectionKeys(entity.type);
|
|
129
|
+
for (const key of requiredSections) {
|
|
130
|
+
const sections = document.knownSections[key] ?? [];
|
|
131
|
+
const frontmatterValue = authoritativeBodyValue(entity, key);
|
|
132
|
+
if (sections.length === 0 && !frontmatterValue) {
|
|
133
|
+
diagnostics.push(createDiagnostic(entity, document, 'content.section.missing', 'warning', `Automation-ready ${entity.type}s require a non-empty '${key}' section.`, insertionRange(document), null, 'rule-inferred', 'automation-ready', `Add the canonical '${canonicalHeading(profile, key)}' section with meaningful content.`, 'edit-markdown', false, { key }));
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (sections.length > 0 && sections.every(section => section.empty) && !frontmatterValue) {
|
|
137
|
+
diagnostics.push(createDiagnostic(entity, document, 'content.section.required-empty', 'warning', `Required '${key}' content is empty.`, sections[0]?.contentRange ?? insertionRange(document), sections[0]?.index ?? null, sections[0]?.provenance ?? 'rule-inferred', 'automation-ready', `Add meaningful content to '${canonicalHeading(profile, key)}'.`, 'edit-markdown', false, { key }));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
for (const definition of profile.sections) {
|
|
141
|
+
for (const section of document.knownSections[definition.key] ?? []) {
|
|
142
|
+
if (section.empty || contentShapeMatches(section, definition.expectedContent))
|
|
143
|
+
continue;
|
|
144
|
+
const acceptanceLike = definition.expectedContent === 'task-list';
|
|
145
|
+
diagnostics.push(createDiagnostic(entity, document, acceptanceLike
|
|
146
|
+
? 'content.acceptance-criteria.unstructured'
|
|
147
|
+
: 'content.section.wrong-shape', 'warning', acceptanceLike
|
|
148
|
+
? `Section '${section.heading}' contains substantive content outside a criteria list.`
|
|
149
|
+
: `Section '${section.heading}' has '${section.contentShape}' content; expected '${definition.expectedContent}'.`, section.contentRange, section.index, section.provenance, 'automation-ready', acceptanceLike
|
|
150
|
+
? 'Convert the substantive requirements into Markdown list items.'
|
|
151
|
+
: `Use ${definition.expectedContent} content or retain it under a custom section heading.`, 'edit-markdown', false, { key: definition.key, actualShape: section.contentShape, expectedShape: definition.expectedContent }));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (criterionPolicy !== 'ignore') {
|
|
155
|
+
for (const criterion of document.criteria.filter(item => item.checked === null)) {
|
|
156
|
+
diagnostics.push(createDiagnostic(entity, document, 'content.criterion.missing-check-state', criterionPolicy, 'Criterion is an ordinary list item and has no checked or unchecked state.', criterion.range, criterion.sectionIndex, criterion.provenance, 'automation-ready', 'Add an explicit [ ] or [x] task-list marker.', 'edit-markdown', true, { criterionId: criterion.id }));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if ((entity.type === 'task' || entity.type === 'milestone') && document.criteria.length === 0) {
|
|
160
|
+
const key = entity.type === 'task' ? 'acceptanceCriteria' : 'releaseCriteria';
|
|
161
|
+
const section = document.knownSections[key]?.[0];
|
|
162
|
+
diagnostics.push(createDiagnostic(entity, document, 'content.criterion.missing', 'warning', `Automation-ready ${entity.type}s require at least one criterion.`, section?.contentRange ?? insertionRange(document), section?.index ?? null, section?.provenance ?? 'rule-inferred', 'automation-ready', 'Add at least one Markdown task-list criterion.', 'edit-markdown', false, { key }));
|
|
163
|
+
}
|
|
164
|
+
diagnostics.push(...frontmatterBodyConflicts(entity, document));
|
|
165
|
+
return diagnostics;
|
|
166
|
+
}
|
|
167
|
+
function validateLifecycle(entity, document) {
|
|
168
|
+
const diagnostics = [];
|
|
169
|
+
if (entity.type === 'task' && ['review', 'done'].includes(entity.status)) {
|
|
170
|
+
const incomplete = document.criteria.filter(criterion => criterion.checked !== true);
|
|
171
|
+
if (document.criteria.length === 0 || incomplete.length > 0) {
|
|
172
|
+
diagnostics.push(createDiagnostic(entity, document, 'content.lifecycle.incomplete-criteria', entity.status === 'done' ? 'warning' : 'info', `${entity.status === 'done' ? 'Done' : 'Review'} task has ${document.criteria.length === 0 ? 'no criteria' : `${incomplete.length} incomplete criteria`}.`, incomplete[0]?.range ?? insertionRange(document), incomplete[0]?.sectionIndex ?? null, incomplete[0]?.provenance ?? 'rule-inferred', 'lifecycle', 'Review the criteria or explicitly change authoritative task status.', 'edit-frontmatter', false, { status: entity.status, incompleteCount: incomplete.length }));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (entity.type === 'epic' && entity.status === 'completed') {
|
|
176
|
+
const outcomes = document.knownSections.outcomes ?? [];
|
|
177
|
+
if (outcomes.length === 0 || outcomes.every(section => section.empty)) {
|
|
178
|
+
diagnostics.push(lifecycleMissingSection(entity, document, 'outcomes'));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (entity.type === 'milestone' && entity.status === 'completed') {
|
|
182
|
+
const incomplete = document.criteria.filter(criterion => criterion.checked !== true);
|
|
183
|
+
if (document.criteria.length === 0 || incomplete.length > 0) {
|
|
184
|
+
diagnostics.push(createDiagnostic(entity, document, 'content.lifecycle.incomplete-criteria', 'warning', `Completed milestone has ${document.criteria.length === 0 ? 'no release criteria' : `${incomplete.length} incomplete release criteria`}.`, incomplete[0]?.range ?? insertionRange(document), incomplete[0]?.sectionIndex ?? null, incomplete[0]?.provenance ?? 'rule-inferred', 'lifecycle', 'Complete the release criteria or explicitly reopen the milestone.', 'edit-frontmatter', false, { status: entity.status, incompleteCount: incomplete.length }));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (entity.type === 'decision' && entity.status === 'accepted') {
|
|
188
|
+
for (const key of ['context', 'decision', 'consequences']) {
|
|
189
|
+
const sections = document.knownSections[key] ?? [];
|
|
190
|
+
if (!authoritativeBodyValue(entity, key) && (sections.length === 0 || sections.every(section => section.empty))) {
|
|
191
|
+
diagnostics.push(lifecycleMissingSection(entity, document, key));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return diagnostics;
|
|
196
|
+
}
|
|
197
|
+
function lifecycleMissingSection(entity, document, key) {
|
|
198
|
+
return createDiagnostic(entity, document, 'content.lifecycle.required-content-missing', 'warning', `${entity.status} ${entity.type} is missing required '${key}' content.`, insertionRange(document), null, 'rule-inferred', 'lifecycle', `Add '${key}' content or explicitly change authoritative lifecycle status.`, 'edit-frontmatter', false, { status: entity.status, key });
|
|
199
|
+
}
|
|
200
|
+
function frontmatterBodyConflicts(entity, document) {
|
|
201
|
+
const keys = entity.type === 'decision'
|
|
202
|
+
? ['context', 'decision', 'consequences']
|
|
203
|
+
: entity.type === 'epic' || entity.type === 'milestone'
|
|
204
|
+
? ['description']
|
|
205
|
+
: [];
|
|
206
|
+
return keys.flatMap(key => {
|
|
207
|
+
const authoritative = authoritativeBodyValue(entity, key);
|
|
208
|
+
const section = key === 'description' ? null : document.knownSections[key]?.[0];
|
|
209
|
+
const body = key === 'description' ? document.preamble.text : section?.text;
|
|
210
|
+
if (!authoritative || !body || normalizeText(authoritative) === normalizeText(body))
|
|
211
|
+
return [];
|
|
212
|
+
return [createDiagnostic(entity, document, 'content.frontmatter-body.conflict', 'warning', `Authoritative frontmatter '${key}' differs from the Markdown body view.`, section?.contentRange ?? document.preamble.range, section?.index ?? null, section?.provenance ?? 'rule-inferred', 'automation-ready', 'Reconcile the text explicitly; frontmatter remains authoritative.', 'edit-frontmatter', false, { key })];
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function requiredSectionKeys(entityType) {
|
|
216
|
+
switch (entityType) {
|
|
217
|
+
case 'task': return ['acceptanceCriteria'];
|
|
218
|
+
case 'epic': return ['outcomes'];
|
|
219
|
+
case 'milestone': return ['outcomes', 'releaseCriteria'];
|
|
220
|
+
case 'decision': return ['context', 'decision', 'consequences'];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
function authoritativeBodyValue(entity, key) {
|
|
224
|
+
const value = key === 'description'
|
|
225
|
+
? (entity.type === 'epic' || entity.type === 'milestone' ? entity.description : undefined)
|
|
226
|
+
: entity.type === 'decision' && ['context', 'decision', 'consequences'].includes(key)
|
|
227
|
+
? entity[key]
|
|
228
|
+
: undefined;
|
|
229
|
+
return typeof value === 'string' && value.trim() ? value : undefined;
|
|
230
|
+
}
|
|
231
|
+
function contentShapeMatches(section, expected) {
|
|
232
|
+
switch (expected) {
|
|
233
|
+
case 'mixed': return true;
|
|
234
|
+
case 'prose-or-list': return section.contentShape !== 'empty';
|
|
235
|
+
case 'list-or-references': return ['list', 'task-list', 'references'].includes(section.contentShape);
|
|
236
|
+
case 'task-list': return ['task-list', 'list'].includes(section.contentShape);
|
|
237
|
+
default: return section.contentShape === expected;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function shouldEvaluateAutomation(entity) {
|
|
241
|
+
return entity.type !== 'task'
|
|
242
|
+
|| !entity.refinementState
|
|
243
|
+
|| !NON_READY_REFINEMENT_STATES.has(entity.refinementState);
|
|
244
|
+
}
|
|
245
|
+
function lifecycleApplies(entity) {
|
|
246
|
+
return (entity.type === 'task' && ['review', 'done'].includes(entity.status))
|
|
247
|
+
|| (entity.type === 'epic' && entity.status === 'completed')
|
|
248
|
+
|| (entity.type === 'milestone' && entity.status === 'completed')
|
|
249
|
+
|| (entity.type === 'decision' && entity.status === 'accepted');
|
|
250
|
+
}
|
|
251
|
+
function hasNonconformingDiagnostics(diagnostics, conformance) {
|
|
252
|
+
return diagnostics.some(diagnostic => (diagnostic.conformance === conformance && diagnostic.code !== 'content.section.alias'));
|
|
253
|
+
}
|
|
254
|
+
function enrichDiagnostic(entity, document, diagnostic) {
|
|
255
|
+
const section = diagnostic.sectionIndex === null
|
|
256
|
+
? undefined
|
|
257
|
+
: document.sections[diagnostic.sectionIndex];
|
|
258
|
+
return {
|
|
259
|
+
...diagnostic,
|
|
260
|
+
entityId: entity.id,
|
|
261
|
+
filePath: entity.filePath,
|
|
262
|
+
sectionKey: section?.key ?? (typeof diagnostic.data?.key === 'string' ? diagnostic.data.key : null)
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function createDiagnostic(entity, document, code, severity, message, range, sectionIndex, provenance, conformance, repairSummary, repairKind, previewable, data) {
|
|
266
|
+
const section = document && sectionIndex !== null ? document.sections[sectionIndex] : undefined;
|
|
267
|
+
return {
|
|
268
|
+
entityId: entity.id,
|
|
269
|
+
filePath: entity.filePath,
|
|
270
|
+
sectionKey: section?.key ?? (typeof data?.key === 'string' ? data.key : null),
|
|
271
|
+
code,
|
|
272
|
+
severity,
|
|
273
|
+
message,
|
|
274
|
+
range,
|
|
275
|
+
sectionIndex,
|
|
276
|
+
provenance,
|
|
277
|
+
conformance,
|
|
278
|
+
repair: { summary: repairSummary, kind: repairKind, previewable },
|
|
279
|
+
...(data ? { data } : {})
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
function insertionRange(document) {
|
|
283
|
+
const point = document.sections.at(-1)?.range.end ?? document.preamble.range.end;
|
|
284
|
+
return { start: { ...point }, end: { ...point } };
|
|
285
|
+
}
|
|
286
|
+
function canonicalHeading(profile, key) {
|
|
287
|
+
return profile.sections.find(section => section.key === key)?.canonicalHeading ?? key;
|
|
288
|
+
}
|
|
289
|
+
function normalizeText(value) {
|
|
290
|
+
return value.replace(/\s+/gu, ' ').trim().toLowerCase();
|
|
291
|
+
}
|
|
292
|
+
function deduplicateDiagnostics(diagnostics) {
|
|
293
|
+
const seen = new Set();
|
|
294
|
+
return diagnostics.filter(diagnostic => {
|
|
295
|
+
const key = [
|
|
296
|
+
diagnostic.code,
|
|
297
|
+
diagnostic.entityId,
|
|
298
|
+
diagnostic.range?.start.offset ?? -1,
|
|
299
|
+
diagnostic.sectionKey ?? '',
|
|
300
|
+
diagnostic.data?.criterionId ?? ''
|
|
301
|
+
].join(':');
|
|
302
|
+
if (seen.has(key))
|
|
303
|
+
return false;
|
|
304
|
+
seen.add(key);
|
|
305
|
+
return true;
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
function compareDiagnostics(left, right) {
|
|
309
|
+
return left.filePath.localeCompare(right.filePath)
|
|
310
|
+
|| (left.range?.start.offset ?? -1) - (right.range?.start.offset ?? -1)
|
|
311
|
+
|| left.code.localeCompare(right.code);
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=semantic-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-validator.js","sourceRoot":"","sources":["../src/semantic-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EntityType } from './types';
|
|
2
|
+
import { ParseSemanticDocumentOptions, SemanticDocument } from './semantic-types';
|
|
3
|
+
export declare function parseSemanticDocument(entityType: EntityType, rawMarkdown: string, options?: ParseSemanticDocumentOptions): SemanticDocument;
|
|
4
|
+
//# sourceMappingURL=semantic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../src/semantic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAKL,4BAA4B,EAK5B,gBAAgB,EAQjB,MAAM,kBAAkB,CAAC;AA0D1B,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,4BAAiC,GACzC,gBAAgB,CAkGlB"}
|