log10x-mcp 1.29.34 → 1.29.36
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/build/lib/plan-dependencies.d.ts +62 -30
- package/build/lib/plan-dependencies.js +135 -74
- package/build/lib/plan-dependencies.js.map +1 -1
- package/build/lib/plan-solver.d.ts +13 -0
- package/build/lib/plan-solver.js +6 -1
- package/build/lib/plan-solver.js.map +1 -1
- package/build/lib/recurring-tick.d.ts +9 -0
- package/build/lib/recurring-tick.js +51 -0
- package/build/lib/recurring-tick.js.map +1 -1
- package/build/lib/server-instructions.js +39 -13
- package/build/lib/server-instructions.js.map +1 -1
- package/build/lib/siem/deps/cloudwatch.d.ts +2 -1
- package/build/lib/siem/deps/cloudwatch.js +28 -38
- package/build/lib/siem/deps/cloudwatch.js.map +1 -1
- package/build/lib/siem/deps/datadog.d.ts +2 -1
- package/build/lib/siem/deps/datadog.js +27 -34
- package/build/lib/siem/deps/datadog.js.map +1 -1
- package/build/lib/siem/deps/elasticsearch.d.ts +2 -1
- package/build/lib/siem/deps/elasticsearch.js +33 -51
- package/build/lib/siem/deps/elasticsearch.js.map +1 -1
- package/build/lib/siem/deps/index.d.ts +4 -1
- package/build/lib/siem/deps/index.js +29 -5
- package/build/lib/siem/deps/index.js.map +1 -1
- package/build/lib/siem/deps/splunk.d.ts +2 -1
- package/build/lib/siem/deps/splunk.js +28 -36
- package/build/lib/siem/deps/splunk.js.map +1 -1
- package/build/lib/siem/deps/types.d.ts +32 -0
- package/build/lib/siem/deps/types.js +36 -0
- package/build/lib/siem/deps/types.js.map +1 -1
- package/build/tools/dependency-check.js +10 -2
- package/build/tools/dependency-check.js.map +1 -1
- package/build/tools/estimate-savings.d.ts +18 -0
- package/build/tools/estimate-savings.js +64 -17
- package/build/tools/estimate-savings.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,45 +1,65 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Two-tier SIEM dependency scan for a ladder plan.
|
|
3
3
|
*
|
|
4
4
|
* The persona reviews' top blocker was "the plan says WHAT, never what it
|
|
5
|
-
* TOUCHES"
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* into one summary the verdict block can carry.
|
|
5
|
+
* TOUCHES". A naive literal scan is half theater: real monitors reference
|
|
6
|
+
* SLICES (service:payment status:error), not message templates, so literal
|
|
7
|
+
* absence is not safety — and slice overlap is too broad to exclude on
|
|
8
|
+
* (every payment monitor overlaps every payment type). Hence two tiers:
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
10
|
+
* TIER 1 — LITERAL: an object's query/title contains the type's distinctive
|
|
11
|
+
* tokens. High precision. These types are EXCLUDED from the plan by default
|
|
12
|
+
* (pinned at pass, plan re-solved) unless the user trades them back in.
|
|
13
|
+
*
|
|
14
|
+
* TIER 2 — SLICE: objects whose text mentions a planned service at all.
|
|
15
|
+
* High recall, deliberately broad. A DISCLOSURE, never an exclusion —
|
|
16
|
+
* rendered with the destination's platform truth (Flex data and real-time
|
|
17
|
+
* monitors, the IA class and metric filters, offload and every query).
|
|
18
|
+
*
|
|
19
|
+
* The vendor inventory is fetched ONCE (lib/siem/deps fetchVendorInventory)
|
|
20
|
+
* and matched locally, so a 200-type plan costs the same API calls as one.
|
|
21
|
+
* Scan-depth honesty rides on the summary: what was scanned is stated, and
|
|
22
|
+
* "no literal references found in what was scanned" is the strongest claim
|
|
23
|
+
* the data supports — never "safe".
|
|
20
24
|
*/
|
|
21
|
-
import type { Plan } from './plan-solver.js';
|
|
25
|
+
import type { Plan, PlannedRow, SolverPattern, SolveOpts } from './plan-solver.js';
|
|
22
26
|
import type { SiemId } from './siem/pricing.js';
|
|
23
|
-
import {
|
|
27
|
+
import { fetchVendorInventory as realFetchVendorInventory, type VendorInventory } from './siem/deps/index.js';
|
|
24
28
|
export interface PlanRowDependencies {
|
|
25
29
|
hash: string;
|
|
26
30
|
name: string;
|
|
27
31
|
displayName: string;
|
|
28
32
|
refs: number;
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
/** Names of the referencing objects (monitors/searches/dashboards), capped at 5. */
|
|
34
|
+
names: string[];
|
|
35
|
+
/** Savings this row carried in the ORIGINAL solve — what excluding it forgoes. */
|
|
36
|
+
forgoneUsd: number;
|
|
37
|
+
}
|
|
38
|
+
export interface SliceDependency {
|
|
39
|
+
service: string;
|
|
40
|
+
objects: number;
|
|
41
|
+
/** Referencing-object names, capped at 5. */
|
|
31
42
|
names: string[];
|
|
32
43
|
}
|
|
33
44
|
export interface PlanDependencySummary {
|
|
34
45
|
/** True when a scan actually ran (credentials present, vendor supported). */
|
|
35
46
|
checked: boolean;
|
|
36
47
|
vendor?: SiemId;
|
|
37
|
-
/**
|
|
48
|
+
/** What the scan could actually see, e.g. "monitor queries and dashboard
|
|
49
|
+
* titles/descriptions". The honesty line: absence of literal hits means
|
|
50
|
+
* "none found in THIS", never "safe". */
|
|
51
|
+
scan_depth?: string;
|
|
52
|
+
/** How many planned rows were matched (all of them — batch inventory). */
|
|
38
53
|
scanned_rows: number;
|
|
39
|
-
/**
|
|
40
|
-
|
|
54
|
+
/** TIER 1: planned types literally referenced by name/query text. */
|
|
55
|
+
literal: PlanRowDependencies[];
|
|
56
|
+
/** TIER 1 outcome: types excluded from the final plan (pinned at pass). */
|
|
57
|
+
excluded: PlanRowDependencies[];
|
|
58
|
+
/** TIER 2: objects that mention a planned service at all — disclosure only. */
|
|
59
|
+
slice: SliceDependency[];
|
|
60
|
+
/** Destination truth for the levers in play, stated once. */
|
|
61
|
+
platform_truth?: string;
|
|
41
62
|
total_refs: number;
|
|
42
|
-
rows: PlanRowDependencies[];
|
|
43
63
|
/** One human-readable line: what ran, or why nothing did. Render-safe. */
|
|
44
64
|
note: string;
|
|
45
65
|
}
|
|
@@ -50,15 +70,27 @@ export declare function depCredsPresent(vendor: SiemId): {
|
|
|
50
70
|
present: boolean;
|
|
51
71
|
missing: string;
|
|
52
72
|
};
|
|
53
|
-
type
|
|
73
|
+
type InventoryFetcher = typeof realFetchVendorInventory;
|
|
54
74
|
/** Test seam, same pattern as _setBackendLoader / _setVerifyRunner. */
|
|
55
|
-
export declare function
|
|
56
|
-
export declare function
|
|
75
|
+
export declare function _setInventoryFetcher(fn: InventoryFetcher): void;
|
|
76
|
+
export declare function _resetInventoryFetcher(): void;
|
|
77
|
+
/** Destination truth for the levers a plan actually uses. */
|
|
78
|
+
export declare function platformTruth(plan: Plan): string | undefined;
|
|
79
|
+
/** TIER 2: which inventory objects mention each planned service at all. */
|
|
80
|
+
export declare function sliceScan(inv: VendorInventory, services: string[]): SliceDependency[];
|
|
57
81
|
export interface CheckPlanDepsOptions {
|
|
58
|
-
/**
|
|
59
|
-
limit?: number;
|
|
60
|
-
/** Overall wall-clock budget for the whole scan. Default 15000ms. */
|
|
82
|
+
/** Overall wall-clock budget for the inventory fetch. Default 20000ms. */
|
|
61
83
|
timeoutMs?: number;
|
|
62
84
|
}
|
|
63
85
|
export declare function checkPlanDependencies(plan: Plan, opts?: CheckPlanDepsOptions): Promise<PlanDependencySummary>;
|
|
64
|
-
|
|
86
|
+
/**
|
|
87
|
+
* TIER 1 outcome: pin the literally-referenced types at pass and re-solve.
|
|
88
|
+
* Pure given the summary — the caller passes the same patterns/opts it solved
|
|
89
|
+
* with. Returns the re-solved plan and the exclusion record for the render;
|
|
90
|
+
* the excluded rows carry the savings the exclusion forgoes.
|
|
91
|
+
*/
|
|
92
|
+
export declare function applyReferencedExclusion(patterns: SolverPattern[], solveOpts: SolveOpts, summary: PlanDependencySummary): {
|
|
93
|
+
plan: Plan;
|
|
94
|
+
excluded: PlanRowDependencies[];
|
|
95
|
+
};
|
|
96
|
+
export type { PlannedRow };
|
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Two-tier SIEM dependency scan for a ladder plan.
|
|
3
3
|
*
|
|
4
4
|
* The persona reviews' top blocker was "the plan says WHAT, never what it
|
|
5
|
-
* TOUCHES"
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* into one summary the verdict block can carry.
|
|
5
|
+
* TOUCHES". A naive literal scan is half theater: real monitors reference
|
|
6
|
+
* SLICES (service:payment status:error), not message templates, so literal
|
|
7
|
+
* absence is not safety — and slice overlap is too broad to exclude on
|
|
8
|
+
* (every payment monitor overlaps every payment type). Hence two tiers:
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
10
|
+
* TIER 1 — LITERAL: an object's query/title contains the type's distinctive
|
|
11
|
+
* tokens. High precision. These types are EXCLUDED from the plan by default
|
|
12
|
+
* (pinned at pass, plan re-solved) unless the user trades them back in.
|
|
13
|
+
*
|
|
14
|
+
* TIER 2 — SLICE: objects whose text mentions a planned service at all.
|
|
15
|
+
* High recall, deliberately broad. A DISCLOSURE, never an exclusion —
|
|
16
|
+
* rendered with the destination's platform truth (Flex data and real-time
|
|
17
|
+
* monitors, the IA class and metric filters, offload and every query).
|
|
18
|
+
*
|
|
19
|
+
* The vendor inventory is fetched ONCE (lib/siem/deps fetchVendorInventory)
|
|
20
|
+
* and matched locally, so a 200-type plan costs the same API calls as one.
|
|
21
|
+
* Scan-depth honesty rides on the summary: what was scanned is stated, and
|
|
22
|
+
* "no literal references found in what was scanned" is the strongest claim
|
|
23
|
+
* the data supports — never "safe".
|
|
20
24
|
*/
|
|
21
25
|
import { existsSync } from 'node:fs';
|
|
22
26
|
import { join } from 'node:path';
|
|
23
|
-
import {
|
|
27
|
+
import { solvePlan } from './plan-solver.js';
|
|
28
|
+
import { fetchVendorInventory as realFetchVendorInventory, matchObject, DEP_CHECK_VENDORS, } from './siem/deps/index.js';
|
|
24
29
|
/** Map a plan destination onto the dep-check vendor that can scan it. */
|
|
25
30
|
export function depVendorForDestination(destination) {
|
|
26
31
|
const d = String(destination);
|
|
@@ -67,23 +72,66 @@ export function depCredsPresent(vendor) {
|
|
|
67
72
|
return { present: false, missing: 'unsupported vendor' };
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
|
-
let
|
|
75
|
+
let inventoryFetcher = realFetchVendorInventory;
|
|
71
76
|
/** Test seam, same pattern as _setBackendLoader / _setVerifyRunner. */
|
|
72
|
-
export function
|
|
73
|
-
|
|
77
|
+
export function _setInventoryFetcher(fn) {
|
|
78
|
+
inventoryFetcher = fn;
|
|
79
|
+
}
|
|
80
|
+
export function _resetInventoryFetcher() {
|
|
81
|
+
inventoryFetcher = realFetchVendorInventory;
|
|
82
|
+
}
|
|
83
|
+
/** Destination truth for the levers a plan actually uses. */
|
|
84
|
+
export function platformTruth(plan) {
|
|
85
|
+
const actions = new Set(plan.planned.map((r) => r.action));
|
|
86
|
+
const parts = [];
|
|
87
|
+
if (actions.has('tier_down')) {
|
|
88
|
+
if (plan.destination === 'datadog') {
|
|
89
|
+
parts.push('Flex-tier events do not feed real-time log monitors; monitors on these services evaluate on less data once types move');
|
|
90
|
+
}
|
|
91
|
+
else if (plan.destination === 'cloudwatch') {
|
|
92
|
+
parts.push('the Infrequent Access class does not support metric filters or subscription filters; filters on these services stop seeing moved types');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (actions.has('offload')) {
|
|
96
|
+
parts.push('offloaded types leave the destination entirely; every query, dashboard, and alert on these services sees fewer events (recoverable through the retriever)');
|
|
97
|
+
}
|
|
98
|
+
if (actions.has('drop') || actions.has('sample')) {
|
|
99
|
+
parts.push('dropped or sampled types are gone from the destination; nothing downstream sees them');
|
|
100
|
+
}
|
|
101
|
+
return parts.length > 0 ? parts.join('. ') + '.' : undefined;
|
|
74
102
|
}
|
|
75
|
-
|
|
76
|
-
|
|
103
|
+
function objectAllText(o) {
|
|
104
|
+
return [...o.texts.name, ...o.texts.query, ...o.texts.definition].join('\n');
|
|
105
|
+
}
|
|
106
|
+
const GENERIC_SERVICE_NAMES = new Set(['api', 'app', 'web', 'www', 'all', 'main', 'core', 'base', 'test']);
|
|
107
|
+
/** TIER 2: which inventory objects mention each planned service at all. */
|
|
108
|
+
export function sliceScan(inv, services) {
|
|
109
|
+
const out = [];
|
|
110
|
+
for (const svc of services) {
|
|
111
|
+
const name = svc.trim();
|
|
112
|
+
if (name.length < 3)
|
|
113
|
+
continue;
|
|
114
|
+
if (name === '(unattributed)')
|
|
115
|
+
continue;
|
|
116
|
+
if (GENERIC_SERVICE_NAMES.has(name.toLowerCase()))
|
|
117
|
+
continue;
|
|
118
|
+
const re = new RegExp(`(^|[^a-z0-9])${name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}([^a-z0-9]|$)`, 'i');
|
|
119
|
+
const hits = inv.objects.filter((o) => re.test(objectAllText(o)));
|
|
120
|
+
if (hits.length === 0)
|
|
121
|
+
continue;
|
|
122
|
+
out.push({ service: name, objects: hits.length, names: hits.slice(0, 5).map((h) => h.name) });
|
|
123
|
+
}
|
|
124
|
+
return out;
|
|
77
125
|
}
|
|
78
126
|
export async function checkPlanDependencies(plan, opts = {}) {
|
|
79
|
-
const
|
|
80
|
-
const timeoutMs = opts.timeoutMs ?? 15_000;
|
|
127
|
+
const timeoutMs = opts.timeoutMs ?? 20_000;
|
|
81
128
|
const none = (note) => ({
|
|
82
129
|
checked: false,
|
|
83
130
|
scanned_rows: 0,
|
|
84
|
-
|
|
131
|
+
literal: [],
|
|
132
|
+
excluded: [],
|
|
133
|
+
slice: [],
|
|
85
134
|
total_refs: 0,
|
|
86
|
-
rows: [],
|
|
87
135
|
note,
|
|
88
136
|
});
|
|
89
137
|
if (plan.planned.length === 0)
|
|
@@ -96,63 +144,76 @@ export async function checkPlanDependencies(plan, opts = {}) {
|
|
|
96
144
|
if (!creds.present) {
|
|
97
145
|
return none(`not checked: no ${vendor} credentials in this session (need ${creds.missing}); run log10x_dependency_check after setting them`);
|
|
98
146
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
displayName: r.displayName,
|
|
131
|
-
refs: scan.matches.length,
|
|
132
|
-
by_type: scan.byType,
|
|
133
|
-
names: scan.matches.slice(0, 5).map((m) => m.name),
|
|
134
|
-
});
|
|
135
|
-
}
|
|
147
|
+
let inv;
|
|
148
|
+
try {
|
|
149
|
+
inv = await Promise.race([
|
|
150
|
+
inventoryFetcher(vendor),
|
|
151
|
+
new Promise((_res, rej) => {
|
|
152
|
+
const t = setTimeout(() => rej(new Error('inventory fetch timeout')), timeoutMs);
|
|
153
|
+
t.unref?.();
|
|
154
|
+
}),
|
|
155
|
+
]);
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
return none(`not checked: inventory fetch failed (${e instanceof Error ? e.message : String(e)})`);
|
|
159
|
+
}
|
|
160
|
+
if (inv.error)
|
|
161
|
+
return none(`not checked: ${inv.error}`);
|
|
162
|
+
// TIER 1 — literal, ALL planned rows against the one inventory.
|
|
163
|
+
const literal = [];
|
|
164
|
+
for (const r of plan.planned) {
|
|
165
|
+
const tokens = r.name.split('_').filter((t) => t.length >= 4);
|
|
166
|
+
const effective = tokens.length > 0 ? tokens : [r.name.replace(/_/g, ' ')];
|
|
167
|
+
const hits = inv.objects.filter((o) => matchObject(o, effective).length > 0);
|
|
168
|
+
if (hits.length === 0)
|
|
169
|
+
continue;
|
|
170
|
+
literal.push({
|
|
171
|
+
hash: r.hash,
|
|
172
|
+
name: r.name,
|
|
173
|
+
displayName: r.displayName,
|
|
174
|
+
refs: hits.length,
|
|
175
|
+
names: hits.slice(0, 5).map((h) => h.name),
|
|
176
|
+
forgoneUsd: r.savedUsd,
|
|
177
|
+
});
|
|
136
178
|
}
|
|
137
|
-
|
|
179
|
+
// TIER 2 — slice disclosure over the planned services.
|
|
180
|
+
const services = [...new Set(plan.planned.map((r) => r.dominantService))];
|
|
181
|
+
const slice = sliceScan(inv, services);
|
|
182
|
+
const totalRefs = literal.reduce((s, x) => s + x.refs, 0);
|
|
138
183
|
const noteParts = [
|
|
139
|
-
`
|
|
140
|
-
|
|
141
|
-
? `${
|
|
142
|
-
: '
|
|
184
|
+
`scanned ${inv.scanDepth} (${inv.objects.length} objects) against all ${plan.planned.length} planned message types`,
|
|
185
|
+
literal.length > 0
|
|
186
|
+
? `${literal.length} referenced by name (${totalRefs} object${totalRefs === 1 ? '' : 's'})`
|
|
187
|
+
: 'no literal references found in what was scanned',
|
|
143
188
|
];
|
|
144
|
-
if (
|
|
145
|
-
noteParts.push(
|
|
146
|
-
|
|
147
|
-
noteParts.push(`${plan.planned.length - scanned} more planned types not scanned; run log10x_dependency_check per type for the rest`);
|
|
189
|
+
if (slice.length > 0) {
|
|
190
|
+
noteParts.push(`${slice.reduce((s, x) => s + x.objects, 0)} objects mention the planned services`);
|
|
191
|
+
}
|
|
148
192
|
return {
|
|
149
193
|
checked: true,
|
|
150
194
|
vendor,
|
|
151
|
-
|
|
152
|
-
|
|
195
|
+
scan_depth: inv.scanDepth,
|
|
196
|
+
scanned_rows: plan.planned.length,
|
|
197
|
+
literal,
|
|
198
|
+
excluded: [],
|
|
199
|
+
slice,
|
|
200
|
+
platform_truth: platformTruth(plan),
|
|
153
201
|
total_refs: totalRefs,
|
|
154
|
-
rows,
|
|
155
202
|
note: noteParts.join('; '),
|
|
156
203
|
};
|
|
157
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* TIER 1 outcome: pin the literally-referenced types at pass and re-solve.
|
|
207
|
+
* Pure given the summary — the caller passes the same patterns/opts it solved
|
|
208
|
+
* with. Returns the re-solved plan and the exclusion record for the render;
|
|
209
|
+
* the excluded rows carry the savings the exclusion forgoes.
|
|
210
|
+
*/
|
|
211
|
+
export function applyReferencedExclusion(patterns, solveOpts, summary) {
|
|
212
|
+
const excludedHashes = summary.literal.map((h) => h.hash);
|
|
213
|
+
const plan = solvePlan(patterns, {
|
|
214
|
+
...solveOpts,
|
|
215
|
+
pinnedHashes: [...(solveOpts.pinnedHashes ?? []), ...excludedHashes],
|
|
216
|
+
});
|
|
217
|
+
return { plan, excluded: summary.literal };
|
|
218
|
+
}
|
|
158
219
|
//# sourceMappingURL=plan-dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-dependencies.js","sourceRoot":"","sources":["../../src/lib/plan-dependencies.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plan-dependencies.js","sourceRoot":"","sources":["../../src/lib/plan-dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -96,6 +96,19 @@ export interface SolveOpts {
|
|
|
96
96
|
* is echoed on the plan (rateSource / rateBasis). Absent = list price.
|
|
97
97
|
*/
|
|
98
98
|
customerRatePerGb?: number;
|
|
99
|
+
/**
|
|
100
|
+
* Specific pattern hashes pinned at pass — the referenced-types exclusion:
|
|
101
|
+
* a type a monitor or saved search names stays exactly as it is unless the
|
|
102
|
+
* user explicitly trades it back in. Pinned like protected severities.
|
|
103
|
+
*/
|
|
104
|
+
pinnedHashes?: string[];
|
|
105
|
+
/**
|
|
106
|
+
* Specific pattern hashes the user EXPLICITLY unpinned from the severity
|
|
107
|
+
* floor — a warn-level retry storm they chose to act on. Bypasses ONLY the
|
|
108
|
+
* severity protection for the listed hashes; pinnedHashes and
|
|
109
|
+
* exceptionServices still win. Never inferred, never estate-wide.
|
|
110
|
+
*/
|
|
111
|
+
unprotectPatterns?: string[];
|
|
99
112
|
}
|
|
100
113
|
export interface PlannedRow {
|
|
101
114
|
hash: string;
|
package/build/lib/plan-solver.js
CHANGED
|
@@ -128,8 +128,13 @@ export function solvePlan(rawPatterns, opts) {
|
|
|
128
128
|
const lever = keepEverythingLever(opts.destination, opts.retrieverInstalled);
|
|
129
129
|
// Scope: keep patterns touching a scoped service; weight by scoped bytes.
|
|
130
130
|
const exceptions = new Set((opts.exceptionServices ?? []).map((x) => x.toLowerCase()));
|
|
131
|
+
const pinnedHashes = new Set(opts.pinnedHashes ?? []);
|
|
132
|
+
const unprotect = new Set(opts.unprotectPatterns ?? []);
|
|
131
133
|
const isPinned = (p) => {
|
|
132
|
-
|
|
134
|
+
// Explicit pins win over everything, including an unpin of the same hash.
|
|
135
|
+
if (pinnedHashes.has(p.hash))
|
|
136
|
+
return true;
|
|
137
|
+
if (isProtectedSeverity(p.severity) && !unprotect.has(p.hash))
|
|
133
138
|
return true;
|
|
134
139
|
if (exceptions.size === 0)
|
|
135
140
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-solver.js","sourceRoot":"","sources":["../../src/lib/plan-solver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan-solver.js","sourceRoot":"","sources":["../../src/lib/plan-solver.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,15 @@ export declare class PromUnreachableError extends Error {
|
|
|
76
76
|
constructor(message: string);
|
|
77
77
|
}
|
|
78
78
|
export declare function writeOutputFiles(repoPath: string, decisions: PatternDecision[], verbose: boolean): void;
|
|
79
|
+
/**
|
|
80
|
+
* The thermostat's audit trail: one markdown report per APPLIED tick, written
|
|
81
|
+
* into the config repo so it rides the same commit as the CSVs it describes.
|
|
82
|
+
* "When a scheduled run cuts something on a Tuesday, where do I see what it
|
|
83
|
+
* did" — here, in the artifact the change-control process already reviews.
|
|
84
|
+
* noop ticks write nothing (a daily no-change commit would be churn); they
|
|
85
|
+
* land in the local history file instead.
|
|
86
|
+
*/
|
|
87
|
+
export declare function writeRunReport(repoPath: string, policy: Policy, decisions: PatternDecision[], totalBytes: number, projectedSavingsPct: number, deltaPatterns: number, deltaPp: number): void;
|
|
79
88
|
/**
|
|
80
89
|
* Run one tick of the recurring cost-reduction policy.
|
|
81
90
|
*
|
|
@@ -296,6 +296,56 @@ export function writeOutputFiles(repoPath, decisions, verbose) {
|
|
|
296
296
|
`${muteRows.length} mute rows, ${intentEntries.length} intent entries\n`);
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
|
+
// ─── run report ────────────────────────────────────────────────────────────
|
|
300
|
+
/**
|
|
301
|
+
* The thermostat's audit trail: one markdown report per APPLIED tick, written
|
|
302
|
+
* into the config repo so it rides the same commit as the CSVs it describes.
|
|
303
|
+
* "When a scheduled run cuts something on a Tuesday, where do I see what it
|
|
304
|
+
* did" — here, in the artifact the change-control process already reviews.
|
|
305
|
+
* noop ticks write nothing (a daily no-change commit would be churn); they
|
|
306
|
+
* land in the local history file instead.
|
|
307
|
+
*/
|
|
308
|
+
export function writeRunReport(repoPath, policy, decisions, totalBytes, projectedSavingsPct, deltaPatterns, deltaPp) {
|
|
309
|
+
const now = new Date().toISOString();
|
|
310
|
+
const goal = policy.budget_gb_monthly !== undefined
|
|
311
|
+
? `keep ingest under ${policy.budget_gb_monthly} GB/mo (standing line)`
|
|
312
|
+
: `cut ${policy.target_percent}% of lookback volume`;
|
|
313
|
+
const scope = policy.target_services.length > 0 ? policy.target_services.join(', ') : 'all services';
|
|
314
|
+
const acted = decisions.filter((d) => d.action !== 'pass');
|
|
315
|
+
const byAction = new Map();
|
|
316
|
+
for (const d of acted)
|
|
317
|
+
byAction.set(d.action, (byAction.get(d.action) ?? 0) + 1);
|
|
318
|
+
const actionMix = [...byAction.entries()].map(([a, n]) => `${n} ${a}`).join(', ') || 'none';
|
|
319
|
+
const lines = [
|
|
320
|
+
`# Recurring tick — ${now}`,
|
|
321
|
+
``,
|
|
322
|
+
`- **Goal**: ${goal}`,
|
|
323
|
+
`- **Scope**: ${scope} · lookback ${policy.lookback_window}`,
|
|
324
|
+
`- **Observed**: ${fmtBytes(totalBytes)} across ${decisions.length} pattern rows`,
|
|
325
|
+
`- **Acted on**: ${acted.length} rows (${actionMix}) · projected ${projectedSavingsPct.toFixed(1)}% of lookback volume`,
|
|
326
|
+
`- **Delta vs previous applied state**: ${deltaPatterns} pattern change(s), ${deltaPp.toFixed(1)}pp`,
|
|
327
|
+
`- **Severity floor**: every ERROR/CRITICAL row passed untouched`,
|
|
328
|
+
``,
|
|
329
|
+
`## Largest actions`,
|
|
330
|
+
``,
|
|
331
|
+
];
|
|
332
|
+
const top = [...acted].sort((a, b) => b.bytes - a.bytes).slice(0, 10);
|
|
333
|
+
if (top.length === 0) {
|
|
334
|
+
lines.push('(none — every row passed)');
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
for (const d of top) {
|
|
338
|
+
lines.push(`1. \`${d.pattern_hash}\` · ${d.service || '(no service)'} · ${d.severity || '(no severity)'} — ` +
|
|
339
|
+
`${fmtBytes(d.bytes)} (${d.share_pct.toFixed(1)}%) → **${d.action}** (${d.reason})`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
lines.push('', `Rollback: revert this commit; the engine re-reads policy on its refresh cycle, the same path an apply takes.`, '');
|
|
343
|
+
const reportsDir = pathJoin(repoPath, 'reports');
|
|
344
|
+
mkdirSync(reportsDir, { recursive: true });
|
|
345
|
+
const stamp = now.slice(0, 19).replace(/[:T]/g, '-');
|
|
346
|
+
writeFileSync(pathJoin(reportsDir, `tick-${stamp}.md`), lines.join('\n'));
|
|
347
|
+
writeFileSync(pathJoin(reportsDir, 'latest.md'), lines.join('\n'));
|
|
348
|
+
}
|
|
299
349
|
// ─── git commit ────────────────────────────────────────────────────────────
|
|
300
350
|
async function commitToConfigPlane(repoPath, policy, decisions, projectedPct, opts) {
|
|
301
351
|
const strategy = policy.config_plane.commit_strategy ?? 'pr';
|
|
@@ -532,6 +582,7 @@ export async function runTick(policy, opts = {}) {
|
|
|
532
582
|
}
|
|
533
583
|
// Write output files.
|
|
534
584
|
writeOutputFiles(repoPath, decisions, verbose);
|
|
585
|
+
writeRunReport(repoPath, policy, decisions, totalBytes, projectedSavingsPct, deltaPatterns, deltaPp);
|
|
535
586
|
// Commit to the config plane — git for a repo plane, object puts for S3.
|
|
536
587
|
try {
|
|
537
588
|
if (isS3ConfigPlane(policy.config_plane.repo)) {
|