@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
package/dist/tiers/ladder.js
CHANGED
|
@@ -1,93 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Nine adapters state a tier in a doc comment. **DEC-075 §6 says a tier is
|
|
8
|
-
* generated from `capabilities()` and the gate results, never written in
|
|
9
|
-
* prose**, and until now nothing implemented that, so the only tier claims in
|
|
10
|
-
* the repository were the ones a human typed. That is the single piece of
|
|
11
|
-
* standing dishonesty in the codebase: a claim about what works for a language,
|
|
12
|
-
* made by the person who wanted it to be true, in a comment nothing checks.
|
|
13
|
-
*
|
|
14
|
-
* ## The ladder, from §11A.11
|
|
15
|
-
*
|
|
16
|
-
* | tier | what works | what it costs |
|
|
17
|
-
* | --- | --- | --- |
|
|
18
|
-
* | **S — Full** | contract *shape* matching, data propagation, oracle-derived tests | R3 + router extractor + ORM extractor |
|
|
19
|
-
* | **A — Contract** | endpoint matching, path-level orphans, migration DAG | R2/R3 + router extractor |
|
|
20
|
-
* | **B — Graph** | blast radius, impact scoring, test discovery, in-language root cause | R2 adapter |
|
|
21
|
-
* | **C — Signal** | env/config, rollback readiness, hidden dependency, file-level blast radius | R0, one grammar and one query set |
|
|
22
|
-
*
|
|
23
|
-
* A tier is **cumulative**: S implies A implies B implies C. So a language is
|
|
24
|
-
* awarded the highest tier whose requirements are *all* met, and the
|
|
25
|
-
* requirements of every tier below it are re-checked rather than assumed —
|
|
26
|
-
* because an adapter can reach R3 and still not emit a `FUNCTION`, and a ladder
|
|
27
|
-
* that assumed monotonicity would hand it an A on the strength of its routes.
|
|
28
|
-
*
|
|
29
|
-
* ## What a requirement may be
|
|
30
|
-
*
|
|
31
|
-
* Three kinds, and the split is the honest part:
|
|
32
|
-
*
|
|
33
|
-
* - **`capability`** — read straight off `capabilities()`. Machine-checked, no
|
|
34
|
-
* judgement. `capabilities()` is itself machine-checked against what the
|
|
35
|
-
* adapter actually emitted (DEC-070), so this is evidence, not a promise.
|
|
36
|
-
* - **`conformance`** — the corpus passes at the resolution the tier claims.
|
|
37
|
-
* Machine-checked by running the harness.
|
|
38
|
-
* - **`attested`** — a fact no machine in this repository can establish, so it
|
|
39
|
-
* is *declared* with its evidence and marked as declared. There is exactly
|
|
40
|
-
* one, and it is DEC-075's second condition: a ≥200-edge precision draw on
|
|
41
|
-
* two repositories **the adapter's author did not choose**. A machine can
|
|
42
|
-
* check the 200 and the two; it cannot check "did not choose", which is a
|
|
43
|
-
* fact about a person's intent. Recording it as attested is what stops the
|
|
44
|
-
* generator laundering a human judgement into a computed result.
|
|
45
|
-
*/
|
|
1
|
+
/** §11A.11's tiers (S/A/B/C, cumulative) as machine-checkable requirements —
|
|
2
|
+
* DEC-075 §6: a tier is generated from `capabilities()` + gate results,
|
|
3
|
+
* never written in prose. Requirements re-checked per tier (not assumed
|
|
4
|
+
* monotonic). Three kinds: `capability`/`conformance` (machine-checked),
|
|
5
|
+
* `attested` (DEC-075's one human-judgment fact, declared with evidence). */
|
|
46
6
|
/** Highest first. The order the generator walks, and the only place it lives. */
|
|
47
7
|
export const TIERS = ["S", "A", "B", "C"];
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
// The first version of this file carried three: ROUTER_EXTRACTORS with
|
|
52
|
-
// `express`, `fastapi`, `flask`, `django`; ORM_EXTRACTORS with `sqlalchemy`,
|
|
53
|
-
// `prisma`, `gorm`; SCHEMA_EXTRACTORS with `pydantic`, `zod`. The boundary lint
|
|
54
|
-
// rejected all twelve, and it was right on the merits rather than pedantic:
|
|
55
|
-
// **that is engine code above the Canonical IR knowing what a Python web
|
|
56
|
-
// framework is called**, which is rule 1, and a list that must grow every time
|
|
57
|
-
// anyone writes an extractor is the shape rule 1 exists to prevent.
|
|
58
|
-
//
|
|
59
|
-
// The fix is not an allowlist entry. It is that the requirement was
|
|
60
|
-
// **redundant**. "A router extractor is bound" was asking, indirectly, whether
|
|
61
|
-
// the adapter can produce routes — and the requirement immediately above it
|
|
62
|
-
// already asks that directly, in vocabulary terms: does it emit `API_ROUTE`,
|
|
63
|
-
// `API_ENDPOINT` and `SERVES_API`. An adapter emitting those has a router
|
|
64
|
-
// extractor by definition, whatever it is called, and one that does not cannot
|
|
65
|
-
// be rescued by a name in `frameworkExtractors`. The same held for the ORM
|
|
66
|
-
// requirement against `MODEL`/`READS`/`WRITES`, and for the schema requirement
|
|
67
|
-
// against `DTO`/`USES_TYPE`.
|
|
68
|
-
//
|
|
69
|
-
// So the name check bought nothing and cost the boundary. Deleting it changed
|
|
70
|
-
// no adapter's tier, which is the evidence that it was never load-bearing.
|
|
71
|
-
//
|
|
72
|
-
// The general form, worth keeping: **when engine code needs to know what a
|
|
73
|
-
// framework is, ask what it produced.** The vocabulary is the shared language
|
|
74
|
-
// precisely so the engine never has to learn a framework's name.
|
|
75
|
-
// ---------------------------------------------------------------------------
|
|
76
|
-
// ---------------------------------------------------------------------------
|
|
77
|
-
// The ladder itself.
|
|
78
|
-
// ---------------------------------------------------------------------------
|
|
8
|
+
// No framework-name list here — an earlier version had one (express,
|
|
9
|
+
// fastapi, sqlalchemy, prisma...) and the boundary lint rejected it (rule 1:
|
|
10
|
+
// engine code above the IR can't name a framework). Ask what it produced instead.
|
|
79
11
|
const C_REQUIREMENTS = [
|
|
80
12
|
{
|
|
81
13
|
id: "C.parses",
|
|
82
14
|
kind: "capability",
|
|
83
15
|
statement: "the adapter produces a file-level graph",
|
|
84
|
-
// `MODULE`, not `FILE
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
// emits or declares `FILE`**, and `MODULE` is what a file resolves to in
|
|
88
|
-
// all nine. A requirement no producer can satisfy does not make a generator
|
|
89
|
-
// strict, it makes it useless, and the ladder would have been "corrected"
|
|
90
|
-
// by whoever needed a tier first.
|
|
16
|
+
// `MODULE`, not `FILE` — an earlier version required both and every
|
|
17
|
+
// adapter failed Tier C (no adapter emits `FILE`; `MODULE` is what a
|
|
18
|
+
// file resolves to in all nine). Unsatisfiable requirements get "corrected" away.
|
|
91
19
|
nodeTypes: ["MODULE"],
|
|
92
20
|
},
|
|
93
21
|
{
|
|
@@ -179,12 +107,8 @@ export const LADDER = [
|
|
|
179
107
|
{ tier: "A", name: "Contract", requires: A_REQUIREMENTS },
|
|
180
108
|
{ tier: "S", name: "Full", requires: S_REQUIREMENTS },
|
|
181
109
|
];
|
|
182
|
-
/**
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* Cumulative and re-checked rather than assumed — see the header. `C` is the
|
|
186
|
-
* floor, so `requirementsFor("C")` is C's own list.
|
|
187
|
-
*/
|
|
110
|
+
/** Every requirement a tier needs, including tiers beneath it — cumulative,
|
|
111
|
+
* re-checked not assumed. `C` is the floor. */
|
|
188
112
|
export function requirementsFor(tier) {
|
|
189
113
|
const order = ["C", "B", "A", "S"];
|
|
190
114
|
const upTo = order.indexOf(tier);
|
package/dist/tiers/ladder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ladder.js","sourceRoot":"","sources":["../../src/tiers/ladder.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ladder.js","sourceRoot":"","sources":["../../src/tiers/ladder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* UAT round 3's field report named this the second of four defects Descry
|
|
6
|
-
* missed on a genuine feature: a function read `org.google_place_id` and
|
|
7
|
-
* `org.tripadvisor_location_id` where `org` was typed as a model that declares
|
|
8
|
-
* neither, and any call raises. The report's own framing — *"a type checker is
|
|
9
|
-
* already in the pipeline, its diagnostics discarded"* — is not quite what the
|
|
10
|
-
* adapter does; the adapter runs no type checker at all. What it runs instead
|
|
11
|
-
* is the functional equivalent for this one question: it walks a value's
|
|
12
|
-
* declared type (including its base chain), and — only where a type's field
|
|
13
|
-
* list is provably complete, the same guard `USES_TYPE`'s shape comparison
|
|
14
|
-
* rests on — records which of the attributes actually read are absent from
|
|
15
|
-
* that list. That fact arrives on the `READS` edge as `attrs.unresolvedFields`.
|
|
16
|
-
* This check turns it into a finding; it invents nothing of its own.
|
|
17
|
-
*
|
|
18
|
-
* ## Precision over recall, stated once because it governs every line below
|
|
19
|
-
*
|
|
20
|
-
* A field absent from a type's declaration is not always a field absent at
|
|
21
|
-
* runtime: a dynamically assigned attribute, a mixin declared outside this
|
|
22
|
-
* graph, or a column a mapping layer adds without a matching declaration can
|
|
23
|
-
* each make the read valid. The adapter has already narrowed this — it only
|
|
24
|
-
* emits `unresolvedFields` when the type's own field list is provably
|
|
25
|
-
* complete, the same standard that lets a contract's shape comparison run at
|
|
26
|
-
* all — and this check does not try to widen the population past what the
|
|
27
|
-
* adapter certified. **If `unresolvedFields` is absent from an edge's attrs,
|
|
28
|
-
* this check says nothing about that edge.** Silence, never a guess.
|
|
29
|
-
*
|
|
30
|
-
* ## Where the enumeration starts
|
|
31
|
-
*
|
|
32
|
-
* There is no node to seed a traversal from — the question is a property of
|
|
33
|
-
* the whole set of `READS` edges, the same shape `contracts/engine.ts` and
|
|
34
|
-
* `contracts/orphans.ts` already enumerate from: every `TYPE_LIKE_NODE_TYPES`
|
|
35
|
-
* node (`CLASS`, `MODEL`, `DTO` — a query over the frozen vocabulary, not an
|
|
36
|
-
* extension of it), then every `READS` edge incoming to it.
|
|
37
|
-
*
|
|
38
|
-
* ## What the location is, and what it is honestly not
|
|
39
|
-
*
|
|
40
|
-
* Neither the edge nor its `attrs` carries the line of the specific attribute
|
|
41
|
-
* access — only the set of field names. The location reported is the reading
|
|
42
|
-
* function's own file and starting line, because that is everything the
|
|
43
|
-
* producer actually recorded; the report says so rather than inventing a more
|
|
44
|
-
* precise line than the evidence supports.
|
|
45
|
-
*/
|
|
1
|
+
/** Attribute-existence check (UAT round 3's 2nd of 4 missed defects): reads `attrs.unresolvedFields`
|
|
2
|
+
* off a READS edge, emitted only when the type's field list is provably complete (same guard
|
|
3
|
+
* USES_TYPE rests on). Absent = silence, never a guess. Location is the reader's file/line, not the access. */
|
|
46
4
|
import { type ResolutionLevel } from "@descryy/ir";
|
|
47
5
|
import type { AdjacencyProvider, QueryResult } from "../query/provider.ts";
|
|
48
6
|
export interface AttributeFinding {
|
|
@@ -77,16 +35,9 @@ export interface AttributeCheckOptions {
|
|
|
77
35
|
/** Cap on type-like nodes enumerated per type. Truncation is reported. */
|
|
78
36
|
readonly limit?: number;
|
|
79
37
|
}
|
|
80
|
-
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* `hasFieldInfo` is true whenever the edge carries either `fields` or
|
|
85
|
-
* `unresolvedFields` — the signal that the producer actually evaluated this
|
|
86
|
-
* edge against a declared type, whatever it concluded. Distinguishing "the
|
|
87
|
-
* producer looked and found nothing wrong" from "nothing here ever looked" is
|
|
88
|
-
* the same disclosure `readsAvailable` makes in `env.ts`.
|
|
89
|
-
*/
|
|
38
|
+
/** Pulls attrs.unresolvedFields off a READS edge, refusing malformed entries. `hasFieldInfo` is
|
|
39
|
+
* true whenever `fields` or `unresolvedFields` is present — signals the producer evaluated this
|
|
40
|
+
* edge at all, distinguishing "looked and found nothing" from "never looked" (same as env.ts's readsAvailable). */
|
|
90
41
|
export declare function readUnresolvedFields(attrs: Readonly<Record<string, unknown>> | undefined): {
|
|
91
42
|
readonly unresolvedFields: readonly string[];
|
|
92
43
|
readonly hasFieldInfo: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/validation/attributes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/validation/attributes.ts"],"names":[],"mappings":"AAAA;;gHAEgH;AAEhH,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEvF,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,uHAAuH;IACvH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,wGAAwG;QACxG,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACrC,CAAC;IACF,qGAAqG;IACrG,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAID;;oHAEoH;AACpH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG;IAC1F,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAeA;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,qBAA0B,GAClC,WAAW,CAAC,eAAe,CAAC,CA6H9B"}
|
|
@@ -1,60 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* UAT round 3's field report named this the second of four defects Descry
|
|
6
|
-
* missed on a genuine feature: a function read `org.google_place_id` and
|
|
7
|
-
* `org.tripadvisor_location_id` where `org` was typed as a model that declares
|
|
8
|
-
* neither, and any call raises. The report's own framing — *"a type checker is
|
|
9
|
-
* already in the pipeline, its diagnostics discarded"* — is not quite what the
|
|
10
|
-
* adapter does; the adapter runs no type checker at all. What it runs instead
|
|
11
|
-
* is the functional equivalent for this one question: it walks a value's
|
|
12
|
-
* declared type (including its base chain), and — only where a type's field
|
|
13
|
-
* list is provably complete, the same guard `USES_TYPE`'s shape comparison
|
|
14
|
-
* rests on — records which of the attributes actually read are absent from
|
|
15
|
-
* that list. That fact arrives on the `READS` edge as `attrs.unresolvedFields`.
|
|
16
|
-
* This check turns it into a finding; it invents nothing of its own.
|
|
17
|
-
*
|
|
18
|
-
* ## Precision over recall, stated once because it governs every line below
|
|
19
|
-
*
|
|
20
|
-
* A field absent from a type's declaration is not always a field absent at
|
|
21
|
-
* runtime: a dynamically assigned attribute, a mixin declared outside this
|
|
22
|
-
* graph, or a column a mapping layer adds without a matching declaration can
|
|
23
|
-
* each make the read valid. The adapter has already narrowed this — it only
|
|
24
|
-
* emits `unresolvedFields` when the type's own field list is provably
|
|
25
|
-
* complete, the same standard that lets a contract's shape comparison run at
|
|
26
|
-
* all — and this check does not try to widen the population past what the
|
|
27
|
-
* adapter certified. **If `unresolvedFields` is absent from an edge's attrs,
|
|
28
|
-
* this check says nothing about that edge.** Silence, never a guess.
|
|
29
|
-
*
|
|
30
|
-
* ## Where the enumeration starts
|
|
31
|
-
*
|
|
32
|
-
* There is no node to seed a traversal from — the question is a property of
|
|
33
|
-
* the whole set of `READS` edges, the same shape `contracts/engine.ts` and
|
|
34
|
-
* `contracts/orphans.ts` already enumerate from: every `TYPE_LIKE_NODE_TYPES`
|
|
35
|
-
* node (`CLASS`, `MODEL`, `DTO` — a query over the frozen vocabulary, not an
|
|
36
|
-
* extension of it), then every `READS` edge incoming to it.
|
|
37
|
-
*
|
|
38
|
-
* ## What the location is, and what it is honestly not
|
|
39
|
-
*
|
|
40
|
-
* Neither the edge nor its `attrs` carries the line of the specific attribute
|
|
41
|
-
* access — only the set of field names. The location reported is the reading
|
|
42
|
-
* function's own file and starting line, because that is everything the
|
|
43
|
-
* producer actually recorded; the report says so rather than inventing a more
|
|
44
|
-
* precise line than the evidence supports.
|
|
45
|
-
*/
|
|
1
|
+
/** Attribute-existence check (UAT round 3's 2nd of 4 missed defects): reads `attrs.unresolvedFields`
|
|
2
|
+
* off a READS edge, emitted only when the type's field list is provably complete (same guard
|
|
3
|
+
* USES_TYPE rests on). Absent = silence, never a guess. Location is the reader's file/line, not the access. */
|
|
46
4
|
import { TYPE_LIKE_NODE_TYPES } from "@descryy/ir";
|
|
47
5
|
const DEFAULT_MAX_FINDINGS = 25;
|
|
48
|
-
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* `hasFieldInfo` is true whenever the edge carries either `fields` or
|
|
53
|
-
* `unresolvedFields` — the signal that the producer actually evaluated this
|
|
54
|
-
* edge against a declared type, whatever it concluded. Distinguishing "the
|
|
55
|
-
* producer looked and found nothing wrong" from "nothing here ever looked" is
|
|
56
|
-
* the same disclosure `readsAvailable` makes in `env.ts`.
|
|
57
|
-
*/
|
|
6
|
+
/** Pulls attrs.unresolvedFields off a READS edge, refusing malformed entries. `hasFieldInfo` is
|
|
7
|
+
* true whenever `fields` or `unresolvedFields` is present — signals the producer evaluated this
|
|
8
|
+
* edge at all, distinguishing "looked and found nothing" from "never looked" (same as env.ts's readsAvailable). */
|
|
58
9
|
export function readUnresolvedFields(attrs) {
|
|
59
10
|
if (attrs === undefined)
|
|
60
11
|
return { unresolvedFields: [], hasFieldInfo: false, malformed: 0 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/validation/attributes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/validation/attributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* ## This is a query, not a check, and the distinction is the design
|
|
7
|
-
*
|
|
8
|
-
* Checks 1 and 2 emit findings. This one emits **structure**: for every variable
|
|
9
|
-
* the repository knows about, where it is declared, where it is read, and what
|
|
10
|
-
* transitively depends on the files that read it. §15.3 says it feeds check 1,
|
|
11
|
-
* and that is exactly what it is for — a missing variable read by a module forty
|
|
12
|
-
* others import is a different sentence from one read by a single script, and
|
|
13
|
-
* until now the check had no way to tell them apart.
|
|
14
|
-
*
|
|
15
|
-
* Because it produces no findings of its own, it has **no precision gate of its
|
|
16
|
-
* own**, and that is stated rather than quietly skipped. Its correctness rests
|
|
17
|
-
* entirely on the `IMPORTS` edges beneath it, whose precision is already gated
|
|
18
|
-
* elsewhere. What this module can get wrong on its own is the *join* — attaching
|
|
19
|
-
* the wrong file to a variable — and that is what its bench exercises.
|
|
20
|
-
*
|
|
21
|
-
* ## No new vocabulary, which is the whole reason it is shaped this way
|
|
22
|
-
*
|
|
23
|
-
* *"New capabilities are new queries over these edges, not new types."* A
|
|
24
|
-
* variable still has no node (DEC-120). The dependent set is `scopeChange`
|
|
25
|
-
* seeded with the **file that reads the variable** — impact flowing outward from
|
|
26
|
-
* a changed file is precisely the existing traversal, with its budgets, its decay
|
|
27
|
-
* scoring and its truncation disclosure already correct.
|
|
28
|
-
*
|
|
29
|
-
* Taking the scope rather than re-deriving it is deliberate: a second traversal
|
|
30
|
-
* with its own rules would drift from the one the rest of the engine uses, and
|
|
31
|
-
* the first symptom would be two different blast radiuses for the same file.
|
|
32
|
-
*
|
|
33
|
-
* ## Why R1, and what it degrades to
|
|
34
|
-
*
|
|
35
|
-
* Reaching *"what depends on this"* needs module resolution — `IMPORTS` edges
|
|
36
|
-
* that actually resolve. At R0 there are none, so the dependent set is empty and
|
|
37
|
-
* the report says the graph carried no import edges rather than reporting zero
|
|
38
|
-
* dependents as a fact. **An empty dependent set from a graph with no imports and
|
|
39
|
-
* an empty one from a genuinely unimported module are different statements**, and
|
|
40
|
-
* only the second is information.
|
|
41
|
-
*
|
|
42
|
-
* ## The completeness fence
|
|
43
|
-
*
|
|
44
|
-
* Every count here is *what this graph can see* and is worded that way. NFR-9's
|
|
45
|
-
* rule, and §15.3's own instruction for the neighbouring DB-impact check —
|
|
46
|
-
* *"output must state what the tool can see, never implying completeness"* —
|
|
47
|
-
* applies with equal force: a dependent set is a lower bound, always.
|
|
48
|
-
*/
|
|
1
|
+
/** §15.3's config dependency graph — a query, not a check: emits structure
|
|
2
|
+
* (which files transitively depend on a var's reader), no findings, so no
|
|
3
|
+
* precision gate of its own; correctness rests on `IMPORTS` edge precision.
|
|
4
|
+
* No new vocabulary — a var has no node (DEC-120); reuses `scopeChange`.
|
|
5
|
+
* Needs R1 (import resolution) or dependents are unknown, never zero. */
|
|
49
6
|
import type { AdjacencyProvider, QueryResult } from "../query/provider.ts";
|
|
50
7
|
import type { SurfaceScan } from "./sources.ts";
|
|
51
8
|
export interface ConfigDeclaration {
|
|
@@ -64,14 +21,8 @@ export interface ConfigVariable {
|
|
|
64
21
|
readonly name: string;
|
|
65
22
|
readonly declaredAt: readonly ConfigDeclaration[];
|
|
66
23
|
readonly readAt: readonly ConfigReadSite[];
|
|
67
|
-
/**
|
|
68
|
-
*
|
|
69
|
-
* this graph can see.
|
|
70
|
-
*
|
|
71
|
-
* **A lower bound, never a total.** Null when the dependent set could not be
|
|
72
|
-
* computed at all — no reading file is in the graph, or the graph carries no
|
|
73
|
-
* import edges — which is not the same as zero.
|
|
74
|
-
*/
|
|
24
|
+
/** Files transitively depending on a reader of this variable — a lower
|
|
25
|
+
* bound, never a total. Null (not zero) when it couldn't be computed. */
|
|
75
26
|
readonly dependents: number | null;
|
|
76
27
|
/** A few dependent files, for a reader who wants to look. */
|
|
77
28
|
readonly dependentSample: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-graph.d.ts","sourceRoot":"","sources":["../../src/validation/config-graph.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config-graph.d.ts","sourceRoot":"","sources":["../../src/validation/config-graph.ts"],"names":[],"mappings":"AAAA;;;;0EAI0E;AAI1E,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,CAAC;CAC/C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C;8EAC0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,yDAAyD;IACzD,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IAC9C,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,8DAA8D;QAC9D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,qEAAqE;IACrE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,oCAAoC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAAC,WAAW,CAAC,CA6K1B"}
|
|
@@ -1,51 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* ## This is a query, not a check, and the distinction is the design
|
|
7
|
-
*
|
|
8
|
-
* Checks 1 and 2 emit findings. This one emits **structure**: for every variable
|
|
9
|
-
* the repository knows about, where it is declared, where it is read, and what
|
|
10
|
-
* transitively depends on the files that read it. §15.3 says it feeds check 1,
|
|
11
|
-
* and that is exactly what it is for — a missing variable read by a module forty
|
|
12
|
-
* others import is a different sentence from one read by a single script, and
|
|
13
|
-
* until now the check had no way to tell them apart.
|
|
14
|
-
*
|
|
15
|
-
* Because it produces no findings of its own, it has **no precision gate of its
|
|
16
|
-
* own**, and that is stated rather than quietly skipped. Its correctness rests
|
|
17
|
-
* entirely on the `IMPORTS` edges beneath it, whose precision is already gated
|
|
18
|
-
* elsewhere. What this module can get wrong on its own is the *join* — attaching
|
|
19
|
-
* the wrong file to a variable — and that is what its bench exercises.
|
|
20
|
-
*
|
|
21
|
-
* ## No new vocabulary, which is the whole reason it is shaped this way
|
|
22
|
-
*
|
|
23
|
-
* *"New capabilities are new queries over these edges, not new types."* A
|
|
24
|
-
* variable still has no node (DEC-120). The dependent set is `scopeChange`
|
|
25
|
-
* seeded with the **file that reads the variable** — impact flowing outward from
|
|
26
|
-
* a changed file is precisely the existing traversal, with its budgets, its decay
|
|
27
|
-
* scoring and its truncation disclosure already correct.
|
|
28
|
-
*
|
|
29
|
-
* Taking the scope rather than re-deriving it is deliberate: a second traversal
|
|
30
|
-
* with its own rules would drift from the one the rest of the engine uses, and
|
|
31
|
-
* the first symptom would be two different blast radiuses for the same file.
|
|
32
|
-
*
|
|
33
|
-
* ## Why R1, and what it degrades to
|
|
34
|
-
*
|
|
35
|
-
* Reaching *"what depends on this"* needs module resolution — `IMPORTS` edges
|
|
36
|
-
* that actually resolve. At R0 there are none, so the dependent set is empty and
|
|
37
|
-
* the report says the graph carried no import edges rather than reporting zero
|
|
38
|
-
* dependents as a fact. **An empty dependent set from a graph with no imports and
|
|
39
|
-
* an empty one from a genuinely unimported module are different statements**, and
|
|
40
|
-
* only the second is information.
|
|
41
|
-
*
|
|
42
|
-
* ## The completeness fence
|
|
43
|
-
*
|
|
44
|
-
* Every count here is *what this graph can see* and is worded that way. NFR-9's
|
|
45
|
-
* rule, and §15.3's own instruction for the neighbouring DB-impact check —
|
|
46
|
-
* *"output must state what the tool can see, never implying completeness"* —
|
|
47
|
-
* applies with equal force: a dependent set is a lower bound, always.
|
|
48
|
-
*/
|
|
1
|
+
/** §15.3's config dependency graph — a query, not a check: emits structure
|
|
2
|
+
* (which files transitively depend on a var's reader), no findings, so no
|
|
3
|
+
* precision gate of its own; correctness rests on `IMPORTS` edge precision.
|
|
4
|
+
* No new vocabulary — a var has no node (DEC-120); reuses `scopeChange`.
|
|
5
|
+
* Needs R1 (import resolution) or dependents are unknown, never zero. */
|
|
49
6
|
import { scopeChange } from "../scoping/traverse.js";
|
|
50
7
|
import { readEnvReads } from "./env.js";
|
|
51
8
|
import { fileScopedNodes } from "./nodes.js";
|
|
@@ -56,7 +13,7 @@ export function buildConfigGraph(provider, scan, options = {}) {
|
|
|
56
13
|
const maxTraversals = options.maxTraversals ?? DEFAULT_MAX_TRAVERSALS;
|
|
57
14
|
const budget = options.budget ?? DEFAULT_BUDGET;
|
|
58
15
|
const notes = [];
|
|
59
|
-
//
|
|
16
|
+
// declarations, from the repository
|
|
60
17
|
const declarations = new Map();
|
|
61
18
|
for (const surface of scan.surfaces) {
|
|
62
19
|
for (const declaration of surface.declarations) {
|
|
@@ -71,7 +28,7 @@ export function buildConfigGraph(provider, scan, options = {}) {
|
|
|
71
28
|
});
|
|
72
29
|
}
|
|
73
30
|
}
|
|
74
|
-
//
|
|
31
|
+
// reads, from the graph
|
|
75
32
|
const files = fileScopedNodes(provider, options.limit);
|
|
76
33
|
const reads = new Map();
|
|
77
34
|
const readingFile = new Map();
|
|
@@ -80,9 +37,8 @@ export function buildConfigGraph(provider, scan, options = {}) {
|
|
|
80
37
|
const path = node.file;
|
|
81
38
|
if (path === null)
|
|
82
39
|
continue;
|
|
83
|
-
// Counted across every file, not only
|
|
84
|
-
//
|
|
85
|
-
// that happen to read configuration would be a property of those files.
|
|
40
|
+
// Counted across every file, not only reading ones — "no import edges"
|
|
41
|
+
// is a property of the graph, not of the files that read config.
|
|
86
42
|
importEdges += provider.outgoing(node.id, { types: ["IMPORTS"], limit: 1 }).length;
|
|
87
43
|
const extracted = readEnvReads(node.attrs, path, node.resolution);
|
|
88
44
|
if (extracted.reads.length === 0)
|
|
@@ -96,7 +52,7 @@ export function buildConfigGraph(provider, scan, options = {}) {
|
|
|
96
52
|
}
|
|
97
53
|
}
|
|
98
54
|
const importsAvailable = importEdges > 0;
|
|
99
|
-
//
|
|
55
|
+
// assemble, and traverse for the ones worth traversing
|
|
100
56
|
const names = [...new Set([...declarations.keys(), ...reads.keys()])].sort();
|
|
101
57
|
const variables = [];
|
|
102
58
|
let declaredOnly = 0;
|
|
@@ -106,9 +62,8 @@ export function buildConfigGraph(provider, scan, options = {}) {
|
|
|
106
62
|
let traversals = 0;
|
|
107
63
|
let floor = 4;
|
|
108
64
|
let anyTruncated = false;
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
// declarations nothing reads.
|
|
65
|
+
// Read-site variables first — a dependent set means nothing without a
|
|
66
|
+
// reading file, and the traversal budget shouldn't go to unread declarations.
|
|
112
67
|
const ordered = names.sort((a, b) => {
|
|
113
68
|
const ar = reads.has(a) ? 0 : 1;
|
|
114
69
|
const br = reads.has(b) ? 0 : 1;
|
|
@@ -133,9 +88,8 @@ export function buildConfigGraph(provider, scan, options = {}) {
|
|
|
133
88
|
if (seeds.length > 0 && importsAvailable && traversals < maxTraversals) {
|
|
134
89
|
traversals += 1;
|
|
135
90
|
const scope = scopeChange(provider, [...new Set(seeds)], { budget });
|
|
136
|
-
// `changed` is the seed set itself
|
|
137
|
-
//
|
|
138
|
-
// report a variable read in one file as having one dependent.
|
|
91
|
+
// `changed` is the seed set (readers) itself, so count is `affected`
|
|
92
|
+
// alone — including seeds would give a single-file var one dependent.
|
|
139
93
|
const affected = scope.data.affected;
|
|
140
94
|
dependents = affected.length;
|
|
141
95
|
dependentSample = affected
|
|
@@ -159,7 +113,7 @@ export function buildConfigGraph(provider, scan, options = {}) {
|
|
|
159
113
|
});
|
|
160
114
|
}
|
|
161
115
|
variables.sort((a, b) => (b.dependents ?? -1) - (a.dependents ?? -1) || a.name.localeCompare(b.name));
|
|
162
|
-
//
|
|
116
|
+
// disclosures
|
|
163
117
|
if (!importsAvailable) {
|
|
164
118
|
notes.push("No resolved import edge is in this graph, so no dependent set could be computed for any " +
|
|
165
119
|
"variable. Every dependent count is reported as unknown rather than as zero: a module " +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-graph.js","sourceRoot":"","sources":["../../src/validation/config-graph.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config-graph.js","sourceRoot":"","sources":["../../src/validation/config-graph.ts"],"names":[],"mappings":"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"}
|
package/dist/validation/env.d.ts
CHANGED
|
@@ -163,6 +163,7 @@
|
|
|
163
163
|
* two, and the report says so rather than picking one.
|
|
164
164
|
*/
|
|
165
165
|
import type { ResolutionLevel } from "@descryy/ir";
|
|
166
|
+
import type { ContractClaim } from "../contracts/orphans.ts";
|
|
166
167
|
import type { AdjacencyProvider, QueryResult } from "../query/provider.ts";
|
|
167
168
|
import type { ConfigSurface, SurfaceScan } from "./sources.ts";
|
|
168
169
|
export type EnvFindingKind = "REQUIRED_NOT_DECLARED" | "SET_BUT_UNDOCUMENTED" | "NEW_READ_UNDECLARED";
|
|
@@ -171,8 +172,13 @@ export type EnvFindingKind = "REQUIRED_NOT_DECLARED" | "SET_BUT_UNDOCUMENTED" |
|
|
|
171
172
|
*
|
|
172
173
|
* `lead` follows `ROUTE_NOT_CALLED`'s precedent: a fact worth a look whose usual
|
|
173
174
|
* explanation is benign, worded so that a reader is not told it is a defect.
|
|
175
|
+
*
|
|
176
|
+
* An alias of `ContractClaim` rather than a second declaration of the same two
|
|
177
|
+
* words. Two checks that both answer "is this a fault claim?" must answer it in
|
|
178
|
+
* one vocabulary, or the composite above them has to translate — and a
|
|
179
|
+
* translation is where one of them silently acquires a third case.
|
|
174
180
|
*/
|
|
175
|
-
export type EnvClaim =
|
|
181
|
+
export type EnvClaim = ContractClaim;
|
|
176
182
|
export interface EnvEvidence {
|
|
177
183
|
readonly file: string;
|
|
178
184
|
readonly line: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/validation/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAEtG
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/validation/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAEtG;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC,uHAAuH;IACvH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,EAAE,CAAC;IACJ,QAAQ,CAAC,KAAK,EAAE;QACd,4CAA4C;QAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,8EAA8E;QAC9E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,0EAA0E;QAC1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B;;;;;WAKG;QACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,oEAAoE;QACpE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC,iFAAiF;IACjF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,yDAAyD;IACzD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAe1C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,eAAe,GAC1B;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmC9F;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,eAAoB,GAC5B,WAAW,CAAC,SAAS,CAAC,CAqWxB"}
|
package/dist/validation/env.js
CHANGED
|
@@ -428,7 +428,9 @@ export function checkEnvironment(provider, scan, options = {}) {
|
|
|
428
428
|
if (!readsAvailable) {
|
|
429
429
|
notes.push("No file in the graph carries environment reads, so nothing was checked against the code. " +
|
|
430
430
|
"This engine reads attrs.envReads on a file-scoped node — an array of { name, required, line } — " +
|
|
431
|
-
"
|
|
431
|
+
"which some adapters supply and others do not yet, so this sentence is about the " +
|
|
432
|
+
"producers behind this graph rather than about every producer there is. " +
|
|
433
|
+
"Only the configuration files were compared against each " +
|
|
432
434
|
"other. This is not a result of zero problems.");
|
|
433
435
|
}
|
|
434
436
|
else if (filesWithoutReads > 0) {
|