{"action":"created","comment":{"url":"https://api.github.com/repos/osmlab/atlas-checks/pulls/comments/232437796","pull_request_review_id":173645951,"id":232437796,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMjQzNzc5Ng==","diff_hunk":"@@ -191,4 +117,93 @@ public boolean validCheckForObject(final AtlasObject object)\n     {\n         return FALLBACK_INSTRUCTIONS;\n     }\n+\n+    /**\n+     * Validates given {@link AtlasObject} (assumed to be an {@link Edge}) whether it is a valid\n+     * crossing edge or not\n+     *\n+     * @param object\n+     *            {@link AtlasObject} to test\n+     * @return {@code true} if given {@link AtlasObject} object is a valid crossing edge\n+     */\n+    private boolean isValidCrossingEdge(final AtlasObject object)\n+    {\n+        if (Edge.isMasterEdgeIdentifier(object.getIdentifier())\n+                && !TagPredicates.IS_AREA.test(object) && !this.isFlagged(object.getIdentifier()))\n+        {\n+            final Optional<HighwayTag> highway = HighwayTag.highwayTag(object);\n+            if (highway.isPresent())\n+            {\n+                final HighwayTag highwayTag = highway.get();\n+                return HighwayTag.isCarNavigableHighway(highwayTag)\n+                        && !HighwayTag.CROSSING.equals(highwayTag)\n+                        && highwayTag.isMoreImportantThanOrEqualTo(this.minimumHighwayType);\n+            }\n+        }\n+        return false;\n+    }\n+\n+    /**\n+     * A BFS walker that collects all connected invalid crossings. The use of the walker prevents\n+     * edges from being flagged mor than once.\n+     *\n+     * @param startingEdge\n+     *            {@link Edge} to start the walker from.\n+     * @return a {@lionk Set} of invalid crossing {@link Edge}s\n+     */\n+    private Set<Edge> getInvalidCrossingEdges(final Edge startingEdge)\n+    {\n+        final Set<Edge> invalidEdges = new HashSet<>();\n+        final Queue<Edge> toCheck = new ArrayDeque<>();\n+        invalidEdges.add(startingEdge);\n+        toCheck.add(startingEdge);\n+\n+        while (!toCheck.isEmpty())","path":"src/main/java/org/openstreetmap/atlas/checks/validation/intersections/EdgeCrossingEdgeCheck.java","position":228,"original_position":228,"commit_id":"e06c33319a5b7b4308e2d4baae40cc7fe49f4ae4","original_commit_id":"e06c33319a5b7b4308e2d4baae40cc7fe49f4ae4","user":{"login":"jklamer","id":9659948,"node_id":"MDQ6VXNlcjk2NTk5NDg=","avatar_url":"https://avatars1.githubusercontent.com/u/9659948?v=4","gravatar_id":"","url":"https://api.github.com/users/jklamer","html_url":"https://github.com/jklamer","followers_url":"https://api.github.com/users/jklamer/followers","following_url":"https://api.github.com/users/jklamer/following{/other_user}","gists_url":"https://api.github.com/users/jklamer/gists{/gist_id}","starred_url":"https://api.github.com/users/jklamer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jklamer/subscriptions","organizations_url":"https://api.github.com/users/jklamer/orgs","repos_url":"https://api.github.com/users/jklamer/repos","events_url":"https://api.github.com/users/jklamer/events{/privacy}","received_events_url":"https://api.github.com/users/jklamer/received_events","type":"User","site_admin":false},"body":"so the idea here is mark whole networks of overlapping edges together right? Do you think this would be possible using some type of (Edge Walker)[https://github.com/osmlab/atlas/blob/dev/src/main/java/org/openstreetmap/atlas/geography/atlas/walker/EdgeWalker.java] implementation? I would prefer that to a custom walking solution ","created_at":"2018-11-10T02:15:17Z","updated_at":"2018-11-10T02:15:17Z","html_url":"https://github.com/osmlab/atlas-checks/pull/93#discussion_r232437796","pull_request_url":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/osmlab/atlas-checks/pulls/comments/232437796"},"html":{"href":"https://github.com/osmlab/atlas-checks/pull/93#discussion_r232437796"},"pull_request":{"href":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93"}}},"pull_request":{"url":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93","id":227334838,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI3MzM0ODM4","html_url":"https://github.com/osmlab/atlas-checks/pull/93","diff_url":"https://github.com/osmlab/atlas-checks/pull/93.diff","patch_url":"https://github.com/osmlab/atlas-checks/pull/93.patch","issue_url":"https://api.github.com/repos/osmlab/atlas-checks/issues/93","number":93,"state":"open","locked":false,"title":"EdgeCrossingEdgeCheck Bug Fix & Enhancements","user":{"login":"Bentleysb","id":24948563,"node_id":"MDQ6VXNlcjI0OTQ4NTYz","avatar_url":"https://avatars0.githubusercontent.com/u/24948563?v=4","gravatar_id":"","url":"https://api.github.com/users/Bentleysb","html_url":"https://github.com/Bentleysb","followers_url":"https://api.github.com/users/Bentleysb/followers","following_url":"https://api.github.com/users/Bentleysb/following{/other_user}","gists_url":"https://api.github.com/users/Bentleysb/gists{/gist_id}","starred_url":"https://api.github.com/users/Bentleysb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Bentleysb/subscriptions","organizations_url":"https://api.github.com/users/Bentleysb/orgs","repos_url":"https://api.github.com/users/Bentleysb/repos","events_url":"https://api.github.com/users/Bentleysb/events{/privacy}","received_events_url":"https://api.github.com/users/Bentleysb/received_events","type":"User","site_admin":false},"body":"### Description:\r\n\r\nThis fixes a bug created by a change of a `LayerTag` method (see https://github.com/osmlab/atlas-checks/issues/77). The check was dependent on the default value the previous method granted. This default has been re-added, though it now takes into account the difference between a bad and non-existent layer tag. This bug should have been caught by the unit tests, but were missed due to a lack of car navigable highway tags. Unit test have been updated to address this.\r\n\r\nThis PR also includes a change to eliminate redundant flags and a new filter for highway classifications. The new filter was added to eliminate false positives from lower classification roads that can commonly cross. The redundant flags were caused by the check looking at the crossings of a single Edge and then having one of the crossing Edges have another crossing of its own that was found later. This situation was eliminated by using a BFS walker to find all connected invalid crossings. \r\n\r\n### Potential Impact:\r\n\r\nRemove a large number of false positives.\r\n\r\n### Unit Test Approach:\r\n\r\nUnit tests were updated so that all edges have car navigable highway tags. This prevents them from being filtered out in validCheckForObject.\r\nSome unit tests had their expected flag object count changed to reflect the new redundant flag elimination logic. \r\n\r\n### Test Results:\r\n\r\nTesting showed false positive rates dropped back to expected levels after the `LayerTag` method fix. Continued testing showed another minor drop after implementing the de-duplication enhancement, but only due to flags being combined. \r\n\r\n","created_at":"2018-10-31T15:35:11Z","updated_at":"2018-11-10T02:15:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d9fd96b8b2254501450d488d81454a0888b656d2","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93/commits","review_comments_url":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93/comments","review_comment_url":"https://api.github.com/repos/osmlab/atlas-checks/pulls/comments{/number}","comments_url":"https://api.github.com/repos/osmlab/atlas-checks/issues/93/comments","statuses_url":"https://api.github.com/repos/osmlab/atlas-checks/statuses/e06c33319a5b7b4308e2d4baae40cc7fe49f4ae4","head":{"label":"Bentleysb:dev-EdgeCrossingEdge","ref":"dev-EdgeCrossingEdge","sha":"e06c33319a5b7b4308e2d4baae40cc7fe49f4ae4","user":{"login":"Bentleysb","id":24948563,"node_id":"MDQ6VXNlcjI0OTQ4NTYz","avatar_url":"https://avatars0.githubusercontent.com/u/24948563?v=4","gravatar_id":"","url":"https://api.github.com/users/Bentleysb","html_url":"https://github.com/Bentleysb","followers_url":"https://api.github.com/users/Bentleysb/followers","following_url":"https://api.github.com/users/Bentleysb/following{/other_user}","gists_url":"https://api.github.com/users/Bentleysb/gists{/gist_id}","starred_url":"https://api.github.com/users/Bentleysb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Bentleysb/subscriptions","organizations_url":"https://api.github.com/users/Bentleysb/orgs","repos_url":"https://api.github.com/users/Bentleysb/repos","events_url":"https://api.github.com/users/Bentleysb/events{/privacy}","received_events_url":"https://api.github.com/users/Bentleysb/received_events","type":"User","site_admin":false},"repo":{"id":132798041,"node_id":"MDEwOlJlcG9zaXRvcnkxMzI3OTgwNDE=","name":"atlas-checks","full_name":"Bentleysb/atlas-checks","private":false,"owner":{"login":"Bentleysb","id":24948563,"node_id":"MDQ6VXNlcjI0OTQ4NTYz","avatar_url":"https://avatars0.githubusercontent.com/u/24948563?v=4","gravatar_id":"","url":"https://api.github.com/users/Bentleysb","html_url":"https://github.com/Bentleysb","followers_url":"https://api.github.com/users/Bentleysb/followers","following_url":"https://api.github.com/users/Bentleysb/following{/other_user}","gists_url":"https://api.github.com/users/Bentleysb/gists{/gist_id}","starred_url":"https://api.github.com/users/Bentleysb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Bentleysb/subscriptions","organizations_url":"https://api.github.com/users/Bentleysb/orgs","repos_url":"https://api.github.com/users/Bentleysb/repos","events_url":"https://api.github.com/users/Bentleysb/events{/privacy}","received_events_url":"https://api.github.com/users/Bentleysb/received_events","type":"User","site_admin":false},"html_url":"https://github.com/Bentleysb/atlas-checks","description":"OSM data integrity checks with Atlas","fork":true,"url":"https://api.github.com/repos/Bentleysb/atlas-checks","forks_url":"https://api.github.com/repos/Bentleysb/atlas-checks/forks","keys_url":"https://api.github.com/repos/Bentleysb/atlas-checks/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Bentleysb/atlas-checks/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Bentleysb/atlas-checks/teams","hooks_url":"https://api.github.com/repos/Bentleysb/atlas-checks/hooks","issue_events_url":"https://api.github.com/repos/Bentleysb/atlas-checks/issues/events{/number}","events_url":"https://api.github.com/repos/Bentleysb/atlas-checks/events","assignees_url":"https://api.github.com/repos/Bentleysb/atlas-checks/assignees{/user}","branches_url":"https://api.github.com/repos/Bentleysb/atlas-checks/branches{/branch}","tags_url":"https://api.github.com/repos/Bentleysb/atlas-checks/tags","blobs_url":"https://api.github.com/repos/Bentleysb/atlas-checks/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Bentleysb/atlas-checks/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Bentleysb/atlas-checks/git/refs{/sha}","trees_url":"https://api.github.com/repos/Bentleysb/atlas-checks/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Bentleysb/atlas-checks/statuses/{sha}","languages_url":"https://api.github.com/repos/Bentleysb/atlas-checks/languages","stargazers_url":"https://api.github.com/repos/Bentleysb/atlas-checks/stargazers","contributors_url":"https://api.github.com/repos/Bentleysb/atlas-checks/contributors","subscribers_url":"https://api.github.com/repos/Bentleysb/atlas-checks/subscribers","subscription_url":"https://api.github.com/repos/Bentleysb/atlas-checks/subscription","commits_url":"https://api.github.com/repos/Bentleysb/atlas-checks/commits{/sha}","git_commits_url":"https://api.github.com/repos/Bentleysb/atlas-checks/git/commits{/sha}","comments_url":"https://api.github.com/repos/Bentleysb/atlas-checks/comments{/number}","issue_comment_url":"https://api.github.com/repos/Bentleysb/atlas-checks/issues/comments{/number}","contents_url":"https://api.github.com/repos/Bentleysb/atlas-checks/contents/{+path}","compare_url":"https://api.github.com/repos/Bentleysb/atlas-checks/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Bentleysb/atlas-checks/merges","archive_url":"https://api.github.com/repos/Bentleysb/atlas-checks/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Bentleysb/atlas-checks/downloads","issues_url":"https://api.github.com/repos/Bentleysb/atlas-checks/issues{/number}","pulls_url":"https://api.github.com/repos/Bentleysb/atlas-checks/pulls{/number}","milestones_url":"https://api.github.com/repos/Bentleysb/atlas-checks/milestones{/number}","notifications_url":"https://api.github.com/repos/Bentleysb/atlas-checks/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Bentleysb/atlas-checks/labels{/name}","releases_url":"https://api.github.com/repos/Bentleysb/atlas-checks/releases{/id}","deployments_url":"https://api.github.com/repos/Bentleysb/atlas-checks/deployments","created_at":"2018-05-09T18:31:15Z","updated_at":"2018-11-05T18:23:23Z","pushed_at":"2018-11-09T21:38:07Z","git_url":"git://github.com/Bentleysb/atlas-checks.git","ssh_url":"git@github.com:Bentleysb/atlas-checks.git","clone_url":"https://github.com/Bentleysb/atlas-checks.git","svn_url":"https://github.com/Bentleysb/atlas-checks","homepage":null,"size":13253,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"dev"}},"base":{"label":"osmlab:dev","ref":"dev","sha":"8b113d66151a9ece3770544ae134cfa8a34923fe","user":{"login":"osmlab","id":3856374,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4NTYzNzQ=","avatar_url":"https://avatars3.githubusercontent.com/u/3856374?v=4","gravatar_id":"","url":"https://api.github.com/users/osmlab","html_url":"https://github.com/osmlab","followers_url":"https://api.github.com/users/osmlab/followers","following_url":"https://api.github.com/users/osmlab/following{/other_user}","gists_url":"https://api.github.com/users/osmlab/gists{/gist_id}","starred_url":"https://api.github.com/users/osmlab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/osmlab/subscriptions","organizations_url":"https://api.github.com/users/osmlab/orgs","repos_url":"https://api.github.com/users/osmlab/repos","events_url":"https://api.github.com/users/osmlab/events{/privacy}","received_events_url":"https://api.github.com/users/osmlab/received_events","type":"Organization","site_admin":false},"repo":{"id":99742504,"node_id":"MDEwOlJlcG9zaXRvcnk5OTc0MjUwNA==","name":"atlas-checks","full_name":"osmlab/atlas-checks","private":false,"owner":{"login":"osmlab","id":3856374,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4NTYzNzQ=","avatar_url":"https://avatars3.githubusercontent.com/u/3856374?v=4","gravatar_id":"","url":"https://api.github.com/users/osmlab","html_url":"https://github.com/osmlab","followers_url":"https://api.github.com/users/osmlab/followers","following_url":"https://api.github.com/users/osmlab/following{/other_user}","gists_url":"https://api.github.com/users/osmlab/gists{/gist_id}","starred_url":"https://api.github.com/users/osmlab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/osmlab/subscriptions","organizations_url":"https://api.github.com/users/osmlab/orgs","repos_url":"https://api.github.com/users/osmlab/repos","events_url":"https://api.github.com/users/osmlab/events{/privacy}","received_events_url":"https://api.github.com/users/osmlab/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/osmlab/atlas-checks","description":"OSM data integrity checks with Atlas","fork":false,"url":"https://api.github.com/repos/osmlab/atlas-checks","forks_url":"https://api.github.com/repos/osmlab/atlas-checks/forks","keys_url":"https://api.github.com/repos/osmlab/atlas-checks/keys{/key_id}","collaborators_url":"https://api.github.com/repos/osmlab/atlas-checks/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/osmlab/atlas-checks/teams","hooks_url":"https://api.github.com/repos/osmlab/atlas-checks/hooks","issue_events_url":"https://api.github.com/repos/osmlab/atlas-checks/issues/events{/number}","events_url":"https://api.github.com/repos/osmlab/atlas-checks/events","assignees_url":"https://api.github.com/repos/osmlab/atlas-checks/assignees{/user}","branches_url":"https://api.github.com/repos/osmlab/atlas-checks/branches{/branch}","tags_url":"https://api.github.com/repos/osmlab/atlas-checks/tags","blobs_url":"https://api.github.com/repos/osmlab/atlas-checks/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/osmlab/atlas-checks/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/osmlab/atlas-checks/git/refs{/sha}","trees_url":"https://api.github.com/repos/osmlab/atlas-checks/git/trees{/sha}","statuses_url":"https://api.github.com/repos/osmlab/atlas-checks/statuses/{sha}","languages_url":"https://api.github.com/repos/osmlab/atlas-checks/languages","stargazers_url":"https://api.github.com/repos/osmlab/atlas-checks/stargazers","contributors_url":"https://api.github.com/repos/osmlab/atlas-checks/contributors","subscribers_url":"https://api.github.com/repos/osmlab/atlas-checks/subscribers","subscription_url":"https://api.github.com/repos/osmlab/atlas-checks/subscription","commits_url":"https://api.github.com/repos/osmlab/atlas-checks/commits{/sha}","git_commits_url":"https://api.github.com/repos/osmlab/atlas-checks/git/commits{/sha}","comments_url":"https://api.github.com/repos/osmlab/atlas-checks/comments{/number}","issue_comment_url":"https://api.github.com/repos/osmlab/atlas-checks/issues/comments{/number}","contents_url":"https://api.github.com/repos/osmlab/atlas-checks/contents/{+path}","compare_url":"https://api.github.com/repos/osmlab/atlas-checks/compare/{base}...{head}","merges_url":"https://api.github.com/repos/osmlab/atlas-checks/merges","archive_url":"https://api.github.com/repos/osmlab/atlas-checks/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/osmlab/atlas-checks/downloads","issues_url":"https://api.github.com/repos/osmlab/atlas-checks/issues{/number}","pulls_url":"https://api.github.com/repos/osmlab/atlas-checks/pulls{/number}","milestones_url":"https://api.github.com/repos/osmlab/atlas-checks/milestones{/number}","notifications_url":"https://api.github.com/repos/osmlab/atlas-checks/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/osmlab/atlas-checks/labels{/name}","releases_url":"https://api.github.com/repos/osmlab/atlas-checks/releases{/id}","deployments_url":"https://api.github.com/repos/osmlab/atlas-checks/deployments","created_at":"2017-08-08T22:46:46Z","updated_at":"2018-11-02T18:19:34Z","pushed_at":"2018-11-07T18:38:31Z","git_url":"git://github.com/osmlab/atlas-checks.git","ssh_url":"git@github.com:osmlab/atlas-checks.git","clone_url":"https://github.com/osmlab/atlas-checks.git","svn_url":"https://github.com/osmlab/atlas-checks","homepage":null,"size":12984,"stargazers_count":26,"watchers_count":26,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":21,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":21,"open_issues":4,"watchers":26,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93"},"html":{"href":"https://github.com/osmlab/atlas-checks/pull/93"},"issue":{"href":"https://api.github.com/repos/osmlab/atlas-checks/issues/93"},"comments":{"href":"https://api.github.com/repos/osmlab/atlas-checks/issues/93/comments"},"review_comments":{"href":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93/comments"},"review_comment":{"href":"https://api.github.com/repos/osmlab/atlas-checks/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/osmlab/atlas-checks/pulls/93/commits"},"statuses":{"href":"https://api.github.com/repos/osmlab/atlas-checks/statuses/e06c33319a5b7b4308e2d4baae40cc7fe49f4ae4"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jklamer"}}