@dzhechkov/harness-core 0.8.2 → 0.8.5

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 (45) hide show
  1. package/.dz-manifest.json +110 -22
  2. package/README.md +66 -1
  3. package/dist/cmd-usage.d.ts +148 -0
  4. package/dist/cmd-usage.d.ts.map +1 -0
  5. package/dist/cmd-usage.js +548 -0
  6. package/dist/cmd-usage.js.map +1 -0
  7. package/dist/compounding.d.ts +4 -0
  8. package/dist/compounding.d.ts.map +1 -1
  9. package/dist/compounding.js +6 -0
  10. package/dist/compounding.js.map +1 -1
  11. package/dist/contract-checklist.d.ts +123 -0
  12. package/dist/contract-checklist.d.ts.map +1 -0
  13. package/dist/contract-checklist.js +700 -0
  14. package/dist/contract-checklist.js.map +1 -0
  15. package/dist/feature-adr-routing.d.ts +2 -2
  16. package/dist/feature-adr-routing.d.ts.map +1 -1
  17. package/dist/feature-adr-routing.js +21 -1
  18. package/dist/feature-adr-routing.js.map +1 -1
  19. package/dist/index.d.ts +7 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +7 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/qe-bridge.d.ts.map +1 -1
  24. package/dist/qe-bridge.js +9 -0
  25. package/dist/qe-bridge.js.map +1 -1
  26. package/dist/restart-advisor.d.ts +103 -0
  27. package/dist/restart-advisor.d.ts.map +1 -0
  28. package/dist/restart-advisor.js +445 -0
  29. package/dist/restart-advisor.js.map +1 -0
  30. package/dist/slop-lint.d.ts +128 -0
  31. package/dist/slop-lint.d.ts.map +1 -0
  32. package/dist/slop-lint.js +607 -0
  33. package/dist/slop-lint.js.map +1 -0
  34. package/package.json +14 -13
  35. package/sbom.json +241 -21
  36. package/src/cmd-usage.ts +720 -0
  37. package/src/compounding.ts +13 -0
  38. package/src/contract-checklist.ts +973 -0
  39. package/src/deadwood-allowlist.json +80 -0
  40. package/src/feature-adr-routing.ts +21 -1
  41. package/src/index.ts +79 -0
  42. package/src/qe-bridge.ts +9 -0
  43. package/src/restart-advisor.ts +579 -0
  44. package/src/slop-lint.ts +762 -0
  45. package/src/slop-markers.json +71 -0
