You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ad74b88
Browse filesBrowse the repository at this point in the historyBrowse files
The snapshot is **not** incremental: it constraints, scopes-wipes this application's prior subgraph,
301
-
then `UNWIND … MERGE`-loads the full truth. The wipe is everything under `can://<app>/`, plus a
302
-
containment traversal that also replaces a prior v1 (pre-`3.0.0`) graph of the same application.
319
+
Offline snapshots validate incoming identity metadata; they do not inspect an existing database. Execute them only as part of explicit regeneration. The snapshot is **not** incremental: it constraints, scopes-wipes this application's prior subgraph,
320
+
then `UNWIND … MERGE`-loads the full truth. The wipe is everything under `can://<namespace>/<app>/`, plus a
321
+
containment traversal scoped to the selected canonical application. Legacy roots are not retired automatically.
303
322
That scope **includes** this application's `:Artifact` and `:ConfigKey` nodes — the snapshot rebuilds
304
323
them, rather than leaving stale ones to accumulate with nothing ever cleaning them up. The one
305
324
consequence: a sibling-language analyzer's edge into a shared `:Artifact` is dropped by a Java
306
-
snapshot and restored on that analyzer's next push. The Bolt writer does **not** do this — its
307
-
deletions are scoped per module, not per application.
325
+
snapshot and restored on that analyzer's next push. The Bolt writer is narrower; see §4.2.
The Bolt writer reads the database's current state and updates **only what changed**: it diffs each
334
+
The Bolt writer checks the selected existing anchor's identity marker and raw names before DDL or writes, then updates **only what changed**: it diffs each
317
335
compilation unit's `content_hash`, replaces just the changed units' subgraphs (idempotent
318
336
`MERGE` upserts), and — on a full run — prunes units whose source file vanished. Combine with
319
337
`--target-files` for a targeted, partial re-push (orphan pruning is then skipped).
320
338
339
+
On a full run it also reconciles the application's artifacts, so a deleted or renamed file, a
340
+
or removed dependency leaves nothing stale within the selected namespace/application:
341
+
342
+
- Java-owned artifact edges are rebuilt from the run: `HAS_ARTIFACT`, `DECLARES_DEPENDENCY`/`LOCKS`
343
+
to `pkg:maven/…`, and code reads of them (`J_USES_CONFIG`, `J_DISPATCHES_TO`,
344
+
`J_READS_CONFIG_UNRESOLVED`), so a config-only change updates them too.
345
+
- An `:Artifact`/`:ConfigKey` the run no longer emits loses its `:JCanNode` label. An artifact is
346
+
then deleted only if no other analyzer's `HAS_ARTIFACT` still points at it; a config key only if
347
+
no other analyzer's marker (`:PyCanNode`, `:TSCanNode`) still claims it. A sibling's edges are
348
+
never removed.
349
+
- Legacy artifacts require explicit retirement; reconciliation never falls back to a legacy root.
0 commit comments