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.
Files changed (35) hide show
  1. package/build/lib/plan-dependencies.d.ts +62 -30
  2. package/build/lib/plan-dependencies.js +135 -74
  3. package/build/lib/plan-dependencies.js.map +1 -1
  4. package/build/lib/plan-solver.d.ts +13 -0
  5. package/build/lib/plan-solver.js +6 -1
  6. package/build/lib/plan-solver.js.map +1 -1
  7. package/build/lib/recurring-tick.d.ts +9 -0
  8. package/build/lib/recurring-tick.js +51 -0
  9. package/build/lib/recurring-tick.js.map +1 -1
  10. package/build/lib/server-instructions.js +39 -13
  11. package/build/lib/server-instructions.js.map +1 -1
  12. package/build/lib/siem/deps/cloudwatch.d.ts +2 -1
  13. package/build/lib/siem/deps/cloudwatch.js +28 -38
  14. package/build/lib/siem/deps/cloudwatch.js.map +1 -1
  15. package/build/lib/siem/deps/datadog.d.ts +2 -1
  16. package/build/lib/siem/deps/datadog.js +27 -34
  17. package/build/lib/siem/deps/datadog.js.map +1 -1
  18. package/build/lib/siem/deps/elasticsearch.d.ts +2 -1
  19. package/build/lib/siem/deps/elasticsearch.js +33 -51
  20. package/build/lib/siem/deps/elasticsearch.js.map +1 -1
  21. package/build/lib/siem/deps/index.d.ts +4 -1
  22. package/build/lib/siem/deps/index.js +29 -5
  23. package/build/lib/siem/deps/index.js.map +1 -1
  24. package/build/lib/siem/deps/splunk.d.ts +2 -1
  25. package/build/lib/siem/deps/splunk.js +28 -36
  26. package/build/lib/siem/deps/splunk.js.map +1 -1
  27. package/build/lib/siem/deps/types.d.ts +32 -0
  28. package/build/lib/siem/deps/types.js +36 -0
  29. package/build/lib/siem/deps/types.js.map +1 -1
  30. package/build/tools/dependency-check.js +10 -2
  31. package/build/tools/dependency-check.js.map +1 -1
  32. package/build/tools/estimate-savings.d.ts +18 -0
  33. package/build/tools/estimate-savings.js +64 -17
  34. package/build/tools/estimate-savings.js.map +1 -1
  35. package/package.json +1 -1
@@ -1,45 +1,65 @@
1
1
  /**
2
- * Batch SIEM dependency scan for a ladder plan.
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" — nobody applies a routing change without knowing which dashboards,
6
- * alerts, and saved searches read the moved message types. The per-pattern
7
- * scanner already exists (lib/siem/deps, read-only API calls); this module
8
- * batches it over the rows a plan will actually render and folds the result
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
- * Scope, deliberately v1:
12
- * - Scans the TOP rows only (default 7 — the cards plus a margin). Each
13
- * vendor call refetches the object inventory, so a full-estate scan (100+
14
- * rows) belongs to a batched-inventory refactor of lib/siem/deps, not here.
15
- * - Credential preflight is instant: env vars, plus ~/.aws/credentials for
16
- * CloudWatch. An EC2 instance role is not detected — the note says so
17
- * rather than letting the SDK's IMDS probe stall a plan render.
18
- * - An overall deadline caps the scan; rows not reached are reported, never
19
- * silently skipped.
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 { checkDeps as realCheckDeps, type DepCheckResult } from './siem/deps/index.js';
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
- by_type: DepCheckResult['byType'];
30
- /** Names of the matched objects (dashboards/alerts/...), capped at 5. */
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
- /** How many of the plan's top rows were scanned. */
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
- /** Rows (of the scanned set) with at least one referencing object. */
40
- rows_with_refs: number;
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 DepsChecker = typeof realCheckDeps;
73
+ type InventoryFetcher = typeof realFetchVendorInventory;
54
74
  /** Test seam, same pattern as _setBackendLoader / _setVerifyRunner. */
55
- export declare function _setDepsChecker(fn: DepsChecker): void;
56
- export declare function _resetDepsChecker(): void;
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
- /** Top planned rows to scan. Default 7. */
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
- export {};
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
- * Batch SIEM dependency scan for a ladder plan.
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" — nobody applies a routing change without knowing which dashboards,
6
- * alerts, and saved searches read the moved message types. The per-pattern
7
- * scanner already exists (lib/siem/deps, read-only API calls); this module
8
- * batches it over the rows a plan will actually render and folds the result
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
- * Scope, deliberately v1:
12
- * - Scans the TOP rows only (default 7 — the cards plus a margin). Each
13
- * vendor call refetches the object inventory, so a full-estate scan (100+
14
- * rows) belongs to a batched-inventory refactor of lib/siem/deps, not here.
15
- * - Credential preflight is instant: env vars, plus ~/.aws/credentials for
16
- * CloudWatch. An EC2 instance role is not detected — the note says so
17
- * rather than letting the SDK's IMDS probe stall a plan render.
18
- * - An overall deadline caps the scan; rows not reached are reported, never
19
- * silently skipped.
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 { checkDeps as realCheckDeps, DEP_CHECK_VENDORS, } from './siem/deps/index.js';
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 depsChecker = realCheckDeps;
75
+ let inventoryFetcher = realFetchVendorInventory;
71
76
  /** Test seam, same pattern as _setBackendLoader / _setVerifyRunner. */
72
- export function _setDepsChecker(fn) {
73
- depsChecker = fn;
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
- export function _resetDepsChecker() {
76
- depsChecker = realCheckDeps;
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 limit = opts.limit ?? 7;
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
- rows_with_refs: 0,
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
- const targets = plan.planned.slice(0, limit);
100
- const deadline = Date.now() + timeoutMs;
101
- const rows = [];
102
- let scanned = 0;
103
- let timedOut = false;
104
- for (const r of targets) {
105
- if (Date.now() >= deadline) {
106
- timedOut = true;
107
- break;
108
- }
109
- const tokens = r.name.split('_').filter((t) => t.length > 0);
110
- let scan;
111
- try {
112
- scan = await Promise.race([
113
- depsChecker(vendor, { pattern: r.name, tokens }),
114
- new Promise((_res, rej) => setTimeout(() => rej(new Error('row scan timeout')), Math.max(1000, deadline - Date.now())).unref?.()),
115
- ]);
116
- }
117
- catch {
118
- timedOut = true;
119
- break;
120
- }
121
- if (scan.error) {
122
- // Same error would repeat for every row (auth/endpoint) — stop, report.
123
- return none(`not checked: ${scan.error}`);
124
- }
125
- scanned += 1;
126
- if (scan.matches.length > 0) {
127
- rows.push({
128
- hash: r.hash,
129
- name: r.name,
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
- const totalRefs = rows.reduce((s, x) => s + x.refs, 0);
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
- `checked ${vendor} dashboards and alerts for the top ${scanned} planned message type${scanned === 1 ? '' : 's'}`,
140
- rows.length > 0
141
- ? `${rows.length} referenced by ${totalRefs} object${totalRefs === 1 ? '' : 's'}`
142
- : 'none referenced',
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 (timedOut)
145
- noteParts.push(`scan budget hit before the rest; run log10x_dependency_check for deeper coverage`);
146
- else if (plan.planned.length > scanned)
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
- scanned_rows: scanned,
152
- rows_with_refs: rows.length,
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":"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"}
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;
@@ -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
- if (isProtectedSeverity(p.severity))
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)) {