@@ -0,0 +1,445 @@
1
+ /**
2
+ * Deterministic, advisory-only policy for recognising a trailing low-grade QE streak.
3
+ *
4
+ * This module is intentionally value-in/value-out. The CLI owns filesystem reads, path confinement,
5
+ * defaults, and presentation; the core owns parsing, corroboration, policy, and the decision record.
6
+ */
7
+ export const RESTART_ADVISOR_SCHEMA = 'restart-advisor/1';
8
+ export const RESTART_ADVISOR_MAX_EVIDENCE = 20;
9
+ export const RESTART_ADVISOR_MAX_DIAGNOSTICS = 20;
10
+ const GRADES = new Set(['A', 'B', 'C', 'D', 'F']);
11
+ const GRADE_RANK = { A: 5, B: 4, C: 3, D: 2, F: 1 };
12
+ function isRecord(value) {
13
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ }
15
+ function canonicalGrade(value) {
16
+ return typeof value === 'string' && GRADES.has(value)
17
+ ? value
18
+ : null;
19
+ }
20
+ function boundedValue(value) {
21
+ let rendered;
22
+ try {
23
+ rendered = JSON.stringify(value);
24
+ }
25
+ catch {
26
+ rendered = String(value);
27
+ }
28
+ if (rendered === undefined)
29
+ rendered = String(value);
30
+ return rendered.length <= 120 ? rendered : `${rendered.slice(0, 117)}...`;
31
+ }
32
+ function nestedRecord(source, record) {
33
+ if (source === 'training-pairs')
34
+ return isRecord(record.evaluation) ? record.evaluation : null;
35
+ const result = isRecord(record.result) ? record.result : null;
36
+ return result !== null && isRecord(result.qe) ? result.qe : null;
37
+ }
38
+ function roundIdentity(record, nested) {
39
+ const values = [];
40
+ if (Object.prototype.hasOwnProperty.call(record, 'round'))
41
+ values.push(record.round);
42
+ if (nested !== null && Object.prototype.hasOwnProperty.call(nested, 'round'))
43
+ values.push(nested.round);
44
+ if (values.length === 0)
45
+ return { explicit: false, round: null, fatal: false, diagnostic: null };
46
+ if (!values.every((value) => Number.isInteger(value) && value > 0)) {
47
+ return {
48
+ explicit: true,
49
+ round: null,
50
+ fatal: true,
51
+ diagnostic: `invalid explicit round identity ${values.map(boundedValue).join(' / ')}`,
52
+ };
53
+ }
54
+ const distinct = [...new Set(values)];
55
+ if (distinct.length !== 1) {
56
+ return {
57
+ explicit: true,
58
+ round: null,
59
+ fatal: true,
60
+ diagnostic: `conflicting explicit round identities ${distinct.join(' / ')}`,
61
+ };
62
+ }
63
+ return { explicit: true, round: distinct[0], fatal: false, diagnostic: null };
64
+ }
65
+ function parseHistory(jsonl, source) {
66
+ const present = jsonl !== null && jsonl !== undefined;
67
+ if (!present || jsonl === '') {
68
+ return {
69
+ source, present, recordsRead: 0, qeCandidates: 0, identityMode: 'none',
70
+ rounds: [], diagnostics: [], fatal: false,
71
+ };
72
+ }
73
+ const candidates = [];
74
+ const diagnostics = [];
75
+ let recordsRead = 0;
76
+ let qeCandidates = 0;
77
+ let fatal = false;
78
+ const lines = jsonl.split(/\n/);
79
+ for (let index = 0; index < lines.length; index += 1) {
80
+ let physical = lines[index].replace(/\r$/, '');
81
+ if (index === 0)
82
+ physical = physical.replace(/^\uFEFF/, '');
83
+ if (physical.trim() === '')
84
+ continue;
85
+ recordsRead += 1;
86
+ const line = index + 1;
87
+ let parsed;
88
+ try {
89
+ parsed = JSON.parse(physical);
90
+ }
91
+ catch (error) {
92
+ diagnostics.push(`${source} line ${line}: malformed JSON (${error.message})`);
93
+ candidates.push({
94
+ line, fingerprint: physical, explicitIdentity: false, explicitRound: null,
95
+ grade: null, problem: 'MALFORMED_JSON',
96
+ });
97
+ continue;
98
+ }
99
+ if (!isRecord(parsed)) {
100
+ diagnostics.push(`${source} line ${line}: JSON record is not an object`);
101
+ candidates.push({
102
+ line, fingerprint: physical, explicitIdentity: false, explicitRound: null,
103
+ grade: null, problem: 'INVALID_RECORD',
104
+ });
105
+ continue;
106
+ }
107
+ if (parsed.stage !== 'qe')
108
+ continue;
109
+ qeCandidates += 1;
110
+ const nested = nestedRecord(source, parsed);
111
+ const identity = roundIdentity(parsed, nested);
112
+ if (identity.fatal) {
113
+ fatal = true;
114
+ diagnostics.push(`${source} line ${line}: ${identity.diagnostic}`);
115
+ }
116
+ const rawGrade = nested?.grade;
117
+ const grade = canonicalGrade(rawGrade);
118
+ const problem = grade === null ? 'UNSUPPORTED_GRADE' : null;
119
+ if (problem !== null) {
120
+ diagnostics.push(`${source} line ${line}: unsupported grade ${boundedValue(rawGrade)}; expected A|B|C|D|F`);
121
+ }
122
+ candidates.push({
123
+ line,
124
+ fingerprint: physical,
125
+ explicitIdentity: identity.explicit,
126
+ explicitRound: identity.round,
127
+ grade,
128
+ problem,
129
+ });
130
+ }
131
+ const identityCandidates = candidates.filter((candidate) => candidate.problem !== 'MALFORMED_JSON' && candidate.problem !== 'INVALID_RECORD');
132
+ const explicitCount = identityCandidates.filter((candidate) => candidate.explicitIdentity).length;
133
+ const implicitCount = identityCandidates.length - explicitCount;
134
+ const identityMode = candidates.length === 0
135
+ ? 'none'
136
+ : identityCandidates.length === 0
137
+ ? 'implicit'
138
+ : explicitCount === identityCandidates.length
139
+ ? 'explicit'
140
+ : implicitCount === identityCandidates.length
141
+ ? 'implicit'
142
+ : 'mixed';
143
+ if (identityMode === 'mixed') {
144
+ fatal = true;
145
+ diagnostics.push(`${source}: mixed explicit and implicit round identities are ambiguous`);
146
+ }
147
+ if (identityMode === 'explicit' && identityCandidates.length !== candidates.length) {
148
+ fatal = true;
149
+ diagnostics.push(`${source}: malformed records cannot be placed among explicit round identities`);
150
+ }
151
+ const rounds = [];
152
+ if (identityMode === 'implicit') {
153
+ let priorFingerprint = null;
154
+ for (const candidate of candidates) {
155
+ if (candidate.fingerprint === priorFingerprint)
156
+ continue;
157
+ priorFingerprint = candidate.fingerprint;
158
+ rounds.push({ round: rounds.length + 1, line: candidate.line, grade: candidate.grade, problem: candidate.problem });
159
+ }
160
+ }
161
+ else if (identityMode === 'explicit') {
162
+ const byRound = new Map();
163
+ for (const candidate of candidates) {
164
+ if (candidate.explicitRound === null)
165
+ continue;
166
+ const next = {
167
+ round: candidate.explicitRound,
168
+ line: candidate.line,
169
+ grade: candidate.grade,
170
+ problem: candidate.problem,
171
+ };
172
+ const prior = byRound.get(candidate.explicitRound);
173
+ if (prior === undefined) {
174
+ byRound.set(candidate.explicitRound, next);
175
+ }
176
+ else if (prior.grade !== next.grade || prior.problem !== next.problem) {
177
+ fatal = true;
178
+ diagnostics.push(`${source}: conflicting duplicate round ${candidate.explicitRound} at lines ${prior.line} and ${next.line}`);
179
+ }
180
+ }
181
+ rounds.push(...[...byRound.values()].sort((left, right) => left.round - right.round));
182
+ }
183
+ return {
184
+ source,
185
+ present,
186
+ recordsRead,
187
+ qeCandidates,
188
+ identityMode,
189
+ rounds,
190
+ diagnostics,
191
+ fatal,
192
+ };
193
+ }
194
+ export function parseCheckpointQeHistory(jsonl) {
195
+ return parseHistory(jsonl, 'checkpoints');
196
+ }
197
+ export function parseTrainingPairQeHistory(jsonl) {
198
+ return parseHistory(jsonl, 'training-pairs');
199
+ }
200
+ function boundedEvidence(history) {
201
+ return history.slice(-RESTART_ADVISOR_MAX_EVIDENCE).map((round) => ({ ...round }));
202
+ }
203
+ function invalidDecision(history) {
204
+ return {
205
+ recommendation: 'INVALID_INPUT',
206
+ recommendRestart: false,
207
+ autoAction: false,
208
+ trailingAtOrBelow: 0,
209
+ reason: 'POLICY_INVALID',
210
+ evidence: boundedEvidence(history),
211
+ };
212
+ }
213
+ export function decideRestartRecommendation(input) {
214
+ const { history, threshold, rounds } = input;
215
+ if ((threshold !== 'C' && threshold !== 'D')
216
+ || !Number.isFinite(rounds)
217
+ || !Number.isInteger(rounds)
218
+ || (rounds ?? 0) < 1) {
219
+ return invalidDecision(history);
220
+ }
221
+ const requiredRounds = rounds;
222
+ for (let index = 0; index < history.length; index += 1) {
223
+ const current = history[index];
224
+ if (!Number.isInteger(current.round) || current.round < 1
225
+ || (index > 0 && current.round <= history[index - 1].round)) {
226
+ return invalidDecision(history);
227
+ }
228
+ }
229
+ if (history.length === 0) {
230
+ return {
231
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
232
+ trailingAtOrBelow: 0, reason: 'NO_QE_HISTORY', evidence: [],
233
+ };
234
+ }
235
+ let trailing = 0;
236
+ let expectedRound = history[history.length - 1].round;
237
+ let boundary = 'start';
238
+ for (let index = history.length - 1; index >= 0; index -= 1) {
239
+ const current = history[index];
240
+ if (current.round !== expectedRound) {
241
+ boundary = 'gap';
242
+ break;
243
+ }
244
+ if (current.grade === null || current.problem !== null) {
245
+ boundary = 'opaque';
246
+ break;
247
+ }
248
+ if (GRADE_RANK[current.grade] > GRADE_RANK[threshold]) {
249
+ boundary = 'better';
250
+ break;
251
+ }
252
+ trailing += 1;
253
+ expectedRound -= 1;
254
+ }
255
+ const evidence = boundedEvidence(history);
256
+ if (trailing >= requiredRounds) {
257
+ return {
258
+ recommendation: 'RESTART_CODE_STAGE', recommendRestart: true, autoAction: false,
259
+ trailingAtOrBelow: trailing, reason: 'TRAILING_STREAK_AT_OR_BELOW_THRESHOLD', evidence,
260
+ };
261
+ }
262
+ if (boundary === 'better') {
263
+ return {
264
+ recommendation: 'NO_RESTART_RECOMMENDATION', recommendRestart: false, autoAction: false,
265
+ trailingAtOrBelow: trailing, reason: 'TRAILING_STREAK_INTERRUPTED', evidence,
266
+ };
267
+ }
268
+ return {
269
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
270
+ trailingAtOrBelow: trailing,
271
+ reason: boundary === 'gap'
272
+ ? 'ROUND_GAP'
273
+ : boundary === 'opaque'
274
+ ? 'OPAQUE_TRAILING_EVIDENCE'
275
+ : 'INSUFFICIENT_TRAILING_EVIDENCE',
276
+ evidence,
277
+ };
278
+ }
279
+ function sameNormalizedHistory(left, right) {
280
+ if (left.rounds.length !== right.rounds.length)
281
+ return false;
282
+ return left.rounds.every((round, index) => {
283
+ const other = right.rounds[index];
284
+ return other !== undefined
285
+ && round.round === other.round
286
+ && round.grade === other.grade
287
+ && round.problem === other.problem;
288
+ });
289
+ }
290
+ function sourcePath(slug, source) {
291
+ if (source === 'checkpoints')
292
+ return `features/${slug}/.fa-state/checkpoints.jsonl`;
293
+ if (source === 'training-pairs')
294
+ return `.dz/fa-training/${slug}/qe.jsonl`;
295
+ return null;
296
+ }
297
+ function assembleAdvice(checkpoints, trainingPairs, readDiagnostics, decisionInput) {
298
+ const diagnostics = [...readDiagnostics, ...checkpoints.diagnostics, ...trainingPairs.diagnostics];
299
+ if (readDiagnostics.length > 0 || checkpoints.fatal || trainingPairs.fatal) {
300
+ return {
301
+ source: 'none', selected: null, corroborated: false, diagnostics,
302
+ decision: {
303
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
304
+ trailingAtOrBelow: 0, reason: 'SOURCE_EVIDENCE_INVALID', evidence: [],
305
+ },
306
+ };
307
+ }
308
+ const checkpointHasHistory = checkpoints.qeCandidates > 0;
309
+ const trainingHasHistory = trainingPairs.qeCandidates > 0;
310
+ if (!checkpointHasHistory && !trainingHasHistory) {
311
+ return {
312
+ source: 'none', selected: null, corroborated: false, diagnostics,
313
+ decision: decideRestartRecommendation({ history: [], ...decisionInput }),
314
+ };
315
+ }
316
+ if (checkpointHasHistory && trainingHasHistory && !sameNormalizedHistory(checkpoints, trainingPairs)) {
317
+ diagnostics.push('checkpoint and training-pair histories do not normalize to the same rounds; refusing to union them');
318
+ return {
319
+ source: 'none', selected: null, corroborated: false, diagnostics,
320
+ decision: {
321
+ recommendation: 'NOT_ESTABLISHED', recommendRestart: false, autoAction: false,
322
+ trailingAtOrBelow: 0, reason: 'SOURCE_CONFLICT', evidence: [],
323
+ },
324
+ };
325
+ }
326
+ const selected = checkpointHasHistory ? checkpoints : trainingPairs;
327
+ return {
328
+ source: selected.source,
329
+ selected,
330
+ corroborated: checkpointHasHistory && trainingHasHistory,
331
+ diagnostics,
332
+ decision: decideRestartRecommendation({ history: selected.rounds, ...decisionInput }),
333
+ };
334
+ }
335
+ function decisionLogPayload(advice) {
336
+ return {
337
+ slug: advice.slug,
338
+ recommendation: advice.recommendation,
339
+ autoAction: false,
340
+ threshold: advice.policy.threshold,
341
+ thresholdOrigin: advice.policy.thresholdOrigin,
342
+ rounds: advice.policy.rounds,
343
+ roundsOrigin: advice.policy.roundsOrigin,
344
+ trailingAtOrBelow: advice.trailingAtOrBelow,
345
+ source: advice.sourcePath ?? 'none',
346
+ evidence: advice.evidence.map((round) => ({
347
+ round: round.round,
348
+ grade: round.grade,
349
+ ...(round.problem === null ? {} : { problem: round.problem }),
350
+ })),
351
+ diagnostics: advice.diagnosticsSummary.total,
352
+ reason: advice.reason,
353
+ };
354
+ }
355
+ export function renderRestartDecisionLog(advice) {
356
+ return `restart-advisor decision ${JSON.stringify(decisionLogPayload(advice))}`;
357
+ }
358
+ export function adviseRestart(input, policy = {}) {
359
+ const checkpoints = parseCheckpointQeHistory(input.checkpointsJsonl);
360
+ const trainingPairs = parseTrainingPairQeHistory(input.trainingPairsJsonl);
361
+ const threshold = policy.threshold === 'C' || policy.threshold === 'D' ? policy.threshold : null;
362
+ const validRounds = Number.isFinite(policy.rounds) && Number.isInteger(policy.rounds) && (policy.rounds ?? 0) > 0
363
+ ? policy.rounds
364
+ : null;
365
+ const thresholdOrigin = policy.thresholdOrigin ?? 'caller';
366
+ const roundsOrigin = policy.roundsOrigin ?? 'caller';
367
+ const inspectedPaths = [
368
+ `features/${input.slug}/.fa-state/checkpoints.jsonl`,
369
+ `.dz/fa-training/${input.slug}/qe.jsonl`,
370
+ ];
371
+ let assembly;
372
+ if ((input.inputErrors?.length ?? 0) > 0) {
373
+ assembly = {
374
+ source: 'none', selected: null, corroborated: false,
375
+ diagnostics: [...(input.inputErrors ?? [])],
376
+ decision: {
377
+ recommendation: 'INVALID_INPUT', recommendRestart: false, autoAction: false,
378
+ trailingAtOrBelow: 0, reason: 'INPUT_INVALID', evidence: [],
379
+ },
380
+ };
381
+ }
382
+ else if (input.slug.trim() === '') {
383
+ assembly = {
384
+ source: 'none', selected: null, corroborated: false,
385
+ diagnostics: ['slug must be a non-empty string'],
386
+ decision: {
387
+ recommendation: 'INVALID_INPUT', recommendRestart: false, autoAction: false,
388
+ trailingAtOrBelow: 0, reason: 'INPUT_INVALID', evidence: [],
389
+ },
390
+ };
391
+ }
392
+ else if (threshold === null || validRounds === null) {
393
+ const invalid = decideRestartRecommendation({
394
+ history: [],
395
+ ...(threshold === null ? {} : { threshold }),
396
+ ...(validRounds === null ? {} : { rounds: validRounds }),
397
+ });
398
+ assembly = {
399
+ source: 'none', selected: null, corroborated: false,
400
+ diagnostics: ['threshold must be C|D and rounds must be a positive integer; core supplies no defaults'],
401
+ decision: invalid,
402
+ };
403
+ }
404
+ else {
405
+ assembly = assembleAdvice(checkpoints, trainingPairs, input.readDiagnostics ?? [], { threshold, rounds: validRounds });
406
+ }
407
+ const selected = assembly.selected;
408
+ const evidence = assembly.decision.evidence;
409
+ const boundedDiagnostics = assembly.diagnostics.slice(0, RESTART_ADVISOR_MAX_DIAGNOSTICS);
410
+ const base = {
411
+ schema: RESTART_ADVISOR_SCHEMA,
412
+ slug: input.slug,
413
+ source: assembly.source,
414
+ sourcePath: sourcePath(input.slug, assembly.source),
415
+ inspectedPaths,
416
+ corroborated: assembly.corroborated,
417
+ policy: { threshold, thresholdOrigin, rounds: validRounds, roundsOrigin },
418
+ counts: {
419
+ recordsRead: selected?.recordsRead ?? checkpoints.recordsRead + trainingPairs.recordsRead,
420
+ qeCandidates: selected?.qeCandidates ?? checkpoints.qeCandidates + trainingPairs.qeCandidates,
421
+ normalizedRounds: selected?.rounds.length ?? 0,
422
+ trailingAtOrBelow: assembly.decision.trailingAtOrBelow,
423
+ },
424
+ evidence,
425
+ evidenceSummary: {
426
+ total: selected?.rounds.length ?? evidence.length,
427
+ returned: evidence.length,
428
+ truncated: (selected?.rounds.length ?? evidence.length) > evidence.length,
429
+ },
430
+ diagnostics: boundedDiagnostics,
431
+ diagnosticsSummary: {
432
+ total: assembly.diagnostics.length,
433
+ returned: boundedDiagnostics.length,
434
+ truncated: assembly.diagnostics.length > boundedDiagnostics.length,
435
+ },
436
+ recommendation: assembly.decision.recommendation,
437
+ recommendRestart: assembly.decision.recommendRestart,
438
+ autoAction: false,
439
+ trailingAtOrBelow: assembly.decision.trailingAtOrBelow,
440
+ reason: assembly.decision.reason,
441
+ };
442
+ const advice = { ...base, decisionLogLine: '' };
443
+ return { ...advice, decisionLogLine: renderRestartDecisionLog(advice) };
444
+ }
445
+ //# sourceMappingURL=restart-advisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-advisor.js","sourceRoot":"","sources":["../src/restart-advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ export type SlopLanguage = 'en' | 'ru';
2
+ export type SlopRuleId = 'lexical-density' | 'bullet-wall' | 'triple-adjective-stack';
3
+ export interface SlopValidationError {
4
+ readonly field: string;
5
+ readonly value: unknown;
6
+ readonly reason: string;
7
+ }
8
+ export type ValidationResult<T> = {
9
+ readonly ok: true;
10
+ readonly value: T;
11
+ } | {
12
+ readonly ok: false;
13
+ readonly errors: readonly SlopValidationError[];
14
+ };
15
+ export interface SlopDiagnostic {
16
+ readonly code: 'unclosed-example-block' | 'input-limit-exceeded' | 'analysis-error';
17
+ readonly line: number;
18
+ readonly message: string;
19
+ }
20
+ export interface SlopRegistryEntry {
21
+ readonly id: string;
22
+ readonly language: SlopLanguage;
23
+ readonly match: {
24
+ readonly kind: 'form' | 'stem' | 'phrase';
25
+ readonly values: readonly string[];
26
+ };
27
+ readonly rationale: string;
28
+ readonly provenance: {
29
+ readonly source: string;
30
+ readonly license: 'repository-authored';
31
+ };
32
+ }
33
+ export interface SlopRegistry {
34
+ readonly schema: 'dz-slop-registry/1';
35
+ readonly metadata: {
36
+ readonly policyVersion: string;
37
+ readonly owner: string;
38
+ readonly reviewCadence: string;
39
+ readonly englishReference: {
40
+ readonly repository: string;
41
+ readonly commit: string;
42
+ readonly path: string;
43
+ readonly license: 'none-declared';
44
+ readonly retrieved: string;
45
+ readonly use: string;
46
+ };
47
+ };
48
+ readonly markers: readonly SlopRegistryEntry[];
49
+ readonly adjectives: readonly SlopRegistryEntry[];
50
+ }
51
+ export interface SlopLintConfig {
52
+ readonly schema: 'dz-slop-config/1';
53
+ readonly lexicalDensityPer100Words: Readonly<{
54
+ en: number;
55
+ ru: number;
56
+ }>;
57
+ readonly lexicalMinimumMarkers: number;
58
+ readonly lexicalWordFloor: number;
59
+ readonly bulletMinimumItems: number;
60
+ readonly bulletMinimumLineRatio: number;
61
+ readonly bulletMaximumMeanWords: number;
62
+ readonly adjectiveStackSize: 3;
63
+ }
64
+ export interface SlopEvidence {
65
+ readonly id: string;
66
+ readonly language: SlopLanguage;
67
+ readonly normalizedSpan: string;
68
+ readonly text: string;
69
+ readonly lineStart: number;
70
+ readonly columnStart: number;
71
+ readonly lineEnd: number;
72
+ readonly columnEnd: number;
73
+ readonly startOffset: number;
74
+ readonly endOffset: number;
75
+ readonly count: 1;
76
+ }
77
+ export interface SlopFindingMetrics {
78
+ readonly markerCount: number;
79
+ readonly distinctMarkers: number;
80
+ readonly visibleWords: number;
81
+ readonly densityPer100Words: number;
82
+ readonly listItems: number;
83
+ readonly listLineRatio: number;
84
+ readonly listMeanWords: number;
85
+ readonly adjectiveCount: number;
86
+ }
87
+ export interface SlopFindingThresholds {
88
+ readonly densityPer100Words: number;
89
+ readonly minimumMarkers: number;
90
+ readonly wordFloor: number;
91
+ readonly bulletMinimumItems: number;
92
+ readonly bulletMinimumLineRatio: number;
93
+ readonly bulletMaximumMeanWords: number;
94
+ readonly adjectiveStackSize: 3;
95
+ }
96
+ export interface SlopFinding {
97
+ readonly ruleId: SlopRuleId;
98
+ readonly severity: 'advisory';
99
+ readonly paragraph: number;
100
+ readonly lineStart: number;
101
+ readonly columnStart: number;
102
+ readonly lineEnd: number;
103
+ readonly columnEnd: number;
104
+ readonly language: SlopLanguage | 'mixed' | 'structural';
105
+ readonly excerpt: string;
106
+ readonly evidence: readonly SlopEvidence[];
107
+ readonly metrics: SlopFindingMetrics;
108
+ readonly thresholds: SlopFindingThresholds;
109
+ readonly suggestion: string;
110
+ }
111
+ export interface SlopLintResult {
112
+ readonly paragraphCount: number;
113
+ readonly findings: readonly SlopFinding[];
114
+ readonly diagnostics: readonly SlopDiagnostic[];
115
+ }
116
+ export declare const DEFAULT_SLOP_CONFIG: Readonly<SlopLintConfig>;
117
+ export declare const BUNDLED_SLOP_REGISTRY_URL: import("node:url").URL;
118
+ export declare function validateSlopLintConfig(value: unknown): ValidationResult<SlopLintConfig>;
119
+ export declare function parseSlopRegistry(value: unknown): ValidationResult<SlopRegistry>;
120
+ /**
121
+ * Pure deterministic style analysis. The caller supplies already-loaded policy data; this function
122
+ * performs no file, network, database, clock, locale, or process I/O and never throws.
123
+ */
124
+ export declare function slopLint(text: string, input: {
125
+ readonly config: SlopLintConfig;
126
+ readonly registry: SlopRegistry;
127
+ }): SlopLintResult;
128
+ //# sourceMappingURL=slop-lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slop-lint.d.ts","sourceRoot":"","sources":["../src/slop-lint.ts"],"names":[],"mappings":"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"}