@descryy/core 0.4.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 +23 -11
- package/dist/contracts/engine.d.ts.map +1 -1
- package/dist/contracts/engine.js +23 -11
- package/dist/contracts/engine.js.map +1 -1
- package/dist/contracts/orphans.d.ts +18 -122
- package/dist/contracts/orphans.d.ts.map +1 -1
- package/dist/contracts/orphans.js +36 -134
- 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 +9 -90
- package/dist/graph/build.d.ts.map +1 -1
- package/dist/graph/build.js +15 -62
- 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/merge.d.ts +8 -88
- package/dist/graph/merge.d.ts.map +1 -1
- package/dist/graph/merge.js +9 -93
- 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 +4 -16
- package/dist/query/memory.d.ts.map +1 -1
- package/dist/query/memory.js +9 -22
- 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 +27 -93
- 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 +30 -104
- 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 +9 -19
- 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 +25 -126
- 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 +33 -133
- 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 +6 -55
- package/dist/validation/attributes.d.ts.map +1 -1
- package/dist/validation/attributes.js +6 -55
- package/dist/validation/attributes.js.map +1 -1
- 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 +7 -1
- package/dist/validation/env.d.ts.map +1 -1
- package/dist/validation/env.js +3 -1
- package/dist/validation/env.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 +11 -72
- package/dist/validation/migration-integrity.d.ts.map +1 -1
- package/dist/validation/migration-integrity.js +16 -79
- package/dist/validation/migration-integrity.js.map +1 -1
- package/dist/validation/migrations.d.ts +22 -101
- package/dist/validation/migrations.d.ts.map +1 -1
- package/dist/validation/migrations.js +19 -83
- 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 +15 -82
- 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
|
@@ -1,68 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* `attrs.migrationDir` on a file-scoped node.
|
|
5
|
-
*
|
|
6
|
-
* UAT round 3's field report named this the third of four defects Descry
|
|
7
|
-
* missed on a genuine feature: a migration file sat in the repository root
|
|
8
|
-
* instead of the project's migrations directory, so the migration tool never
|
|
9
|
-
* saw it, and its declared parent was off the branch's actual lineage. Both
|
|
10
|
-
* are provable from the graph alone — a contradiction between two producers
|
|
11
|
-
* that must agree, not an inference about behaviour — which is what makes them
|
|
12
|
-
* defects rather than leads.
|
|
13
|
-
*
|
|
14
|
-
* ## The judgement this check makes that the producer deliberately did not
|
|
15
|
-
*
|
|
16
|
-
* The adapter records `migrationDir` — the file's own containing directory,
|
|
17
|
-
* a POSIX-path detail with one right answer — and leaves *which* directory is
|
|
18
|
-
* "the" project's migrations directory to whoever consumes it, because that is
|
|
19
|
-
* a judgement, not a derivation. This module makes that judgement the only way
|
|
20
|
-
* it can be made without naming a migration tool: from the graph itself. The
|
|
21
|
-
* directory most of the migration-revision-carrying modules agree on **is**
|
|
22
|
-
* the project's migrations directory, empirically, the same way `env.ts`'s
|
|
23
|
-
* coverage guard treats a repository's own declaration surface as ground
|
|
24
|
-
* truth rather than a hardcoded list of platform variable names. A single
|
|
25
|
-
* outlier against that consensus is exactly the orphaned-migration shape;
|
|
26
|
-
* asking the question needs no literal path and names no framework.
|
|
27
|
-
*
|
|
28
|
-
* A repository with too few migration-revision-carrying modules to form a
|
|
29
|
-
* consensus, or one split evenly between two directories, cannot answer this
|
|
30
|
-
* question honestly — so it does not answer it. See `MIN_MODULES_FOR_CONSENSUS`
|
|
31
|
-
* and the tie handling below. Precision over recall: a wrong consensus would
|
|
32
|
-
* turn every legitimate migration in a project's true directory into a false
|
|
33
|
-
* "outside the migrations directory" finding.
|
|
34
|
-
*
|
|
35
|
-
* ## The revision chain, and its four cases
|
|
36
|
-
*
|
|
37
|
-
* `migrationDownRevision` is `null` for a declared root (never a finding —
|
|
38
|
-
* every chain starts somewhere), a string for a single parent, an array for a
|
|
39
|
-
* merge revision (each element checked independently), and the literal string
|
|
40
|
-
* `"unknown"` when the producer could not read it as any of the first three.
|
|
41
|
-
* `"unknown"` is not treated as `null`, the same "not a synonym" rule
|
|
42
|
-
* `MigrationOp.section` already carries one field over: an unreadable chain is
|
|
43
|
-
* refused, counted and disclosed, never reported as broken.
|
|
44
|
-
*/
|
|
1
|
+
/** Migration-integrity: location + revision-chain findings from migrationRevision/
|
|
2
|
+
* migrationDownRevision/migrationDir (UAT round 3's 3rd of 4 missed defects). Migrations
|
|
3
|
+
* directory is inferred by graph consensus, never hardcoded; `"unknown"` downRevision is refused, never null. */
|
|
45
4
|
import { fileScopedNodes } from "./nodes.js";
|
|
46
5
|
import { MIGRATION_DIRECTORY } from "./migrations.js";
|
|
47
6
|
const DEFAULT_MAX_FINDINGS = 25;
|
|
48
|
-
/**
|
|
49
|
-
*
|
|
50
|
-
* not a consensus — a repository with one migration cannot disagree with
|
|
51
|
-
* itself, and two tied at one apiece is not a majority either way.
|
|
52
|
-
*/
|
|
7
|
+
/** Below this many modules, a directory count isn't a consensus — one migration can't disagree
|
|
8
|
+
* with itself, and two tied at one apiece isn't a majority either way. */
|
|
53
9
|
const MIN_MODULES_FOR_CONSENSUS = 2;
|
|
54
10
|
function isNonEmptyStringArray(value) {
|
|
55
11
|
return Array.isArray(value) && value.length > 0 && value.every((v) => typeof v === "string" && v !== "");
|
|
56
12
|
}
|
|
57
|
-
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* A `downRevision` that is not `null`, `"unknown"`, a non-empty string or a
|
|
62
|
-
* non-empty array of strings is **dropped, not guessed at** — defaulting it to
|
|
63
|
-
* root or to a single parent would manufacture a chain claim the producer
|
|
64
|
-
* never made.
|
|
65
|
-
*/
|
|
13
|
+
/** Pulls migrationRevision/migrationDownRevision/migrationDir off a node, refusing anything
|
|
14
|
+
* malformed. A downRevision that isn't null/"unknown"/a non-empty string or string array is
|
|
15
|
+
* dropped, not guessed at — defaulting it would manufacture a chain claim never made. */
|
|
66
16
|
export function readMigrationRevision(attrs, file, resolution) {
|
|
67
17
|
if (attrs === undefined)
|
|
68
18
|
return null;
|
|
@@ -90,15 +40,9 @@ export function readMigrationRevision(attrs, file, resolution) {
|
|
|
90
40
|
function nameDir(dir) {
|
|
91
41
|
return dir === "" ? "the repository root" : dir;
|
|
92
42
|
}
|
|
93
|
-
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* A tie is broken toward a directory matching the generic migration-directory
|
|
97
|
-
* *shape* `migrations.ts` already matches for the format half of this check's
|
|
98
|
-
* sibling — a shape check, not a guess at which one is "real". A tie that
|
|
99
|
-
* survives that is genuinely ambiguous and is refused, disclosed, never
|
|
100
|
-
* guessed.
|
|
101
|
-
*/
|
|
43
|
+
/** The directory most modules agree on. A tie is broken toward one matching migrations.ts's
|
|
44
|
+
* generic directory shape (a shape check, not a guess). A tie surviving that is genuinely
|
|
45
|
+
* ambiguous — refused and disclosed, never guessed. */
|
|
102
46
|
function consensusDirectory(infos) {
|
|
103
47
|
if (infos.length < MIN_MODULES_FOR_CONSENSUS) {
|
|
104
48
|
return {
|
|
@@ -127,12 +71,8 @@ function consensusDirectory(infos) {
|
|
|
127
71
|
"MIGRATION_OUTSIDE_DIRECTORY did not run.",
|
|
128
72
|
};
|
|
129
73
|
}
|
|
130
|
-
/**
|
|
131
|
-
*
|
|
132
|
-
* triple in the graph, from a file-scoped node — the shared carrier both
|
|
133
|
-
* `checkMigrationIntegrity` and `checkMigrationHeads` read, so the two checks
|
|
134
|
-
* cannot disagree about what counts as "a migration node".
|
|
135
|
-
*/
|
|
74
|
+
/** Every well-formed migration triple in the graph — shared by `checkMigrationIntegrity` and
|
|
75
|
+
* `checkMigrationHeads` so the two checks can't disagree on what counts as a migration node. */
|
|
136
76
|
function collectMigrationRevisions(provider, limit) {
|
|
137
77
|
const nodes = fileScopedNodes(provider, limit);
|
|
138
78
|
const infos = [];
|
|
@@ -151,16 +91,13 @@ export function checkMigrationIntegrity(provider, options = {}) {
|
|
|
151
91
|
const maxFindings = options.maxFindings ?? DEFAULT_MAX_FINDINGS;
|
|
152
92
|
const scoped = options.files === undefined ? null : new Set(options.files);
|
|
153
93
|
const notes = [];
|
|
154
|
-
// The revision registry spans the whole graph even when
|
|
155
|
-
//
|
|
156
|
-
// diff, and consensus about the project's migrations directory is a fact
|
|
157
|
-
// about the whole repository, not about which files changed.
|
|
94
|
+
// The revision registry spans the whole graph even when scoped to a diff — a down_revision
|
|
95
|
+
// often names a migration outside the diff, and directory consensus is a whole-repo fact.
|
|
158
96
|
const { infos, truncated: nodesTruncated } = collectMigrationRevisions(provider, options.limit);
|
|
159
97
|
const ran = infos.length > 0;
|
|
160
98
|
const revisionProvidedBy = new Map();
|
|
161
99
|
for (const info of infos) {
|
|
162
|
-
// First file wins
|
|
163
|
-
// precedent as env.ts's requiredReads.
|
|
100
|
+
// First file wins for a stable answer between runs — same precedent as env.ts's requiredReads.
|
|
164
101
|
const existing = revisionProvidedBy.get(info.revision);
|
|
165
102
|
if (existing === undefined || info.file < existing.file)
|
|
166
103
|
revisionProvidedBy.set(info.revision, info);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-integrity.js","sourceRoot":"","sources":["../../src/validation/migration-integrity.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"migration-integrity.js","sourceRoot":"","sources":["../../src/validation/migration-integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
* is: **zero `.sql` files inside a migration directory across fifteen reference
|
|
9
|
-
* repositories**, against 3,301 migrations written as program code. The code half
|
|
10
|
-
* arrives through `attrs.migrationOps` and is an adapter's to produce.
|
|
11
|
-
*
|
|
12
|
-
* ## The scope fence, which is what makes this Class A
|
|
13
|
-
*
|
|
14
|
-
* Appendix B.3 settles rollback readiness as Class A against two sources that
|
|
15
|
-
* called it B, and the resolution turns entirely on what is claimed:
|
|
16
|
-
*
|
|
17
|
-
* > **"this migration contains a destructive operation"** — a fact, and a
|
|
18
|
-
* > deterministic pattern match establishes it.
|
|
19
|
-
* >
|
|
20
|
-
* > **"this migration is unsafe to roll back"** — an inference, requiring the
|
|
21
|
-
* > consumer-impact analysis §15.3 explicitly separates this check from.
|
|
22
|
-
*
|
|
23
|
-
* Every sentence produced here is written to stay behind that fence. The finding
|
|
24
|
-
* names the operation, the object and the line; it does not characterise risk.
|
|
25
|
-
*
|
|
26
|
-
* ## What counts as destructive, and the things deliberately left out
|
|
27
|
-
*
|
|
28
|
-
* Only operations that **destroy data**. `DROP INDEX`, `DROP CONSTRAINT`,
|
|
29
|
-
* `DROP VIEW`, `DROP TRIGGER` and `DROP FUNCTION` are all recoverable by
|
|
30
|
-
* re-running the definition and none of them loses a row, so including them
|
|
31
|
-
* would triple the finding count with statements nobody needs to see. A rename
|
|
32
|
-
* is carried separately: the data survives, so it is not the same claim as a
|
|
33
|
-
* drop, but every reader of the old name breaks.
|
|
34
|
-
*
|
|
35
|
-
* ## Section detection is tool-blind on purpose
|
|
36
|
-
*
|
|
37
|
-
* Directional migrations mark their halves with a comment directive. Matching a
|
|
38
|
-
* specific tool's spelling would put that tool's name in engine code — rule 1,
|
|
39
|
-
* the violation the boundary lint already caught once in this directory. So the
|
|
40
|
-
* **shape** is matched instead: a comment carrying a directive word followed by
|
|
41
|
-
* an up/down keyword, in either the `+name Up` form or a bare `-- Up`. Any tool
|
|
42
|
-
* using that shape works; none of them is named.
|
|
43
|
-
*/
|
|
44
|
-
/**
|
|
45
|
-
* What an operation does to data.
|
|
46
|
-
*
|
|
47
|
-
* `RENAME` is separate because it is a different claim: the rows survive, and
|
|
48
|
-
* what breaks is every reader of the old name.
|
|
49
|
-
*/
|
|
1
|
+
/** §15.3's rollback-readiness check, format half — DDL is a format, not a
|
|
2
|
+
* language, so it stays below the IR boundary. DEC-122: zero `.sql` files
|
|
3
|
+
* across 15 repos vs 3,301 migrations as code (adapter's territory).
|
|
4
|
+
* Class A (Appx B.3): reports only "this drops data", never the inference
|
|
5
|
+
* "unsafe to roll back". Section markers matched by shape, not tool name. */
|
|
6
|
+
/** What an operation does to data. `RENAME` is separate — rows survive,
|
|
7
|
+
* but every reader of the old name breaks. */
|
|
50
8
|
export type DestructiveKind = "DROP_TABLE" | "DROP_COLUMN" | "DROP_SCHEMA" | "TRUNCATE" | "RENAME";
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* `reverse` is the whole reason this field exists — a drop there undoes the
|
|
55
|
-
* forward migration and is supposed to be present. `unknown` is not a synonym
|
|
56
|
-
* for `forward`: it means the file declares no direction, and DEC-122 refuses to
|
|
57
|
-
* report on it.
|
|
58
|
-
*/
|
|
9
|
+
/** Which half of a directional migration a statement sits in. `reverse` is
|
|
10
|
+
* supposed to contain drops (undoing forward). `unknown` ≠ `forward` — no
|
|
11
|
+
* declared direction, and DEC-122 refuses to report on it. */
|
|
59
12
|
export type MigrationSection = "forward" | "reverse" | "unknown";
|
|
60
13
|
export interface MigrationOp {
|
|
61
14
|
readonly kind: DestructiveKind;
|
|
@@ -69,12 +22,8 @@ export interface MigrationOp {
|
|
|
69
22
|
export interface MigrationFile {
|
|
70
23
|
readonly file: string;
|
|
71
24
|
readonly ops: readonly MigrationOp[];
|
|
72
|
-
/**
|
|
73
|
-
*
|
|
74
|
-
* discounted — and so the *order* is known. Create-then-drop is a temporary
|
|
75
|
-
* object; drop-then-create is an idempotent setup script. Different reasons,
|
|
76
|
-
* and without the line they are indistinguishable.
|
|
77
|
-
*/
|
|
25
|
+
/** Objects this file creates, with line — so a later drop of one can be
|
|
26
|
+
* discounted. Create-then-drop is temporary; drop-then-create is idempotent setup. */
|
|
78
27
|
readonly creates: readonly {
|
|
79
28
|
readonly name: string;
|
|
80
29
|
readonly line: number;
|
|
@@ -92,52 +41,24 @@ export interface MigrationScan {
|
|
|
92
41
|
export interface MigrationScanOptions {
|
|
93
42
|
readonly maxDepth?: number;
|
|
94
43
|
readonly maxFiles?: number;
|
|
95
|
-
/**
|
|
96
|
-
*
|
|
97
|
-
* config-surface walk through `skipDirectory`, so the two cannot disagree about
|
|
98
|
-
* what counts as vendored.
|
|
99
|
-
*/
|
|
44
|
+
/** Adapters' declared noise dirs (DEC-110); shared with the config-surface
|
|
45
|
+
* walk via `skipDirectory` so the two can't disagree. */
|
|
100
46
|
readonly noiseDirectories?: readonly string[];
|
|
101
47
|
}
|
|
102
|
-
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* Path-based rather than content-based, and named after what the directory *is*
|
|
106
|
-
* rather than after any tool that creates it. A `.sql` file in a `schema/`
|
|
107
|
-
* directory is a definition, not a change, and reading it as one would report
|
|
108
|
-
* every `CREATE`-then-`DROP` setup script in the repository.
|
|
109
|
-
*/
|
|
110
|
-
/**
|
|
111
|
-
* Exported for `migration-integrity.ts`'s directory tie-break: a generic
|
|
112
|
-
* migration-directory *shape*, not a language or framework name, so reusing
|
|
113
|
-
* it there names no more than this file already does.
|
|
114
|
-
*/
|
|
48
|
+
/** A directory holding migrations — path-based, not content-based, so a
|
|
49
|
+
* `.sql` file in `schema/` (a definition, not a change) isn't misread.
|
|
50
|
+
* Exported for `migration-integrity.ts`'s tie-break: a generic shape, no tool/framework name. */
|
|
115
51
|
export declare const MIGRATION_DIRECTORY: RegExp;
|
|
116
52
|
interface Statement {
|
|
117
53
|
readonly text: string;
|
|
118
54
|
readonly line: number;
|
|
119
55
|
}
|
|
120
|
-
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
* A plain split would cut a statement in half at the first semicolon inside a
|
|
125
|
-
* default value, which is a real thing to find in a migration.
|
|
126
|
-
*
|
|
127
|
-
* **This duplicates the splitter in `adapter-sql`, deliberately and with the
|
|
128
|
-
* cost recorded** (DEC-122). `@descryy/core` cannot depend on an adapter —
|
|
129
|
-
* adapters depend on core — so the alternative to a second copy is inverting the
|
|
130
|
-
* boundary the repository split exists to hold. If a third caller appears, the
|
|
131
|
-
* right home is `@descryy/ir`.
|
|
132
|
-
*/
|
|
56
|
+
/** Splits DDL on `;`, skipping separators inside strings/identifiers/comments.
|
|
57
|
+
* Duplicates `adapter-sql`'s splitter (core can't depend on an adapter,
|
|
58
|
+
* DEC-122) — a third caller should move this to `@descryy/ir`. */
|
|
133
59
|
export declare function statements(sql: string): readonly Statement[];
|
|
134
|
-
/**
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* Returns `null` for everything unrecognised, which is the overwhelming
|
|
138
|
-
* majority and is correct: an unclassified statement is not a silent pass, it is
|
|
139
|
-
* counted by the caller and disclosed.
|
|
140
|
-
*/
|
|
60
|
+
/** Classifies one statement; `null` for unrecognised (the majority) is
|
|
61
|
+
* correct — the caller counts and discloses it, not a silent pass. */
|
|
141
62
|
export declare function classifyStatement(text: string, line: number, section: MigrationSection): MigrationOp | null;
|
|
142
63
|
/** Read one migration file's operations, tracking which section each sits in. */
|
|
143
64
|
export declare function readMigration(text: string): Omit<MigrationFile, "file">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/validation/migrations.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/validation/migrations.ts"],"names":[],"mappings":"AAAA;;;;8EAI8E;AAO9E;+CAC+C;AAC/C,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,aAAa,GACb,aAAa,GACb,UAAU,GACV,QAAQ,CAAC;AAEb;;+DAE+D;AAC/D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC;2FACuF;IACvF,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9E,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;8DAC0D;IAC1D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAKD;;kGAEkG;AAClG,eAAO,MAAM,mBAAmB,QAA4D,CAAC;AAK7F,UAAU,SAAS;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;mEAEmE;AACnE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,SAAS,EAAE,CA6D5D;AAMD;uEACuE;AACvE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,WAAW,GAAG,IAAI,CAuDpB;AAYD,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAwCvE;AAED,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAgE9F"}
|
|
@@ -1,80 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* it names nothing the Canonical IR boundary forbids. Same limit, too — this half
|
|
7
|
-
* sees only what is written as DDL, and DEC-122 measured exactly how little that
|
|
8
|
-
* is: **zero `.sql` files inside a migration directory across fifteen reference
|
|
9
|
-
* repositories**, against 3,301 migrations written as program code. The code half
|
|
10
|
-
* arrives through `attrs.migrationOps` and is an adapter's to produce.
|
|
11
|
-
*
|
|
12
|
-
* ## The scope fence, which is what makes this Class A
|
|
13
|
-
*
|
|
14
|
-
* Appendix B.3 settles rollback readiness as Class A against two sources that
|
|
15
|
-
* called it B, and the resolution turns entirely on what is claimed:
|
|
16
|
-
*
|
|
17
|
-
* > **"this migration contains a destructive operation"** — a fact, and a
|
|
18
|
-
* > deterministic pattern match establishes it.
|
|
19
|
-
* >
|
|
20
|
-
* > **"this migration is unsafe to roll back"** — an inference, requiring the
|
|
21
|
-
* > consumer-impact analysis §15.3 explicitly separates this check from.
|
|
22
|
-
*
|
|
23
|
-
* Every sentence produced here is written to stay behind that fence. The finding
|
|
24
|
-
* names the operation, the object and the line; it does not characterise risk.
|
|
25
|
-
*
|
|
26
|
-
* ## What counts as destructive, and the things deliberately left out
|
|
27
|
-
*
|
|
28
|
-
* Only operations that **destroy data**. `DROP INDEX`, `DROP CONSTRAINT`,
|
|
29
|
-
* `DROP VIEW`, `DROP TRIGGER` and `DROP FUNCTION` are all recoverable by
|
|
30
|
-
* re-running the definition and none of them loses a row, so including them
|
|
31
|
-
* would triple the finding count with statements nobody needs to see. A rename
|
|
32
|
-
* is carried separately: the data survives, so it is not the same claim as a
|
|
33
|
-
* drop, but every reader of the old name breaks.
|
|
34
|
-
*
|
|
35
|
-
* ## Section detection is tool-blind on purpose
|
|
36
|
-
*
|
|
37
|
-
* Directional migrations mark their halves with a comment directive. Matching a
|
|
38
|
-
* specific tool's spelling would put that tool's name in engine code — rule 1,
|
|
39
|
-
* the violation the boundary lint already caught once in this directory. So the
|
|
40
|
-
* **shape** is matched instead: a comment carrying a directive word followed by
|
|
41
|
-
* an up/down keyword, in either the `+name Up` form or a bare `-- Up`. Any tool
|
|
42
|
-
* using that shape works; none of them is named.
|
|
43
|
-
*/
|
|
1
|
+
/** §15.3's rollback-readiness check, format half — DDL is a format, not a
|
|
2
|
+
* language, so it stays below the IR boundary. DEC-122: zero `.sql` files
|
|
3
|
+
* across 15 repos vs 3,301 migrations as code (adapter's territory).
|
|
4
|
+
* Class A (Appx B.3): reports only "this drops data", never the inference
|
|
5
|
+
* "unsafe to roll back". Section markers matched by shape, not tool name. */
|
|
44
6
|
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
45
7
|
import { join, relative, sep } from "node:path";
|
|
46
8
|
import { skipDirectory } from "./sources.js";
|
|
47
9
|
const DEFAULT_MAX_DEPTH = 8;
|
|
48
10
|
const DEFAULT_MAX_FILES = 20_000;
|
|
49
|
-
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* Path-based rather than content-based, and named after what the directory *is*
|
|
53
|
-
* rather than after any tool that creates it. A `.sql` file in a `schema/`
|
|
54
|
-
* directory is a definition, not a change, and reading it as one would report
|
|
55
|
-
* every `CREATE`-then-`DROP` setup script in the repository.
|
|
56
|
-
*/
|
|
57
|
-
/**
|
|
58
|
-
* Exported for `migration-integrity.ts`'s directory tie-break: a generic
|
|
59
|
-
* migration-directory *shape*, not a language or framework name, so reusing
|
|
60
|
-
* it there names no more than this file already does.
|
|
61
|
-
*/
|
|
11
|
+
/** A directory holding migrations — path-based, not content-based, so a
|
|
12
|
+
* `.sql` file in `schema/` (a definition, not a change) isn't misread.
|
|
13
|
+
* Exported for `migration-integrity.ts`'s tie-break: a generic shape, no tool/framework name. */
|
|
62
14
|
export const MIGRATION_DIRECTORY = /(^|\/)(migrations?|migrate|versions|changelogs?)(\/|$)/i;
|
|
63
15
|
/** A directive comment carrying a direction, in either common shape. */
|
|
64
16
|
const SECTION_MARKER = /^\s*--\s*(?:\+\w+\s+)?(up|down)\b/i;
|
|
65
|
-
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* A plain split would cut a statement in half at the first semicolon inside a
|
|
70
|
-
* default value, which is a real thing to find in a migration.
|
|
71
|
-
*
|
|
72
|
-
* **This duplicates the splitter in `adapter-sql`, deliberately and with the
|
|
73
|
-
* cost recorded** (DEC-122). `@descryy/core` cannot depend on an adapter —
|
|
74
|
-
* adapters depend on core — so the alternative to a second copy is inverting the
|
|
75
|
-
* boundary the repository split exists to hold. If a third caller appears, the
|
|
76
|
-
* right home is `@descryy/ir`.
|
|
77
|
-
*/
|
|
17
|
+
/** Splits DDL on `;`, skipping separators inside strings/identifiers/comments.
|
|
18
|
+
* Duplicates `adapter-sql`'s splitter (core can't depend on an adapter,
|
|
19
|
+
* DEC-122) — a third caller should move this to `@descryy/ir`. */
|
|
78
20
|
export function statements(sql) {
|
|
79
21
|
const found = [];
|
|
80
22
|
let buffer = "";
|
|
@@ -141,23 +83,14 @@ export function statements(sql) {
|
|
|
141
83
|
function unquote(identifier) {
|
|
142
84
|
return identifier.replace(/^["`[]+|["`\]]+$/g, "").toLowerCase();
|
|
143
85
|
}
|
|
144
|
-
/**
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
* Returns `null` for everything unrecognised, which is the overwhelming
|
|
148
|
-
* majority and is correct: an unclassified statement is not a silent pass, it is
|
|
149
|
-
* counted by the caller and disclosed.
|
|
150
|
-
*/
|
|
86
|
+
/** Classifies one statement; `null` for unrecognised (the majority) is
|
|
87
|
+
* correct — the caller counts and discloses it, not a silent pass. */
|
|
151
88
|
export function classifyStatement(text, line, section) {
|
|
152
89
|
const flat = text.replace(/\s+/g, " ").trim();
|
|
153
90
|
const guarded = /\bIF\s+EXISTS\b/i.test(flat);
|
|
154
|
-
// ALTER TABLE … DROP COLUMN
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
// The negative lookahead is not decoration. `ALTER TABLE t DROP CONSTRAINT c`
|
|
158
|
-
// has the same shape with the keyword omitted, and without the guard the
|
|
159
|
-
// constraint name is read as a column name — a data-loss claim about a
|
|
160
|
-
// statement that loses no data. Found by a test, which is where it belongs.
|
|
91
|
+
// ALTER TABLE … DROP COLUMN checked before bare DROP (substring match).
|
|
92
|
+
// Negative lookahead matters: `DROP CONSTRAINT c` without it reads as a
|
|
93
|
+
// column drop — a false data-loss claim. Caught by a test.
|
|
161
94
|
const dropColumn = /^ALTER\s+TABLE\s+(?:IF\s+EXISTS\s+)?([\w."`[\]]+)\s+DROP\s+(?:COLUMN\s+)?(?:IF\s+EXISTS\s+)?(?!CONSTRAINT\b|INDEX\b|CHECK\b|PRIMARY\b|FOREIGN\b|UNIQUE\b|DEFAULT\b|NOT\b|PARTITION\b)([\w."`[\]]+)/i.exec(flat);
|
|
162
95
|
if (dropColumn !== null) {
|
|
163
96
|
return {
|
|
@@ -277,6 +210,9 @@ export function scanMigrations(root, options = {}) {
|
|
|
277
210
|
directory = statSync(full).isDirectory();
|
|
278
211
|
}
|
|
279
212
|
catch {
|
|
213
|
+
// Same as an unreadable dir, on one entry (broken symlink, perm error,
|
|
214
|
+
// race). Disclosed via `unreadable` (rule 7), not dropped silently.
|
|
215
|
+
unreadable.push(rel(root, full));
|
|
280
216
|
continue;
|
|
281
217
|
}
|
|
282
218
|
if (directory) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/validation/migrations.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/validation/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,9 @@ import type { AdjacencyProvider } from "../query/provider.ts";
|
|
|
10
10
|
* The node types that stand for a whole file.
|
|
11
11
|
*
|
|
12
12
|
* **Every shipped adapter emits `MODULE` for a file and not one of them emits
|
|
13
|
-
* `FILE`** — verified across all
|
|
13
|
+
* `FILE`** — verified across all ten language adapters, not assumed. The count
|
|
14
|
+
* was written as nine and a tenth shipped; the fact it carries did not change,
|
|
15
|
+
* which is exactly why the wrong number survived. The checks in this directory
|
|
14
16
|
* were written against `FILE` alone, their tests minted `FILE` nodes, their
|
|
15
17
|
* benches minted `FILE` nodes, and all three gates passed while the graph half of
|
|
16
18
|
* every check was unable to fire on any real repository. The number stayed right
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/validation/nodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/validation/nodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,sBAAsB,6BAA8B,CAAC;AAElE,+DAA+D;AAC/D,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAgBpE"}
|
package/dist/validation/nodes.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* The node types that stand for a whole file.
|
|
9
9
|
*
|
|
10
10
|
* **Every shipped adapter emits `MODULE` for a file and not one of them emits
|
|
11
|
-
* `FILE`** — verified across all
|
|
11
|
+
* `FILE`** — verified across all ten language adapters, not assumed. The count
|
|
12
|
+
* was written as nine and a tenth shipped; the fact it carries did not change,
|
|
13
|
+
* which is exactly why the wrong number survived. The checks in this directory
|
|
12
14
|
* were written against `FILE` alone, their tests minted `FILE` nodes, their
|
|
13
15
|
* benches minted `FILE` nodes, and all three gates passed while the graph half of
|
|
14
16
|
* every check was unable to fire on any real repository. The number stayed right
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/validation/nodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/validation/nodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AAElE,+DAA+D;AAC/D,MAAM,UAAU,eAAe,CAC7B,QAA2B,EAC3B,KAAc;IAEd,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjG,SAAS,GAAG,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,yEAAyE;YACzE,qCAAqC;YACrC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YACxD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC"}
|