Skip to main content

Command Palette

Search for a command to run...

Debugging Atlas Installs

Updated
18 min read

Atlas has become my goto for handling Nim dependencies. Though I’m biased as I helped get it up to speed. A large part of that work was refactoring how Atlas loads dependencies and their version information. It now loads every version of every possible dependencies enabling the SAT solver to solve for appropriate versions.

This approach spits out a lot of information however. Most of it is hidden, but even with default verbosity there’s a substantial amount of output. This isn’t quite as annoying as verbosity with Nimble since Atlas only needs to be run to add new dependencies or to do updates (often weeks pass between needing to run Atlas). Otherwise with Atlas you just run Nim.

Note: My personal preference has become to add a build or test task to my top level config.nims file. Then just run nim build or nim test and skipping tasks in the Nimble file.

Back to Atlas. Someone posted an issue getting a recent version of HappyX to install. That was an easily fixed bug due to #head being treated specially.

After fixing the bug Atlas still wasn’t selecting a recent version of HappyX and going back to version 2.6.1. This time however it’s due to issues in the dependencies. I figured it’d make a good tutorial writeup.

Lets take a look at the output on default verbosity:

$ atlas use happyx
... # logs full of downloading git repos; lets skip it
$ atlas install
[Notice] (atlas:project) Using project directory: /Volumes/projects/nims/test-proj
[Notice] (test_proj) expanding root package at: /Volumes/projects/nims/test-proj url: atlas:///Volumes/projects/nims/test-proj/test_proj.nimble
[Notice] (atlas:expand) Expanding packages for: test_proj
[Notice] (test_proj) Initializing packages: test_proj
[Notice] (test_proj) Processing packages: test_proj
[Warn]   (gitops) Running Git failed: 1 command: `git -C /Volumes/projects/nims/test-proj log -n1 --format=%H `
[Warn]   (gitops) Running Git failed: 1 command: `git -C /Volumes/projects/nims/test-proj log --format=%H origin/HEAD -n1`
[Warn]   (test-proj) could not find origin head at: /Volumes/projects/nims/test-proj
[Warn]   (test_proj) nimble file missing version information: #head@-
[Notice] (test_proj) Initializing packages: happyx
[Notice] (test_proj) Processing packages: happyx
[Notice] (test_proj) Initializing packages: checksums, cligen, illwill, regex, httpx, microasynchttpserver, httpbeast, nimja, websocket, websocketx, nimcrypto, oauth, nimpy, ws
[Notice] (test_proj) Processing packages: checksums, cligen, illwill, regex, httpx, microasynchttpserver, httpbeast, nimja, websocket, websocketx, nimcrypto, oauth, nimpy, ws
[Notice] (test_proj) Initializing packages: unicodedb, unicodeplus, ioselectors, picohttpparser, asynctools, asynctools.iffy.github.com, asynctools.timotheecour.github.com, sha1
[Notice] (test_proj) Processing packages: unicodedb, unicodeplus, ioselectors, picohttpparser, asynctools, asynctools.iffy.github.com, asynctools.timotheecour.github.com, sha1
[Notice] (test_proj) Initializing packages: segmentation, graphemes, wepoll, timerwheel
[Notice] (test_proj) Processing packages: segmentation, graphemes, wepoll, timerwheel
[Warn]   (gitops) Running Git failed: 128 command: `git -C /Volumes/projects/nims/test-proj/deps/asynctools.iffy.github.com rev-parse pr_fix_for_latest`
[Warn]   (gitops) Running Git failed: 128 command: `git -C /Volumes/projects/nims/test-proj/deps/asynctools.timotheecour.github.com rev-parse pr_fix_compilation`
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 2.9.1@87b5c209 were not able to be satisfied: cligen >= 1.6.14; illwill >= 0.3.1; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 2.9.2@7089cf54 were not able to be satisfied: cligen >= 1.6.14; illwill >= 0.3.1; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 2.9.7@bed3612d were not able to be satisfied: cligen >= 1.6.14; illwill >= 0.3.1; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 2.9.8@e7000a37 were not able to be satisfied: cligen >= 1.6.14; illwill >= 0.3.1; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 2.10.1@7c3c88d1 were not able to be satisfied: cligen >= 1.6.14; illwill >= 0.3.1; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 2.11.6@9722ab55 were not able to be satisfied: cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.0.0@6f8a3082 were not able to be satisfied: cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.1.0@31ae74c7 were not able to be satisfied: cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.3.0@d1180fc5 were not able to be satisfied: cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.5.2@e5f0dcd8 were not able to be satisfied: cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.8.0@52105ea1 were not able to be satisfied: cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.8.1@9a23df3a were not able to be satisfied: cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.9.0@3a6dc5d6 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.10.2@7f77fb84 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 3.11.0@79680368 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.0.0@acfdb62d were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.0.2@edd17842 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.2.1@f4ee8d19 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.3.0@451cc123 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.3.1@b225bae5 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.4.0@f41fa4ac were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.4.2@8895b6b0 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.5.0@5c0d3cb7 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.5.2@cfd717ec were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.6.0@200a174c were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.6.1@689e3e4a were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.6.2@06d12574 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.6.5@5476224f were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.7.0@8c0be200 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.7.1@730fcf61 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.7.2@6ac49882 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.7.3@06437f69 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 4.7.4@6298ad77 were not able to be satisfied: checksums >= 0.1.0; cligen >= 1.6.14; illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; regex #head; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9
[Notice] (atlas:resolved) inactive packages: checksums, oauth, unicodeplus, asynctools.iffy.github.com, asynctools.timotheecour.github.com, sha1, segmentation, graphemes, timerwheel
[Notice] (atlas:resolved) selected:
[Notice] (atlas:resolved) [ ] (happyx, 2.5.1@d580ce10)
[Notice] (atlas:resolved) [x] (happyx, 2.6.1@9ce225f3)
[Notice] (atlas:resolved) [ ] (happyx, 2.9.1@87b5c209)
[Notice] (atlas:resolved) [ ] (happyx, 0.3.0@e0ee858b)
[Notice] (atlas:resolved) [ ] (happyx, 4.7.4@6298ad77)
[Notice] (atlas:resolved) [ ] (cligen, 1.9.1@79f1566e)
[Notice] (atlas:resolved) [x] (cligen, 1.9.2@c41e6e8a)
[Notice] (atlas:resolved) [ ] (cligen, 0.9.4@231bdc9e)
[Notice] (atlas:resolved) [ ] (illwill, 0.4.0@631169fe)
[Notice] (atlas:resolved) [x] (illwill, 0.4.1@99a120f7^)
[Notice] (atlas:resolved) [ ] (illwill, 0.2.0@fe6f670c)
[Notice] (atlas:resolved) [ ] (regex, 0.26.3@4593305e)
[Notice] (atlas:resolved) [x] (regex, 0.26.3@88f634b9^)
[Notice] (atlas:resolved) [ ] (regex, #199e696a1b0e0db72e2e5a657926e5b944e6ae2d@199e696a)
[Notice] (atlas:resolved) [ ] (httpx, 0.3.7@9fab2c3c)
[Notice] (atlas:resolved) [x] (httpx, 0.3.8@47cb5e79^)
[Notice] (atlas:resolved) [ ] (httpx, 0.1.0@4b904711)
[Notice] (atlas:resolved) [ ] (microasynchttpserver, 0.10.2@90118afb)
[Notice] (atlas:resolved) [x] (microasynchttpserver, 0.11.0@2f206514^)
[Notice] (atlas:resolved) [ ] (microasynchttpserver, 0.9.0@77a5bada)
[Notice] (atlas:resolved) [ ] (httpbeast, 0.4.0@8b50e378)
[Notice] (atlas:resolved) [x] (httpbeast, 0.4.1@abc13d11)
[Notice] (atlas:resolved) [ ] (httpbeast, 0.1.0@ff8fe095)
...

Okay so looking at the lines with [Notice] (atlas:resolved) we see which dependency versions the SAT algorithm has selected. As we can see it selected [Notice] (atlas:resolved) [x] (happyx, 2.6.1@9ce225f3).

We want to figure understand why it selected that version so let’s dig into the output to see which versions were available for the SAT solver. That’s usually the key to understanding and resolving any issues. To help with this Atlas outputs warnings when versions of a given dependency are rejected. In this case we see a lot of lines which look like:

[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 2.9.1@87b5c209 were not able to be satisfied: cligen >= 1.6.14; illwill >= 0.3.1; regex #199e696a1b0e0db72e2e5a657926e5b944e6ae2d; httpx >= 0.3.7; microasynchttpserver >= 0.11.0; httpbeast >= 0.4.2; nimja >= 0.8.7; websocket >= 0.5.2; websocketx >= 0.1.2; nimcrypto >= 0.3.9; oauth >= 0.10; nimpy >= 0.2.0
...

Let’s break up the line for HappyX version 4.7.4 (the active dependency Atlas is processing is listed in the parens):

[Warn]   (happyx) no versions matched requirements for the dependency: httpbeast
[Warn]   (happyx) all requirements needed for nimble release: 
    4.7.4@6298ad77 were not able to be satisfied: 
           checksums >= 0.1.0; 
           cligen >= 1.6.14;
           illwill #2fe96f5c5a6e216e84554d92090ce3d47460667a; 
           regex #head; 
           httpx >= 0.3.7; 
           microasynchttpserver >= 0.11.0; 
           httpbeast >= 0.4.2; 
           nimja 0.8.7; 
           websocket >= 0.5.2; 
           websocketx >= 0.1.2; 
           nimcrypto >= 0.3.9

We can see that version 4.7.4 wasn’t selected because all of the required dependencies. We see the line no versions matched requirements for the dependency: httpbeast followed by the information about what version of HappyX this occurred on. It also lists all the requirements from that version of HappyX’s Nimble file. This informs us that httpbeast >= 0.4.2 is needed to satisfy HappyX 4.7.4 requirements. BTW this httpbeast requirement is needed for pretty much every recent HappyX version.

Okay, now we know that we need httpbeast with a version of at least >= 0.4.2 let’s dig into why. Unfortunately the only information on httpbeast versions is:

[Notice] (atlas:resolved) [ ] (httpbeast, 0.4.0@8b50e378) 
[Notice] (atlas:resolved) [x] (httpbeast, 0.4.1@abc13d11) 
[Notice] (atlas:resolved) [ ] (httpbeast, 0.1.0@ff8fe095)

We need to run Atlas with higher verbosity. Let’s also grep for output about httpbeast as well as skipp HappyX info. From this output notice that we see a line [Info] (httpbeast) unique versions found: 0.2.0, 0.4.1, 0.4.0, 0.3.0, 0.2.1, 0.2.2, 0.1.0 which gives us all the discovered httpbeast versions:

$ atlas install —verbosity:debug | grep -i httpbeast | grep -v -i happyx
[Notice] (test_figuro) Initializing packages: checksums, cligen, illwill, regex, httpx, microasynchttpserver, httpbeast, nimja, websocket, websocketx, nimcrypto, oauth, nimpy, ws 
[Info]   (httpbeast) Initializing package: https://github.com/dom96/httpbeast 
[Debug]  (httpbeast) loading dependency todo: DoNothing ondisk: /Volumes/projects/nims/test-figuro/deps/httpbeast isLinked: false isLazyDeferred: false 
[Notice] (test_figuro) Processing packages: checksums, cligen, illwill, regex, httpx, microasynchttpserver, httpbeast, nimja, websocket, websocketx, nimcrypto, oauth, nimpy, ws 
[Info]   (httpbeast) Processing package at: $project/deps/httpbeast 
[Debug]  (httpbeast) nimble explicit versions: @[] 
[Debug]  (httpbeast) nimble tags: @[0.4.1@abc13d11, 0.4.0@8b50e378, 0.3.0@d679e505, 0.2.2@eda2e809, 0.2.1@65e4575f, 0.2.0@2a965433, 0.1.0@ff8fe095] 
[Debug]  (httpbeast) Found new pkg: asynctools url: https://github.com/cheatfate/asynctools projectName: asynctools 
[Debug]  (httpbeast) Found new pkg: asynctools.iffy.github.com url: https://github.com/iffy/asynctools projectName: asynctools.iffy.github.com 
[Debug]  (httpbeast) Found new pkg: asynctools.timotheecour.github.com url: https://github.com/timotheecour/asynctools projectName: asynctools.timotheecour.github.com 
[Info]   (httpbeast) unique versions found: 0.2.0, 0.4.1, 0.4.0, 0.3.0, 0.2.1, 0.2.2, 0.1.0 
[Debug]  (httpbeast) checking dependency for  0.1.0@ff8fe095 : asynctools query: * 
[Debug]  (httpbeast) a compatible version matched requirements for the dependency version: asynctools 
[Debug]  (httpbeast) version constraints for requirement depdendency dep: https://github.com/cheatfate/asynctools flags:  reqsByFeatures:  
[Debug]  (httpbeast) checking dependency for  0.2.0@2a965433 : asynctools query: * 
[Debug]  (httpbeast) a compatible version matched requirements for the dependency version: asynctools 
[Debug]  (httpbeast) version constraints for requirement depdendency dep: https://github.com/cheatfate/asynctools flags:  reqsByFeatures:  
[Debug]  (httpbeast) checking dependency for  0.2.1@65e4575f : asynctools query: * 
[Debug]  (httpbeast) a compatible version matched requirements for the dependency version: asynctools 
[Debug]  (httpbeast) version constraints for requirement depdendency dep: https://github.com/cheatfate/asynctools flags:  reqsByFeatures:  
[Debug]  (httpbeast) checking dependency for  0.2.2@eda2e809 : asynctools.timotheecour.github.com query: #pr_fix_compilation 
[Debug]  (httpbeast) a compatible version matched requirements for the dependency version: asynctools.timotheecour.github.com 
[Debug]  (httpbeast) version constraints for requirement depdendency dep: https://github.com/timotheecour/asynctools flags:  reqsByFeatures:  
[Debug]  (httpbeast) checking dependency for  0.3.0@d679e505 : asynctools.iffy.github.com query: #pr_fix_for_latest 
[Debug]  (httpbeast) a compatible version matched requirements for the dependency version: asynctools.iffy.github.com 
[Debug]  (httpbeast) version constraints for requirement depdendency dep: https://github.com/iffy/asynctools flags:  reqsByFeatures:  
[Debug]  (httpbeast) checking dependency for  0.4.0@8b50e378 : asynctools query: #0e6bdc3ed5bae8c7cc9 
[Debug]  (httpbeast) a compatible version matched requirements for the dependency version: asynctools 
[Debug]  (httpbeast) version constraints for requirement depdendency dep: https://github.com/cheatfate/asynctools flags:  reqsByFeatures:  
[Debug]  (httpbeast) checking dependency for  0.4.1@abc13d11 : asynctools query: #0e6bdc3ed5bae8c7cc9 
[Debug]  (httpbeast) a compatible version matched requirements for the dependency version: asynctools 
[Debug]  (httpbeast) version constraints for requirement depdendency dep: https://github.com/cheatfate/asynctools flags:  reqsByFeatures:  
[Debug]  (httpbeast) v290 sat var: F 
[Debug]  (httpbeast) v291 sat var: F 
[Debug]  (httpbeast) v292 sat var: F 
[Debug]  (httpbeast) v293 sat var: F 
[Debug]  (httpbeast) v294 sat var: F 
[Debug]  (httpbeast) v295 sat var: F 
[Debug]  (httpbeast) v296 sat var: T 
[Debug]  (httpbeast) package satisfiable 
[Notice] (atlas:resolved) [ ] (httpbeast, 0.4.0@8b50e378) 
[Notice] (atlas:resolved) [x] (httpbeast, 0.4.1@abc13d11) 
[Notice] (atlas:resolved) [ ] (httpbeast, 0.1.0@ff8fe095) 
[Info]   (httpbeast) checkout git commit: abc13d11c210b614960fe8760e581d44cfb2e3e9 at: $project/deps/httpbeast 
[Warn]   (/Volumes/projects/nims/test-figuro/deps/httpbeast) could not update submodules

From this output we pretty quickly see that we’re only finding httpbeast versions 0.2.0, 0.4.1, 0.4.0, 0.3.0, 0.2.1, 0.2.2, 0.1.0. We also see that httpbeast is using Git tags nimble tags: @[0.4.1@abc13d11, … from the output.

Note: When a Git repo has git tags Atlas uses them to determine available versions. This allows package owners to control which versions are “published” and can be used to ignore bad versions. However, since Nimble long played fast and loose with versioning, tags, etc a lot of packages aren’t always consistent.

In this case we see that httpbeast doesn’t list a tag for 4.2 that HappyX requires. Looking at the httpbeast repo we see it’s actually the last unreleased version. Fortunately now we know this there’s an easy fix. Change our Nimble file to:

requires "happyx"
requires "httpbeast#head"

Since the requires is a top level requires and it’s an explicit “version” Atlas will prefer it over and override the tagged versions. Really it’s not really a version, but #head will be resolved to Git commit 75008aab.

Running atlas install again we now get (atlas:resolved) [x] (happyx, 4.7.4@6298ad77)! Turns out httpbeast was our only culprit. Since Atlas loads every version of deps it can find, the SAT solver is usually able to find a (stable) solution. When it can’t it often only takes a bit of tracking to figure out what’s going on, but Atlas usually provides all the info needed to track down most issues pretty quickly. Being verbose in the right places is key (and took me a week or tweaking to get right!).

...
[Notice] (atlas:resolved) inactive packages: oauth, nimpy, asynctools.iffy.github.com, asynctools.timotheecour.github.com, unicodeplus, sha1, segmentation, graphemes, timerwheel
[Notice] (atlas:resolved) selected:
[Notice] (atlas:resolved) [ ] (happyx, 4.7.3@06437f69)
[Notice] (atlas:resolved) [x] (happyx, 4.7.4@6298ad77)
[Notice] (atlas:resolved) [ ] (happyx, 0.3.0@e0ee858b)
[Notice] (atlas:resolved) [ ] (httpbeast, 0.4.1@abc13d11)
[Notice] (atlas:resolved) [x] (httpbeast, 0.4.2@75008aab^)
[Notice] (atlas:resolved) [ ] (httpbeast, 0.1.0@ff8fe095)
[Notice] (atlas:resolved) [ ] (checksums, 0.2.0@86003da1)
[Notice] (atlas:resolved) [x] (checksums, 0.2.1@f8f6bd34)
[Notice] (atlas:resolved) [ ] (checksums, 0.1.0@7ff0b762)
[Notice] (atlas:resolved) [ ] (cligen, 1.9.1@79f1566e)
[Notice] (atlas:resolved) [x] (cligen, 1.9.2@c41e6e8a)
[Notice] (atlas:resolved) [ ] (cligen, 0.9.4@231bdc9e)
[Notice] (atlas:resolved) [ ] (illwill, 0.3.0@7532f9dc)
[Notice] (atlas:resolved) [x] (illwill, 0.3.1@2fe96f5c)
[Notice] (atlas:resolved) [ ] (illwill, 0.3.2@1d12cb36)
[Notice] (atlas:resolved) [ ] (illwill, 0.2.0@fe6f670c)
[Notice] (atlas:resolved) [ ] (illwill, 0.4.1@99a120f7^)
[Notice] (atlas:resolved) [ ] (regex, 0.26.3@4593305e)
[Notice] (atlas:resolved) [x] (regex, 0.26.3@88f634b9^)
[Notice] (atlas:resolved) [ ] (regex, #199e696a1b0e0db72e2e5a657926e5b944e6ae2d@199e696a)
[Notice] (atlas:resolved) [ ] (httpx, 0.3.7@9fab2c3c)
[Notice] (atlas:resolved) [x] (httpx, 0.3.8@47cb5e79^)
[Notice] (atlas:resolved) [ ] (httpx, 0.1.0@4b904711)
[Notice] (atlas:resolved) [ ] (microasynchttpserver, 0.10.2@90118afb)
[Notice] (atlas:resolved) [x] (microasynchttpserver, 0.11.0@2f206514^)
[Notice] (atlas:resolved) [ ] (microasynchttpserver, 0.9.0@77a5bada)
[Notice] (atlas:resolved) [x] (nimja, 0.8.7@2ab66e65)
[Notice] (atlas:resolved) [ ] (nimja, 0.9.0@8cfb53e5)
[Notice] (atlas:resolved) [ ] (nimja, 0.10.1@b7a25c62)
[Notice] (atlas:resolved) [ ] (websocket, 0.5.1@b889d2f8)
[Notice] (atlas:resolved) [x] (websocket, 0.5.2@405f4938^)
[Notice] (atlas:resolved) [ ] (websocket, 0.1.0@a69b1afe)
[Notice] (atlas:resolved) [ ] (websocketx, 0.1.0@8c9022d4)
[Notice] (atlas:resolved) [x] (websocketx, 0.1.2@b0ea475e^)
[Notice] (atlas:resolved) [ ] (nimcrypto, 0.7.1@55275b31)
[Notice] (atlas:resolved) [x] (nimcrypto, 0.7.2@3fab7f9d)
[Notice] (atlas:resolved) [ ] (nimcrypto, 0.6.0@b591f34d)
[Notice] (atlas:resolved) [ ] (ws, 0.4.4@13cbd439)
[Notice] (atlas:resolved) [x] (ws, 0.5.0@9536bf99)
[Notice] (atlas:resolved) [ ] (ws, 0.2.3@10fa5edf)
[Notice] (atlas:resolved) [x] (asynctools, #0e6bdc3ed5bae8c7cc9e03cfbf66b7c882a908a7@0e6bdc3e)
[Notice] (atlas:resolved) [ ] (asynctools, 0.1.0@809a836e)
[Notice] (atlas:resolved) [ ] (asynctools, 0.1.1@a314fb8d)
[Notice] (atlas:resolved) [ ] (unicodedb, 0.13.1@3f8b524f)
[Notice] (atlas:resolved) [x] (unicodedb, 0.13.2@66f24587^)
[Notice] (atlas:resolved) [ ] (unicodedb, 0.1@625b0d11)
[Notice] (atlas:resolved) [ ] (ioselectors, 0.1.8@6fcdbf3f)
[Notice] (atlas:resolved) [x] (ioselectors, 0.2.0@c9344036^)
[Notice] (atlas:resolved) [ ] (ioselectors, 0.1.0@ef5db4a3)
[Notice] (atlas:resolved) [ ] (picohttpparser, 0.10.0@5248bd34)
[Notice] (atlas:resolved) [x] (picohttpparser, 0.11.0@2e1e6d9c^)
[Notice] (atlas:resolved) [ ] (picohttpparser, 0.9.0@e7bc46f8)
[Notice] (atlas:resolved) [ ] (wepoll, 0.1.0@c49c3280)
[Notice] (atlas:resolved) [x] (wepoll, 0.1.2@07fb549e^)
[Notice] (atlas:resolved) end of selection
...