@dzhechkov/harness-core 0.8.2 → 0.8.6
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/.dz-manifest.json +146 -58
- package/README.md +72 -2
- package/dist/cmd-usage.d.ts +148 -0
- package/dist/cmd-usage.d.ts.map +1 -0
- package/dist/cmd-usage.js +548 -0
- package/dist/cmd-usage.js.map +1 -0
- package/dist/compounding.d.ts +4 -0
- package/dist/compounding.d.ts.map +1 -1
- package/dist/compounding.js +6 -0
- package/dist/compounding.js.map +1 -1
- package/dist/contract-checklist.d.ts +123 -0
- package/dist/contract-checklist.d.ts.map +1 -0
- package/dist/contract-checklist.js +700 -0
- package/dist/contract-checklist.js.map +1 -0
- package/dist/feature-adr-checkpoints.d.ts +11 -2
- package/dist/feature-adr-checkpoints.d.ts.map +1 -1
- package/dist/feature-adr-checkpoints.js +37 -2
- package/dist/feature-adr-checkpoints.js.map +1 -1
- package/dist/feature-adr-routing.d.ts +58 -23
- package/dist/feature-adr-routing.d.ts.map +1 -1
- package/dist/feature-adr-routing.js +208 -59
- package/dist/feature-adr-routing.js.map +1 -1
- package/dist/guard.d.ts +25 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +59 -1
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/loop-blobs.generated.js +8 -8
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/loop-plan.d.ts +13 -1
- package/dist/loop-plan.d.ts.map +1 -1
- package/dist/loop-plan.js +15 -1
- package/dist/loop-plan.js.map +1 -1
- package/dist/loop-render.d.ts.map +1 -1
- package/dist/loop-render.js +51 -6
- package/dist/loop-render.js.map +1 -1
- package/dist/loop-trace.d.ts +20 -1
- package/dist/loop-trace.d.ts.map +1 -1
- package/dist/loop-trace.js +83 -1
- package/dist/loop-trace.js.map +1 -1
- package/dist/model-recommender.d.ts +8 -0
- package/dist/model-recommender.d.ts.map +1 -1
- package/dist/model-recommender.js +31 -4
- package/dist/model-recommender.js.map +1 -1
- package/dist/qe-bridge.d.ts.map +1 -1
- package/dist/qe-bridge.js +9 -0
- package/dist/qe-bridge.js.map +1 -1
- package/dist/restart-advisor.d.ts +103 -0
- package/dist/restart-advisor.d.ts.map +1 -0
- package/dist/restart-advisor.js +445 -0
- package/dist/restart-advisor.js.map +1 -0
- package/dist/slop-lint.d.ts +128 -0
- package/dist/slop-lint.d.ts.map +1 -0
- package/dist/slop-lint.js +607 -0
- package/dist/slop-lint.js.map +1 -0
- package/dist/workflow-run.d.ts.map +1 -1
- package/dist/workflow-run.js +18 -12
- package/dist/workflow-run.js.map +1 -1
- package/package.json +19 -15
- package/sbom.json +277 -57
- package/src/cmd-usage.ts +720 -0
- package/src/compounding.ts +13 -0
- package/src/contract-checklist.ts +973 -0
- package/src/deadwood-allowlist.json +80 -0
- package/src/feature-adr-checkpoints.ts +38 -2
- package/src/feature-adr-routing.ts +238 -55
- package/src/guard.ts +79 -1
- package/src/index.ts +81 -1
- package/src/loop-blobs.generated.ts +8 -8
- package/src/loop-plan.ts +36 -3
- package/src/loop-render.ts +50 -6
- package/src/loop-trace.ts +91 -2
- package/src/model-recommender.ts +35 -4
- package/src/qe-bridge.ts +9 -0
- package/src/restart-advisor.ts +579 -0
- package/src/slop-lint.ts +762 -0
- package/src/slop-markers.json +71 -0
- package/src/workflow-run.ts +18 -11
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command-invocation accounting for `dz deadwood`.
|
|
3
|
+
*
|
|
4
|
+
* The write leg is a single best-effort append. The report leg is pure: callers
|
|
5
|
+
* inject log text, inventory, an allowlist, and a clock. A usage report is
|
|
6
|
+
* advisory only and never mutates the harness surface it describes.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
export declare const CMD_USAGE_LOG_RELATIVE = ".dz/cmd-usage.jsonl";
|
|
11
|
+
export declare const CMD_USAGE_LOG_MAX_BYTES = 1048576;
|
|
12
|
+
export declare const CMD_USAGE_COMPACT_TARGET_BYTES: number;
|
|
13
|
+
export declare const CMD_USAGE_SCHEMA = 1;
|
|
14
|
+
export declare const CMD_USAGE_V1_EPOCH_MS: number;
|
|
15
|
+
export declare const DEADWOOD_FUTURE_TOLERANCE_MS = 86400000;
|
|
16
|
+
export declare const DEADWOOD_MIN_OBSERVED_DAYS = 28;
|
|
17
|
+
export declare const DEADWOOD_MIN_RECORDS = 100;
|
|
18
|
+
export type DeadwoodSurfaceKind = 'command' | 'skill' | 'rule';
|
|
19
|
+
export interface CmdUsageInvocationRecord {
|
|
20
|
+
readonly kind: 'cmd';
|
|
21
|
+
readonly cmd: string;
|
|
22
|
+
readonly ts: string;
|
|
23
|
+
readonly v: 1;
|
|
24
|
+
}
|
|
25
|
+
export interface CmdUsageAggregateRecord {
|
|
26
|
+
readonly kind: 'agg';
|
|
27
|
+
readonly cmd: string;
|
|
28
|
+
readonly runs: number;
|
|
29
|
+
readonly firstAt: string;
|
|
30
|
+
readonly lastAt: string;
|
|
31
|
+
readonly v: 1;
|
|
32
|
+
}
|
|
33
|
+
export type CmdUsageRecord = CmdUsageInvocationRecord | CmdUsageAggregateRecord;
|
|
34
|
+
export interface ParsedCmdUsage {
|
|
35
|
+
readonly records: readonly CmdUsageRecord[];
|
|
36
|
+
readonly skipped: number;
|
|
37
|
+
readonly outOfRange: number;
|
|
38
|
+
}
|
|
39
|
+
export interface CmdUsageStat {
|
|
40
|
+
readonly cmd: string;
|
|
41
|
+
readonly runs: number;
|
|
42
|
+
readonly runsInWindow: number;
|
|
43
|
+
readonly firstAt: string;
|
|
44
|
+
readonly lastAt: string;
|
|
45
|
+
}
|
|
46
|
+
export interface DeadwoodAllowlistEntry {
|
|
47
|
+
readonly surface: string;
|
|
48
|
+
readonly kind: DeadwoodSurfaceKind;
|
|
49
|
+
readonly reason: string;
|
|
50
|
+
}
|
|
51
|
+
export interface DeadwoodInventoryItem {
|
|
52
|
+
readonly surface: string;
|
|
53
|
+
readonly kind: DeadwoodSurfaceKind;
|
|
54
|
+
/** Alternate typed command tokens folded into this canonical command candidate. */
|
|
55
|
+
readonly aliases?: readonly string[];
|
|
56
|
+
}
|
|
57
|
+
export type DeadwoodVerdict = 'insufficient-data' | 'ready';
|
|
58
|
+
export interface DeadwoodUsedSurface {
|
|
59
|
+
readonly state: 'used';
|
|
60
|
+
readonly surface: string;
|
|
61
|
+
readonly kind: Exclude<DeadwoodSurfaceKind, 'skill'>;
|
|
62
|
+
readonly runs: number;
|
|
63
|
+
readonly runsInWindow: number;
|
|
64
|
+
readonly firstAt: string;
|
|
65
|
+
readonly lastAt: string;
|
|
66
|
+
}
|
|
67
|
+
export interface DeadwoodCandidate {
|
|
68
|
+
readonly state: 'zero-usage';
|
|
69
|
+
readonly surface: string;
|
|
70
|
+
readonly kind: Exclude<DeadwoodSurfaceKind, 'skill'>;
|
|
71
|
+
readonly runs: number;
|
|
72
|
+
readonly runsInWindow: 0;
|
|
73
|
+
readonly firstAt: string | null;
|
|
74
|
+
readonly lastAt: string | null;
|
|
75
|
+
}
|
|
76
|
+
export interface DeadwoodExemptSurface {
|
|
77
|
+
readonly state: 'excluded-safety';
|
|
78
|
+
readonly surface: string;
|
|
79
|
+
readonly kind: Exclude<DeadwoodSurfaceKind, 'skill'>;
|
|
80
|
+
readonly reason: string;
|
|
81
|
+
readonly runs: number;
|
|
82
|
+
readonly runsInWindow: 0;
|
|
83
|
+
readonly firstAt: string | null;
|
|
84
|
+
readonly lastAt: string | null;
|
|
85
|
+
}
|
|
86
|
+
export interface DeadwoodUnjudgedSurface {
|
|
87
|
+
readonly state: 'insufficient-data' | 'no-instrumentation';
|
|
88
|
+
readonly surface: string;
|
|
89
|
+
readonly kind: DeadwoodSurfaceKind;
|
|
90
|
+
readonly reason: string;
|
|
91
|
+
}
|
|
92
|
+
export interface DeadwoodReport {
|
|
93
|
+
readonly verdict: DeadwoodVerdict;
|
|
94
|
+
readonly windowWeeks: number;
|
|
95
|
+
readonly observedDays: number;
|
|
96
|
+
readonly recordCount: number;
|
|
97
|
+
readonly ruleObservedDays: number;
|
|
98
|
+
readonly ruleAuditCount: number;
|
|
99
|
+
readonly candidates: readonly DeadwoodCandidate[];
|
|
100
|
+
readonly exempt: readonly DeadwoodExemptSurface[];
|
|
101
|
+
readonly used: readonly DeadwoodUsedSurface[];
|
|
102
|
+
readonly insufficient: readonly DeadwoodUnjudgedSurface[];
|
|
103
|
+
readonly noInstrumentation: readonly DeadwoodUnjudgedSurface[];
|
|
104
|
+
readonly staleAllowlist: readonly DeadwoodAllowlistEntry[];
|
|
105
|
+
readonly skippedLines: number;
|
|
106
|
+
readonly outOfRange: number;
|
|
107
|
+
}
|
|
108
|
+
export interface DeadwoodInput {
|
|
109
|
+
readonly cmdUsageText: string;
|
|
110
|
+
readonly guardAuditText?: string;
|
|
111
|
+
readonly inventory: readonly DeadwoodInventoryItem[];
|
|
112
|
+
readonly allowlistText: string;
|
|
113
|
+
readonly weeks: number;
|
|
114
|
+
readonly now: Date;
|
|
115
|
+
}
|
|
116
|
+
/** Walk up to the nearest `.dz` directory without ever making telemetry throw. */
|
|
117
|
+
export declare function resolveCmdUsageRoot(startDir: string): string;
|
|
118
|
+
/** One append per parsed command, with no argv/cwd/env payload. Never throws. */
|
|
119
|
+
export declare function recordCommandInvocation(root: string, cmd: string, now?: Date): void;
|
|
120
|
+
/** ADR-compatible name retained for callers/tests written before the plan renamed the seam. */
|
|
121
|
+
export declare const appendCommandUsage: typeof recordCommandInvocation;
|
|
122
|
+
/** Parse independently per line; torn or schema-invalid rows are counted and skipped. */
|
|
123
|
+
export declare function parseCmdUsageLines(text: string, now: Date): ParsedCmdUsage;
|
|
124
|
+
/** Measured corpus span (first accepted event to last), or null when no event can be read. */
|
|
125
|
+
export declare function measureCmdUsageDepthDays(text: string, now: Date): number | null;
|
|
126
|
+
/** A verdict needs both a meaningful sample and history spanning the requested window. */
|
|
127
|
+
export declare function decideDeadwoodWindow(depthDays: number, count: number, weeks: number): {
|
|
128
|
+
ok: boolean;
|
|
129
|
+
reason: string;
|
|
130
|
+
};
|
|
131
|
+
/** Fold raw and compacted rows into the same per-command accounting shape. */
|
|
132
|
+
export declare function foldCmdUsage(records: readonly CmdUsageRecord[], weeks: number, now: Date): Map<string, CmdUsageStat>;
|
|
133
|
+
/** Parse the committed safety allowlist; a reason-less exemption is refused, never skipped. */
|
|
134
|
+
export declare function loadDeadwoodAllowlist(json: string): DeadwoodAllowlistEntry[];
|
|
135
|
+
/** Build the single structure consumed by both the human and JSON renderers. */
|
|
136
|
+
export declare function buildDeadwoodReport(input: DeadwoodInput): DeadwoodReport;
|
|
137
|
+
/** Render one report object as either human text or stable JSON. */
|
|
138
|
+
export declare function renderDeadwoodReport(report: DeadwoodReport, format: 'text' | 'json'): string;
|
|
139
|
+
/**
|
|
140
|
+
* Lazily compact the invocation log on the cold read path.
|
|
141
|
+
*
|
|
142
|
+
* The named lock protects competing compactors. Emitters deliberately stay
|
|
143
|
+
* lock-free; this advisory log accepts a possible racing row rather than making
|
|
144
|
+
* every command wait on a lock. Every error is swallowed so compaction can never
|
|
145
|
+
* turn `dz deadwood` into a gate.
|
|
146
|
+
*/
|
|
147
|
+
export declare function compactCmdUsageIfNeeded(root: string): void;
|
|
148
|
+
//# sourceMappingURL=cmd-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmd-usage.d.ts","sourceRoot":"","sources":["../src/cmd-usage.ts"],"names":[],"mappings":"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"}
|