@sdd-method/sdd-cli 1.11.0 → 1.12.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/lib/catalogue/baseline-check.d.ts +45 -0
- package/dist/lib/catalogue/baseline-check.d.ts.map +1 -0
- package/dist/lib/catalogue/baseline-check.js +109 -0
- package/dist/lib/catalogue/baseline-check.js.map +1 -0
- package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.js +38 -0
- package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
- package/dist/lib/catalogue/coverage-render.d.ts.map +1 -1
- package/dist/lib/catalogue/coverage-render.js +65 -13
- package/dist/lib/catalogue/coverage-render.js.map +1 -1
- package/dist/lib/catalogue/finding-identity.d.ts +131 -0
- package/dist/lib/catalogue/finding-identity.d.ts.map +1 -0
- package/dist/lib/catalogue/finding-identity.js +183 -0
- package/dist/lib/catalogue/finding-identity.js.map +1 -0
- package/dist/lib/catalogue/findings.d.ts +13 -1
- package/dist/lib/catalogue/findings.d.ts.map +1 -1
- package/dist/lib/catalogue/findings.js +13 -7
- package/dist/lib/catalogue/findings.js.map +1 -1
- package/dist/lib/catalogue/scores-coverage.d.ts +49 -1
- package/dist/lib/catalogue/scores-coverage.d.ts.map +1 -1
- package/dist/lib/catalogue/scores-coverage.js +84 -9
- package/dist/lib/catalogue/scores-coverage.js.map +1 -1
- package/dist/lib/catalogue/staleness-verdicts.d.ts +16 -0
- package/dist/lib/catalogue/staleness-verdicts.d.ts.map +1 -1
- package/dist/lib/catalogue/staleness-verdicts.js +188 -17
- package/dist/lib/catalogue/staleness-verdicts.js.map +1 -1
- package/dist/lib/sync/adr-transitions.d.ts.map +1 -1
- package/dist/lib/sync/adr-transitions.js +23 -4
- package/dist/lib/sync/adr-transitions.js.map +1 -1
- package/dist/lib/sync/diff.d.ts +35 -0
- package/dist/lib/sync/diff.d.ts.map +1 -1
- package/dist/lib/sync/diff.js +96 -0
- package/dist/lib/sync/diff.js.map +1 -1
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +49 -2
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/verbs/catalogue.d.ts.map +1 -1
- package/dist/verbs/catalogue.js +22 -0
- package/dist/verbs/catalogue.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,12 +7,33 @@
|
|
|
7
7
|
// covering its target.
|
|
8
8
|
//
|
|
9
9
|
// Verdict rules, per basis:
|
|
10
|
-
// corpus_ref + target_path — PRECISE: the target
|
|
11
|
-
// iff
|
|
10
|
+
// corpus_ref + target_path — PRECISE, and a CONTENT test: the target is stale
|
|
11
|
+
// iff its blob at HEAD differs from its blob at the anchor. An anchor the
|
|
12
12
|
// repo does not know is UNKNOWN-ANCHOR (never guessed); an anchor with
|
|
13
13
|
// no target_path cannot support a per-target verdict and is counted as
|
|
14
14
|
// such rather than compared against repo HEAD (which would mark a row
|
|
15
15
|
// stale whenever ANYTHING in the repo moved — alarm, not measurement).
|
|
16
|
+
//
|
|
17
|
+
// WHY CONTENT AND NOT `git log`: the previous test asked whether any
|
|
18
|
+
// commit touched the path since the anchor, which fires on a PURE RENAME
|
|
19
|
+
// — so a portability rename restarts the staleness treadmill for every
|
|
20
|
+
// anchored score in the corpus, and the estate is told to re-review
|
|
21
|
+
// hundreds of artefacts whose text never changed. Measured instance: one
|
|
22
|
+
// score reported stale-by-hours was byte-IDENTICAL to its assessed state,
|
|
23
|
+
// caught only by comparing blobs by hand. A test that cannot tell "moved"
|
|
24
|
+
// from "changed" produces re-review debt out of nothing.
|
|
25
|
+
//
|
|
26
|
+
// Renames are exempt BY CONSTRUCTION, not by a special case: where the
|
|
27
|
+
// path does not exist at the anchor, git's own rename detection over
|
|
28
|
+
// <anchor>..HEAD supplies the pre-rename name and the blob is compared
|
|
29
|
+
// across it. Where that also fails the row is PATH-ABSENT-AT-ANCHOR —
|
|
30
|
+
// reported as its own outcome rather than guessed either way.
|
|
31
|
+
//
|
|
32
|
+
// TARGET-MISSING (any basis): the target_path does not exist at HEAD. A
|
|
33
|
+
// deleted artefact cannot be re-reviewed, so folding it into `stale`
|
|
34
|
+
// prescribes a remedy that cannot be performed (M-ADR 0199 §4.4). It is
|
|
35
|
+
// counted and reported on its own, and its remedy is to withdraw or
|
|
36
|
+
// re-point the score.
|
|
16
37
|
// scored_at + target_path — COARSE: last content change of the path
|
|
17
38
|
// (committer date) after scored_at ⇒ stale. A path git does not track
|
|
18
39
|
// is UNKNOWN-ANCHOR.
|
|
@@ -24,6 +45,8 @@
|
|
|
24
45
|
// there would be a guess. Reporting-only (`coverage` class) like the rest of
|
|
25
46
|
// the scores family — promotion to gate-acting is a later, deliberate act.
|
|
26
47
|
import { execFile as execFileCb } from "node:child_process";
|
|
48
|
+
import { access } from "node:fs/promises";
|
|
49
|
+
import { join } from "node:path";
|
|
27
50
|
import { promisify } from "node:util";
|
|
28
51
|
const execFile = promisify(execFileCb);
|
|
29
52
|
const NO_RUN = {
|
|
@@ -32,6 +55,9 @@ const NO_RUN = {
|
|
|
32
55
|
current: 0,
|
|
33
56
|
unknownAnchor: 0,
|
|
34
57
|
anchorWithoutPath: 0,
|
|
58
|
+
targetMissing: [],
|
|
59
|
+
pathAbsentAtAnchor: 0,
|
|
60
|
+
directoryTargets: 0,
|
|
35
61
|
};
|
|
36
62
|
async function git(sddRoot, args) {
|
|
37
63
|
try {
|
|
@@ -46,6 +72,80 @@ async function git(sddRoot, args) {
|
|
|
46
72
|
return { ok: false, stdout: "" };
|
|
47
73
|
}
|
|
48
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Is the target genuinely GONE, or merely not committed?
|
|
77
|
+
*
|
|
78
|
+
* `git rev-parse HEAD:<path>` fails for both a deleted file and an untracked
|
|
79
|
+
* one that is sitting on disk. Treating the second as deleted would tell an
|
|
80
|
+
* author to withdraw a score for an artefact they can see in front of them —
|
|
81
|
+
* so absence from the HEAD tree is confirmed against the working tree before
|
|
82
|
+
* it is called missing. (Caught by this module's own untracked-path control,
|
|
83
|
+
* which is what it was there for.)
|
|
84
|
+
*/
|
|
85
|
+
async function existsOnDisk(sddRoot, path) {
|
|
86
|
+
try {
|
|
87
|
+
await access(join(sddRoot, path));
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* DIRECTORY TARGETS are a real and different case, raised by the reverse estate
|
|
96
|
+
* from its own pre-cut data: 18 of its 84 stale rows name a whole-domain
|
|
97
|
+
* directory rather than a file.
|
|
98
|
+
*
|
|
99
|
+
* `git rev-parse <rev>:<path>` returns a TREE oid for a directory and a BLOB oid
|
|
100
|
+
* for a file, so the comparison below works for both — but it does not mean the
|
|
101
|
+
* same thing. A file is stale when its own bytes changed; a directory is stale
|
|
102
|
+
* when ANYTHING beneath it changed, which for a whole-domain tree is close to
|
|
103
|
+
* unconditional. That is a wider test, and it is defensible (a score over a tree
|
|
104
|
+
* really is invalidated by movement inside it) — but it must be SAID, because a
|
|
105
|
+
* number that is near-unconditional by construction reads exactly like a number
|
|
106
|
+
* that is measuring something.
|
|
107
|
+
*
|
|
108
|
+
* Git's rename detection also does not apply: a tree has no rename pair. A moved
|
|
109
|
+
* directory therefore lands in `pathAbsentAtAnchor` rather than being exempted.
|
|
110
|
+
*/
|
|
111
|
+
async function objectTypeAt(sddRoot, rev, path) {
|
|
112
|
+
const oid = await git(sddRoot, ["rev-parse", `${rev}:${path}`]);
|
|
113
|
+
if (!oid.ok || oid.stdout === "")
|
|
114
|
+
return null;
|
|
115
|
+
const t = await git(sddRoot, ["cat-file", "-t", oid.stdout]);
|
|
116
|
+
if (!t.ok)
|
|
117
|
+
return null;
|
|
118
|
+
return t.stdout === "tree" ? "tree" : "blob";
|
|
119
|
+
}
|
|
120
|
+
/** Blob (or tree — see `objectTypeAt`) id of `<rev>:<path>`, else null. */
|
|
121
|
+
async function blobAt(sddRoot, rev, path) {
|
|
122
|
+
const r = await git(sddRoot, ["rev-parse", `${rev}:${path}`]);
|
|
123
|
+
return r.ok && r.stdout !== "" ? r.stdout : null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* new-path -> pre-rename path, from git's OWN rename detection over
|
|
127
|
+
* `<anchor>..HEAD`. One call per distinct anchor, not per row: anchors are few
|
|
128
|
+
* and this walk is the expensive part.
|
|
129
|
+
*
|
|
130
|
+
* Using git's detector rather than a heuristic matters — a basename match would
|
|
131
|
+
* pair unrelated files that happen to share a name, which is precisely the
|
|
132
|
+
* shared-token failure this corpus keeps producing.
|
|
133
|
+
*/
|
|
134
|
+
async function renameMap(sddRoot, anchor) {
|
|
135
|
+
const map = new Map();
|
|
136
|
+
const r = await git(sddRoot, ["diff", "--name-status", "-M", anchor, "HEAD"]);
|
|
137
|
+
if (!r.ok)
|
|
138
|
+
return map;
|
|
139
|
+
for (const line of r.stdout.split("\n")) {
|
|
140
|
+
if (!line.startsWith("R"))
|
|
141
|
+
continue;
|
|
142
|
+
const parts = line.split("\t");
|
|
143
|
+
if (parts.length < 3)
|
|
144
|
+
continue;
|
|
145
|
+
map.set(parts[2], parts[1]);
|
|
146
|
+
}
|
|
147
|
+
return map;
|
|
148
|
+
}
|
|
49
149
|
export async function runStalenessVerdicts(session, options) {
|
|
50
150
|
if (!options.available.has("quality_scores"))
|
|
51
151
|
return { ...NO_RUN };
|
|
@@ -71,11 +171,28 @@ export async function runStalenessVerdicts(session, options) {
|
|
|
71
171
|
let current = 0;
|
|
72
172
|
let unknownAnchor = 0;
|
|
73
173
|
let anchorWithoutPath = 0;
|
|
174
|
+
let pathAbsentAtAnchor = 0;
|
|
175
|
+
let directoryTargets = 0;
|
|
176
|
+
const targetMissing = [];
|
|
74
177
|
const anchorKnown = new Map();
|
|
178
|
+
const renamesByAnchor = new Map();
|
|
75
179
|
for (const [rubricIdRaw, targetRefRaw, targetPathRaw, corpusRefRaw, scoredAtRaw, basisRaw] of rows) {
|
|
76
180
|
const rubricId = asStr(rubricIdRaw);
|
|
77
181
|
const targetRef = asStr(targetRefRaw);
|
|
78
182
|
const basis = asStr(basisRaw);
|
|
183
|
+
// Counted for BOTH bases, before the branch. The first cut of this counter
|
|
184
|
+
// sat inside the corpus_ref branch only, so it was blind to every
|
|
185
|
+
// scored_at row — and the estate that ASKED for this count has all 18 of
|
|
186
|
+
// its directory targets on the scored_at basis, so the metric it requested
|
|
187
|
+
// read zero for it. The controls passed because they were written with
|
|
188
|
+
// corpus_ref fixtures: a control that exercises one branch says nothing
|
|
189
|
+
// about the other.
|
|
190
|
+
{
|
|
191
|
+
const p = asStr(targetPathRaw);
|
|
192
|
+
if (p !== "" && (await objectTypeAt(options.sddRoot, "HEAD", p)) === "tree") {
|
|
193
|
+
directoryTargets += 1;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
79
196
|
if (basis === "corpus_ref") {
|
|
80
197
|
const anchor = asStr(corpusRefRaw);
|
|
81
198
|
const path = asStr(targetPathRaw);
|
|
@@ -92,25 +209,49 @@ export async function runStalenessVerdicts(session, options) {
|
|
|
92
209
|
unknownAnchor += 1;
|
|
93
210
|
continue;
|
|
94
211
|
}
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
212
|
+
const headBlob = await blobAt(options.sddRoot, "HEAD", path);
|
|
213
|
+
if (headBlob === null) {
|
|
214
|
+
if (await existsOnDisk(options.sddRoot, path)) {
|
|
215
|
+
// Present but uncommitted: no blob to compare against, and nothing
|
|
216
|
+
// deleted. Unknown, which is not fresh.
|
|
217
|
+
unknownAnchor += 1;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
targetMissing.push({ rubricId, targetRef, targetPath: path });
|
|
221
|
+
}
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
let anchorBlob = await blobAt(options.sddRoot, anchor, path);
|
|
225
|
+
if (anchorBlob === null) {
|
|
226
|
+
// The path did not exist at the anchor under this name. Ask git whether
|
|
227
|
+
// it was renamed there rather than concluding anything.
|
|
228
|
+
let renames = renamesByAnchor.get(anchor);
|
|
229
|
+
if (renames === undefined) {
|
|
230
|
+
renames = await renameMap(options.sddRoot, anchor);
|
|
231
|
+
renamesByAnchor.set(anchor, renames);
|
|
232
|
+
}
|
|
233
|
+
const oldPath = renames.get(path);
|
|
234
|
+
if (oldPath !== undefined) {
|
|
235
|
+
anchorBlob = await blobAt(options.sddRoot, anchor, oldPath);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (anchorBlob === null) {
|
|
239
|
+
pathAbsentAtAnchor += 1;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (anchorBlob === headBlob) {
|
|
243
|
+
// Byte-identical to its assessed state — including across a rename,
|
|
244
|
+
// which is the whole point of testing content instead of touches.
|
|
245
|
+
current += 1;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
104
248
|
stale.push({
|
|
105
249
|
rubricId,
|
|
106
250
|
targetRef,
|
|
107
251
|
basis: "corpus_ref",
|
|
108
|
-
detail:
|
|
252
|
+
detail: "target CONTENT differs from its state at the anchor",
|
|
109
253
|
});
|
|
110
254
|
}
|
|
111
|
-
else {
|
|
112
|
-
current += 1;
|
|
113
|
-
}
|
|
114
255
|
}
|
|
115
256
|
else {
|
|
116
257
|
const path = asStr(targetPathRaw);
|
|
@@ -121,6 +262,11 @@ export async function runStalenessVerdicts(session, options) {
|
|
|
121
262
|
unknownAnchor += 1;
|
|
122
263
|
continue;
|
|
123
264
|
}
|
|
265
|
+
if ((await blobAt(options.sddRoot, "HEAD", path)) === null &&
|
|
266
|
+
!(await existsOnDisk(options.sddRoot, path))) {
|
|
267
|
+
targetMissing.push({ rubricId, targetRef, targetPath: path });
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
124
270
|
const last = await git(options.sddRoot, ["log", "-1", "--format=%cI", "--", path]);
|
|
125
271
|
if (!last.ok || last.stdout === "") {
|
|
126
272
|
unknownAnchor += 1;
|
|
@@ -150,6 +296,9 @@ export async function runStalenessVerdicts(session, options) {
|
|
|
150
296
|
current,
|
|
151
297
|
unknownAnchor,
|
|
152
298
|
anchorWithoutPath,
|
|
299
|
+
targetMissing,
|
|
300
|
+
pathAbsentAtAnchor,
|
|
301
|
+
directoryTargets,
|
|
153
302
|
};
|
|
154
303
|
}
|
|
155
304
|
export function renderStalenessVerdicts(res, tier) {
|
|
@@ -165,10 +314,32 @@ export function renderStalenessVerdicts(res, tier) {
|
|
|
165
314
|
`${s.detail}; the assessment predates the artefact it reads as covering — ` +
|
|
166
315
|
`re-review it or record why the change does not invalidate the score`);
|
|
167
316
|
}
|
|
317
|
+
if (res.pathAbsentAtAnchor > 0) {
|
|
318
|
+
// Counted AND said. A bucket that only ever appears as a number in a metric
|
|
319
|
+
// line is a state nobody acts on, and this one means an assessment cannot
|
|
320
|
+
// be verified at all.
|
|
321
|
+
out.push(`[finding] coverage: ${res.pathAbsentAtAnchor} score(s) have a target that DID NOT EXIST ` +
|
|
322
|
+
`AT THE ANCHOR under any name git can pair — the assessment cannot be verified ` +
|
|
323
|
+
`against its own corpus_ref; re-anchor the score, or re-review and re-anchor together`);
|
|
324
|
+
}
|
|
325
|
+
for (const t of res.targetMissing) {
|
|
326
|
+
// Remedy deliberately differs from STALE's. M-ADR 0199 §4.4 binds a remedy
|
|
327
|
+
// to be performable at the tier that emitted it, and "re-review it" cannot
|
|
328
|
+
// be performed on an artefact that no longer exists.
|
|
329
|
+
out.push(`[finding] coverage: ${t.rubricId} score for '${t.targetRef}' has a TARGET THAT NO LONGER ` +
|
|
330
|
+
`EXISTS — '${t.targetPath}' is absent at HEAD; the assessment cannot be re-reviewed, ` +
|
|
331
|
+
`so withdraw the score or re-point it at the successor artefact`);
|
|
332
|
+
}
|
|
168
333
|
out.push(`[metric] scores_staleness (${tier}): ${res.assessed} verdict-capable score(s) — ` +
|
|
169
334
|
`${res.stale.length} stale / ${res.current} current / ` +
|
|
170
|
-
`${res.
|
|
171
|
-
|
|
335
|
+
`${res.targetMissing.length} target-missing / ` +
|
|
336
|
+
`${res.unknownAnchor} unknown-anchor / ${res.anchorWithoutPath} anchor-without-path / ` +
|
|
337
|
+
`${res.pathAbsentAtAnchor} path-absent-at-anchor` +
|
|
338
|
+
(res.directoryTargets > 0
|
|
339
|
+
? ` (of which ${res.directoryTargets} target a DIRECTORY — stale there means anything beneath it changed, a wider test than a file's and near-unconditional over a large tree)`
|
|
340
|
+
: "") +
|
|
341
|
+
` (staleness is a CONTENT test — a rename is not a change; unknown is not fresh;` +
|
|
342
|
+
` reporting-only per M-ADR 0205 §4.5)`);
|
|
172
343
|
return out;
|
|
173
344
|
}
|
|
174
345
|
//# sourceMappingURL=staleness-verdicts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staleness-verdicts.js","sourceRoot":"","sources":["../../../src/lib/catalogue/staleness-verdicts.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,wEAAwE;AACxE,uBAAuB;AACvB,EAAE;AACF,4BAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"staleness-verdicts.js","sourceRoot":"","sources":["../../../src/lib/catalogue/staleness-verdicts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adr-transitions.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/adr-transitions.ts"],"names":[],"mappings":"AAoCA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,cAAc,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;CAClD;AAID;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAS7D;AAsBD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"adr-transitions.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/adr-transitions.ts"],"names":[],"mappings":"AAoCA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,cAAc,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;CAClD;AAID;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAS7D;AAsBD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAAC,iBAAiB,CAAC,CA+G5B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -86,8 +86,23 @@ export async function planAdrTransitions(bundleRootDir, targetRepo, previousVers
|
|
|
86
86
|
if (!Array.isArray(list))
|
|
87
87
|
return EMPTY;
|
|
88
88
|
const renames = [];
|
|
89
|
-
const
|
|
89
|
+
const rawWarnings = [];
|
|
90
90
|
const protectedFromRemoval = [];
|
|
91
|
+
/**
|
|
92
|
+
* FIRST ADOPTION replays the bundle's whole transition history (ledger §3ae).
|
|
93
|
+
* A repo adopting a bundle for the first time receives its CURRENT state, so
|
|
94
|
+
* every transition in the log happened before this repo existed as an
|
|
95
|
+
* adopter — yet the log is filtered only by "newer than the last applied
|
|
96
|
+
* version", and there is no last applied version, so nothing is filtered.
|
|
97
|
+
* One estate met an ancient reassignment as a fresh warning carrying a
|
|
98
|
+
* colon-form path that read like rename residue to post-wave eyes.
|
|
99
|
+
*
|
|
100
|
+
* Labelled rather than suppressed, deliberately: the notices are TRUE, and a
|
|
101
|
+
* first adopter inheriting a decision that moved slots may still want to know.
|
|
102
|
+
* What was wrong was their apparent currency, not their content — so the fix
|
|
103
|
+
* is to say when they happened, not to hide them.
|
|
104
|
+
*/
|
|
105
|
+
const firstAdoption = previousVersion === undefined || previousVersion === "";
|
|
91
106
|
for (const entry of list) {
|
|
92
107
|
if (typeof entry !== "object" || entry === null)
|
|
93
108
|
continue;
|
|
@@ -119,7 +134,7 @@ export async function planAdrTransitions(bundleRootDir, targetRepo, previousVers
|
|
|
119
134
|
if (fromExists && toExists) {
|
|
120
135
|
// Both present: the adopter may have copied rather than moved, or has
|
|
121
136
|
// content at both names. Renaming over the top could destroy work.
|
|
122
|
-
|
|
137
|
+
rawWarnings.push(`[ADR ${adrId} rename] both paths exist in adopter repo; manual review needed: ${fromPath} → ${toPath}`);
|
|
123
138
|
}
|
|
124
139
|
else if (fromExists) {
|
|
125
140
|
renames.push({ adrId, fromPath, toPath });
|
|
@@ -136,20 +151,24 @@ export async function planAdrTransitions(bundleRootDir, targetRepo, previousVers
|
|
|
136
151
|
protectedFromRemoval.push(withdrawnPath);
|
|
137
152
|
if (await exists(join(targetRepo, withdrawnPath))) {
|
|
138
153
|
const action = String(entry.adopter_action ?? "").trim();
|
|
139
|
-
|
|
154
|
+
rawWarnings.push(`[ADR ${adrId} withdrawal] ${withdrawnPath} is still present.` +
|
|
140
155
|
(action ? ` ${action}` : ""));
|
|
141
156
|
}
|
|
142
157
|
break;
|
|
143
158
|
}
|
|
144
159
|
case "reassignment": {
|
|
145
160
|
const newDecision = String(entry.new_decision_path ?? "");
|
|
146
|
-
|
|
161
|
+
rawWarnings.push(`[ADR ${adrId} reassignment] slot now points to a different decision: ${newDecision}`);
|
|
147
162
|
break;
|
|
148
163
|
}
|
|
149
164
|
default:
|
|
150
165
|
break;
|
|
151
166
|
}
|
|
152
167
|
}
|
|
168
|
+
const warnings = firstAdoption
|
|
169
|
+
? rawWarnings.map((w) => `${w} — HISTORICAL REPLAY: this transition predates this repo's adoption of the bundle, ` +
|
|
170
|
+
`so it is a record of what happened, not a change arriving now`)
|
|
171
|
+
: rawWarnings;
|
|
153
172
|
return { renames, warnings, protectedFromRemoval };
|
|
154
173
|
}
|
|
155
174
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adr-transitions.js","sourceRoot":"","sources":["../../../src/lib/sync/adr-transitions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adr-transitions.js","sourceRoot":"","sources":["../../../src/lib/sync/adr-transitions.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/sync/diff.d.ts
CHANGED
|
@@ -70,4 +70,39 @@ export declare function isGeneratedPath(p: string): boolean;
|
|
|
70
70
|
export declare function computeRemovals(prevPaths: readonly string[], incomingPaths: readonly string[], options: {
|
|
71
71
|
noDelete: boolean;
|
|
72
72
|
}): string[];
|
|
73
|
+
/**
|
|
74
|
+
* SHADOW COLLISIONS — an incoming managed file whose basename already exists at
|
|
75
|
+
* a SHALLOWER, unmanaged path in the adopter's repo (ledger §3ap).
|
|
76
|
+
*
|
|
77
|
+
* When the distributed surface MOVES a file, copies previously delivered at the
|
|
78
|
+
* old location are stranded as unmanaged files. They keep resolving, so nothing
|
|
79
|
+
* breaks loudly, and they go stale silently as their managed twins evolve. One
|
|
80
|
+
* estate carried six such shadows, every one stale — including a rubric its own
|
|
81
|
+
* scoring tooling was still reading, so a repaired anchor shipped and was
|
|
82
|
+
* simultaneously unreachable through the tools meant to apply it.
|
|
83
|
+
*
|
|
84
|
+
* The quiet failure is the one that needs machinery: a rename that breaks its
|
|
85
|
+
* citations announces itself, and this one does not. Flagging the collision as
|
|
86
|
+
* it is created beats a per-estate census finding it months later.
|
|
87
|
+
*
|
|
88
|
+
* ⚠ BASENAME EQUALITY IS NECESSARY AND NOWHERE NEAR SUFFICIENT — learned on
|
|
89
|
+
* this detector's FIRST LIVE RUN, from the estate that reported the class.
|
|
90
|
+
* It fired on a repo's own top-level `README.md` against the managed
|
|
91
|
+
* `docs/method/README.md`: 24KB "# {Adopter Product}" versus 10KB "# `docs/method/`",
|
|
92
|
+
* two lines in common, two documents that merely share a filename. That is not
|
|
93
|
+
* a stranded copy and never could be, and it would have fired in 24 of 40 repos.
|
|
94
|
+
*
|
|
95
|
+
* The defect was building the detector from the CLASS'S SYMPTOM instead of its
|
|
96
|
+
* cause. In every real instance the shadow was a FORMER COPY of the managed
|
|
97
|
+
* file — same basename AND same subject — left behind by a move. So common
|
|
98
|
+
* ancestry is the discriminator, and `looksRelated` supplies it: a candidate
|
|
99
|
+
* must resemble the managed file's content, not merely echo its name.
|
|
100
|
+
*
|
|
101
|
+
* `exists` and `read` are injected so this is testable without a filesystem,
|
|
102
|
+
* and so the rule itself can be read without reading a sync flow.
|
|
103
|
+
*/
|
|
104
|
+
export declare function detectShadowCollisions(managedPaths: readonly string[], exists: (relPath: string) => boolean, read?: (relPath: string) => string | null): ReadonlyArray<{
|
|
105
|
+
readonly shadow: string;
|
|
106
|
+
readonly managed: string;
|
|
107
|
+
}>;
|
|
73
108
|
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/diff.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAiB,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;CACnC;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAM9D;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GACzD,OAAO,CAAC,sBAAsB,CAAC,CAyBjC;AAED,uFAAuF;AACvF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAWjC;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAIrE;AAED,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAsB,aAAa,CACjC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EASnD,CAAC;AAKF,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAKlD;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC7B,MAAM,EAAE,CAIV"}
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/diff.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAiB,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;CACnC;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAM9D;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GACzD,OAAO,CAAC,sBAAsB,CAAC,CAyBjC;AAED,uFAAuF;AACvF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAWjC;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAIrE;AAED,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAsB,aAAa,CACjC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EASnD,CAAC;AAKF,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAKlD;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC7B,MAAM,EAAE,CAIV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EACpC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GACxC,aAAa,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BtE"}
|
package/dist/lib/sync/diff.js
CHANGED
|
@@ -152,4 +152,100 @@ export function computeRemovals(prevPaths, incomingPaths, options) {
|
|
|
152
152
|
const incoming = new Set(incomingPaths);
|
|
153
153
|
return prevPaths.filter((p) => !incoming.has(p) && !isGeneratedPath(p));
|
|
154
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* SHADOW COLLISIONS — an incoming managed file whose basename already exists at
|
|
157
|
+
* a SHALLOWER, unmanaged path in the adopter's repo (ledger §3ap).
|
|
158
|
+
*
|
|
159
|
+
* When the distributed surface MOVES a file, copies previously delivered at the
|
|
160
|
+
* old location are stranded as unmanaged files. They keep resolving, so nothing
|
|
161
|
+
* breaks loudly, and they go stale silently as their managed twins evolve. One
|
|
162
|
+
* estate carried six such shadows, every one stale — including a rubric its own
|
|
163
|
+
* scoring tooling was still reading, so a repaired anchor shipped and was
|
|
164
|
+
* simultaneously unreachable through the tools meant to apply it.
|
|
165
|
+
*
|
|
166
|
+
* The quiet failure is the one that needs machinery: a rename that breaks its
|
|
167
|
+
* citations announces itself, and this one does not. Flagging the collision as
|
|
168
|
+
* it is created beats a per-estate census finding it months later.
|
|
169
|
+
*
|
|
170
|
+
* ⚠ BASENAME EQUALITY IS NECESSARY AND NOWHERE NEAR SUFFICIENT — learned on
|
|
171
|
+
* this detector's FIRST LIVE RUN, from the estate that reported the class.
|
|
172
|
+
* It fired on a repo's own top-level `README.md` against the managed
|
|
173
|
+
* `docs/method/README.md`: 24KB "# {Adopter Product}" versus 10KB "# `docs/method/`",
|
|
174
|
+
* two lines in common, two documents that merely share a filename. That is not
|
|
175
|
+
* a stranded copy and never could be, and it would have fired in 24 of 40 repos.
|
|
176
|
+
*
|
|
177
|
+
* The defect was building the detector from the CLASS'S SYMPTOM instead of its
|
|
178
|
+
* cause. In every real instance the shadow was a FORMER COPY of the managed
|
|
179
|
+
* file — same basename AND same subject — left behind by a move. So common
|
|
180
|
+
* ancestry is the discriminator, and `looksRelated` supplies it: a candidate
|
|
181
|
+
* must resemble the managed file's content, not merely echo its name.
|
|
182
|
+
*
|
|
183
|
+
* `exists` and `read` are injected so this is testable without a filesystem,
|
|
184
|
+
* and so the rule itself can be read without reading a sync flow.
|
|
185
|
+
*/
|
|
186
|
+
export function detectShadowCollisions(managedPaths, exists, read) {
|
|
187
|
+
const managedSet = new Set(managedPaths);
|
|
188
|
+
const seenBasename = new Map();
|
|
189
|
+
for (const rel of managedPaths) {
|
|
190
|
+
const base = rel.slice(rel.lastIndexOf("/") + 1);
|
|
191
|
+
if (!seenBasename.has(base))
|
|
192
|
+
seenBasename.set(base, rel);
|
|
193
|
+
}
|
|
194
|
+
const shadows = [];
|
|
195
|
+
for (const [base, managedRel] of seenBasename) {
|
|
196
|
+
const parts = managedRel.split("/");
|
|
197
|
+
// Walk the managed path's own ancestors, shallowest first: a shadow is the
|
|
198
|
+
// same basename ABOVE the file that now owns the name. A deeper twin is a
|
|
199
|
+
// different artefact, not a stranded copy.
|
|
200
|
+
for (let cut = 0; cut < parts.length - 1; cut++) {
|
|
201
|
+
const candidate = [...parts.slice(0, cut), base].join("/");
|
|
202
|
+
if (candidate === managedRel)
|
|
203
|
+
continue;
|
|
204
|
+
// A path the incoming bundle also manages is not a shadow — it is
|
|
205
|
+
// delivered content, and sync owns both.
|
|
206
|
+
if (managedSet.has(candidate))
|
|
207
|
+
continue;
|
|
208
|
+
if (exists(candidate) && looksRelated(candidate, managedRel, read)) {
|
|
209
|
+
shadows.push({ shadow: candidate, managed: managedRel });
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return shadows;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Do these two files look like copies of one another?
|
|
218
|
+
*
|
|
219
|
+
* Deliberately crude and deliberately CONSERVATIVE: a stranded copy diverges by
|
|
220
|
+
* drift, so it keeps most of its lines; two unrelated files sharing a name share
|
|
221
|
+
* almost none. Without a reader (no filesystem access) it returns FALSE — the
|
|
222
|
+
* detector stays silent rather than guessing, because a false shadow costs a
|
|
223
|
+
* reader's attention on every sync while a missed one is found by the standing
|
|
224
|
+
* per-estate census.
|
|
225
|
+
*/
|
|
226
|
+
function looksRelated(shadowPath, managedPath, read) {
|
|
227
|
+
if (!read)
|
|
228
|
+
return false;
|
|
229
|
+
const a = read(shadowPath);
|
|
230
|
+
const b = read(managedPath);
|
|
231
|
+
if (a === null || b === null)
|
|
232
|
+
return false;
|
|
233
|
+
const lines = (t) => new Set(t
|
|
234
|
+
.split("\n")
|
|
235
|
+
.map((l) => l.trim())
|
|
236
|
+
.filter((l) => l.length > 20));
|
|
237
|
+
const A = lines(a);
|
|
238
|
+
const B = lines(b);
|
|
239
|
+
if (A.size === 0 || B.size === 0)
|
|
240
|
+
return false;
|
|
241
|
+
let shared = 0;
|
|
242
|
+
for (const l of A)
|
|
243
|
+
if (B.has(l))
|
|
244
|
+
shared++;
|
|
245
|
+
// Share of the SMALLER file's substantive lines. A stale copy of a file that
|
|
246
|
+
// has since grown is still a copy, so the smaller side is the right
|
|
247
|
+
// denominator — using the larger one would miss exactly the drifted shadows
|
|
248
|
+
// this exists to catch.
|
|
249
|
+
return shared / Math.min(A.size, B.size) >= 0.3;
|
|
250
|
+
}
|
|
155
251
|
//# sourceMappingURL=diff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/lib/sync/diff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/lib/sync/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAWL,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AAkCzB,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAmB/E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgDD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C,GACpE,OAAO,CAAC,UAAU,CAAC,CAsuBrB;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,EACxB,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,GAAG,IAAI,CAUf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EACpD,kBAAkB,EAAE,MAAM,GACzB,MAAM,GAAG,IAAI,CAqBf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC3C,kBAAkB,EAAE,MAAM,GACzB,MAAM,GAAG,IAAI,CAef;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAkCtE"}
|