@descryy/core 0.3.0 → 0.5.0
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/budget/reply.d.ts +11 -46
- package/dist/budget/reply.d.ts.map +1 -1
- package/dist/budget/reply.js +10 -39
- package/dist/budget/reply.js.map +1 -1
- package/dist/budget/size.d.ts +2 -21
- package/dist/budget/size.d.ts.map +1 -1
- package/dist/budget/size.js +3 -24
- package/dist/budget/size.js.map +1 -1
- package/dist/capabilities/preconditions.d.ts +7 -68
- package/dist/capabilities/preconditions.d.ts.map +1 -1
- package/dist/capabilities/preconditions.js +6 -57
- package/dist/capabilities/preconditions.js.map +1 -1
- package/dist/contracts/engine.d.ts +26 -12
- package/dist/contracts/engine.d.ts.map +1 -1
- package/dist/contracts/engine.js +28 -11
- package/dist/contracts/engine.js.map +1 -1
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/orphans.d.ts +28 -77
- package/dist/contracts/orphans.d.ts.map +1 -1
- package/dist/contracts/orphans.js +124 -94
- package/dist/contracts/orphans.js.map +1 -1
- package/dist/contracts/paths.d.ts +4 -114
- package/dist/contracts/paths.d.ts.map +1 -1
- package/dist/contracts/paths.js +7 -140
- package/dist/contracts/paths.js.map +1 -1
- package/dist/contracts/shapes.d.ts +13 -66
- package/dist/contracts/shapes.d.ts.map +1 -1
- package/dist/contracts/shapes.js +20 -91
- package/dist/contracts/shapes.js.map +1 -1
- package/dist/governance/budget.d.ts +12 -48
- package/dist/governance/budget.d.ts.map +1 -1
- package/dist/governance/budget.js +12 -48
- package/dist/governance/budget.js.map +1 -1
- package/dist/governance/candidate-boundary.d.ts +4 -32
- package/dist/governance/candidate-boundary.d.ts.map +1 -1
- package/dist/governance/candidate-boundary.js +4 -32
- package/dist/governance/candidate-boundary.js.map +1 -1
- package/dist/governance/escalation.d.ts +7 -45
- package/dist/governance/escalation.d.ts.map +1 -1
- package/dist/governance/escalation.js +7 -45
- package/dist/governance/escalation.js.map +1 -1
- package/dist/governance/fact-boundary.d.ts +7 -49
- package/dist/governance/fact-boundary.d.ts.map +1 -1
- package/dist/governance/fact-boundary.js +5 -43
- package/dist/governance/fact-boundary.js.map +1 -1
- package/dist/governance/finding-funnel.d.ts +11 -72
- package/dist/governance/finding-funnel.d.ts.map +1 -1
- package/dist/governance/finding-funnel.js +9 -68
- package/dist/governance/finding-funnel.js.map +1 -1
- package/dist/graph/build.d.ts +13 -75
- package/dist/graph/build.d.ts.map +1 -1
- package/dist/graph/build.js +0 -0
- package/dist/graph/build.js.map +1 -1
- package/dist/graph/cross-language.d.ts +4 -43
- package/dist/graph/cross-language.d.ts.map +1 -1
- package/dist/graph/cross-language.js +9 -77
- package/dist/graph/cross-language.js.map +1 -1
- package/dist/graph/index.d.ts +1 -1
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/merge.d.ts +8 -76
- package/dist/graph/merge.d.ts.map +1 -1
- package/dist/graph/merge.js +27 -77
- package/dist/graph/merge.js.map +1 -1
- package/dist/graph/observed-tests.d.ts +7 -68
- package/dist/graph/observed-tests.d.ts.map +1 -1
- package/dist/graph/observed-tests.js +5 -60
- package/dist/graph/observed-tests.js.map +1 -1
- package/dist/graph/persist.d.ts +2 -25
- package/dist/graph/persist.d.ts.map +1 -1
- package/dist/graph/persist.js +2 -25
- package/dist/graph/persist.js.map +1 -1
- package/dist/graph/runtime-confirmation.d.ts +14 -91
- package/dist/graph/runtime-confirmation.d.ts.map +1 -1
- package/dist/graph/runtime-confirmation.js +19 -103
- package/dist/graph/runtime-confirmation.js.map +1 -1
- package/dist/ledger/mint.d.ts +9 -43
- package/dist/ledger/mint.d.ts.map +1 -1
- package/dist/ledger/mint.js +15 -65
- package/dist/ledger/mint.js.map +1 -1
- package/dist/ledger/resolve.d.ts +13 -81
- package/dist/ledger/resolve.d.ts.map +1 -1
- package/dist/ledger/resolve.js +13 -76
- package/dist/ledger/resolve.js.map +1 -1
- package/dist/multipr/fingerprint.d.ts +5 -46
- package/dist/multipr/fingerprint.d.ts.map +1 -1
- package/dist/multipr/fingerprint.js +22 -74
- package/dist/multipr/fingerprint.js.map +1 -1
- package/dist/multipr/hidden-dependency.d.ts +13 -73
- package/dist/multipr/hidden-dependency.d.ts.map +1 -1
- package/dist/multipr/hidden-dependency.js +12 -63
- package/dist/multipr/hidden-dependency.js.map +1 -1
- package/dist/multipr/mechanical.d.ts +25 -160
- package/dist/multipr/mechanical.d.ts.map +1 -1
- package/dist/multipr/mechanical.js +21 -137
- package/dist/multipr/mechanical.js.map +1 -1
- package/dist/multipr/migration-heads.d.ts +18 -105
- package/dist/multipr/migration-heads.d.ts.map +1 -1
- package/dist/multipr/migration-heads.js +15 -84
- package/dist/multipr/migration-heads.js.map +1 -1
- package/dist/multipr/overlap.d.ts +16 -94
- package/dist/multipr/overlap.d.ts.map +1 -1
- package/dist/multipr/overlap.js +25 -105
- package/dist/multipr/overlap.js.map +1 -1
- package/dist/multipr/scope-store.d.ts +15 -80
- package/dist/multipr/scope-store.d.ts.map +1 -1
- package/dist/multipr/scope-store.js +17 -87
- package/dist/multipr/scope-store.js.map +1 -1
- package/dist/multipr/superseded.d.ts +10 -95
- package/dist/multipr/superseded.d.ts.map +1 -1
- package/dist/multipr/superseded.js +7 -60
- package/dist/multipr/superseded.js.map +1 -1
- package/dist/query/confirmed-facts.d.ts +12 -58
- package/dist/query/confirmed-facts.d.ts.map +1 -1
- package/dist/query/confirmed-facts.js +8 -47
- package/dist/query/confirmed-facts.js.map +1 -1
- package/dist/query/declared-value-closure.d.ts +13 -104
- package/dist/query/declared-value-closure.d.ts.map +1 -1
- package/dist/query/declared-value-closure.js +15 -104
- package/dist/query/declared-value-closure.js.map +1 -1
- package/dist/query/memory.d.ts +5 -9
- package/dist/query/memory.d.ts.map +1 -1
- package/dist/query/memory.js +31 -15
- package/dist/query/memory.js.map +1 -1
- package/dist/query/prominence.d.ts +6 -55
- package/dist/query/prominence.d.ts.map +1 -1
- package/dist/query/prominence.js +6 -55
- package/dist/query/prominence.js.map +1 -1
- package/dist/query/provider.d.ts +28 -81
- package/dist/query/provider.d.ts.map +1 -1
- package/dist/query/provider.js +8 -29
- package/dist/query/provider.js.map +1 -1
- package/dist/query/queries.d.ts +15 -65
- package/dist/query/queries.d.ts.map +1 -1
- package/dist/query/queries.js +43 -100
- package/dist/query/queries.js.map +1 -1
- package/dist/query/refusal-fetch.d.ts +8 -85
- package/dist/query/refusal-fetch.d.ts.map +1 -1
- package/dist/query/refusal-fetch.js +11 -93
- package/dist/query/refusal-fetch.js.map +1 -1
- package/dist/query/refusal-questions.d.ts +17 -92
- package/dist/query/refusal-questions.d.ts.map +1 -1
- package/dist/query/refusal-questions.js +14 -78
- package/dist/query/refusal-questions.js.map +1 -1
- package/dist/query/resolution-floor.d.ts +3 -23
- package/dist/query/resolution-floor.d.ts.map +1 -1
- package/dist/query/resolution-floor.js +3 -23
- package/dist/query/resolution-floor.js.map +1 -1
- package/dist/query/root-cause-score.d.ts +11 -161
- package/dist/query/root-cause-score.d.ts.map +1 -1
- package/dist/query/root-cause-score.js +6 -137
- package/dist/query/root-cause-score.js.map +1 -1
- package/dist/query/row-closure-picture.d.ts +5 -67
- package/dist/query/row-closure-picture.d.ts.map +1 -1
- package/dist/query/row-closure-picture.js +6 -67
- package/dist/query/row-closure-picture.js.map +1 -1
- package/dist/query/similar-incidents.d.ts +6 -41
- package/dist/query/similar-incidents.d.ts.map +1 -1
- package/dist/query/similar-incidents.js +15 -69
- package/dist/query/similar-incidents.js.map +1 -1
- package/dist/query/sqlite.d.ts +3 -7
- package/dist/query/sqlite.d.ts.map +1 -1
- package/dist/query/sqlite.js +13 -16
- package/dist/query/sqlite.js.map +1 -1
- package/dist/query/test-coverage.d.ts +5 -45
- package/dist/query/test-coverage.d.ts.map +1 -1
- package/dist/query/test-coverage.js +10 -53
- package/dist/query/test-coverage.js.map +1 -1
- package/dist/query/traverse.d.ts +22 -126
- package/dist/query/traverse.d.ts.map +1 -1
- package/dist/query/traverse.js +0 -0
- package/dist/query/traverse.js.map +1 -1
- package/dist/query/unresolved.d.ts +19 -164
- package/dist/query/unresolved.d.ts.map +1 -1
- package/dist/query/unresolved.js +11 -138
- package/dist/query/unresolved.js.map +1 -1
- package/dist/query/verification-status.d.ts +12 -109
- package/dist/query/verification-status.d.ts.map +1 -1
- package/dist/query/verification-status.js +9 -99
- package/dist/query/verification-status.js.map +1 -1
- package/dist/recording/migrate.d.ts +4 -10
- package/dist/recording/migrate.d.ts.map +1 -1
- package/dist/recording/migrate.js +4 -10
- package/dist/recording/migrate.js.map +1 -1
- package/dist/recording/reader.d.ts +2 -7
- package/dist/recording/reader.d.ts.map +1 -1
- package/dist/recording/reader.js +2 -7
- package/dist/recording/reader.js.map +1 -1
- package/dist/recording/redact.d.ts +6 -57
- package/dist/recording/redact.d.ts.map +1 -1
- package/dist/recording/redact.js +8 -64
- package/dist/recording/redact.js.map +1 -1
- package/dist/recording/schema.d.ts +3 -38
- package/dist/recording/schema.d.ts.map +1 -1
- package/dist/recording/schema.js +3 -38
- package/dist/recording/schema.js.map +1 -1
- package/dist/recording/writer.d.ts +11 -74
- package/dist/recording/writer.d.ts.map +1 -1
- package/dist/recording/writer.js +3 -43
- package/dist/recording/writer.js.map +1 -1
- package/dist/scoping/fanout.d.ts +6 -68
- package/dist/scoping/fanout.d.ts.map +1 -1
- package/dist/scoping/fanout.js +6 -68
- package/dist/scoping/fanout.js.map +1 -1
- package/dist/scoping/score.d.ts +20 -70
- package/dist/scoping/score.d.ts.map +1 -1
- package/dist/scoping/score.js +20 -70
- package/dist/scoping/score.js.map +1 -1
- package/dist/scoping/tiers.d.ts +4 -16
- package/dist/scoping/tiers.d.ts.map +1 -1
- package/dist/scoping/tiers.js +4 -16
- package/dist/scoping/tiers.js.map +1 -1
- package/dist/scoping/traverse.d.ts +3 -25
- package/dist/scoping/traverse.d.ts.map +1 -1
- package/dist/scoping/traverse.js +14 -49
- package/dist/scoping/traverse.js.map +1 -1
- package/dist/scoping/weights.d.ts +10 -74
- package/dist/scoping/weights.d.ts.map +1 -1
- package/dist/scoping/weights.js +14 -86
- package/dist/scoping/weights.js.map +1 -1
- package/dist/sources/confirmed/incidents.d.ts +5 -35
- package/dist/sources/confirmed/incidents.d.ts.map +1 -1
- package/dist/sources/confirmed/incidents.js +14 -48
- package/dist/sources/confirmed/incidents.js.map +1 -1
- package/dist/sources/git/diff.d.ts +71 -65
- package/dist/sources/git/diff.d.ts.map +1 -1
- package/dist/sources/git/diff.js +136 -83
- package/dist/sources/git/diff.js.map +1 -1
- package/dist/sources/git/env.d.ts +7 -0
- package/dist/sources/git/env.d.ts.map +1 -1
- package/dist/sources/git/env.js +10 -11
- package/dist/sources/git/env.js.map +1 -1
- package/dist/sources/git/history.d.ts +64 -84
- package/dist/sources/git/history.d.ts.map +1 -1
- package/dist/sources/git/history.js +141 -112
- package/dist/sources/git/history.js.map +1 -1
- package/dist/sources/git/incidents.d.ts +13 -75
- package/dist/sources/git/incidents.d.ts.map +1 -1
- package/dist/sources/git/incidents.js +21 -91
- package/dist/sources/git/incidents.js.map +1 -1
- package/dist/sources/git/index.d.ts +5 -3
- package/dist/sources/git/index.d.ts.map +1 -1
- package/dist/sources/git/index.js +3 -2
- package/dist/sources/git/index.js.map +1 -1
- package/dist/sources/git/source.d.ts +9 -79
- package/dist/sources/git/source.d.ts.map +1 -1
- package/dist/sources/git/source.js +0 -0
- package/dist/sources/git/source.js.map +1 -1
- package/dist/sources/migrations/across-change.d.ts +94 -0
- package/dist/sources/migrations/across-change.d.ts.map +1 -0
- package/dist/sources/migrations/across-change.js +278 -0
- package/dist/sources/migrations/across-change.js.map +1 -0
- package/dist/sources/migrations/dialects.d.ts +20 -36
- package/dist/sources/migrations/dialects.d.ts.map +1 -1
- package/dist/sources/migrations/dialects.js +11 -36
- package/dist/sources/migrations/dialects.js.map +1 -1
- package/dist/sources/migrations/index.d.ts +3 -1
- package/dist/sources/migrations/index.d.ts.map +1 -1
- package/dist/sources/migrations/index.js +2 -1
- package/dist/sources/migrations/index.js.map +1 -1
- package/dist/sources/migrations/read.d.ts +14 -79
- package/dist/sources/migrations/read.d.ts.map +1 -1
- package/dist/sources/migrations/read.js +14 -89
- package/dist/sources/migrations/read.js.map +1 -1
- package/dist/sources/workspace/workspace.d.ts +6 -42
- package/dist/sources/workspace/workspace.d.ts.map +1 -1
- package/dist/sources/workspace/workspace.js +10 -53
- package/dist/sources/workspace/workspace.js.map +1 -1
- package/dist/store/driver/driver.d.ts +9 -38
- package/dist/store/driver/driver.d.ts.map +1 -1
- package/dist/store/driver/driver.js +4 -22
- package/dist/store/driver/driver.js.map +1 -1
- package/dist/store/driver/node-sqlite.d.ts +3 -12
- package/dist/store/driver/node-sqlite.d.ts.map +1 -1
- package/dist/store/driver/node-sqlite.js +4 -18
- package/dist/store/driver/node-sqlite.js.map +1 -1
- package/dist/store/index.d.ts +2 -7
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +4 -10
- package/dist/store/index.js.map +1 -1
- package/dist/store/migrate.d.ts +14 -50
- package/dist/store/migrate.d.ts.map +1 -1
- package/dist/store/migrate.js +15 -52
- package/dist/store/migrate.js.map +1 -1
- package/dist/store/reader.d.ts +19 -84
- package/dist/store/reader.d.ts.map +1 -1
- package/dist/store/reader.js +25 -92
- package/dist/store/reader.js.map +1 -1
- package/dist/store/schema.d.ts +14 -76
- package/dist/store/schema.d.ts.map +1 -1
- package/dist/store/schema.js +14 -76
- package/dist/store/schema.js.map +1 -1
- package/dist/store/writer.d.ts +14 -88
- package/dist/store/writer.d.ts.map +1 -1
- package/dist/store/writer.js +29 -123
- package/dist/store/writer.js.map +1 -1
- package/dist/tiers/certify.d.ts +46 -281
- package/dist/tiers/certify.d.ts.map +1 -1
- package/dist/tiers/certify.js +46 -226
- package/dist/tiers/certify.js.map +1 -1
- package/dist/tiers/ladder.d.ts +7 -51
- package/dist/tiers/ladder.d.ts.map +1 -1
- package/dist/tiers/ladder.js +13 -89
- package/dist/tiers/ladder.js.map +1 -1
- package/dist/validation/attributes.d.ts +47 -0
- package/dist/validation/attributes.d.ts.map +1 -0
- package/dist/validation/attributes.js +130 -0
- package/dist/validation/attributes.js.map +1 -0
- package/dist/validation/config-graph.d.ts +7 -56
- package/dist/validation/config-graph.d.ts.map +1 -1
- package/dist/validation/config-graph.js +15 -61
- package/dist/validation/config-graph.js.map +1 -1
- package/dist/validation/env.d.ts +53 -2
- package/dist/validation/env.d.ts.map +1 -1
- package/dist/validation/env.js +99 -4
- package/dist/validation/env.js.map +1 -1
- package/dist/validation/index.d.ts +5 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +3 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/join-substitution.d.ts +22 -120
- package/dist/validation/join-substitution.d.ts.map +1 -1
- package/dist/validation/join-substitution.js +13 -90
- package/dist/validation/join-substitution.js.map +1 -1
- package/dist/validation/migration-integrity.d.ts +72 -0
- package/dist/validation/migration-integrity.d.ts.map +1 -0
- package/dist/validation/migration-integrity.js +238 -0
- package/dist/validation/migration-integrity.js.map +1 -0
- package/dist/validation/migrations.d.ts +23 -88
- package/dist/validation/migrations.d.ts.map +1 -1
- package/dist/validation/migrations.js +20 -79
- package/dist/validation/migrations.js.map +1 -1
- package/dist/validation/nodes.d.ts +3 -1
- package/dist/validation/nodes.d.ts.map +1 -1
- package/dist/validation/nodes.js +3 -1
- package/dist/validation/nodes.js.map +1 -1
- package/dist/validation/rollback.d.ts +10 -73
- package/dist/validation/rollback.d.ts.map +1 -1
- package/dist/validation/rollback.js +23 -81
- package/dist/validation/rollback.js.map +1 -1
- package/dist/validation/route-drift.d.ts +9 -62
- package/dist/validation/route-drift.d.ts.map +1 -1
- package/dist/validation/route-drift.js +7 -52
- package/dist/validation/route-drift.js.map +1 -1
- package/dist/validation/sources.d.ts +16 -94
- package/dist/validation/sources.d.ts.map +1 -1
- package/dist/validation/sources.js +51 -147
- package/dist/validation/sources.js.map +1 -1
- package/dist/worker/pool.d.ts +6 -45
- package/dist/worker/pool.d.ts.map +1 -1
- package/dist/worker/pool.js +5 -42
- package/dist/worker/pool.js.map +1 -1
- package/dist/worker/protocol.d.ts +7 -20
- package/dist/worker/protocol.d.ts.map +1 -1
- package/dist/worker/protocol.js +3 -10
- package/dist/worker/protocol.js.map +1 -1
- package/dist/worker/traversal.worker.d.ts +2 -21
- package/dist/worker/traversal.worker.d.ts.map +1 -1
- package/dist/worker/traversal.worker.js +4 -23
- package/dist/worker/traversal.worker.js.map +1 -1
- package/package.json +11 -2
package/dist/store/writer.js
CHANGED
|
@@ -1,62 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* "The writer deletes everything previously written by `producedBy` for
|
|
5
|
-
* `sourceFiles`, then inserts, in one transaction." That sentence hides three
|
|
6
|
-
* decisions the decision entry does not make, and getting any of them wrong
|
|
7
|
-
* loses data silently. They are made here and each is tested.
|
|
8
|
-
*
|
|
9
|
-
* ## 1. Invalidation matches on adapter *id* and *repo*, not `producedBy` alone
|
|
10
|
-
*
|
|
11
|
-
* `producedBy` is `id@version`. Matching the full string would mean an adapter
|
|
12
|
-
* upgrade never invalidates anything the old version wrote — the two producers
|
|
13
|
-
* would simply coexist, and the graph would hold both readings of every file
|
|
14
|
-
* forever. §24.1 is explicit: "an adapter version bump invalidates every node
|
|
15
|
-
* and edge that adapter produced". So overlap is computed on the id, and the
|
|
16
|
-
* version is what makes the *stale* rows recognisable.
|
|
17
|
-
*
|
|
18
|
-
* `repo` is a second, equally load-bearing part of the same match, added after
|
|
19
|
-
* a real defect: a store holding more than one repository (`descry-runtime`'s
|
|
20
|
-
* graph correlator merges a frontend and a backend into one store to trace
|
|
21
|
-
* across them, per DEC-228) can have two repos using the same adapter with an
|
|
22
|
-
* overlapping relative file path — `src/index.ts`, `package.json`, anything
|
|
23
|
-
* common. Without `repo` in this match, writing the second repo's batch reads
|
|
24
|
-
* as "adapter X re-ran over a file it already owned" and evicts the first
|
|
25
|
-
* repo's run outright — silent cross-repository data loss, not a wrong
|
|
26
|
-
* answer. `invalidateAdapter` below is intentionally *not* repo-scoped — its
|
|
27
|
-
* own contract is "every repo," a different, explicitly global operation.
|
|
28
|
-
*
|
|
29
|
-
* ## 2. Prior runs are matched by file-set *overlap*, not equality
|
|
30
|
-
*
|
|
31
|
-
* A batch is the unit of invalidation, but the batch that previously owned a
|
|
32
|
-
* file may have covered a different set of files. Deleting only exact-matching
|
|
33
|
-
* runs leaves two rows for the same symbol; deleting only the intersection is
|
|
34
|
-
* impossible, because an edge has no file. So every prior run of the same
|
|
35
|
-
* adapter that touches *any* of these files is replaced whole — and the files
|
|
36
|
-
* it covered that this batch does not re-supply are reported as `evictedFiles`.
|
|
37
|
-
* Reporting them is the honest-degradation rule (principle 7): the caller is
|
|
38
|
-
* told what fell out, rather than discovering it as a missing edge next week.
|
|
39
|
-
*
|
|
40
|
-
* ## 3. A run also cleans up after its own previous write
|
|
41
|
-
*
|
|
42
|
-
* The run id is content-derived from producer, repo, commit and file set — not
|
|
43
|
-
* from the nodes. So an adapter re-run at the same commit over the same files
|
|
44
|
-
* lands on the *same* run id, and "delete the prior runs" excludes it by
|
|
45
|
-
* definition. Without a self-clean pass, rows that run no longer produces stay
|
|
46
|
-
* forever: the upsert refreshes what is still there and nothing removes what is
|
|
47
|
-
* not. Every write therefore ends by deleting its own run's rows that this batch
|
|
48
|
-
* did not supply.
|
|
49
|
-
*
|
|
50
|
-
* ## 4. Re-supplied nodes are updated, not deleted and recreated
|
|
51
|
-
*
|
|
52
|
-
* A node id is stable across file moves by construction (DEC-004), so re-parsing
|
|
53
|
-
* a file normally yields the ids that were already there. Deleting a prior run's
|
|
54
|
-
* nodes wholesale would cascade away every edge *other* runs had pointing into
|
|
55
|
-
* them, and those runs will not be re-run. Instead: upsert the ids this batch
|
|
56
|
-
* supplies, then delete the prior run — whose remaining nodes are exactly those
|
|
57
|
-
* it no longer produces. Edges into a node that genuinely disappeared do cascade
|
|
58
|
-
* away, and are reported as `orphanedEdges`, because keeping an edge to a node
|
|
59
|
-
* that no longer exists is the wrong-edge failure the precision rule forbids.
|
|
2
|
+
* Batch writer (DEC-015). Prior runs matched on adapter id+repo (not full `producedBy` — §24.1 version bumps invalidate; DEC-228 multi-repo stores need `repo` or cross-repo files silently evict each other), by file-set *overlap* not equality (evicted files reported, principle 7).
|
|
3
|
+
* Run id is content-derived, so a same-commit re-run self-cleans what it stopped producing. Re-supplied nodes are upserted, not deleted+recreated (DEC-004 stable ids) — only genuinely-gone nodes cascade, reported as `orphanedEdges`.
|
|
60
4
|
*/
|
|
61
5
|
import { createHash } from "node:crypto";
|
|
62
6
|
import { canonicalJson, edgeId } from "@descryy/ir";
|
|
@@ -69,49 +13,30 @@ function splitProducer(producedBy) {
|
|
|
69
13
|
function hash128(input) {
|
|
70
14
|
return createHash("sha256").update(input, "utf8").digest("hex").slice(0, 32);
|
|
71
15
|
}
|
|
72
|
-
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* Re-ingesting an identical batch must land on the same row, or "idempotent"
|
|
76
|
-
* cannot even be stated as a property. `sourceFiles` is sorted first so that an
|
|
77
|
-
* adapter listing the same files in a different order does not create a second
|
|
78
|
-
* run for identical work.
|
|
79
|
-
*/
|
|
16
|
+
/** Run id derived from the batch's content, never a counter — re-ingesting an
|
|
17
|
+
* identical batch must land on the same row. `sourceFiles` sorted first so
|
|
18
|
+
* order doesn't create a second run for identical work. */
|
|
80
19
|
export function runIdFor(batch) {
|
|
81
20
|
return `r1:${hash128(canonicalJson([batch.producedBy, batch.repo, batch.commitSha, [...batch.sourceFiles].sort()]))}`;
|
|
82
21
|
}
|
|
83
22
|
function unresolvedId(ref) {
|
|
84
23
|
return `u1:${hash128(canonicalJson([ref.fromNodeId, ref.edgeType, ref.rawTarget, ref.file, ref.line, ref.producedBy]))}`;
|
|
85
24
|
}
|
|
86
|
-
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* It used to, as a hand-rolled `` `e1:${hash128(...)}` ``, and that was a
|
|
90
|
-
* latent identity split: DEC-054 moved the prefixes to `n2:`/`e2:` and this
|
|
91
|
-
* copy was never moved with them, so `edgeId()` and the stored id agreed on
|
|
92
|
-
* every byte of the hash and disagreed on the prefix. Nothing caught it
|
|
93
|
-
* because `edgeId()` had zero callers — the first caller to look an edge up
|
|
94
|
-
* by its public id would have silently matched nothing, which is DEC-055's
|
|
95
|
-
* measured failure (16 joins to 0, no error anywhere) reproduced inside the
|
|
96
|
-
* engine rather than across two adapters.
|
|
97
|
-
*
|
|
98
|
-
* One identity, one function. See DEC-NEXT-edge-id-prefix-split.
|
|
99
|
-
*/
|
|
25
|
+
/** Delegates to `@descryy/ir`'s `edgeId()` — must never re-derive this. A
|
|
26
|
+
* hand-rolled copy once drifted on the DEC-054 prefix bump (16 joins to 0,
|
|
27
|
+
* DEC-055). One identity, one function (DEC-NEXT-edge-id-prefix-split). */
|
|
100
28
|
function edgeRowId(edge) {
|
|
101
29
|
return edgeId(edge.from, edge.to, edge.type);
|
|
102
30
|
}
|
|
103
|
-
/**
|
|
104
|
-
*
|
|
105
|
-
* this function does no validation, on purpose. Two validators drift; one
|
|
106
|
-
* validator at the boundary is a boundary.
|
|
107
|
-
*/
|
|
31
|
+
/** Writes one normalised batch. Input must already have passed the Normaliser —
|
|
32
|
+
* this does no validation, on purpose. Two validators drift. */
|
|
108
33
|
export function writeBatch(driver, batch, options = {}) {
|
|
109
34
|
const now = options.now ?? Date.now;
|
|
110
35
|
const runId = runIdFor(batch);
|
|
111
36
|
const { id: adapterId, version } = splitProducer(batch.producedBy);
|
|
112
37
|
const incomingFiles = new Set(batch.sourceFiles);
|
|
113
38
|
return driver.transaction(() => {
|
|
114
|
-
//
|
|
39
|
+
// Find the prior runs this batch supersedes.
|
|
115
40
|
const priorRuns = driver
|
|
116
41
|
.prepare("SELECT id, source_files FROM adapter_runs WHERE adapter_id = ? AND repo = ? AND id != ?")
|
|
117
42
|
.all(adapterId, batch.repo, runId)
|
|
@@ -128,23 +53,17 @@ export function writeBatch(driver, batch, options = {}) {
|
|
|
128
53
|
}
|
|
129
54
|
const ownRunIds = [runId, ...priorRuns.map((r) => r.id)];
|
|
130
55
|
const foreignEdgesBefore = countForeignEdges(driver, ownRunIds);
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
// row — which caps out at SQLITE_MAX_VARIABLE_NUMBER on a large batch.
|
|
56
|
+
// Scratch list of what this batch supplies, so self-clean is a set difference
|
|
57
|
+
// rather than a `NOT IN (?, ...)` that caps out on SQLITE_MAX_VARIABLE_NUMBER.
|
|
134
58
|
driver.exec(`CREATE TEMP TABLE IF NOT EXISTS supplied (kind TEXT NOT NULL, id TEXT NOT NULL, PRIMARY KEY (kind, id))`);
|
|
135
59
|
driver.exec("DELETE FROM temp.supplied");
|
|
136
60
|
const remember = driver.prepare("INSERT OR IGNORE INTO temp.supplied (kind, id) VALUES (?, ?)");
|
|
137
|
-
// Rows owned by a run
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
// invalidation, and the fresh reading wins even when it reached a lower
|
|
141
|
-
// resolution — stale R3 facts about code that has since changed are worse
|
|
142
|
-
// than accurate R1 ones. Without this, a degraded re-run would fail the
|
|
143
|
-
// merge test, leave the row owned by the prior run, and then lose it to that
|
|
144
|
-
// run's cascade a few statements later.
|
|
61
|
+
// Rows owned by a replaced run always overwrite, never merge (DEC-012 merge
|
|
62
|
+
// logic is for two *different* producers; same-adapter re-run is invalidation —
|
|
63
|
+
// the fresh reading wins even at lower resolution, since stale facts are worse).
|
|
145
64
|
for (const run of priorRuns)
|
|
146
65
|
remember.run("run", run.id);
|
|
147
|
-
//
|
|
66
|
+
// The run row, before anything references it.
|
|
148
67
|
driver
|
|
149
68
|
.prepare(`INSERT INTO adapter_runs
|
|
150
69
|
(id, repo, workspace, commit_sha, adapter_id, adapter_version, produced_by,
|
|
@@ -157,12 +76,9 @@ export function writeBatch(driver, batch, options = {}) {
|
|
|
157
76
|
reached_resolution = excluded.reached_resolution,
|
|
158
77
|
written_at = excluded.written_at`)
|
|
159
78
|
.run(runId, batch.repo, batch.workspace ?? null, batch.commitSha, adapterId, version, batch.producedBy, batch.reachedResolution, JSON.stringify([...batch.sourceFiles].sort()), batch.sourceFiles.length, now());
|
|
160
|
-
// ON CONFLICT DO UPDATE, never INSERT OR REPLACE
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
// id is content-derived, re-ingesting an identical batch hits that path
|
|
164
|
-
// every single time.
|
|
165
|
-
// --- nodes: upsert first, so ids that survive keep their inbound edges ---
|
|
79
|
+
// ON CONFLICT DO UPDATE, never INSERT OR REPLACE — REPLACE is DELETE+INSERT
|
|
80
|
+
// and would cascade away this run's own nodes/edges via foreign keys.
|
|
81
|
+
// Nodes: upsert first, so surviving ids keep their inbound edges.
|
|
166
82
|
const insertNode = driver.prepare(`INSERT INTO nodes
|
|
167
83
|
(id, type, name, file_path, start_line, end_line, language, produced_by, resolution, attrs, run_id)
|
|
168
84
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -178,23 +94,20 @@ export function writeBatch(driver, batch, options = {}) {
|
|
|
178
94
|
insertNode.run(node.id, node.type, node.name, node.file, node.range?.startLine ?? null, node.range?.endLine ?? null, node.language, node.producedBy, node.resolution, canonicalJson(node.attrs), runId);
|
|
179
95
|
remember.run("node", node.id);
|
|
180
96
|
}
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
// longer produces. The cascade removes it; the counts above and below say
|
|
184
|
-
// how much.
|
|
97
|
+
// Retire the prior runs — everything still pointing at them is what this
|
|
98
|
+
// batch no longer produces; the cascade removes it.
|
|
185
99
|
if (priorRuns.length > 0) {
|
|
186
100
|
const del = driver.prepare("DELETE FROM adapter_runs WHERE id = ?");
|
|
187
101
|
for (const run of priorRuns)
|
|
188
102
|
del.run(run.id);
|
|
189
103
|
}
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
// that removes what it stopped producing.
|
|
104
|
+
// And after this run's own previous write — a same-commit re-run reuses the
|
|
105
|
+
// run id, so this is the only thing that removes what it stopped producing.
|
|
193
106
|
driver
|
|
194
107
|
.prepare(`DELETE FROM nodes WHERE run_id = ?
|
|
195
108
|
AND id NOT IN (SELECT id FROM temp.supplied WHERE kind = 'node')`)
|
|
196
109
|
.run(runId);
|
|
197
|
-
//
|
|
110
|
+
// Edges and unresolved references.
|
|
198
111
|
const insertEdge = driver.prepare(`INSERT INTO edges
|
|
199
112
|
(id, source, target, type, resolution, confidence, produced_by, observed_by_run, attrs, run_id)
|
|
200
113
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -227,9 +140,7 @@ export function writeBatch(driver, batch, options = {}) {
|
|
|
227
140
|
.prepare(`DELETE FROM unresolved_refs WHERE run_id = ?
|
|
228
141
|
AND id NOT IN (SELECT id FROM temp.supplied WHERE kind = 'ref')`)
|
|
229
142
|
.run(runId);
|
|
230
|
-
//
|
|
231
|
-
// vanished by cascade — an endpoint node ceased to exist. Measured directly
|
|
232
|
-
// rather than inferred from a before/after total, which dedupe would skew.
|
|
143
|
+
// Foreign edges that vanished can only be cascade from a dead endpoint node.
|
|
233
144
|
const orphaned = foreignEdgesBefore - countForeignEdges(driver, ownRunIds);
|
|
234
145
|
return {
|
|
235
146
|
runId,
|
|
@@ -249,14 +160,9 @@ function countForeignEdges(driver, ownRunIds) {
|
|
|
249
160
|
.prepare(`SELECT COUNT(*) AS n FROM edges WHERE run_id NOT IN (${placeholders})`)
|
|
250
161
|
.get(...ownRunIds)?.n ?? 0);
|
|
251
162
|
}
|
|
252
|
-
/**
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
* §24.1's invalidation rule, as its own operation rather than a side effect of
|
|
256
|
-
* writing. It is deliberately separate from `writeBatch`: an upgraded adapter
|
|
257
|
-
* usually re-runs over a subset of files first, and folding this into the write
|
|
258
|
-
* path would make a partial re-run delete data it was never going to replace.
|
|
259
|
-
*/
|
|
163
|
+
/** Removes everything an adapter ever produced, at every version, every repo
|
|
164
|
+
* (§24.1). Kept separate from `writeBatch` — folding it in would make a
|
|
165
|
+
* partial re-run delete data it was never going to replace. */
|
|
260
166
|
export function invalidateAdapter(driver, adapterId) {
|
|
261
167
|
return driver.transaction(() => {
|
|
262
168
|
const result = driver.prepare("DELETE FROM adapter_runs WHERE adapter_id = ?").run(adapterId);
|
package/dist/store/writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/store/writer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/store/writer.ts"],"names":[],"mappings":"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"}
|