GitNexus/gitnexus/test/unit/group
Gergő Magyar 21a52af1d4
fix(lbug): ship FTS per-platform and recover in-place native aborts (#3274)
* fix(lbug): pin Ladybug core so Dependabot cannot ship a skewed FTS artifact

The extension version is a separate upstream constant. Ignore daily core bumps and fail the pairing gate when the committed manifest does not name the installed core.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): make doctor and CI FTS gates resolve the packaged artifact

Doctor and the REQUIRE_FTS file gates still treated an empty ~/.lbdb as
unavailable, which would turn three CI jobs red once analyze stops
installing into that tree.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): name native-abort and tuple-missing so analyze cannot mis-advise

The CLI summary's trailing else treated every unknown skip reason as a
missing extension. New crash and platform causes must get their own
remedies, not a network-install hint.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): delete the dead read-path FTS index create

ensureFTSIndex had no production callers and swallowed read-only
CREATE_FTS_INDEX failures, which hid the only signal that a reader
tried to write.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): vendor per-platform FTS artifacts so analyze needs no host install

Keyword search depended on a CDN fetch into ~/.lbdb. Shipping the five
published tuples inside the package makes air-gapped and ignore-scripts
installs load the same artifact the publish gate checksums.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): load the packaged FTS artifact before any network install

Analyze still required a CDN fetch into ~/.lbdb even when the package
already shipped the file. FTS now path-loads the vendored tuple first
and records source labels so a later truncated home copy cannot steal
the diagnosis.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): diagnose a core/extension version skew instead of a missing runtime

A structurally valid FTS artifact whose path version disagrees with the
packaged pin must name both versions, not prescribe VC++ or OpenSSL.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): stamp an FTS phase so repair stays usable after an in-place abort

A native CREATE_FTS_INDEX abort leaves no skip reason; the next run infers
it from the dirty flag, and --repair-fts must not treat that phase as a
half-written graph.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): park an in-place FTS crash WAL without wiping the graph

An FTS abort after a successful checkpoint must reopen the live index on
macOS, Windows, and Linux. Staging never parks the live WAL; readers keep
today's large-WAL refusal.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): refuse read-only opens of an FTS-poisoned WAL

MCP and serve cannot repair a leftover in-place abort. Fail before the
native open and name --repair-fts, on macOS, Windows, and Linux.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): name a vendor-neutral Windows OpenSSL prerequisite

OQ1 is unanswered here so GitNexus does not ship OpenSSL DLLs. Windows
FTS now asks for a system OpenSSL 3 runtime instead of Git Bash PATH.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(lbug): inject the FTS vendor root and redact it on HTTP and MCP

Path-loaded artifacts no longer vary with HOME. Tests pass an injected
vendor tree and assert search warnings never leak a filesystem path.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(lbug): document load-only as the global FTS install default

Analyze still overrides to auto. Packaged per-platform artifacts load
before any network install on macOS, Windows, and Linux.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(lbug): format the FTS install-policy README table

Prettier does not run on Markdown in pre-commit, so the U10 table wrap
needs its own formatting commit.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): skip FTS CREATE after a persisted native abort

A recovered analyze run was retrying CREATE_FTS_INDEX from skipReason
alone. Keep that skip until --repair-fts, fail closed on unsupported
tuples, and honor the checkpoint warrant for park/repair.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): honor checkpoint flushed warrant and align FTS tests with packaged vendor

A no-op CHECKPOINT must not satisfy the FTS park warrant, and CI still asserted HOME-only FTS isolation after analyze started path-LOADing the packaged artifact.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(lbug): accept a nonempty incremental write set in the #2790 recovery check

FTS-phase recovery can incremental-add files (changed=0, added=1). That is not the #2790 empty-diff wipe skip.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): compare FTS home versions to the core pin and tighten the publish filename gate

Ladybug's ~/.lbdb/extension directory is the runtime/core version; treating it as the artifact version false-diagnosed skew. The publish guard now rejects a path-escaping filename the same way the fetch script does.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(lbug): seed FTS e2e fixtures from the packaged vendor artifact

