{"action":"created","issue":{"url":"https://api.github.com/repos/emezeske/lein-cljsbuild/issues/266","labels_url":"https://api.github.com/repos/emezeske/lein-cljsbuild/issues/266/labels{/name}","comments_url":"https://api.github.com/repos/emezeske/lein-cljsbuild/issues/266/comments","events_url":"https://api.github.com/repos/emezeske/lein-cljsbuild/issues/266/events","html_url":"https://github.com/emezeske/lein-cljsbuild/issues/266","id":22265145,"number":266,"title":"Use SNAPSHOT plugin dependency to deliver up-to-date ClojureScript/cljsbuild compatibility info","user":{"login":"cemerick","id":47489,"avatar_url":"https://avatars.githubusercontent.com/u/47489?v=3","gravatar_id":"","url":"https://api.github.com/users/cemerick","html_url":"https://github.com/cemerick","followers_url":"https://api.github.com/users/cemerick/followers","following_url":"https://api.github.com/users/cemerick/following{/other_user}","gists_url":"https://api.github.com/users/cemerick/gists{/gist_id}","starred_url":"https://api.github.com/users/cemerick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cemerick/subscriptions","organizations_url":"https://api.github.com/users/cemerick/orgs","repos_url":"https://api.github.com/users/cemerick/repos","events_url":"https://api.github.com/users/cemerick/events{/privacy}","received_events_url":"https://api.github.com/users/cemerick/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/emezeske/lein-cljsbuild/labels/Upstream%20Issue","name":"Upstream Issue","color":"e102d8"}],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/emezeske/lein-cljsbuild/milestones/33","html_url":"https://github.com/emezeske/lein-cljsbuild/milestones/1.0.0-alpha2","labels_url":"https://api.github.com/repos/emezeske/lein-cljsbuild/milestones/33/labels","id":476057,"number":33,"title":"1.0.0-alpha2","description":"","creator":{"login":"cemerick","id":47489,"avatar_url":"https://avatars.githubusercontent.com/u/47489?v=3","gravatar_id":"","url":"https://api.github.com/users/cemerick","html_url":"https://github.com/cemerick","followers_url":"https://api.github.com/users/cemerick/followers","following_url":"https://api.github.com/users/cemerick/following{/other_user}","gists_url":"https://api.github.com/users/cemerick/gists{/gist_id}","starred_url":"https://api.github.com/users/cemerick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cemerick/subscriptions","organizations_url":"https://api.github.com/users/cemerick/orgs","repos_url":"https://api.github.com/users/cemerick/repos","events_url":"https://api.github.com/users/cemerick/events{/privacy}","received_events_url":"https://api.github.com/users/cemerick/received_events","type":"User","site_admin":false},"open_issues":0,"closed_issues":4,"state":"closed","created_at":"2013-11-06T10:18:41Z","updated_at":"2013-11-07T16:33:36Z","due_on":null,"closed_at":"2013-11-07T16:33:36Z"},"comments":19,"created_at":"2013-11-07T13:15:35Z","updated_at":"2016-01-08T01:56:40Z","closed_at":"2013-11-07T16:18:11Z","body":"ClojureScript, and specifically its compiler API, is very volatile, such that various versions of lein-cljsbuild are only compatible with certain ranges of ClojureScript builds.  However, because ClojureScript's release versioning isn't anything remotely semver, there's no way to determine (or even speculate about) compatibility based on its version number.  This means that a user has no way to know whether ClojureScript 0.0-XXXX will work correctly with lein-cljsbuild A.B.C short of trying the combination, and either looking for errors, or potentially discovering [incorrect compilation results](gh-253) long after changing dependencies.  This all means that, even if maven version ranges were acceptable within the Clojure community, lein-cljsbuild could not use them to declare upstream compatibility.\r\n\r\n(This is even worse than most other dependency conflicts / compatibility problems, since even the most hipster of libraries will bump the \"minor\" version number [in semver parlance] when breakage and/or major features are introduced.  Because the only information in the ClojureScript version string is a monotonically-increasing commit number, it's effectively just dumb luck when a particular ClojureScript release works properly with a lein-cljsbuild release that wasn't \"qualified\" against it.  Also, the ClojureScript dependency is utilized by both build-time components [like cljsbuild] and delivers runtime APIs, so users understandably want to upgrade it independent of cljsbuild releases to benefit from improvements in the latter without waiting for cljsbuild maintainers to act.)\r\n\r\nMy current idea is to use a plugin-side SNAPSHOT dependency to deliver compatibility information as it becomes available.  So, when a new rev of ClojureScript is released, and problems are discovered/reported when using it with various lein-cljsbuild releases, that compatibility info can be updated via a new SNAPSHOT deployment, capping the ClojureScript releases can can be used with potentially many lein-cljsbuild releases.\r\n\r\nThe big downside of this is that that SNAPSHOT will provoke dependency resolution on every lein-cljsbuild run, though lein/aether defaults should ensure that that results in an actual network check only every 24 hours.  lein-cljsbuild is a plugin, and so this SNAPSHOT will not affect users' projects' dependencies at all.\r\n\r\nIf this causes unforeseen problems, then rolling it back will be straightforward."},"comment":{"url":"https://api.github.com/repos/emezeske/lein-cljsbuild/issues/comments/169864606","html_url":"https://github.com/emezeske/lein-cljsbuild/issues/266#issuecomment-169864606","issue_url":"https://api.github.com/repos/emezeske/lein-cljsbuild/issues/266","id":169864606,"user":{"login":"cprice404","id":1341071,"avatar_url":"https://avatars.githubusercontent.com/u/1341071?v=3","gravatar_id":"","url":"https://api.github.com/users/cprice404","html_url":"https://github.com/cprice404","followers_url":"https://api.github.com/users/cprice404/followers","following_url":"https://api.github.com/users/cprice404/following{/other_user}","gists_url":"https://api.github.com/users/cprice404/gists{/gist_id}","starred_url":"https://api.github.com/users/cprice404/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cprice404/subscriptions","organizations_url":"https://api.github.com/users/cprice404/orgs","repos_url":"https://api.github.com/users/cprice404/repos","events_url":"https://api.github.com/users/cprice404/events{/privacy}","received_events_url":"https://api.github.com/users/cprice404/received_events","type":"User","site_admin":false},"created_at":"2016-01-08T01:56:40Z","updated_at":"2016-01-08T01:56:40Z","body":"oh nice thanks for the heads up"}}