necropsy 0.1.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +33 -0
- data/CHANGELOG.md +44 -0
- data/MEASUREMENTS.md +112 -0
- data/README.md +233 -16
- data/Rakefile +3 -1
- data/bench/README.md +92 -0
- data/bench/audit.rb +113 -0
- data/bench/audits/0.2.1/audit.json +501 -0
- data/bench/audits/0.2.1/audit.md +55 -0
- data/bench/audits/0.2.1/baseline_performance.yml +16 -0
- data/bench/audits/0.2.1/config.yml +42 -0
- data/bench/audits/0.2.1/review.yml +56 -0
- data/bench/audits/0.2.1/review_queue.yml +3651 -0
- data/bench/corpora/v1/README.md +30 -0
- data/bench/corpora/v1/labels.yml +37 -0
- data/bench/corpora/v1/manifest.yml +63 -0
- data/bench/corpora/v1/rubocop.necropsy.yml +7 -0
- data/bench/corpora/v1/self.necropsy.yml +8 -0
- data/bench/corpora/v1/tools/debride.yml +42 -0
- data/bench/corpora/v1/tools/spoom.yml +12 -0
- data/bench/corpora/v1/tools/type_aware.yml +11 -0
- data/bench/golden/v1/candidate_union.json +21918 -0
- data/bench/golden/v1/metadata.json +12 -0
- data/bench/golden/v1/reports/dynamic_evidence.json +146 -0
- data/bench/golden/v1/reports/plain_ruby.json +135 -0
- data/bench/golden/v1/reports/rails.json +176 -0
- data/bench/golden/v1/reports/rubocop_1_75_0.json +26848 -0
- data/bench/golden/v1/reports/self.json +3449 -0
- data/bench/review_queue.rb +35 -0
- data/bench/run.rb +31 -0
- data/bench/schema/candidate-union-v1.schema.json +70 -0
- data/docs/impv_implementation_matrix.md +179 -0
- data/docs/migrations/0.2.1.md +57 -0
- data/docs/migrations/0.3.0.md +207 -0
- data/docs/migrations/0.4.0.md +13 -0
- data/docs/necropsy_performance_adr.md +43 -0
- data/docs/necropsy_scope_decisions.md +58 -0
- data/docs/necropsy_type_facts_adr.md +22 -0
- data/gemfiles/prism_min.gemfile +9 -0
- data/gemfiles/prism_min.gemfile.lock +50 -0
- data/lib/necropsy/analyzer.rb +121 -2
- data/lib/necropsy/analyzers/dynamic/coverage_collector.rb +81 -19
- data/lib/necropsy/analyzers/dynamic/coverage_importer.rb +104 -10
- data/lib/necropsy/analyzers/dynamic/coverband_importer.rb +74 -250
- data/lib/necropsy/analyzers/dynamic/coverband_payload_set.rb +149 -0
- data/lib/necropsy/analyzers/dynamic/observation_policy.rb +96 -0
- data/lib/necropsy/analyzers/dynamic/redis_input_limits.rb +121 -0
- data/lib/necropsy/analyzers/dynamic/redis_nonblocking_io.rb +94 -0
- data/lib/necropsy/analyzers/dynamic/redis_payload_loader.rb +165 -0
- data/lib/necropsy/analyzers/dynamic/redis_transport.rb +217 -0
- data/lib/necropsy/analyzers/dynamic/runtime_reference.rb +96 -0
- data/lib/necropsy/analyzers/dynamic/trace_point_collector.rb +225 -20
- data/lib/necropsy/analyzers/dynamic/trace_point_importer.rb +3 -1
- data/lib/necropsy/analyzers/legacy_result_adapter.rb +226 -0
- data/lib/necropsy/analyzers/static/cha.rb +33 -69
- data/lib/necropsy/analyzers/static/name_resolution.rb +151 -21
- data/lib/necropsy/analyzers/static/rta.rb +249 -25
- data/lib/necropsy/ast_scanner/call_recording.rb +275 -0
- data/lib/necropsy/ast_scanner/call_site_creation.rb +54 -0
- data/lib/necropsy/ast_scanner/definition_creation.rb +43 -0
- data/lib/necropsy/ast_scanner/dsl_macros.rb +532 -0
- data/lib/necropsy/ast_scanner/method_definitions.rb +358 -0
- data/lib/necropsy/ast_scanner/references.rb +115 -0
- data/lib/necropsy/ast_scanner/ruby_semantics.rb +263 -0
- data/lib/necropsy/ast_scanner/traversal.rb +347 -0
- data/lib/necropsy/ast_scanner/value_definitions.rb +78 -0
- data/lib/necropsy/ast_scanner.rb +89 -564
- data/lib/necropsy/bench/candidate_union.rb +555 -0
- data/lib/necropsy/bench/claim_gate.rb +112 -0
- data/lib/necropsy/bench/evaluator.rb +356 -24
- data/lib/necropsy/bench/finding_facts.rb +152 -0
- data/lib/necropsy/bench/precision_gate.rb +144 -0
- data/lib/necropsy/bench/release_audit/adversarial_runner.rb +56 -0
- data/lib/necropsy/bench/release_audit/artifact_writer.rb +112 -0
- data/lib/necropsy/bench/release_audit/config_validator.rb +112 -0
- data/lib/necropsy/bench/release_audit/git_snapshot.rb +36 -0
- data/lib/necropsy/bench/release_audit/performance_gate.rb +165 -0
- data/lib/necropsy/bench/release_audit/run_provenance.rb +133 -0
- data/lib/necropsy/bench/release_audit.rb +360 -0
- data/lib/necropsy/bench/report_normalizer.rb +140 -0
- data/lib/necropsy/bench/review_queue.rb +154 -0
- data/lib/necropsy/bench/safety_mutation_harness.rb +59 -0
- data/lib/necropsy/bench/seed_runner.rb +408 -0
- data/lib/necropsy/bounded_canonicalizer.rb +218 -0
- data/lib/necropsy/cache/scan_cache.rb +94 -18
- data/lib/necropsy/call_site_identity.rb +54 -0
- data/lib/necropsy/cli.rb +296 -53
- data/lib/necropsy/clock.rb +40 -0
- data/lib/necropsy/confidence/scorer.rb +181 -58
- data/lib/necropsy/configuration.rb +339 -18
- data/lib/necropsy/convention_rules.rb +138 -0
- data/lib/necropsy/definition_identity/canonical_digest.rb +278 -0
- data/lib/necropsy/definition_identity.rb +37 -0
- data/lib/necropsy/diagnostics.rb +342 -0
- data/lib/necropsy/embedded_ruby.rb +55 -0
- data/lib/necropsy/entry_points/plain.rb +125 -7
- data/lib/necropsy/entry_points/rails.rb +422 -105
- data/lib/necropsy/entry_points/test.rb +6 -1
- data/lib/necropsy/flow_interpreter.rb +460 -0
- data/lib/necropsy/graph/blocker_matching.rb +338 -0
- data/lib/necropsy/graph/call_graph.rb +1234 -62
- data/lib/necropsy/graph/definition_index.rb +149 -0
- data/lib/necropsy/graph/dynamic_evidence_tracking.rb +206 -0
- data/lib/necropsy/graph/evidence_store.rb +213 -0
- data/lib/necropsy/graph/resolution_store.rb +497 -0
- data/lib/necropsy/graph_self_check.rb +79 -0
- data/lib/necropsy/guardrail/baseline.rb +359 -13
- data/lib/necropsy/guardrail/diff.rb +5 -2
- data/lib/necropsy/guardrail/quarantine.rb +101 -10
- data/lib/necropsy/load_graph.rb +206 -0
- data/lib/necropsy/models.rb +894 -21
- data/lib/necropsy/performance_profiler.rb +108 -0
- data/lib/necropsy/project.rb +361 -13
- data/lib/necropsy/reachability/engine.rb +80 -15
- data/lib/necropsy/reference_barrier.rb +458 -0
- data/lib/necropsy/report.rb +153 -14
- data/lib/necropsy/reporter.rb +441 -19
- data/lib/necropsy/runner.rb +258 -14
- data/lib/necropsy/runtime_feedback.rb +136 -0
- data/lib/necropsy/semantics_matrix.rb +153 -0
- data/lib/necropsy/trace_point_runtime.rb +19 -0
- data/lib/necropsy/type_facts.rb +53 -0
- data/lib/necropsy/version.rb +1 -1
- data/lib/necropsy/why_not_explanation.rb +436 -0
- data/lib/necropsy/why_not_renderer.rb +197 -0
- data/lib/necropsy/world_policy.rb +90 -0
- data/lib/necropsy.rb +39 -2
- data/schema/necropsy-report-v2.schema.json +366 -0
- data/script/measure.rb +20 -0
- metadata +106 -2
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
release: 0.2.1
|
|
3
|
+
corpora: [dynamic_evidence, plain_ruby, rails, rubocop_1_75_0, self]
|
|
4
|
+
|
|
5
|
+
baseline:
|
|
6
|
+
git_ref: d0168e881120320d28dc2f42e10f9947330fdcb7
|
|
7
|
+
reports_path: bench/golden/v1/reports
|
|
8
|
+
reason: >-
|
|
9
|
+
d0168e881120320d28dc2f42e10f9947330fdcb7 is the first commit with the bounded evidence
|
|
10
|
+
identity path and artifact-independent production scopes for all five required corpora.
|
|
11
|
+
|
|
12
|
+
labels_path: bench/corpora/v1/labels.yml
|
|
13
|
+
|
|
14
|
+
review:
|
|
15
|
+
path: bench/audits/0.2.1/review.yml
|
|
16
|
+
corpora:
|
|
17
|
+
rails: { strategy: all }
|
|
18
|
+
rubocop_1_75_0: { strategy: stratified, minimum_per_stratum: 5 }
|
|
19
|
+
|
|
20
|
+
performance:
|
|
21
|
+
baseline_path: bench/audits/0.2.1/baseline_performance.yml
|
|
22
|
+
wall_time_ratio: 1.5
|
|
23
|
+
wall_time_allowance_seconds: 0.75
|
|
24
|
+
max_wall_time_seconds:
|
|
25
|
+
dynamic_evidence: 1.0
|
|
26
|
+
plain_ruby: 1.0
|
|
27
|
+
rails: 2.0
|
|
28
|
+
rubocop_1_75_0: 10.0
|
|
29
|
+
self: 30.0
|
|
30
|
+
rss_ratio: 1.25
|
|
31
|
+
rss_allowance_kb: 65536
|
|
32
|
+
max_rss_kb: 1300000
|
|
33
|
+
|
|
34
|
+
adversarial_suites:
|
|
35
|
+
ambiguity:
|
|
36
|
+
command: [bundle, exec, rspec, spec/necropsy/safety_invariants_spec.rb, spec/necropsy/reflective_blocker_visibility_spec.rb]
|
|
37
|
+
dynamic:
|
|
38
|
+
command: [bundle, exec, rspec, spec/necropsy/analyzers/dynamic/coverage_importer_spec.rb, spec/necropsy/confidence/scorer_spec.rb]
|
|
39
|
+
parse:
|
|
40
|
+
command: [bundle, exec, rspec, spec/necropsy/parse_incompleteness_spec.rb, spec/necropsy/safety_mutation_spec.rb]
|
|
41
|
+
remote_input:
|
|
42
|
+
command: [bundle, exec, rspec, spec/necropsy/analyzers/dynamic/coverband_importer_spec.rb]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
reviews:
|
|
3
|
+
- corpus: rubocop_1_75_0
|
|
4
|
+
change_type: state_changed
|
|
5
|
+
id: "RuboCop::Cop::Force#cops"
|
|
6
|
+
outcome: expected_safety_change
|
|
7
|
+
rationale: "A runtime unknown-dispatch blocker now conservatively overrides test-only status, so this finding cannot remain a deletion candidate."
|
|
8
|
+
reviewer: maintainer
|
|
9
|
+
- corpus: rubocop_1_75_0
|
|
10
|
+
change_type: state_changed
|
|
11
|
+
id: "RuboCop::Cop::Force#name"
|
|
12
|
+
outcome: expected_safety_change
|
|
13
|
+
rationale: "Runtime dispatch by name is incomplete; blocked correctly takes precedence over the prior test-only conclusion."
|
|
14
|
+
reviewer: maintainer
|
|
15
|
+
- corpus: rubocop_1_75_0
|
|
16
|
+
change_type: state_changed
|
|
17
|
+
id: "RuboCop::DirectiveComment#range"
|
|
18
|
+
outcome: expected_safety_change
|
|
19
|
+
rationale: "The new unresolved runtime call scope matches range, making blocked safer than the legacy test-only state."
|
|
20
|
+
reviewer: maintainer
|
|
21
|
+
- corpus: rubocop_1_75_0
|
|
22
|
+
change_type: state_changed
|
|
23
|
+
id: "RuboCop::Formatter::SimpleTextFormatter#message"
|
|
24
|
+
outcome: expected_safety_change
|
|
25
|
+
rationale: "An unresolved runtime message call can target this method, so the blocked transition withdraws the candidate conservatively."
|
|
26
|
+
reviewer: maintainer
|
|
27
|
+
- corpus: rubocop_1_75_0
|
|
28
|
+
change_type: state_changed
|
|
29
|
+
id: "RuboCop::CLI::Command::AutoGenerateConfig#run"
|
|
30
|
+
outcome: expected_safety_change
|
|
31
|
+
rationale: "CLI command classes are registry-selected; the run blocker removes a known dynamic-registry false positive from candidates."
|
|
32
|
+
reviewer: maintainer
|
|
33
|
+
- corpus: rubocop_1_75_0
|
|
34
|
+
change_type: state_changed
|
|
35
|
+
id: "RuboCop::CLI::Command::ExecuteRunner#run"
|
|
36
|
+
outcome: expected_safety_change
|
|
37
|
+
rationale: "CLI command classes are registry-selected; the run blocker removes a known dynamic-registry false positive from candidates."
|
|
38
|
+
reviewer: maintainer
|
|
39
|
+
- corpus: rubocop_1_75_0
|
|
40
|
+
change_type: state_changed
|
|
41
|
+
id: "RuboCop::CLI::Command::InitDotfile#run"
|
|
42
|
+
outcome: expected_safety_change
|
|
43
|
+
rationale: "CLI command classes are registry-selected; the run blocker removes a known dynamic-registry false positive from candidates."
|
|
44
|
+
reviewer: maintainer
|
|
45
|
+
- corpus: rubocop_1_75_0
|
|
46
|
+
change_type: state_changed
|
|
47
|
+
id: "RuboCop::CLI::Command::LSP#run"
|
|
48
|
+
outcome: expected_safety_change
|
|
49
|
+
rationale: "CLI command classes are registry-selected; the run blocker removes a known dynamic-registry false positive from candidates."
|
|
50
|
+
reviewer: maintainer
|
|
51
|
+
- corpus: rubocop_1_75_0
|
|
52
|
+
change_type: state_changed
|
|
53
|
+
id: "RuboCop::CLI::Command::ShowCops#run"
|
|
54
|
+
outcome: expected_safety_change
|
|
55
|
+
rationale: "CLI command classes are registry-selected; the run blocker removes a known dynamic-registry false positive from candidates."
|
|
56
|
+
reviewer: maintainer
|