@inerrata-corporation/errata 2.0.2-dev.710 → 2.0.2-dev.720
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/errata.mjs +99 -12
- package/package.json +1 -1
package/errata.mjs
CHANGED
|
@@ -15447,6 +15447,15 @@ function extractIdentifierTokens(text) {
|
|
|
15447
15447
|
}
|
|
15448
15448
|
return out2;
|
|
15449
15449
|
}
|
|
15450
|
+
function sidecarDropBucket(reason) {
|
|
15451
|
+
if (reason === null) return null;
|
|
15452
|
+
if (reason === "empty summary") return "empty";
|
|
15453
|
+
if (reason === "summary too long") return "too_long";
|
|
15454
|
+
if (reason === "contains a path shape") return "path_shape";
|
|
15455
|
+
if (reason === "contains a quoted literal") return "quoted_literal";
|
|
15456
|
+
if (reason.startsWith("contains verbatim identifier")) return "verbatim_identifier";
|
|
15457
|
+
return "other";
|
|
15458
|
+
}
|
|
15450
15459
|
function summaryRejectionReason(summary, isKnownToken) {
|
|
15451
15460
|
if (!summary.trim()) return "empty summary";
|
|
15452
15461
|
if (summary.length > MAX_SYMBOL_SUMMARY_CHARS) return "summary too long";
|
|
@@ -15470,15 +15479,18 @@ function summaryRejectionReason(summary, isKnownToken) {
|
|
|
15470
15479
|
return null;
|
|
15471
15480
|
}
|
|
15472
15481
|
function substituteSymbolSummaries(text, summaryByToken) {
|
|
15473
|
-
if (summaryByToken.size === 0) return text;
|
|
15482
|
+
if (summaryByToken.size === 0) return { text, substituted: 0, offered: 0 };
|
|
15474
15483
|
const present = extractIdentifierTokens(text).filter((t) => summaryByToken.has(t));
|
|
15475
15484
|
present.sort((a, b) => b.length - a.length);
|
|
15476
15485
|
let out2 = text;
|
|
15486
|
+
let substituted = 0;
|
|
15477
15487
|
for (const key of present) {
|
|
15478
15488
|
const re = new RegExp(`(?<![A-Za-z0-9_$.])${escapeRe2(key)}(?![A-Za-z0-9_$])`, "g");
|
|
15489
|
+
const before = out2;
|
|
15479
15490
|
out2 = out2.replace(re, summaryByToken.get(key));
|
|
15491
|
+
if (out2 !== before) substituted++;
|
|
15480
15492
|
}
|
|
15481
|
-
return out2;
|
|
15493
|
+
return { text: out2, substituted, offered: summaryByToken.size };
|
|
15482
15494
|
}
|
|
15483
15495
|
function vetSidecarSummaries(sidecar) {
|
|
15484
15496
|
if (!sidecar) return null;
|
|
@@ -16062,6 +16074,7 @@ __export(src_exports, {
|
|
|
16062
16074
|
retrievalTokens: () => retrievalTokens,
|
|
16063
16075
|
sha256: () => sha256,
|
|
16064
16076
|
sha256Short: () => sha256Short,
|
|
16077
|
+
sidecarDropBucket: () => sidecarDropBucket,
|
|
16065
16078
|
splitPnpmKey: () => splitPnpmKey,
|
|
16066
16079
|
substituteSymbolSummaries: () => substituteSymbolSummaries,
|
|
16067
16080
|
summarizeIngestResult: () => summarizeIngestResult,
|
|
@@ -27834,8 +27847,15 @@ function fileRolePhrase(relPath, level = 1) {
|
|
|
27834
27847
|
if (/\.(json|ya?ml|toml|env)$/i.test(relPath)) return "a config file";
|
|
27835
27848
|
return "a source file";
|
|
27836
27849
|
}
|
|
27850
|
+
function isSourceFileToken(token) {
|
|
27851
|
+
const basename5 = token.split(/[/\\]/).pop() ?? token;
|
|
27852
|
+
if (CONVENTION_FILENAMES.has(basename5)) return false;
|
|
27853
|
+
const ext = basename5.split(".").pop();
|
|
27854
|
+
return ext !== void 0 && SOURCE_EXTENSIONS.has(ext.toLowerCase());
|
|
27855
|
+
}
|
|
27837
27856
|
function generalizeFileRefs(text, fileLexicon, level = 1) {
|
|
27838
27857
|
let out2 = text;
|
|
27858
|
+
let lexiconMisses = 0;
|
|
27839
27859
|
const files = [];
|
|
27840
27860
|
const seenFiles = /* @__PURE__ */ new Set();
|
|
27841
27861
|
for (const m of out2.matchAll(FILE_TOKEN_RE)) {
|
|
@@ -27844,6 +27864,7 @@ function generalizeFileRefs(text, fileLexicon, level = 1) {
|
|
|
27844
27864
|
seenFiles.add(tok);
|
|
27845
27865
|
const entry = resolveFileToken(tok, fileLexicon);
|
|
27846
27866
|
if (entry) files.push([tok, entry]);
|
|
27867
|
+
else if (isSourceFileToken(tok)) lexiconMisses++;
|
|
27847
27868
|
}
|
|
27848
27869
|
files.sort((a, b) => b[0].length - a[0].length);
|
|
27849
27870
|
for (const [tok, entry] of files) {
|
|
@@ -27864,10 +27885,10 @@ function generalizeFileRefs(text, fileLexicon, level = 1) {
|
|
|
27864
27885
|
const re = new RegExp(`(?<![\\w$/\\\\.-])${escapeRe4(tok)}(?![\\w$/\\\\.-])`, "g");
|
|
27865
27886
|
out2 = out2.replace(re, fileRolePhrase(entry.relPath, level));
|
|
27866
27887
|
}
|
|
27867
|
-
return out2;
|
|
27888
|
+
return { text: out2, substitutions: files.length + stems.length, lexiconMisses };
|
|
27868
27889
|
}
|
|
27869
27890
|
function generalizeSymbols(text, lexicon, level = 1, fileLexicon) {
|
|
27870
|
-
let out2 = fileLexicon ? generalizeFileRefs(text, fileLexicon, level) : text;
|
|
27891
|
+
let out2 = fileLexicon ? generalizeFileRefs(text, fileLexicon, level).text : text;
|
|
27871
27892
|
const present = [];
|
|
27872
27893
|
const seen = /* @__PURE__ */ new Set();
|
|
27873
27894
|
for (const m of out2.matchAll(TOKEN_RE3)) {
|
|
@@ -27886,7 +27907,7 @@ function generalizeSymbols(text, lexicon, level = 1, fileLexicon) {
|
|
|
27886
27907
|
}
|
|
27887
27908
|
return generalize(out2, { level }).text;
|
|
27888
27909
|
}
|
|
27889
|
-
var SYMBOL_LABELS2, KIND_PHRASE, RE_RESERVED2, escapeRe4, CONVENTION_FILENAMES, CONVENTION_BASENAME_MIN_FILES, CONVENTION_STEMS, FILE_TOKEN_RE, STEM_TOKEN_RE, TOKEN_RE3;
|
|
27910
|
+
var SYMBOL_LABELS2, KIND_PHRASE, RE_RESERVED2, escapeRe4, CONVENTION_FILENAMES, CONVENTION_BASENAME_MIN_FILES, CONVENTION_STEMS, FILE_TOKEN_RE, STEM_TOKEN_RE, SOURCE_EXTENSIONS, TOKEN_RE3;
|
|
27890
27911
|
var init_generalize_graph = __esm({
|
|
27891
27912
|
"src/generalize-graph.ts"() {
|
|
27892
27913
|
"use strict";
|
|
@@ -27956,6 +27977,45 @@ var init_generalize_graph = __esm({
|
|
|
27956
27977
|
]);
|
|
27957
27978
|
FILE_TOKEN_RE = /(?:[A-Za-z0-9_.-]+\/)*[A-Za-z0-9_-][A-Za-z0-9_.-]*\.[A-Za-z0-9]+/g;
|
|
27958
27979
|
STEM_TOKEN_RE = /[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)+/g;
|
|
27980
|
+
SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
27981
|
+
"ts",
|
|
27982
|
+
"tsx",
|
|
27983
|
+
"js",
|
|
27984
|
+
"jsx",
|
|
27985
|
+
"mjs",
|
|
27986
|
+
"cjs",
|
|
27987
|
+
"py",
|
|
27988
|
+
"go",
|
|
27989
|
+
"rs",
|
|
27990
|
+
"java",
|
|
27991
|
+
"kt",
|
|
27992
|
+
"rb",
|
|
27993
|
+
"c",
|
|
27994
|
+
"h",
|
|
27995
|
+
"cc",
|
|
27996
|
+
"cpp",
|
|
27997
|
+
"hpp",
|
|
27998
|
+
"cs",
|
|
27999
|
+
"php",
|
|
28000
|
+
"swift",
|
|
28001
|
+
"scala",
|
|
28002
|
+
"sh",
|
|
28003
|
+
"ps1",
|
|
28004
|
+
"sql",
|
|
28005
|
+
"css",
|
|
28006
|
+
"scss",
|
|
28007
|
+
"html",
|
|
28008
|
+
"vue",
|
|
28009
|
+
"svelte",
|
|
28010
|
+
"md",
|
|
28011
|
+
"json",
|
|
28012
|
+
"yaml",
|
|
28013
|
+
"yml",
|
|
28014
|
+
"toml",
|
|
28015
|
+
"ini",
|
|
28016
|
+
"env",
|
|
28017
|
+
"cypher"
|
|
28018
|
+
]);
|
|
27959
28019
|
TOKEN_RE3 = /[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*/g;
|
|
27960
28020
|
}
|
|
27961
28021
|
});
|
|
@@ -55551,7 +55611,7 @@ function startLoopLagMonitor(thresholdMs = 1e3) {
|
|
|
55551
55611
|
}
|
|
55552
55612
|
|
|
55553
55613
|
// src/engine.ts
|
|
55554
|
-
var DAEMON_VERSION = true ? "2.0.2-dev.
|
|
55614
|
+
var DAEMON_VERSION = true ? "2.0.2-dev.720" : "2.0.0-alpha.0";
|
|
55555
55615
|
var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
|
|
55556
55616
|
var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
|
|
55557
55617
|
var GIT_OP_MUTE_MS = 4e3;
|
|
@@ -57934,6 +57994,21 @@ function stripCodebaseScope(scope) {
|
|
|
57934
57994
|
delete s["codebase"];
|
|
57935
57995
|
return s;
|
|
57936
57996
|
}
|
|
57997
|
+
function compositionCounters(c) {
|
|
57998
|
+
const { sidecarDropReasons, ...scalars } = c;
|
|
57999
|
+
const buckets = [
|
|
58000
|
+
"empty",
|
|
58001
|
+
"too_long",
|
|
58002
|
+
"path_shape",
|
|
58003
|
+
"quoted_literal",
|
|
58004
|
+
"verbatim_identifier",
|
|
58005
|
+
"other"
|
|
58006
|
+
];
|
|
58007
|
+
return {
|
|
58008
|
+
...scalars,
|
|
58009
|
+
...Object.fromEntries(buckets.map((b) => [`sidecarDrop_${b}`, sidecarDropReasons[b] ?? 0]))
|
|
58010
|
+
};
|
|
58011
|
+
}
|
|
57937
58012
|
function contributedWireId(n) {
|
|
57938
58013
|
const cloudId = n.attrs["cloudNodeId"];
|
|
57939
58014
|
return isMembraneSaltedId(cloudId) ? cloudId : n.id;
|
|
@@ -58004,7 +58079,10 @@ function buildInstanceIngest(store, profile, daemonVersion, ignorePatterns = [],
|
|
|
58004
58079
|
const fileLexicon = buildFileLexicon(store);
|
|
58005
58080
|
const shareable = (n) => {
|
|
58006
58081
|
const preserved = symbolIndex ? preservedSymbolsFor(n.description, symbolIndex) : [];
|
|
58007
|
-
const
|
|
58082
|
+
const fileRefs = generalizeFileRefs(n.description, fileLexicon, level);
|
|
58083
|
+
const fileScrubbed = fileRefs.text;
|
|
58084
|
+
composition.fileRefsSubstituted += fileRefs.substitutions;
|
|
58085
|
+
composition.fileRefLexiconMisses += fileRefs.lexiconMisses;
|
|
58008
58086
|
const generalized = generalize(fileScrubbed, { level, project: projectIdentity });
|
|
58009
58087
|
const shippedText = generalized.text;
|
|
58010
58088
|
if (generalized.report.classes.length > 0) composition.privacyRewritten++;
|
|
@@ -58046,7 +58124,11 @@ function buildInstanceIngest(store, profile, daemonVersion, ignorePatterns = [],
|
|
|
58046
58124
|
unshippable: 0,
|
|
58047
58125
|
heldOrphans: 0,
|
|
58048
58126
|
privacyRewritten: 0,
|
|
58049
|
-
sidecarDropped: 0
|
|
58127
|
+
sidecarDropped: 0,
|
|
58128
|
+
sidecarDropReasons: {},
|
|
58129
|
+
sidecarTruncatedAtCap: 0,
|
|
58130
|
+
fileRefsSubstituted: 0,
|
|
58131
|
+
fileRefLexiconMisses: 0
|
|
58050
58132
|
};
|
|
58051
58133
|
for (const label of INSTANCE_LABELS) {
|
|
58052
58134
|
const ref = [];
|
|
@@ -58239,11 +58321,16 @@ function buildInstanceIngest(store, profile, daemonVersion, ignorePatterns = [],
|
|
|
58239
58321
|
const entry = lexicon.get(tok);
|
|
58240
58322
|
if (!entry?.summary) continue;
|
|
58241
58323
|
const scrubbed = generalize(entry.summary, { level, project: projectIdentity }).text.trim();
|
|
58242
|
-
|
|
58324
|
+
const dropBucket = !scrubbed ? "empty" : sidecarDropBucket(summaryRejectionReason(scrubbed, isKnown));
|
|
58325
|
+
if (dropBucket !== null) {
|
|
58243
58326
|
composition.sidecarDropped++;
|
|
58327
|
+
composition.sidecarDropReasons[dropBucket] = (composition.sidecarDropReasons[dropBucket] ?? 0) + 1;
|
|
58244
58328
|
continue;
|
|
58245
58329
|
}
|
|
58246
|
-
if (count >= MAX_SIDECAR_SYMBOLS)
|
|
58330
|
+
if (count >= MAX_SIDECAR_SYMBOLS) {
|
|
58331
|
+
composition.sidecarTruncatedAtCap = 1;
|
|
58332
|
+
break outer;
|
|
58333
|
+
}
|
|
58247
58334
|
sidecar[tok] = { kind: entry.kind, summary: scrubbed };
|
|
58248
58335
|
count++;
|
|
58249
58336
|
}
|
|
@@ -59659,7 +59746,7 @@ async function startMultiDaemon(opts = {}) {
|
|
|
59659
59746
|
});
|
|
59660
59747
|
if (!instances && composition) {
|
|
59661
59748
|
appendPassLedger(r.engine.paths.configDir, "ship", 0, {
|
|
59662
|
-
...composition,
|
|
59749
|
+
...compositionCounters(composition),
|
|
59663
59750
|
accepted: 0,
|
|
59664
59751
|
rejected: 0,
|
|
59665
59752
|
blocked: 0
|
|
@@ -59734,7 +59821,7 @@ async function startMultiDaemon(opts = {}) {
|
|
|
59734
59821
|
});
|
|
59735
59822
|
}
|
|
59736
59823
|
appendPassLedger(r.engine.paths.configDir, "ship", Date.now() - shipStartedAt, {
|
|
59737
|
-
...instances.composition,
|
|
59824
|
+
...compositionCounters(instances.composition),
|
|
59738
59825
|
accepted: res.accepted,
|
|
59739
59826
|
rejected: rejected.size,
|
|
59740
59827
|
blocked: blocked.size
|