weavatrix 0.2.18 → 0.2.19

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/README.md CHANGED
@@ -28,7 +28,7 @@ Enterprise deployment through one source-free wire contract. It is a thin
28
28
  extension of this package, not a fork of the parser/graph/Health engine, so core
29
29
  updates arrive as normal dependency updates.
30
30
 
31
- Version 0.2.18 still contains the explicit opt-in compatibility profiles
31
+ Version 0.2.19 still contains the explicit opt-in compatibility profiles
32
32
  documented below. The paired 0.3/0.1 release removes their network
33
33
  implementations from this package; until then the new connector is not
34
34
  publishable. The decision and release gates are in
@@ -430,6 +430,18 @@ metrics are not persisted or transmitted by Weavatrix. If a source checkout's pa
430
430
  while an old daemon remains alive, `initialize`, `tools/list`, and tool calls fail loudly with
431
431
  `STALE_RUNTIME` until the client reconnects; the opt-out is reserved for deliberate development.
432
432
 
433
+ ### 0.2.19 supply-chain signal precision
434
+
435
+ - Installed-package URL literals and ordinary standalone network calls no longer become malware
436
+ findings without a separate security signal. They remain bounded co-evidence beside behavior such
437
+ as environment harvesting, while exfil endpoints, public raw IPs and fetch-plus-exec stay active.
438
+ - Unicode variation selectors used for emoji/presentation are no longer confused with hidden text
439
+ controls. Bidirectional override/isolate controls remain covered.
440
+ - Real Hosted dogfood now completes OSV over 651 package versions and the local malware sweep over
441
+ 535 installed packages with zero critical/high/medium/low findings.
442
+
443
+ Full patch notes: [docs/releases/v0.2.19.md](docs/releases/v0.2.19.md).
444
+
433
445
  ### 0.2.18 repository-root and self-audit trust patch
434
446
 
435
447
  - A directory nested under an ignored parent Git repository is no longer mistaken for an empty
@@ -0,0 +1,33 @@
1
+ # Weavatrix 0.2.19
2
+
3
+ 0.2.19 is a supply-chain signal-precision patch. It was produced after the complete Hosted
4
+ installed-package scan exposed false positives in otherwise ordinary dependency content.
5
+
6
+ ## Malware evidence precision
7
+
8
+ - A hardcoded external URL is no longer sufficient for a malware finding.
9
+ - A standalone `fetch`, Axios, request, curl or wget call to an ordinary external URL is also weak
10
+ evidence by itself. It remains attached as bounded co-evidence when the same package has a
11
+ separate security signal, such as whole-environment serialization.
12
+ - Strong URL and execution evidence is unchanged: known exfil/webhook hosts, public raw-IP URLs,
13
+ cloud metadata endpoints, download-plus-exec lifecycle scripts, reverse shells and miners still
14
+ produce review findings.
15
+ - Unicode variation selectors (`U+FE00`–`U+FE0F`) are presentation controls commonly used with
16
+ emoji and no longer trigger hidden-Unicode review. Bidirectional override/isolate controls remain
17
+ covered because they can conceal source order.
18
+
19
+ ## Verification
20
+
21
+ - Synthetic end-to-end fixtures prove ordinary URL literals, standalone network calls and variation
22
+ selectors stay quiet while multi-signal and strong malicious families remain detectable.
23
+ - Real Weavatrix Hosted dogfood checked 651/651 pinned package versions through OSV with no known
24
+ advisories and scanned 535 installed npm packages with zero malware findings.
25
+ - The same audit reports complete npm declaration/import verification, zero missing dependencies,
26
+ zero unused dependencies, zero duplicate declarations and zero runtime cycles.
27
+ - Full release tests, release-manifest checks, npm/MCPB pack/runtime smoke and supported Node CI remain
28
+ mandatory before publication.
29
+
30
+ ## Product boundary
31
+
32
+ The offline package remains MIT. The accepted 0.3 split and the separate permission-licensed online
33
+ connector are unchanged by this patch.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weavatrix",
3
- "version": "0.2.18",
3
+ "version": "0.2.19",
4
4
  "type": "module",
5
5
  "description": "Local repository intelligence MCP for AI coding agents: reusable architecture graph for fast application understanding, Health, dead code, clones, history, blast radius and architecture safeguards.",
6
6
  "author": "Sergii Ziborov <sergii.ziborov@gmail.com>",
@@ -27,7 +27,7 @@
27
27
  "scripts/run-agent-task-benchmark.mjs",
28
28
  "docs/agent-task-benchmark.md",
29
29
  "docs/adr/0001-v0.3-offline-online-split.md",
30
- "docs/releases/v0.2.18.md",
30
+ "docs/releases/v0.2.19.md",
31
31
  "README.md",
32
32
  "SECURITY.md",
33
33
  "LICENSE"
