necropsy 0.2.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/CHANGELOG.md +26 -0
- data/MEASUREMENTS.md +27 -0
- data/README.md +182 -17
- 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 +69 -17
- data/lib/necropsy/analyzers/dynamic/coverage_importer.rb +99 -9
- data/lib/necropsy/analyzers/dynamic/coverband_importer.rb +69 -299
- 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 +133 -23
- 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 -73
- data/lib/necropsy/analyzers/static/name_resolution.rb +133 -12
- data/lib/necropsy/analyzers/static/rta.rb +237 -29
- data/lib/necropsy/ast_scanner/call_recording.rb +149 -30
- 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 +431 -41
- data/lib/necropsy/ast_scanner/method_definitions.rb +232 -50
- data/lib/necropsy/ast_scanner/references.rb +43 -9
- data/lib/necropsy/ast_scanner/ruby_semantics.rb +101 -15
- data/lib/necropsy/ast_scanner/traversal.rb +234 -71
- data/lib/necropsy/ast_scanner/value_definitions.rb +23 -13
- data/lib/necropsy/ast_scanner.rb +67 -6
- data/lib/necropsy/bench/candidate_union.rb +555 -0
- data/lib/necropsy/bench/claim_gate.rb +112 -0
- data/lib/necropsy/bench/evaluator.rb +329 -16
- 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 +85 -17
- data/lib/necropsy/call_site_identity.rb +54 -0
- data/lib/necropsy/cli.rb +220 -33
- data/lib/necropsy/clock.rb +40 -0
- data/lib/necropsy/confidence/scorer.rb +103 -58
- data/lib/necropsy/configuration.rb +224 -21
- 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 +176 -36
- data/lib/necropsy/embedded_ruby.rb +55 -0
- data/lib/necropsy/entry_points/plain.rb +111 -10
- data/lib/necropsy/entry_points/rails.rb +322 -41
- 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 +1099 -109
- 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 +350 -13
- data/lib/necropsy/guardrail/quarantine.rb +94 -9
- data/lib/necropsy/load_graph.rb +206 -0
- data/lib/necropsy/models.rb +878 -13
- data/lib/necropsy/performance_profiler.rb +108 -0
- data/lib/necropsy/project.rb +327 -25
- data/lib/necropsy/reachability/engine.rb +54 -13
- data/lib/necropsy/reference_barrier.rb +458 -0
- data/lib/necropsy/report.rb +113 -4
- data/lib/necropsy/reporter.rb +431 -15
- data/lib/necropsy/runner.rb +233 -18
- data/lib/necropsy/runtime_feedback.rb +136 -0
- data/lib/necropsy/semantics_matrix.rb +153 -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 +35 -2
- data/schema/necropsy-report-v2.schema.json +366 -0
- metadata +85 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Benchmark v1 protocol
|
|
2
|
+
|
|
3
|
+
The v1 command is `bundle exec ruby bench/run.rb`. It emits raw JSON reports,
|
|
4
|
+
`candidate_union.json`, and a summary containing category-level precision, known-positive recall,
|
|
5
|
+
candidate LOC/yield, unknown and blocked rates, and performance measurements.
|
|
6
|
+
|
|
7
|
+
The five pinned corpus roles are intentionally different: plain Ruby, Rails/DSL callbacks,
|
|
8
|
+
positive dynamic evidence, visitor-heavy RuboCop, and the Necropsy repository itself. The
|
|
9
|
+
plain Ruby corpus also carries an RBS signature fixture (`sig/plain_seed.rbs`) so typed input is
|
|
10
|
+
represented without requiring a heavyweight typechecker subprocess. The versioned `type_aware.yml`
|
|
11
|
+
is a reviewed type-aware comparison snapshot; it is not silently treated as a fresh run. Tool output
|
|
12
|
+
is only comparable within the same normalized physical
|
|
13
|
+
definition universe, so skipped or missing competitors are reported explicitly.
|
|
14
|
+
|
|
15
|
+
The repository and RuboCop entries use explicit production scopes. Necropsy self-analysis covers
|
|
16
|
+
`lib`, `exe`, `bin`, `bench`, and `script`; the pinned RuboCop role covers its layout cops and
|
|
17
|
+
shared cop base. Tests and fixtures remain separate adversarial/fixture inputs. Reference-scope
|
|
18
|
+
exclusions are retained as blockers in reports, so these scopes cannot turn missing callers into
|
|
19
|
+
actionable candidates silently.
|
|
20
|
+
|
|
21
|
+
Labels and known positives are reviewed metadata, not tuning input. A future holdout must be
|
|
22
|
+
declared as a separate manifest corpus and may not be used to select default features or
|
|
23
|
+
thresholds. Empty candidate output reports `precision_status: no_candidates` and yield zero.
|
|
24
|
+
The raw candidate diff remains available in `candidate_union.json` for every tool.
|
|
25
|
+
|
|
26
|
+
The 1.0 review target is tracked separately from this safety release. `bundle exec ruby
|
|
27
|
+
bench/review_queue.rb` deterministically selects 300 actionable rows as `pending`; the queue never
|
|
28
|
+
adds labels and cannot make the public claim gate pass. The current snapshot has no high-confidence
|
|
29
|
+
rows, so the target shortfall is reported rather than hidden. Human reviewers must supply rationale,
|
|
30
|
+
outcome, and reviewer identity before a claim can be enabled.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
reviewed_at: "2026-08-12"
|
|
3
|
+
labels:
|
|
4
|
+
- { corpus: rails, id: "Sample::Widget#dead_model", value: dead, rationale: "No production, test, route, callback, or runtime reference reaches this method.", reviewer: maintainer }
|
|
5
|
+
- { corpus: rails, id: "Sample::Widget#alias_live", value: unknown, rationale: "The alias is not called by the fixture, but its compatibility intent is not documented.", reviewer: maintainer }
|
|
6
|
+
- { corpus: rails, id: "Sample::Widget#<=>", value: external, rationale: "Comparable-style protocol methods can be invoked by callers outside the analyzed fixture.", reviewer: maintainer }
|
|
7
|
+
- { corpus: rails, id: "Sample::Widget#test_only", value: alive, rationale: "spec/widget_usage.rb calls this method directly.", reviewer: maintainer }
|
|
8
|
+
- { corpus: rails, id: "Sample::Widget#persist_callback", value: alive, rationale: "before_save registers the method as a Rails callback.", reviewer: maintainer }
|
|
9
|
+
- { corpus: rails, id: "Sample::Widget#each", value: external, rationale: "The public iterator is an extension point for callers outside the fixture.", reviewer: maintainer }
|
|
10
|
+
- { corpus: rails, id: "Sample::Widget#render", value: alive, rationale: "Controller actions instantiate Widget and call render.", reviewer: maintainer }
|
|
11
|
+
- { corpus: rails, id: "Sample::Widget#live_helper", value: alive, rationale: "render calls live_helper directly.", reviewer: maintainer }
|
|
12
|
+
- { corpus: rails, id: "Sample::Widget.build_live", value: alive, rationale: "The widgets controller actions call this constructor.", reviewer: maintainer }
|
|
13
|
+
- { corpus: rails, id: "Sample::Renderable#decorated", value: alive, rationale: "build_live calls the included module method.", reviewer: maintainer }
|
|
14
|
+
- { corpus: rails, id: "Sample::BaseWidget#inherited_live", value: alive, rationale: "Widget#render calls this inherited method.", reviewer: maintainer }
|
|
15
|
+
- { corpus: rails, id: "Sample::MountedEngine.call", value: alive, rationale: "config/routes.rb mounts the Rack endpoint.", reviewer: maintainer }
|
|
16
|
+
- { corpus: rails, id: "Sample::WidgetsHelper#widget_title", value: alive, rationale: "The ERB template references widget_title.", reviewer: maintainer }
|
|
17
|
+
- { corpus: rails, id: "Sample::WidgetsHelper#component_title", value: alive, rationale: "TitleComponent#call references component_title through the helper surface.", reviewer: maintainer }
|
|
18
|
+
- { corpus: rails, id: "Sample::TitleComponent#call", value: external, rationale: "View components invoke the public call protocol outside direct Ruby call sites.", reviewer: maintainer }
|
|
19
|
+
- { corpus: rails, id: "Sample::WidgetsController#index", value: alive, rationale: "The root route dispatches to widgets#index.", reviewer: maintainer }
|
|
20
|
+
- { corpus: rails, id: "Sample::WidgetsController#audit", value: alive, rationale: "The auditable route concern dispatches to audit.", reviewer: maintainer }
|
|
21
|
+
- { corpus: rails, id: "Sample::WidgetsController#legacy", value: alive, rationale: "An explicit route dispatches to widgets#legacy.", reviewer: maintainer }
|
|
22
|
+
- { corpus: rails, id: "Sample::WidgetsController#contextual", value: alive, rationale: "The controller route block dispatches to contextual.", reviewer: maintainer }
|
|
23
|
+
- { corpus: rails, id: "Sample::WidgetsController#scoped", value: alive, rationale: "The scoped controller route dispatches to scoped.", reviewer: maintainer }
|
|
24
|
+
- { corpus: rails, id: "Sample::Admin::WidgetsController#index", value: alive, rationale: "The admin resources route dispatches to index.", reviewer: maintainer }
|
|
25
|
+
- { corpus: rails, id: "Sample::Admin::WidgetsController#preview", value: alive, rationale: "The admin member route dispatches to preview.", reviewer: maintainer }
|
|
26
|
+
- { corpus: rails, id: "Sample::Admin::WidgetsController#drawn", value: alive, rationale: "The drawn route in config/routes/admin.rb dispatches to this action.", reviewer: maintainer }
|
|
27
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#format", value: alive, rationale: "Runner.call invokes format.", reviewer: maintainer }
|
|
28
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#normalize", value: alive, rationale: "Formatter#format invokes normalize.", reviewer: maintainer }
|
|
29
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#unused", value: dead, rationale: "The closed fixture has no reference to this private-purpose sample method.", reviewer: maintainer }
|
|
30
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#public_extension", value: external, rationale: "The method explicitly models a public extension point outside the closed fixture.", reviewer: maintainer }
|
|
31
|
+
- { corpus: plain_ruby, id: "PlainSeed::Runner.call", value: alive, rationale: "The executable entry point invokes Runner.call.", reviewer: maintainer }
|
|
32
|
+
- { corpus: plain_ruby, id: "PlainSeed::Runner#legacy", value: dead, rationale: "No fixture entry point or method references legacy.", reviewer: maintainer }
|
|
33
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#run", value: alive, rationale: "The fixture's top-level entry point invokes run.", reviewer: maintainer }
|
|
34
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#helper", value: alive, rationale: "DynamicSeed#run calls helper directly.", reviewer: maintainer }
|
|
35
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#observed_only", value: alive, rationale: "Versioned positive runtime evidence records this method as executed.", reviewer: maintainer }
|
|
36
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#dead", value: dead, rationale: "Neither static roots nor positive runtime evidence reference this method.", reviewer: maintainer }
|
|
37
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#public_hook", value: external, rationale: "The method models a documented callback surface for an external caller.", reviewer: maintainer }
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
repository_root: ../../..
|
|
3
|
+
golden_dir: bench/golden/v1
|
|
4
|
+
labels: bench/corpora/v1/labels.yml
|
|
5
|
+
minimum_reviewed_labels: 30
|
|
6
|
+
label_provenance_required: true
|
|
7
|
+
performance_samples: 3
|
|
8
|
+
|
|
9
|
+
# Roles are metadata for comparison stratification; they do not change analyzer defaults.
|
|
10
|
+
corpus_roles:
|
|
11
|
+
plain_ruby: [plain_ruby, typed_rbs]
|
|
12
|
+
rails: [rails, dsl, registry]
|
|
13
|
+
rubocop_1_75_0: [visitor_heavy]
|
|
14
|
+
self: [public_library]
|
|
15
|
+
dynamic_evidence: [dynamic]
|
|
16
|
+
|
|
17
|
+
corpora:
|
|
18
|
+
dynamic_evidence:
|
|
19
|
+
required: true
|
|
20
|
+
kind: fixture
|
|
21
|
+
path: spec/fixtures/benchmark/dynamic_evidence
|
|
22
|
+
revision: benchmark-v1
|
|
23
|
+
plain_ruby:
|
|
24
|
+
required: true
|
|
25
|
+
kind: fixture
|
|
26
|
+
path: spec/fixtures/benchmark/plain_ruby
|
|
27
|
+
revision: benchmark-v1
|
|
28
|
+
rails:
|
|
29
|
+
required: true
|
|
30
|
+
kind: fixture
|
|
31
|
+
path: spec/fixtures/sample_project
|
|
32
|
+
revision: sample-project-v1
|
|
33
|
+
rubocop_1_75_0:
|
|
34
|
+
required: true
|
|
35
|
+
kind: external
|
|
36
|
+
path_env: NECROPSY_RUBOCOP_CORPUS
|
|
37
|
+
version: 1.75.0
|
|
38
|
+
git_tag: v1.75.0
|
|
39
|
+
git_commit: 9c2bc8eb11e269f1cf47113041a1be3ff615f68b
|
|
40
|
+
config: bench/corpora/v1/rubocop.necropsy.yml
|
|
41
|
+
revision: 9c2bc8eb11e269f1cf47113041a1be3ff615f68b
|
|
42
|
+
self:
|
|
43
|
+
required: true
|
|
44
|
+
kind: repository
|
|
45
|
+
path: .
|
|
46
|
+
config: bench/corpora/v1/self.necropsy.yml
|
|
47
|
+
revision: working-tree
|
|
48
|
+
|
|
49
|
+
tools:
|
|
50
|
+
necropsy:
|
|
51
|
+
version: 0.2.0
|
|
52
|
+
debride:
|
|
53
|
+
version: 1.15.2
|
|
54
|
+
command: [debride]
|
|
55
|
+
snapshot: bench/corpora/v1/tools/debride.yml
|
|
56
|
+
spoom:
|
|
57
|
+
version: pinned-by-snapshot
|
|
58
|
+
command: [spoom]
|
|
59
|
+
snapshot: bench/corpora/v1/tools/spoom.yml
|
|
60
|
+
type_aware:
|
|
61
|
+
version: pinned-by-snapshot
|
|
62
|
+
command: [srb]
|
|
63
|
+
snapshot: bench/corpora/v1/tools/type_aware.yml
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# The pinned RuboCop corpus measures the production visitor/library surface;
|
|
2
|
+
# specs and fixtures remain separate test data and are not release findings.
|
|
3
|
+
paths:
|
|
4
|
+
analyze: [lib/rubocop/cop/layout/**, lib/rubocop/cop/base.rb, lib/rubocop/cop/cop.rb]
|
|
5
|
+
reference: [lib/rubocop/cop/layout/**, lib/rubocop/cop/base.rb, lib/rubocop/cop/cop.rb]
|
|
6
|
+
cache:
|
|
7
|
+
enabled: false
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# The self corpus measures the production library surface. Tests and benchmark
|
|
2
|
+
# fixtures are separate corpora and are intentionally kept out of this run so
|
|
3
|
+
# the self budget is comparable across commits.
|
|
4
|
+
paths:
|
|
5
|
+
analyze: [lib/**, exe/**]
|
|
6
|
+
reference: [lib/**, exe/**, bin/**, bench/*.rb, bench/**/*.rb, script/**, Gemfile, Gemfile.lock, Rakefile, necropsy.gemspec]
|
|
7
|
+
cache:
|
|
8
|
+
enabled: false
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
tool: debride
|
|
3
|
+
provenance:
|
|
4
|
+
kind: versioned_external_candidate_snapshot
|
|
5
|
+
tool_version: 1.15.2
|
|
6
|
+
source: reviewed benchmark fixtures
|
|
7
|
+
normalization: fully qualified method identity
|
|
8
|
+
candidates:
|
|
9
|
+
- { corpus: rails, id: "Sample::Widget#dead_model", path: app/models/widget.rb, line: 47 }
|
|
10
|
+
- { corpus: rails, id: "Sample::Widget#alias_live", path: app/models/widget.rb, line: 37 }
|
|
11
|
+
- { corpus: rails, id: "Sample::Widget#<=>", path: app/models/widget.rb, line: 43 }
|
|
12
|
+
- { corpus: rails, id: "Sample::Widget#test_only", path: app/models/widget.rb, line: 51 }
|
|
13
|
+
- { corpus: rails, id: "Sample::Widget#persist_callback", path: app/models/widget.rb, line: 55 }
|
|
14
|
+
- { corpus: rails, id: "Sample::Widget#each", path: app/models/widget.rb, line: 39 }
|
|
15
|
+
- { corpus: rails, id: "Sample::Widget#render", path: app/models/widget.rb, line: 27 }
|
|
16
|
+
- { corpus: rails, id: "Sample::Widget#live_helper", path: app/models/widget.rb, line: 33 }
|
|
17
|
+
- { corpus: rails, id: "Sample::Widget.build_live", path: app/models/widget.rb, line: 22 }
|
|
18
|
+
- { corpus: rails, id: "Sample::Renderable#decorated", path: app/models/widget.rb, line: 5 }
|
|
19
|
+
- { corpus: rails, id: "Sample::BaseWidget#inherited_live", path: app/models/widget.rb, line: 11 }
|
|
20
|
+
- { corpus: rails, id: "Sample::MountedEngine.call", path: app/models/mounted_engine.rb, line: 5 }
|
|
21
|
+
- { corpus: rails, id: "Sample::WidgetsHelper#widget_title", path: app/helpers/widgets_helper.rb, line: 5 }
|
|
22
|
+
- { corpus: rails, id: "Sample::WidgetsHelper#component_title", path: app/helpers/widgets_helper.rb, line: 9 }
|
|
23
|
+
- { corpus: rails, id: "Sample::TitleComponent#call", path: app/components/title_component.rb, line: 5 }
|
|
24
|
+
- { corpus: rails, id: "Sample::WidgetsController#index", path: app/controllers/widgets_controller.rb, line: 5 }
|
|
25
|
+
- { corpus: rails, id: "Sample::WidgetsController#audit", path: app/controllers/widgets_controller.rb, line: 9 }
|
|
26
|
+
- { corpus: rails, id: "Sample::WidgetsController#legacy", path: app/controllers/widgets_controller.rb, line: 13 }
|
|
27
|
+
- { corpus: rails, id: "Sample::WidgetsController#contextual", path: app/controllers/widgets_controller.rb, line: 17 }
|
|
28
|
+
- { corpus: rails, id: "Sample::WidgetsController#scoped", path: app/controllers/widgets_controller.rb, line: 21 }
|
|
29
|
+
- { corpus: rails, id: "Sample::Admin::WidgetsController#index", path: app/controllers/admin/widgets_controller.rb, line: 6 }
|
|
30
|
+
- { corpus: rails, id: "Sample::Admin::WidgetsController#preview", path: app/controllers/admin/widgets_controller.rb, line: 10 }
|
|
31
|
+
- { corpus: rails, id: "Sample::Admin::WidgetsController#drawn", path: app/controllers/admin/widgets_controller.rb, line: 14 }
|
|
32
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#format", path: lib/plain_seed.rb, line: 5 }
|
|
33
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#normalize", path: lib/plain_seed.rb, line: 9 }
|
|
34
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#unused", path: lib/plain_seed.rb, line: 13 }
|
|
35
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#public_extension", path: lib/plain_seed.rb, line: 17 }
|
|
36
|
+
- { corpus: plain_ruby, id: "PlainSeed::Runner.call", path: lib/plain_seed.rb, line: 23 }
|
|
37
|
+
- { corpus: plain_ruby, id: "PlainSeed::Runner#legacy", path: lib/plain_seed.rb, line: 27 }
|
|
38
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#run", path: lib/dynamic_seed.rb, line: 4 }
|
|
39
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#helper", path: lib/dynamic_seed.rb, line: 8 }
|
|
40
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#observed_only", path: lib/dynamic_seed.rb, line: 12 }
|
|
41
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#dead", path: lib/dynamic_seed.rb, line: 16 }
|
|
42
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#public_hook", path: lib/dynamic_seed.rb, line: 20 }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
tool: spoom
|
|
3
|
+
provenance:
|
|
4
|
+
kind: versioned_external_candidate_snapshot
|
|
5
|
+
source: reviewed benchmark fixtures
|
|
6
|
+
normalization: fully qualified method identity
|
|
7
|
+
candidates:
|
|
8
|
+
- { corpus: rails, id: "Sample::Widget#dead_model", path: app/models/widget.rb, line: 47 }
|
|
9
|
+
- { corpus: rails, id: "Sample::Widget#alias_live", path: app/models/widget.rb, line: 37 }
|
|
10
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#unused", path: lib/plain_seed.rb, line: 13 }
|
|
11
|
+
- { corpus: plain_ruby, id: "PlainSeed::Runner#legacy", path: lib/plain_seed.rb, line: 27 }
|
|
12
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#dead", path: lib/dynamic_seed.rb, line: 16 }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
tool: type_aware
|
|
3
|
+
provenance:
|
|
4
|
+
kind: versioned_external_candidate_snapshot
|
|
5
|
+
source: reviewed benchmark fixtures
|
|
6
|
+
normalization: fully qualified method identity
|
|
7
|
+
candidates:
|
|
8
|
+
- { corpus: rails, id: "Sample::Widget#dead_model", path: app/models/widget.rb, line: 47 }
|
|
9
|
+
- { corpus: plain_ruby, id: "PlainSeed::Formatter#unused", path: lib/plain_seed.rb, line: 13 }
|
|
10
|
+
- { corpus: plain_ruby, id: "PlainSeed::Runner#legacy", path: lib/plain_seed.rb, line: 27 }
|
|
11
|
+
- { corpus: dynamic_evidence, id: "DynamicSeed#dead", path: lib/dynamic_seed.rb, line: 16 }
|