footprintjs 10.0.0 → 10.0.1
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/dist/esm/lib/builder/FlowChartBuilder.js +26 -8
- package/dist/esm/lib/recorder/qualityTrace.d.ts +4 -1
- package/dist/esm/lib/recorder/qualityTrace.js +14 -6
- package/dist/lib/builder/FlowChartBuilder.js +26 -8
- package/dist/lib/recorder/qualityTrace.js +14 -6
- package/dist/types/lib/recorder/qualityTrace.d.ts +4 -1
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* qualityTrace() — Quality Stack Trace built on causalChain().
|
|
4
4
|
*
|
|
5
|
-
* Thin layer over `
|
|
5
|
+
* Thin layer over `foottrace`'s `causalChain()` that decorates
|
|
6
6
|
* each causal node with quality scores from a QualityRecorder.
|
|
7
7
|
*
|
|
8
8
|
* ```
|
|
@@ -19,6 +19,9 @@ exports.formatQualityTrace = exports.qualityTrace = void 0;
|
|
|
19
19
|
const foottrace_1 = require("foottrace");
|
|
20
20
|
/**
|
|
21
21
|
* Build a quality stack trace by decorating a causal chain with scores.
|
|
22
|
+
* Root cause is the largest positive score drop across a recorded parent→child
|
|
23
|
+
* dependency with known scores. Ties retain the first edge in BFS node / parent
|
|
24
|
+
* order. This score comparison is a diagnostic hint, not proof of why quality fell.
|
|
22
25
|
*
|
|
23
26
|
* @param commitLog From executor.getSnapshot().commitLog
|
|
24
27
|
* @param qualityRecorder QualityRecorder attached during execution
|
|
@@ -48,12 +51,17 @@ function qualityTrace(commitLog, qualityRecorder, startId, maxDepth = 20) {
|
|
|
48
51
|
depth: node.depth,
|
|
49
52
|
};
|
|
50
53
|
});
|
|
51
|
-
//
|
|
54
|
+
// Depth is display metadata, not ancestry: shared parents can be at the same
|
|
55
|
+
// depth as their child. Foottrace owns the edges; compare those exact links.
|
|
56
|
+
const framesById = new Map(frames.map((frame) => [frame.runtimeStageId, frame]));
|
|
52
57
|
let rootCause;
|
|
53
|
-
for (
|
|
58
|
+
for (const [i, node] of nodes.entries()) {
|
|
54
59
|
const frame = frames[i];
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
if (frame.score < 0)
|
|
61
|
+
continue;
|
|
62
|
+
for (const parent of node.parents) {
|
|
63
|
+
// flattenCausalDAG includes every reachable parent exactly once.
|
|
64
|
+
const parentFrame = framesById.get(parent.runtimeStageId);
|
|
57
65
|
if (parentFrame.score < 0)
|
|
58
66
|
continue;
|
|
59
67
|
const drop = parentFrame.score - frame.score;
|
|
@@ -93,4 +101,4 @@ function formatQualityTrace(trace) {
|
|
|
93
101
|
return lines.join('\n');
|
|
94
102
|
}
|
|
95
103
|
exports.formatQualityTrace = formatQualityTrace;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eVRyYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFHSCx5Q0FBMEQ7QUErQjFEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixZQUFZLENBQzFCLFNBQXlCLEVBQ3pCLGVBQThCLEVBQzlCLE9BQWUsRUFDZixRQUFRLEdBQUcsRUFBRTtJQUViLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVcsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWpILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVELE9BQU87WUFDTCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxFQUFFO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsNEVBQTRFO0lBQzVFLElBQUksU0FBeUMsQ0FBQztJQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4Qiw0Q0FBNEM7UUFDNUMsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQztnQkFBRSxTQUFTO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBQzVCLE1BQU07UUFDTixTQUFTO0tBQ1YsQ0FBQztBQUNKLENBQUM7QUFwREQsb0NBb0RDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxLQUF3QjtJQUN6RCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sOEJBQThCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQWEsQ0FBQyx5QkFBeUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFFdkcsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakUsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pGLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxRQUFRLEdBQUcsSUFBSSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUNSLGtDQUFrQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUc7WUFDdkUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQXhCRCxnREF3QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHF1YWxpdHlUcmFjZSgpIOKAlCBRdWFsaXR5IFN0YWNrIFRyYWNlIGJ1aWx0IG9uIGNhdXNhbENoYWluKCkuXG4gKlxuICogVGhpbiBsYXllciBvdmVyIGBtZW1vcnkvYmFja3RyYWNrLmNhdXNhbENoYWluKClgIHRoYXQgZGVjb3JhdGVzXG4gKiBlYWNoIGNhdXNhbCBub2RlIHdpdGggcXVhbGl0eSBzY29yZXMgZnJvbSBhIFF1YWxpdHlSZWNvcmRlci5cbiAqXG4gKiBgYGBcbiAqIFF1YWxpdHkgVHJhY2UgKHNjb3JlOiAwLjMgYXQgY2FsbC1sbG0jNSk6XG4gKiAgIGF0IGNhbGwtbGxtIzUgICAgIHNjb3JlPTAuMyAg4oaQIHF1YWxpdHkgZHJvcHBlZCBoZXJlXG4gKiAgIGF0IHN5c3RlbS1wcm9tcHQjMSBzY29yZT0wLjggIOKGkCBzeXN0ZW1Qcm9tcHQgd2FzIGdvb2RcbiAqICAgYXQgc2VlZCMwICAgICAgICAgIHNjb3JlPTEuMCAg4oaQIGlucHV0IHdhcyBjbGVhblxuICpcbiAqIFJvb3QgY2F1c2U6IHF1YWxpdHkgZHJvcHBlZCBhdCBjYWxsLWxsbSM1ICgwLjgg4oaSIDAuMywgzpQwLjUpXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyBjYXVzYWxDaGFpbiwgZmxhdHRlbkNhdXNhbERBRyB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgUXVhbGl0eUVudHJ5IH0gZnJvbSAnLi9RdWFsaXR5UmVjb3JkZXIuanMnO1xuXG4vKiogTWluaW1hbCBwZXItc3RlcCBxdWFsaXR5IGxvb2t1cCDigJQgc2F0aXNmaWVkIGJ5IGBRdWFsaXR5UmVjb3JkZXJgIChzdHJ1Y3R1cmFsLCBkZWNvdXBsZWQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5TG9va3VwIHtcbiAgZ2V0QnlLZXkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFF1YWxpdHlFbnRyeSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgc2luZ2xlIGZyYW1lIGluIHRoZSBxdWFsaXR5IHN0YWNrIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5RnJhbWUge1xuICBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc2NvcmU6IG51bWJlcjtcbiAgZmFjdG9yczogc3RyaW5nW107XG4gIGxpbmtlZEJ5OiBzdHJpbmc7XG4gIGRlcHRoOiBudW1iZXI7XG59XG5cbi8qKiBUaGUgZnVsbCBxdWFsaXR5IHN0YWNrIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5U3RhY2tUcmFjZSB7XG4gIHN0YXJ0SWQ6IHN0cmluZztcbiAgc3RhcnRTY29yZTogbnVtYmVyO1xuICBmcmFtZXM6IFF1YWxpdHlGcmFtZVtdO1xuICByb290Q2F1c2U/OiB7XG4gICAgZnJhbWU6IFF1YWxpdHlGcmFtZTtcbiAgICBwcmV2aW91c0ZyYW1lOiBRdWFsaXR5RnJhbWU7XG4gICAgZHJvcDogbnVtYmVyO1xuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgcXVhbGl0eSBzdGFjayB0cmFjZSBieSBkZWNvcmF0aW5nIGEgY2F1c2FsIGNoYWluIHdpdGggc2NvcmVzLlxuICpcbiAqIEBwYXJhbSBjb21taXRMb2cgICAgICAgIEZyb20gZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5jb21taXRMb2dcbiAqIEBwYXJhbSBxdWFsaXR5UmVjb3JkZXIgIFF1YWxpdHlSZWNvcmRlciBhdHRhY2hlZCBkdXJpbmcgZXhlY3V0aW9uXG4gKiBAcGFyYW0gc3RhcnRJZCAgICAgICAgICBydW50aW1lU3RhZ2VJZCB0byBzdGFydCBmcm9tXG4gKiBAcGFyYW0gbWF4RGVwdGggICAgICAgICBNYXhpbXVtIGJhY2t0cmFja2luZyBkZXB0aCAoZGVmYXVsdDogMjApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWFsaXR5VHJhY2UoXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sXG4gIHF1YWxpdHlSZWNvcmRlcjogUXVhbGl0eUxvb2t1cCxcbiAgc3RhcnRJZDogc3RyaW5nLFxuICBtYXhEZXB0aCA9IDIwLFxuKTogUXVhbGl0eVN0YWNrVHJhY2Uge1xuICBjb25zdCBzdGFydEVudHJ5ID0gcXVhbGl0eVJlY29yZGVyLmdldEJ5S2V5KHN0YXJ0SWQpO1xuICBpZiAoIXN0YXJ0RW50cnkpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiAtMSwgZnJhbWVzOiBbXSB9O1xuICB9XG5cbiAgLy8gVXNlIGNhdXNhbENoYWluIHRvIGJ1aWxkIHRoZSBEQUcsIHByb3ZpZGluZyBrZXlzUmVhZCBmcm9tIHRoZSBRdWFsaXR5UmVjb3JkZXJcbiAgY29uc3Qgcm9vdCA9IGNhdXNhbENoYWluKGNvbW1pdExvZywgc3RhcnRJZCwgKGlkKSA9PiBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkoaWQpPy5rZXlzUmVhZCA/PyBbXSwgeyBtYXhEZXB0aCB9KTtcblxuICBpZiAoIXJvb3QpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLCBmcmFtZXM6IFtdIH07XG4gIH1cblxuICAvLyBGbGF0dGVuIERBRyB0byBCRlMtb3JkZXJlZCBmcmFtZXMsIGRlY29yYXRlIHdpdGggcXVhbGl0eSBzY29yZXNcbiAgY29uc3Qgbm9kZXMgPSBmbGF0dGVuQ2F1c2FsREFHKHJvb3QpO1xuICBjb25zdCBmcmFtZXM6IFF1YWxpdHlGcmFtZVtdID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkobm9kZS5ydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBub2RlLnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3RhZ2VOYW1lOiBub2RlLnN0YWdlTmFtZSxcbiAgICAgIHNjb3JlOiBlbnRyeT8uc2NvcmUgPz8gLTEsXG4gICAgICBmYWN0b3JzOiBlbnRyeT8uZmFjdG9ycyA/PyBbXSxcbiAgICAgIGxpbmtlZEJ5OiBub2RlLmxpbmtlZEJ5LFxuICAgICAgZGVwdGg6IG5vZGUuZGVwdGgsXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRmluZCByb290IGNhdXNlOiBiaWdnZXN0IHF1YWxpdHkgZHJvcCBiZXR3ZWVuIGFkamFjZW50IGZyYW1lcyAoQkZTIG9yZGVyKVxuICBsZXQgcm9vdENhdXNlOiBRdWFsaXR5U3RhY2tUcmFjZVsncm9vdENhdXNlJ107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG4gICAgLy8gTG9vayBhdCBlYWNoIHBhcmVudCAoZnJhbWVzIGF0IGRlcHRoICsgMSlcbiAgICBmb3IgKGNvbnN0IHBhcmVudEZyYW1lIG9mIGZyYW1lcy5maWx0ZXIoKGYpID0+IGYuZGVwdGggPT09IGZyYW1lLmRlcHRoICsgMSkpIHtcbiAgICAgIGlmIChwYXJlbnRGcmFtZS5zY29yZSA8IDApIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZHJvcCA9IHBhcmVudEZyYW1lLnNjb3JlIC0gZnJhbWUuc2NvcmU7XG4gICAgICBpZiAoZHJvcCA+IDAgJiYgKCFyb290Q2F1c2UgfHwgZHJvcCA+IHJvb3RDYXVzZS5kcm9wKSkge1xuICAgICAgICByb290Q2F1c2UgPSB7IGZyYW1lLCBwcmV2aW91c0ZyYW1lOiBwYXJlbnRGcmFtZSwgZHJvcCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRJZCxcbiAgICBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLFxuICAgIGZyYW1lcyxcbiAgICByb290Q2F1c2UsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGEgUXVhbGl0eVN0YWNrVHJhY2UgYXMgaHVtYW4tcmVhZGFibGUgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1YWxpdHlUcmFjZSh0cmFjZTogUXVhbGl0eVN0YWNrVHJhY2UpOiBzdHJpbmcge1xuICBpZiAodHJhY2UuZnJhbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBgUXVhbGl0eSBUcmFjZTogbm8gZGF0YSBmb3IgJHt0cmFjZS5zdGFydElkfWA7XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYFF1YWxpdHkgVHJhY2UgKHNjb3JlOiAke3RyYWNlLnN0YXJ0U2NvcmUudG9GaXhlZCgyKX0gYXQgJHt0cmFjZS5zdGFydElkfSk6YF07XG5cbiAgZm9yIChjb25zdCBmcmFtZSBvZiB0cmFjZS5mcmFtZXMpIHtcbiAgICBjb25zdCBzY29yZVN0ciA9IGZyYW1lLnNjb3JlID49IDAgPyBmcmFtZS5zY29yZS50b0ZpeGVkKDIpIDogJz8nO1xuICAgIGNvbnN0IGxpbmsgPSBmcmFtZS5saW5rZWRCeSA/IGAgKHZpYSAke2ZyYW1lLmxpbmtlZEJ5fSlgIDogJyc7XG4gICAgY29uc3QgZmFjdG9ycyA9IGZyYW1lLmZhY3RvcnMubGVuZ3RoID4gMCA/IGAg4oCUICR7ZnJhbWUuZmFjdG9ycy5qb2luKCcsICcpfWAgOiAnJztcbiAgICBsaW5lcy5wdXNoKGAgIGF0ICR7ZnJhbWUucnVudGltZVN0YWdlSWQucGFkRW5kKDMwKX0gc2NvcmU9JHtzY29yZVN0cn0ke2xpbmt9JHtmYWN0b3JzfWApO1xuICB9XG5cbiAgaWYgKHRyYWNlLnJvb3RDYXVzZSkge1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgUm9vdCBjYXVzZTogcXVhbGl0eSBkcm9wcGVkIGF0ICR7dHJhY2Uucm9vdENhdXNlLmZyYW1lLnJ1bnRpbWVTdGFnZUlkfSBgICtcbiAgICAgICAgYCgke3RyYWNlLnJvb3RDYXVzZS5wcmV2aW91c0ZyYW1lLnNjb3JlLnRvRml4ZWQoMil9IOKGkiAke3RyYWNlLnJvb3RDYXVzZS5mcmFtZS5zY29yZS50b0ZpeGVkKDIpfSwgYCArXG4gICAgICAgIGDOlCR7dHJhY2Uucm9vdENhdXNlLmRyb3AudG9GaXhlZCgyKX0pYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuIl19
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eVRyYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFHSCx5Q0FBMEQ7QUErQjFEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixZQUFZLENBQzFCLFNBQXlCLEVBQ3pCLGVBQThCLEVBQzlCLE9BQWUsRUFDZixRQUFRLEdBQUcsRUFBRTtJQUViLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVcsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWpILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMs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Q0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsUUFBUSxHQUFHLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsS0FBSyxDQUFDLElBQUksQ0FDUixrQ0FBa0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHO1lBQ3ZFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2xHLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUF4QkQsZ0RBd0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBxdWFsaXR5VHJhY2UoKSDigJQgUXVhbGl0eSBTdGFjayBUcmFjZSBidWlsdCBvbiBjYXVzYWxDaGFpbigpLlxuICpcbiAqIFRoaW4gbGF5ZXIgb3ZlciBgZm9vdHRyYWNlYCdzIGBjYXVzYWxDaGFpbigpYCB0aGF0IGRlY29yYXRlc1xuICogZWFjaCBjYXVzYWwgbm9kZSB3aXRoIHF1YWxpdHkgc2NvcmVzIGZyb20gYSBRdWFsaXR5UmVjb3JkZXIuXG4gKlxuICogYGBgXG4gKiBRdWFsaXR5IFRyYWNlIChzY29yZTogMC4zIGF0IGNhbGwtbGxtIzUpOlxuICogICBhdCBjYWxsLWxsbSM1ICAgICBzY29yZT0wLjMgIOKGkCBxdWFsaXR5IGRyb3BwZWQgaGVyZVxuICogICBhdCBzeXN0ZW0tcHJvbXB0IzEgc2NvcmU9MC44ICDihpAgc3lzdGVtUHJvbXB0IHdhcyBnb29kXG4gKiAgIGF0IHNlZWQjMCAgICAgICAgICBzY29yZT0xLjAgIOKGkCBpbnB1dCB3YXMgY2xlYW5cbiAqXG4gKiBSb290IGNhdXNlOiBxdWFsaXR5IGRyb3BwZWQgYXQgY2FsbC1sbG0jNSAoMC44IOKGkiAwLjMsIM6UMC41KVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IFF1YWxpdHlFbnRyeSB9IGZyb20gJy4vUXVhbGl0eVJlY29yZGVyLmpzJztcblxuLyoqIE1pbmltYWwgcGVyLXN0ZXAgcXVhbGl0eSBsb29rdXAg4oCUIHNhdGlzZmllZCBieSBgUXVhbGl0eVJlY29yZGVyYCAoc3RydWN0dXJhbCwgZGVjb3VwbGVkKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eUxvb2t1cCB7XG4gIGdldEJ5S2V5KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBRdWFsaXR5RW50cnkgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBBIHNpbmdsZSBmcmFtZSBpbiB0aGUgcXVhbGl0eSBzdGFjayB0cmFjZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eUZyYW1lIHtcbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHNjb3JlOiBudW1iZXI7XG4gIGZhY3RvcnM6IHN0cmluZ1tdO1xuICBsaW5rZWRCeTogc3RyaW5nO1xuICBkZXB0aDogbnVtYmVyO1xufVxuXG4vKiogVGhlIGZ1bGwgcXVhbGl0eSBzdGFjayB0cmFjZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eVN0YWNrVHJhY2Uge1xuICBzdGFydElkOiBzdHJpbmc7XG4gIHN0YXJ0U2NvcmU6IG51bWJlcjtcbiAgZnJhbWVzOiBRdWFsaXR5RnJhbWVbXTtcbiAgcm9vdENhdXNlPzoge1xuICAgIGZyYW1lOiBRdWFsaXR5RnJhbWU7XG4gICAgcHJldmlvdXNGcmFtZTogUXVhbGl0eUZyYW1lO1xuICAgIGRyb3A6IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHF1YWxpdHkgc3RhY2sgdHJhY2UgYnkgZGVjb3JhdGluZyBhIGNhdXNhbCBjaGFpbiB3aXRoIHNjb3Jlcy5cbiAqIFJvb3QgY2F1c2UgaXMgdGhlIGxhcmdlc3QgcG9zaXRpdmUgc2NvcmUgZHJvcCBhY3Jvc3MgYSByZWNvcmRlZCBwYXJlbnTihpJjaGlsZFxuICogZGVwZW5kZW5jeSB3aXRoIGtub3duIHNjb3Jlcy4gVGllcyByZXRhaW4gdGhlIGZpcnN0IGVkZ2UgaW4gQkZTIG5vZGUgLyBwYXJlbnRcbiAqIG9yZGVyLiBUaGlzIHNjb3JlIGNvbXBhcmlzb24gaXMgYSBkaWFnbm9zdGljIGhpbnQsIG5vdCBwcm9vZiBvZiB3aHkgcXVhbGl0eSBmZWxsLlxuICpcbiAqIEBwYXJhbSBjb21taXRMb2cgICAgICAgIEZyb20gZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5jb21taXRMb2dcbiAqIEBwYXJhbSBxdWFsaXR5UmVjb3JkZXIgIFF1YWxpdHlSZWNvcmRlciBhdHRhY2hlZCBkdXJpbmcgZXhlY3V0aW9uXG4gKiBAcGFyYW0gc3RhcnRJZCAgICAgICAgICBydW50aW1lU3RhZ2VJZCB0byBzdGFydCBmcm9tXG4gKiBAcGFyYW0gbWF4RGVwdGggICAgICAgICBNYXhpbXVtIGJhY2t0cmFja2luZyBkZXB0aCAoZGVmYXVsdDogMjApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWFsaXR5VHJhY2UoXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sXG4gIHF1YWxpdHlSZWNvcmRlcjogUXVhbGl0eUxvb2t1cCxcbiAgc3RhcnRJZDogc3RyaW5nLFxuICBtYXhEZXB0aCA9IDIwLFxuKTogUXVhbGl0eVN0YWNrVHJhY2Uge1xuICBjb25zdCBzdGFydEVudHJ5ID0gcXVhbGl0eVJlY29yZGVyLmdldEJ5S2V5KHN0YXJ0SWQpO1xuICBpZiAoIXN0YXJ0RW50cnkpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiAtMSwgZnJhbWVzOiBbXSB9O1xuICB9XG5cbiAgLy8gVXNlIGNhdXNhbENoYWluIHRvIGJ1aWxkIHRoZSBEQUcsIHByb3ZpZGluZyBrZXlzUmVhZCBmcm9tIHRoZSBRdWFsaXR5UmVjb3JkZXJcbiAgY29uc3Qgcm9vdCA9IGNhdXNhbENoYWluKGNvbW1pdExvZywgc3RhcnRJZCwgKGlkKSA9PiBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkoaWQpPy5rZXlzUmVhZCA/PyBbXSwgeyBtYXhEZXB0aCB9KTtcblxuICBpZiAoIXJvb3QpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLCBmcmFtZXM6IFtdIH07XG4gIH1cblxuICAvLyBGbGF0dGVuIERBRyB0byBCRlMtb3JkZXJlZCBmcmFtZXMsIGRlY29yYXRlIHdpdGggcXVhbGl0eSBzY29yZXNcbiAgY29uc3Qgbm9kZXMgPSBmbGF0dGVuQ2F1c2FsREFHKHJvb3QpO1xuICBjb25zdCBmcmFtZXM6IFF1YWxpdHlGcmFtZVtdID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkobm9kZS5ydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBub2RlLnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3RhZ2VOYW1lOiBub2RlLnN0YWdlTmFtZSxcbiAgICAgIHNjb3JlOiBlbnRyeT8uc2NvcmUgPz8gLTEsXG4gICAgICBmYWN0b3JzOiBlbnRyeT8uZmFjdG9ycyA/PyBbXSxcbiAgICAgIGxpbmtlZEJ5OiBub2RlLmxpbmtlZEJ5LFxuICAgICAgZGVwdGg6IG5vZGUuZGVwdGgsXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVwdGggaXMgZGlzcGxheSBtZXRhZGF0YSwgbm90IGFuY2VzdHJ5OiBzaGFyZWQgcGFyZW50cyBjYW4gYmUgYXQgdGhlIHNhbWVcbiAgLy8gZGVwdGggYXMgdGhlaXIgY2hpbGQuIEZvb3R0cmFjZSBvd25zIHRoZSBlZGdlczsgY29tcGFyZSB0aG9zZSBleGFjdCBsaW5rcy5cbiAgY29uc3QgZnJhbWVzQnlJZCA9IG5ldyBNYXAoZnJhbWVzLm1hcCgoZnJhbWUpID0+IFtmcmFtZS5ydW50aW1lU3RhZ2VJZCwgZnJhbWVdKSk7XG4gIGxldCByb290Q2F1c2U6IFF1YWxpdHlTdGFja1RyYWNlWydyb290Q2F1c2UnXTtcbiAgZm9yIChjb25zdCBbaSwgbm9kZV0gb2Ygbm9kZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG4gICAgaWYgKGZyYW1lLnNjb3JlIDwgMCkgY29udGludWU7XG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2Ygbm9kZS5wYXJlbnRzKSB7XG4gICAgICAvLyBmbGF0dGVuQ2F1c2FsREFHIGluY2x1ZGVzIGV2ZXJ5IHJlYWNoYWJsZSBwYXJlbnQgZXhhY3RseSBvbmNlLlxuICAgICAgY29uc3QgcGFyZW50RnJhbWUgPSBmcmFtZXNCeUlkLmdldChwYXJlbnQucnVudGltZVN0YWdlSWQpITtcbiAgICAgIGlmIChwYXJlbnRGcmFtZS5zY29yZSA8IDApIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZHJvcCA9IHBhcmVudEZyYW1lLnNjb3JlIC0gZnJhbWUuc2NvcmU7XG4gICAgICBpZiAoZHJvcCA+IDAgJiYgKCFyb290Q2F1c2UgfHwgZHJvcCA+IHJvb3RDYXVzZS5kcm9wKSkge1xuICAgICAgICByb290Q2F1c2UgPSB7IGZyYW1lLCBwcmV2aW91c0ZyYW1lOiBwYXJlbnRGcmFtZSwgZHJvcCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRJZCxcbiAgICBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLFxuICAgIGZyYW1lcyxcbiAgICByb290Q2F1c2UsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGEgUXVhbGl0eVN0YWNrVHJhY2UgYXMgaHVtYW4tcmVhZGFibGUgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1YWxpdHlUcmFjZSh0cmFjZTogUXVhbGl0eVN0YWNrVHJhY2UpOiBzdHJpbmcge1xuICBpZiAodHJhY2UuZnJhbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBgUXVhbGl0eSBUcmFjZTogbm8gZGF0YSBmb3IgJHt0cmFjZS5zdGFydElkfWA7XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYFF1YWxpdHkgVHJhY2UgKHNjb3JlOiAke3RyYWNlLnN0YXJ0U2NvcmUudG9GaXhlZCgyKX0gYXQgJHt0cmFjZS5zdGFydElkfSk6YF07XG5cbiAgZm9yIChjb25zdCBmcmFtZSBvZiB0cmFjZS5mcmFtZXMpIHtcbiAgICBjb25zdCBzY29yZVN0ciA9IGZyYW1lLnNjb3JlID49IDAgPyBmcmFtZS5zY29yZS50b0ZpeGVkKDIpIDogJz8nO1xuICAgIGNvbnN0IGxpbmsgPSBmcmFtZS5saW5rZWRCeSA/IGAgKHZpYSAke2ZyYW1lLmxpbmtlZEJ5fSlgIDogJyc7XG4gICAgY29uc3QgZmFjdG9ycyA9IGZyYW1lLmZhY3RvcnMubGVuZ3RoID4gMCA/IGAg4oCUICR7ZnJhbWUuZmFjdG9ycy5qb2luKCcsICcpfWAgOiAnJztcbiAgICBsaW5lcy5wdXNoKGAgIGF0ICR7ZnJhbWUucnVudGltZVN0YWdlSWQucGFkRW5kKDMwKX0gc2NvcmU9JHtzY29yZVN0cn0ke2xpbmt9JHtmYWN0b3JzfWApO1xuICB9XG5cbiAgaWYgKHRyYWNlLnJvb3RDYXVzZSkge1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgUm9vdCBjYXVzZTogcXVhbGl0eSBkcm9wcGVkIGF0ICR7dHJhY2Uucm9vdENhdXNlLmZyYW1lLnJ1bnRpbWVTdGFnZUlkfSBgICtcbiAgICAgICAgYCgke3RyYWNlLnJvb3RDYXVzZS5wcmV2aW91c0ZyYW1lLnNjb3JlLnRvRml4ZWQoMil9IOKGkiAke3RyYWNlLnJvb3RDYXVzZS5mcmFtZS5zY29yZS50b0ZpeGVkKDIpfSwgYCArXG4gICAgICAgIGDOlCR7dHJhY2Uucm9vdENhdXNlLmRyb3AudG9GaXhlZCgyKX0pYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* qualityTrace() — Quality Stack Trace built on causalChain().
|
|
3
3
|
*
|
|
4
|
-
* Thin layer over `
|
|
4
|
+
* Thin layer over `foottrace`'s `causalChain()` that decorates
|
|
5
5
|
* each causal node with quality scores from a QualityRecorder.
|
|
6
6
|
*
|
|
7
7
|
* ```
|
|
@@ -41,6 +41,9 @@ export interface QualityStackTrace {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Build a quality stack trace by decorating a causal chain with scores.
|
|
44
|
+
* Root cause is the largest positive score drop across a recorded parent→child
|
|
45
|
+
* dependency with known scores. Ties retain the first edge in BFS node / parent
|
|
46
|
+
* order. This score comparison is a diagnostic hint, not proof of why quality fell.
|
|
44
47
|
*
|
|
45
48
|
* @param commitLog From executor.getSnapshot().commitLog
|
|
46
49
|
* @param qualityRecorder QualityRecorder attached during execution
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "footprintjs",
|
|
3
|
-
"version": "10.0.
|
|
3
|
+
"version": "10.0.1",
|
|
4
4
|
"description": "Explainable backend flows — automatic causal traces, decision evidence, and MCP tool generation for AI agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Sanjay Krishna Anbalagan",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
"eslint-plugin-simple-import-sort": "^8.0.0",
|
|
204
204
|
"fast-check": "^4.4.0",
|
|
205
205
|
"footprintjs-baseline": "npm:footprintjs@9.28.0",
|
|
206
|
-
"footprintjs-published": "npm:footprintjs@^
|
|
206
|
+
"footprintjs-published": "npm:footprintjs@^10.0.0",
|
|
207
207
|
"husky": "^9.1.7",
|
|
208
208
|
"lint-staged": "^16.3.2",
|
|
209
209
|
"markdown-it": "^14.3.1",
|