@@ -22,6 +22,10 @@ function addTyposquatCoSignals(byPkg) {
22
22
  function visibleSignals(signals, allow) {
23
23
  const kept = signals.filter((s) => !(allow && s.noisy));
24
24
  if (!kept.length) return [];
25
+ // A literal URL, or even a network call to one, is ordinary package behavior without a second
26
+ // security signal. Keep those weak observations available as co-evidence (for example beside
27
+ // environment harvesting), but never create a standalone malware finding from them.
28
+ if (!kept.some((s) => !s.weak)) return [];
25
29
  const hasStrongerUrl = kept.some((s) => STRONG_URL_KEYS.has(s.key));
26
30
  return hasStrongerUrl ? kept.filter((s) => s.key !== "hardcoded-url") : kept;
27
31
  }
@@ -90,6 +90,7 @@ export const CONTENT_RULES = [
90
90
  severity: "low",
91
91
  nearZeroFp: false,
92
92
  noisy: true,
93
+ weak: true,
93
94
  pattern: "(fetch|axios\\.|XMLHttpRequest|sendBeacon|https?\\.request|request\\(|curl\\b|wget\\b).{0,220}https?://",
94
95
  re: new RegExp(`\\b(fetch|axios\\.(get|post|put|patch|request)|XMLHttpRequest|sendBeacon|https?\\.request|http\\.request|request\\(|curl\\b|wget\\b)[\\s\\S]{0,220}?${PLAIN_EXTERNAL_URL}`, "i"),
95
96
  what: "network call to hardcoded external URL",
@@ -172,9 +173,9 @@ export const CONTENT_RULES = [
172
173
  key: "hidden-unicode",
173
174
  severity: "medium",
174
175
  nearZeroFp: false,
175
- pattern: "[\\x{202A}-\\x{202E}\\x{2066}-\\x{2069}\\x{FE00}-\\x{FE0F}]",
176
- re: new RegExp("\\u202A|\\u202B|\\u202C|\\u202D|\\u202E|\\u2066|\\u2067|\\u2068|\\u2069|\\uFE00|\\uFE01|\\uFE02|\\uFE03|\\uFE04|\\uFE05|\\uFE06|\\uFE07|\\uFE08|\\uFE09|\\uFE0A|\\uFE0B|\\uFE0C|\\uFE0D|\\uFE0E|\\uFE0F", "u"),
177
- what: "hidden Unicode control/variation character in package source",
176
+ pattern: "[\\x{202A}-\\x{202E}\\x{2066}-\\x{2069}]",
177
+ re: new RegExp("\\u202A|\\u202B|\\u202C|\\u202D|\\u202E|\\u2066|\\u2067|\\u2068|\\u2069", "u"),
178
+ what: "hidden bidirectional Unicode control character in package source",
178
179
  },
179
180
  {
180
181
  key: "obfuscated-code",
@@ -1,41 +0,0 @@
1
- # Weavatrix 0.2.18
2
-
3
- 0.2.18 is the publishable repository-root and self-audit trust patch. The `v0.2.17` source tag was
4
- created, but its release validation exposed the nested-root discovery regression before an npm
5
- package was published. The tag remains immutable; 0.2.18 contains that release plus the fix.
6
-
7
- ## Repository discovery
8
-
9
- - The internal builder distinguishes an actual Git root from a directory that merely lives below
10
- another Git repository.
11
- - When the selected nested directory is ignored by its parent and Git returns an ambiguous empty
12
- file universe, Weavatrix uses its boundary-safe filesystem walker instead of building a zero-node
13
- graph.
14
- - A real Git root with an empty tracked/unignored universe stays empty, so ignored build output and
15
- secrets are not reintroduced.
16
- - The live stdio hot-reload regression now exercises the corrected path and passes independently,
17
- matching the Linux release runner rather than depending on full-suite ordering.
18
-
19
- ## Included 0.2.17 trust work
20
-
21
- - Drizzle configuration roots its schema modules in production reachability.
22
- - Scoped typosquat review compares only compatible scoped targets.
23
- - Executable regular expressions retain equality anchors for clone fingerprints without exposing
24
- their source text.
25
- - Obsolete test-only dependency parsers were removed and repeated dependency, graph and architecture
26
- helpers were consolidated under shared owners.
27
- - Hosted evidence applies the same production-first classification and recomputes bounded summaries
28
- after filtering.
29
-
30
- ## Product boundary
31
-
32
- - `weavatrix` remains MIT and offline-first. No license change is made here.
33
- - The accepted 0.3 split moves outbound HTTP into the separately versioned `weavatrix-online`
34
- connector, whose permission-required license remains a release gate.
35
-
36
- ## Verification
37
-
38
- Release validation covers the full Node test suite on supported Node versions, independent hot
39
- reload execution, release-manifest checks, npm/MCPB packing and runtime smoke tests. The paired
40
- Hosted deployment is rebuilt from this graph, then verified through its live Health and History
41
- views.