{"pviz_slice":true,"schema_version":"pviz-slice@v1","tool":"affected_tests","generated_at":"2026-11-03T17:29:46.943041+00:00","bundle":{"path":"/b/bundle.json","repo":"lobsters","node_count":508,"edge_count":849},"params":{"command":"affected-tests","symbol":"app/models/user.rb#User","file":null,"match":"exact","depth":8,"max_nodes":5000,"max_rows":100},"result":{"schema":"pviz.slice.affected_tests.v1","query":{"symbol":"app/models/user.rb#User","file":null,"match":"exact","resolved_as":"symbol","depth":8},"framework":{"rows_source":"sidecar","population":{"state":"used","sidecar":"bundle.framework_facts.json","sha256":"f7270800a850e008c2895d24ddc04c716058dced25b91c489dfcf7c91aee1b81","rows_total":261},"rows_complete":true},"call_graph_complete":true,"call_diagnostics":{"rows_source":"sidecar","population":{"state":"used","sidecar":"bundle.call_diagnostics.json","sha256":"0e9aea2a755ebba4e357403b55348cdd5f28ddd035055ed75807f089810f8cd9","rows_total":7152,"path":"/b/bundle.call_diagnostics.json"}},"seeds":["app/models/user.rb#User"],"seeds_total":1,"seeds_truncated":false,"reach_tests":[],"reach_tests_total":0,"reach_tests_truncated":false,"reach_test_files":[],"reach_test_files_total":0,"reach_test_files_truncated":false,"tests":[{"test":"spec/models/story_spec.rb#<file>","test_file":"spec/models/story_spec.rb","basis":"call_graph","depth":1,"seed":"app/models/user.rb#User","chain":[{"node":"spec/models/story_spec.rb#<file>","hop":"call","reason":"ruby_constant_receiver_exact:User.find_by"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/models/user_spec.rb#<file>","test_file":"spec/models/user_spec.rb","basis":"call_graph","depth":1,"seed":"app/models/user.rb#User","chain":[{"node":"spec/models/user_spec.rb#<file>","hop":"call","reason":"ruby_constant_receiver_exact:User.find_by"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/rails_helper.rb#<file>","test_file":"spec/rails_helper.rb","basis":"call_graph","depth":1,"seed":"app/models/user.rb#User","chain":[{"node":"spec/rails_helper.rb#<file>","hop":"call","reason":"ruby_constant_receiver_exact:User.create!"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/requests/login_spec.rb#<file>","test_file":"spec/requests/login_spec.rb","basis":"call_graph","depth":1,"seed":"app/models/user.rb#User","chain":[{"node":"spec/requests/login_spec.rb#<file>","hop":"call","reason":"ruby_constant_receiver_exact:User.find"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/tasks/fake_data_spec.rb#<file>","test_file":"spec/tasks/fake_data_spec.rb","basis":"call_graph","depth":1,"seed":"app/models/user.rb#User","chain":[{"node":"spec/tasks/fake_data_spec.rb#<file>","hop":"call","reason":"ruby_constant_receiver_exact:User.find_by"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/models/comment_spec.rb#<file>","test_file":"spec/models/comment_spec.rb","basis":"call_graph","depth":2,"seed":"app/models/user.rb#User","chain":[{"node":"spec/models/comment_spec.rb#<file>","hop":"call","reason":"constant_receiver_method_match"},{"node":"app/models/vote.rb#Vote.vote_thusly_on_story_or_comment_for_user_because","hop":"call","reason":"ruby_constant_receiver_exact:User.update_counters"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/models/notification_spec.rb#<file>","test_file":"spec/models/notification_spec.rb","basis":"call_graph","depth":2,"seed":"app/models/user.rb#User","chain":[{"node":"spec/models/notification_spec.rb#<file>","hop":"call","reason":"constant_receiver_method_match"},{"node":"app/models/vote.rb#Vote.vote_thusly_on_story_or_comment_for_user_because","hop":"call","reason":"ruby_constant_receiver_exact:User.update_counters"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/models/vote_spec.rb#<file>","test_file":"spec/models/vote_spec.rb","basis":"call_graph","depth":2,"seed":"app/models/user.rb#User","chain":[{"node":"spec/models/vote_spec.rb#<file>","hop":"call","reason":"constant_receiver_method_match"},{"node":"app/models/vote.rb#Vote.vote_thusly_on_story_or_comment_for_user_because","hop":"call","reason":"ruby_constant_receiver_exact:User.update_counters"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/requests/comments_spec.rb#<file>","test_file":"spec/requests/comments_spec.rb","basis":"call_graph","depth":2,"seed":"app/models/user.rb#User","chain":[{"node":"spec/requests/comments_spec.rb#<file>","hop":"call","reason":"constant_receiver_method_match"},{"node":"app/models/vote.rb#Vote.vote_thusly_on_story_or_comment_for_user_because","hop":"call","reason":"ruby_constant_receiver_exact:User.update_counters"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/requests/search_spec.rb#<file>","test_file":"spec/requests/search_spec.rb","basis":"call_graph","depth":2,"seed":"app/models/user.rb#User","chain":[{"node":"spec/requests/search_spec.rb#<file>","hop":"call","reason":"constant_receiver_method_match"},{"node":"app/models/vote.rb#Vote.vote_thusly_on_story_or_comment_for_user_because","hop":"call","reason":"ruby_constant_receiver_exact:User.update_counters"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"},{"test":"spec/requests/users_controller_spec.rb#<file>","test_file":"spec/requests/users_controller_spec.rb","basis":"call_graph","depth":2,"seed":"app/models/user.rb#User","chain":[{"node":"spec/requests/users_controller_spec.rb#<file>","hop":"call","reason":"constant_receiver_method_match"},{"node":"app/models/vote.rb#Vote.vote_thusly_on_story_or_comment_for_user_because","hop":"call","reason":"ruby_constant_receiver_exact:User.update_counters"},{"node":"app/models/user.rb#User","hop":"seed"}],"scope":"handler"}],"tests_total":11,"tests_truncated":false,"test_import_bindings":[],"test_import_bindings_total":0,"test_import_bindings_truncated":false,"test_files":["spec/models/comment_spec.rb","spec/models/notification_spec.rb","spec/models/story_spec.rb","spec/models/user_spec.rb","spec/models/vote_spec.rb","spec/rails_helper.rb","spec/requests/comments_spec.rb","spec/requests/login_spec.rb","spec/requests/search_spec.rb","spec/requests/users_controller_spec.rb","spec/tasks/fake_data_spec.rb"],"test_files_total":11,"test_files_truncated":false,"file_level_test_importers":[{"test_file":"spec/models/story_spec.rb","imports_file":"app/models/user.rb","basis":"file_import","seed":"app/models/user.rb#User"},{"test_file":"spec/models/user_spec.rb","imports_file":"app/models/user.rb","basis":"file_import","seed":"app/models/user.rb#User"},{"test_file":"spec/rails_helper.rb","imports_file":"app/models/user.rb","basis":"file_import","seed":"app/models/user.rb#User"},{"test_file":"spec/requests/login_spec.rb","imports_file":"app/models/user.rb","basis":"file_import","seed":"app/models/user.rb#User"},{"test_file":"spec/tasks/fake_data_spec.rb","imports_file":"app/models/user.rb","basis":"file_import","seed":"app/models/user.rb#User"}],"file_level_test_importers_total":5,"file_level_test_importers_truncated":false,"tests_with_unproven_call_sites":{"spec/css_widely_available_spec.rb":33,"spec/rails_helper.rb":15,"spec/models/story_spec.rb":7,"spec/routing/controller_public_methods_spec.rb":7,"spec/features/submit_story_spec.rb":6,"spec/models/link_spec.rb":6,"spec/requests/tags_spec.rb":6,"spec/features/user_administration_spec.rb":5,"spec/jobs/cache_page_job_spec.rb":5,"spec/features/homepage_spec.rb":4,"spec/mailboxes/inbox_mailbox_spec.rb":4,"spec/models/comment_redirect_cache_spec.rb":4,"spec/requests/comments_spec.rb":4,"spec/requests/home_spec.rb":4,"spec/requests/stories_spec.rb":4,"spec/spec_helper.rb":4,"spec/tasks/fake_data_spec.rb":4,"spec/controllers/story_image_controller_spec.rb":3,"spec/factories/origin.rb":3,"spec/features/mod_domains_spec.rb":3,"spec/models/search_parser_spec.rb":3,"spec/models/user_spec.rb":3,"spec/requests/login_spec.rb":3,"spec/sqlite3_cli_spec.rb":3,"spec/extras/markdowner_spec.rb":2,"spec/factories/domain.rb":2,"spec/factories/hat.rb":2,"spec/factories/user.rb":2,"spec/features/settings_spec.rb":2,"spec/features/story_spec.rb":2,"spec/helpers/application_helper_spec.rb":2,"spec/models/category_spec.rb":2,"spec/models/vote_spec.rb":2,"spec/requests/moderations_spec.rb":2,"spec/controllers/home_controller_spec.rb":1,"spec/extras/page_caching_spec.rb":1,"spec/extras/utils_spec.rb":1,"spec/factories/category.rb":1,"spec/factories/comment.rb":1,"spec/factories/hat_request.rb":1,"spec/factories/hidden_story.rb":1,"spec/factories/invitation.rb":1,"spec/factories/invitation_request.rb":1,"spec/factories/message.rb":1,"spec/factories/mod_mail.rb":1,"spec/factories/mod_mail_message.rb":1,"spec/factories/notification.rb":1,"spec/factories/story.rb":1,"spec/factories/tag.rb":1,"spec/factories/vote.rb":1,"spec/features/comment_spec.rb":1,"spec/features/doff_hat_spec.rb":1,"spec/features/edit_hat_spec.rb":1,"spec/features/filter_spec.rb":1,"spec/features/hat_request_spec.rb":1,"spec/features/hats_spec.rb":1,"spec/features/mod_origins_spec.rb":1,"spec/features/newest_spec.rb":1,"spec/features/preferred_color_scheme_spec.rb":1,"spec/features/read_story_spec.rb":1,"spec/features/user_threads_spec.rb":1,"spec/helpers/users_helper_spec.rb":1,"spec/jobs/create_story_card_job_spec.rb":1,"spec/jobs/notify_comment_job_spec.rb":1,"spec/jobs/notify_message_job_spec.rb":1,"spec/jobs/notify_mod_mail_message_job_spec.rb":1,"spec/jobs/prefill_page_cache_job_spec.rb":1,"spec/jobs/refill_story_page_cache_job_spec.rb":1,"spec/mailers/ban_notification_mailer_spec.rb":1,"spec/mailers/email_reply_mailer_spec.rb":1,"spec/models/comment_stat_spec.rb":1,"spec/models/domain_spec.rb":1,"spec/models/mastodon_app_spec.rb":1,"spec/models/mod_mail_spec.rb":1,"spec/models/search_spec.rb":1,"spec/models/story_image_spec.rb":1,"spec/models/story_text_spec.rb":1,"spec/models/tag_spec.rb":1,"spec/models/username_spec.rb":1,"spec/requests/banned_ips_spec.rb":1,"spec/requests/cabinet_spec.rb":1,"spec/requests/hat_requests_spec.rb":1,"spec/requests/mod/mail_messages_spec.rb":1,"spec/requests/mod/mails_spec.rb":1,"spec/requests/mod/reparents_spec.rb":1,"spec/requests/mod_mail_messages_spec.rb":1,"spec/requests/mod_mails_spec.rb":1,"spec/requests/reject_spoofed_ips_spec.rb":1,"spec/requests/search_spec.rb":1,"spec/support/factory_bot.rb":1,"spec/support/vcr.rb":1,"test/run_specs_test.rb":1},"tests_with_unproven_call_sites_total":92,"tests_with_unproven_call_sites_truncated":false,"reverse_reach_truncated":false,"test_visibility":{"js":{"files":7,"test_files":0},"python":{"files":1,"test_files":0},"ruby":{"files":500,"test_files":133}},"warnings":["no test-path files of language js are in the bundle: its tests cannot be mapped (see guide.framework_notes.test_sources)","no test-path files of language python are in the bundle: its tests cannot be mapped (see guide.framework_notes.test_sources)"],"notes":["A test is a symbol whose file is a test path (directory markers, Go *_test.go, pytest test_*.py / *_test.py, __tests__/). basis call_graph: every hop is a resolved call; framework_relation: the chain crosses REGISTERS / CROSS_RUNTIME_CALL / EVENT_PUBLISHES / GENERATED_BINDING / ORM_ACCESS / MIDDLEWARE hops.","tests_with_unproven_call_sites counts UNRESOLVED/AMBIGUOUS call sites inside test files: those tests may also be affected but the bundle cannot prove it."]}}