{
  "version": 1,
  "project": {
    "name": "lobsters",
    "languages": [
      "Ruby",
      "TypeScript"
    ],
    "frameworks": [
      "rails"
    ]
  },
  "reads": [
    {
      "file": "0-extract.json",
      "label": "suss extract --lang ruby -f activerecord=suss.activerecord.json -f activejob -f rails=suss.rails.json -f net-http",
      "root": null,
      "packs": [
        "activerecord=suss.activerecord.json",
        "activejob",
        "rails=suss.rails.json",
        "net-http"
      ],
      "spec": false
    },
    {
      "file": "1-extract.json",
      "label": "suss extract --lang typescript -f fetch -f node",
      "root": null,
      "packs": [
        "fetch",
        "node"
      ],
      "spec": false
    }
  ],
  "repositories": [
    {
      "name": "lobsters",
      "path": "",
      "remote": "https://github.com/lobsters/lobsters.git",
      "commit": "9adf9a180a617097e3effc17cdb6f11b58b214bf"
    }
  ],
  "units": [
    {
      "id": "app/controllers/about_controller.rb::AboutController.four_oh_four",
      "name": "AboutController.four_oh_four",
      "kind": "handler",
      "file": "app/controllers/about_controller.rb",
      "line": 7,
      "endLine": 11,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/about_controller.rb::AboutController.about",
      "name": "AboutController.about",
      "kind": "handler",
      "file": "app/controllers/about_controller.rb",
      "line": 13,
      "endLine": 21,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/about_controller.rb::AboutController.chat",
      "name": "AboutController.chat",
      "kind": "handler",
      "file": "app/controllers/about_controller.rb",
      "line": 23,
      "endLine": 29,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/about_controller.rb::AboutController.privacy",
      "name": "AboutController.privacy",
      "kind": "handler",
      "file": "app/controllers/about_controller.rb",
      "line": 31,
      "endLine": 39,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/avatars_controller.rb::AvatarsController.expire",
      "name": "AvatarsController.expire",
      "kind": "handler",
      "file": "app/controllers/avatars_controller.rb",
      "line": 10,
      "endLine": 14,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/avatars_controller.rb::AvatarsController.show",
      "name": "AvatarsController.show",
      "kind": "handler",
      "file": "app/controllers/avatars_controller.rb",
      "line": 16,
      "endLine": 48,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/banned_ips_controller.rb::BannedIpsController.index",
      "name": "BannedIpsController.index",
      "kind": "handler",
      "file": "app/controllers/banned_ips_controller.rb",
      "line": 4,
      "endLine": 17,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/cabinet_controller.rb::CabinetController.index",
      "name": "CabinetController.index",
      "kind": "handler",
      "file": "app/controllers/cabinet_controller.rb",
      "line": 2,
      "endLine": 4,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/categories_controller.rb::CategoriesController.new",
      "name": "CategoriesController.new",
      "kind": "handler",
      "file": "app/controllers/categories_controller.rb",
      "line": 6,
      "endLine": 10,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/categories_controller.rb::CategoriesController.create",
      "name": "CategoriesController.create",
      "kind": "handler",
      "file": "app/controllers/categories_controller.rb",
      "line": 12,
      "endLine": 21,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/categories_controller.rb::CategoriesController.edit",
      "name": "CategoriesController.edit",
      "kind": "handler",
      "file": "app/controllers/categories_controller.rb",
      "line": 23,
      "endLine": 27,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/categories_controller.rb::CategoriesController.update",
      "name": "CategoriesController.update",
      "kind": "handler",
      "file": "app/controllers/categories_controller.rb",
      "line": 29,
      "endLine": 38,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.create",
      "name": "CommentsController.create",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 20,
      "endLine": 68,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.show",
      "name": "CommentsController.show",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 70,
      "endLine": 85,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.show_short_id",
      "name": "CommentsController.show_short_id",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 87,
      "endLine": 93,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.redirect_from_short_id#GET /comments/{id}/comments/{id}",
      "name": "CommentsController.redirect_from_short_id",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 95,
      "endLine": 112,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.redirect_from_short_id#GET /c/{id}",
      "name": "CommentsController.redirect_from_short_id",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 95,
      "endLine": 112,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.redirect_from_short_id#GET /s/{story_id}/{title}/comments/{id}",
      "name": "CommentsController.redirect_from_short_id",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 95,
      "endLine": 112,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.edit",
      "name": "CommentsController.edit",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 114,
      "endLine": 125,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.reply",
      "name": "CommentsController.reply",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 127,
      "endLine": 159,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.delete",
      "name": "CommentsController.delete",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 161,
      "endLine": 170,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.undelete",
      "name": "CommentsController.undelete",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 172,
      "endLine": 181,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.disown",
      "name": "CommentsController.disown",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 183,
      "endLine": 199,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.update#PATCH /comments/{id}",
      "name": "CommentsController.update",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 201,
      "endLine": 235,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.update#PUT /comments/{id}",
      "name": "CommentsController.update",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 201,
      "endLine": 235,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.unvote",
      "name": "CommentsController.unvote",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 237,
      "endLine": 251,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.upvote",
      "name": "CommentsController.upvote",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 253,
      "endLine": 267,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.flag",
      "name": "CommentsController.flag",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 269,
      "endLine": 287,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.index#GET /comments",
      "name": "CommentsController.index",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 289,
      "endLine": 344,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.index#GET /comments/page/{page}",
      "name": "CommentsController.index",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 289,
      "endLine": 344,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.upvoted#GET /upvoted/comments",
      "name": "CommentsController.upvoted",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 346,
      "endLine": 387,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.upvoted#GET /upvoted/comments/page/{page}",
      "name": "CommentsController.upvoted",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 346,
      "endLine": 387,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.user_threads#GET /threads",
      "name": "CommentsController.user_threads",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 389,
      "endLine": 405,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.user_threads#GET /~{user}/threads",
      "name": "CommentsController.user_threads",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 389,
      "endLine": 405,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.user_comments",
      "name": "CommentsController.user_comments",
      "kind": "handler",
      "file": "app/controllers/comments_controller.rb",
      "line": 407,
      "endLine": 426,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/filters_controller.rb::FiltersController.index",
      "name": "FiltersController.index",
      "kind": "handler",
      "file": "app/controllers/filters_controller.rb",
      "line": 10,
      "endLine": 22,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/filters_controller.rb::FiltersController.update",
      "name": "FiltersController.update",
      "kind": "handler",
      "file": "app/controllers/filters_controller.rb",
      "line": 24,
      "endLine": 37,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hat_requests_controller.rb::HatRequestsController.new",
      "name": "HatRequestsController.new",
      "kind": "handler",
      "file": "app/controllers/hat_requests_controller.rb",
      "line": 8,
      "endLine": 12,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hat_requests_controller.rb::HatRequestsController.create",
      "name": "HatRequestsController.create",
      "kind": "handler",
      "file": "app/controllers/hat_requests_controller.rb",
      "line": 14,
      "endLine": 27,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hat_requests_controller.rb::HatRequestsController.index",
      "name": "HatRequestsController.index",
      "kind": "handler",
      "file": "app/controllers/hat_requests_controller.rb",
      "line": 29,
      "endLine": 32,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hat_requests_controller.rb::HatRequestsController.approve",
      "name": "HatRequestsController.approve",
      "kind": "handler",
      "file": "app/controllers/hat_requests_controller.rb",
      "line": 34,
      "endLine": 43,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hat_requests_controller.rb::HatRequestsController.reject",
      "name": "HatRequestsController.reject",
      "kind": "handler",
      "file": "app/controllers/hat_requests_controller.rb",
      "line": 45,
      "endLine": 52,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hats_controller.rb::HatsController.index",
      "name": "HatsController.index",
      "kind": "handler",
      "file": "app/controllers/hats_controller.rb",
      "line": 10,
      "endLine": 19,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hats_controller.rb::HatsController.doff",
      "name": "HatsController.doff",
      "kind": "handler",
      "file": "app/controllers/hats_controller.rb",
      "line": 21,
      "endLine": 23,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hats_controller.rb::HatsController.doff_by_user",
      "name": "HatsController.doff_by_user",
      "kind": "handler",
      "file": "app/controllers/hats_controller.rb",
      "line": 25,
      "endLine": 33,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hats_controller.rb::HatsController.edit",
      "name": "HatsController.edit",
      "kind": "handler",
      "file": "app/controllers/hats_controller.rb",
      "line": 35,
      "endLine": 37,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hats_controller.rb::HatsController.update_in_place",
      "name": "HatsController.update_in_place",
      "kind": "handler",
      "file": "app/controllers/hats_controller.rb",
      "line": 39,
      "endLine": 55,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hats_controller.rb::HatsController.update_by_recreating",
      "name": "HatsController.update_by_recreating",
      "kind": "handler",
      "file": "app/controllers/hats_controller.rb",
      "line": 57,
      "endLine": 77,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.active#GET /active",
      "name": "HomeController.active",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 14,
      "endLine": 26,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.active#GET /active/page/{page}",
      "name": "HomeController.active",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 14,
      "endLine": 26,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.hidden#GET /hidden",
      "name": "HomeController.hidden",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 28,
      "endLine": 37,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.hidden#GET /hidden/page/{page}",
      "name": "HomeController.hidden",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 28,
      "endLine": 37,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.index#GET /",
      "name": "HomeController.index",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 39,
      "endLine": 79,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.index#GET /rss",
      "name": "HomeController.index",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 39,
      "endLine": 79,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.index#GET /hottest",
      "name": "HomeController.index",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 39,
      "endLine": 79,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.index#GET /page/{page}",
      "name": "HomeController.index",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 39,
      "endLine": 79,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.newest#GET /newest",
      "name": "HomeController.newest",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 81,
      "endLine": 118,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.newest#GET /newest/page/{page}",
      "name": "HomeController.newest",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 81,
      "endLine": 118,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.newest_by_user",
      "name": "HomeController.newest_by_user",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 120,
      "endLine": 135,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.recent#GET /recent",
      "name": "HomeController.recent",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 137,
      "endLine": 150,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.recent#GET /recent/page/{page}",
      "name": "HomeController.recent",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 137,
      "endLine": 150,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.saved#GET /saved",
      "name": "HomeController.saved",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 152,
      "endLine": 175,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.saved#GET /saved/page/{page}",
      "name": "HomeController.saved",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 152,
      "endLine": 175,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.category",
      "name": "HomeController.category",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 177,
      "endLine": 200,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.single_tag#GET /t/{tag}",
      "name": "HomeController.single_tag",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 202,
      "endLine": 226,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.single_tag#GET /t/{tag}/page/{page}",
      "name": "HomeController.single_tag",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 202,
      "endLine": 226,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.multi_tag#GET /t/{tag}",
      "name": "HomeController.multi_tag",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 228,
      "endLine": 252,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.multi_tag#GET /t/{tag}/page/{page}",
      "name": "HomeController.multi_tag",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 228,
      "endLine": 252,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.for_domain#GET /domains(/{id}|/{id}.{format})",
      "name": "HomeController.for_domain",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 254,
      "endLine": 274,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.for_domain#GET /domains/{id}/page/{page}",
      "name": "HomeController.for_domain",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 254,
      "endLine": 274,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.for_origin",
      "name": "HomeController.for_origin",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 276,
      "endLine": 296,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.top",
      "name": "HomeController.top",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 298,
      "endLine": 325,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.upvoted#GET /upvoted/stories",
      "name": "HomeController.upvoted",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 327,
      "endLine": 351,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.upvoted#GET /upvoted/stories/page/{page}",
      "name": "HomeController.upvoted",
      "kind": "handler",
      "file": "app/controllers/home_controller.rb",
      "line": 327,
      "endLine": 351,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/inbox_controller.rb::InboxController.index",
      "name": "InboxController.index",
      "kind": "handler",
      "file": "app/controllers/inbox_controller.rb",
      "line": 8,
      "endLine": 14,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/inbox_controller.rb::InboxController.all",
      "name": "InboxController.all",
      "kind": "handler",
      "file": "app/controllers/inbox_controller.rb",
      "line": 16,
      "endLine": 34,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/inbox_controller.rb::InboxController.unread",
      "name": "InboxController.unread",
      "kind": "handler",
      "file": "app/controllers/inbox_controller.rb",
      "line": 36,
      "endLine": 50,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/invitations_controller.rb::InvitationsController.build",
      "name": "InvitationsController.build",
      "kind": "handler",
      "file": "app/controllers/invitations_controller.rb",
      "line": 8,
      "endLine": 16,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/invitations_controller.rb::InvitationsController.index",
      "name": "InvitationsController.index",
      "kind": "handler",
      "file": "app/controllers/invitations_controller.rb",
      "line": 18,
      "endLine": 26,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/invitations_controller.rb::InvitationsController.confirm_email",
      "name": "InvitationsController.confirm_email",
      "kind": "handler",
      "file": "app/controllers/invitations_controller.rb",
      "line": 28,
      "endLine": 40,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/invitations_controller.rb::InvitationsController.create",
      "name": "InvitationsController.create",
      "kind": "handler",
      "file": "app/controllers/invitations_controller.rb",
      "line": 42,
      "endLine": 70,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/invitations_controller.rb::InvitationsController.create_by_request",
      "name": "InvitationsController.create_by_request",
      "kind": "handler",
      "file": "app/controllers/invitations_controller.rb",
      "line": 72,
      "endLine": 90,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/invitations_controller.rb::InvitationsController.send_for_request",
      "name": "InvitationsController.send_for_request",
      "kind": "handler",
      "file": "app/controllers/invitations_controller.rb",
      "line": 92,
      "endLine": 114,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/invitations_controller.rb::InvitationsController.delete_request",
      "name": "InvitationsController.delete_request",
      "kind": "handler",
      "file": "app/controllers/invitations_controller.rb",
      "line": 116,
      "endLine": 131,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.logout",
      "name": "LoginController.logout",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 23,
      "endLine": 29,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.index",
      "name": "LoginController.index",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 31,
      "endLine": 34,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.login",
      "name": "LoginController.login",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 36,
      "endLine": 118,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.forgot_password",
      "name": "LoginController.forgot_password",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 120,
      "endLine": 122,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.reset_password",
      "name": "LoginController.reset_password",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 124,
      "endLine": 149,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.set_new_password#GET /login/set_new_password",
      "name": "LoginController.set_new_password",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 151,
      "endLine": 196,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.set_new_password#POST /login/set_new_password",
      "name": "LoginController.set_new_password",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 151,
      "endLine": 196,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.twofa",
      "name": "LoginController.twofa",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 198,
      "endLine": 204,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.twofa_verify",
      "name": "LoginController.twofa_verify",
      "kind": "handler",
      "file": "app/controllers/login_controller.rb",
      "line": 206,
      "endLine": 216,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.index",
      "name": "MessagesController.index",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 9,
      "endLine": 30,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.sent",
      "name": "MessagesController.sent",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 32,
      "endLine": 50,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.create",
      "name": "MessagesController.create",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 52,
      "endLine": 70,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.show",
      "name": "MessagesController.show",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 72,
      "endLine": 91,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.destroy",
      "name": "MessagesController.destroy",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 93,
      "endLine": 111,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.batch_delete",
      "name": "MessagesController.batch_delete",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 113,
      "endLine": 140,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.keep_as_new",
      "name": "MessagesController.keep_as_new",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 142,
      "endLine": 146,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.mod_note",
      "name": "MessagesController.mod_note",
      "kind": "handler",
      "file": "app/controllers/messages_controller.rb",
      "line": 148,
      "endLine": 152,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/activities_controller.rb::Mod::ActivitiesController.index",
      "name": "Mod::ActivitiesController.index",
      "kind": "handler",
      "file": "app/controllers/mod/activities_controller.rb",
      "line": 4,
      "endLine": 10,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/comments_controller.rb::Mod::CommentsController.destroy",
      "name": "Mod::CommentsController.destroy",
      "kind": "handler",
      "file": "app/controllers/mod/comments_controller.rb",
      "line": 6,
      "endLine": 22,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_ban_controller.rb::Mod::DomainsBanController.create_and_ban",
      "name": "Mod::DomainsBanController.create_and_ban",
      "kind": "handler",
      "file": "app/controllers/mod/domains_ban_controller.rb",
      "line": 6,
      "endLine": 13,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_ban_controller.rb::Mod::DomainsBanController.update",
      "name": "Mod::DomainsBanController.update",
      "kind": "handler",
      "file": "app/controllers/mod/domains_ban_controller.rb",
      "line": 15,
      "endLine": 28,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_controller.rb::Mod::DomainsController.create",
      "name": "Mod::DomainsController.create",
      "kind": "handler",
      "file": "app/controllers/mod/domains_controller.rb",
      "line": 4,
      "endLine": 15,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_controller.rb::Mod::DomainsController.edit",
      "name": "Mod::DomainsController.edit",
      "kind": "handler",
      "file": "app/controllers/mod/domains_controller.rb",
      "line": 17,
      "endLine": 20,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_controller.rb::Mod::DomainsController.update#PATCH /mod/domains/{id}",
      "name": "Mod::DomainsController.update",
      "kind": "handler",
      "file": "app/controllers/mod/domains_controller.rb",
      "line": 22,
      "endLine": 30,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_controller.rb::Mod::DomainsController.update#PUT /mod/domains/{id}",
      "name": "Mod::DomainsController.update",
      "kind": "handler",
      "file": "app/controllers/mod/domains_controller.rb",
      "line": 22,
      "endLine": 30,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/flagged_controller.rb::Mod::FlaggedController.flagged_stories",
      "name": "Mod::FlaggedController.flagged_stories",
      "kind": "handler",
      "file": "app/controllers/mod/flagged_controller.rb",
      "line": 9,
      "endLine": 15,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/flagged_controller.rb::Mod::FlaggedController.flagged_comments",
      "name": "Mod::FlaggedController.flagged_comments",
      "kind": "handler",
      "file": "app/controllers/mod/flagged_controller.rb",
      "line": 17,
      "endLine": 27,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/flagged_controller.rb::Mod::FlaggedController.commenters",
      "name": "Mod::FlaggedController.commenters",
      "kind": "handler",
      "file": "app/controllers/mod/flagged_controller.rb",
      "line": 29,
      "endLine": 35,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mail_messages_controller.rb::Mod::MailMessagesController.create",
      "name": "Mod::MailMessagesController.create",
      "kind": "handler",
      "file": "app/controllers/mod/mail_messages_controller.rb",
      "line": 2,
      "endLine": 11,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.index",
      "name": "Mod::MailsController.index",
      "kind": "handler",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 6,
      "endLine": 8,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.show",
      "name": "Mod::MailsController.show",
      "kind": "handler",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 10,
      "endLine": 13,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.new",
      "name": "Mod::MailsController.new",
      "kind": "handler",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 15,
      "endLine": 17,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.edit",
      "name": "Mod::MailsController.edit",
      "kind": "handler",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 19,
      "endLine": 20,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.create",
      "name": "Mod::MailsController.create",
      "kind": "handler",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 22,
      "endLine": 28,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.update#PATCH /mod/mails/{id}",
      "name": "Mod::MailsController.update",
      "kind": "handler",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 30,
      "endLine": 36,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.update#PUT /mod/mails/{id}",
      "name": "Mod::MailsController.update",
      "kind": "handler",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 30,
      "endLine": 36,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/notes_controller.rb::Mod::NotesController.create",
      "name": "Mod::NotesController.create",
      "kind": "handler",
      "file": "app/controllers/mod/notes_controller.rb",
      "line": 4,
      "endLine": 15,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/origins_ban_controller.rb::Mod::OriginsBanController.create_and_ban",
      "name": "Mod::OriginsBanController.create_and_ban",
      "kind": "handler",
      "file": "app/controllers/mod/origins_ban_controller.rb",
      "line": 6,
      "endLine": 16,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/origins_ban_controller.rb::Mod::OriginsBanController.update",
      "name": "Mod::OriginsBanController.update",
      "kind": "handler",
      "file": "app/controllers/mod/origins_ban_controller.rb",
      "line": 18,
      "endLine": 31,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/origins_controller.rb::Mod::OriginsController.edit",
      "name": "Mod::OriginsController.edit",
      "kind": "handler",
      "file": "app/controllers/mod/origins_controller.rb",
      "line": 4,
      "endLine": 7,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/reparents_controller.rb::Mod::ReparentsController.new",
      "name": "Mod::ReparentsController.new",
      "kind": "handler",
      "file": "app/controllers/mod/reparents_controller.rb",
      "line": 5,
      "endLine": 8,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/reparents_controller.rb::Mod::ReparentsController.create",
      "name": "Mod::ReparentsController.create",
      "kind": "handler",
      "file": "app/controllers/mod/reparents_controller.rb",
      "line": 10,
      "endLine": 29,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/stories_controller.rb::Mod::StoriesController.edit",
      "name": "Mod::StoriesController.edit",
      "kind": "handler",
      "file": "app/controllers/mod/stories_controller.rb",
      "line": 10,
      "endLine": 17,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/stories_controller.rb::Mod::StoriesController.update#PATCH /mod/stories/{id}",
      "name": "Mod::StoriesController.update",
      "kind": "handler",
      "file": "app/controllers/mod/stories_controller.rb",
      "line": 19,
      "endLine": 30,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/stories_controller.rb::Mod::StoriesController.update#PUT /mod/stories/{id}",
      "name": "Mod::StoriesController.update",
      "kind": "handler",
      "file": "app/controllers/mod/stories_controller.rb",
      "line": 19,
      "endLine": 30,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/stories_controller.rb::Mod::StoriesController.undelete",
      "name": "Mod::StoriesController.undelete",
      "kind": "handler",
      "file": "app/controllers/mod/stories_controller.rb",
      "line": 32,
      "endLine": 42,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/stories_controller.rb::Mod::StoriesController.destroy",
      "name": "Mod::StoriesController.destroy",
      "kind": "handler",
      "file": "app/controllers/mod/stories_controller.rb",
      "line": 44,
      "endLine": 61,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/tags_controller.rb::Mod::TagsController.new",
      "name": "Mod::TagsController.new",
      "kind": "handler",
      "file": "app/controllers/mod/tags_controller.rb",
      "line": 6,
      "endLine": 9,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/tags_controller.rb::Mod::TagsController.create",
      "name": "Mod::TagsController.create",
      "kind": "handler",
      "file": "app/controllers/mod/tags_controller.rb",
      "line": 11,
      "endLine": 21,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/tags_controller.rb::Mod::TagsController.edit",
      "name": "Mod::TagsController.edit",
      "kind": "handler",
      "file": "app/controllers/mod/tags_controller.rb",
      "line": 23,
      "endLine": 26,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/tags_controller.rb::Mod::TagsController.update#PATCH /mod/tags/{id}",
      "name": "Mod::TagsController.update",
      "kind": "handler",
      "file": "app/controllers/mod/tags_controller.rb",
      "line": 28,
      "endLine": 37,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/tags_controller.rb::Mod::TagsController.update#PUT /mod/tags/{id}",
      "name": "Mod::TagsController.update",
      "kind": "handler",
      "file": "app/controllers/mod/tags_controller.rb",
      "line": 28,
      "endLine": 37,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod_mail_messages_controller.rb::ModMailMessagesController.create",
      "name": "ModMailMessagesController.create",
      "kind": "handler",
      "file": "app/controllers/mod_mail_messages_controller.rb",
      "line": 4,
      "endLine": 15,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod_mails_controller.rb::ModMailsController.index",
      "name": "ModMailsController.index",
      "kind": "handler",
      "file": "app/controllers/mod_mails_controller.rb",
      "line": 4,
      "endLine": 7,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod_mails_controller.rb::ModMailsController.show",
      "name": "ModMailsController.show",
      "kind": "handler",
      "file": "app/controllers/mod_mails_controller.rb",
      "line": 9,
      "endLine": 13,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/moderations_controller.rb::ModerationsController.index#GET /moderations",
      "name": "ModerationsController.index",
      "kind": "handler",
      "file": "app/controllers/moderations_controller.rb",
      "line": 8,
      "endLine": 63,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/moderations_controller.rb::ModerationsController.index#GET /moderations/page/{page}",
      "name": "ModerationsController.index",
      "kind": "handler",
      "file": "app/controllers/moderations_controller.rb",
      "line": 8,
      "endLine": 63,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/origins_controller.rb::OriginsController.for_domain",
      "name": "OriginsController.for_domain",
      "kind": "handler",
      "file": "app/controllers/origins_controller.rb",
      "line": 2,
      "endLine": 5,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/search_controller.rb::SearchController.index#GET /search",
      "name": "SearchController.index",
      "kind": "handler",
      "file": "app/controllers/search_controller.rb",
      "line": 7,
      "endLine": 29,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/search_controller.rb::SearchController.index#GET /search/{q}",
      "name": "SearchController.index",
      "kind": "handler",
      "file": "app/controllers/search_controller.rb",
      "line": 7,
      "endLine": 29,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.index",
      "name": "SettingsController.index",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 8,
      "endLine": 11,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.deactivate",
      "name": "SettingsController.deactivate",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 13,
      "endLine": 35,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.update_avatar_source",
      "name": "SettingsController.update_avatar_source",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 37,
      "endLine": 42,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.update",
      "name": "SettingsController.update",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 44,
      "endLine": 68,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.twofa",
      "name": "SettingsController.twofa",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 70,
      "endLine": 72,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.twofa_auth",
      "name": "SettingsController.twofa_auth",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 74,
      "endLine": 90,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.twofa_enroll",
      "name": "SettingsController.twofa_enroll",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 92,
      "endLine": 116,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.twofa_verify",
      "name": "SettingsController.twofa_verify",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 118,
      "endLine": 126,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.twofa_update",
      "name": "SettingsController.twofa_update",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 128,
      "endLine": 151,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.pushover_auth",
      "name": "SettingsController.pushover_auth",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 155,
      "endLine": 168,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.pushover_callback",
      "name": "SettingsController.pushover_callback",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 170,
      "endLine": 195,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.mastodon_authentication",
      "name": "SettingsController.mastodon_authentication",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 197,
      "endLine": 198,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.mastodon_auth",
      "name": "SettingsController.mastodon_auth",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 200,
      "endLine": 208,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.mastodon_callback",
      "name": "SettingsController.mastodon_callback",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 210,
      "endLine": 232,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.mastodon_disconnect",
      "name": "SettingsController.mastodon_disconnect",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 234,
      "endLine": 247,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.github_auth",
      "name": "SettingsController.github_auth",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 249,
      "endLine": 252,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.github_callback",
      "name": "SettingsController.github_callback",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 254,
      "endLine": 275,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/settings_controller.rb::SettingsController.github_disconnect",
      "name": "SettingsController.github_disconnect",
      "kind": "handler",
      "file": "app/controllers/settings_controller.rb",
      "line": 277,
      "endLine": 286,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/signup_controller.rb::SignupController.index",
      "name": "SignupController.index",
      "kind": "handler",
      "file": "app/controllers/signup_controller.rb",
      "line": 8,
      "endLine": 17,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/signup_controller.rb::SignupController.invite",
      "name": "SignupController.invite",
      "kind": "handler",
      "file": "app/controllers/signup_controller.rb",
      "line": 19,
      "endLine": 21,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/signup_controller.rb::SignupController.invited",
      "name": "SignupController.invited",
      "kind": "handler",
      "file": "app/controllers/signup_controller.rb",
      "line": 23,
      "endLine": 46,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/signup_controller.rb::SignupController.signup",
      "name": "SignupController.signup",
      "kind": "handler",
      "file": "app/controllers/signup_controller.rb",
      "line": 48,
      "endLine": 78,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stats_controller.rb::StatsController.index",
      "name": "StatsController.index",
      "kind": "handler",
      "file": "app/controllers/stats_controller.rb",
      "line": 4,
      "endLine": 6,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.create",
      "name": "StoriesController.create",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 25,
      "endLine": 57,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.destroy#DELETE /stories/{id}",
      "name": "StoriesController.destroy",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 59,
      "endLine": 75,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.destroy#PATCH /stories/{story_id}/destroy",
      "name": "StoriesController.destroy",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 59,
      "endLine": 75,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.edit",
      "name": "StoriesController.edit",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 77,
      "endLine": 84,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.new",
      "name": "StoriesController.new",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 94,
      "endLine": 125,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.preview",
      "name": "StoriesController.preview",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 127,
      "endLine": 141,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.show#GET /stories/{id}",
      "name": "StoriesController.show",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 143,
      "endLine": 204,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.show#GET /s(/{id}|/{id}/{title})",
      "name": "StoriesController.show",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 143,
      "endLine": 204,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.undelete",
      "name": "StoriesController.undelete",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 206,
      "endLine": 222,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.update#PATCH /stories/{id}",
      "name": "StoriesController.update",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 224,
      "endLine": 244,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.update#PUT /stories/{id}",
      "name": "StoriesController.update",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 224,
      "endLine": 244,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.unvote",
      "name": "StoriesController.unvote",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 246,
      "endLine": 256,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.upvote",
      "name": "StoriesController.upvote",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 258,
      "endLine": 272,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.flag",
      "name": "StoriesController.flag",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 274,
      "endLine": 292,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.hide",
      "name": "StoriesController.hide",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 294,
      "endLine": 326,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.unhide",
      "name": "StoriesController.unhide",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 328,
      "endLine": 355,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.save",
      "name": "StoriesController.save",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 357,
      "endLine": 389,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.unsave",
      "name": "StoriesController.unsave",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 391,
      "endLine": 418,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.check_url_dupe",
      "name": "StoriesController.check_url_dupe",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 420,
      "endLine": 442,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.disown",
      "name": "StoriesController.disown",
      "kind": "handler",
      "file": "app/controllers/stories_controller.rb",
      "line": 444,
      "endLine": 452,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/story_image_controller.rb::StoryImageController.show",
      "name": "StoryImageController.show",
      "kind": "handler",
      "file": "app/controllers/story_image_controller.rb",
      "line": 4,
      "endLine": 21,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/story_urls_controller.rb::StoryUrlsController.all",
      "name": "StoryUrlsController.all",
      "kind": "handler",
      "file": "app/controllers/story_urls_controller.rb",
      "line": 4,
      "endLine": 12,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/story_urls_controller.rb::StoryUrlsController.latest",
      "name": "StoryUrlsController.latest",
      "kind": "handler",
      "file": "app/controllers/story_urls_controller.rb",
      "line": 14,
      "endLine": 25,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/suggestions_controller.rb::SuggestionsController.create",
      "name": "SuggestionsController.create",
      "kind": "handler",
      "file": "app/controllers/suggestions_controller.rb",
      "line": 8,
      "endLine": 65,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/suggestions_controller.rb::SuggestionsController.new",
      "name": "SuggestionsController.new",
      "kind": "handler",
      "file": "app/controllers/suggestions_controller.rb",
      "line": 67,
      "endLine": 80,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/tags_controller.rb::TagsController.index#GET /tags",
      "name": "TagsController.index",
      "kind": "handler",
      "file": "app/controllers/tags_controller.rb",
      "line": 6,
      "endLine": 18,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/tags_controller.rb::TagsController.index#GET /tags.json",
      "name": "TagsController.index",
      "kind": "handler",
      "file": "app/controllers/tags_controller.rb",
      "line": 6,
      "endLine": 18,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.show",
      "name": "UsersController.show",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 13,
      "endLine": 41,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.tree#GET /users",
      "name": "UsersController.tree",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 43,
      "endLine": 73,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.tree#GET /moderators",
      "name": "UsersController.tree",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 43,
      "endLine": 73,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.disable_invitation",
      "name": "UsersController.disable_invitation",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 75,
      "endLine": 86,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.enable_invitation",
      "name": "UsersController.enable_invitation",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 88,
      "endLine": 99,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.ban",
      "name": "UsersController.ban",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 101,
      "endLine": 117,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.unban",
      "name": "UsersController.unban",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 119,
      "endLine": 130,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.standing",
      "name": "UsersController.standing",
      "kind": "handler",
      "file": "app/controllers/users_controller.rb",
      "line": 132,
      "endLine": 163,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/concerns/authenticatable.rb::Authenticatable.authenticate_user",
      "name": "Authenticatable.authenticate_user",
      "kind": "middleware",
      "file": "app/controllers/concerns/authenticatable.rb",
      "line": 8,
      "endLine": 24,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/keystore.rb::Keystore.value_for",
      "name": "Keystore.value_for",
      "kind": "library",
      "file": "app/models/keystore.rb",
      "line": 21,
      "endLine": 23,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/application_controller.rb::ApplicationController.remove_unknown_cookies",
      "name": "ApplicationController.remove_unknown_cookies",
      "kind": "middleware",
      "file": "app/controllers/application_controller.rb",
      "line": 72,
      "endLine": 81,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.expire_avatar!",
      "name": "User.expire_avatar!",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 378,
      "endLine": 388,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "extras/sponge.rb::Sponge.dputs",
      "name": "Sponge.dputs",
      "kind": "library",
      "file": "extras/sponge.rb",
      "line": 305,
      "endLine": 309,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/avatars_controller.rb::AvatarsController.content_type_for",
      "name": "AvatarsController.content_type_for",
      "kind": "library",
      "file": "app/controllers/avatars_controller.rb",
      "line": 52,
      "endLine": 54,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "extras/sponge.rb::Sponge.fetch",
      "name": "Sponge.fetch",
      "kind": "library",
      "file": "extras/sponge.rb",
      "line": 131,
      "endLine": 284,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/category.rb::Category.log_modifications",
      "name": "Category.log_modifications",
      "kind": "library",
      "file": "app/models/category.rb",
      "line": 28,
      "endLine": 40,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/moderation.rb::Moderation.send_message_to_moderated",
      "name": "Moderation.send_message_to_moderated",
      "kind": "library",
      "file": "app/models/moderation.rb",
      "line": 74,
      "endLine": 126,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.breaks_speed_limit?",
      "name": "Comment.breaks_speed_limit?",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 257,
      "endLine": 280,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.log_hat_use",
      "name": "Comment.log_hat_use",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 439,
      "endLine": 449,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_comment_job.rb::NotifyCommentJob.perform",
      "name": "NotifyCommentJob.perform",
      "kind": "consumer",
      "file": "app/jobs/notify_comment_job.rb",
      "line": 4,
      "endLine": 8,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.record_initial_upvote",
      "name": "Comment.record_initial_upvote",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 477,
      "endLine": 482,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/keystore.rb::Keystore.incremented_value_for",
      "name": "Keystore.incremented_value_for",
      "kind": "library",
      "file": "app/models/keystore.rb",
      "line": 35,
      "endLine": 41,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.tag_changes",
      "name": "Story.tag_changes",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 884,
      "endLine": 899,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_comment_job.rb::NotifyCommentJob.deliver_reply_notifications",
      "name": "NotifyCommentJob.deliver_reply_notifications",
      "kind": "library",
      "file": "app/jobs/notify_comment_job.rb",
      "line": 68,
      "endLine": 101,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_comment_job.rb::NotifyCommentJob.deliver_mention_notifications",
      "name": "NotifyCommentJob.deliver_mention_notifications",
      "kind": "library",
      "file": "app/jobs/notify_comment_job.rb",
      "line": 15,
      "endLine": 50,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_comment_job.rb::NotifyCommentJob.users_following_thread",
      "name": "NotifyCommentJob.users_following_thread",
      "kind": "library",
      "file": "app/jobs/notify_comment_job.rb",
      "line": 52,
      "endLine": 66,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/comments_controller.rb::CommentsController.find_comment",
      "name": "CommentsController.find_comment",
      "kind": "library",
      "file": "app/controllers/comments_controller.rb",
      "line": 430,
      "endLine": 443,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.delete_by_moderator",
      "name": "Comment.delete_by_moderator",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 302,
      "endLine": 324,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.filter_tags",
      "name": "Comment.filter_tags",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 69,
      "endLine": 75,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.not_on_story_hidden_by",
      "name": "Comment.not_on_story_hidden_by",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 85,
      "endLine": 91,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.on_stories_not_authored_by",
      "name": "Comment.on_stories_not_authored_by",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 62,
      "endLine": 65,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/link.rb::Link.recreate_from_comment!",
      "name": "Link.recreate_from_comment!",
      "kind": "library",
      "file": "app/models/link.rb",
      "line": 58,
      "endLine": 63,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "extras/markdowner.rb::Markdowner.link_username_mentions",
      "name": "Markdowner.link_username_mentions",
      "kind": "library",
      "file": "extras/markdowner.rb",
      "line": 107,
      "endLine": 141,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.calculated_hotness",
      "name": "Story.calculated_hotness",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 561,
      "endLine": 591,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.as_json",
      "name": "Comment.as_json",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 179,
      "endLine": 211,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "extras/markdowner.rb::Markdowner.walk_text_nodes",
      "name": "Markdowner.walk_text_nodes",
      "kind": "library",
      "file": "extras/markdowner.rb",
      "line": 98,
      "endLine": 105,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "extras/markdowner.rb::Markdowner.convert_images_to_links",
      "name": "Markdowner.convert_images_to_links",
      "kind": "library",
      "file": "extras/markdowner.rb",
      "line": 143,
      "endLine": 155,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.parents",
      "name": "Comment.parents",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 465,
      "endLine": 475,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_note.rb::ModNote.create_without_dupe!",
      "name": "ModNote.create_without_dupe!",
      "kind": "library",
      "file": "app/models/mod_note.rb",
      "line": 196,
      "endLine": 200,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment_vote_hydrator.rb::CommentVoteHydrator.initialize",
      "name": "CommentVoteHydrator.initialize",
      "kind": "library",
      "file": "app/models/comment_vote_hydrator.rb",
      "line": 6,
      "endLine": 19,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.undelete_for_user",
      "name": "Comment.undelete_for_user",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 536,
      "endLine": 556,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.refresh_counts!",
      "name": "User.refresh_counts!",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 403,
      "endLine": 407,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/keystore.rb::Keystore.put",
      "name": "Keystore.put",
      "kind": "library",
      "file": "app/models/keystore.rb",
      "line": 25,
      "endLine": 29,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/inactive_user.rb::InactiveUser.disown!",
      "name": "InactiveUser.disown!",
      "kind": "library",
      "file": "app/models/inactive_user.rb",
      "line": 8,
      "endLine": 12,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.can_flag?",
      "name": "User.can_flag?",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 318,
      "endLine": 333,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/vote.rb::Vote.comment_vote_summaries",
      "name": "Vote.comment_vote_summaries",
      "kind": "library",
      "file": "app/models/vote.rb",
      "line": 63,
      "endLine": 71,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.not_deleted",
      "name": "Story.not_deleted",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 76,
      "endLine": 84,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/hat_request.rb::HatRequest.approve_by_user_for_reason!",
      "name": "HatRequest.approve_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/hat_request.rb",
      "line": 14,
      "endLine": 32,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/hat.rb::Hat.log_moderation",
      "name": "Hat.log_moderation",
      "kind": "library",
      "file": "app/models/hat.rb",
      "line": 39,
      "endLine": 47,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/hat_request.rb::HatRequest.reject_by_user_for_reason!",
      "name": "HatRequest.reject_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/hat_request.rb",
      "line": 34,
      "endLine": 45,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/hats_controller.rb::HatsController.find_hat!",
      "name": "HatsController.find_hat!",
      "kind": "middleware",
      "file": "app/controllers/hats_controller.rb",
      "line": 89,
      "endLine": 95,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/stories_paginator.rb::StoriesPaginator.cache_votes",
      "name": "StoriesPaginator.cache_votes",
      "kind": "library",
      "file": "app/models/stories_paginator.rb",
      "line": 31,
      "endLine": 49,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/vote.rb::Vote.votes_by_user_for_stories_hash",
      "name": "Vote.votes_by_user_for_stories_hash",
      "kind": "library",
      "file": "app/models/vote.rb",
      "line": 73,
      "endLine": 82,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.get_from_cache",
      "name": "HomeController.get_from_cache",
      "kind": "library",
      "file": "app/controllers/home_controller.rb",
      "line": 369,
      "endLine": 382,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.active",
      "name": "Story.active",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 190,
      "endLine": 195,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.hidden",
      "name": "Story.hidden",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 177,
      "endLine": 182,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.hottest",
      "name": "Story.hottest",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 89,
      "endLine": 94,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.newest",
      "name": "Story.newest",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 184,
      "endLine": 188,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.recent",
      "name": "Story.recent",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 130,
      "endLine": 137,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.saved",
      "name": "Story.saved",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 197,
      "endLine": 202,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.categories",
      "name": "Story.categories",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 117,
      "endLine": 128,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.tagged",
      "name": "Story.tagged",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 96,
      "endLine": 106,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/home_controller.rb::HomeController.tags_with_description_for_rss",
      "name": "HomeController.tags_with_description_for_rss",
      "kind": "library",
      "file": "app/controllers/home_controller.rb",
      "line": 384,
      "endLine": 386,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/helpers/interval_helper.rb::IntervalHelper.time_interval",
      "name": "IntervalHelper.time_interval",
      "kind": "library",
      "file": "app/helpers/interval_helper.rb",
      "line": 12,
      "endLine": 37,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.top",
      "name": "Story.top",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 108,
      "endLine": 115,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.inbox_count",
      "name": "User.inbox_count",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 625,
      "endLine": 627,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/invitation.rb::Invitation.create_code",
      "name": "Invitation.create_code",
      "kind": "library",
      "file": "app/models/invitation.rb",
      "line": 24,
      "endLine": 30,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/invitation_request.rb::InvitationRequest.create_code",
      "name": "InvitationRequest.create_code",
      "kind": "library",
      "file": "app/models/invitation_request.rb",
      "line": 27,
      "endLine": 33,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_note.rb::ModNote.create_from_message",
      "name": "ModNote.create_from_message",
      "kind": "library",
      "file": "app/models/mod_note.rb",
      "line": 44,
      "endLine": 58,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_message_job.rb::NotifyMessageJob.perform",
      "name": "NotifyMessageJob.perform",
      "kind": "consumer",
      "file": "app/jobs/notify_message_job.rb",
      "line": 4,
      "endLine": 8,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_message_job.rb::NotifyMessageJob.deliver_message_notifications",
      "name": "NotifyMessageJob.deliver_message_notifications",
      "kind": "library",
      "file": "app/jobs/notify_message_job.rb",
      "line": 10,
      "endLine": 30,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/comments_controller.rb::Mod::CommentsController.find_comment",
      "name": "Mod::CommentsController.find_comment",
      "kind": "library",
      "file": "app/controllers/mod/comments_controller.rb",
      "line": 26,
      "endLine": 28,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/domain.rb::Domain.ban_by_user_for_reason!",
      "name": "Domain.ban_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/domain.rb",
      "line": 81,
      "endLine": 93,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_ban_controller.rb::Mod::DomainsBanController.find_or_initialize_domain",
      "name": "Mod::DomainsBanController.find_or_initialize_domain",
      "kind": "middleware",
      "file": "app/controllers/mod/domains_ban_controller.rb",
      "line": 36,
      "endLine": 38,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/domain.rb::Domain.update_origins",
      "name": "Domain.update_origins",
      "kind": "library",
      "file": "app/models/domain.rb",
      "line": 53,
      "endLine": 59,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/domains_controller.rb::Mod::DomainsController.find_or_initialize_domain",
      "name": "Mod::DomainsController.find_or_initialize_domain",
      "kind": "middleware",
      "file": "app/controllers/mod/domains_controller.rb",
      "line": 38,
      "endLine": 40,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mod_controller.rb::Mod::ModController.period",
      "name": "Mod::ModController.period",
      "kind": "library",
      "file": "app/controllers/mod/mod_controller.rb",
      "line": 13,
      "endLine": 16,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/flagged_commenters.rb::FlaggedCommenters.initialize",
      "name": "FlaggedCommenters.initialize",
      "kind": "library",
      "file": "app/models/flagged_commenters.rb",
      "line": 11,
      "endLine": 16,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_mod_mail_message_job.rb::NotifyModMailMessageJob.perform",
      "name": "NotifyModMailMessageJob.perform",
      "kind": "consumer",
      "file": "app/jobs/notify_mod_mail_message_job.rb",
      "line": 4,
      "endLine": 10,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/notify_mod_mail_message_job.rb::NotifyModMailMessageJob.deliver_mod_mail_message_notifications",
      "name": "NotifyModMailMessageJob.deliver_mod_mail_message_notifications",
      "kind": "library",
      "file": "app/jobs/notify_mod_mail_message_job.rb",
      "line": 12,
      "endLine": 34,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/mailers/email_mod_mail_message_mailer.rb::EmailModMailMessageMailer.notify",
      "name": "EmailModMailMessageMailer.notify",
      "kind": "consumer",
      "file": "app/mailers/email_mod_mail_message_mailer.rb",
      "line": 4,
      "endLine": 14,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.set_mod_mail",
      "name": "Mod::MailsController.set_mod_mail",
      "kind": "middleware",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 41,
      "endLine": 43,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/mails_controller.rb::Mod::MailsController.parse_references_and_recipients",
      "name": "Mod::MailsController.parse_references_and_recipients",
      "kind": "middleware",
      "file": "app/controllers/mod/mails_controller.rb",
      "line": 50,
      "endLine": 54,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/origin.rb::Origin.ban_by_user_for_reason!",
      "name": "Origin.ban_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/origin.rb",
      "line": 30,
      "endLine": 42,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/origins_ban_controller.rb::Mod::OriginsBanController.find_or_initialize_origin",
      "name": "Mod::OriginsBanController.find_or_initialize_origin",
      "kind": "middleware",
      "file": "app/controllers/mod/origins_ban_controller.rb",
      "line": 39,
      "endLine": 41,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/origins_controller.rb::Mod::OriginsController.find_or_initialize_origin",
      "name": "Mod::OriginsController.find_or_initialize_origin",
      "kind": "middleware",
      "file": "app/controllers/mod/origins_controller.rb",
      "line": 11,
      "endLine": 13,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/concerns/story_finder.rb::StoryFinder.find_story",
      "name": "StoryFinder.find_story",
      "kind": "library",
      "file": "app/controllers/concerns/story_finder.rb",
      "line": 4,
      "endLine": 18,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.log_moderation",
      "name": "Story.log_moderation",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 804,
      "endLine": 849,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/stories_controller.rb::Mod::StoriesController.update_story_attributes",
      "name": "Mod::StoriesController.update_story_attributes",
      "kind": "library",
      "file": "app/controllers/mod/stories_controller.rb",
      "line": 75,
      "endLine": 78,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/link.rb::Link.recreate_from_story!",
      "name": "Link.recreate_from_story!",
      "kind": "library",
      "file": "app/models/link.rb",
      "line": 66,
      "endLine": 71,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/tag.rb::Tag.log_modifications",
      "name": "Tag.log_modifications",
      "kind": "library",
      "file": "app/models/tag.rb",
      "line": 90,
      "endLine": 101,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/search.rb::Search.perform_comment_search!",
      "name": "Search.perform_comment_search!",
      "kind": "library",
      "file": "app/models/search.rb",
      "line": 122,
      "endLine": 225,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/search.rb::Search.perform_story_search!",
      "name": "Search.perform_story_search!",
      "kind": "library",
      "file": "app/models/search.rb",
      "line": 227,
      "endLine": 329,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/search.rb::Search.flatten_title",
      "name": "Search.flatten_title",
      "kind": "library",
      "file": "app/models/search.rb",
      "line": 91,
      "endLine": 99,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "extras/utils.rb::Utils.normalize",
      "name": "Utils.normalize",
      "kind": "library",
      "file": "extras/utils.rb",
      "line": 10,
      "endLine": 48,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/search.rb::Search.strip_operators",
      "name": "Search.strip_operators",
      "kind": "library",
      "file": "app/models/search.rb",
      "line": 110,
      "endLine": 114,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/search.rb::Search.strip_short_terms",
      "name": "Search.strip_short_terms",
      "kind": "library",
      "file": "app/models/search.rb",
      "line": 118,
      "endLine": 120,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.delete!",
      "name": "User.delete!",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 409,
      "endLine": 432,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.good_riddance?",
      "name": "User.good_riddance?",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 440,
      "endLine": 456,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/username.rb::Username.rename!",
      "name": "Username.rename!",
      "kind": "library",
      "file": "app/models/username.rb",
      "line": 9,
      "endLine": 41,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mastodon_app.rb::MastodonApp.sanitized_instance_name",
      "name": "MastodonApp.sanitized_instance_name",
      "kind": "library",
      "file": "app/models/mastodon_app.rb",
      "line": 147,
      "endLine": 154,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "extras/github.rb::Github.revoke_token",
      "name": "Github.revoke_token",
      "kind": "library",
      "file": "extras/github.rb",
      "line": 41,
      "endLine": 60,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_note.rb::ModNote.tattle_on_invited",
      "name": "ModNote.tattle_on_invited",
      "kind": "library",
      "file": "app/models/mod_note.rb",
      "line": 109,
      "endLine": 137,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.is_resubmit?",
      "name": "Story.is_resubmit?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 491,
      "endLine": 493,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/create_story_card_job.rb::CreateStoryCardJob.perform",
      "name": "CreateStoryCardJob.perform",
      "kind": "consumer",
      "file": "app/jobs/create_story_card_job.rb",
      "line": 5,
      "endLine": 7,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/send_webmention_job.rb::SendWebmentionJob.perform",
      "name": "SendWebmentionJob.perform",
      "kind": "consumer",
      "file": "app/jobs/send_webmention_job.rb",
      "line": 61,
      "endLine": 88,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.update_resubmit_comment_attributes",
      "name": "StoriesController.update_resubmit_comment_attributes",
      "kind": "library",
      "file": "app/controllers/stories_controller.rb",
      "line": 471,
      "endLine": 477,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.update_story_attributes",
      "name": "StoriesController.update_story_attributes",
      "kind": "library",
      "file": "app/controllers/stories_controller.rb",
      "line": 462,
      "endLine": 469,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/send_webmention_job.rb::SendWebmentionJob.endpoint_from_headers",
      "name": "SendWebmentionJob.endpoint_from_headers",
      "kind": "library",
      "file": "app/jobs/send_webmention_job.rb",
      "line": 16,
      "endLine": 32,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story_image.rb::StoryImage.generate",
      "name": "StoryImage.generate",
      "kind": "library",
      "file": "app/models/story_image.rb",
      "line": 23,
      "endLine": 43,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story_image.rb::StoryImage.find_card_image_url",
      "name": "StoryImage.find_card_image_url",
      "kind": "library",
      "file": "app/models/story_image.rb",
      "line": 47,
      "endLine": 74,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/vote.rb::Vote.vote_thusly_on_story_or_comment_for_user_because",
      "name": "Vote.vote_thusly_on_story_or_comment_for_user_because",
      "kind": "library",
      "file": "app/models/vote.rb",
      "line": 111,
      "endLine": 167,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.most_recent_similar",
      "name": "Story.most_recent_similar",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 495,
      "endLine": 497,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.canonical_target",
      "name": "Story.canonical_target",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 1390,
      "endLine": 1392,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.as_json",
      "name": "Story.as_json",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 515,
      "endLine": 552,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.load_user_votes",
      "name": "StoriesController.load_user_votes",
      "kind": "library",
      "file": "app/controllers/stories_controller.rb",
      "line": 494,
      "endLine": 502,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.can_have_images?",
      "name": "Story.can_have_images?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 597,
      "endLine": 610,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.has_suggestions?",
      "name": "Story.has_suggestions?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 729,
      "endLine": 731,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.is_hidden_by_user?",
      "name": "Story.is_hidden_by_user?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 774,
      "endLine": 776,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.is_saved_by_user?",
      "name": "Story.is_saved_by_user?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 782,
      "endLine": 784,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.save_suggested_tags_for_user!",
      "name": "Story.save_suggested_tags_for_user!",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 901,
      "endLine": 942,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.save_suggested_title_for_user!",
      "name": "Story.save_suggested_title_for_user!",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 944,
      "endLine": 976,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.set_domain_and_origin",
      "name": "Story.set_domain_and_origin",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 1162,
      "endLine": 1171,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_mail.rb::ModMail.create_inviter_discussion!",
      "name": "ModMail.create_inviter_discussion!",
      "kind": "library",
      "file": "app/models/mod_mail.rb",
      "line": 38,
      "endLine": 44,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/domain.rb::Domain.find_or_create_origin",
      "name": "Domain.find_or_create_origin",
      "kind": "library",
      "file": "app/models/domain.rb",
      "line": 61,
      "endLine": 79,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.check_tags",
      "name": "Story.check_tags",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 624,
      "endLine": 655,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.front_page",
      "name": "Story.front_page",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 88,
      "endLine": 88,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.mod_preload?",
      "name": "Story.mod_preload?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 69,
      "endLine": 71,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.mod_single_preload?",
      "name": "Story.mod_single_preload?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 72,
      "endLine": 74,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.title=",
      "name": "Story.title=",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 1072,
      "endLine": 1075,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.to_mastodon",
      "name": "Story.to_mastodon",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 169,
      "endLine": 175,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.url=",
      "name": "Story.url=",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 1173,
      "endLine": 1209,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/hidden_story.rb::HiddenStory.hide_story_for_user",
      "name": "HiddenStory.hide_story_for_user",
      "kind": "library",
      "file": "app/models/hidden_story.rb",
      "line": 13,
      "endLine": 17,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/read_ribbon.rb::ReadRibbon.hide_replies_for",
      "name": "ReadRibbon.hide_replies_for",
      "kind": "library",
      "file": "app/models/read_ribbon.rb",
      "line": 28,
      "endLine": 33,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/hidden_story.rb::HiddenStory.unhide_story_for_user",
      "name": "HiddenStory.unhide_story_for_user",
      "kind": "library",
      "file": "app/models/hidden_story.rb",
      "line": 19,
      "endLine": 23,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/read_ribbon.rb::ReadRibbon.unhide_replies_for",
      "name": "ReadRibbon.unhide_replies_for",
      "kind": "library",
      "file": "app/models/read_ribbon.rb",
      "line": 35,
      "endLine": 40,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/saved_story.rb::SavedStory.save_story_for_user",
      "name": "SavedStory.save_story_for_user",
      "kind": "library",
      "file": "app/models/saved_story.rb",
      "line": 13,
      "endLine": 15,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/link.rb::Link.recently_linked_from_comments",
      "name": "Link.recently_linked_from_comments",
      "kind": "library",
      "file": "app/models/link.rb",
      "line": 25,
      "endLine": 29,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.merged_comments",
      "name": "Story.merged_comments",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 860,
      "endLine": 866,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.vote_summary_for",
      "name": "Story.vote_summary_for",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 1234,
      "endLine": 1256,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story_image.rb::StoryImage.initialize",
      "name": "StoryImage.initialize",
      "kind": "library",
      "file": "app/models/story_image.rb",
      "line": 11,
      "endLine": 13,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.find_similar_by_url",
      "name": "Story.find_similar_by_url",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 462,
      "endLine": 468,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.can_have_suggestions_from_user?",
      "name": "Story.can_have_suggestions_from_user?",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 612,
      "endLine": 621,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.disable_invite_by_user_for_reason!",
      "name": "User.disable_invite_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 264,
      "endLine": 292,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.enable_invite_by_user!",
      "name": "User.enable_invite_by_user!",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 608,
      "endLine": 623,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.ban_by_user_for_reason!",
      "name": "User.ban_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 294,
      "endLine": 312,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.unban_by_user!",
      "name": "User.unban_by_user!",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 591,
      "endLine": 606,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "lobsters::app/javascript/user.js::fetchWithCSRF",
      "name": "fetchWithCSRF",
      "kind": "client",
      "file": "app/javascript/user.js",
      "line": 61,
      "endLine": 73,
      "read": 1,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "lobsters::app/javascript/user.js::asyncFormSubmit",
      "name": "asyncFormSubmit",
      "kind": "client",
      "file": "app/javascript/user.js",
      "line": 107,
      "endLine": 140,
      "read": 1,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "lobsters::app/javascript/user.js::anonymous",
      "name": "anonymous",
      "kind": "client",
      "file": "app/javascript/user.js",
      "line": 920,
      "endLine": 931,
      "read": 1,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/environments/production.rb::production.rb",
      "name": "production.rb",
      "kind": "module-init",
      "file": "config/environments/production.rb",
      "line": 1,
      "endLine": 131,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/environments/test.rb::test.rb",
      "name": "test.rb",
      "kind": "module-init",
      "file": "config/environments/test.rb",
      "line": 1,
      "endLine": 75,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/initializers/email.rb::email.rb",
      "name": "email.rb",
      "kind": "module-init",
      "file": "config/initializers/email.rb",
      "line": 1,
      "endLine": 13,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/initializers/slow_query_log.rb::slow_query_log.rb",
      "name": "slow_query_log.rb",
      "kind": "module-init",
      "file": "config/initializers/slow_query_log.rb",
      "line": 1,
      "endLine": 17,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/initializers/telebugs.rb::telebugs.rb",
      "name": "telebugs.rb",
      "kind": "module-init",
      "file": "config/initializers/telebugs.rb",
      "line": 1,
      "endLine": 60,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/puma.rb::puma.rb",
      "name": "puma.rb",
      "kind": "module-init",
      "file": "config/puma.rb",
      "line": 1,
      "endLine": 70,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "spec/sqlite3_cli_spec.rb::sqlite3_cli_spec.rb",
      "name": "sqlite3_cli_spec.rb",
      "kind": "module-init",
      "file": "spec/sqlite3_cli_spec.rb",
      "line": 1,
      "endLine": 27,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/cable.yml::cable.yml",
      "name": "cable.yml",
      "kind": "module-init",
      "file": "config/cable.yml",
      "line": 9,
      "endLine": 11,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "config/queue.yml::queue.yml",
      "name": "queue.yml",
      "kind": "module-init",
      "file": "config/queue.yml",
      "line": 8,
      "endLine": 23,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/application_controller.rb::ApplicationController.find_user_from_rss_token",
      "name": "ApplicationController.find_user_from_rss_token",
      "kind": "middleware",
      "file": "app/controllers/application_controller.rb",
      "line": 99,
      "endLine": 104,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/reparents_controller.rb::Mod::ReparentsController.load_user",
      "name": "Mod::ReparentsController.load_user",
      "kind": "middleware",
      "file": "app/controllers/mod/reparents_controller.rb",
      "line": 33,
      "endLine": 36,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/users_controller.rb::UsersController.load_showing_user",
      "name": "UsersController.load_showing_user",
      "kind": "middleware",
      "file": "app/controllers/users_controller.rb",
      "line": 167,
      "endLine": 190,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/mastodon_sync_list_job.rb::MastodonSyncListJob.perform",
      "name": "MastodonSyncListJob.perform",
      "kind": "consumer",
      "file": "app/jobs/mastodon_sync_list_job.rb",
      "line": 14,
      "endLine": 55,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/login_controller.rb::LoginController.find_twofa_user",
      "name": "LoginController.find_twofa_user",
      "kind": "library",
      "file": "app/controllers/login_controller.rb",
      "line": 220,
      "endLine": 224,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/flagged_commenters.rb::FlaggedCommenters.commenters",
      "name": "FlaggedCommenters.commenters",
      "kind": "library",
      "file": "app/models/flagged_commenters.rb",
      "line": 55,
      "endLine": 90,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/inactive_user.rb::InactiveUser.inactive_user",
      "name": "InactiveUser.inactive_user",
      "kind": "library",
      "file": "app/models/inactive_user.rb",
      "line": 4,
      "endLine": 6,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/user.rb::User.system_user",
      "name": "User.system_user",
      "kind": "library",
      "file": "app/models/user.rb",
      "line": 210,
      "endLine": 212,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.find_user_story",
      "name": "StoriesController.find_user_story",
      "kind": "middleware",
      "file": "app/controllers/stories_controller.rb",
      "line": 479,
      "endLine": 492,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/jobs/refill_story_page_cache_job.rb::RefillStoryPageCacheJob.perform",
      "name": "RefillStoryPageCacheJob.perform",
      "kind": "consumer",
      "file": "app/jobs/refill_story_page_cache_job.rb",
      "line": 5,
      "endLine": 15,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.story_threads",
      "name": "Comment.story_threads",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 591,
      "endLine": 616,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.similar_stories",
      "name": "Story.similar_stories",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 471,
      "endLine": 485,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.merge_story_short_id=",
      "name": "Story.merge_story_short_id=",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 868,
      "endLine": 870,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.hidden_by",
      "name": "Story.hidden_by",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 154,
      "endLine": 156,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.not_hidden_by",
      "name": "Story.not_hidden_by",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 157,
      "endLine": 165,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.saved_by",
      "name": "Story.saved_by",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 166,
      "endLine": 168,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.search",
      "name": "Story.search",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 212,
      "endLine": 215,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/hat.rb::Hat.active",
      "name": "Hat.active",
      "kind": "library",
      "file": "app/models/hat.rb",
      "line": 17,
      "endLine": 17,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.above_average",
      "name": "Comment.above_average",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 57,
      "endLine": 61,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.filter_tags_for",
      "name": "Comment.filter_tags_for",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 76,
      "endLine": 84,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.search",
      "name": "Comment.search",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 92,
      "endLine": 95,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/tag.rb::Tag.related",
      "name": "Tag.related",
      "kind": "library",
      "file": "app/models/tag.rb",
      "line": 37,
      "endLine": 46,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.filter_tags",
      "name": "Story.filter_tags",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 138,
      "endLine": 144,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.filter_tags_for",
      "name": "Story.filter_tags_for",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 145,
      "endLine": 153,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/mod/stories_controller.rb::Mod::StoriesController.story_params",
      "name": "Mod::StoriesController.story_params",
      "kind": "library",
      "file": "app/controllers/mod/stories_controller.rb",
      "line": 65,
      "endLine": 73,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/stories_controller.rb::StoriesController.story_params",
      "name": "StoriesController.story_params",
      "kind": "library",
      "file": "app/controllers/stories_controller.rb",
      "line": 456,
      "endLine": 460,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/story.rb::Story.submission_markdown",
      "name": "Story.submission_markdown",
      "kind": "library",
      "file": "app/models/story.rb",
      "line": 1221,
      "endLine": 1232,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_note.rb::ModNote.tattle_on_story_domain!",
      "name": "ModNote.tattle_on_story_domain!",
      "kind": "library",
      "file": "app/models/mod_note.rb",
      "line": 149,
      "endLine": 162,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_note.rb::ModNote.tattle_on_story_origin!",
      "name": "ModNote.tattle_on_story_origin!",
      "kind": "library",
      "file": "app/models/mod_note.rb",
      "line": 164,
      "endLine": 177,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_note.rb::ModNote.tattle_on_brigading!",
      "name": "ModNote.tattle_on_brigading!",
      "kind": "library",
      "file": "app/models/mod_note.rb",
      "line": 84,
      "endLine": 97,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_note.rb::ModNote.tattle_on_traffic_attribution!",
      "name": "ModNote.tattle_on_traffic_attribution!",
      "kind": "library",
      "file": "app/models/mod_note.rb",
      "line": 179,
      "endLine": 192,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/domain.rb::Domain.unban_by_user_for_reason!",
      "name": "Domain.unban_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/domain.rb",
      "line": 95,
      "endLine": 107,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/origin.rb::Origin.unban_by_user_for_reason!",
      "name": "Origin.unban_by_user_for_reason!",
      "kind": "library",
      "file": "app/models/origin.rb",
      "line": 44,
      "endLine": 56,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/controllers/messages_controller.rb::MessagesController.find_message",
      "name": "MessagesController.find_message",
      "kind": "middleware",
      "file": "app/controllers/messages_controller.rb",
      "line": 163,
      "endLine": 173,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/message.rb::Message.inbox",
      "name": "Message.inbox",
      "kind": "library",
      "file": "app/models/message.rb",
      "line": 36,
      "endLine": 41,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/message.rb::Message.outbox",
      "name": "Message.outbox",
      "kind": "library",
      "file": "app/models/message.rb",
      "line": 42,
      "endLine": 47,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/mod_activity.rb::ModActivity.with_item",
      "name": "ModActivity.with_item",
      "kind": "library",
      "file": "app/models/mod_activity.rb",
      "line": 7,
      "endLine": 12,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/vote.rb::Vote.comment_votes_by_user_for_comment_ids_hash",
      "name": "Vote.comment_votes_by_user_for_comment_ids_hash",
      "kind": "library",
      "file": "app/models/vote.rb",
      "line": 99,
      "endLine": 109,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/vote.rb::Vote.comments_flags",
      "name": "Vote.comments_flags",
      "kind": "library",
      "file": "app/models/vote.rb",
      "line": 21,
      "endLine": 24,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    },
    {
      "id": "app/models/comment.rb::Comment.validate_commenter_hasnt_flagged_parent",
      "name": "Comment.validate_commenter_hasnt_flagged_parent",
      "kind": "library",
      "file": "app/models/comment.rb",
      "line": 522,
      "endLine": 526,
      "read": 0,
      "spec": false,
      "document": null,
      "repository": 0
    }
  ],
  "boundaries": [
    {
      "label": "mysql:User",
      "category": "table",
      "name": "User",
      "system": "mysql"
    },
    {
      "label": "mysql:Keystore",
      "category": "table",
      "name": "Keystore",
      "system": "mysql"
    },
    {
      "label": "io:stdout",
      "category": "other",
      "name": "io:stdout",
      "system": null
    },
    {
      "label": "mysql:Category",
      "category": "table",
      "name": "Category",
      "system": "mysql"
    },
    {
      "label": "mysql:Moderation",
      "category": "table",
      "name": "Moderation",
      "system": "mysql"
    },
    {
      "label": "mysql:Message",
      "category": "table",
      "name": "Message",
      "system": "mysql"
    },
    {
      "label": "mysql:Story",
      "category": "table",
      "name": "Story",
      "system": "mysql"
    },
    {
      "label": "mysql:Hat",
      "category": "table",
      "name": "Hat",
      "system": "mysql"
    },
    {
      "label": "mysql:Comment",
      "category": "table",
      "name": "Comment",
      "system": "mysql"
    },
    {
      "label": "bus:activejob NotifyCommentJob",
      "category": "other",
      "name": "bus:activejob NotifyCommentJob",
      "system": null
    },
    {
      "label": "mysql:Vote",
      "category": "table",
      "name": "Vote",
      "system": "mysql"
    },
    {
      "label": "bus:activejob default#NotifyCommentJob",
      "category": "other",
      "name": "bus:activejob default#NotifyCommentJob",
      "system": null
    },
    {
      "label": "mysql:Tag",
      "category": "table",
      "name": "Tag",
      "system": "mysql"
    },
    {
      "label": "mysql:HiddenStory",
      "category": "table",
      "name": "HiddenStory",
      "system": "mysql"
    },
    {
      "label": "mysql:Tagging",
      "category": "table",
      "name": "Tagging",
      "system": "mysql"
    },
    {
      "label": "mysql:Link",
      "category": "table",
      "name": "Link",
      "system": "mysql"
    },
    {
      "label": "mysql:Username",
      "category": "table",
      "name": "Username",
      "system": "mysql"
    },
    {
      "label": "mysql:ModNote",
      "category": "table",
      "name": "ModNote",
      "system": "mysql"
    },
    {
      "label": "mysql:TagFilter",
      "category": "table",
      "name": "TagFilter",
      "system": "mysql"
    },
    {
      "label": "mysql:HatRequest",
      "category": "table",
      "name": "HatRequest",
      "system": "mysql"
    },
    {
      "label": "mysql:SavedStory",
      "category": "table",
      "name": "SavedStory",
      "system": "mysql"
    },
    {
      "label": "mysql:Domain",
      "category": "table",
      "name": "Domain",
      "system": "mysql"
    },
    {
      "label": "mysql:Origin",
      "category": "table",
      "name": "Origin",
      "system": "mysql"
    },
    {
      "label": "mysql:Notification",
      "category": "table",
      "name": "Notification",
      "system": "mysql"
    },
    {
      "label": "mysql:InvitationRequest",
      "category": "table",
      "name": "InvitationRequest",
      "system": "mysql"
    },
    {
      "label": "mysql:Invitation",
      "category": "table",
      "name": "Invitation",
      "system": "mysql"
    },
    {
      "label": "bus:activejob NotifyMessageJob",
      "category": "other",
      "name": "bus:activejob NotifyMessageJob",
      "system": null
    },
    {
      "label": "bus:activejob default#NotifyMessageJob",
      "category": "other",
      "name": "bus:activejob default#NotifyMessageJob",
      "system": null
    },
    {
      "label": "mysql:ModActivity",
      "category": "table",
      "name": "ModActivity",
      "system": "mysql"
    },
    {
      "label": "mysql:ModMailMessage",
      "category": "table",
      "name": "ModMailMessage",
      "system": "mysql"
    },
    {
      "label": "bus:activejob NotifyModMailMessageJob",
      "category": "other",
      "name": "bus:activejob NotifyModMailMessageJob",
      "system": null
    },
    {
      "label": "bus:activejob default#NotifyModMailMessageJob",
      "category": "other",
      "name": "bus:activejob default#NotifyModMailMessageJob",
      "system": null
    },
    {
      "label": "bus:activejob EmailModMailMessageMailer.notify",
      "category": "other",
      "name": "bus:activejob EmailModMailMessageMailer.notify",
      "system": null
    },
    {
      "label": "mysql:ModMail",
      "category": "table",
      "name": "ModMail",
      "system": "mysql"
    },
    {
      "label": "mysql:MastodonApp",
      "category": "table",
      "name": "MastodonApp",
      "system": "mysql"
    },
    {
      "label": "bus:activejob SendWebmentionJob",
      "category": "other",
      "name": "bus:activejob SendWebmentionJob",
      "system": null
    },
    {
      "label": "bus:activejob CreateStoryCardJob",
      "category": "other",
      "name": "bus:activejob CreateStoryCardJob",
      "system": null
    },
    {
      "label": "bus:activejob default#CreateStoryCardJob",
      "category": "other",
      "name": "bus:activejob default#CreateStoryCardJob",
      "system": null
    },
    {
      "label": "bus:activejob default#SendWebmentionJob",
      "category": "other",
      "name": "bus:activejob default#SendWebmentionJob",
      "system": null
    },
    {
      "label": "mysql:SuggestedTagging",
      "category": "table",
      "name": "SuggestedTagging",
      "system": "mysql"
    },
    {
      "label": "mysql:SuggestedTitle",
      "category": "table",
      "name": "SuggestedTitle",
      "system": "mysql"
    },
    {
      "label": "mysql:ReadRibbon",
      "category": "table",
      "name": "ReadRibbon",
      "system": "mysql"
    },
    {
      "label": "runtime-config RAILS_SERVE_STATIC_FILES",
      "category": "env",
      "name": "RAILS_SERVE_STATIC_FILES",
      "system": null
    },
    {
      "label": "runtime-config RAILS_LOG_LEVEL",
      "category": "env",
      "name": "RAILS_LOG_LEVEL",
      "system": null
    },
    {
      "label": "runtime-config CI",
      "category": "env",
      "name": "CI",
      "system": null
    },
    {
      "label": "runtime-config SMTP_HOST",
      "category": "env",
      "name": "SMTP_HOST",
      "system": null
    },
    {
      "label": "runtime-config SMTP_PORT",
      "category": "env",
      "name": "SMTP_PORT",
      "system": null
    },
    {
      "label": "runtime-config SMTP_STARTTLS_AUTO",
      "category": "env",
      "name": "SMTP_STARTTLS_AUTO",
      "system": null
    },
    {
      "label": "runtime-config SMTP_USERNAME",
      "category": "env",
      "name": "SMTP_USERNAME",
      "system": null
    },
    {
      "label": "runtime-config SMTP_PASSWORD",
      "category": "env",
      "name": "SMTP_PASSWORD",
      "system": null
    },
    {
      "label": "runtime-config ENABLE_SLOW_QUERY_LOGS",
      "category": "env",
      "name": "ENABLE_SLOW_QUERY_LOGS",
      "system": null
    },
    {
      "label": "runtime-config SLOW_QUERY_THRESHOLD_MS",
      "category": "env",
      "name": "SLOW_QUERY_THRESHOLD_MS",
      "system": null
    },
    {
      "label": "runtime-config REVISION",
      "category": "env",
      "name": "REVISION",
      "system": null
    },
    {
      "label": "runtime-config RAILS_ENV",
      "category": "env",
      "name": "RAILS_ENV",
      "system": null
    },
    {
      "label": "runtime-config RAILS_MAX_THREADS",
      "category": "env",
      "name": "RAILS_MAX_THREADS",
      "system": null
    },
    {
      "label": "runtime-config PIDFILE",
      "category": "env",
      "name": "PIDFILE",
      "system": null
    },
    {
      "label": "runtime-config PUMA_WORKERS",
      "category": "env",
      "name": "PUMA_WORKERS",
      "system": null
    },
    {
      "label": "runtime-config SOLID_QUEUE_IN_PUMA",
      "category": "env",
      "name": "SOLID_QUEUE_IN_PUMA",
      "system": null
    },
    {
      "label": "runtime-config PATH",
      "category": "env",
      "name": "PATH",
      "system": null
    },
    {
      "label": "runtime-config REDIS_URL",
      "category": "env",
      "name": "REDIS_URL",
      "system": null
    },
    {
      "label": "runtime-config JOB_CONCURRENCY",
      "category": "env",
      "name": "JOB_CONCURRENCY",
      "system": null
    }
  ],
  "entries": [
    {
      "key": "GET /404",
      "kind": "rest",
      "method": "GET",
      "path": "/404",
      "framework": "rails",
      "units": [
        0
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 0,
          "line": 10,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /about",
      "kind": "rest",
      "method": "GET",
      "path": "/about",
      "framework": "rails",
      "units": [
        1
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 1,
          "line": 16,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "catch"
          ],
          "unit": 1,
          "line": 18,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /chat",
      "kind": "rest",
      "method": "GET",
      "path": "/chat",
      "framework": "rails",
      "units": [
        2
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 2,
          "line": 25,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /privacy",
      "kind": "rest",
      "method": "GET",
      "path": "/privacy",
      "framework": "rails",
      "units": [
        3
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 3,
          "line": 33,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /avatars/expire",
      "kind": "rest",
      "method": "POST",
      "path": "/avatars/expire",
      "framework": "rails",
      "units": [
        4
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 4,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 4,
          "line": 13,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        205,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /avatars/{username_size}.png",
      "kind": "rest",
      "method": "GET",
      "path": "/avatars/:username_size.png",
      "framework": "rails",
      "units": [
        5
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ALLOWED_SIZES.include?(size)",
            "username.match(User::VALID_USERNAME)",
            "av = u.fetched_avatar(size)"
          ],
          "unit": 5,
          "line": 16,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(ALLOWED_SIZES.include?(size))"
          ],
          "unit": 5,
          "line": 21,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ALLOWED_SIZES.include?(size)",
            "!(username.match(User::VALID_USERNAME))"
          ],
          "unit": 5,
          "line": 25,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ALLOWED_SIZES.include?(size)",
            "username.match(User::VALID_USERNAME)",
            "!(av = u.fetched_avatar(size))"
          ],
          "unit": 5,
          "line": 31,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 5,
          "line": 16,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 5,
          "via": "User.where(username: username).first!",
          "through": [],
          "line": 28
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "u.fetched_avatar",
            "s.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        5,
        207,
        204,
        208
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /banned-ips",
      "kind": "rest",
      "method": "GET",
      "path": "/banned-ips",
      "framework": "rails",
      "units": [
        6
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 6,
          "line": 4,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /cabinet",
      "kind": "rest",
      "method": "GET",
      "path": "/cabinet",
      "framework": "rails",
      "units": [
        7
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 7,
          "line": 3,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /categories/new",
      "kind": "rest",
      "method": "GET",
      "path": "/categories/new",
      "framework": "rails",
      "units": [
        8
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 8,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 8,
          "line": 6,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /categories",
      "kind": "rest",
      "method": "POST",
      "path": "/categories",
      "framework": "rails",
      "units": [
        9
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 9,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "category().valid?"
          ],
          "unit": 9,
          "line": 16,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!category().valid?"
          ],
          "unit": 9,
          "line": 19,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 9,
          "line": 12,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 3,
          "relations": [
            "writes"
          ],
          "unit": 9,
          "via": "Category.create!(category_params)",
          "through": [],
          "line": 13
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 209,
          "via": "Moderation.create do |m| m.action = if id_previously_changed? \"Created new category \" + attributes.map { |f, c| \"with #{f} '#{c}'\" }.join(\", \") else \"Updating category #{category}, \" + saved_changes.map { |f, c| \"changed #{f} from '#{c[0]}' to '#{c[1]}'\" }.join(\", \") end m.moderator_user_id = @edit_user_id m.category_id = id end",
          "through": [
            "log_modifications"
          ],
          "line": 29
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_modifications",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /categories/{category_name}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/categories/:category_name/edit",
      "framework": "rails",
      "units": [
        10
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 10,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 10,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 10,
          "line": 23,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 10,
          "via": "Category.where(category: params[:category_name]).first!",
          "through": [],
          "line": 24
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /categories/{category_name}",
      "kind": "rest",
      "method": "POST",
      "path": "/categories/:category_name",
      "framework": "rails",
      "units": [
        11
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 11,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "category.update(category_params)"
          ],
          "unit": 11,
          "line": 33,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(category.update(category_params))"
          ],
          "unit": 11,
          "line": 36,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 11,
          "line": 29,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 11,
          "via": "Category.where(category: params[:category_name]).first!",
          "through": [],
          "line": 30
        },
        {
          "boundary": 3,
          "relations": [
            "writes"
          ],
          "unit": 11,
          "via": "category.update(category_params)",
          "through": [],
          "line": 31
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 209,
          "via": "Moderation.create do |m| m.action = if id_previously_changed? \"Created new category \" + attributes.map { |f, c| \"with #{f} '#{c}'\" }.join(\", \") else \"Updating category #{category}, \" + saved_changes.map { |f, c| \"changed #{f} from '#{c[0]}' to '#{c[1]}'\" }.join(\", \") end m.moderator_user_id = @edit_user_id m.category_id = id end",
          "through": [
            "log_modifications"
          ],
          "line": 29
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_modifications",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /comments",
      "kind": "rest",
      "method": "POST",
      "path": "/comments",
      "framework": "rails",
      "units": [
        12
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 12,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?"
          ],
          "unit": 12,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "params[:parent_comment_short_id].present?",
            "!(@comment.parent_comment)"
          ],
          "unit": 12,
          "line": 36,
          "wrapper": null
        },
        {
          "status": null,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "params[:parent_comment_short_id].present?",
            "@comment.parent_comment",
            "already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment)"
          ],
          "unit": 12,
          "line": 45,
          "wrapper": null
        },
        {
          "status": null,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "!(params[:parent_comment_short_id].present?)",
            "already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment)"
          ],
          "unit": 12,
          "line": 45,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "params[:parent_comment_short_id].present?",
            "@comment.parent_comment",
            "!(already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment))",
            "params[:preview].blank? && @comment.breaks_speed_limit?"
          ],
          "unit": 12,
          "line": 50,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "!(params[:parent_comment_short_id].present?)",
            "!(already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment))",
            "params[:preview].blank? && @comment.breaks_speed_limit?"
          ],
          "unit": 12,
          "line": 50,
          "wrapper": null
        },
        {
          "status": null,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "params[:parent_comment_short_id].present?",
            "@comment.parent_comment",
            "!(already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment))",
            "!(params[:preview].blank? && @comment.breaks_speed_limit?)",
            "@comment.valid? && params[:preview].blank? && @comment.save"
          ],
          "unit": 12,
          "line": 61,
          "wrapper": null
        },
        {
          "status": null,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "!(params[:parent_comment_short_id].present?)",
            "!(already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment))",
            "!(params[:preview].blank? && @comment.breaks_speed_limit?)",
            "@comment.valid? && params[:preview].blank? && @comment.save"
          ],
          "unit": 12,
          "line": 61,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "params[:parent_comment_short_id].present?",
            "@comment.parent_comment",
            "!(already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment))",
            "!(params[:preview].blank? && @comment.breaks_speed_limit?)",
            "!(@comment.valid? && params[:preview].blank? && @comment.save)"
          ],
          "unit": 12,
          "line": 66,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(story = Story.where(short_id: params[:story_id]).first) || story().is_gone?)",
            "!(params[:parent_comment_short_id].present?)",
            "!(already = Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment))",
            "!(params[:preview].blank? && @comment.breaks_speed_limit?)",
            "!(@comment.valid? && params[:preview].blank? && @comment.save)"
          ],
          "unit": 12,
          "line": 66,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 12,
          "via": "Story.where(short_id: params[:story_id]).first",
          "through": [],
          "line": 21
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 12,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [],
          "line": 29
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 12,
          "via": "Comment.find_by(story_id: story.id, short_id: params[:parent_comment_short_id])",
          "through": [],
          "line": 34
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 12,
          "via": "Comment.find_by(user: @comment.user, story: @comment.story, parent_comment_id: @comment.parent_comment_id, comment: @comment.comment)",
          "through": [],
          "line": 41
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 12,
          "via": "@comment.save",
          "through": [],
          "line": 54
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 12,
          "via": "@comment.story.touch(:last_comment_at)",
          "through": [],
          "line": 56
        },
        {
          "boundary": 9,
          "relations": [
            "writes"
          ],
          "unit": 12,
          "via": "NotifyCommentJob.perform_later",
          "through": [],
          "line": 60
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 211,
          "via": "Vote.comments_flags(parent_comment_ids).count",
          "through": [
            "@comment.breaks_speed_limit?"
          ],
          "line": 262
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 212,
          "via": "m.save!",
          "through": [
            "log_hat_use"
          ],
          "line": 448
        },
        {
          "boundary": 11,
          "relations": [
            "reads"
          ],
          "unit": 213,
          "via": null,
          "through": [
            "NotifyCommentJob.perform_later, which NotifyCommentJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "writes"
          ],
          "unit": 214,
          "via": "Vote.create! story: story, comment: self, user: user, vote: 1",
          "through": [
            "record_initial_upvote"
          ],
          "line": 479
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "assign_initial_attributes",
            "Keystore.incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_hat_use",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 216,
          "via": "tags.map(&:tag)",
          "through": [
            "log_moderation",
            "tag_changes"
          ],
          "line": 892
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "assign_initial_attributes",
            "Keystore.incremented_value_for",
            "value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 217,
          "via": "HiddenStory.where(story: comment.story).pluck(:user_id)",
          "through": [
            "NotifyCommentJob.perform_later, which NotifyCommentJob#perform runs later",
            "deliver_comment_notifications",
            "deliver_reply_notifications"
          ],
          "line": 77
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        217,
        218,
        219
      ],
      "unread": true,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /comments/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/comments/:id",
      "framework": "rails",
      "units": [
        13
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(comment = find_comment)"
          ],
          "unit": 13,
          "line": 72,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "comment = find_comment",
            "!(comment.is_editable_by_user?(@user))"
          ],
          "unit": 13,
          "line": 75,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "comment = find_comment",
            "comment.is_editable_by_user?(@user)"
          ],
          "unit": 13,
          "line": 78,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [
        343
      ],
      "findings": [
        0
      ],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /c/{id}.json",
      "kind": "rest",
      "method": "GET",
      "path": "/c/:id.json",
      "framework": "rails",
      "units": [
        14
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(comment = find_comment)"
          ],
          "unit": 14,
          "line": 89,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "comment = find_comment"
          ],
          "unit": 14,
          "line": 92,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 221,
          "via": "m.save!",
          "through": [
            "comment.as_json",
            "send, which may run delete_by_moderator"
          ],
          "line": 317
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 222,
          "via": "Tagging.where(tag_id: tags).select(:story_id)",
          "through": [
            "comment.as_json",
            "send, which may run filter_tags"
          ],
          "line": 72
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 223,
          "via": "HiddenStory.select(\"TRUE\").where(Arel.sql(\"hidden_stories.story_id = stories.id\"))",
          "through": [
            "comment.as_json",
            "send, which may run not_on_story_hidden_by"
          ],
          "line": 87
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 224,
          "via": "Story.where.not(user: user, user_is_author: true)",
          "through": [
            "comment.as_json",
            "send, which may run on_stories_not_authored_by"
          ],
          "line": 64
        },
        {
          "boundary": 10,
          "relations": [
            "writes"
          ],
          "unit": 214,
          "via": "Vote.create! story: story, comment: self, user: user, vote: 1",
          "through": [
            "comment.as_json",
            "send, which may run record_initial_upvote"
          ],
          "line": 479
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "comment.as_json",
            "send, which may run assign_initial_attributes",
            "Keystore.incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "comment.as_json",
            "send, which may run delete_by_moderator",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 225,
          "via": "Link.where(from_comment_id: c.id).delete_all",
          "through": [
            "comment.as_json",
            "send, which may run recreate_links",
            "Link.recreate_from_comment!"
          ],
          "line": 60
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 16,
          "relations": [
            "reads"
          ],
          "unit": 226,
          "via": "Username.where(\"created_at < ? and (? < renamed_away_at or renamed_away_at is null)\", as_of, as_of).where(\"LOWER(username) = ?\", user[1..].downcase).exists?",
          "through": [
            "comment.as_json",
            "send, which may run generated_markeddown_comment",
            "Markdowner.to_html",
            "link_username_mentions"
          ],
          "line": 118
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "tags.sum(:hotness_mod)",
          "through": [
            "comment.as_json",
            "send, which may run update_associated_caches",
            "story.update_cached_columns",
            "calculated_hotness"
          ],
          "line": 564
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        228,
        204,
        225,
        229,
        226,
        230
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /comments/{id}/comments/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/comments/:id/comments/:id",
      "framework": "rails",
      "units": [
        15
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user&.is_admin? && params[:id] =~ /\\A\\d+\\z/"
          ],
          "unit": 15,
          "line": 97,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user&.is_admin? && params[:id] =~ /\\A\\d+\\z/)"
          ],
          "unit": 15,
          "line": 106,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 15,
          "line": 95,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 15,
          "via": "Comment.find(params[:id])",
          "through": [],
          "line": 97
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 15,
          "via": "Story.joins(\"join stories as s2 on stories.id = coalesce(s2.merged_story_id, s2.id) join comments on comments.story_id = s2.id\").where(comments: {short_id: params[:id]}).select(:short_id, :title).first",
          "through": [],
          "line": 101
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /c/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/c/:id",
      "framework": "rails",
      "units": [
        16
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user&.is_admin? && params[:id] =~ /\\A\\d+\\z/"
          ],
          "unit": 16,
          "line": 97,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user&.is_admin? && params[:id] =~ /\\A\\d+\\z/)"
          ],
          "unit": 16,
          "line": 106,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 16,
          "line": 95,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 16,
          "via": "Comment.find(params[:id])",
          "through": [],
          "line": 97
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 16,
          "via": "Story.joins(\"join stories as s2 on stories.id = coalesce(s2.merged_story_id, s2.id) join comments on comments.story_id = s2.id\").where(comments: {short_id: params[:id]}).select(:short_id, :title).first",
          "through": [],
          "line": 101
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /s/{story_id}/{title}/comments/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/s/:story_id/:title/comments/:id",
      "framework": "rails",
      "units": [
        17
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user&.is_admin? && params[:id] =~ /\\A\\d+\\z/"
          ],
          "unit": 17,
          "line": 97,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user&.is_admin? && params[:id] =~ /\\A\\d+\\z/)"
          ],
          "unit": 17,
          "line": 106,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 17,
          "line": 95,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 17,
          "via": "Comment.find(params[:id])",
          "through": [],
          "line": 97
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 17,
          "via": "Story.joins(\"join stories as s2 on stories.id = coalesce(s2.merged_story_id, s2.id) join comments on comments.story_id = s2.id\").where(comments: {short_id: params[:id]}).select(:short_id, :title).first",
          "through": [],
          "line": 101
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /comments/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/comments/:id/edit",
      "framework": "rails",
      "units": [
        18
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment && @comment.is_editable_by_user?(@user))"
          ],
          "unit": 18,
          "line": 116,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "request.xhr?"
          ],
          "unit": 18,
          "line": 120,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "!request.xhr?"
          ],
          "unit": 18,
          "line": 123,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 231,
          "via": "Comment.none",
          "through": [
            "@comment.parents"
          ],
          "line": 466
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /comments/{id}/reply",
      "kind": "rest",
      "method": "GET",
      "path": "/comments/:id/reply",
      "framework": "rails",
      "units": [
        19
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 19,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(parent_comment = find_comment)"
          ],
          "unit": 19,
          "line": 129,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "parent_comment = find_comment",
            "!parent_comment().depth_permits_reply?",
            "request.xhr?"
          ],
          "unit": 19,
          "line": 141,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "parent_comment = find_comment",
            "!parent_comment().depth_permits_reply?",
            "!request.xhr?"
          ],
          "unit": 19,
          "line": 143,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "parent_comment = find_comment",
            "parent_comment().depth_permits_reply?",
            "request.xhr?"
          ],
          "unit": 19,
          "line": 149,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "parent_comment = find_comment",
            "parent_comment().depth_permits_reply?",
            "!request.xhr?"
          ],
          "unit": 19,
          "line": 153,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 231,
          "via": "Comment.none",
          "through": [
            "comment.parents"
          ],
          "line": 466
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "ModNote.tattle_on_max_depth_limit",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /comments/{id}/delete",
      "kind": "rest",
      "method": "POST",
      "path": "/comments/:id/delete",
      "framework": "rails",
      "units": [
        20
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment && @comment.is_deletable_by_user?(@user))"
          ],
          "unit": 20,
          "line": 163,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_deletable_by_user?(@user)"
          ],
          "unit": 20,
          "line": 168,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /comments/{id}/undelete",
      "kind": "rest",
      "method": "POST",
      "path": "/comments/:id/undelete",
      "framework": "rails",
      "units": [
        21
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment && @comment.is_undeletable_by_user?(@user))"
          ],
          "unit": 21,
          "line": 174,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_undeletable_by_user?(@user)"
          ],
          "unit": 21,
          "line": 179,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 234,
          "via": "m.save!",
          "through": [
            "@comment.undelete_for_user"
          ],
          "line": 550
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@comment.undelete_for_user",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "tags.sum(:hotness_mod)",
          "through": [
            "@comment.undelete_for_user",
            "update_score_and_recalculate!",
            "story.update_cached_columns",
            "calculated_hotness"
          ],
          "line": 564
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "merged_stories.map(&:score)",
          "through": [
            "@comment.undelete_for_user",
            "update_score_and_recalculate!",
            "story.update_cached_columns",
            "calculated_hotness"
          ],
          "line": 574
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /comments/{id}/disown",
      "kind": "rest",
      "method": "POST",
      "path": "/comments/:id/disown",
      "framework": "rails",
      "units": [
        22
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment && @comment.is_disownable_by_user?(@user))"
          ],
          "unit": 22,
          "line": 185,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_disownable_by_user?(@user)",
            "request.xhr?"
          ],
          "unit": 22,
          "line": 195,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_disownable_by_user?(@user)",
            "!request.xhr?"
          ],
          "unit": 22,
          "line": 183,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 235,
          "via": "stories.count",
          "through": [
            "InactiveUser.disown!",
            "refresh_counts!",
            "inactive_user.refresh_counts!"
          ],
          "line": 404
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 236,
          "via": "Keystore.upsert({key: key, value: value}, returning: false)",
          "through": [
            "InactiveUser.disown!",
            "refresh_counts!",
            "inactive_user.refresh_counts!",
            "Keystore.put"
          ],
          "line": 27
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        237,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /comments/{id}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/comments/:id",
      "framework": "rails",
      "units": [
        23
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 23,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment && @comment.is_editable_by_user?(@user))"
          ],
          "unit": 23,
          "line": 203,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "params[:preview].blank? && @comment.save",
            "!request.xhr?"
          ],
          "unit": 23,
          "line": 222,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "params[:preview].blank? && @comment.save",
            "request.xhr?",
            "params[:redirect_on_submit].present?"
          ],
          "unit": 23,
          "line": 226,
          "wrapper": null
        },
        {
          "status": null,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "params[:preview].blank? && @comment.save",
            "request.xhr?",
            "!(params[:redirect_on_submit].present?)"
          ],
          "unit": 23,
          "line": 228,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "!(params[:preview].blank? && @comment.save)"
          ],
          "unit": 23,
          "line": 233,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 23,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [],
          "line": 209
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 23,
          "via": "@comment.save",
          "through": [],
          "line": 211
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 23,
          "via": "@comment.parent_comment&.touch(:last_reply_at)",
          "through": [],
          "line": 219
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 212,
          "via": "m.save!",
          "through": [
            "log_hat_use"
          ],
          "line": 448
        },
        {
          "boundary": 10,
          "relations": [
            "writes"
          ],
          "unit": 214,
          "via": "Vote.create! story: story, comment: self, user: user, vote: 1",
          "through": [
            "record_initial_upvote"
          ],
          "line": 479
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "assign_initial_attributes",
            "Keystore.incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_hat_use",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 225,
          "via": "Link.where(from_comment_id: c.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_comment!"
          ],
          "line": 60
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 235,
          "via": "stories.count",
          "through": [
            "update_associated_caches",
            "user.refresh_counts!"
          ],
          "line": 404
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "assign_initial_attributes",
            "Keystore.incremented_value_for",
            "value_for"
          ],
          "line": 22
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "tags.sum(:hotness_mod)",
          "through": [
            "update_associated_caches",
            "story.update_cached_columns",
            "calculated_hotness"
          ],
          "line": 564
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        225
      ],
      "unread": true,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PUT /comments/{id}",
      "kind": "rest",
      "method": "PUT",
      "path": "/comments/:id",
      "framework": "rails",
      "units": [
        24
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 24,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment && @comment.is_editable_by_user?(@user))"
          ],
          "unit": 24,
          "line": 203,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "params[:preview].blank? && @comment.save",
            "!request.xhr?"
          ],
          "unit": 24,
          "line": 222,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "params[:preview].blank? && @comment.save",
            "request.xhr?",
            "params[:redirect_on_submit].present?"
          ],
          "unit": 24,
          "line": 226,
          "wrapper": null
        },
        {
          "status": null,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "params[:preview].blank? && @comment.save",
            "request.xhr?",
            "!(params[:redirect_on_submit].present?)"
          ],
          "unit": 24,
          "line": 228,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment && @comment.is_editable_by_user?(@user)",
            "!(params[:preview].blank? && @comment.save)"
          ],
          "unit": 24,
          "line": 233,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 24,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [],
          "line": 209
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 24,
          "via": "@comment.save",
          "through": [],
          "line": 211
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 24,
          "via": "@comment.parent_comment&.touch(:last_reply_at)",
          "through": [],
          "line": 219
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 212,
          "via": "m.save!",
          "through": [
            "log_hat_use"
          ],
          "line": 448
        },
        {
          "boundary": 10,
          "relations": [
            "writes"
          ],
          "unit": 214,
          "via": "Vote.create! story: story, comment: self, user: user, vote: 1",
          "through": [
            "record_initial_upvote"
          ],
          "line": 479
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "assign_initial_attributes",
            "Keystore.incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_hat_use",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 225,
          "via": "Link.where(from_comment_id: c.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_comment!"
          ],
          "line": 60
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 235,
          "via": "stories.count",
          "through": [
            "update_associated_caches",
            "user.refresh_counts!"
          ],
          "line": 404
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "assign_initial_attributes",
            "Keystore.incremented_value_for",
            "value_for"
          ],
          "line": 22
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "tags.sum(:hotness_mod)",
          "through": [
            "update_associated_caches",
            "story.update_cached_columns",
            "calculated_hotness"
          ],
          "line": 564
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        225
      ],
      "unread": true,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /comments/{id}/unvote",
      "kind": "rest",
      "method": "POST",
      "path": "/comments/:id/unvote",
      "framework": "rails",
      "units": [
        25
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 25,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment) || @comment.is_gone?"
          ],
          "unit": 25,
          "line": 239,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@comment = find_comment) || @comment.is_gone?)",
            "request.xhr?"
          ],
          "unit": 25,
          "line": 247,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@comment = find_comment) || @comment.is_gone?)",
            "!request.xhr?"
          ],
          "unit": 25,
          "line": 249,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /comments/{id}/upvote",
      "kind": "rest",
      "method": "POST",
      "path": "/comments/:id/upvote",
      "framework": "rails",
      "units": [
        26
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 26,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment) || @comment.is_gone?"
          ],
          "unit": 26,
          "line": 255,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@comment = find_comment) || @comment.is_gone?)",
            "request.xhr?"
          ],
          "unit": 26,
          "line": 263,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@comment = find_comment) || @comment.is_gone?)",
            "!request.xhr?"
          ],
          "unit": 26,
          "line": 265,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /comments/{id}/flag",
      "kind": "rest",
      "method": "POST",
      "path": "/comments/:id/flag",
      "framework": "rails",
      "units": [
        27
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 27,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment) || @comment.is_gone?"
          ],
          "unit": 27,
          "line": 271,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@comment = find_comment) || @comment.is_gone?)",
            "!(Vote::COMMENT_REASONS[params[:reason]])"
          ],
          "unit": 27,
          "line": 275,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@comment = find_comment) || @comment.is_gone?)",
            "Vote::COMMENT_REASONS[params[:reason]]",
            "!(@user.can_flag?(@comment))"
          ],
          "unit": 27,
          "line": 279,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@comment = find_comment) || @comment.is_gone?)",
            "Vote::COMMENT_REASONS[params[:reason]]",
            "@user.can_flag?(@comment)"
          ],
          "unit": 27,
          "line": 286,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [
            "find_comment"
          ],
          "line": 431
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [
            "find_comment"
          ],
          "line": 436
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        238,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /comments",
      "kind": "rest",
      "method": "GET",
      "path": "/comments",
      "framework": "rails",
      "units": [
        28
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.html"
          ],
          "unit": 28,
          "line": 331,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.html"
          ],
          "unit": 28,
          "line": 331,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.rss",
            "@user && params[:token].present?"
          ],
          "unit": 28,
          "line": 335,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.rss",
            "@user && params[:token].present?"
          ],
          "unit": 28,
          "line": 335,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.rss",
            "!(@user && params[:token].present?)"
          ],
          "unit": 28,
          "line": 340,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.rss",
            "!(@user && params[:token].present?)"
          ],
          "unit": 28,
          "line": 340,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "@page < 0 || @page > (2**32)"
          ],
          "unit": 28,
          "line": 301,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 28,
          "via": "Comment.accessible_to_user(@user).not_on_story_hidden_by(@user).filter_tags(filtered_tags.map(&:id)).order(id: :desc).includes(:user, :hat, story: :user).joins(:story).where.not(stories: {is_deleted: true}).limit(COMMENTS_PER_PAGE).offset((@page - 1) * COMMENTS_PER_PAGE)",
          "through": [],
          "line": 304
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 28,
          "via": "@user&.touch(:last_read_newest_comment)",
          "through": [],
          "line": 323
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        28,
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /comments/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/comments/page/:page",
      "framework": "rails",
      "units": [
        29
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.html"
          ],
          "unit": 29,
          "line": 331,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.html"
          ],
          "unit": 29,
          "line": 331,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.rss",
            "@user && params[:token].present?"
          ],
          "unit": 29,
          "line": 335,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.rss",
            "@user && params[:token].present?"
          ],
          "unit": 29,
          "line": 335,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.rss",
            "!(@user && params[:token].present?)"
          ],
          "unit": 29,
          "line": 340,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.rss",
            "!(@user && params[:token].present?)"
          ],
          "unit": 29,
          "line": 340,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "@page < 0 || @page > (2**32)"
          ],
          "unit": 29,
          "line": 301,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 29,
          "via": "Comment.accessible_to_user(@user).not_on_story_hidden_by(@user).filter_tags(filtered_tags.map(&:id)).order(id: :desc).includes(:user, :hat, story: :user).joins(:story).where.not(stories: {is_deleted: true}).limit(COMMENTS_PER_PAGE).offset((@page - 1) * COMMENTS_PER_PAGE)",
          "through": [],
          "line": 304
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 29,
          "via": "@user&.touch(:last_read_newest_comment)",
          "through": [],
          "line": 323
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        29,
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /upvoted/comments",
      "kind": "rest",
      "method": "GET",
      "path": "/upvoted/comments",
      "framework": "rails",
      "units": [
        30
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 30,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.html"
          ],
          "unit": 30,
          "line": 378,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.html"
          ],
          "unit": 30,
          "line": 378,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.rss"
          ],
          "unit": 30,
          "line": 384,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.rss"
          ],
          "unit": 30,
          "line": 384,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "@page < 0 || @page > (2**32)"
          ],
          "unit": 30,
          "line": 359,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 30,
          "via": "Comment.accessible_to_user(@user).where.not(user_id: @user.id).order(id: :desc).includes(:user, :hat, story: :user).joins(:votes).where(votes: {user_id: @user.id, vote: 1}).joins(:story).where.not(stories: {is_deleted: true})",
          "through": [],
          "line": 362
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        30,
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /upvoted/comments/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/upvoted/comments/page/:page",
      "framework": "rails",
      "units": [
        31
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 31,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.html"
          ],
          "unit": 31,
          "line": 378,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.html"
          ],
          "unit": 31,
          "line": 378,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page === 0",
            "format.rss"
          ],
          "unit": 31,
          "line": 384,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "!(@page < 0 || @page > (2**32))",
            "format.rss"
          ],
          "unit": 31,
          "line": 384,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "@page < 0 || @page > (2**32)"
          ],
          "unit": 31,
          "line": 359,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 31,
          "via": "Comment.accessible_to_user(@user).where.not(user_id: @user.id).order(id: :desc).includes(:user, :hat, story: :user).joins(:votes).where(votes: {user_id: @user.id, vote: 1}).joins(:story).where.not(stories: {is_deleted: true})",
          "through": [],
          "line": 362
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        31,
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /threads",
      "kind": "rest",
      "method": "GET",
      "path": "/threads",
      "framework": "rails",
      "units": [
        32
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.user",
            "!(@user)"
          ],
          "unit": 32,
          "line": 394,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params.user"
          ],
          "unit": 32,
          "line": 389,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.user",
            "@user"
          ],
          "unit": 32,
          "line": 389,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 32,
          "line": 389,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 32,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": 391
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 32,
          "via": "Comment.recent_threads(@showing_user).merge(Story.not_deleted(@user)).for_presentation.joins(:story).load",
          "through": [],
          "line": 399
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 240,
          "via": "where(is_deleted: false).or(where(user: user))",
          "through": [
            "Story.not_deleted"
          ],
          "line": 82
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /~{user}/threads",
      "kind": "rest",
      "method": "GET",
      "path": "/~:user/threads",
      "framework": "rails",
      "units": [
        33
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.user",
            "!(@user)"
          ],
          "unit": 33,
          "line": 394,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params.user"
          ],
          "unit": 33,
          "line": 389,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.user",
            "@user"
          ],
          "unit": 33,
          "line": 389,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 33,
          "line": 389,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 33,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": 391
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 33,
          "via": "Comment.recent_threads(@showing_user).merge(Story.not_deleted(@user)).for_presentation.joins(:story).load",
          "through": [],
          "line": 399
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 240,
          "via": "where(is_deleted: false).or(where(user: user))",
          "through": [
            "Story.not_deleted"
          ],
          "line": 82
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /~{user}/comments.rss",
      "kind": "rest",
      "method": "GET",
      "path": "/~:user/comments.rss",
      "framework": "rails",
      "units": [
        34
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 34,
          "line": 424,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 34,
          "line": 407,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 34,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": 409
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 34,
          "via": "Comment.where(user: @showing_user).merge(Story.not_deleted(@user)).for_presentation.joins(:story)",
          "through": [],
          "line": 417
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 240,
          "via": "where(is_deleted: false).or(where(user: user))",
          "through": [
            "Story.not_deleted"
          ],
          "line": 82
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /filters",
      "kind": "rest",
      "method": "GET",
      "path": "/filters",
      "framework": "rails",
      "units": [
        35
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 35,
          "line": 10,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 35,
          "via": "Category.includes(:tags).where(tags: {active: true}).order([categories: {category: :asc}, tags: {tag: :asc}])",
          "through": [],
          "line": 13
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 35,
          "via": "Tagging.group(:tag_id).count",
          "through": [],
          "line": 18
        },
        {
          "boundary": 18,
          "relations": [
            "reads"
          ],
          "unit": 35,
          "via": "TagFilter.group(:tag_id).count",
          "through": [],
          "line": 19
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        35,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /filters",
      "kind": "rest",
      "method": "POST",
      "path": "/filters",
      "framework": "rails",
      "units": [
        36
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 36,
          "line": 36,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 36,
          "via": "Tag.active.where(tag: (params[:tags] || {}).keys).to_a",
          "through": [],
          "line": 25
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        36,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hat_requests/new",
      "kind": "rest",
      "method": "GET",
      "path": "/hat_requests/new",
      "framework": "rails",
      "units": [
        37
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 37,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 37,
          "line": 11,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /hat_requests",
      "kind": "rest",
      "method": "POST",
      "path": "/hat_requests",
      "framework": "rails",
      "units": [
        38
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 38,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@hat_request.save"
          ],
          "unit": 38,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@hat_request.save)"
          ],
          "unit": 38,
          "line": 26,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 19,
          "relations": [
            "writes"
          ],
          "unit": 38,
          "via": "@hat_request.save",
          "through": [],
          "line": 21
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hat_requests",
      "kind": "rest",
      "method": "GET",
      "path": "/hat_requests",
      "framework": "rails",
      "units": [
        39
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 39,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 39,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 39,
          "line": 29,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 19,
          "relations": [
            "reads"
          ],
          "unit": 39,
          "via": "HatRequest.all.includes(:user)",
          "through": [],
          "line": 31
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /hat_requests/{id}/approve",
      "kind": "rest",
      "method": "POST",
      "path": "/hat_requests/:id/approve",
      "framework": "rails",
      "units": [
        40
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 40,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 40,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 40,
          "line": 42,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 40,
          "line": 34,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 40,
          "line": 34,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 19,
          "relations": [
            "reads"
          ],
          "unit": 40,
          "via": "HatRequest.find(params[:id])",
          "through": [],
          "line": 35
        },
        {
          "boundary": 19,
          "relations": [
            "writes"
          ],
          "unit": 40,
          "via": "@hat_request.update!(params.require(:hat_request).permit(:hat, :link, :reason).except(:reason))",
          "through": [],
          "line": 36
        },
        {
          "boundary": 7,
          "relations": [
            "writes"
          ],
          "unit": 241,
          "via": "h.save!",
          "through": [
            "@hat_request.approve_by_user_for_reason!"
          ],
          "line": 21
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 241,
          "via": "m.save!",
          "through": [
            "@hat_request.approve_by_user_for_reason!"
          ],
          "line": 28
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 242,
          "via": "m.save!",
          "through": [
            "@hat_request.approve_by_user_for_reason!",
            "log_moderation"
          ],
          "line": 46
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /hat_requests/{id}/reject",
      "kind": "rest",
      "method": "POST",
      "path": "/hat_requests/:id/reject",
      "framework": "rails",
      "units": [
        41
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 41,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 41,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 41,
          "line": 51,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 41,
          "line": 45,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 19,
          "relations": [
            "reads"
          ],
          "unit": 41,
          "via": "HatRequest.find(params[:id])",
          "through": [],
          "line": 46
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 243,
          "via": "m.save!",
          "through": [
            "@hat_request.reject_by_user_for_reason!"
          ],
          "line": 41
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hats",
      "kind": "rest",
      "method": "GET",
      "path": "/hats",
      "framework": "rails",
      "units": [
        42
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 42,
          "line": 10,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 42,
          "via": "Hat.active.includes(:user).find_each do |h| @hat_groups[h.hat] ||= [] @hat_groups[h.hat].push h end",
          "through": [],
          "line": 15
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hats/{id}/doff",
      "kind": "rest",
      "method": "GET",
      "path": "/hats/:id/doff",
      "framework": "rails",
      "units": [
        43
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 43,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@hat.user === @user || @user&.is_moderator?)"
          ],
          "unit": 43,
          "line": 85,
          "wrapper": "only_hat_user_or_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 43,
          "line": 21,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 244,
          "via": "Hat.find_by(short_id: params[:id])",
          "through": [
            "find_hat!"
          ],
          "line": 91
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /hats/{id}/doff_by_user",
      "kind": "rest",
      "method": "POST",
      "path": "/hats/:id/doff_by_user",
      "framework": "rails",
      "units": [
        44
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 44,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@hat.user === @user || @user&.is_moderator?)"
          ],
          "unit": 44,
          "line": 85,
          "wrapper": "only_hat_user_or_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:reason].blank?"
          ],
          "unit": 44,
          "line": 28,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:reason].blank?)"
          ],
          "unit": 44,
          "line": 32,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 244,
          "via": "Hat.find_by(short_id: params[:id])",
          "through": [
            "find_hat!"
          ],
          "line": 91
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hats/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/hats/:id/edit",
      "framework": "rails",
      "units": [
        45
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 45,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 45,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 45,
          "line": 35,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 244,
          "via": "Hat.find_by(short_id: params[:id])",
          "through": [
            "find_hat!"
          ],
          "line": 91
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /hats/{id}/update_in_place",
      "kind": "rest",
      "method": "POST",
      "path": "/hats/:id/update_in_place",
      "framework": "rails",
      "units": [
        46
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 46,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 46,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@hat.update(hat: params[:hat][:hat], link: params[:hat][:link])"
          ],
          "unit": 46,
          "line": 50,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@hat.update(hat: params[:hat][:hat], link: params[:hat][:link]))"
          ],
          "unit": 46,
          "line": 53,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 46,
          "line": 39,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 46,
          "via": "m.save!",
          "through": [],
          "line": 48
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 244,
          "via": "Hat.find_by(short_id: params[:id])",
          "through": [
            "find_hat!"
          ],
          "line": 91
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /hats/{id}/update_by_recreating",
      "kind": "rest",
      "method": "POST",
      "path": "/hats/:id/update_by_recreating",
      "framework": "rails",
      "units": [
        47
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 47,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 47,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "replaced_hat().save"
          ],
          "unit": 47,
          "line": 72,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!replaced_hat().save"
          ],
          "unit": 47,
          "line": 75,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 7,
          "relations": [
            "writes"
          ],
          "unit": 47,
          "via": "replaced_hat.save",
          "through": [],
          "line": 69
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 244,
          "via": "Hat.find_by(short_id: params[:id])",
          "through": [
            "find_hat!"
          ],
          "line": 91
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 242,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 46
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /active",
      "kind": "rest",
      "method": "GET",
      "path": "/active",
      "framework": "rails",
      "units": [
        48
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 48,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 48,
          "line": 24,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        48,
        247,
        248,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /active/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/active/page/:page",
      "framework": "rails",
      "units": [
        49
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 49,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 49,
          "line": 24,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        49,
        247,
        248,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hidden",
      "kind": "rest",
      "method": "GET",
      "path": "/hidden",
      "framework": "rails",
      "units": [
        50
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 50,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 50,
          "line": 36,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        50,
        247,
        249,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hidden/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/hidden/page/:page",
      "framework": "rails",
      "units": [
        51
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 51,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 51,
          "line": 36,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        51,
        247,
        249,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /",
      "kind": "rest",
      "method": "GET",
      "path": "/",
      "framework": "rails",
      "units": [
        52
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 52,
          "line": 64,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "@user"
          ],
          "unit": 52,
          "line": 69,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "!(@user)"
          ],
          "unit": 52,
          "line": 74,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 52,
          "line": 77,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        52,
        247,
        250,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /rss",
      "kind": "rest",
      "method": "GET",
      "path": "/rss",
      "framework": "rails",
      "units": [
        53
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 53,
          "line": 64,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "@user"
          ],
          "unit": 53,
          "line": 69,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "!(@user)"
          ],
          "unit": 53,
          "line": 74,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 53,
          "line": 77,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        53,
        247,
        250,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /hottest",
      "kind": "rest",
      "method": "GET",
      "path": "/hottest",
      "framework": "rails",
      "units": [
        54
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 54,
          "line": 64,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "@user"
          ],
          "unit": 54,
          "line": 69,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "!(@user)"
          ],
          "unit": 54,
          "line": 74,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 54,
          "line": 77,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        54,
        247,
        250,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/page/:page",
      "framework": "rails",
      "units": [
        55
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 55,
          "line": 64,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "@user"
          ],
          "unit": 55,
          "line": 69,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss",
            "!(@user)"
          ],
          "unit": 55,
          "line": 74,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 55,
          "line": 77,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        55,
        247,
        250,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /newest",
      "kind": "rest",
      "method": "GET",
      "path": "/newest",
      "framework": "rails",
      "units": [
        56
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 56,
          "line": 108,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 56,
          "line": 114,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 56,
          "line": 116,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 56,
          "via": "@user&.touch(:last_read_newest_story)",
          "through": [],
          "line": 100
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        56,
        247,
        251,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /newest/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/newest/page/:page",
      "framework": "rails",
      "units": [
        57
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 57,
          "line": 108,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 57,
          "line": 114,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 57,
          "line": 116,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 57,
          "via": "@user&.touch(:last_read_newest_story)",
          "through": [],
          "line": 100
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        57,
        247,
        251,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /~{user}/stories(|/page/{page})",
      "kind": "rest",
      "method": "GET",
      "path": "/~:user/stories(|/page/:page)",
      "framework": "rails",
      "units": [
        58
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 58,
          "line": 129,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 58,
          "line": 131,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 58,
          "line": 133,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 58,
          "line": 120,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 58,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": 121
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /recent",
      "kind": "rest",
      "method": "GET",
      "path": "/recent",
      "framework": "rails",
      "units": [
        59
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 59,
          "line": 149,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        59,
        247,
        252,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /recent/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/recent/page/:page",
      "framework": "rails",
      "units": [
        60
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 60,
          "line": 149,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        60,
        247,
        252,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /saved",
      "kind": "rest",
      "method": "GET",
      "path": "/saved",
      "framework": "rails",
      "units": [
        61
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 61,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 61,
          "line": 166,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 61,
          "line": 171,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 61,
          "line": 173,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        61,
        247,
        253,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /saved/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/saved/page/:page",
      "framework": "rails",
      "units": [
        62
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 62,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 62,
          "line": 166,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 62,
          "line": 171,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 62,
          "line": 173,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        62,
        247,
        253,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /categories/{category}",
      "kind": "rest",
      "method": "GET",
      "path": "/categories/:category",
      "framework": "rails",
      "units": [
        63
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "categories().length === category_params().length",
            "format.html"
          ],
          "unit": 63,
          "line": 196,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "categories().length === category_params().length",
            "format.rss"
          ],
          "unit": 63,
          "line": 197,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "categories().length === category_params().length",
            "format.json"
          ],
          "unit": 63,
          "line": 198,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(categories().length === category_params().length)"
          ],
          "unit": 63,
          "line": 181,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 63,
          "via": "Category.where(category: category_params)",
          "through": [],
          "line": 179
        },
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 63,
          "via": "categories.map(&:category)",
          "through": [],
          "line": 187
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 254,
          "via": "Tagging.joins(:tag).where(\"story_id = stories.id\").where(tag: {category_id: categories})",
          "through": [
            "Story.categories"
          ],
          "line": 121
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        254,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /t/{tag}",
      "kind": "rest",
      "method": "GET",
      "path": "/t/:tag",
      "framework": "rails",
      "units": [
        64,
        66
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 64,
          "line": 222,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 64,
          "line": 223,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 64,
          "line": 224,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 64,
          "line": 202,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@tags.length === tag_params().length",
            "format.html"
          ],
          "unit": 66,
          "line": 248,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@tags.length === tag_params().length",
            "format.rss"
          ],
          "unit": 66,
          "line": 249,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@tags.length === tag_params().length",
            "format.json"
          ],
          "unit": 66,
          "line": 250,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@tags.length === tag_params().length)"
          ],
          "unit": 66,
          "line": 231,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 64,
          "via": "Tag.find_by!(tag: params[:tag])",
          "through": [],
          "line": 203
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 66,
          "via": "Tag.where(tag: tag_params)",
          "through": [],
          "line": 230
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 66,
          "via": "@tags.map do |tag| [tag.tag, tag.description].compact.join(\" - \") end",
          "through": [],
          "line": 237
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 255,
          "via": "Tagging.where(\"story_id = stories.id\").where(tag_id: tags)",
          "through": [
            "Story.tagged"
          ],
          "line": 100
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        255,
        204,
        245,
        256
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /t/{tag}/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/t/:tag/page/:page",
      "framework": "rails",
      "units": [
        65,
        67
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 65,
          "line": 222,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 65,
          "line": 223,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 65,
          "line": 224,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 65,
          "line": 202,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@tags.length === tag_params().length",
            "format.html"
          ],
          "unit": 67,
          "line": 248,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@tags.length === tag_params().length",
            "format.rss"
          ],
          "unit": 67,
          "line": 249,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@tags.length === tag_params().length",
            "format.json"
          ],
          "unit": 67,
          "line": 250,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@tags.length === tag_params().length)"
          ],
          "unit": 67,
          "line": 231,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 65,
          "via": "Tag.find_by!(tag: params[:tag])",
          "through": [],
          "line": 203
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 67,
          "via": "Tag.where(tag: tag_params)",
          "through": [],
          "line": 230
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 67,
          "via": "@tags.map do |tag| [tag.tag, tag.description].compact.join(\" - \") end",
          "through": [],
          "line": 237
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 255,
          "via": "Tagging.where(\"story_id = stories.id\").where(tag_id: tags)",
          "through": [
            "Story.tagged"
          ],
          "line": 100
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        255,
        204,
        245,
        256
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /domains(/{id}|/{id}.{format})",
      "kind": "rest",
      "method": "GET",
      "path": "/domains(/:id|/:id.:format)",
      "framework": "rails",
      "units": [
        68
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 68,
          "line": 270,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 68,
          "line": 271,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 68,
          "line": 272,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 68,
          "line": 254,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 68,
          "via": "Domain.find_by!(domain: params[:id])",
          "through": [],
          "line": 255
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /domains/{id}/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/domains/:id/page/:page",
      "framework": "rails",
      "units": [
        69
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 69,
          "line": 270,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 69,
          "line": 271,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 69,
          "line": 272,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 69,
          "line": 254,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 69,
          "via": "Domain.find_by!(domain: params[:id])",
          "through": [],
          "line": 255
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /origins(/{identifier}|/{identifier}.{format})",
      "kind": "rest",
      "method": "GET",
      "path": "/origins(/:identifier|/:identifier.:format)",
      "framework": "rails",
      "units": [
        70
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 70,
          "line": 292,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 70,
          "line": 293,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 70,
          "line": 294,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 70,
          "line": 276,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 70,
          "via": "Origin.find_by!(identifier: params[:identifier])",
          "through": [],
          "line": 277
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /top(|/{length}|/{length}/page/{page})",
      "kind": "rest",
      "method": "GET",
      "path": "/top(|/:length|/:length/page/:page)",
      "framework": "rails",
      "units": [
        71
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "length[:placeholder]",
            "format.html"
          ],
          "unit": 71,
          "line": 302,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "length[:placeholder]",
            "format.rss"
          ],
          "unit": 71,
          "line": 303,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(length[:placeholder])",
            "format.html"
          ],
          "unit": 71,
          "line": 322,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(length[:placeholder])",
            "format.rss"
          ],
          "unit": 71,
          "line": 323,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        71,
        257,
        247,
        258,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /upvoted/stories",
      "kind": "rest",
      "method": "GET",
      "path": "/upvoted/stories",
      "framework": "rails",
      "units": [
        72
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 72,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 72,
          "line": 341,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 72,
          "line": 347,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 72,
          "line": 349,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /upvoted/stories/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/upvoted/stories/page/:page",
      "framework": "rails",
      "units": [
        73
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 73,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 73,
          "line": 341,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.rss"
          ],
          "unit": 73,
          "line": 347,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 73,
          "line": 349,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 35
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes"
          ],
          "line": 36
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [
            "paginate",
            "StoriesPaginator.new(scope, page, @user).get",
            "with_pagination_info",
            "cache_votes",
            "Vote.votes_by_user_for_stories_hash"
          ],
          "line": 76
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        247,
        204,
        245
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /inbox",
      "kind": "rest",
      "method": "GET",
      "path": "/inbox",
      "framework": "rails",
      "units": [
        74
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 74,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.inbox_count > 0"
          ],
          "unit": 74,
          "line": 10,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.inbox_count > 0)"
          ],
          "unit": 74,
          "line": 12,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 23,
          "relations": [
            "reads"
          ],
          "unit": 259,
          "via": "notifications.where(read_at: nil).count",
          "through": [
            "@user.inbox_count"
          ],
          "line": 626
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /inbox/all(|/page/{page})",
      "kind": "rest",
      "method": "GET",
      "path": "/inbox/all(|/page/:page)",
      "framework": "rails",
      "units": [
        75
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 75,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page === 0)",
            "@page < 0 || @page > (2**32)"
          ],
          "unit": 75,
          "line": 63,
          "wrapper": "set_page"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 75,
          "line": 32,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 75,
          "line": 16,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 23,
          "relations": [
            "reads"
          ],
          "unit": 75,
          "via": "@user.notifications.offset((@page - 1) * notifications_per_page).limit(notifications_per_page).order(created_at: :desc).preload(user: [:hidings, :votes], notifiable: {story: [:tags, :user], user: [:comments], author: [], parent_comment: []})",
          "through": [],
          "line": 20
        },
        {
          "boundary": 23,
          "relations": [
            "reads"
          ],
          "unit": 75,
          "via": "@user.notifications.count",
          "through": [],
          "line": 28
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "apply_current_vote",
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        233
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /inbox/unread",
      "kind": "rest",
      "method": "GET",
      "path": "/inbox/unread",
      "framework": "rails",
      "units": [
        76
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 76,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 76,
          "line": 47,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 76,
          "line": 48,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 23,
          "relations": [
            "reads"
          ],
          "unit": 76,
          "via": "@user.notifications.where(read_at: nil).order(created_at: :desc).preload(user: [:hidings, :votes], notifiable: {story: [:tags, :user], user: [:comments], author: [], parent_comment: []})",
          "through": [],
          "line": 39
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "apply_current_vote",
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        233
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /invitations/request",
      "kind": "rest",
      "method": "GET",
      "path": "/invitations/request",
      "framework": "rails",
      "units": [
        77
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Rails.application.allow_invitation_requests?)"
          ],
          "unit": 77,
          "line": 14,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.allow_invitation_requests?"
          ],
          "unit": 77,
          "line": 8,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /invitations",
      "kind": "rest",
      "method": "GET",
      "path": "/invitations",
      "framework": "rails",
      "units": [
        78
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 78,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.can_see_invitation_requests?)"
          ],
          "unit": 78,
          "line": 22,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_see_invitation_requests?"
          ],
          "unit": 78,
          "line": 18,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 78,
          "via": "InvitationRequest.where(is_verified: true)",
          "through": [],
          "line": 25
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /invitations/confirm/{code}",
      "kind": "rest",
      "method": "GET",
      "path": "/invitations/confirm/:code",
      "framework": "rails",
      "units": [
        79
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(ir = InvitationRequest.where(code: params[:code].to_s).first)"
          ],
          "unit": 79,
          "line": 31,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ir = InvitationRequest.where(code: params[:code].to_s).first"
          ],
          "unit": 79,
          "line": 39,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 79,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 79,
          "via": "InvitationRequest.where(code: params[:code].to_s).first",
          "through": [],
          "line": 29
        },
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 79,
          "via": "ir.save!",
          "through": [],
          "line": 35
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /invitations",
      "kind": "rest",
      "method": "POST",
      "path": "/invitations",
      "framework": "rails",
      "units": [
        80
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 80,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.can_invite?)"
          ],
          "unit": 80,
          "line": 45,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_invite?",
            "params.return_home"
          ],
          "unit": 80,
          "line": 66,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_invite?",
            "catch",
            "params.return_home"
          ],
          "unit": 80,
          "line": 66,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_invite?",
            "!params.return_home"
          ],
          "unit": 80,
          "line": 68,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_invite?",
            "catch",
            "!params.return_home"
          ],
          "unit": 80,
          "line": 68,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 80,
          "line": 42,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 80,
          "via": "i.save!",
          "through": [],
          "line": 55
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 260,
          "via": "Invitation.exists?(code: code)",
          "through": [
            "create_code"
          ],
          "line": 27
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /invitations/create_by_request",
      "kind": "rest",
      "method": "POST",
      "path": "/invitations/create_by_request",
      "framework": "rails",
      "units": [
        81
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.allow_invitation_requests?",
            "@invitation_request.save"
          ],
          "unit": 81,
          "line": 83,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.allow_invitation_requests?",
            "!(@invitation_request.save)"
          ],
          "unit": 81,
          "line": 85,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Rails.application.allow_invitation_requests?)"
          ],
          "unit": 81,
          "line": 88,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 81,
          "via": "@invitation_request.save",
          "through": [],
          "line": 80
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 261,
          "via": "InvitationRequest.exists?(code: code)",
          "through": [
            "create_code"
          ],
          "line": 30
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /invitations/send_for_request",
      "kind": "rest",
      "method": "POST",
      "path": "/invitations/send_for_request",
      "framework": "rails",
      "units": [
        82
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 82,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.can_see_invitation_requests?)"
          ],
          "unit": 82,
          "line": 96,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_see_invitation_requests?",
            "!(ir = InvitationRequest.where(code: params[:code].to_s).first)"
          ],
          "unit": 82,
          "line": 101,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_see_invitation_requests?",
            "ir = InvitationRequest.where(code: params[:code].to_s).first"
          ],
          "unit": 82,
          "line": 113,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 82,
          "line": 92,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 82,
          "via": "InvitationRequest.where(code: params[:code].to_s).first",
          "through": [],
          "line": 99
        },
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 82,
          "via": "i.save!",
          "through": [],
          "line": 107
        },
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 82,
          "via": "ir.destroy!",
          "through": [],
          "line": 109
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 260,
          "via": "Invitation.exists?(code: code)",
          "through": [
            "create_code"
          ],
          "line": 27
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /invitations/delete_request",
      "kind": "rest",
      "method": "POST",
      "path": "/invitations/delete_request",
      "framework": "rails",
      "units": [
        83
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 83,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.can_see_invitation_requests?)"
          ],
          "unit": 83,
          "line": 118,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_see_invitation_requests?",
            "!(ir = InvitationRequest.where(code: params[:code].to_s).first)"
          ],
          "unit": 83,
          "line": 123,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.can_see_invitation_requests?",
            "ir = InvitationRequest.where(code: params[:code].to_s).first"
          ],
          "unit": 83,
          "line": 130,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 83,
          "via": "InvitationRequest.where(code: params[:code].to_s).first",
          "through": [],
          "line": 121
        },
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 83,
          "via": "ir.destroy!",
          "through": [],
          "line": 126
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /logout",
      "kind": "rest",
      "method": "POST",
      "path": "/logout",
      "framework": "rails",
      "units": [
        84
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 84,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 84,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /login",
      "kind": "rest",
      "method": "GET",
      "path": "/login",
      "framework": "rails",
      "units": [
        85
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user"
          ],
          "unit": 85,
          "line": 185,
          "wrapper": "require_no_user_or_redirect"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 85,
          "line": 31,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /login",
      "kind": "rest",
      "method": "POST",
      "path": "/login",
      "framework": "rails",
      "units": [
        86
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 86,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user"
          ],
          "unit": 86,
          "line": 185,
          "wrapper": "require_no_user_or_redirect"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "user",
            "!user().is_wiped?",
            "!(params[:password].to_s.bytesize > 72)",
            "user.authenticate(params[:password].to_s)",
            "!user().is_banned?",
            "user().is_active?",
            "user().has_2fa? && !(Rails.env.development?)"
          ],
          "unit": 86,
          "line": 79,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "user",
            "!user().is_wiped?",
            "!(params[:password].to_s.bytesize > 72)",
            "user.authenticate(params[:password].to_s)",
            "!user().is_banned?",
            "user().is_active?",
            "!(user().has_2fa? && !(Rails.env.development?))",
            "(rd = session[:redirect_to]).present?"
          ],
          "unit": 86,
          "line": 86,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "user",
            "!user().is_wiped?",
            "!(params[:password].to_s.bytesize > 72)",
            "user.authenticate(params[:password].to_s)",
            "!user().is_banned?",
            "user().is_active?",
            "!(user().has_2fa? && !(Rails.env.development?))",
            "!((rd = session[:redirect_to]).present?)",
            "params[:referer].present?",
            "ru().host === Rails.application.domain"
          ],
          "unit": 86,
          "line": 91,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "user",
            "!user().is_wiped?",
            "!(params[:password].to_s.bytesize > 72)",
            "user.authenticate(params[:password].to_s)",
            "!user().is_banned?",
            "user().is_active?",
            "!(user().has_2fa? && !(Rails.env.development?))",
            "!((rd = session[:redirect_to]).present?)",
            "params[:referer].present?",
            "!(ru().host === Rails.application.domain)"
          ],
          "unit": 86,
          "line": 97,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "user",
            "!user().is_wiped?",
            "!(params[:password].to_s.bytesize > 72)",
            "user.authenticate(params[:password].to_s)",
            "!user().is_banned?",
            "user().is_active?",
            "!(user().has_2fa? && !(Rails.env.development?))",
            "!((rd = session[:redirect_to]).present?)",
            "params[:referer].present?",
            "catch"
          ],
          "unit": 86,
          "line": 97,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "user",
            "!user().is_wiped?",
            "!(params[:password].to_s.bytesize > 72)",
            "user.authenticate(params[:password].to_s)",
            "!user().is_banned?",
            "user().is_active?",
            "!(user().has_2fa? && !(Rails.env.development?))",
            "!((rd = session[:redirect_to]).present?)",
            "!(params[:referer].present?)"
          ],
          "unit": 86,
          "line": 97,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "catch"
          ],
          "unit": 86,
          "line": 117,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 86,
          "via": "User.where(email: params[:email]).first",
          "through": [],
          "line": 39
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 86,
          "via": "User.where(username: params[:email]).first",
          "through": [],
          "line": 41
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /login/forgot_password",
      "kind": "rest",
      "method": "GET",
      "path": "/login/forgot_password",
      "framework": "rails",
      "units": [
        87
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 87,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user"
          ],
          "unit": 87,
          "line": 185,
          "wrapper": "require_no_user_or_redirect"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 87,
          "line": 120,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /login/reset_password",
      "kind": "rest",
      "method": "POST",
      "path": "/login/reset_password",
      "framework": "rails",
      "units": [
        88
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 88,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user"
          ],
          "unit": 88,
          "line": 185,
          "wrapper": "require_no_user_or_redirect"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@found_user)"
          ],
          "unit": 88,
          "line": 130,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@found_user",
            "@found_user.is_banned?"
          ],
          "unit": 88,
          "line": 135,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@found_user",
            "!(@found_user.is_banned?)",
            "@found_user.is_wiped?"
          ],
          "unit": 88,
          "line": 142,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@found_user",
            "!(@found_user.is_banned?)",
            "!(@found_user.is_wiped?)"
          ],
          "unit": 88,
          "line": 148,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 88,
          "via": "User.where(\"email = ? OR username = ?\", params[:email], params[:email]).first",
          "through": [],
          "line": 126
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /login/set_new_password",
      "kind": "rest",
      "method": "GET",
      "path": "/login/set_new_password",
      "framework": "rails",
      "units": [
        89
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 89,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "params[:password].present?",
            "@reset_user.save && @reset_user.is_active?",
            "@reset_user.has_2fa?"
          ],
          "unit": 89,
          "line": 182,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "params[:password].present?",
            "@reset_user.save && @reset_user.is_active?",
            "!(@reset_user.has_2fa?)"
          ],
          "unit": 89,
          "line": 185,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@reset_user && !(@reset_user.is_banned?))"
          ],
          "unit": 89,
          "line": 194,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "params[:password].present?",
            "!(@reset_user.save && @reset_user.is_active?)"
          ],
          "unit": 89,
          "line": 151,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "!(params[:password].present?)"
          ],
          "unit": 89,
          "line": 151,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 89,
          "line": 151,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 89,
          "via": "User.where(password_reset_token: params[:password_reset_token].to_s).first",
          "through": [],
          "line": 156
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 89,
          "via": "@reset_user.save",
          "through": [],
          "line": 172
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 89,
          "via": "Moderation.create!( moderator: nil, user: @reset_user, action: \"reactivated\" )",
          "through": [],
          "line": 174
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /login/set_new_password",
      "kind": "rest",
      "method": "POST",
      "path": "/login/set_new_password",
      "framework": "rails",
      "units": [
        90
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 90,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "params[:password].present?",
            "@reset_user.save && @reset_user.is_active?",
            "@reset_user.has_2fa?"
          ],
          "unit": 90,
          "line": 182,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "params[:password].present?",
            "@reset_user.save && @reset_user.is_active?",
            "!(@reset_user.has_2fa?)"
          ],
          "unit": 90,
          "line": 185,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@reset_user && !(@reset_user.is_banned?))"
          ],
          "unit": 90,
          "line": 194,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "params[:password].present?",
            "!(@reset_user.save && @reset_user.is_active?)"
          ],
          "unit": 90,
          "line": 151,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@reset_user && !(@reset_user.is_banned?)",
            "!(params[:password].present?)"
          ],
          "unit": 90,
          "line": 151,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 90,
          "line": 151,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 90,
          "via": "User.where(password_reset_token: params[:password_reset_token].to_s).first",
          "through": [],
          "line": 156
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 90,
          "via": "@reset_user.save",
          "through": [],
          "line": 172
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 90,
          "via": "Moderation.create!( moderator: nil, user: @reset_user, action: \"reactivated\" )",
          "through": [],
          "line": 174
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /login/2fa",
      "kind": "rest",
      "method": "GET",
      "path": "/login/2fa",
      "framework": "rails",
      "units": [
        91
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 91,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!find_twofa_user"
          ],
          "unit": 91,
          "line": 202,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "find_twofa_user"
          ],
          "unit": 91,
          "line": 198,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /login/2fa_verify",
      "kind": "rest",
      "method": "POST",
      "path": "/login/2fa_verify",
      "framework": "rails",
      "units": [
        92
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 92,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "tmpu = find_twofa_user && tmpu.authenticate_totp(params[:totp_code])"
          ],
          "unit": 92,
          "line": 211,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(tmpu = find_twofa_user && tmpu.authenticate_totp(params[:totp_code]))"
          ],
          "unit": 92,
          "line": 214,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        92,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /messages",
      "kind": "rest",
      "method": "GET",
      "path": "/messages",
      "framework": "rails",
      "units": [
        93
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 93,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 93,
          "line": 27,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 93,
          "line": 9,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html",
            "params.to"
          ],
          "unit": 93,
          "line": 9,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html",
            "!params.to"
          ],
          "unit": 93,
          "line": 9,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 93,
          "via": "Message.inbox(@user).load",
          "through": [],
          "line": 11
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /messages/sent",
      "kind": "rest",
      "method": "GET",
      "path": "/messages/sent",
      "framework": "rails",
      "units": [
        94
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 94,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 94,
          "line": 44,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 94,
          "line": 47,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 94,
          "via": "Message.outbox(@user).load",
          "through": [],
          "line": 34
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /messages",
      "kind": "rest",
      "method": "POST",
      "path": "/messages",
      "framework": "rails",
      "units": [
        95
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 95,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@new_message.save"
          ],
          "unit": 95,
          "line": 65,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@new_message.save)"
          ],
          "unit": 95,
          "line": 68,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 95,
          "via": "@user.wearable_hats.find_by(short_id: params[:message][:hat_id])",
          "through": [],
          "line": 55
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 95,
          "via": "@new_message.save",
          "through": [],
          "line": 59
        },
        {
          "boundary": 26,
          "relations": [
            "writes"
          ],
          "unit": 95,
          "via": "NotifyMessageJob.perform_later",
          "through": [],
          "line": 64
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 95,
          "via": "Message.inbox(@user).load",
          "through": [],
          "line": 67
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 262,
          "via": "ModNote.create!( moderator: moderator, user: user, created_at: message.created_at, note: <<~NOTE *#{message.author ? message.author.username : \"(System)\"} #{message.hat&.to_txt}-> #{message.recipient.username}*: #{message.subject} #{message.body} NOTE )",
          "through": [
            "ModNote.create_from_message"
          ],
          "line": 48
        },
        {
          "boundary": 27,
          "relations": [
            "reads"
          ],
          "unit": 263,
          "via": null,
          "through": [
            "NotifyMessageJob.perform_later, which NotifyMessageJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        264
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /messages/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/messages/:id",
      "framework": "rails",
      "units": [
        96
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 96,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@message = Message.where(short_id: params[:message_id] || params[:id]).first",
            "!(@message.author_user_id === @user.id || @message.recipient_user_id === @user.id)"
          ],
          "unit": 96,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@message = Message.where(short_id: params[:message_id] || params[:id]).first)"
          ],
          "unit": 96,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 96,
          "line": 72,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 96,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": 164
        },
        {
          "boundary": 23,
          "relations": [
            "writes"
          ],
          "unit": 96,
          "via": "@message.notification&.touch(:read_at)",
          "through": [],
          "line": 88
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "DELETE /messages/{id}",
      "kind": "rest",
      "method": "DELETE",
      "path": "/messages/:id",
      "framework": "rails",
      "units": [
        97
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 97,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@message = Message.where(short_id: params[:message_id] || params[:id]).first",
            "!(@message.author_user_id === @user.id || @message.recipient_user_id === @user.id)"
          ],
          "unit": 97,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@message = Message.where(short_id: params[:message_id] || params[:id]).first)"
          ],
          "unit": 97,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@message.author_user_id === @user.id"
          ],
          "unit": 97,
          "line": 107,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@message.author_user_id === @user.id)"
          ],
          "unit": 97,
          "line": 109,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 97,
          "line": 93,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 97,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": 164
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 97,
          "via": "@message.save!",
          "through": [],
          "line": 102
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /messages/batch_delete",
      "kind": "rest",
      "method": "POST",
      "path": "/messages/batch_delete",
      "framework": "rails",
      "units": [
        98
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 98,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 98,
          "line": 139,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 98,
          "line": 113,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 98,
          "via": "Message.where(short_id: m[1]).first",
          "through": [],
          "line": 118
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 98,
          "via": "message.save!",
          "through": [],
          "line": 130
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        98,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /messages/{message_id}/keep_as_new",
      "kind": "rest",
      "method": "POST",
      "path": "/messages/:message_id/keep_as_new",
      "framework": "rails",
      "units": [
        99
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 99,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@message = Message.where(short_id: params[:message_id] || params[:id]).first",
            "!(@message.author_user_id === @user.id || @message.recipient_user_id === @user.id)"
          ],
          "unit": 99,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@message = Message.where(short_id: params[:message_id] || params[:id]).first)"
          ],
          "unit": 99,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 99,
          "line": 145,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 99,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": 164
        },
        {
          "boundary": 23,
          "relations": [
            "writes"
          ],
          "unit": 99,
          "via": "@message.notification&.update(read_at: nil)",
          "through": [],
          "line": 143
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /messages/{message_id}/mod_note",
      "kind": "rest",
      "method": "POST",
      "path": "/messages/:message_id/mod_note",
      "framework": "rails",
      "units": [
        100
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 100,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 100,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@message = Message.where(short_id: params[:message_id] || params[:id]).first",
            "!(@message.author_user_id === @user.id || @message.recipient_user_id === @user.id)"
          ],
          "unit": 100,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@message = Message.where(short_id: params[:message_id] || params[:id]).first)"
          ],
          "unit": 100,
          "line": 171,
          "wrapper": "find_message"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 100,
          "line": 151,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 100,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": 164
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 262,
          "via": "ModNote.create!( moderator: moderator, user: user, created_at: message.created_at, note: <<~NOTE *#{message.author ? message.author.username : \"(System)\"} #{message.hat&.to_txt}-> #{message.recipient.username}*: #{message.subject} #{message.body} NOTE )",
          "through": [
            "ModNote.create_from_message"
          ],
          "line": 48
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod",
      "kind": "rest",
      "method": "GET",
      "path": "/mod",
      "framework": "rails",
      "units": [
        101
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 101,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 101,
          "line": 4,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 28,
          "relations": [
            "reads"
          ],
          "unit": 101,
          "via": "ModActivity.with_item.where(\"mod_activities.created_at >= ?\", 3.months.ago).order(created_at: :desc)",
          "through": [],
          "line": 6
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "DELETE /mod/comments/{id}",
      "kind": "rest",
      "method": "DELETE",
      "path": "/mod/comments/:id",
      "framework": "rails",
      "units": [
        102
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 102,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@comment = find_comment)"
          ],
          "unit": 102,
          "line": 8,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment",
            "request.xhr?"
          ],
          "unit": 102,
          "line": 15,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@comment = find_comment",
            "!request.xhr?"
          ],
          "unit": 102,
          "line": 20,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 221,
          "via": "m.save!",
          "through": [
            "@comment.delete_by_moderator"
          ],
          "line": 317
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 221,
          "via": "votes.count",
          "through": [
            "@comment.delete_by_moderator"
          ],
          "line": 319
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 265,
          "via": "Comment.find_by(short_id: params[:id])",
          "through": [
            "find_comment"
          ],
          "line": 27
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@comment.delete_by_moderator",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/domains_ban/{id}",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/domains_ban/:id",
      "framework": "rails",
      "units": [
        103
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 103,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 103,
          "line": 10,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 266,
          "via": "m.save!",
          "through": [
            "@domain.ban_by_user_for_reason!"
          ],
          "line": 92
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 267,
          "via": "Domain.find_or_initialize_by(domain: params[:id])",
          "through": [
            "find_or_initialize_domain"
          ],
          "line": 37
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@domain.ban_by_user_for_reason!",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/domains_ban/{id}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/domains_ban/:id",
      "framework": "rails",
      "units": [
        104
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 104,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "domain_params[:banned_reason].present?"
          ],
          "unit": 104,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(domain_params[:banned_reason].present?)"
          ],
          "unit": 104,
          "line": 26,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 266,
          "via": "m.save!",
          "through": [
            "@domain.ban_by_user_for_reason!"
          ],
          "line": 92
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 267,
          "via": "Domain.find_or_initialize_by(domain: params[:id])",
          "through": [
            "find_or_initialize_domain"
          ],
          "line": 37
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@domain.ban_by_user_for_reason!",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/domains",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/domains",
      "framework": "rails",
      "units": [
        105
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 105,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@domain.save"
          ],
          "unit": 105,
          "line": 11,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@domain.save)"
          ],
          "unit": 105,
          "line": 13,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 21,
          "relations": [
            "writes"
          ],
          "unit": 105,
          "via": "@domain.save",
          "through": [],
          "line": 9
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 268,
          "via": "stories.find_each do |story| story.update_column(:origin_id, story.domain.find_or_create_origin(story.url)&.id) end",
          "through": [
            "update_origins"
          ],
          "line": 56
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        268,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/domains/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/domains/:id/edit",
      "framework": "rails",
      "units": [
        106
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 106,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 106,
          "line": 17,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 269,
          "via": "Domain.find_or_initialize_by(domain: params[:id])",
          "through": [
            "find_or_initialize_domain"
          ],
          "line": 39
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/domains/{id}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/domains/:id",
      "framework": "rails",
      "units": [
        107
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 107,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@domain.save"
          ],
          "unit": 107,
          "line": 26,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@domain.save)"
          ],
          "unit": 107,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 21,
          "relations": [
            "writes"
          ],
          "unit": 107,
          "via": "@domain.save",
          "through": [],
          "line": 24
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 269,
          "via": "Domain.find_or_initialize_by(domain: params[:id])",
          "through": [
            "find_or_initialize_domain"
          ],
          "line": 39
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 268,
          "via": "stories.find_each do |story| story.update_column(:origin_id, story.domain.find_or_create_origin(story.url)&.id) end",
          "through": [
            "update_origins"
          ],
          "line": 56
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        268,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PUT /mod/domains/{id}",
      "kind": "rest",
      "method": "PUT",
      "path": "/mod/domains/:id",
      "framework": "rails",
      "units": [
        108
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 108,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@domain.save"
          ],
          "unit": 108,
          "line": 26,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@domain.save)"
          ],
          "unit": 108,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 21,
          "relations": [
            "writes"
          ],
          "unit": 108,
          "via": "@domain.save",
          "through": [],
          "line": 24
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 269,
          "via": "Domain.find_or_initialize_by(domain: params[:id])",
          "through": [
            "find_or_initialize_domain"
          ],
          "line": 39
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 268,
          "via": "stories.find_each do |story| story.update_column(:origin_id, story.domain.find_or_create_origin(story.url)&.id) end",
          "through": [
            "update_origins"
          ],
          "line": 56
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        268,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/flagged_stories/{period}",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/flagged_stories/:period",
      "framework": "rails",
      "units": [
        109
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 109,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 109,
          "line": 9,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 109,
          "via": "Story.base(@user).unmerged.includes(:user, :tags).where(\"flags > 1\").order(\"stories.id DESC\")",
          "through": [],
          "line": 11
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        270,
        204,
        257
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/flagged_comments/{period}",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/flagged_comments/:period",
      "framework": "rails",
      "units": [
        110
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 110,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 110,
          "line": 17,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 110,
          "via": "Comment.eager_load(:user, :hat, story: :user, votes: :user).where(\"comments.flags >= 2\").where(\"(select count(*) from votes where votes.comment_id = comments.id and vote < 0 and votes.reason != 'M') > 2\") # Me-Too comments rarely need attention.order(\"comments.id DESC\")",
          "through": [],
          "line": 19
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        270,
        204,
        257
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/commenters/{period}",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/commenters/:period",
      "framework": "rails",
      "units": [
        111
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 111,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 111,
          "line": 29,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        271,
        204,
        257
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/mail_messages",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/mail_messages",
      "framework": "rails",
      "units": [
        112
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 112,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@mod_mail_message.save"
          ],
          "unit": 112,
          "line": 7,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@mod_mail_message.save)"
          ],
          "unit": 112,
          "line": 9,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 112,
          "via": "@mod_mail_message.save",
          "through": [],
          "line": 5
        },
        {
          "boundary": 30,
          "relations": [
            "writes"
          ],
          "unit": 112,
          "via": "NotifyModMailMessageJob.perform_later",
          "through": [],
          "line": 6
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 31,
          "relations": [
            "reads"
          ],
          "unit": 272,
          "via": null,
          "through": [
            "NotifyModMailMessageJob.perform_later, which NotifyModMailMessageJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 32,
          "relations": [
            "writes"
          ],
          "unit": 273,
          "via": "EmailModMailMessageMailer.notify(mod_mail_message, recipient).deliver_later",
          "through": [
            "NotifyModMailMessageJob.perform_later, which NotifyModMailMessageJob#perform runs later",
            "deliver_mod_mail_message_notifications"
          ],
          "line": 18
        },
        {
          "boundary": 32,
          "relations": [
            "reads"
          ],
          "unit": 274,
          "via": null,
          "through": [
            "NotifyModMailMessageJob.perform_later, which NotifyModMailMessageJob#perform runs later",
            "deliver_mod_mail_message_notifications",
            "EmailModMailMessageMailer.notify(mod_mail_message, recipient).deliver_later, which EmailModMailMessageMailer#notify runs later"
          ],
          "line": null
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        112,
        204,
        273
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/mails",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/mails",
      "framework": "rails",
      "units": [
        113
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 113,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 113,
          "line": 6,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 113,
          "via": "ModMail.all",
          "through": [],
          "line": 7
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/mails/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/mails/:id",
      "framework": "rails",
      "units": [
        114
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 114,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 114,
          "line": 10,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 29,
          "relations": [
            "reads"
          ],
          "unit": 114,
          "via": "@mod_mail.mod_mail_messages.order(:created_at)",
          "through": [],
          "line": 12
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 275,
          "via": "ModMail.find_by(short_id: params.expect(:id))",
          "through": [
            "set_mod_mail"
          ],
          "line": 42
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/mails/new",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/mails/new",
      "framework": "rails",
      "units": [
        115
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 115,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 115,
          "line": 15,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/mails/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/mails/:id/edit",
      "framework": "rails",
      "units": [
        116
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 116,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 116,
          "line": 19,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 275,
          "via": "ModMail.find_by(short_id: params.expect(:id))",
          "through": [
            "set_mod_mail"
          ],
          "line": 42
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/mails",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/mails",
      "framework": "rails",
      "units": [
        117
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 117,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@mod_mail.save"
          ],
          "unit": 117,
          "line": 24,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@mod_mail.save)"
          ],
          "unit": 117,
          "line": 26,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 117,
          "via": "@mod_mail.save",
          "through": [],
          "line": 23
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Comment.where(short_id: params.dig(\"mod_mail\", \"comment_reference_short_ids\")&.split(\" \"))",
          "through": [
            "parse_references_and_recipients"
          ],
          "line": 52
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Story.where(short_id: params.dig(\"mod_mail\", \"story_reference_short_ids\")&.split(\" \"))",
          "through": [
            "parse_references_and_recipients"
          ],
          "line": 53
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/mails/{id}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/mails/:id",
      "framework": "rails",
      "units": [
        118
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 118,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 303,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@mod_mail.update(mod_mail_params)"
          ],
          "unit": 118,
          "line": 32,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@mod_mail.update(mod_mail_params))"
          ],
          "unit": 118,
          "line": 34,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 118,
          "via": "@mod_mail.update(mod_mail_params)",
          "through": [],
          "line": 31
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Comment.where(short_id: params.dig(\"mod_mail\", \"comment_reference_short_ids\")&.split(\" \"))",
          "through": [
            "parse_references_and_recipients"
          ],
          "line": 52
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Story.where(short_id: params.dig(\"mod_mail\", \"story_reference_short_ids\")&.split(\" \"))",
          "through": [
            "parse_references_and_recipients"
          ],
          "line": 53
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 275,
          "via": "ModMail.find_by(short_id: params.expect(:id))",
          "through": [
            "set_mod_mail"
          ],
          "line": 42
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PUT /mod/mails/{id}",
      "kind": "rest",
      "method": "PUT",
      "path": "/mod/mails/:id",
      "framework": "rails",
      "units": [
        119
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 119,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 303,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@mod_mail.update(mod_mail_params)"
          ],
          "unit": 119,
          "line": 32,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@mod_mail.update(mod_mail_params))"
          ],
          "unit": 119,
          "line": 34,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 119,
          "via": "@mod_mail.update(mod_mail_params)",
          "through": [],
          "line": 31
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Comment.where(short_id: params.dig(\"mod_mail\", \"comment_reference_short_ids\")&.split(\" \"))",
          "through": [
            "parse_references_and_recipients"
          ],
          "line": 52
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Story.where(short_id: params.dig(\"mod_mail\", \"story_reference_short_ids\")&.split(\" \"))",
          "through": [
            "parse_references_and_recipients"
          ],
          "line": 53
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 275,
          "via": "ModMail.find_by(short_id: params.expect(:id))",
          "through": [
            "set_mod_mail"
          ],
          "line": 42
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/notes",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/notes",
      "framework": "rails",
      "units": [
        120
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 120,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@mod_note.save"
          ],
          "unit": 120,
          "line": 9,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@mod_note.save)"
          ],
          "unit": 120,
          "line": 12,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 120,
          "via": "@mod_note.save",
          "through": [],
          "line": 8
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/origins_ban/{identifier}",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/origins_ban/:identifier",
      "framework": "rails",
      "units": [
        121
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 121,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 121,
          "line": 13,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 121,
          "via": "Domain.where(domain: @origin.identifier.split(\"/\").first)",
          "through": [],
          "line": 9
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 277,
          "via": "m.save!",
          "through": [
            "@origin.ban_by_user_for_reason!"
          ],
          "line": 41
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 278,
          "via": "Origin.find_or_initialize_by identifier: params[:identifier]",
          "through": [
            "find_or_initialize_origin"
          ],
          "line": 40
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@origin.ban_by_user_for_reason!",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/origins_ban/{identifier}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/origins_ban/:identifier",
      "framework": "rails",
      "units": [
        122
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 122,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "origin_params[:banned_reason].present?"
          ],
          "unit": 122,
          "line": 26,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(origin_params[:banned_reason].present?)"
          ],
          "unit": 122,
          "line": 29,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 277,
          "via": "m.save!",
          "through": [
            "@origin.ban_by_user_for_reason!"
          ],
          "line": 41
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 278,
          "via": "Origin.find_or_initialize_by identifier: params[:identifier]",
          "through": [
            "find_or_initialize_origin"
          ],
          "line": 40
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@origin.ban_by_user_for_reason!",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/origins/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/origins/:id/edit",
      "framework": "rails",
      "units": [
        123
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 123,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 123,
          "line": 4,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 279,
          "via": "Origin.find_or_initialize_by identifier: params[:identifier]",
          "through": [
            "find_or_initialize_origin"
          ],
          "line": 12
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/reparents/new",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/reparents/new",
      "framework": "rails",
      "units": [
        124
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 124,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 124,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 124,
          "line": 33,
          "wrapper": "load_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 124,
          "line": 5,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/reparents",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/reparents",
      "framework": "rails",
      "units": [
        125
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 125,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 125,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 125,
          "line": 33,
          "wrapper": "load_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:reason].blank?"
          ],
          "unit": 125,
          "line": 12,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:reason].blank?)"
          ],
          "unit": 125,
          "line": 28,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 125,
          "line": 10,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 125,
          "via": "@reparent_user.save!",
          "through": [],
          "line": 18
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 125,
          "via": "Moderation.create!({ moderator: @user, user: @reparent_user, action: \"Reparented user to be invited by #{@user.username}\", reason: params[:reason] })",
          "through": [],
          "line": 19
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 125,
          "via": "User.last",
          "through": [],
          "line": 26
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "ModNote.record_reparent!",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/stories/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/stories/:id/edit",
      "framework": "rails",
      "units": [
        126
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 126,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 126,
          "line": 23,
          "wrapper": "find_story!"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 126,
          "line": 10,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.merged_into_story"
          ],
          "unit": 126,
          "line": 10,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)"
          ],
          "unit": 126,
          "line": 10,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 126,
          "via": "@story.votes.count",
          "through": [],
          "line": 15
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/stories/{id}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/stories/:id",
      "framework": "rails",
      "units": [
        127
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 127,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 127,
          "line": 23,
          "wrapper": "find_story!"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.save"
          ],
          "unit": 127,
          "line": 26,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.save)"
          ],
          "unit": 127,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 127,
          "via": "@story.save",
          "through": [],
          "line": 25
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 282,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 76
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        283
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PUT /mod/stories/{id}",
      "kind": "rest",
      "method": "PUT",
      "path": "/mod/stories/:id",
      "framework": "rails",
      "units": [
        128
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 128,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 128,
          "line": 23,
          "wrapper": "find_story!"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.save"
          ],
          "unit": 128,
          "line": 26,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.save)"
          ],
          "unit": 128,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 128,
          "via": "@story.save",
          "through": [],
          "line": 25
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 282,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 76
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        283
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/stories/{story_id}/undelete",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/stories/:story_id/undelete",
      "framework": "rails",
      "units": [
        129
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 129,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 129,
          "line": 23,
          "wrapper": "find_story!"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 129,
          "line": 41,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 129,
          "via": "@story.save",
          "through": [],
          "line": 37
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 282,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 76
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for",
            "value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        283
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/stories/{story_id}/destroy",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/stories/:story_id/destroy",
      "framework": "rails",
      "units": [
        130
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 130,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 130,
          "line": 23,
          "wrapper": "find_story!"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.user_id !== @user.id && @story.moderation_reason.blank?"
          ],
          "unit": 130,
          "line": 49,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.user_id !== @user.id && @story.moderation_reason.blank?)"
          ],
          "unit": 130,
          "line": 60,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 130,
          "via": "@story.save",
          "through": [],
          "line": 55
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 282,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 76
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for",
            "value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "Mastodon.delete_post",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        208,
        283
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/tags/new",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/tags/new",
      "framework": "rails",
      "units": [
        131
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 131,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 131,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 131,
          "line": 6,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod/tags",
      "kind": "rest",
      "method": "POST",
      "path": "/mod/tags",
      "framework": "rails",
      "units": [
        132
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 132,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 132,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "tag().persisted?"
          ],
          "unit": 132,
          "line": 16,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!tag().persisted?"
          ],
          "unit": 132,
          "line": 19,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "writes"
          ],
          "unit": 132,
          "via": "Tag.create(tag_params)",
          "through": [],
          "line": 13
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 284,
          "via": "Moderation.create do |m| m.action = if id_previously_changed? \"Created new tag \" + attributes.map { |f, c| \"with #{f} '#{c}'\" }.join(\", \") else \"Updating tag #{tag}, \" + saved_changes.map { |f, c| \"changed #{f} from '#{c[0]}' to '#{c[1]}'\" }.join(\", \") end m.moderator_user_id = @edit_user_id m.tag_id = id end",
          "through": [
            "log_modifications"
          ],
          "line": 91
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_modifications",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod/tags/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/mod/tags/:id/edit",
      "framework": "rails",
      "units": [
        133
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 133,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 133,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 133,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 133,
          "line": 23,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 133,
          "via": "Tag.where(tag: params[:id]).first!",
          "through": [],
          "line": 24
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /mod/tags/{id}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/mod/tags/:id",
      "framework": "rails",
      "units": [
        134
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 134,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 134,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "tag.update(tag_params)"
          ],
          "unit": 134,
          "line": 32,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(tag.update(tag_params))"
          ],
          "unit": 134,
          "line": 35,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 134,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 134,
          "via": "Tag.where(tag: params[:id]).first!",
          "through": [],
          "line": 29
        },
        {
          "boundary": 12,
          "relations": [
            "writes"
          ],
          "unit": 134,
          "via": "tag.update(tag_params)",
          "through": [],
          "line": 30
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 284,
          "via": "Moderation.create do |m| m.action = if id_previously_changed? \"Created new tag \" + attributes.map { |f, c| \"with #{f} '#{c}'\" }.join(\", \") else \"Updating tag #{tag}, \" + saved_changes.map { |f, c| \"changed #{f} from '#{c[0]}' to '#{c[1]}'\" }.join(\", \") end m.moderator_user_id = @edit_user_id m.tag_id = id end",
          "through": [
            "log_modifications"
          ],
          "line": 91
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_modifications",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PUT /mod/tags/{id}",
      "kind": "rest",
      "method": "PUT",
      "path": "/mod/tags/:id",
      "framework": "rails",
      "units": [
        135
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_moderator?)"
          ],
          "unit": 135,
          "line": 34,
          "wrapper": "require_logged_in_moderator"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 135,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "tag.update(tag_params)"
          ],
          "unit": 135,
          "line": 32,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(tag.update(tag_params))"
          ],
          "unit": 135,
          "line": 35,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 135,
          "line": 28,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 135,
          "via": "Tag.where(tag: params[:id]).first!",
          "through": [],
          "line": 29
        },
        {
          "boundary": 12,
          "relations": [
            "writes"
          ],
          "unit": 135,
          "via": "tag.update(tag_params)",
          "through": [],
          "line": 30
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 284,
          "via": "Moderation.create do |m| m.action = if id_previously_changed? \"Created new tag \" + attributes.map { |f, c| \"with #{f} '#{c}'\" }.join(\", \") else \"Updating tag #{tag}, \" + saved_changes.map { |f, c| \"changed #{f} from '#{c[0]}' to '#{c[1]}'\" }.join(\", \") end m.moderator_user_id = @edit_user_id m.tag_id = id end",
          "through": [
            "log_modifications"
          ],
          "line": 91
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_modifications",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /mod_mail_messages",
      "kind": "rest",
      "method": "POST",
      "path": "/mod_mail_messages",
      "framework": "rails",
      "units": [
        136
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 136,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@mod_mail_message.save"
          ],
          "unit": 136,
          "line": 11,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@mod_mail_message.save)"
          ],
          "unit": 136,
          "line": 13,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 136,
          "line": 4,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 136,
          "via": "@user.mod_mails.find(params[:mod_mail_message][:mod_mail_id])",
          "through": [],
          "line": 6
        },
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 136,
          "via": "@mod_mail_message.save",
          "through": [],
          "line": 9
        },
        {
          "boundary": 30,
          "relations": [
            "writes"
          ],
          "unit": 136,
          "via": "NotifyModMailMessageJob.perform_later",
          "through": [],
          "line": 10
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 31,
          "relations": [
            "reads"
          ],
          "unit": 272,
          "via": null,
          "through": [
            "NotifyModMailMessageJob.perform_later, which NotifyModMailMessageJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 32,
          "relations": [
            "writes"
          ],
          "unit": 273,
          "via": "EmailModMailMessageMailer.notify(mod_mail_message, recipient).deliver_later",
          "through": [
            "NotifyModMailMessageJob.perform_later, which NotifyModMailMessageJob#perform runs later",
            "deliver_mod_mail_message_notifications"
          ],
          "line": 18
        },
        {
          "boundary": 32,
          "relations": [
            "reads"
          ],
          "unit": 274,
          "via": null,
          "through": [
            "NotifyModMailMessageJob.perform_later, which NotifyModMailMessageJob#perform runs later",
            "deliver_mod_mail_message_notifications",
            "EmailModMailMessageMailer.notify(mod_mail_message, recipient).deliver_later, which EmailModMailMessageMailer#notify runs later"
          ],
          "line": null
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        136,
        204,
        273
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod_mails",
      "kind": "rest",
      "method": "GET",
      "path": "/mod_mails",
      "framework": "rails",
      "units": [
        137
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 137,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 137,
          "line": 4,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 137,
          "via": "@user.mod_mails.order(updated_at: :desc)",
          "through": [],
          "line": 6
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /mod_mails/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/mod_mails/:id",
      "framework": "rails",
      "units": [
        138
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 138,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 138,
          "line": 9,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 138,
          "line": 9,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 138,
          "via": "@user.mod_mails.find_by!(short_id: params.expect(:id))",
          "through": [],
          "line": 10
        },
        {
          "boundary": 29,
          "relations": [
            "reads"
          ],
          "unit": 138,
          "via": "@mod_mail.mod_mail_messages.order(:created_at)",
          "through": [],
          "line": 12
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /moderations",
      "kind": "rest",
      "method": "GET",
      "path": "/moderations",
      "framework": "rails",
      "units": [
        139
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page <= 0 || @page > (2**32) || @pages > 0 && @page > @pages)"
          ],
          "unit": 139,
          "line": 8,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page <= 0 || @page > (2**32) || @pages > 0 && @page > @pages"
          ],
          "unit": 139,
          "line": 56,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 139,
          "via": "User.moderators.map(&:username)",
          "through": [],
          "line": 10
        },
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 139,
          "via": "Moderation.all.eager_load(:moderator, :story, {comment: [:story, :user]}, :tag, :user, :domain, :origin, :category)",
          "through": [],
          "line": 24
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        139,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /moderations/page/{page}",
      "kind": "rest",
      "method": "GET",
      "path": "/moderations/page/:page",
      "framework": "rails",
      "units": [
        140
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@page <= 0 || @page > (2**32) || @pages > 0 && @page > @pages)"
          ],
          "unit": 140,
          "line": 8,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@page <= 0 || @page > (2**32) || @pages > 0 && @page > @pages"
          ],
          "unit": 140,
          "line": 56,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 140,
          "via": "User.moderators.map(&:username)",
          "through": [],
          "line": 10
        },
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 140,
          "via": "Moderation.all.eager_load(:moderator, :story, {comment: [:story, :user]}, :tag, :user, :domain, :origin, :category)",
          "through": [],
          "line": 24
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        140,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /domains/{id}/origins",
      "kind": "rest",
      "method": "GET",
      "path": "/domains/:id/origins",
      "framework": "rails",
      "units": [
        141
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 141,
          "line": 2,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 141,
          "line": 2,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 141,
          "via": "Domain.find_by!(domain: params[:id])",
          "through": [],
          "line": 3
        },
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 141,
          "via": "@domain.origins.order(identifier: :asc)",
          "through": [],
          "line": 4
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /search",
      "kind": "rest",
      "method": "GET",
      "path": "/search",
      "framework": "rails",
      "units": [
        142
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params.utf8 === \"✓\""
          ],
          "unit": 142,
          "line": 40,
          "wrapper": "ignore_searx"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 142,
          "line": 7,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user && @search.results",
            "@search.what === :stories"
          ],
          "unit": 142,
          "line": 7,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user && @search.results",
            "!(@search.what === :stories)"
          ],
          "unit": 142,
          "line": 7,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user && @search.results)"
          ],
          "unit": 142,
          "line": 7,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 285,
          "via": "Tag.none.select(:id)",
          "through": [
            "@search.results",
            "perform!",
            "perform_comment_search!"
          ],
          "line": 152
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 285,
          "via": "Story.where(url: value.to_s).or(Story.where(normalized_url: Utils.normalize(value)))",
          "through": [
            "@search.results",
            "perform!",
            "perform_comment_search!"
          ],
          "line": 167
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        142,
        233,
        204,
        286,
        285,
        287,
        288,
        289,
        290
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /search/{q}",
      "kind": "rest",
      "method": "GET",
      "path": "/search/:q",
      "framework": "rails",
      "units": [
        143
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params.utf8 === \"✓\""
          ],
          "unit": 143,
          "line": 40,
          "wrapper": "ignore_searx"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 143,
          "line": 7,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user && @search.results",
            "@search.what === :stories"
          ],
          "unit": 143,
          "line": 7,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user && @search.results",
            "!(@search.what === :stories)"
          ],
          "unit": 143,
          "line": 7,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user && @search.results)"
          ],
          "unit": 143,
          "line": 7,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 285,
          "via": "Tag.none.select(:id)",
          "through": [
            "@search.results",
            "perform!",
            "perform_comment_search!"
          ],
          "line": 152
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 285,
          "via": "Story.where(url: value.to_s).or(Story.where(normalized_url: Utils.normalize(value)))",
          "through": [
            "@search.results",
            "perform!",
            "perform_comment_search!"
          ],
          "line": 167
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        143,
        233,
        204,
        286,
        285,
        287,
        288,
        289,
        290
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings",
      "kind": "rest",
      "method": "GET",
      "path": "/settings",
      "framework": "rails",
      "units": [
        144
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 144,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 144,
          "line": 8,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings/deactivate",
      "kind": "rest",
      "method": "POST",
      "path": "/settings/deactivate",
      "framework": "rails",
      "units": [
        145
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 145,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params.user.i_am_sure === \"1\")"
          ],
          "unit": 145,
          "line": 16,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params.user.i_am_sure === \"1\"",
            "!(@user.try(:authenticate, params[:user][:password].to_s))"
          ],
          "unit": 145,
          "line": 20,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params.user.i_am_sure === \"1\"",
            "@user.try(:authenticate, params[:user][:password].to_s)"
          ],
          "unit": 145,
          "line": 34,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 145,
          "line": 13,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 145,
          "via": "Moderation.create!( moderator: nil, user: @user, action: \"deactivated#{\", disowning their stories and comments\" if disown}\" )",
          "through": [],
          "line": 27
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 291,
          "via": "comments.where(\"score < 0\").find_each { |c| c.delete_for_user(self) }",
          "through": [
            "@user.delete!"
          ],
          "line": 414
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 291,
          "via": "sent_messages.update_all(deleted_by_author: true)",
          "through": [
            "@user.delete!"
          ],
          "line": 420
        },
        {
          "boundary": 7,
          "relations": [
            "writes"
          ],
          "unit": 291,
          "via": "wearable_hats.where(modlog_use: true).update_all(doffed_at: Time.current)",
          "through": [
            "@user.delete!"
          ],
          "line": 424
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 292,
          "via": "stories.where(created_at: 30.days.ago..).where(is_deleted: true, is_moderated: true).count",
          "through": [
            "@user.delete!",
            "good_riddance?"
          ],
          "line": 447
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 236,
          "via": "Keystore.upsert({key: key, value: value}, returning: false)",
          "through": [
            "InactiveUser.disown_all_by_author!",
            "refresh_counts!",
            "inactive_user.refresh_counts!",
            "Keystore.put"
          ],
          "line": 27
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        291,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings/update_avatar_source",
      "kind": "rest",
      "method": "POST",
      "path": "/settings/update_avatar_source",
      "framework": "rails",
      "units": [
        146
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 146,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 146,
          "line": 41,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 146,
          "via": "@user.update(user_params)",
          "through": [],
          "line": 39
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        205,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings",
      "kind": "rest",
      "method": "POST",
      "path": "/settings",
      "framework": "rails",
      "units": [
        147
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 147,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 147,
          "line": 67,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 147,
          "via": "@edit_user.update(user_params)",
          "through": [],
          "line": 50
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 293,
          "via": "Moderation.create!({ is_from_suggestions: true, moderator_user_id: nil, user: user, action: \"changed own username from \\\"#{from}\\\" to \\\"#{to}\\\"\", reason: reason, created_at: at })",
          "through": [
            "Username.rename!"
          ],
          "line": 12
        },
        {
          "boundary": 16,
          "relations": [
            "reads"
          ],
          "unit": 293,
          "via": "Username.where(user_id: user.id).order(created_at: :desc).limit(1).first",
          "through": [
            "Username.rename!"
          ],
          "line": 31
        },
        {
          "boundary": 16,
          "relations": [
            "writes"
          ],
          "unit": 293,
          "via": "old_username.save!",
          "through": [
            "Username.rename!"
          ],
          "line": 33
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "Username.rename!",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/2fa",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/2fa",
      "framework": "rails",
      "units": [
        148
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 148,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 148,
          "line": 70,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings/2fa_auth",
      "kind": "rest",
      "method": "POST",
      "path": "/settings/2fa_auth",
      "framework": "rails",
      "units": [
        149
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 149,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.authenticate(params[:user][:password].to_s)",
            "@user.has_2fa?"
          ],
          "unit": 149,
          "line": 82,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user.authenticate(params[:user][:password].to_s)",
            "!(@user.has_2fa?)"
          ],
          "unit": 149,
          "line": 84,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.authenticate(params[:user][:password].to_s))"
          ],
          "unit": 149,
          "line": 88,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/2fa_enroll",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/2fa_enroll",
      "framework": "rails",
      "units": [
        150
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 150,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "(Time.now.to_i - session[:last_authed].to_i) > TOTP_SESSION_TIMEOUT"
          ],
          "unit": 150,
          "line": 97,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!((Time.now.to_i - session[:last_authed].to_i) > TOTP_SESSION_TIMEOUT)"
          ],
          "unit": 150,
          "line": 92,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/2fa_verify",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/2fa_verify",
      "framework": "rails",
      "units": [
        151
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 151,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "(Time.now.to_i - session[:last_authed].to_i) > TOTP_SESSION_TIMEOUT || !(session[:totp_secret])"
          ],
          "unit": 151,
          "line": 124,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!((Time.now.to_i - session[:last_authed].to_i) > TOTP_SESSION_TIMEOUT || !(session[:totp_secret]))"
          ],
          "unit": 151,
          "line": 118,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings/2fa_update",
      "kind": "rest",
      "method": "POST",
      "path": "/settings/2fa_update",
      "framework": "rails",
      "units": [
        152
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 152,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "(Time.now.to_i - session[:last_authed].to_i) > TOTP_SESSION_TIMEOUT || !(session[:totp_secret])"
          ],
          "unit": 152,
          "line": 132,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!((Time.now.to_i - session[:last_authed].to_i) > TOTP_SESSION_TIMEOUT || !(session[:totp_secret]))",
            "@user.authenticate_totp(params[:totp_code])"
          ],
          "unit": 152,
          "line": 145,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!((Time.now.to_i - session[:last_authed].to_i) > TOTP_SESSION_TIMEOUT || !(session[:totp_secret]))",
            "!(@user.authenticate_totp(params[:totp_code]))"
          ],
          "unit": 152,
          "line": 149,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 152,
          "line": 128,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 152,
          "via": "@user.save!",
          "through": [],
          "line": 139
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings/pushover_auth",
      "kind": "rest",
      "method": "POST",
      "path": "/settings/pushover_auth",
      "framework": "rails",
      "units": [
        153
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 153,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Pushover.enabled?)"
          ],
          "unit": 153,
          "line": 158,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Pushover.enabled?"
          ],
          "unit": 153,
          "line": 163,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/pushover_callback",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/pushover_callback",
      "framework": "rails",
      "units": [
        154
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 154,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "session[:pushover_rand].to_s.blank?"
          ],
          "unit": 154,
          "line": 173,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(session[:pushover_rand].to_s.blank?)",
            "params[:rand].to_s.blank?"
          ],
          "unit": 154,
          "line": 178,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(session[:pushover_rand].to_s.blank?)",
            "!(params[:rand].to_s.blank?)",
            "!(params[:rand].to_s !== session[:pushover_rand].to_s)"
          ],
          "unit": 154,
          "line": 194,
          "wrapper": null
        },
        {
          "status": null,
          "output": "throw",
          "exception": "RuntimeError",
          "returns": null,
          "conditions": [
            "!(session[:pushover_rand].to_s.blank?)",
            "!(params[:rand].to_s.blank?)",
            "params[:rand].to_s !== session[:pushover_rand].to_s"
          ],
          "unit": 154,
          "line": 182,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 154,
          "line": 170,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 154,
          "via": "@user.save!",
          "through": [],
          "line": 186
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/mastodon_authentication",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/mastodon_authentication",
      "framework": "rails",
      "units": [
        155
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 155,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 155,
          "line": 197,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/mastodon_auth",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/mastodon_auth",
      "framework": "rails",
      "units": [
        156
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 156,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "app().persisted?"
          ],
          "unit": 156,
          "line": 204,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!app().persisted?"
          ],
          "unit": 156,
          "line": 206,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "MastodonApp.find_or_register",
            "app.register_app!",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        156,
        204,
        294,
        208
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/mastodon_callback",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/mastodon_callback",
      "framework": "rails",
      "units": [
        157
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 157,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:code].blank? || params[:state].blank? || params[:state].to_s !== session[:mastodon_state].to_s"
          ],
          "unit": 157,
          "line": 215,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:code].blank? || params[:state].blank? || params[:state].to_s !== session[:mastodon_state].to_s)",
            "!(tok().present? && username().present?)"
          ],
          "unit": 157,
          "line": 228,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:code].blank? || params[:state].blank? || params[:state].to_s !== session[:mastodon_state].to_s)",
            "tok().present? && username().present?"
          ],
          "unit": 157,
          "line": 231,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 157,
          "line": 210,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 157,
          "via": "@user.save!",
          "through": [],
          "line": 224
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 34,
          "relations": [
            "reads"
          ],
          "unit": 158,
          "via": "MastodonApp.find_by(name: @user.mastodon_instance)",
          "through": [
            "mastodon_disconnect"
          ],
          "line": 235
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "app.token_and_user_from_code",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        157,
        204,
        294,
        208
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings/mastodon_disconnect",
      "kind": "rest",
      "method": "POST",
      "path": "/settings/mastodon_disconnect",
      "framework": "rails",
      "units": [
        158
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 158,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 158,
          "line": 246,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 158,
          "line": 234,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 34,
          "relations": [
            "reads"
          ],
          "unit": 158,
          "via": "MastodonApp.find_by(name: @user.mastodon_instance)",
          "through": [],
          "line": 235
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 158,
          "via": "@user.save!",
          "through": [],
          "line": 243
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "app.revoke_token",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        208
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/github_auth",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/github_auth",
      "framework": "rails",
      "units": [
        159
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 159,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 159,
          "line": 251,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /settings/github_callback",
      "kind": "rest",
      "method": "GET",
      "path": "/settings/github_callback",
      "framework": "rails",
      "units": [
        160
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 160,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "session[:github_state].blank? || params[:code].blank? || params[:state].to_s !== session[:github_state].to_s"
          ],
          "unit": 160,
          "line": 259,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(session[:github_state].blank? || params[:code].blank? || params[:state].to_s !== session[:github_state].to_s)",
            "!(tok().present? && username().present?)"
          ],
          "unit": 160,
          "line": 271,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(session[:github_state].blank? || params[:code].blank? || params[:state].to_s !== session[:github_state].to_s)",
            "tok().present? && username().present?"
          ],
          "unit": 160,
          "line": 274,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 160,
          "line": 254,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 160,
          "via": "@user.save!",
          "through": [],
          "line": 268
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "Github.token_and_user_from_code",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        208,
        295
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /settings/github_disconnect",
      "kind": "rest",
      "method": "POST",
      "path": "/settings/github_disconnect",
      "framework": "rails",
      "units": [
        161
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 161,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 161,
          "line": 285,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 161,
          "line": 277,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 161,
          "via": "@user.save!",
          "through": [],
          "line": 283
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "Github.revoke_token",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        295,
        204,
        208
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /signup",
      "kind": "rest",
      "method": "GET",
      "path": "/signup",
      "framework": "rails",
      "units": [
        162
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 162,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user"
          ],
          "unit": 162,
          "line": 12,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "Rails.application.open_signups?"
          ],
          "unit": 162,
          "line": 15,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "!(Rails.application.open_signups?)"
          ],
          "unit": 162,
          "line": 8,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /signup/invite",
      "kind": "rest",
      "method": "GET",
      "path": "/signup/invite",
      "framework": "rails",
      "units": [
        163
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 163,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Rails.application.allow_new_users_to_invite?) && @user.is_new?"
          ],
          "unit": 163,
          "line": 84,
          "wrapper": "check_new_users"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.can_invite?)"
          ],
          "unit": 163,
          "line": 90,
          "wrapper": "check_can_invite"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 163,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 163,
          "line": 19,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /invitations/{invitation_code}",
      "kind": "rest",
      "method": "GET",
      "path": "/invitations/:invitation_code",
      "framework": "rails",
      "units": [
        164
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 164,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user"
          ],
          "unit": 164,
          "line": 29,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "!(Rails.application.open_signups?)",
            "!(@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first)"
          ],
          "unit": 164,
          "line": 35,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "!(Rails.application.open_signups?)",
            "@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first"
          ],
          "unit": 164,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "Rails.application.open_signups?"
          ],
          "unit": 164,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "!(Rails.application.open_signups?)",
            "@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first",
            "!(Rails.application.open_signups?)"
          ],
          "unit": 164,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "!(Rails.application.open_signups?)",
            "@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first",
            "Rails.application.open_signups?"
          ],
          "unit": 164,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "Rails.application.open_signups?",
            "!(Rails.application.open_signups?)"
          ],
          "unit": 164,
          "line": 23,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)",
            "Rails.application.open_signups?",
            "Rails.application.open_signups?"
          ],
          "unit": 164,
          "line": 23,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 164,
          "via": "Invitation.unused.where(code: params[:invitation_code].to_s).first",
          "through": [],
          "line": 33
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 296,
          "via": "invitation.update!(used_at: Time.current, new_user: nil)",
          "through": [
            "ModNote.tattle_on_invited"
          ],
          "line": 112
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "ModNote.tattle_on_invited",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /signup",
      "kind": "rest",
      "method": "POST",
      "path": "/signup",
      "framework": "rails",
      "units": [
        165
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.read_only?"
          ],
          "unit": 165,
          "line": 66,
          "wrapper": "check_for_read_only_mode"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Rails.application.open_signups?)",
            "!(@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first)"
          ],
          "unit": 165,
          "line": 52,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Rails.application.open_signups?)",
            "@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first",
            "@new_user.save",
            "Rails.application.allow_new_users_to_invite?"
          ],
          "unit": 165,
          "line": 71,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.open_signups?",
            "@new_user.save",
            "Rails.application.allow_new_users_to_invite?"
          ],
          "unit": 165,
          "line": 71,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Rails.application.open_signups?)",
            "@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first",
            "@new_user.save",
            "!(Rails.application.allow_new_users_to_invite?)"
          ],
          "unit": 165,
          "line": 73,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.open_signups?",
            "@new_user.save",
            "!(Rails.application.allow_new_users_to_invite?)"
          ],
          "unit": 165,
          "line": 73,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(Rails.application.open_signups?)",
            "@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first",
            "!(@new_user.save)"
          ],
          "unit": 165,
          "line": 76,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "Rails.application.open_signups?",
            "!(@new_user.save)"
          ],
          "unit": 165,
          "line": 76,
          "wrapper": null
        },
        {
          "status": 422,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordInvalid raised"
          ],
          "unit": 165,
          "line": 48,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 165,
          "via": "Invitation.unused.where(code: params[:invitation_code].to_s).first",
          "through": [],
          "line": 50
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 165,
          "via": "@new_user.save",
          "through": [],
          "line": 64
        },
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 165,
          "via": "@invitation&.update!(used_at: Time.current, new_user: @new_user)",
          "through": [],
          "line": 65
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /stats",
      "kind": "rest",
      "method": "GET",
      "path": "/stats",
      "framework": "rails",
      "units": [
        166
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 166,
          "line": 4,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories",
      "kind": "rest",
      "method": "POST",
      "path": "/stories",
      "framework": "rails",
      "units": [
        167
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 167,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.can_submit_stories?)"
          ],
          "unit": 167,
          "line": 507,
          "wrapper": "verify_user_can_submit_stories"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params.preview"
          ],
          "unit": 167,
          "line": 26,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.preview",
            "@story.valid? && !(@story.already_posted_recently?) && !(@story.is_resubmit?) || @comment.valid?",
            "some iteration of: Story.transaction",
            "@story.save && !(@story.is_resubmit?) || @comment.save"
          ],
          "unit": 167,
          "line": 40,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.preview",
            "!(@story.valid? && !(@story.already_posted_recently?) && !(@story.is_resubmit?) || @comment.valid?)",
            "@story.new_user_acculturation_error"
          ],
          "unit": 167,
          "line": 53,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.preview",
            "!(@story.valid? && !(@story.already_posted_recently?) && !(@story.is_resubmit?) || @comment.valid?)",
            "!(@story.new_user_acculturation_error)"
          ],
          "unit": 167,
          "line": 55,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!params.preview",
            "@story.valid? && !(@story.already_posted_recently?) && !(@story.is_resubmit?) || @comment.valid?",
            "!(loop exited via throw: Story.transaction)"
          ],
          "unit": 167,
          "line": 25,
          "wrapper": null
        },
        {
          "status": null,
          "output": "throw",
          "exception": "ActiveRecord::Rollback",
          "returns": null,
          "conditions": [
            "!params.preview",
            "@story.valid? && !(@story.already_posted_recently?) && !(@story.is_resubmit?) || @comment.valid?",
            "some iteration of: Story.transaction",
            "!(@story.save && !(@story.is_resubmit?) || @comment.save)"
          ],
          "unit": 167,
          "line": 48,
          "wrapper": null
        },
        {
          "status": 500,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 167,
          "line": 55,
          "wrapper": "rescue_from#5"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 167,
          "line": 52,
          "wrapper": "rescue_from#4"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 167,
          "line": 48,
          "wrapper": "rescue_from#3"
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 167,
          "line": 31,
          "wrapper": "rescue_from#0"
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 167,
          "via": "@story.save",
          "through": [],
          "line": 39
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 167,
          "via": "@comment.save",
          "through": [],
          "line": 39
        },
        {
          "boundary": 35,
          "relations": [
            "writes"
          ],
          "unit": 167,
          "via": "SendWebmentionJob.set(wait: 5.minutes).perform_later",
          "through": [],
          "line": 43
        },
        {
          "boundary": 36,
          "relations": [
            "writes"
          ],
          "unit": 167,
          "via": "CreateStoryCardJob.perform_later",
          "through": [],
          "line": 46
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 297,
          "via": "similar_stories.any?",
          "through": [
            "@story.is_resubmit?"
          ],
          "line": 492
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 37,
          "relations": [
            "reads"
          ],
          "unit": 298,
          "via": null,
          "through": [
            "CreateStoryCardJob.perform_later, which CreateStoryCardJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 212,
          "via": "m.save!",
          "through": [
            "log_hat_use"
          ],
          "line": 448
        },
        {
          "boundary": 38,
          "relations": [
            "reads"
          ],
          "unit": 299,
          "via": null,
          "through": [
            "SendWebmentionJob.set(wait: 5.minutes).perform_later, which SendWebmentionJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 300,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [
            "update_resubmit_comment_attributes"
          ],
          "line": 475
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 463
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_hat_use",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 236,
          "via": "Keystore.upsert({key: key, value: value}, returning: false)",
          "through": [
            "update_associated_caches",
            "user.refresh_counts!",
            "Keystore.put"
          ],
          "line": 27
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "SendWebmentionJob.set(wait: 5.minutes).perform_later, which SendWebmentionJob#perform runs later",
            "sp.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        301,
        204,
        302,
        303,
        208,
        304
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "DELETE /stories/{id}",
      "kind": "rest",
      "method": "DELETE",
      "path": "/stories/:id",
      "framework": "rails",
      "units": [
        168
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 168,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 168,
          "line": 489,
          "wrapper": "find_user_story"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.is_editable_by_user?(@user)) && !(@user.is_moderator?)"
          ],
          "unit": 168,
          "line": 62,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story.is_editable_by_user?(@user)) && !(@user.is_moderator?))"
          ],
          "unit": 168,
          "line": 74,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 168,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 481
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 168,
          "via": "Story.where(user_id: @user.id, short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 483
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 168,
          "via": "@story.save",
          "through": [],
          "line": 69
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 463
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 305,
          "via": "Vote.where(user_id: user_id, story_id: story_id, comment_id: comment_id)",
          "through": [
            "record_initial_upvote",
            "Vote.vote_thusly_on_story_or_comment_for_user_because"
          ],
          "line": 114
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for",
            "value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "Mastodon.delete_post",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        301,
        204,
        208,
        283
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /stories/{story_id}/destroy",
      "kind": "rest",
      "method": "PATCH",
      "path": "/stories/:story_id/destroy",
      "framework": "rails",
      "units": [
        169
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 169,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 169,
          "line": 489,
          "wrapper": "find_user_story"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.is_editable_by_user?(@user)) && !(@user.is_moderator?)"
          ],
          "unit": 169,
          "line": 62,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story.is_editable_by_user?(@user)) && !(@user.is_moderator?))"
          ],
          "unit": 169,
          "line": 74,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 169,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 481
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 169,
          "via": "Story.where(user_id: @user.id, short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 483
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 169,
          "via": "@story.save",
          "through": [],
          "line": 69
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 463
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 305,
          "via": "Vote.where(user_id: user_id, story_id: story_id, comment_id: comment_id)",
          "through": [
            "record_initial_upvote",
            "Vote.vote_thusly_on_story_or_comment_for_user_because"
          ],
          "line": 114
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for",
            "value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "Mastodon.delete_post",
            "s.fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        301,
        204,
        208,
        283
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /stories/{id}/edit",
      "kind": "rest",
      "method": "GET",
      "path": "/stories/:id/edit",
      "framework": "rails",
      "units": [
        170
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 170,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 170,
          "line": 489,
          "wrapper": "find_user_story"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.is_editable_by_user?(@user))"
          ],
          "unit": 170,
          "line": 80,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.is_editable_by_user?(@user)"
          ],
          "unit": 170,
          "line": 77,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 170,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 481
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 170,
          "via": "Story.where(user_id: @user.id, short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 483
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /stories/new",
      "kind": "rest",
      "method": "GET",
      "path": "/stories/new",
      "framework": "rails",
      "units": [
        171
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 171,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user.can_submit_stories?)"
          ],
          "unit": 171,
          "line": 507,
          "wrapper": "verify_user_can_submit_stories"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:url].present?",
            "@story.already_posted_recently?"
          ],
          "unit": 171,
          "line": 114,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:url].present?",
            "!(@story.already_posted_recently?)"
          ],
          "unit": 171,
          "line": 94,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:url].present?)"
          ],
          "unit": 171,
          "line": 94,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:url].present?",
            "!(@story.already_posted_recently?)",
            "@story.title.blank? && params[:title].present?"
          ],
          "unit": 171,
          "line": 94,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:url].present?",
            "!(@story.already_posted_recently?)",
            "!(@story.title.blank? && params[:title].present?)"
          ],
          "unit": 171,
          "line": 94,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:url].present?)"
          ],
          "unit": 171,
          "line": 94,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 306,
          "via": "similar_stories.first",
          "through": [
            "@story.most_recent_similar"
          ],
          "line": 496
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 300,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [
            "update_resubmit_comment_attributes"
          ],
          "line": 475
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "@story.fetched_attributes",
            "s.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        208,
        307
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/preview",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/preview",
      "framework": "rails",
      "units": [
        172
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 172,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 172,
          "line": 140,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 300,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [
            "update_resubmit_comment_attributes"
          ],
          "line": 475
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 463
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 297,
          "via": "similar_stories.any?",
          "through": [
            "update_resubmit_comment_attributes",
            "@story.is_resubmit?"
          ],
          "line": 492
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        301,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /stories/{id}",
      "kind": "rest",
      "method": "GET",
      "path": "/stories/:id",
      "framework": "rails",
      "units": [
        173
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.merged_into_story",
            "format.html"
          ],
          "unit": 173,
          "line": 150,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.merged_into_story",
            "format.json"
          ],
          "unit": 173,
          "line": 153,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "!(@story.can_be_seen_by_user?(@user))",
            "format.html"
          ],
          "unit": 173,
          "line": 167,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "@story.can_be_seen_by_user?(@user)",
            "request.format.html? && params[:title].to_s !== @story.title_as_slug"
          ],
          "unit": 173,
          "line": 174,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "@story.can_be_seen_by_user?(@user)",
            "!(request.format.html? && params[:title].to_s !== @story.title_as_slug)",
            "format.html"
          ],
          "unit": 173,
          "line": 197,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "@story.can_be_seen_by_user?(@user)",
            "!(request.format.html? && params[:title].to_s !== @story.title_as_slug)",
            "format.json"
          ],
          "unit": 173,
          "line": 201,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "!(@story.can_be_seen_by_user?(@user))",
            "format.json"
          ],
          "unit": 173,
          "line": 168,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 173,
          "line": 143,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 173,
          "via": "Story.where(short_id: params[:id]).first!",
          "through": [],
          "line": 145
        },
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 173,
          "via": "Moderation.where(story: @story, comment: nil).where(\"action LIKE '%deleted story%'\").order(id: :desc).first",
          "through": [],
          "line": 159
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 173,
          "via": "Comment.where(story_id: [@story.id] + @story.merged_stories.pluck(:id)).where(id: @user.notifications.read.of_comments)",
          "through": [],
          "line": 178
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 173,
          "via": "@story.merged_stories.pluck(:id)",
          "through": [],
          "line": 178
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 308,
          "via": "tags.map(&:tag)",
          "through": [
            "@story.as_json"
          ],
          "line": 529
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 309,
          "via": "Vote.find_by(user: @user, story: @story, comment: nil)",
          "through": [
            "load_user_votes"
          ],
          "line": 496
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 310,
          "via": "Hat.where(user_id: user.id, modlog_use: true).any? do |hat| check_at.between?(hat.created_at, hat.doffed_at || current_time) end",
          "through": [
            "@story.as_json",
            "send, which may run can_have_images?"
          ],
          "line": 607
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 254,
          "via": "Tagging.joins(:tag).where(\"story_id = stories.id\").where(tag: {category_id: categories})",
          "through": [
            "@story.as_json",
            "send, which may run categories"
          ],
          "line": 121
        },
        {
          "boundary": 39,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_taggings.any?",
          "through": [
            "@story.as_json",
            "send, which may run has_suggestions?"
          ],
          "line": 730
        },
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_titles.any?",
          "through": [
            "@story.as_json",
            "send, which may run has_suggestions?"
          ],
          "line": 730
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 312,
          "via": "HiddenStory.exists?(user_id: user.id, story_id: id)",
          "through": [
            "@story.as_json",
            "send, which may run is_hidden_by_user?"
          ],
          "line": 775
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 313,
          "via": "SavedStory.exists?(user_id: user.id, story_id: id)",
          "through": [
            "@story.as_json",
            "send, which may run is_saved_by_user?"
          ],
          "line": 783
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 39,
          "relations": [
            "writes"
          ],
          "unit": 314,
          "via": "suggested_taggings.where(user_id: user.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_tags_for_user!"
          ],
          "line": 902
        },
        {
          "boundary": 40,
          "relations": [
            "writes"
          ],
          "unit": 315,
          "via": "st.save!",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_title_for_user!"
          ],
          "line": 951
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 316,
          "via": "Domain.where(domain: domain_name)",
          "through": [
            "@story.as_json",
            "send, which may run set_domain_and_origin"
          ],
          "line": 1165
        },
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "ModMail.create! recipients: [user, inviter], subject: \"New user story submission\"",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 41
        },
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "mail.mod_mail_messages.create! user: User.system_user, message: message",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 42
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 22,
          "relations": [
            "writes"
          ],
          "unit": 318,
          "via": "origins.find_or_create_by(identifier: identifier)",
          "through": [
            "@story.as_json",
            "send, which may run set_domain_and_origin",
            "domain.find_or_create_origin"
          ],
          "line": 78
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModNote.tattle_on_brigading!",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 16,
          "relations": [
            "reads"
          ],
          "unit": 226,
          "via": "Username.where(\"created_at < ? and (? < renamed_away_at or renamed_away_at is null)\", as_of, as_of).where(\"LOWER(username) = ?\", user[1..].downcase).exists?",
          "through": [
            "@story.as_json",
            "send, which may run generated_markeddown_description",
            "Markdowner.to_html",
            "link_username_mentions"
          ],
          "line": 118
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "@story.as_json",
            "send, which may run mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "@story.as_json",
            "send, which may run valid_canonical_uri?",
            "Sponge.new.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        308,
        204,
        233,
        248,
        307,
        254,
        319,
        320,
        249,
        250,
        321,
        322,
        251,
        252,
        253,
        316,
        255,
        323,
        324,
        258,
        325,
        283,
        318,
        288,
        208,
        229,
        226,
        230
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /s(/{id}|/{id}/{title})",
      "kind": "rest",
      "method": "GET",
      "path": "/s(/:id|/:id/:title)",
      "framework": "rails",
      "units": [
        174
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.merged_into_story",
            "format.html"
          ],
          "unit": 174,
          "line": 150,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.merged_into_story",
            "format.json"
          ],
          "unit": 174,
          "line": 153,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "!(@story.can_be_seen_by_user?(@user))",
            "format.html"
          ],
          "unit": 174,
          "line": 167,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "@story.can_be_seen_by_user?(@user)",
            "request.format.html? && params[:title].to_s !== @story.title_as_slug"
          ],
          "unit": 174,
          "line": 174,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "@story.can_be_seen_by_user?(@user)",
            "!(request.format.html? && params[:title].to_s !== @story.title_as_slug)",
            "format.html"
          ],
          "unit": 174,
          "line": 197,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "@story.can_be_seen_by_user?(@user)",
            "!(request.format.html? && params[:title].to_s !== @story.title_as_slug)",
            "format.json"
          ],
          "unit": 174,
          "line": 201,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.merged_into_story)",
            "!(@story.can_be_seen_by_user?(@user))",
            "format.json"
          ],
          "unit": 174,
          "line": 168,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 174,
          "line": 143,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 174,
          "via": "Story.where(short_id: params[:id]).first!",
          "through": [],
          "line": 145
        },
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 174,
          "via": "Moderation.where(story: @story, comment: nil).where(\"action LIKE '%deleted story%'\").order(id: :desc).first",
          "through": [],
          "line": 159
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 174,
          "via": "Comment.where(story_id: [@story.id] + @story.merged_stories.pluck(:id)).where(id: @user.notifications.read.of_comments)",
          "through": [],
          "line": 178
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 174,
          "via": "@story.merged_stories.pluck(:id)",
          "through": [],
          "line": 178
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 308,
          "via": "tags.map(&:tag)",
          "through": [
            "@story.as_json"
          ],
          "line": 529
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 309,
          "via": "Vote.find_by(user: @user, story: @story, comment: nil)",
          "through": [
            "load_user_votes"
          ],
          "line": 496
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 310,
          "via": "Hat.where(user_id: user.id, modlog_use: true).any? do |hat| check_at.between?(hat.created_at, hat.doffed_at || current_time) end",
          "through": [
            "@story.as_json",
            "send, which may run can_have_images?"
          ],
          "line": 607
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 254,
          "via": "Tagging.joins(:tag).where(\"story_id = stories.id\").where(tag: {category_id: categories})",
          "through": [
            "@story.as_json",
            "send, which may run categories"
          ],
          "line": 121
        },
        {
          "boundary": 39,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_taggings.any?",
          "through": [
            "@story.as_json",
            "send, which may run has_suggestions?"
          ],
          "line": 730
        },
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_titles.any?",
          "through": [
            "@story.as_json",
            "send, which may run has_suggestions?"
          ],
          "line": 730
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 312,
          "via": "HiddenStory.exists?(user_id: user.id, story_id: id)",
          "through": [
            "@story.as_json",
            "send, which may run is_hidden_by_user?"
          ],
          "line": 775
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 313,
          "via": "SavedStory.exists?(user_id: user.id, story_id: id)",
          "through": [
            "@story.as_json",
            "send, which may run is_saved_by_user?"
          ],
          "line": 783
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 39,
          "relations": [
            "writes"
          ],
          "unit": 314,
          "via": "suggested_taggings.where(user_id: user.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_tags_for_user!"
          ],
          "line": 902
        },
        {
          "boundary": 40,
          "relations": [
            "writes"
          ],
          "unit": 315,
          "via": "st.save!",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_title_for_user!"
          ],
          "line": 951
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 316,
          "via": "Domain.where(domain: domain_name)",
          "through": [
            "@story.as_json",
            "send, which may run set_domain_and_origin"
          ],
          "line": 1165
        },
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "ModMail.create! recipients: [user, inviter], subject: \"New user story submission\"",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 41
        },
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "mail.mod_mail_messages.create! user: User.system_user, message: message",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 42
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 22,
          "relations": [
            "writes"
          ],
          "unit": 318,
          "via": "origins.find_or_create_by(identifier: identifier)",
          "through": [
            "@story.as_json",
            "send, which may run set_domain_and_origin",
            "domain.find_or_create_origin"
          ],
          "line": 78
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModNote.tattle_on_brigading!",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 16,
          "relations": [
            "reads"
          ],
          "unit": 226,
          "via": "Username.where(\"created_at < ? and (? < renamed_away_at or renamed_away_at is null)\", as_of, as_of).where(\"LOWER(username) = ?\", user[1..].downcase).exists?",
          "through": [
            "@story.as_json",
            "send, which may run generated_markeddown_description",
            "Markdowner.to_html",
            "link_username_mentions"
          ],
          "line": 118
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "@story.as_json",
            "send, which may run mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "@story.as_json",
            "send, which may run valid_canonical_uri?",
            "Sponge.new.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        308,
        204,
        233,
        248,
        307,
        254,
        319,
        320,
        249,
        250,
        321,
        322,
        251,
        252,
        253,
        316,
        255,
        323,
        324,
        258,
        325,
        283,
        318,
        288,
        208,
        229,
        226,
        230
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /stories/{story_id}/undelete",
      "kind": "rest",
      "method": "PATCH",
      "path": "/stories/:story_id/undelete",
      "framework": "rails",
      "units": [
        175
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 175,
          "line": 489,
          "wrapper": "find_user_story"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.is_editable_by_user?(@user) && @story.is_undeletable_by_user?(@user))"
          ],
          "unit": 175,
          "line": 210,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.is_editable_by_user?(@user) && @story.is_undeletable_by_user?(@user)"
          ],
          "unit": 175,
          "line": 221,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 175,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 481
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 175,
          "via": "Story.where(user_id: @user.id, short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 483
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 175,
          "via": "@story.save",
          "through": [],
          "line": 217
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 463
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 305,
          "via": "Vote.where(user_id: user_id, story_id: story_id, comment_id: comment_id)",
          "through": [
            "record_initial_upvote",
            "Vote.vote_thusly_on_story_or_comment_for_user_because"
          ],
          "line": 114
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "Keystore.increment_value_for",
            "incremented_value_for",
            "value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        301,
        204,
        283
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PATCH /stories/{id}",
      "kind": "rest",
      "method": "PATCH",
      "path": "/stories/:id",
      "framework": "rails",
      "units": [
        176
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 176,
          "line": 489,
          "wrapper": "find_user_story"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.is_editable_by_user?(@user))"
          ],
          "unit": 176,
          "line": 227,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.is_editable_by_user?(@user)",
            "@story.save"
          ],
          "unit": 176,
          "line": 240,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.is_editable_by_user?(@user)",
            "!(@story.save)"
          ],
          "unit": 176,
          "line": 242,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 176,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 481
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 176,
          "via": "Story.where(user_id: @user.id, short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 483
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 176,
          "via": "@story.save",
          "through": [],
          "line": 235
        },
        {
          "boundary": 36,
          "relations": [
            "writes"
          ],
          "unit": 176,
          "via": "CreateStoryCardJob.perform_later",
          "through": [],
          "line": 237
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 37,
          "relations": [
            "reads"
          ],
          "unit": 298,
          "via": null,
          "through": [
            "CreateStoryCardJob.perform_later, which CreateStoryCardJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 463
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 305,
          "via": "Vote.where(user_id: user_id, story_id: story_id, comment_id: comment_id)",
          "through": [
            "record_initial_upvote",
            "Vote.vote_thusly_on_story_or_comment_for_user_because"
          ],
          "line": 114
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "CreateStoryCardJob.perform_later, which CreateStoryCardJob#perform runs later",
            "StoryImage.new(story).generate",
            "find_card_image_url",
            "fetch_url",
            "s.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        301,
        204,
        283,
        303,
        304,
        208
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "PUT /stories/{id}",
      "kind": "rest",
      "method": "PUT",
      "path": "/stories/:id",
      "framework": "rails",
      "units": [
        177
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 177,
          "line": 489,
          "wrapper": "find_user_story"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.is_editable_by_user?(@user))"
          ],
          "unit": 177,
          "line": 227,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.is_editable_by_user?(@user)",
            "@story.save"
          ],
          "unit": 177,
          "line": 240,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.is_editable_by_user?(@user)",
            "!(@story.save)"
          ],
          "unit": 177,
          "line": 242,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 177,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 481
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 177,
          "via": "Story.where(user_id: @user.id, short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": 483
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 177,
          "via": "@story.save",
          "through": [],
          "line": 235
        },
        {
          "boundary": 36,
          "relations": [
            "writes"
          ],
          "unit": 177,
          "via": "CreateStoryCardJob.perform_later",
          "through": [],
          "line": 237
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 37,
          "relations": [
            "reads"
          ],
          "unit": 298,
          "via": null,
          "through": [
            "CreateStoryCardJob.perform_later, which CreateStoryCardJob#perform runs later"
          ],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [
            "update_story_attributes"
          ],
          "line": 463
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 305,
          "via": "Vote.where(user_id: user_id, story_id: story_id, comment_id: comment_id)",
          "through": [
            "record_initial_upvote",
            "Vote.vote_thusly_on_story_or_comment_for_user_because"
          ],
          "line": 114
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "CreateStoryCardJob.perform_later, which CreateStoryCardJob#perform runs later",
            "StoryImage.new(story).generate",
            "find_card_image_url",
            "fetch_url",
            "s.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        301,
        204,
        283,
        303,
        304,
        208
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/unvote",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/unvote",
      "framework": "rails",
      "units": [
        178
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 178,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story = find_story) || @story.is_gone?"
          ],
          "unit": 178,
          "line": 248,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story = find_story) || @story.is_gone?)"
          ],
          "unit": 178,
          "line": 255,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/upvote",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/upvote",
      "framework": "rails",
      "units": [
        179
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 179,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story = find_story) || @story.is_gone?"
          ],
          "unit": 179,
          "line": 260,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story = find_story) || @story.is_gone?)",
            "@story.merged_into_story"
          ],
          "unit": 179,
          "line": 264,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story = find_story) || @story.is_gone?)",
            "!(@story.merged_into_story)"
          ],
          "unit": 179,
          "line": 271,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/flag",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/flag",
      "framework": "rails",
      "units": [
        180
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 180,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story = find_story) || @story.is_gone?"
          ],
          "unit": 180,
          "line": 276,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story = find_story) || @story.is_gone?)",
            "!(Vote::STORY_REASONS[params[:reason]])"
          ],
          "unit": 180,
          "line": 280,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story = find_story) || @story.is_gone?)",
            "Vote::STORY_REASONS[params[:reason]]",
            "!(@user.can_flag?(@story))"
          ],
          "unit": 180,
          "line": 284,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(!(@story = find_story) || @story.is_gone?)",
            "Vote::STORY_REASONS[params[:reason]]",
            "@user.can_flag?(@story)"
          ],
          "unit": 180,
          "line": 291,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        238,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/hide",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/hide",
      "framework": "rails",
      "units": [
        181
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 181,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "error",
            "format.html"
          ],
          "unit": 181,
          "line": 306,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "error",
            "format.json"
          ],
          "unit": 181,
          "line": 309,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!error",
            "format.json"
          ],
          "unit": 181,
          "line": 323,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!error",
            "format.html"
          ],
          "unit": 181,
          "line": 294,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 13,
          "relations": [
            "writes"
          ],
          "unit": 326,
          "via": "HiddenStory.where(story: story, user: user).first_or_initialize.save!",
          "through": [
            "HiddenStory.hide_story_for_user"
          ],
          "line": 14
        },
        {
          "boundary": 41,
          "relations": [
            "writes"
          ],
          "unit": 327,
          "via": "ribbon.save!",
          "through": [
            "HiddenStory.hide_story_for_user",
            "ReadRibbon.hide_replies_for"
          ],
          "line": 31
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        326,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/unhide",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/unhide",
      "framework": "rails",
      "units": [
        182
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 182,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(story = find_story)",
            "format.html"
          ],
          "unit": 182,
          "line": 335,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(story = find_story)",
            "format.json"
          ],
          "unit": 182,
          "line": 338,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "story = find_story",
            "format.json"
          ],
          "unit": 182,
          "line": 352,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "story = find_story",
            "format.html"
          ],
          "unit": 182,
          "line": 328,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 13,
          "relations": [
            "writes"
          ],
          "unit": 328,
          "via": "HiddenStory.where(story: story, user: user).delete_all",
          "through": [
            "HiddenStory.unhide_story_for_user"
          ],
          "line": 20
        },
        {
          "boundary": 41,
          "relations": [
            "writes"
          ],
          "unit": 329,
          "via": "ribbon.save!",
          "through": [
            "HiddenStory.unhide_story_for_user",
            "ReadRibbon.unhide_replies_for"
          ],
          "line": 38
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        328,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/save",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/save",
      "framework": "rails",
      "units": [
        183
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 183,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "error",
            "format.html"
          ],
          "unit": 183,
          "line": 369,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "error",
            "format.json"
          ],
          "unit": 183,
          "line": 372,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!error",
            "format.json"
          ],
          "unit": 183,
          "line": 386,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!error",
            "format.html"
          ],
          "unit": 183,
          "line": 357,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 20,
          "relations": [
            "writes"
          ],
          "unit": 330,
          "via": "SavedStory.where(user_id: user_id, story_id: story_id).first_or_initialize.save!",
          "through": [
            "SavedStory.save_story_for_user"
          ],
          "line": 14
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/unsave",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/unsave",
      "framework": "rails",
      "units": [
        184
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 184,
          "line": 68,
          "wrapper": "require_logged_in_user_or_400"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(story = find_story)",
            "format.html"
          ],
          "unit": 184,
          "line": 398,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(story = find_story)",
            "format.json"
          ],
          "unit": 184,
          "line": 401,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "story = find_story",
            "format.json"
          ],
          "unit": 184,
          "line": 415,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "story = find_story",
            "format.html"
          ],
          "unit": 184,
          "line": 391,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 20,
          "relations": [
            "writes"
          ],
          "unit": 184,
          "via": "SavedStory.where(user_id: @user.id, story_id: story.id).delete_all",
          "through": [],
          "line": 407
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/check_url_dupe",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/check_url_dupe",
      "framework": "rails",
      "units": [
        185
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params.dig(:story, :url).blank?)",
            "some iteration of: respond_to",
            "some iteration of: format.html"
          ],
          "unit": 185,
          "line": 430,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params.dig(:story, :url).blank?)",
            "some iteration of: respond_to",
            "!(loop exited via return: format.html)",
            "some iteration of: format.json"
          ],
          "unit": 185,
          "line": 439,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params.dig(:story, :url).blank?)",
            "!(loop exited via return: respond_to)"
          ],
          "unit": 185,
          "line": 420,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "throw",
          "exception": "ActionController::ParameterMissing",
          "returns": null,
          "conditions": [
            "params.dig(:story, :url).blank?"
          ],
          "unit": 185,
          "line": 421,
          "wrapper": null
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 185,
          "line": 43,
          "wrapper": "rescue_from#2"
        },
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 185,
          "line": 44,
          "wrapper": "rescue_from#2"
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 308,
          "via": "tags.map(&:tag)",
          "through": [
            "@story.as_json"
          ],
          "line": 529
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 15,
          "relations": [
            "reads"
          ],
          "unit": 331,
          "via": "joins(:from_comment).includes(:from_comment).where(from_comment: {created_at: (7.days.ago)..}).where(normalized_url: Utils.normalize(url))",
          "through": [
            "Link.recently_linked_from_comments"
          ],
          "line": 26
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 300,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [
            "update_resubmit_comment_attributes"
          ],
          "line": 475
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "merged_stories.map(&:score)",
          "through": [
            "@story.as_json",
            "send, which may run calculated_hotness"
          ],
          "line": 574
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 254,
          "via": "Tagging.joins(:tag).where(\"story_id = stories.id\").where(tag: {category_id: categories})",
          "through": [
            "@story.as_json",
            "send, which may run categories"
          ],
          "line": 121
        },
        {
          "boundary": 39,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_taggings.any?",
          "through": [
            "@story.as_json",
            "send, which may run has_suggestions?"
          ],
          "line": 730
        },
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_titles.any?",
          "through": [
            "@story.as_json",
            "send, which may run has_suggestions?"
          ],
          "line": 730
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 312,
          "via": "HiddenStory.exists?(user_id: user.id, story_id: id)",
          "through": [
            "@story.as_json",
            "send, which may run is_hidden_by_user?"
          ],
          "line": 775
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 313,
          "via": "SavedStory.exists?(user_id: user.id, story_id: id)",
          "through": [
            "@story.as_json",
            "send, which may run is_saved_by_user?"
          ],
          "line": 783
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 332,
          "via": "Comment.none",
          "through": [
            "@story.as_json",
            "send, which may run merged_comments"
          ],
          "line": 861
        },
        {
          "boundary": 39,
          "relations": [
            "writes"
          ],
          "unit": 314,
          "via": "suggested_taggings.where(user_id: user.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_tags_for_user!"
          ],
          "line": 902
        },
        {
          "boundary": 40,
          "relations": [
            "writes"
          ],
          "unit": 315,
          "via": "st.save!",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_title_for_user!"
          ],
          "line": 951
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 316,
          "via": "Domain.where(domain: domain_name)",
          "through": [
            "@story.as_json",
            "send, which may run set_domain_and_origin"
          ],
          "line": 1165
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 333,
          "via": "votes.each do |v| next if v.vote == 0 r_counts[v.reason.to_s] ||= 0 r_counts[v.reason.to_s] += 1 if user&.is_moderator? r_whos[v.reason.to_s] ||= [] r_whos[v.reason.to_s].push v.user.username end end",
          "through": [
            "@story.as_json",
            "send, which may run vote_summary_for"
          ],
          "line": 1237
        },
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "ModMail.create! recipients: [user, inviter], subject: \"New user story submission\"",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 41
        },
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "mail.mod_mail_messages.create! user: User.system_user, message: message",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 42
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 22,
          "relations": [
            "writes"
          ],
          "unit": 318,
          "via": "origins.find_or_create_by(identifier: identifier)",
          "through": [
            "@story.as_json",
            "send, which may run set_domain_and_origin",
            "domain.find_or_create_origin"
          ],
          "line": 78
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModNote.tattle_on_brigading!",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 16,
          "relations": [
            "reads"
          ],
          "unit": 226,
          "via": "Username.where(\"created_at < ? and (? < renamed_away_at or renamed_away_at is null)\", as_of, as_of).where(\"LOWER(username) = ?\", user[1..].downcase).exists?",
          "through": [
            "@story.as_json",
            "send, which may run generated_markeddown_description",
            "Markdowner.to_html",
            "link_username_mentions"
          ],
          "line": 118
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "@story.as_json",
            "send, which may run mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        },
        {
          "boundary": 2,
          "relations": [
            "writes"
          ],
          "unit": 206,
          "via": "puts",
          "through": [
            "@story.as_json",
            "send, which may run valid_canonical_uri?",
            "Sponge.new.try_fetch",
            "fetch",
            "dputs"
          ],
          "line": 307
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        185,
        301,
        308,
        204,
        288,
        248,
        307,
        254,
        319,
        320,
        249,
        250,
        321,
        322,
        251,
        252,
        253,
        316,
        255,
        323,
        324,
        258,
        325,
        283,
        318,
        208,
        229,
        226,
        230
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/disown",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/disown",
      "framework": "rails",
      "units": [
        186
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 400,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(story = find_story && story.disownable_by_user?(@user))"
          ],
          "unit": 186,
          "line": 446,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "story = find_story && story.disownable_by_user?(@user)"
          ],
          "unit": 186,
          "line": 451,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 236,
          "via": "Keystore.upsert({key: key, value: value}, returning: false)",
          "through": [
            "InactiveUser.disown!",
            "refresh_counts!",
            "inactive_user.refresh_counts!",
            "Keystore.put"
          ],
          "line": 27
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        237,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /story_image/{short_id}.png",
      "kind": "rest",
      "method": "GET",
      "path": "/story_image/:short_id.png",
      "framework": "rails",
      "units": [
        187
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!image().exists?",
            "!(File.exist?(lobsters_logo))"
          ],
          "unit": 187,
          "line": 18,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "image().exists?"
          ],
          "unit": 187,
          "line": 4,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!image().exists?",
            "File.exist?(lobsters_logo)"
          ],
          "unit": 187,
          "line": 4,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "ActiveRecord::RecordNotFound raised"
          ],
          "unit": 187,
          "line": 4,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 187,
          "via": "Story.where(short_id: short_id).first!",
          "through": [],
          "line": 6
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        334,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /stories/url/all",
      "kind": "rest",
      "method": "GET",
      "path": "/stories/url/all",
      "framework": "rails",
      "units": [
        188
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 188,
          "line": 9,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 335,
          "via": "Story.where(normalized_url: Utils.normalize(url)).where(\"is_deleted = ? OR is_moderated = ?\", false, true).order(id: :desc)",
          "through": [
            "Story.find_similar_by_url"
          ],
          "line": 465
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        288
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /stories/url/latest",
      "kind": "rest",
      "method": "GET",
      "path": "/stories/url/latest",
      "framework": "rails",
      "units": [
        189
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "similar_stories().any?"
          ],
          "unit": 189,
          "line": 19,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!similar_stories().any?",
            "@user"
          ],
          "unit": 189,
          "line": 21,
          "wrapper": null
        },
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!similar_stories().any?",
            "!(@user)"
          ],
          "unit": 189,
          "line": 23,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 189,
          "via": "similar_stories.any?",
          "through": [],
          "line": 18
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 189,
          "via": "similar_stories.first",
          "through": [],
          "line": 19
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        288
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /stories/{story_id}/suggestions",
      "kind": "rest",
      "method": "POST",
      "path": "/stories/:story_id/suggestions",
      "framework": "rails",
      "units": [
        190
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 190,
          "line": 23,
          "wrapper": "find_story!"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.can_have_suggestions_from_user?(@user))"
          ],
          "unit": 190,
          "line": 11,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.can_have_suggestions_from_user?(@user)",
            "@story.valid?"
          ],
          "unit": 190,
          "line": 61,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.can_have_suggestions_from_user?(@user)",
            "!(@story.valid?)"
          ],
          "unit": 190,
          "line": 63,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 190,
          "via": "Tag.where(tag: params[:story][:tags])",
          "through": [],
          "line": 15
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 190,
          "via": "Tag.where(tag: params[:story][:tags]).reject { |t| !t.can_be_applied_by?(story_user) }.map { |s| s.tag }",
          "through": [],
          "line": 48
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 190,
          "via": "@story.tags.map(&:tag)",
          "through": [],
          "line": 52
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 190,
          "via": "@story.reload",
          "through": [],
          "line": 58
        },
        {
          "boundary": 39,
          "relations": [
            "writes"
          ],
          "unit": 314,
          "via": "suggested_taggings.where(user_id: user.id).delete_all",
          "through": [
            "@story.save_suggested_tags_for_user!"
          ],
          "line": 902
        },
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 315,
          "via": "suggested_titles.find_by(user_id: user.id)",
          "through": [
            "@story.save_suggested_title_for_user!"
          ],
          "line": 945
        },
        {
          "boundary": 40,
          "relations": [
            "writes"
          ],
          "unit": 315,
          "via": "st.save!",
          "through": [
            "@story.save_suggested_title_for_user!"
          ],
          "line": 951
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        190,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /stories/{story_id}/suggestions/new",
      "kind": "rest",
      "method": "GET",
      "path": "/stories/:story_id/suggestions/new",
      "framework": "rails",
      "units": [
        191
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story)"
          ],
          "unit": 191,
          "line": 23,
          "wrapper": "find_story!"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 191,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@story.can_have_suggestions_from_user?(@user))"
          ],
          "unit": 191,
          "line": 71,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.can_have_suggestions_from_user?(@user)"
          ],
          "unit": 191,
          "line": 67,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.can_have_suggestions_from_user?(@user)",
            "tt = @story.suggested_titles.where(user_id: @user.id).first"
          ],
          "unit": 191,
          "line": 67,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@story.can_have_suggestions_from_user?(@user)",
            "!(tt = @story.suggested_titles.where(user_id: @user.id).first)"
          ],
          "unit": 191,
          "line": 67,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 39,
          "relations": [
            "reads"
          ],
          "unit": 191,
          "via": "@story.suggested_taggings.where(user_id: @user.id)",
          "through": [],
          "line": 74
        },
        {
          "boundary": 39,
          "relations": [
            "reads"
          ],
          "unit": 191,
          "via": "suggested_tags.map(&:tag)",
          "through": [],
          "line": 75
        },
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 191,
          "via": "@story.suggested_titles.where(user_id: @user.id).first",
          "through": [],
          "line": 77
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 336,
          "via": "tags.each { |t| return false if t.privileged? }",
          "through": [
            "@story.can_have_suggestions_from_user?"
          ],
          "line": 619
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [
            "find_story"
          ],
          "line": 5
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [
            "find_story"
          ],
          "line": 10
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /tags",
      "kind": "rest",
      "method": "GET",
      "path": "/tags",
      "framework": "rails",
      "units": [
        192
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 192,
          "line": 15,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 192,
          "line": 16,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 192,
          "via": "Category.order(category: :asc).includes(:tags)",
          "through": [],
          "line": 9
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 192,
          "via": "Tag.all.preload(:category)",
          "through": [],
          "line": 10
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        192,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /tags.json",
      "kind": "rest",
      "method": "GET",
      "path": "/tags.json",
      "framework": "rails",
      "units": [
        193
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 193,
          "line": 15,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 193,
          "line": 16,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 193,
          "via": "Category.order(category: :asc).includes(:tags)",
          "through": [],
          "line": 9
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 193,
          "via": "Tag.all.preload(:category)",
          "through": [],
          "line": 10
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [
            "authenticate_user"
          ],
          "line": 17
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        193,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /~{username}",
      "kind": "rest",
      "method": "GET",
      "path": "/~:username",
      "framework": "rails",
      "units": [
        194
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@showing_user == null"
          ],
          "unit": 194,
          "line": 181,
          "wrapper": "load_showing_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@showing_user != null",
            "params.username !== @showing_user.username"
          ],
          "unit": 194,
          "line": 187,
          "wrapper": "load_showing_user"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.html"
          ],
          "unit": 194,
          "line": 37,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "format.json"
          ],
          "unit": 194,
          "line": 39,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 194,
          "via": "User.find_by(username: params[:username])",
          "through": [],
          "line": 175
        },
        {
          "boundary": 28,
          "relations": [
            "reads"
          ],
          "unit": 194,
          "via": "ModActivity.user(@showing_user).order(created_at: :desc).limit(20)",
          "through": [],
          "line": 22
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /users",
      "kind": "rest",
      "method": "GET",
      "path": "/users",
      "framework": "rails",
      "units": [
        195
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:by].to_s === \"karma\""
          ],
          "unit": 195,
          "line": 56,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:by].to_s === \"karma\")",
            "params.moderators"
          ],
          "unit": 195,
          "line": 65,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:by].to_s === \"karma\")",
            "!params.moderators"
          ],
          "unit": 195,
          "line": 71,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 195,
          "via": "User.last",
          "through": [],
          "line": 45
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 195,
          "via": "User.select(*attrs).order(karma: :desc, id: :asc).to_a",
          "through": [],
          "line": 52
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 195,
          "via": "User.select(*attrs).where(is_admin: true).or(User.where(is_moderator: true)).order(id: :asc).to_a",
          "through": [],
          "line": 58
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 195,
          "via": "User.where(is_moderator: true)",
          "through": [],
          "line": 60
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 195,
          "via": "User.select(*attrs).order(id: :desc).to_a",
          "through": [],
          "line": 67
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 195,
          "via": "User.select(*attrs).order(id: :desc).limit(10)",
          "through": [],
          "line": 70
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /moderators",
      "kind": "rest",
      "method": "GET",
      "path": "/moderators",
      "framework": "rails",
      "units": [
        196
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "params[:by].to_s === \"karma\""
          ],
          "unit": 196,
          "line": 56,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:by].to_s === \"karma\")",
            "params.moderators"
          ],
          "unit": 196,
          "line": 65,
          "wrapper": null
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params[:by].to_s === \"karma\")",
            "!params.moderators"
          ],
          "unit": 196,
          "line": 71,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 196,
          "via": "User.last",
          "through": [],
          "line": 45
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 196,
          "via": "User.select(*attrs).order(karma: :desc, id: :asc).to_a",
          "through": [],
          "line": 52
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 196,
          "via": "User.select(*attrs).where(is_admin: true).or(User.where(is_moderator: true)).order(id: :asc).to_a",
          "through": [],
          "line": 58
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 196,
          "via": "User.where(is_moderator: true)",
          "through": [],
          "line": 60
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 196,
          "via": "User.select(*attrs).order(id: :desc).to_a",
          "through": [],
          "line": 67
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 196,
          "via": "User.select(*attrs).order(id: :desc).limit(10)",
          "through": [],
          "line": 70
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /~{username}/disable_invitation",
      "kind": "rest",
      "method": "POST",
      "path": "/~:username/disable_invitation",
      "framework": "rails",
      "units": [
        197
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 197,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!target"
          ],
          "unit": 197,
          "line": 79,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "target"
          ],
          "unit": 197,
          "line": 84,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 197,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": 76
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 337,
          "via": "msg.save!",
          "through": [
            "target.disable_invite_by_user_for_reason!"
          ],
          "line": 281
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 337,
          "via": "m.save!",
          "through": [
            "target.disable_invite_by_user_for_reason!"
          ],
          "line": 288
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /~{username}/enable_invitation",
      "kind": "rest",
      "method": "POST",
      "path": "/~:username/enable_invitation",
      "framework": "rails",
      "units": [
        198
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 198,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!target"
          ],
          "unit": 198,
          "line": 92,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "target"
          ],
          "unit": 198,
          "line": 97,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 198,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": 89
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 338,
          "via": "m.save!",
          "through": [
            "target.enable_invite_by_user!"
          ],
          "line": 619
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "target.enable_invite_by_user!",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /~{username}/ban",
      "kind": "rest",
      "method": "POST",
      "path": "/~:username/ban",
      "framework": "rails",
      "units": [
        199
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 199,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!buser"
          ],
          "unit": 199,
          "line": 105,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "buser",
            "params[:reason].blank?"
          ],
          "unit": 199,
          "line": 110,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "buser",
            "!(params[:reason].blank?)"
          ],
          "unit": 199,
          "line": 116,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 199,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": 102
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 339,
          "via": "m.save!",
          "through": [
            "buser.ban_by_user_for_reason!"
          ],
          "line": 308
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 291,
          "via": "comments.where(\"score < 0\").find_each { |c| c.delete_for_user(self) }",
          "through": [
            "buser.ban_by_user_for_reason!",
            "delete!"
          ],
          "line": 414
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 291,
          "via": "sent_messages.update_all(deleted_by_author: true)",
          "through": [
            "buser.ban_by_user_for_reason!",
            "delete!"
          ],
          "line": 420
        },
        {
          "boundary": 7,
          "relations": [
            "writes"
          ],
          "unit": 291,
          "via": "wearable_hats.where(modlog_use: true).update_all(doffed_at: Time.current)",
          "through": [
            "buser.ban_by_user_for_reason!",
            "delete!"
          ],
          "line": 424
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 292,
          "via": "stories.where(created_at: 30.days.ago..).where(is_deleted: true, is_moderated: true).count",
          "through": [
            "buser.ban_by_user_for_reason!",
            "delete!",
            "good_riddance?"
          ],
          "line": 447
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204,
        291
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "POST /~{username}/unban",
      "kind": "rest",
      "method": "POST",
      "path": "/~:username/unban",
      "framework": "rails",
      "units": [
        200
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@user",
            "!(@user.is_admin?)"
          ],
          "unit": 200,
          "line": 59,
          "wrapper": "require_logged_in_admin"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!buser"
          ],
          "unit": 200,
          "line": 123,
          "wrapper": null
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "buser"
          ],
          "unit": 200,
          "line": 129,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 200,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": 120
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 340,
          "via": "m.save!",
          "through": [
            "buser.unban_by_user!"
          ],
          "line": 603
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "buser.unban_by_user!",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    },
    {
      "key": "GET /~{username}/standing",
      "kind": "rest",
      "method": "GET",
      "path": "/~:username/standing",
      "framework": "rails",
      "units": [
        201
      ],
      "specs": [],
      "outcomes": [
        {
          "status": 404,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@showing_user == null"
          ],
          "unit": 201,
          "line": 181,
          "wrapper": "load_showing_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "@showing_user != null",
            "params.username !== @showing_user.username"
          ],
          "unit": 201,
          "line": 187,
          "wrapper": "load_showing_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(@user)"
          ],
          "unit": 201,
          "line": 47,
          "wrapper": "require_logged_in_user"
        },
        {
          "status": 302,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [
            "!(params.username === @user.username || @user.is_moderator?)"
          ],
          "unit": 201,
          "line": 196,
          "wrapper": "only_user_or_moderator"
        },
        {
          "status": 200,
          "output": "response",
          "exception": null,
          "returns": null,
          "conditions": [],
          "unit": 201,
          "line": 132,
          "wrapper": null
        }
      ],
      "reach": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 201,
          "via": "User.find_by(username: params[:username])",
          "through": [],
          "line": 175
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [
            "CommentVoteHydrator.new",
            "Vote.comment_vote_summaries"
          ],
          "line": 64
        },
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [
            "set_traffic_style",
            "TrafficHelper.cached_current_intensity",
            "Keystore.value_for"
          ],
          "line": 22
        }
      ],
      "callers": [],
      "findings": [],
      "unfollowed": [
        257,
        271,
        233,
        204
      ],
      "unread": false,
      "shape": null,
      "specStatuses": []
    }
  ],
  "tables": [
    {
      "boundary": 0,
      "writers": [
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 28,
          "via": "@user&.touch(:last_read_newest_comment)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 29,
          "via": "@user&.touch(:last_read_newest_comment)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 56,
          "via": "@user&.touch(:last_read_newest_story)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 57,
          "via": "@user&.touch(:last_read_newest_story)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 89,
          "via": "@reset_user.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 90,
          "via": "@reset_user.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 125,
          "via": "@reparent_user.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 146,
          "via": "@user.update(user_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 147,
          "via": "@edit_user.update(user_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 152,
          "via": "@user.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 154,
          "via": "@user.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 157,
          "via": "@user.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 158,
          "via": "@user.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 160,
          "via": "@user.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 161,
          "via": "@user.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 165,
          "via": "@new_user.save",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 202,
          "via": "User.find_by(session_token: session[:u].to_s)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 5,
          "via": "User.where(username: username).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 353,
          "via": "User.where(rss_token: params[:token].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 32,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 33,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 34,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 58,
          "via": "User.find_by!(username: params[:user])",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 86,
          "via": "User.where(email: params[:email]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 88,
          "via": "User.where(\"email = ? OR username = ?\", params[:email], params[:email]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 89,
          "via": "User.where(password_reset_token: params[:password_reset_token].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 90,
          "via": "User.where(password_reset_token: params[:password_reset_token].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "User.where(username: params.dig(\"mod_mail\", \"recipient_usernames\")&.split(\" \"))",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 354,
          "via": "User.find_by! username: params[:id]",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 125,
          "via": "User.last",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 139,
          "via": "User.moderators.map(&:username)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 140,
          "via": "User.moderators.map(&:username)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 355,
          "via": "User.find_by(username: params[:username])",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 194,
          "via": "User.find_by(username: params[:username])",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 195,
          "via": "User.last",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 196,
          "via": "User.last",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 197,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 198,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 199,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 200,
          "via": "User.where(username: params[:username]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 201,
          "via": "User.find_by(username: params[:username])",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 356,
          "via": "User.active.where(\"settings LIKE '%mastodon_username:%'\").select { |u| u.mastodon_username.present? }.map { |u| \"#{u.mastodon_username}@#{u.mastodon_instance}\" }",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 357,
          "via": "User.where(session_token: session[:twofa_u]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 358,
          "via": "User.active.joins(:comments).where(\"comments.created_at >= ?\", period).group(\"comments.user_id\").select(\" users.id, users.username, (sum(flags) - #{avg_sum_flags})/#{stddev_sum_flags} as sigma, count(distinct if(flags > 0, comments.id, null)) as n_comments, count(distinct if(flags > 0, story_id, null)) as n_stories, sum(flags) as n_flags, sum(flags)/count(distinct comments.id) as average_flags, ( count(distinct if(flags > 0, comments.id, null)) * 100.0 / count(distinct comments.id) ) as percent_flagged\").having(\"n_comments > 4 and n_stories > 1 and n_flags >= 10 and percent_flagged > 10\").order(sigma: :desc).limit(30)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 359,
          "via": "User.find_by!(username: \"inactive-user\")",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 218,
          "via": "User.active.where(username: to_notify)",
          "through": [],
          "line": null
        },
        {
          "boundary": 0,
          "relations": [
            "reads"
          ],
          "unit": 360,
          "via": "User.find_by!(username: \"System\")",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 3,
      "writers": [
        {
          "boundary": 3,
          "relations": [
            "writes"
          ],
          "unit": 9,
          "via": "Category.create!(category_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 3,
          "relations": [
            "writes"
          ],
          "unit": 11,
          "via": "category.update(category_params)",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 10,
          "via": "Category.where(category: params[:category_name]).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 11,
          "via": "Category.where(category: params[:category_name]).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 35,
          "via": "Category.includes(:tags).where(tags: {active: true}).order([categories: {category: :asc}, tags: {tag: :asc}])",
          "through": [],
          "line": null
        },
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 63,
          "via": "Category.where(category: category_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 192,
          "via": "Category.order(category: :asc).includes(:tags)",
          "through": [],
          "line": null
        },
        {
          "boundary": 3,
          "relations": [
            "reads"
          ],
          "unit": 193,
          "via": "Category.order(category: :asc).includes(:tags)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 6,
      "writers": [
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 12,
          "via": "@comment.story.touch(:last_comment_at)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 127,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 128,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 129,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 130,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 167,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 168,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 169,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 175,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 176,
          "via": "@story.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "writes"
          ],
          "unit": 177,
          "via": "@story.save",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 12,
          "via": "Story.where(short_id: params[:story_id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 15,
          "via": "Story.joins(\"join stories as s2 on stories.id = coalesce(s2.merged_story_id, s2.id) join comments on comments.story_id = s2.id\").where(comments: {short_id: params[:id]}).select(:short_id, :title).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 16,
          "via": "Story.joins(\"join stories as s2 on stories.id = coalesce(s2.merged_story_id, s2.id) join comments on comments.story_id = s2.id\").where(comments: {short_id: params[:id]}).select(:short_id, :title).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 17,
          "via": "Story.joins(\"join stories as s2 on stories.id = coalesce(s2.merged_story_id, s2.id) join comments on comments.story_id = s2.id\").where(comments: {short_id: params[:id]}).select(:short_id, :title).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 109,
          "via": "Story.base(@user).unmerged.includes(:user, :tags).where(\"flags > 1\").order(\"stories.id DESC\")",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Story.where(short_id: params.dig(\"mod_mail\", \"story_reference_short_ids\")&.split(\" \"))",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 361,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 168,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 169,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 170,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 173,
          "via": "Story.where(short_id: params[:id]).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 174,
          "via": "Story.where(short_id: params[:id]).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 175,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 176,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 177,
          "via": "Story.where(short_id: params[:story_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 187,
          "via": "Story.where(short_id: short_id).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 189,
          "via": "similar_stories.any?",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 190,
          "via": "@story.reload",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 362,
          "via": "Story.unmerged.not_deleted(nil).select(:id, :short_id, :title).find_in_batches(batch_size: 100, order: :desc) do |batch| jobs = batch.map { |story| CachePageJob.new(Routes.title_path(story)).set(queue: :refill_story_pages) } ActiveJob.perform_all_later(jobs) end",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 240,
          "via": "where(is_deleted: false).or(where(user: user))",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 268,
          "via": "stories.find_each do |story| story.update_column(:origin_id, story.domain.find_or_create_origin(story.url)&.id) end",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Story.find_by(short_id: params[:story_id] || params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 297,
          "via": "similar_stories.any?",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 306,
          "via": "similar_stories.first",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 363,
          "via": "Story.where(merged_story_id: story.id).pluck(:id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 335,
          "via": "Story.where(normalized_url: Utils.normalize(url)).where(\"is_deleted = ? OR is_moderated = ?\", false, true).order(id: :desc)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 235,
          "via": "stories.count",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "merged_stories.map(&:score)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 224,
          "via": "Story.where.not(user: user, user_is_author: true)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 292,
          "via": "stories.where(created_at: 30.days.ago..).where(is_deleted: true, is_moderated: true).count",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 364,
          "via": "Story.none",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 332,
          "via": "Story.where('\"story\".\"id\" = ?', id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 365,
          "via": "Story.where(short_id: sid).pick(:id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 366,
          "via": "joins(:hidings).merge(HiddenStory.by(user))",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 367,
          "via": "where.not( HiddenStory.select(\"TRUE\").where(Arel.sql(\"hidden_stories.story_id = stories.id\")).by(user).arel.exists )",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 368,
          "via": "joins(:savings).merge(SavedStory.by(user))",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 369,
          "via": "joins(\"join story_texts_fts idx on stories.id = idx.rowid\").where(\"story_texts_fts match ?\", query)",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 286,
          "via": "Story.where(url: value.to_s).or(Story.where(normalized_url: Utils.normalize(value)))",
          "through": [],
          "line": null
        },
        {
          "boundary": 6,
          "relations": [
            "reads"
          ],
          "unit": 285,
          "via": "Story.where(url: value.to_s).or(Story.where(normalized_url: Utils.normalize(value)))",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 7,
      "writers": [
        {
          "boundary": 7,
          "relations": [
            "writes"
          ],
          "unit": 47,
          "via": "replaced_hat.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "writes"
          ],
          "unit": 241,
          "via": "h.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "writes"
          ],
          "unit": 291,
          "via": "wearable_hats.where(modlog_use: true).update_all(doffed_at: Time.current)",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 12,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 23,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 24,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 244,
          "via": "Hat.find_by(short_id: params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 42,
          "via": "Hat.active.includes(:user).find_each do |h| @hat_groups[h.hat] ||= [] @hat_groups[h.hat].push h end",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 95,
          "via": "@user.wearable_hats.find_by(short_id: params[:message][:hat_id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 370,
          "via": "joins(:user).where(doffed_at: nil).merge(User.active)",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 300,
          "via": "@user.wearable_hats.find_by(short_id: params[:hat_id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 7,
          "relations": [
            "reads"
          ],
          "unit": 310,
          "via": "Hat.where(user_id: user.id, modlog_use: true).any? do |hat| check_at.between?(hat.created_at, hat.doffed_at || current_time) end",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 8,
      "writers": [
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 12,
          "via": "@comment.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 23,
          "via": "@comment.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 24,
          "via": "@comment.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "writes"
          ],
          "unit": 167,
          "via": "@comment.save",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 12,
          "via": "Comment.find_by(story_id: story.id, short_id: params[:parent_comment_short_id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 15,
          "via": "Comment.find(params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 16,
          "via": "Comment.find(params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 17,
          "via": "Comment.find(params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 28,
          "via": "Comment.accessible_to_user(@user).not_on_story_hidden_by(@user).filter_tags(filtered_tags.map(&:id)).order(id: :desc).includes(:user, :hat, story: :user).joins(:story).where.not(stories: {is_deleted: true}).limit(COMMENTS_PER_PAGE).offset((@page - 1) * COMMENTS_PER_PAGE)",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 29,
          "via": "Comment.accessible_to_user(@user).not_on_story_hidden_by(@user).filter_tags(filtered_tags.map(&:id)).order(id: :desc).includes(:user, :hat, story: :user).joins(:story).where.not(stories: {is_deleted: true}).limit(COMMENTS_PER_PAGE).offset((@page - 1) * COMMENTS_PER_PAGE)",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 30,
          "via": "Comment.accessible_to_user(@user).where.not(user_id: @user.id).order(id: :desc).includes(:user, :hat, story: :user).joins(:votes).where(votes: {user_id: @user.id, vote: 1}).joins(:story).where.not(stories: {is_deleted: true})",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 31,
          "via": "Comment.accessible_to_user(@user).where.not(user_id: @user.id).order(id: :desc).includes(:user, :hat, story: :user).joins(:votes).where(votes: {user_id: @user.id, vote: 1}).joins(:story).where.not(stories: {is_deleted: true})",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 32,
          "via": "Comment.recent_threads(@showing_user).merge(Story.not_deleted(@user)).for_presentation.joins(:story).load",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 33,
          "via": "Comment.recent_threads(@showing_user).merge(Story.not_deleted(@user)).for_presentation.joins(:story).load",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 34,
          "via": "Comment.where(user: @showing_user).merge(Story.not_deleted(@user)).for_presentation.joins(:story)",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 110,
          "via": "Comment.eager_load(:user, :hat, story: :user, votes: :user).where(\"comments.flags >= 2\").where(\"(select count(*) from votes where votes.comment_id = comments.id and vote < 0 and votes.reason != 'M') > 2\") # Me-Too comments rarely need attention.order(\"comments.id DESC\")",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 276,
          "via": "Comment.where(short_id: params.dig(\"mod_mail\", \"comment_reference_short_ids\")&.split(\" \"))",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 173,
          "via": "Comment.where(story_id: [@story.id] + @story.merged_stories.pluck(:id)).where(id: @user.notifications.read.of_comments)",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 174,
          "via": "Comment.where(story_id: [@story.id] + @story.merged_stories.pluck(:id)).where(id: @user.notifications.read.of_comments)",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 211,
          "via": "parent_comment.parents.ids",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Comment.where(short_id: params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 231,
          "via": "Comment.none",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 265,
          "via": "Comment.find_by(short_id: params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 291,
          "via": "comments.where(\"score < 0\").find_each { |c| c.delete_for_user(self) }",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 363,
          "via": "Comment.none",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 371,
          "via": "joins(:story).joins(\"left outer join comment_stats on date(comments.created_at) = comment_stats.date\").where(\"comments.score > coalesce(comment_stats.`average`, 3)\")",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 224,
          "via": "joins(:story).merge(Story.where.not(user: user, user_is_author: true))",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 222,
          "via": "joins(:story).where( Story.arel_table[:id].not_in( Tagging.where(tag_id: tags).select(:story_id).arel ) )",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 372,
          "via": "joins(:story).where( Story.arel_table[:id].not_in( Tagging.joins(tag: :tag_filters).where(tag_filters: {user_id: user}).select(:story_id).arel ) )",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 223,
          "via": "where.not( HiddenStory.select(\"TRUE\").where(Arel.sql(\"hidden_stories.story_id = stories.id\")).by(user).arel.exists )",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 373,
          "via": "joins(\"join comments_fts idx on comments.id = idx.rowid\").where(\"comments_fts match ?\", query)",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 292,
          "via": "comments.where(created_at: 30.days.ago..).where(is_deleted: true).count",
          "through": [],
          "line": null
        },
        {
          "boundary": 8,
          "relations": [
            "reads"
          ],
          "unit": 332,
          "via": "Comment.none",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 14,
      "writers": [],
      "readers": [
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 35,
          "via": "Tagging.group(:tag_id).count",
          "through": [],
          "line": null
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 254,
          "via": "Tagging.joins(:tag).where(\"story_id = stories.id\").where(tag: {category_id: categories})",
          "through": [],
          "line": null
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 255,
          "via": "Tagging.where(\"story_id = stories.id\").where(tag_id: tags)",
          "through": [],
          "line": null
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 374,
          "via": "Tagging.where(tag: tag).select(:story_id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 222,
          "via": "Tagging.where(tag_id: tags).select(:story_id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 372,
          "via": "Tagging.joins(tag: :tag_filters).where(tag_filters: {user_id: user}).select(:story_id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 375,
          "via": "Tagging.where(tag_id: tags).select(:story_id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 14,
          "relations": [
            "reads"
          ],
          "unit": 376,
          "via": "Tagging.joins(tag: :tag_filters).where(tag_filters: {user_id: user}).select(:story_id)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 18,
      "writers": [],
      "readers": [
        {
          "boundary": 18,
          "relations": [
            "reads"
          ],
          "unit": 35,
          "via": "TagFilter.group(:tag_id).count",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 12,
      "writers": [
        {
          "boundary": 12,
          "relations": [
            "writes"
          ],
          "unit": 132,
          "via": "Tag.create(tag_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "writes"
          ],
          "unit": 134,
          "via": "tag.update(tag_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "writes"
          ],
          "unit": 135,
          "via": "tag.update(tag_params)",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 36,
          "via": "Tag.active.where(tag: (params[:tags] || {}).keys).to_a",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 64,
          "via": "Tag.find_by!(tag: params[:tag])",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 65,
          "via": "Tag.find_by!(tag: params[:tag])",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 66,
          "via": "Tag.where(tag: tag_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 67,
          "via": "Tag.where(tag: tag_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 133,
          "via": "Tag.where(tag: params[:id]).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 134,
          "via": "Tag.where(tag: params[:id]).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 135,
          "via": "Tag.where(tag: params[:id]).first!",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 190,
          "via": "Tag.where(tag: params[:story][:tags])",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 192,
          "via": "Tag.all.preload(:category)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 193,
          "via": "Tag.all.preload(:category)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 282,
          "via": "@story.tags.to_a",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 301,
          "via": "@story.tags.to_a",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 308,
          "via": "tags.map(&:tag)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 336,
          "via": "tags.each { |t| return false if t.privileged? }",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 315,
          "via": "tags.to_a",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 314,
          "via": "Tag.active.where(tag: new_tag_names_a.uniq.compact_blank).map { |t| {user: user, story: self, tag: t} }",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 324,
          "via": "Tag.where(tag: \"meta\").ids",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 216,
          "via": "tags.map(&:tag)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 227,
          "via": "tags.sum(:hotness_mod)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 377,
          "via": "Tag.where(tag: ps[:tags] || @story.tags.map(&:tag))",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 378,
          "via": "Tag.where(tag: ps[:tags] || @story.tags.map(&:tag), active: true)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 319,
          "via": "tags.select { |t| t.permit_by_new_users == false }",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 379,
          "via": "tags.map(&:tag)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 286,
          "via": "Tag.none.select(:id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 285,
          "via": "Tag.none.select(:id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 380,
          "via": "story.tags.map(&:tag)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 381,
          "via": "story.tags.map(&:tag)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 382,
          "via": "story.tags.map(&:tag)",
          "through": [],
          "line": null
        },
        {
          "boundary": 12,
          "relations": [
            "reads"
          ],
          "unit": 383,
          "via": "story.tags.map(&:tag)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 19,
      "writers": [
        {
          "boundary": 19,
          "relations": [
            "writes"
          ],
          "unit": 38,
          "via": "@hat_request.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 19,
          "relations": [
            "writes"
          ],
          "unit": 40,
          "via": "@hat_request.update!(params.require(:hat_request).permit(:hat, :link, :reason).except(:reason))",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 19,
          "relations": [
            "reads"
          ],
          "unit": 39,
          "via": "HatRequest.all.includes(:user)",
          "through": [],
          "line": null
        },
        {
          "boundary": 19,
          "relations": [
            "reads"
          ],
          "unit": 40,
          "via": "HatRequest.find(params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 19,
          "relations": [
            "reads"
          ],
          "unit": 41,
          "via": "HatRequest.find(params[:id])",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 4,
      "writers": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 46,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 89,
          "via": "Moderation.create!( moderator: nil, user: @reset_user, action: \"reactivated\" )",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 90,
          "via": "Moderation.create!( moderator: nil, user: @reset_user, action: \"reactivated\" )",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 125,
          "via": "Moderation.create!({ moderator: @user, user: @reparent_user, action: \"Reparented user to be invited by #{@user.username}\", reason: params[:reason] })",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 145,
          "via": "Moderation.create!( moderator: nil, user: @user, action: \"deactivated#{\", disowning their stories and comments\" if disown}\" )",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 209,
          "via": "Moderation.create do |m| m.action = if id_previously_changed? \"Created new category \" + attributes.map { |f, c| \"with #{f} '#{c}'\" }.join(\", \") else \"Updating category #{category}, \" + saved_changes.map { |f, c| \"changed #{f} from '#{c[0]}' to '#{c[1]}'\" }.join(\", \") end m.moderator_user_id = @edit_user_id m.category_id = id end",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 212,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 234,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 242,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 221,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 266,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 384,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 277,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 385,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 284,
          "via": "Moderation.create do |m| m.action = if id_previously_changed? \"Created new tag \" + attributes.map { |f, c| \"with #{f} '#{c}'\" }.join(\", \") else \"Updating tag #{tag}, \" + saved_changes.map { |f, c| \"changed #{f} from '#{c[0]}' to '#{c[1]}'\" }.join(\", \") end m.moderator_user_id = @edit_user_id m.tag_id = id end",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 293,
          "via": "Moderation.create!({ is_from_suggestions: true, moderator_user_id: nil, user: user, action: \"changed own username from \\\"#{from}\\\" to \\\"#{to}\\\"\", reason: reason, created_at: at })",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 337,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 338,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 339,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 340,
          "via": "m.save!",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 139,
          "via": "Moderation.all.eager_load(:moderator, :story, {comment: [:story, :user]}, :tag, :user, :domain, :origin, :category)",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 140,
          "via": "Moderation.all.eager_load(:moderator, :story, {comment: [:story, :user]}, :tag, :user, :domain, :origin, :category)",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 173,
          "via": "Moderation.where(story: @story, comment: nil).where(\"action LIKE '%deleted story%'\").order(id: :desc).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 4,
          "relations": [
            "reads"
          ],
          "unit": 174,
          "via": "Moderation.where(story: @story, comment: nil).where(\"action LIKE '%deleted story%'\").order(id: :desc).first",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 21,
      "writers": [
        {
          "boundary": 21,
          "relations": [
            "writes"
          ],
          "unit": 105,
          "via": "@domain.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "writes"
          ],
          "unit": 107,
          "via": "@domain.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "writes"
          ],
          "unit": 108,
          "via": "@domain.save",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 68,
          "via": "Domain.find_by!(domain: params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 69,
          "via": "Domain.find_by!(domain: params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 267,
          "via": "Domain.find_or_initialize_by(domain: params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 269,
          "via": "Domain.find_or_initialize_by(domain: params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 121,
          "via": "Domain.where(domain: @origin.identifier.split(\"/\").first)",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 141,
          "via": "Domain.find_by!(domain: params[:id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 21,
          "relations": [
            "reads"
          ],
          "unit": 316,
          "via": "Domain.where(domain: domain_name)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 22,
      "writers": [
        {
          "boundary": 22,
          "relations": [
            "writes"
          ],
          "unit": 318,
          "via": "origins.find_or_create_by(identifier: identifier)",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 70,
          "via": "Origin.find_by!(identifier: params[:identifier])",
          "through": [],
          "line": null
        },
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 278,
          "via": "Origin.find_or_initialize_by identifier: params[:identifier]",
          "through": [],
          "line": null
        },
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 279,
          "via": "Origin.find_or_initialize_by identifier: params[:identifier]",
          "through": [],
          "line": null
        },
        {
          "boundary": 22,
          "relations": [
            "reads"
          ],
          "unit": 141,
          "via": "@domain.origins.order(identifier: :asc)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 23,
      "writers": [
        {
          "boundary": 23,
          "relations": [
            "writes"
          ],
          "unit": 96,
          "via": "@message.notification&.touch(:read_at)",
          "through": [],
          "line": null
        },
        {
          "boundary": 23,
          "relations": [
            "writes"
          ],
          "unit": 99,
          "via": "@message.notification&.update(read_at: nil)",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 23,
          "relations": [
            "reads"
          ],
          "unit": 75,
          "via": "@user.notifications.offset((@page - 1) * notifications_per_page).limit(notifications_per_page).order(created_at: :desc).preload(user: [:hidings, :votes], notifiable: {story: [:tags, :user], user: [:comments], author: [], parent_comment: []})",
          "through": [],
          "line": null
        },
        {
          "boundary": 23,
          "relations": [
            "reads"
          ],
          "unit": 76,
          "via": "@user.notifications.where(read_at: nil).order(created_at: :desc).preload(user: [:hidings, :votes], notifiable: {story: [:tags, :user], user: [:comments], author: [], parent_comment: []})",
          "through": [],
          "line": null
        },
        {
          "boundary": 23,
          "relations": [
            "reads"
          ],
          "unit": 259,
          "via": "notifications.where(read_at: nil).count",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 24,
      "writers": [
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 79,
          "via": "ir.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 81,
          "via": "@invitation_request.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 82,
          "via": "ir.destroy!",
          "through": [],
          "line": null
        },
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 83,
          "via": "ir.destroy!",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 78,
          "via": "InvitationRequest.where(is_verified: true)",
          "through": [],
          "line": null
        },
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 79,
          "via": "InvitationRequest.where(code: params[:code].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 82,
          "via": "InvitationRequest.where(code: params[:code].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 83,
          "via": "InvitationRequest.where(code: params[:code].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 24,
          "relations": [
            "reads"
          ],
          "unit": 261,
          "via": "InvitationRequest.exists?(code: code)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 25,
      "writers": [
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 80,
          "via": "i.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 82,
          "via": "i.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 165,
          "via": "@invitation&.update!(used_at: Time.current, new_user: @new_user)",
          "through": [],
          "line": null
        },
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 296,
          "via": "invitation.update!(used_at: Time.current, new_user: nil)",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 164,
          "via": "Invitation.unused.where(code: params[:invitation_code].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 165,
          "via": "Invitation.unused.where(code: params[:invitation_code].to_s).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 260,
          "via": "Invitation.exists?(code: code)",
          "through": [],
          "line": null
        },
        {
          "boundary": 25,
          "relations": [
            "reads"
          ],
          "unit": 296,
          "via": "Invitation.find_by(code: invitation_code)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 5,
      "writers": [
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 95,
          "via": "@new_message.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 97,
          "via": "@message.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 98,
          "via": "message.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 241,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 243,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 291,
          "via": "sent_messages.update_all(deleted_by_author: true)",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 337,
          "via": "msg.save!",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 386,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 93,
          "via": "Message.inbox(@user).load",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 94,
          "via": "Message.outbox(@user).load",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 95,
          "via": "Message.inbox(@user).load",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 96,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 97,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 98,
          "via": "Message.where(short_id: m[1]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 99,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 100,
          "via": "Message.where(short_id: params[:message_id] || params[:id]).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 387,
          "via": "where( recipient: user, deleted_by_recipient: false ).preload(:author, :hat, :notification, :recipient).order(id: :asc)",
          "through": [],
          "line": null
        },
        {
          "boundary": 5,
          "relations": [
            "reads"
          ],
          "unit": 388,
          "via": "where( author: user, deleted_by_author: false ).preload(:author, :hat, :notification, :recipient).order(id: :asc)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 28,
      "writers": [],
      "readers": [
        {
          "boundary": 28,
          "relations": [
            "reads"
          ],
          "unit": 101,
          "via": "ModActivity.with_item.where(\"mod_activities.created_at >= ?\", 3.months.ago).order(created_at: :desc)",
          "through": [],
          "line": null
        },
        {
          "boundary": 28,
          "relations": [
            "reads"
          ],
          "unit": 194,
          "via": "ModActivity.user(@showing_user).order(created_at: :desc).limit(20)",
          "through": [],
          "line": null
        },
        {
          "boundary": 28,
          "relations": [
            "reads"
          ],
          "unit": 389,
          "via": "joins(\"left outer join moderations on (item_type = 'Moderation' and item_id = moderations.id)\").joins(\"left outer join mod_notes on (item_type = 'ModNote' and item_id = mod_notes.id)\").joins(\"left outer join mod_mails on (item_type = 'ModMail' and item_id = mod_mails.id)\").includes(:item)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 29,
      "writers": [
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 112,
          "via": "@mod_mail_message.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 136,
          "via": "@mod_mail_message.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "mail.mod_mail_messages.create! user: User.system_user, message: message",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 29,
          "relations": [
            "reads"
          ],
          "unit": 114,
          "via": "@mod_mail.mod_mail_messages.order(:created_at)",
          "through": [],
          "line": null
        },
        {
          "boundary": 29,
          "relations": [
            "reads"
          ],
          "unit": 138,
          "via": "@mod_mail.mod_mail_messages.order(:created_at)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 33,
      "writers": [
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 117,
          "via": "@mod_mail.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 118,
          "via": "@mod_mail.update(mod_mail_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 119,
          "via": "@mod_mail.update(mod_mail_params)",
          "through": [],
          "line": null
        },
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "ModMail.create! recipients: [user, inviter], subject: \"New user story submission\"",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 275,
          "via": "ModMail.find_by(short_id: params.expect(:id))",
          "through": [],
          "line": null
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 113,
          "via": "ModMail.all",
          "through": [],
          "line": null
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 136,
          "via": "@user.mod_mails.find(params[:mod_mail_message][:mod_mail_id])",
          "through": [],
          "line": null
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 137,
          "via": "@user.mod_mails.order(updated_at: :desc)",
          "through": [],
          "line": null
        },
        {
          "boundary": 33,
          "relations": [
            "reads"
          ],
          "unit": 138,
          "via": "@user.mod_mails.find_by!(short_id: params.expect(:id))",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 17,
      "writers": [
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 120,
          "via": "@mod_note.save",
          "through": [],
          "line": null
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 262,
          "via": "ModNote.create!( moderator: moderator, user: user, created_at: message.created_at, note: <<~NOTE *#{message.author ? message.author.username : \"(System)\"} #{message.hat&.to_txt}-> #{message.recipient.username}*: #{message.subject} #{message.body} NOTE )",
          "through": [],
          "line": null
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [],
          "line": null
        }
      ],
      "readers": []
    },
    {
      "boundary": 10,
      "writers": [
        {
          "boundary": 10,
          "relations": [
            "writes"
          ],
          "unit": 214,
          "via": "Vote.create! story: story, comment: self, user: user, vote: 1",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 126,
          "via": "@story.votes.count",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 211,
          "via": "Vote.comments_flags(parent_comment_ids).count",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 220,
          "via": "Vote.where(user_id: @user.id, story_id: comment.story_id, comment_id: comment.id).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 390,
          "via": "where( user_id: user_id, comment_id: comment_ids ).select(:comment_id, :vote, :reason)",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 239,
          "via": "Vote.joins(:user).select(\"comment_id, reason, count(1) as count, group_concat(username, ', ') as usernames\").where(comment_id: comment_ids).where.not(reason: \"\").group(:comment_id, :reason)",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 305,
          "via": "Vote.where(user_id: user_id, story_id: story_id, comment_id: comment_id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 221,
          "via": "votes.count",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 280,
          "via": "Vote.find_by( user: @user, story: story.id, comment: nil )",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 309,
          "via": "Vote.find_by(user: @user, story: @story, comment: nil)",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 391,
          "via": "q.where(user: user)",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 392,
          "via": "Vote.where(user: user, vote: -1, comment: parent_comment).exists?",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 333,
          "via": "votes.each do |v| next if v.vote == 0 r_counts[v.reason.to_s] ||= 0 r_counts[v.reason.to_s] += 1 if user&.is_moderator? r_whos[v.reason.to_s] ||= [] r_whos[v.reason.to_s].push v.user.username end end",
          "through": [],
          "line": null
        },
        {
          "boundary": 10,
          "relations": [
            "reads"
          ],
          "unit": 246,
          "via": "Vote.where(user_id: user, story_id: stories, comment_id: nil).find_each do |v| votes[v.story_id] = {vote: v.vote, reason: v.reason} end",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 34,
      "writers": [],
      "readers": [
        {
          "boundary": 34,
          "relations": [
            "reads"
          ],
          "unit": 158,
          "via": "MastodonApp.find_by(name: @user.mastodon_instance)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 20,
      "writers": [
        {
          "boundary": 20,
          "relations": [
            "writes"
          ],
          "unit": 184,
          "via": "SavedStory.where(user_id: @user.id, story_id: story.id).delete_all",
          "through": [],
          "line": null
        },
        {
          "boundary": 20,
          "relations": [
            "writes"
          ],
          "unit": 330,
          "via": "SavedStory.where(user_id: user_id, story_id: story_id).first_or_initialize.save!",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 313,
          "via": "SavedStory.exists?(user_id: user.id, story_id: id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 20,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "SavedStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 39,
      "writers": [
        {
          "boundary": 39,
          "relations": [
            "writes"
          ],
          "unit": 314,
          "via": "suggested_taggings.where(user_id: user.id).delete_all",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 39,
          "relations": [
            "reads"
          ],
          "unit": 191,
          "via": "@story.suggested_taggings.where(user_id: @user.id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 39,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_taggings.any?",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 40,
      "writers": [
        {
          "boundary": 40,
          "relations": [
            "writes"
          ],
          "unit": 315,
          "via": "st.save!",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 191,
          "via": "@story.suggested_titles.where(user_id: @user.id).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 315,
          "via": "suggested_titles.find_by(user_id: user.id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 40,
          "relations": [
            "reads"
          ],
          "unit": 311,
          "via": "suggested_titles.any?",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 16,
      "writers": [
        {
          "boundary": 16,
          "relations": [
            "writes"
          ],
          "unit": 293,
          "via": "old_username.save!",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 16,
          "relations": [
            "reads"
          ],
          "unit": 293,
          "via": "Username.where(user_id: user.id).order(created_at: :desc).limit(1).first",
          "through": [],
          "line": null
        },
        {
          "boundary": 16,
          "relations": [
            "reads"
          ],
          "unit": 226,
          "via": "Username.where(\"created_at < ? and (? < renamed_away_at or renamed_away_at is null)\", as_of, as_of).where(\"LOWER(username) = ?\", user[1..].downcase).exists?",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 13,
      "writers": [
        {
          "boundary": 13,
          "relations": [
            "writes"
          ],
          "unit": 326,
          "via": "HiddenStory.where(story: story, user: user).first_or_initialize.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 13,
          "relations": [
            "writes"
          ],
          "unit": 328,
          "via": "HiddenStory.where(story: story, user: user).delete_all",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 223,
          "via": "HiddenStory.select(\"TRUE\").where(Arel.sql(\"hidden_stories.story_id = stories.id\"))",
          "through": [],
          "line": null
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 312,
          "via": "HiddenStory.exists?(user_id: user.id, story_id: id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 367,
          "via": "HiddenStory.select(\"TRUE\").where(Arel.sql(\"hidden_stories.story_id = stories.id\"))",
          "through": [],
          "line": null
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 217,
          "via": "HiddenStory.where(story: comment.story).pluck(:user_id)",
          "through": [],
          "line": null
        },
        {
          "boundary": 13,
          "relations": [
            "reads"
          ],
          "unit": 245,
          "via": "HiddenStory.where(user_id: @user.id, story_id: scope.map(&:id)).map(&:story_id)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 15,
      "writers": [
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 225,
          "via": "Link.where(from_comment_id: c.id).delete_all",
          "through": [],
          "line": null
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 15,
          "relations": [
            "reads"
          ],
          "unit": 331,
          "via": "joins(:from_comment).includes(:from_comment).where(from_comment: {created_at: (7.days.ago)..}).where(normalized_url: Utils.normalize(url))",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 1,
      "writers": [
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 236,
          "via": "Keystore.upsert({key: key, value: value}, returning: false)",
          "through": [],
          "line": null
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [],
          "line": null
        }
      ],
      "readers": [
        {
          "boundary": 1,
          "relations": [
            "reads"
          ],
          "unit": 203,
          "via": "where(key: key).pick(:value)",
          "through": [],
          "line": null
        }
      ]
    },
    {
      "boundary": 41,
      "writers": [
        {
          "boundary": 41,
          "relations": [
            "writes"
          ],
          "unit": 327,
          "via": "ribbon.save!",
          "through": [],
          "line": null
        },
        {
          "boundary": 41,
          "relations": [
            "writes"
          ],
          "unit": 329,
          "via": "ribbon.save!",
          "through": [],
          "line": null
        }
      ],
      "readers": []
    }
  ],
  "envReads": [
    {
      "boundary": 42,
      "unit": 344,
      "defaulted": false
    },
    {
      "boundary": 43,
      "unit": 344,
      "defaulted": true,
      "value": "info"
    },
    {
      "boundary": 44,
      "unit": 345,
      "defaulted": false
    },
    {
      "boundary": 43,
      "unit": 345,
      "defaulted": true,
      "value": "warn"
    },
    {
      "boundary": 45,
      "unit": 346,
      "defaulted": true,
      "value": "127.0.0.1"
    },
    {
      "boundary": 46,
      "unit": 346,
      "defaulted": true,
      "value": 25
    },
    {
      "boundary": 47,
      "unit": 346,
      "defaulted": false
    },
    {
      "boundary": 48,
      "unit": 346,
      "defaulted": true
    },
    {
      "boundary": 49,
      "unit": 346,
      "defaulted": true
    },
    {
      "boundary": 50,
      "unit": 347,
      "defaulted": false
    },
    {
      "boundary": 51,
      "unit": 347,
      "defaulted": false
    },
    {
      "boundary": 52,
      "unit": 348,
      "defaulted": true,
      "value": "unknown"
    },
    {
      "boundary": 53,
      "unit": 349,
      "defaulted": true
    },
    {
      "boundary": 54,
      "unit": 349,
      "defaulted": true
    },
    {
      "boundary": 53,
      "unit": 349,
      "defaulted": false
    },
    {
      "boundary": 55,
      "unit": 349,
      "defaulted": true
    },
    {
      "boundary": 56,
      "unit": 349,
      "defaulted": true
    },
    {
      "boundary": 57,
      "unit": 349,
      "defaulted": true
    },
    {
      "boundary": 58,
      "unit": 350,
      "defaulted": false
    },
    {
      "boundary": 59,
      "unit": 351,
      "defaulted": true
    },
    {
      "boundary": 60,
      "unit": 352,
      "defaulted": true,
      "value": 1
    }
  ],
  "operations": [],
  "clients": [
    {
      "unit": 341,
      "method": "GET",
      "path": null,
      "entries": []
    },
    {
      "unit": 342,
      "method": "GET",
      "path": null,
      "entries": []
    },
    {
      "unit": 343,
      "method": "GET",
      "path": "/comments/{commentId}",
      "entries": [
        13
      ]
    }
  ],
  "pages": [],
  "findings": [
    {
      "kind": "unhandledProviderCase",
      "severity": "warning",
      "description": "Provider produces status 404 but no consumer branch handles it",
      "entry": 13,
      "provider": {
        "unit": 13,
        "line": 72
      },
      "consumer": {
        "unit": 343,
        "line": null
      }
    }
  ],
  "graphqlTypes": [],
  "coverage": {
    "functions": 676,
    "withUnfollowed": 102,
    "unfollowedCalls": 161,
    "topUnfollowed": [
      {
        "callee": "filtered_tags.map",
        "count": 17,
        "unit": 28
      },
      {
        "callee": "filtered_tags.index_by",
        "count": 3,
        "unit": 35
      },
      {
        "callee": "@search.results.map",
        "count": 2,
        "unit": 142
      },
      {
        "callee": "app.errors.full_messages.join",
        "count": 2,
        "unit": 156
      },
      {
        "callee": "comment_query .limit(COMMENTS_PER_PAGE).offset",
        "count": 2,
        "unit": 30
      }
    ],
    "entriesAffected": 200,
    "withUnreadOutcome": 4,
    "unitsPerRead": [
      661,
      15
    ]
  },
  "check": {
    "pairs": 15,
    "byKind": [
      {
        "kind": "unhandledProviderCase",
        "severity": "warning",
        "count": 1
      }
    ]
  },
  "cards": [
    {
      "kind": "finding",
      "entries": [
        13
      ],
      "total": 1,
      "finding": 0
    },
    {
      "kind": "mostTablesWritten",
      "entries": [
        171
      ],
      "total": 10,
      "touches": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 39,
          "relations": [
            "writes"
          ],
          "unit": 314,
          "via": "suggested_taggings.where(user_id: user.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_tags_for_user!"
          ],
          "line": 902
        },
        {
          "boundary": 40,
          "relations": [
            "writes"
          ],
          "unit": 315,
          "via": "st.save!",
          "through": [
            "@story.as_json",
            "send, which may run save_suggested_title_for_user!"
          ],
          "line": 951
        },
        {
          "boundary": 33,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "ModMail.create! recipients: [user, inviter], subject: \"New user story submission\"",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 41
        },
        {
          "boundary": 29,
          "relations": [
            "writes"
          ],
          "unit": 317,
          "via": "mail.mod_mail_messages.create! user: User.system_user, message: message",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModMail.create_inviter_discussion!"
          ],
          "line": 42
        },
        {
          "boundary": 5,
          "relations": [
            "writes"
          ],
          "unit": 210,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation",
            "send_message_to_moderated"
          ],
          "line": 125
        },
        {
          "boundary": 15,
          "relations": [
            "writes"
          ],
          "unit": 283,
          "via": "Link.where(from_story_id: s.id).delete_all",
          "through": [
            "@story.as_json",
            "send, which may run recreate_links",
            "Link.recreate_from_story!"
          ],
          "line": 68
        },
        {
          "boundary": 22,
          "relations": [
            "writes"
          ],
          "unit": 318,
          "via": "origins.find_or_create_by(identifier: identifier)",
          "through": [
            "@story.as_json",
            "send, which may run set_domain_and_origin",
            "domain.find_or_create_origin"
          ],
          "line": 78
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "@story.as_json",
            "send, which may run check_not_brigading",
            "ModNote.tattle_on_brigading!",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 1,
          "relations": [
            "writes"
          ],
          "unit": 215,
          "via": "Keystore.upsert({key: key, value: amount}, on_duplicate: Arel.sql(\"value = value + 1\"))",
          "through": [
            "@story.as_json",
            "send, which may run mark_submitter",
            "Keystore.increment_value_for",
            "incremented_value_for"
          ],
          "line": 38
        }
      ]
    },
    {
      "kind": "getWrites",
      "entries": [
        14,
        19,
        28,
        29,
        56,
        57,
        77,
        87,
        94,
        152,
        155,
        158,
        162,
        171,
        172
      ],
      "total": 15,
      "touches": [
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 221,
          "via": "m.save!",
          "through": [
            "comment.as_json",
            "send, which may run delete_by_moderator"
          ],
          "line": 317
        },
        {
          "boundary": 17,
          "relations": [
            "writes"
          ],
          "unit": 232,
          "via": "ModNote.create!(attrs)",
          "through": [
            "ModNote.tattle_on_max_depth_limit",
            "create_without_dupe!"
          ],
          "line": 199
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 28,
          "via": "@user&.touch(:last_read_newest_comment)",
          "through": [],
          "line": 323
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 29,
          "via": "@user&.touch(:last_read_newest_comment)",
          "through": [],
          "line": 323
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 56,
          "via": "@user&.touch(:last_read_newest_story)",
          "through": [],
          "line": 100
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 57,
          "via": "@user&.touch(:last_read_newest_story)",
          "through": [],
          "line": 100
        },
        {
          "boundary": 24,
          "relations": [
            "writes"
          ],
          "unit": 79,
          "via": "ir.save!",
          "through": [],
          "line": 35
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 89,
          "via": "@reset_user.save",
          "through": [],
          "line": 172
        },
        {
          "boundary": 23,
          "relations": [
            "writes"
          ],
          "unit": 96,
          "via": "@message.notification&.touch(:read_at)",
          "through": [],
          "line": 88
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 154,
          "via": "@user.save!",
          "through": [],
          "line": 186
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 157,
          "via": "@user.save!",
          "through": [],
          "line": 224
        },
        {
          "boundary": 0,
          "relations": [
            "writes"
          ],
          "unit": 160,
          "via": "@user.save!",
          "through": [],
          "line": 268
        },
        {
          "boundary": 25,
          "relations": [
            "writes"
          ],
          "unit": 296,
          "via": "invitation.update!(used_at: Time.current, new_user: nil)",
          "through": [
            "ModNote.tattle_on_invited"
          ],
          "line": 112
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation"
          ],
          "line": 846
        },
        {
          "boundary": 4,
          "relations": [
            "writes"
          ],
          "unit": 281,
          "via": "m.save!",
          "through": [
            "@story.as_json",
            "send, which may run log_moderation"
          ],
          "line": 846
        }
      ]
    },
    {
      "kind": "mostWrittenTable",
      "entries": [
        9,
        11,
        12,
        14,
        21,
        23,
        24,
        40,
        41,
        46,
        47,
        87,
        88,
        93,
        95,
        96,
        100,
        101,
        102,
        119,
        120,
        123,
        125,
        126,
        127,
        128,
        130,
        132,
        133,
        143,
        145,
        165,
        166,
        167,
        171,
        172,
        173,
        174,
        175,
        183,
        195,
        196,
        197,
        198
      ],
      "total": 44,
      "boundary": 5,
      "places": [
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 210,
            "via": "m.save!",
            "through": [
              "log_modifications",
              "send_message_to_moderated"
            ],
            "line": 125
          },
          "entries": 36
        },
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 291,
            "via": "sent_messages.update_all(deleted_by_author: true)",
            "through": [
              "@user.delete!"
            ],
            "line": 420
          },
          "entries": 2
        },
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 241,
            "via": "m.save!",
            "through": [
              "@hat_request.approve_by_user_for_reason!"
            ],
            "line": 28
          },
          "entries": 1
        },
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 243,
            "via": "m.save!",
            "through": [
              "@hat_request.reject_by_user_for_reason!"
            ],
            "line": 41
          },
          "entries": 1
        },
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 95,
            "via": "@new_message.save",
            "through": [],
            "line": 59
          },
          "entries": 1
        },
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 97,
            "via": "@message.save!",
            "through": [],
            "line": 102
          },
          "entries": 1
        },
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 98,
            "via": "message.save!",
            "through": [],
            "line": 130
          },
          "entries": 1
        },
        {
          "touch": {
            "boundary": 5,
            "relations": [
              "writes"
            ],
            "unit": 337,
            "via": "msg.save!",
            "through": [
              "target.disable_invite_by_user_for_reason!"
            ],
            "line": 281
          },
          "entries": 1
        }
      ]
    },
    {
      "kind": "sharedEarlyReturn",
      "entries": [
        4,
        30,
        31,
        37,
        38,
        39,
        40,
        41,
        43,
        44,
        45,
        46,
        47,
        50,
        51,
        61,
        62,
        70,
        71,
        72,
        73,
        74,
        76,
        78,
        80,
        81,
        91,
        92,
        93,
        94,
        95,
        96,
        97,
        98,
        134,
        135,
        136,
        142,
        143,
        144,
        145,
        146,
        147,
        148,
        149,
        150,
        151,
        152,
        153,
        154,
        155,
        156,
        157,
        158,
        159,
        161,
        165,
        166,
        167,
        168,
        169,
        189,
        199
      ],
      "total": 63,
      "outcome": {
        "wrapper": "require_logged_in_user",
        "status": 302,
        "condition": "!(@user)"
      }
    }
  ]
}