A machine with no ~/.lbdb copy should still run the vendor-survivorship cases; the seed no longer depends on HOME or a network install.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address PR review feedback (#3274)

Keep in-place FTS abort evidence after persist so a second CREATE abort
cannot fail-open readers, and close the CLI, loader, embed, and e2e gaps
the review called out.

Note: full npm test hit Ladybug worker-pool startup failures under memory
pressure; tsc and 180 targeted unit tests passed.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address PR review feedback (#3274)

Run the vendored-path symlink guard on the OS matrix, put e2e HOME
fixtures on Ladybug's real extension layout, pin the embed crash-WAL
gate before the writable open, and let analyze writers park through
missing-shadow recovery.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(lbug): keep --repair-fts CI green after vendored-first FTS

Never-installed warning fixtures must not inspect a packaged vendor binary, and a failed dirty restamp must not abort an otherwise successful --repair-fts run.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(cli): give the #1169 analyze e2e the same 90s Windows budget as its sibling

The first #1169 persist-meta case was still on a 60s spawn/it budget and was killed banner-only on windows-latest after the FTS warning fixture no longer failed the shard first.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(ci): reweight Windows shards after the FTS e2e grew

Vendored-first HOME fixtures pushed fts-extension-e2e to ~6 minutes on windows-latest, so the old 146s weight packed it with skills-e2e and blew the 20-minute watchdog.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 08:52:24 +01:00
..
bridge-db-edge.test.ts fix(deps): upgrade @ladybugdb/core to 0.16.0 to resolve native segfaults (#1235) 2026-04-30 17:40:39 +01:00
bridge-db.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
bridge-meta-swap-window.test.ts feat(storage): add configurable index storage and content retention tiers (#3060) 2026-09-12 20:31:55 +00:00
bridge-pairing-precedes-open.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
bridge-storage-tempfile.test.ts fix(security): close URL/regex/tag-filter sanitization cluster (U7) (#1330) 2026-05-08 07:11:29 +01:00
config-parser.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
cross-impact-fanout-cap.test.ts fix(impact): make File risk comparable via shared axes (#3075) (#3082) 2026-08-29 11:58:15 +00:00
cross-impact-incomplete-bridge.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
cross-impact-phase2-timeout.test.ts fix(ingestion): close ReDoS in cobol-preprocessor + rust-workspace + resource-exhaustion in cross-impact (U8) (#1331) 2026-05-08 09:10:07 +01:00
cross-impact.test.ts fix(group): make degraded links, sync warnings and UID-only impact actually work (#3113) 2026-08-31 20:03:53 +00:00
cross-trace-incomplete-bridge.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
cross-trace.test.ts feat(group): resolve inline HTTP provider handlers via call-site line (#2276) (#2282) 2026-06-23 17:51:11 +01:00
data-route-table.test.ts feat(routes): support JS data route tables (#2972) 2026-08-18 04:39:45 +01:00
elixir-workspace-extractor.test.ts feat(group): workspace extractors for Node, Python, Go, Java, Elixir (#1260) 2026-05-04 09:43:21 +01:00
fastapi-composed-provider.test.ts fix: resolve imported/composed FastAPI route path constants (#2391) (#2393) 2026-07-07 13:23:05 +01:00
fixtures.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
fs-utils.test.ts feat(group): add GraphQL cross-repo contracts (#3070) 2026-08-29 08:39:09 +01:00
go-workspace-extractor.test.ts feat(group): workspace extractors for Node, Python, Go, Java, Elixir (#1260) 2026-05-04 09:43:21 +01:00
graphql-extractor.test.ts fix(group): extract NestJS GraphQL contracts on real indexes (#3201) (#3227) 2026-09-09 17:30:00 +01:00
group-lock.test.ts fix(storage): guard stale file-lock reclamation (#3234) 2026-09-12 11:47:12 +01:00
group-path-utils.test.ts feat: cross-repo impact analysis (#794) — @repo MCP routing + group resources (#984) 2026-04-20 11:55:07 +01:00
group-service-group-mode.test.ts feat: cross-repo impact analysis (#794) — @repo MCP routing + group resources (#984) 2026-04-20 11:55:07 +01:00
group-tools.test.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
grpc-extractor.test.ts fix(group): stop Node gRPC loadPackageDefinition gate from matching every member call (#1916) 2026-05-30 09:31:36 +01:00
http-consumer-signals.test.ts PHP: detect generated-client Request(method, host . resourcePath) consumer shape (#3079) 2026-08-28 17:47:41 +00:00
http-route-extractor.test.ts feat(node): wrapped-client HTTP consumers + leading-prefix template stripping (#3111) 2026-09-02 19:59:45 +00:00
http-route-graph-method.test.ts fix(routes): connect decorator routes to their handler function (#2865) 2026-09-01 14:03:30 +00:00
http-route-multi-verb.test.ts feat(group): cross-repo call trace using PDG (#2269) 2026-06-23 07:54:13 +01:00
impact-by-uid.test.ts feat(group): add sync pipeline, CLI, MCP tools, and monorepo fixture 2026-04-02 00:40:31 +03:00
include-extractor.test.ts fix(storage): stop the Windows \\?\ long-path prefix from breaking repo path matching (#2667) (#2700) 2026-07-26 09:07:55 +01:00
insecure-tempfile.test.ts fix(storage): give every registry write its own tmp path (#2888) (#2920) 2026-08-10 21:16:42 +01:00
java-const-route-parity.test.ts feat(jvm): fold Java static wildcards and Kotlin star imports for route constants (#3110) 2026-08-31 21:58:40 +00:00
java-workspace-extractor.test.ts fix(group): parse Maven child coordinates independently of parent POMs (#3108) 2026-08-31 15:49:43 +00:00
js-http-consumer-resolution.test.ts feat(node): wrapped-client HTTP consumers + leading-prefix template stripping (#3111) 2026-09-02 19:59:45 +00:00
kotlin-const-route-fold.test.ts feat(jvm): fold Java static wildcards and Kotlin star imports for route constants (#3110) 2026-08-31 21:58:40 +00:00
manifest-extractor.test.ts fix(group): replace LadybugDB-incompatible multi-label Cypher (#2325) (#2327) 2026-06-30 15:08:43 +01:00
manifest-label-drift.test.ts feat(group): add GraphQL cross-repo contracts (#3070) 2026-08-29 08:39:09 +01:00
manifest-synthetic-impact.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
matching.test.ts feat(group): add GraphQL cross-repo contracts (#3070) 2026-08-29 08:39:09 +01:00
nest-route-parity.test.ts fix(ingestion): index NestJS decorator routes so api_impact and route_map stop reporting live endpoints as non-existent (#3017) 2026-08-27 08:35:36 +01:00
node-workspace-extractor.test.ts feat(group): workspace extractors for Node, Python, Go, Java, Elixir (#1260) 2026-05-04 09:43:21 +01:00
php-guzzle-request-ctor.test.ts PHP: detect generated-client Request(method, host . resourcePath) consumer shape (#3079) 2026-08-28 17:47:41 +00:00
python-workspace-extractor.test.ts fix(group): detect function-local Python imports (#3254) 2026-09-11 06:23:52 +00:00
registry-suppressed-stages.test.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
registry-unreadable-repos.test.ts fix(group): stop reporting what could not be measured as a measurement of zero (#3012) 2026-08-26 09:37:16 +01:00
resolve-bridge-neighbors.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
rust-workspace-extractor.test.ts feat(core): adopt pino structured logger (#1336) 2026-05-07 20:56:25 +01:00
service-boundary-detector.test.ts fix(group): address 4 HIGH-priority issues from PR #626 review 2026-04-02 12:55:33 +03:00
service-group-sync-payload.test.ts fix(group): make degraded links, sync warnings and UID-only impact actually work (#3113) 2026-08-31 20:03:53 +00:00
service.test.ts feat(staleness): report diverged and unknown index state instead of fresh (#3257) 2026-09-11 08:07:37 +01:00
spring-route-parity.test.ts fix(spring): extract method-level RequestMapping routes (#2857) 2026-08-07 11:43:19 +01:00
storage.test.ts fix(group): address 4 HIGH-priority issues from PR #626 review 2026-04-02 12:55:33 +03:00
sync-exact-only.test.ts fix(group)!: stop group sync claiming matching it never did (#3020) 2026-08-27 18:27:32 +01:00
sync-partial-extraction.test.ts fix(group): fail ambiguous sync names and honor analyze --name (#3094) 2026-08-29 21:48:46 +00:00
sync-registry-identity.test.ts feat(storage): add configurable index storage and content retention tiers (#3060) 2026-09-12 20:31:55 +00:00
sync-unreadable-repos.test.ts feat(storage): add configurable index storage and content retention tiers (#3060) 2026-09-12 20:31:55 +00:00
sync-windowed-resolution.test.ts fix(lbug): ship FTS per-platform and recover in-place native aborts (#3274) 2026-09-14 08:52:24 +01:00
sync.test.ts fix(group): make degraded links, sync warnings and UID-only impact actually work (#3113) 2026-08-31 20:03:53 +00:00
thrift-extractor.test.ts fix(windows): 32767-char tree-sitter crash + VECTOR extension SIGSEGV (#1433) 2026-05-10 16:00:36 +01:00
topic-extractor.test.ts fix(group): contract extractors honour .gitnexusignore via shared IgnoreService (#1185) (#1247) 2026-05-01 16:42:21 +01:00
types.test.ts fix(impact): make File risk comparable via shared axes (#3075) (#3082) 2026-08-29 11:58:15 +00:00