@opensip-cli/fitness 0.1.5 → 0.1.7
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 +2 -2
- package/dist/__tests__/fit-execute-opts.test.js +2 -2
- package/dist/__tests__/fit-execute-opts.test.js.map +1 -1
- package/dist/__tests__/public-api.test.js +2 -1
- package/dist/__tests__/public-api.test.js.map +1 -1
- package/dist/__tests__/tool.test.js +24 -13
- package/dist/__tests__/tool.test.js.map +1 -1
- package/dist/cli/__tests__/fit-gate-mode.test.js +1 -1
- package/dist/cli/__tests__/fit-gate-mode.test.js.map +1 -1
- package/dist/cli/__tests__/fit-modes-live.test.d.ts +1 -1
- package/dist/cli/__tests__/fit-modes-live.test.js +13 -6
- package/dist/cli/__tests__/fit-modes-live.test.js.map +1 -1
- package/dist/cli/__tests__/report-data.test.js +3 -3
- package/dist/cli/__tests__/report-data.test.js.map +1 -1
- package/dist/cli/fit/__tests__/display-fold.test.js +2 -2
- package/dist/cli/fit/__tests__/display-fold.test.js.map +1 -1
- package/dist/cli/fit/__tests__/fit-export-command-spec.test.d.ts +9 -0
- package/dist/cli/fit/__tests__/fit-export-command-spec.test.d.ts.map +1 -0
- package/dist/cli/fit/__tests__/fit-export-command-spec.test.js +75 -0
- package/dist/cli/fit/__tests__/fit-export-command-spec.test.js.map +1 -0
- package/dist/cli/fit/check-loader.d.ts +1 -1
- package/dist/cli/fit/check-loader.js +1 -1
- package/dist/cli/fit/config-loader.d.ts +1 -1
- package/dist/cli/fit/config-loader.js +1 -1
- package/dist/cli/fit/envelope-view.d.ts.map +1 -1
- package/dist/cli/fit/envelope-view.js +2 -14
- package/dist/cli/fit/envelope-view.js.map +1 -1
- package/dist/cli/fit/fit-aux-command-specs.d.ts +27 -17
- package/dist/cli/fit/fit-aux-command-specs.d.ts.map +1 -1
- package/dist/cli/fit/fit-aux-command-specs.js +91 -53
- package/dist/cli/fit/fit-aux-command-specs.js.map +1 -1
- package/dist/cli/fit/recipe-selector.test.js +2 -2
- package/dist/cli/fit/recipe-selector.test.js.map +1 -1
- package/dist/cli/fit/result-builders.d.ts +29 -19
- package/dist/cli/fit/result-builders.d.ts.map +1 -1
- package/dist/cli/fit/result-builders.js +29 -24
- package/dist/cli/fit/result-builders.js.map +1 -1
- package/dist/cli/fit-modes.d.ts.map +1 -1
- package/dist/cli/fit-modes.js +7 -4
- package/dist/cli/fit-modes.js.map +1 -1
- package/dist/cli/fit-runner-views.d.ts +1 -1
- package/dist/cli/fit-runner-views.js +1 -1
- package/dist/cli/fit-runner.d.ts.map +1 -1
- package/dist/cli/fit-runner.js +18 -12
- package/dist/cli/fit-runner.js.map +1 -1
- package/dist/cli/fit-worker.d.ts.map +1 -1
- package/dist/cli/fit-worker.js +1 -0
- package/dist/cli/fit-worker.js.map +1 -1
- package/dist/cli/fit.d.ts +5 -3
- package/dist/cli/fit.d.ts.map +1 -1
- package/dist/cli/fit.js +6 -4
- package/dist/cli/fit.js.map +1 -1
- package/dist/framework/__tests__/concurrent-file-cache.test.d.ts +24 -0
- package/dist/framework/__tests__/concurrent-file-cache.test.d.ts.map +1 -0
- package/dist/framework/__tests__/concurrent-file-cache.test.js +151 -0
- package/dist/framework/__tests__/concurrent-file-cache.test.js.map +1 -0
- package/dist/framework/__tests__/define-check.test.js +38 -1
- package/dist/framework/__tests__/define-check.test.js.map +1 -1
- package/dist/framework/__tests__/define-regex-list-check.test.js +5 -1
- package/dist/framework/__tests__/define-regex-list-check.test.js.map +1 -1
- package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.js +3 -1
- package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.js.map +1 -1
- package/dist/framework/__tests__/execution-context.test.js +32 -9
- package/dist/framework/__tests__/execution-context.test.js.map +1 -1
- package/dist/framework/__tests__/file-accessor.test.js +7 -4
- package/dist/framework/__tests__/file-accessor.test.js.map +1 -1
- package/dist/framework/__tests__/file-cache-autoclear.test.d.ts +25 -0
- package/dist/framework/__tests__/file-cache-autoclear.test.d.ts.map +1 -0
- package/dist/framework/__tests__/file-cache-autoclear.test.js +116 -0
- package/dist/framework/__tests__/file-cache-autoclear.test.js.map +1 -0
- package/dist/framework/__tests__/register-helpers.test.js +2 -2
- package/dist/framework/__tests__/register-helpers.test.js.map +1 -1
- package/dist/framework/__tests__/scope-registry.test.js +2 -2
- package/dist/framework/__tests__/scope-registry.test.js.map +1 -1
- package/dist/framework/define-check.d.ts.map +1 -1
- package/dist/framework/define-check.js +9 -0
- package/dist/framework/define-check.js.map +1 -1
- package/dist/framework/execution-context.d.ts +9 -2
- package/dist/framework/execution-context.d.ts.map +1 -1
- package/dist/framework/execution-context.js +21 -7
- package/dist/framework/execution-context.js.map +1 -1
- package/dist/framework/file-accessor.d.ts +12 -0
- package/dist/framework/file-accessor.d.ts.map +1 -1
- package/dist/framework/file-accessor.js +8 -3
- package/dist/framework/file-accessor.js.map +1 -1
- package/dist/framework/file-cache.d.ts +11 -1
- package/dist/framework/file-cache.d.ts.map +1 -1
- package/dist/framework/file-cache.js +11 -1
- package/dist/framework/file-cache.js.map +1 -1
- package/dist/framework/ignore-processing.d.ts.map +1 -1
- package/dist/framework/ignore-processing.js +26 -11
- package/dist/framework/ignore-processing.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/persistence/session-replay.d.ts +8 -3
- package/dist/persistence/session-replay.d.ts.map +1 -1
- package/dist/persistence/session-replay.js +7 -8
- package/dist/persistence/session-replay.js.map +1 -1
- package/dist/persistence/session-replay.test.js +9 -7
- package/dist/persistence/session-replay.test.js.map +1 -1
- package/dist/plugins/__tests__/loader.test.js +2 -2
- package/dist/plugins/__tests__/loader.test.js.map +1 -1
- package/dist/recipes/__tests__/run-one-check.test.js +16 -1
- package/dist/recipes/__tests__/run-one-check.test.js.map +1 -1
- package/dist/recipes/__tests__/service.test.js +46 -3
- package/dist/recipes/__tests__/service.test.js.map +1 -1
- package/dist/recipes/service.d.ts +8 -1
- package/dist/recipes/service.d.ts.map +1 -1
- package/dist/recipes/service.js +33 -4
- package/dist/recipes/service.js.map +1 -1
- package/dist/scope-augmentation.d.ts +7 -1
- package/dist/scope-augmentation.d.ts.map +1 -1
- package/dist/tool.d.ts +4 -3
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js +58 -85
- package/dist/tool.js.map +1 -1
- package/package.json +14 -14
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* including file access, pattern matching, and abort support.
|
|
6
6
|
*/
|
|
7
7
|
import { SystemError } from '@opensip-cli/core';
|
|
8
|
-
import { type FileCache } from './file-cache.js';
|
|
9
8
|
import { PathMatcher } from './path-matcher.js';
|
|
10
9
|
import type { ResolvedScope } from './check-config.js';
|
|
10
|
+
import type { FileCache } from './file-cache.js';
|
|
11
11
|
/**
|
|
12
12
|
* Check identifier (UUID format).
|
|
13
13
|
*/
|
|
@@ -78,7 +78,14 @@ export interface RunOptions {
|
|
|
78
78
|
* `tests/fixtures/`, etc., contrary to user intent.
|
|
79
79
|
*/
|
|
80
80
|
readonly globalExcludes?: readonly string[];
|
|
81
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Per-run FileCache instance. On the production path the recipe service passes
|
|
83
|
+
* the resolved `scope.fitness.fileCache` here. Optional only for the no-scope
|
|
84
|
+
* direct `run()` / unit-test path; when omitted, `createExecutionContext`
|
|
85
|
+
* resolves `currentScope()?.fitness?.fileCache` and throws
|
|
86
|
+
* `SYSTEM.FITNESS.NO_FILE_CACHE` if neither is present on a file-reading path
|
|
87
|
+
* (no module-singleton fallback — parallel-tool-invocations Phase 1).
|
|
88
|
+
*/
|
|
82
89
|
readonly fileCache?: FileCache;
|
|
83
90
|
}
|
|
84
91
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/framework/execution-context.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/framework/execution-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,9 @@
|
|
|
8
8
|
* including file access, pattern matching, and abort support.
|
|
9
9
|
*/
|
|
10
10
|
import * as fs from 'node:fs/promises';
|
|
11
|
-
import { SystemError,
|
|
11
|
+
import { SystemError, currentLogger, currentScope } from '@opensip-cli/core';
|
|
12
12
|
import { applyGlobalExcludes } from '../targets/index.js';
|
|
13
13
|
import { DEFAULT_EXCLUSION_PATTERNS } from './constants.js';
|
|
14
|
-
import { fileCache as globalFileCache } from './file-cache.js';
|
|
15
14
|
import { PathMatcher } from './path-matcher.js';
|
|
16
15
|
import { extractSnippet } from './result-builder.js';
|
|
17
16
|
/**
|
|
@@ -38,9 +37,12 @@ export class CheckAbortedError extends SystemError {
|
|
|
38
37
|
* through the substrate `applyGlobalExcludes` (ADR-0037) — the SAME
|
|
39
38
|
* single implementation the scope-resolution path uses, so globalExcludes
|
|
40
39
|
* is single-sourced on both paths (no separate Minimatch path in fitness).
|
|
40
|
+
*
|
|
41
|
+
* `fc` is the per-run cache resolved by {@link createExecutionContext}
|
|
42
|
+
* (`options.fileCache ?? currentScope().fitness.fileCache`) — REQUIRED, no
|
|
43
|
+
* module-singleton fallback (parallel-tool-invocations Phase 1).
|
|
41
44
|
*/
|
|
42
|
-
function createMatchFilesFunction(cwd, matcher, targetFiles, globalExcludes
|
|
43
|
-
const fc = fileCacheInstance ?? globalFileCache;
|
|
45
|
+
function createMatchFilesFunction(cwd, matcher, fc, targetFiles, globalExcludes) {
|
|
44
46
|
return async (patterns, options) => {
|
|
45
47
|
if (patterns && patterns.length > 0) {
|
|
46
48
|
const customMatcher = PathMatcher.create({
|
|
@@ -71,7 +73,19 @@ function createMatchFilesFunction(cwd, matcher, targetFiles, globalExcludes, fil
|
|
|
71
73
|
* Creates the execution context for a check.
|
|
72
74
|
*/
|
|
73
75
|
export function createExecutionContext(config, cwd, matcher, options) {
|
|
74
|
-
|
|
76
|
+
// Resolve the per-run cache: the explicit option (recipe service passes
|
|
77
|
+
// `execOpts.fileCache` on the production path) or the entered scope's
|
|
78
|
+
// canonical `scope.fitness.fileCache`. No module-singleton fallback — a
|
|
79
|
+
// file-reading production path MUST run inside a scope carrying the fitness
|
|
80
|
+
// subscope (parallel-tool-invocations Phase 1). The no-scope direct `run()`
|
|
81
|
+
// path may pass `options.fileCache` explicitly; absent both, file reads throw.
|
|
82
|
+
const fc = options?.fileCache ?? currentScope()?.fitness?.fileCache;
|
|
83
|
+
if (!fc) {
|
|
84
|
+
throw new SystemError(`No per-run FileCache available for check '${config.slug}'. A file-reading ` +
|
|
85
|
+
`check must run inside a RunScope carrying scope.fitness.fileCache (the CLI ` +
|
|
86
|
+
`pre-action-hook installs it via the fitness tool's contributeScope), or be ` +
|
|
87
|
+
`passed an explicit options.fileCache.`, { code: 'SYSTEM.FITNESS.NO_FILE_CACHE' });
|
|
88
|
+
}
|
|
75
89
|
return {
|
|
76
90
|
cwd,
|
|
77
91
|
checkId: config.id,
|
|
@@ -108,7 +122,7 @@ export function createExecutionContext(config, cwd, matcher, options) {
|
|
|
108
122
|
fileExists(filePath) {
|
|
109
123
|
return fc.exists(filePath);
|
|
110
124
|
},
|
|
111
|
-
matchFiles: createMatchFilesFunction(cwd, matcher, options?.targetFiles, options?.globalExcludes
|
|
125
|
+
matchFiles: createMatchFilesFunction(cwd, matcher, fc, options?.targetFiles, options?.globalExcludes),
|
|
112
126
|
getMatcher() {
|
|
113
127
|
return matcher;
|
|
114
128
|
},
|
|
@@ -122,7 +136,7 @@ export function createExecutionContext(config, cwd, matcher, options) {
|
|
|
122
136
|
// that exercise an ExecutionContext directly). Audit-round-2
|
|
123
137
|
// Finding D: this was previously `console.log` which bypassed
|
|
124
138
|
// the structured channel and could not be suppressed.
|
|
125
|
-
const log =
|
|
139
|
+
const log = currentLogger();
|
|
126
140
|
log.info({
|
|
127
141
|
evt: 'fitness.check.verbose',
|
|
128
142
|
module: 'fitness:framework',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/framework/execution-context.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yGAAyG;AACzG,qKAAqK;AACrK;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/framework/execution-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* analyzeAll mode checks that need to correlate across files.
|
|
6
6
|
*/
|
|
7
7
|
import type { FileAccessor } from './check-config.js';
|
|
8
|
+
import type { FileCache } from './file-cache.js';
|
|
8
9
|
/** Options for creating a FileAccessor instance. */
|
|
9
10
|
export interface FileAccessorOptions {
|
|
10
11
|
readonly cacheCapacity?: number;
|
|
@@ -14,6 +15,17 @@ export interface FileAccessorOptions {
|
|
|
14
15
|
* BaseCheckConfig.contentFilter for the canonical doc.
|
|
15
16
|
*/
|
|
16
17
|
readonly contentFilter?: 'raw' | 'strip-strings' | 'strip-strings-and-comments';
|
|
18
|
+
/**
|
|
19
|
+
* Per-run scope cache (`scope.fitness.fileCache`). When present, `read()`
|
|
20
|
+
* resolves prewarmed content from it before hitting disk — closing the
|
|
21
|
+
* analyzeAll global-cache miss (parallel-tool-invocations Phase 1). Optional:
|
|
22
|
+
* the no-scope single-check direct path and isolated unit tests legitimately
|
|
23
|
+
* have no scope cache and fall through to a disk read. The production
|
|
24
|
+
* guarantee that the analyzeAll call site passes the scope cache is enforced
|
|
25
|
+
* at the `createExecutionContext` resolve-or-throw boundary + a call-site test,
|
|
26
|
+
* not by a required parameter.
|
|
27
|
+
*/
|
|
28
|
+
readonly fileCache?: FileCache;
|
|
17
29
|
}
|
|
18
30
|
/** Create a FileAccessor for lazy-loading files with LRU caching. */
|
|
19
31
|
export declare function createFileAccessor(filePaths: readonly string[], options?: FileAccessorOptions): FileAccessor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-accessor.d.ts","sourceRoot":"","sources":["../../src/framework/file-accessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"file-accessor.d.ts","sourceRoot":"","sources":["../../src/framework/file-accessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAkDjD,oDAAoD;AACpD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,4BAA4B,CAAC;IAChF;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAgGD,qEAAqE;AAErE,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,OAAO,GAAE,mBAAwB,GAChC,YAAY,CAEd"}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as fs from 'node:fs/promises';
|
|
8
8
|
import { ValidationError, applyContentFilter } from '@opensip-cli/core';
|
|
9
|
-
import { fileCache } from './file-cache.js';
|
|
10
9
|
// =============================================================================
|
|
11
10
|
// LRU CACHE
|
|
12
11
|
// =============================================================================
|
|
@@ -53,12 +52,15 @@ class FileAccessorImpl {
|
|
|
53
52
|
pathSet;
|
|
54
53
|
signal;
|
|
55
54
|
contentFilterMode;
|
|
55
|
+
/** Per-run scope cache; undefined on the no-scope direct path (→ disk read). */
|
|
56
|
+
fileCache;
|
|
56
57
|
constructor(filePaths, options = {}) {
|
|
57
58
|
this.paths = filePaths;
|
|
58
59
|
this.pathSet = new Set(filePaths);
|
|
59
60
|
this.cache = new LRUCache(options.cacheCapacity ?? DEFAULT_CACHE_CAPACITY);
|
|
60
61
|
this.signal = options.signal;
|
|
61
62
|
this.contentFilterMode = options.contentFilter;
|
|
63
|
+
this.fileCache = options.fileCache;
|
|
62
64
|
}
|
|
63
65
|
async read(filePath) {
|
|
64
66
|
// in-memory: single-threaded Node.js access pattern
|
|
@@ -73,8 +75,11 @@ class FileAccessorImpl {
|
|
|
73
75
|
if (cached !== undefined) {
|
|
74
76
|
return cached;
|
|
75
77
|
}
|
|
76
|
-
// Try
|
|
77
|
-
|
|
78
|
+
// Try the per-run scope cache first (populated by prewarm or previous
|
|
79
|
+
// checks). On the no-scope direct path no cache is injected, so we fall
|
|
80
|
+
// straight through to the disk read below (parallel-tool-invocations Phase 1
|
|
81
|
+
// — the module-singleton read is gone).
|
|
82
|
+
let content = this.fileCache?.getCached(filePath);
|
|
78
83
|
if (content === undefined) {
|
|
79
84
|
const fileStats = await fs.stat(filePath);
|
|
80
85
|
if (fileStats.size > 10_000_000) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-accessor.js","sourceRoot":"","sources":["../../src/framework/file-accessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-accessor.js","sourceRoot":"","sources":["../../src/framework/file-accessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,7 +59,17 @@ export declare class FileCache {
|
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* TEST-ONLY shared file cache instance.
|
|
63
|
+
*
|
|
64
|
+
* Production resolves the per-run cache from `currentScope()?.fitness?.fileCache`
|
|
65
|
+
* (created once per run by the fitness tool's `contributeScope()`); after
|
|
66
|
+
* parallel-tool-invocations Phase 1, ZERO production code reads this singleton.
|
|
67
|
+
* It is retained solely for isolated unit tests that exercise the cache without
|
|
68
|
+
* a scope (they seed/clear it directly, or pass it explicitly as
|
|
69
|
+
* `options.fileCache`). New production imports are forbidden by the
|
|
70
|
+
* `no-module-level-run-state` dogfood check (Phase 3). Note that
|
|
71
|
+
* `no-module-singleton.mjs` still allowlists this symbol by file
|
|
72
|
+
* (`EXEMPT_BY_FILE`).
|
|
63
73
|
*/
|
|
64
74
|
export declare const fileCache: FileCache;
|
|
65
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-cache.d.ts","sourceRoot":"","sources":["../../src/framework/file-cache.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAQH;;GAEG;AACH,UAAU,YAAY;IACpB,6BAA6B;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAYD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAA8C;IAErE;;;;;OAKG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAiE9E;;;OAGG;IACH,+EAA+E;IAC/E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKzC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B5C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;;OAGG;IACH,KAAK,IAAI,SAAS,MAAM,EAAE;IAI1B;;OAEG;IACH,qFAAqF;IACrF,OAAO,CAAC,iBAAiB;IAkBzB,IAAI,KAAK,IAAI;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;KAClB,CAMA;CACF;AAED
|
|
1
|
+
{"version":3,"file":"file-cache.d.ts","sourceRoot":"","sources":["../../src/framework/file-cache.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAQH;;GAEG;AACH,UAAU,YAAY;IACpB,6BAA6B;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAYD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAA8C;IAErE;;;;;OAKG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAiE9E;;;OAGG;IACH,+EAA+E;IAC/E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKzC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B5C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;;OAGG;IACH,KAAK,IAAI,SAAS,MAAM,EAAE;IAI1B;;OAEG;IACH,qFAAqF;IACrF,OAAO,CAAC,iBAAiB;IAkBzB,IAAI,KAAK,IAAI;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;KAClB,CAMA;CACF;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,WAAkB,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,wBAAwB,iFAO3B,CAAC"}
|
|
@@ -182,7 +182,17 @@ export class FileCache {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
185
|
-
*
|
|
185
|
+
* TEST-ONLY shared file cache instance.
|
|
186
|
+
*
|
|
187
|
+
* Production resolves the per-run cache from `currentScope()?.fitness?.fileCache`
|
|
188
|
+
* (created once per run by the fitness tool's `contributeScope()`); after
|
|
189
|
+
* parallel-tool-invocations Phase 1, ZERO production code reads this singleton.
|
|
190
|
+
* It is retained solely for isolated unit tests that exercise the cache without
|
|
191
|
+
* a scope (they seed/clear it directly, or pass it explicitly as
|
|
192
|
+
* `options.fileCache`). New production imports are forbidden by the
|
|
193
|
+
* `no-module-level-run-state` dogfood check (Phase 3). Note that
|
|
194
|
+
* `no-module-singleton.mjs` still allowlists this symbol by file
|
|
195
|
+
* (`EXEMPT_BY_FILE`).
|
|
186
196
|
*/
|
|
187
197
|
export const fileCache = new FileCache();
|
|
188
198
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-cache.js","sourceRoot":"","sources":["../../src/framework/file-cache.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"file-cache.js","sourceRoot":"","sources":["../../src/framework/file-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignore-processing.d.ts","sourceRoot":"","sources":["../../src/framework/ignore-processing.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"ignore-processing.d.ts","sourceRoot":"","sources":["../../src/framework/ignore-processing.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAWH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAkBhD;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC;IACT,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,cAAc,EAAE,CAAC;CACrC,CAAC,CAuCD;AAkHD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,MAAM,EAAE,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,WAAW,CAwBb"}
|
|
@@ -10,11 +10,23 @@
|
|
|
10
10
|
* anti-recursion: a finding pointing at a directive line is never suppressed)
|
|
11
11
|
* lives once in `@opensip-cli/core`.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
13
|
+
import { readFile as readFileFromDisk } from 'node:fs/promises';
|
|
14
|
+
import { currentScope, filterSignalsBySuppressions, logger } from '@opensip-cli/core';
|
|
14
15
|
import { countErrors, countWarnings } from '../types/severity.js';
|
|
15
16
|
import { extractGroup, isWeakReason, parseDirectiveLine } from './directive-inventory.js';
|
|
16
17
|
import { FITNESS_KEYWORDS } from './directive-parsing.js';
|
|
17
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Read file content for directive collection from the per-run scope cache when
|
|
20
|
+
* present (`scope.fitness.fileCache`), else directly from disk. The module
|
|
21
|
+
* singleton is no longer read here (parallel-tool-invocations Phase 1) — the
|
|
22
|
+
* no-scope direct single-check path legitimately has no scope cache and falls
|
|
23
|
+
* through to a disk read, preserving prior single-check behaviour.
|
|
24
|
+
*/
|
|
25
|
+
async function readViaCacheOrDisk(fc, filePath) {
|
|
26
|
+
if (fc)
|
|
27
|
+
return fc.get(filePath);
|
|
28
|
+
return readFileFromDisk(filePath, 'utf8');
|
|
29
|
+
}
|
|
18
30
|
// =============================================================================
|
|
19
31
|
// SIGNAL FILTERING
|
|
20
32
|
// =============================================================================
|
|
@@ -32,10 +44,13 @@ import { fileCache } from './file-cache.js';
|
|
|
32
44
|
* `DirectiveEntry` audit collection expects.
|
|
33
45
|
*/
|
|
34
46
|
export async function filterSignalsByDirectives(signals, checkId, initialIgnoredCount) {
|
|
47
|
+
// Resolve the per-run cache once; runs inside the run's scope on the
|
|
48
|
+
// production path. The same instance is threaded into directive re-reads below.
|
|
49
|
+
const fc = currentScope()?.fitness?.fileCache;
|
|
35
50
|
const { kept, suppressed } = await filterSignalsBySuppressions({
|
|
36
51
|
signals,
|
|
37
52
|
keywords: FITNESS_KEYWORDS,
|
|
38
|
-
readFile: (filePath) =>
|
|
53
|
+
readFile: (filePath) => readViaCacheOrDisk(fc, filePath),
|
|
39
54
|
ruleIdOf: () => checkId,
|
|
40
55
|
});
|
|
41
56
|
const appliedFileIgnores = new Set();
|
|
@@ -53,7 +68,7 @@ export async function filterSignalsByDirectives(signals, checkId, initialIgnored
|
|
|
53
68
|
lineSet.add(match.line);
|
|
54
69
|
}
|
|
55
70
|
}
|
|
56
|
-
const appliedDirectives = await collectAppliedDirectives(checkId, appliedFileIgnores, appliedLineIgnores);
|
|
71
|
+
const appliedDirectives = await collectAppliedDirectives(checkId, appliedFileIgnores, appliedLineIgnores, fc);
|
|
57
72
|
return {
|
|
58
73
|
filteredSignals: [...kept],
|
|
59
74
|
ignoredCount: initialIgnoredCount + suppressed.length,
|
|
@@ -74,10 +89,10 @@ function toDirectiveEntry(filePath, lineNumber, parsed) {
|
|
|
74
89
|
weakReason: isWeakReason(parsed.reason),
|
|
75
90
|
};
|
|
76
91
|
}
|
|
77
|
-
async function collectFileIgnoreDirectives(checkId, appliedFileIgnores) {
|
|
92
|
+
async function collectFileIgnoreDirectives(checkId, appliedFileIgnores, fc) {
|
|
78
93
|
const results = await Promise.all([...appliedFileIgnores].map(async (filePath) => {
|
|
79
94
|
try {
|
|
80
|
-
const content = await
|
|
95
|
+
const content = await readViaCacheOrDisk(fc, filePath);
|
|
81
96
|
const lines = content.split('\n');
|
|
82
97
|
for (let i = 0; i < Math.min(lines.length, 50); i++) {
|
|
83
98
|
const parsed = parseDirectiveLine(lines[i] ?? '');
|
|
@@ -97,11 +112,11 @@ async function collectFileIgnoreDirectives(checkId, appliedFileIgnores) {
|
|
|
97
112
|
}));
|
|
98
113
|
return results.filter((d) => d !== null);
|
|
99
114
|
}
|
|
100
|
-
async function collectLineIgnoreDirectives(checkId, appliedLineIgnores) {
|
|
115
|
+
async function collectLineIgnoreDirectives(checkId, appliedLineIgnores, fc) {
|
|
101
116
|
const results = await Promise.all([...appliedLineIgnores.entries()].map(async ([filePath, suppressedLines]) => {
|
|
102
117
|
const found = [];
|
|
103
118
|
try {
|
|
104
|
-
const content = await
|
|
119
|
+
const content = await readViaCacheOrDisk(fc, filePath);
|
|
105
120
|
const lines = content.split('\n');
|
|
106
121
|
for (let i = 0; i < lines.length; i++) {
|
|
107
122
|
const parsed = parseDirectiveLine(lines[i] ?? '');
|
|
@@ -134,10 +149,10 @@ async function collectLineIgnoreDirectives(checkId, appliedLineIgnores) {
|
|
|
134
149
|
}
|
|
135
150
|
return directives;
|
|
136
151
|
}
|
|
137
|
-
async function collectAppliedDirectives(checkId, appliedFileIgnores, appliedLineIgnores) {
|
|
152
|
+
async function collectAppliedDirectives(checkId, appliedFileIgnores, appliedLineIgnores, fc) {
|
|
138
153
|
const [fileDirectives, lineDirectives] = await Promise.all([
|
|
139
|
-
collectFileIgnoreDirectives(checkId, appliedFileIgnores),
|
|
140
|
-
collectLineIgnoreDirectives(checkId, appliedLineIgnores),
|
|
154
|
+
collectFileIgnoreDirectives(checkId, appliedFileIgnores, fc),
|
|
155
|
+
collectLineIgnoreDirectives(checkId, appliedLineIgnores, fc),
|
|
141
156
|
]);
|
|
142
157
|
return [...fileDirectives, ...lineDirectives];
|
|
143
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignore-processing.js","sourceRoot":"","sources":["../../src/framework/ignore-processing.ts"],"names":[],"mappings":"AAAA,0IAA0I;AAC1I,wHAAwH;AACxH;;;;;;;;;GASG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ignore-processing.js","sourceRoot":"","sources":["../../src/framework/ignore-processing.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ export type { Finding, Severity, FindingSeverity, ToolOutput, CheckResult, Check
|
|
|
36
36
|
export { getLineNumber, extractSnippet, isAPIFile } from './framework/result-builder.js';
|
|
37
37
|
export { execAbortable } from './framework/abortable-exec.js';
|
|
38
38
|
export { fileCache } from './framework/file-cache.js';
|
|
39
|
+
export type { FileCache } from './framework/file-cache.js';
|
|
39
40
|
export { buildImportGraph, findStronglyConnectedComponents } from './framework/import-graph.js';
|
|
40
41
|
export type { ImportGraph } from './framework/import-graph.js';
|
|
41
42
|
export { isInsideStringLiteral, stripStringLiterals, stripStringsAndComments, stripStringsAndCommentsPreservingPositions, } from './framework/strip-literals.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAI9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,wCAAwC,CAAC;AAQhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAKlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAG1E,YAAY,EACV,OAAO,EACP,QAAQ,EACR,eAAe,EACf,UAAU,EACV,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAI9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,wCAAwC,CAAC;AAQhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAKlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAG1E,YAAY,EACV,OAAO,EACP,QAAQ,EACR,eAAe,EACf,UAAU,EACV,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAK9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAItD,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAChG,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAK/D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,0CAA0C,GAC3C,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAKhC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM9E,OAAO,EAAE,WAAW,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43,7 +43,10 @@ export { isCheck, collectCheckObjects } from './framework/check-types.js';
|
|
|
43
43
|
// ── Authoring helpers — snippet/line extraction, file access ────────
|
|
44
44
|
export { getLineNumber, extractSnippet, isAPIFile } from './framework/result-builder.js';
|
|
45
45
|
export { execAbortable } from './framework/abortable-exec.js';
|
|
46
|
-
//
|
|
46
|
+
// TEST-ONLY re-export — production reads the per-run cache from
|
|
47
|
+
// scope.fitness.fileCache (resolved via currentScope()). Retained for isolated
|
|
48
|
+
// unit tests that seed/clear the singleton; new production imports are forbidden
|
|
49
|
+
// by the no-module-level-run-state dogfood check (parallel-tool-invocations Phase 3).
|
|
47
50
|
export { fileCache } from './framework/file-cache.js';
|
|
48
51
|
export { buildImportGraph, findStronglyConnectedComponents } from './framework/import-graph.js';
|
|
49
52
|
// Regex-based string/comment strippers — language-agnostic, good enough for
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,yEAAyE;AACzE,yEAAyE;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAOrD,sEAAsE;AACtE,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,sEAAsE;AACtE,8EAA8E;AAC9E,oEAAoE;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAWvD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAc1E,uEAAuE;AACvE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,yEAAyE;AACzE,yEAAyE;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAOrD,sEAAsE;AACtE,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,sEAAsE;AACtE,8EAA8E;AAC9E,oEAAoE;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAWvD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAc1E,uEAAuE;AACvE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,gEAAgE;AAChE,+EAA+E;AAC/E,iFAAiF;AACjF,sFAAsF;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAKtD,OAAO,EAAE,gBAAgB,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAGhG,4EAA4E;AAC5E,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,0CAA0C,GAC3C,MAAM,+BAA+B,CAAC;AAEvC,sEAAsE;AACtE,+EAA+E;AAC/E,0EAA0E;AAC1E,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AAEnC,6EAA6E;AAC7E,OAAO,EACL,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAahC,sEAAsE;AACtE,+EAA+E;AAC/E,6EAA6E;AAC7E,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { RunPresentation, StoredSession, ToolSessionReplay } from '@opensip-cli/contracts';
|
|
2
2
|
/**
|
|
3
|
-
* Project a stored fit session back into a {@link SignalEnvelope}/{@link
|
|
3
|
+
* Project a stored fit session back into a {@link SignalEnvelope}/{@link RunPresentation}.
|
|
4
4
|
*
|
|
5
5
|
* The structural decode of the opaque payload is shared across tools
|
|
6
6
|
* (`decodeSessionPayload`); this function owns only fit's projection — the
|
|
7
7
|
* envelope vocabulary (`tool: 'fit'`, recipe label) and the per-finding signal
|
|
8
8
|
* shape (`category: 'quality'`, severity mapping, id prefix).
|
|
9
9
|
*
|
|
10
|
+
* The replay RENDER path reads only `replay.envelope` + `replay.fidelity` (the
|
|
11
|
+
* host builds the shared `SessionReplayResult` from those); the inner
|
|
12
|
+
* `RunPresentation` `result` is a uniform, render-only carrier and is not on the
|
|
13
|
+
* replay render path.
|
|
14
|
+
*
|
|
10
15
|
* @throws {Error | TypeError} when the stored payload is not the expected shape
|
|
11
16
|
* (propagated from `decodeSessionPayload`).
|
|
12
17
|
*/
|
|
13
|
-
export declare function fitReplayFromSession(stored: StoredSession): ToolSessionReplay<
|
|
18
|
+
export declare function fitReplayFromSession(stored: StoredSession): ToolSessionReplay<RunPresentation>;
|
|
14
19
|
//# sourceMappingURL=session-replay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/persistence/session-replay.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"session-replay.d.ts","sourceRoot":"","sources":["../../src/persistence/session-replay.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EAEf,aAAa,EACb,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAkD9F"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { currentScope, extractPayloadVersion } from '@opensip-cli/core';
|
|
2
2
|
import { decodeSessionPayload } from '@opensip-cli/session-store';
|
|
3
3
|
/**
|
|
4
|
-
* Project a stored fit session back into a {@link SignalEnvelope}/{@link
|
|
4
|
+
* Project a stored fit session back into a {@link SignalEnvelope}/{@link RunPresentation}.
|
|
5
5
|
*
|
|
6
6
|
* The structural decode of the opaque payload is shared across tools
|
|
7
7
|
* (`decodeSessionPayload`); this function owns only fit's projection — the
|
|
8
8
|
* envelope vocabulary (`tool: 'fit'`, recipe label) and the per-finding signal
|
|
9
9
|
* shape (`category: 'quality'`, severity mapping, id prefix).
|
|
10
10
|
*
|
|
11
|
+
* The replay RENDER path reads only `replay.envelope` + `replay.fidelity` (the
|
|
12
|
+
* host builds the shared `SessionReplayResult` from those); the inner
|
|
13
|
+
* `RunPresentation` `result` is a uniform, render-only carrier and is not on the
|
|
14
|
+
* replay render path.
|
|
15
|
+
*
|
|
11
16
|
* @throws {Error | TypeError} when the stored payload is not the expected shape
|
|
12
17
|
* (propagated from `decodeSessionPayload`).
|
|
13
18
|
*/
|
|
@@ -47,13 +52,7 @@ export function fitReplayFromSession(stored) {
|
|
|
47
52
|
return {
|
|
48
53
|
fidelity: 'projection',
|
|
49
54
|
envelope,
|
|
50
|
-
result: {
|
|
51
|
-
type: 'fit-done',
|
|
52
|
-
label: stored.recipe ? `recipe ${stored.recipe}` : `session ${stored.id}`,
|
|
53
|
-
cwd: stored.cwd,
|
|
54
|
-
envelope,
|
|
55
|
-
configFound: true,
|
|
56
|
-
},
|
|
55
|
+
result: { type: 'run-presentation', tool: 'fitness', envelope },
|
|
57
56
|
};
|
|
58
57
|
}
|
|
59
58
|
function replaySignal(stored, source, finding, checkIndex, findingIndex) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/persistence/session-replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAe,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAA8B,MAAM,4BAA4B,CAAC;AAU9F
|
|
1
|
+
{"version":3,"file":"session-replay.js","sourceRoot":"","sources":["../../src/persistence/session-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ function realPayload() {
|
|
|
56
56
|
return buildFitnessSessionPayload(env);
|
|
57
57
|
}
|
|
58
58
|
describe('fitReplayFromSession', () => {
|
|
59
|
-
it('round-trips a stored payload back into a projection envelope + result', () => {
|
|
59
|
+
it('round-trips a stored payload back into a projection envelope + run-presentation result', () => {
|
|
60
60
|
const replay = fitReplayFromSession(storedSession(realPayload()));
|
|
61
61
|
expect(replay.fidelity).toBe('projection');
|
|
62
62
|
expect(replay.envelope.tool).toBe('fit');
|
|
@@ -68,18 +68,20 @@ describe('fitReplayFromSession', () => {
|
|
|
68
68
|
const located = replay.envelope.signals.find((s) => s.ruleId === 'fit:a');
|
|
69
69
|
expect(located?.code).toEqual({ file: 'src/x.ts', line: 3, column: 5 });
|
|
70
70
|
expect(located?.suggestion).toBe('fix it');
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
// The inner replay result is the uniform render-only RunPresentation carrying
|
|
72
|
+
// the projected envelope (the host renders replay via SessionReplayResult, not
|
|
73
|
+
// this inner result).
|
|
74
|
+
expect(replay.result.type).toBe('run-presentation');
|
|
75
|
+
expect(replay.result.tool).toBe('fitness');
|
|
76
|
+
expect(replay.result.envelope).toBe(replay.envelope);
|
|
73
77
|
});
|
|
74
|
-
it('
|
|
78
|
+
it('carries the recipe onto the envelope when present', () => {
|
|
75
79
|
const replay = fitReplayFromSession(storedSession(realPayload(), { recipe: 'example' }));
|
|
76
80
|
expect(replay.envelope.recipe).toBe('example');
|
|
77
|
-
expect(replay.result.label).toBe('recipe example');
|
|
78
81
|
});
|
|
79
|
-
it('
|
|
82
|
+
it('leaves the envelope recipe unset when no recipe is stored', () => {
|
|
80
83
|
const replay = fitReplayFromSession(storedSession(realPayload()));
|
|
81
84
|
expect(replay.envelope.recipe).toBeUndefined();
|
|
82
|
-
expect(replay.result.label).toBe('session FIT_1');
|
|
83
85
|
});
|
|
84
86
|
it('preserves a finding with no optional location fields (undefined branches)', () => {
|
|
85
87
|
const payload = {
|