{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":738935218,"defaultBranch":"main","name":"packse","ownerLogin":"konstin","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2024-01-04T11:43:51.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/6826232?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1725379503.0","currentOid":""},"activityList":{"items":[{"before":"e23f89e3ccddecc71179dee75bbb8673a3c871e9","after":"be56f597c12f0e0c0910af64cb2cafe45c479803","ref":"refs/heads/konsti/update-actions","pushedAt":"2024-09-03T22:26:24.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"zanieb","name":"Zanie Blue","path":"/zanieb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2586601?s=80&v=4"},"commit":{"message":"Add test for unreachable packages and wheels (#217)\n\nAdd tests for https://github.com/astral-sh/uv/pull/6959 and\nhttps://github.com/astral-sh/uv/pull/6961.\n\nTested with:\n\n```toml\n[project]\nname = \"foo\"\nversion = \"0.1.0\"\nrequires-python = \">=3.10\"\ndependencies = [\"unreachable-package\", \"unreachable-wheels\", \"requires-python-wheels\"]\n\n[tool.uv]\nindex-url = \"http://localhost:3141\"\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n```\n\nLockfile:\n```toml\nversion = 1\nrequires-python = \">=3.10\"\n\n[[package]]\nname = \"foo\"\nversion = \"0.1.0\"\nsource = { editable = \".\" }\ndependencies = [\n { name = \"requires-python-wheels\" },\n { name = \"unreachable-package\" },\n { name = \"unreachable-wheels\" },\n]\n\n[package.metadata]\nrequires-dist = [\n { name = \"requires-python-wheels\" },\n { name = \"unreachable-package\" },\n { name = \"unreachable-wheels\" },\n]\n\n[[package]]\nname = \"requires-python-wheels\"\nversion = \"0.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\ndependencies = [\n { name = \"requires-python-wheels-a\" },\n]\nsdist = { url = \"http://localhost:3141/packages/requires-python-wheels/requires_python_wheels-0.0.0.tar.gz\", hash = \"sha256:79ffa0fd695959b2dbee964c9990516db032ce8983af43c6d9b32ff4a84499a9\" }\n\n[[package]]\nname = \"requires-python-wheels-a\"\nversion = \"1.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\nsdist = { url = \"http://localhost:3141/packages/requires-python-wheels/requires_python_wheels_a-1.0.0.tar.gz\", hash = \"sha256:9a11ff73fdc513c4dab0d3e137f4145a00ef0dfc95154360c8f503eed62a03c9\" }\nwheels = [\n { url = \"http://localhost:3141/packages/requires-python-wheels/requires_python_wheels_a-1.0.0-cp310-cp310-any.whl\", hash = \"sha256:b979494a0d7dc825b84d6c516ac407143915f6d2840d229ee2a36b3d06deb61d\" },\n { url = \"http://localhost:3141/packages/requires-python-wheels/requires_python_wheels_a-1.0.0-cp311-cp311-any.whl\", hash = \"sha256:b979494a0d7dc825b84d6c516ac407143915f6d2840d229ee2a36b3d06deb61d\" },\n]\n\n[[package]]\nname = \"unreachable-package\"\nversion = \"0.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\ndependencies = [\n { name = \"unreachable-package-a\", marker = \"sys_platform == 'win32'\" },\n]\nsdist = { url = \"http://localhost:3141/packages/unreachable-package/unreachable_package-0.0.0.tar.gz\", hash = \"sha256:f5d940dd2f21645b87d052b22042cca4d10e5af1c456d32946325eb36eea818e\" }\n\n[[package]]\nname = \"unreachable-package-a\"\nversion = \"1.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\nsdist = { url = \"http://localhost:3141/packages/unreachable-package/unreachable_package_a-1.0.0.tar.gz\", hash = \"sha256:308f0b6772e99dcb33acee38003b176e3acffbe01c3c511585db9a7d7ec008f7\" }\nwheels = [\n { url = \"http://localhost:3141/packages/unreachable-package/unreachable_package_a-1.0.0-py3-none-any.whl\", hash = \"sha256:cc472ded9f3b260e6cda0e633fa407a13607e190422cb455f02beebd32d6751f\" },\n]\n\n[[package]]\nname = \"unreachable-wheels\"\nversion = \"0.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\ndependencies = [\n { name = \"unreachable-wheels-a\", marker = \"sys_platform == 'win32'\" },\n { name = \"unreachable-wheels-b\", marker = \"sys_platform == 'linux'\" },\n { name = \"unreachable-wheels-c\", marker = \"sys_platform == 'darwin'\" },\n]\nsdist = { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels-0.0.0.tar.gz\", hash = \"sha256:6a1da25cbd20e512e219dae85569f20208377d16c004a3e1c5bcbd615c5f5e9e\" }\n\n[[package]]\nname = \"unreachable-wheels-a\"\nversion = \"1.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\nsdist = { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels_a-1.0.0.tar.gz\", hash = \"sha256:91c6619d1cfa227f3662c0c062b1c0c16efe11e589db2f1836e809e2c6d9961e\" }\nwheels = [\n { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels_a-1.0.0-cp312-cp312-win_amd64.whl\", hash = \"sha256:e9fb30c5eb114114f9031d0ad2238614c2dcce203c5992848305ccda8f38a53e\" },\n]\n\n[[package]]\nname = \"unreachable-wheels-b\"\nversion = \"1.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\nsdist = { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels_b-1.0.0.tar.gz\", hash = \"sha256:253ae69b963651cd5ac16601a445e2e179db9eac552e8cfc37aadf73a88931ed\" }\nwheels = [\n { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels_b-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\", hash = \"sha256:a3de2212ca86f1137324965899ce7f48640ed8db94578f4078d641520b77e13e\" },\n { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels_b-1.0.0-cp312-cp312-musllinux_1_1_armv7l.whl\", hash = \"sha256:a3de2212ca86f1137324965899ce7f48640ed8db94578f4078d641520b77e13e\" },\n]\n\n[[package]]\nname = \"unreachable-wheels-c\"\nversion = \"1.0.0\"\nsource = { registry = \"http://localhost:3141/\" }\nsdist = { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels_c-1.0.0.tar.gz\", hash = \"sha256:5c4783e85f0fa57b720fd02b5c7e0ff8bc98121546fe2cce435710efe4a34b28\" }\nwheels = [\n { url = \"http://localhost:3141/packages/unreachable-wheels/unreachable_wheels_c-1.0.0-cp312-cp312-macosx_14_0_x86_64.whl\", hash = \"sha256:4b846c5b1646b04828a2bef6c9d180ff7cfd725866013dcec8933de7fb5f9e8d\" },\n]\n```\nLooks all correct","shortMessageHtmlLink":"Add test for unreachable packages and wheels (astral-sh#217)"}},{"before":"5631e4c43864a1ace597c4d5f0a53ad61f56ea80","after":null,"ref":"refs/heads/konsti/tags-and-markers-tests","pushedAt":"2024-09-03T16:05:03.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":null,"after":"5631e4c43864a1ace597c4d5f0a53ad61f56ea80","ref":"refs/heads/konsti/tags-and-markers-tests","pushedAt":"2024-09-03T14:44:14.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add test for unreachable packages and wheels\n\nAdd tests for https://github.com/astral-sh/uv/pull/6959 and https://github.com/astral-sh/uv/pull/6961","shortMessageHtmlLink":"Add test for unreachable packages and wheels"}},{"before":"40c6a7b5f26f4becea7a502e4def705cc0a0bb68","after":null,"ref":"refs/heads/konsti/prefix-packse-ci","pushedAt":"2024-08-22T16:24:46.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":null,"after":"40c6a7b5f26f4becea7a502e4def705cc0a0bb68","ref":"refs/heads/konsti/prefix-packse-ci","pushedAt":"2024-08-22T15:58:18.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Prefix packse github actions tasks\n\nThis is required to properly target them in the required checks in the github actions settings.","shortMessageHtmlLink":"Prefix packse github actions tasks"}},{"before":"d54349b33d6a9599a92c3bf9d4dc420c1da8bf61","after":"1ebb974f357e39129888050bab94329a5d31277c","ref":"refs/heads/konsti/update-lockfile-0.3","pushedAt":"2024-08-22T15:54:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Update lockfile to uv v0.3.0\n\nUpdate to the stable","shortMessageHtmlLink":"Update lockfile to uv v0.3.0"}},{"before":"f1d70fb4f2fc02a3fde27268aa4283a5a988425f","after":null,"ref":"refs/heads/konsti/fix-ruff-errors","pushedAt":"2024-08-22T15:52:46.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":null,"after":"f1d70fb4f2fc02a3fde27268aa4283a5a988425f","ref":"refs/heads/konsti/fix-ruff-errors","pushedAt":"2024-08-22T15:45:16.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Fix ruff isort errors\n\nThis was blocking #214","shortMessageHtmlLink":"Fix ruff isort errors"}},{"before":null,"after":"d54349b33d6a9599a92c3bf9d4dc420c1da8bf61","ref":"refs/heads/konsti/update-lockfile-0.3","pushedAt":"2024-08-22T15:22:38.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Update lockfile to uv v0.3.0\n\nUpdate to the stable","shortMessageHtmlLink":"Update lockfile to uv v0.3.0"}},{"before":null,"after":"8b9e3808c7f3515d960e9644ad191e6d9780b66d","ref":"refs/heads/konsti/fork-upgrade-scenario","pushedAt":"2024-08-08T12:00:17.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add fork-upgrade scenario\n\nThe scenario checks that we discard fork markers when using `--upgrade`. Test case for #5817.","shortMessageHtmlLink":"Add fork-upgrade scenario"}},{"before":null,"after":"e23f89e3ccddecc71179dee75bbb8673a3c871e9","ref":"refs/heads/konsti/update-actions","pushedAt":"2024-08-06T09:15:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Update deprecated actions\n\nCI was complaining:\n\n> The following actions uses Node.js version which is deprecated and will be forced to run on node20: actions/checkout@v3, actions/setup-python@v4. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/","shortMessageHtmlLink":"Update deprecated actions"}},{"before":"0a879f5079a0956735d79a740c2ac1f0c63d2f92","after":null,"ref":"refs/heads/konsti/update-snapshots","pushedAt":"2024-08-06T09:13:11.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":null,"after":"0a879f5079a0956735d79a740c2ac1f0c63d2f92","ref":"refs/heads/konsti/update-snapshots","pushedAt":"2024-08-06T09:08:19.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Update snapshots for #205","shortMessageHtmlLink":"Update snapshots for astral-sh#205"}},{"before":"a35500e2d19fcb0ea5102648cd6fa318ffaf9cc5","after":null,"ref":"refs/heads/konsti/dont-textwrap-toml-scenarios","pushedAt":"2024-08-06T09:06:30.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":"c08870121d5c3680aca5b2b1f14a8ea0068dc0f3","after":"a35500e2d19fcb0ea5102648cd6fa318ffaf9cc5","ref":"refs/heads/konsti/dont-textwrap-toml-scenarios","pushedAt":"2024-08-06T09:05:53.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Don't textwrap toml scenarios\n\nUnlike json scenarios, toml and yaml scenarios have multi-line description fields, in which we can write proper markdown. Textwrap doesn't understand markdown and mangles it. To fix https://github.com/astral-sh/uv/pull/5441#discussion_r1691470051, we stop textwrapping toml and yaml files.\n\nI've tested this locally and the snapshots look better, due to https://github.com/astral-sh/uv/issues/5475 is somewhat incomplete though: https://github.com/astral-sh/uv/pull/5441.","shortMessageHtmlLink":"Don't textwrap toml scenarios"}},{"before":"5e334fd5288b778fe8788ba1b5f8ef52894c6ac1","after":null,"ref":"refs/heads/konsti/add-bistable-system","pushedAt":"2024-07-31T12:55:08.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":null,"after":"5e334fd5288b778fe8788ba1b5f8ef52894c6ac1","ref":"refs/heads/konsti/add-bistable-system","pushedAt":"2024-07-30T14:54:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add bistable preference-dependent forking scenario\n\nAnother test for the resolver instability.\n\n> This test contains a bistable resolution scenario when not using ahead-of-time\n> splitting of resolution forks: We meet one of two fork points depending on the\n> preferences, creating a resolution whose preferences lead us the other fork\n> point.\n>\n> In the first case, we are in cleaver 2 and fork on `sys_platform`, in the\n> second case, we are in foo 1 or bar 1 amd fork over `os_name`.\n>\n> First case: We select cleaver 2, fork on `sys_platform`, we reject cleaver 2\n> (missing fork `os_name`), we select cleaver 1 and don't fork on `os_name` in\n> `fork-if-not-forked`, done.\n> Second case: We have preference cleaver 1, fork on `os_name` in\n> `fork-if-not-forked`, we reject cleaver 1, we select cleaver 2, we fork on\n> `sys_platform`, we accept cleaver 2 since we forked on `os_name`, done.\n\nI've also included a tristable system with two iterations lead-up time that is accidentally created. It's not documented, but i wouldn't waste such a cursed scenario.","shortMessageHtmlLink":"Add bistable preference-dependent forking scenario"}},{"before":null,"after":"c08870121d5c3680aca5b2b1f14a8ea0068dc0f3","ref":"refs/heads/konsti/dont-textwrap-toml-scenarios","pushedAt":"2024-07-26T12:56:09.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Don't textwrap toml scenarios\n\nUnlike json scenarios, toml and yaml scenarios have multi-line description fields, in which we can write proper markdown. Textwrap doesn't understand markdown and mangles it. To fix https://github.com/astral-sh/uv/pull/5441#discussion_r1691470051, we stop textwrapping toml and yaml files.\n\nI've tested this locally and the snapshots look better, due to https://github.com/astral-sh/uv/issues/5475 is somewhat incomplete though: https://github.com/astral-sh/uv/pull/5441.","shortMessageHtmlLink":"Don't textwrap toml scenarios"}},{"before":"59b0d3df61363f063b6dab481ba43865f1cf95f1","after":null,"ref":"refs/heads/konsti/unstable-scenario","pushedAt":"2024-07-25T13:27:38.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":"802361cb832afa9f4d109a955aa0dbd1903a643b","after":"59b0d3df61363f063b6dab481ba43865f1cf95f1","ref":"refs/heads/konsti/unstable-scenario","pushedAt":"2024-07-19T12:50:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add forking scenarios that are unstable with preferences\n\nIn the first scenario, `preferences-dependent-forking`, we show how the resolution can be different the second time because we don't fork anymore because the preferences from the lockfile make us skip the fork point. This scenario is inspired by the same happening in the `transformer` repo, where a single universal resolution leads to a more desirable lock without duplicate versions.\n\nConsider a fresh run without preferences:\n* We start with cleaver 2\n* We fork\n* We reject cleaver 2\n* We find a cleaver 1 solution in fork 1 with foo 2 with bar 1\n* We find a cleaver 1 solution in fork 2 with foo 1 with bar 2\n* We write cleaver 1, foo 1, foo 2, bar 1 and bar 2 to the lockfile\n\nIn a subsequent run, we read the preference cleaver 1 from the lockfile (the preferences for foo and bar don't matter):\n* We start with cleaver 1\n* We're in universal mode, we resolve foo 1 and bar 1\n* We write cleaver 1 and bar 1 to the lockfile\n\nWe call a resolution that's different between first and second run unstable.\n\nDesign sketch:\n```text\nroot -> cleaver, foo, bar\n# Cause a fork, then forget that version.\ncleaver 2 -> unrelated-dep==1; fork==1\ncleaver 2 -> unrelated-dep==2; fork==2\ncleaver 2 -> reject-cleaver-2\n# Allow diverging versions when forking, but force foo 1, bar 1 in universal mode without forking.\ncleaver 1 -> foo==1; fork==1\ncleaver 1 -> bar==1; fork==2\n```\n\nLet's try this out:\n\n```toml\n[project]\nname = \"dummy\"\nversion = \"0.1.0\"\nrequires-python = \">=3.12\"\ndependencies = [\n \"preferences-dependent-forking-5c5f76e6\"\n]\n\n[tool.uv]\nindex-url = \"http://127.0.0.1:3141/\"\n```\n\nCleanup and first, fresh run without preferences, on linux:\n```console\n$ rm -f uv.lock\n$ uv venv -q\n$ cargo run -q -- sync --preview\nResolved 6 packages in 647ms\nBuilt dummy @ file:///home/konsti/projects/uv/debug/dummy\nBuilt preferences-dependent-forking-5c5f76e6==0.0.0\nPrepared 2 packages in 457ms\nInstalled 5 packages in 1ms\n+ dummy==0.1.0 (from file:///home/konsti/projects/uv/debug/dummy)\n+ preferences-dependent-forking-5c5f76e6==0.0.0\n+ preferences-dependent-forking-bar-5c5f76e6==1.0.0\n+ preferences-dependent-forking-cleaver-5c5f76e6==1.0.0\n+ preferences-dependent-forking-foo-5c5f76e6==2.0.0\n```\n\nSecond run, using the preferences from the lockfile:\n```console\n$ cargo run -q -- sync --preview\n Resolved 5 packages in 113ms\n Uninstalled 1 package in 0.57ms\n Installed 1 package in 1ms\n- preferences-dependent-forking-foo-5c5f76e6==2.0.0\n+ preferences-dependent-forking-foo-5c5f76e6==1.0.0\n```\n\nThe logs confirm that in the first run with fork, while in the second we don't.\n\nIn the second scenario `preferences-dependent-forking-conflicting`, we add `foo 1 -> bar==2` so that the resolving cleaver 1 fails without forking:\n\n```toml\n[project]\nname = \"dummy\"\nversion = \"0.1.0\"\nrequires-python = \">=3.12\"\ndependencies = [\n \"preferences-dependent-forking-conflicting-5f0792c1\"\n]\n\n[tool.uv]\nindex-url = \"http://127.0.0.1:3141/\"\n```\n\nCleanup and first, fresh run, on linux:\n```console\n$ rm -f uv.lock\n$ uv venv -q\n$ cargo run -q -- sync --preview\nResolved 7 packages in 166ms\n Built dummy @ file:///home/konsti/projects/uv/debug/dummy\nPrepared 1 package in 489ms\nInstalled 5 packages in 1ms\n + dummy==0.1.0 (from file:///home/konsti/projects/uv/debug/dummy)\n + preferences-dependent-forking-conflicting-5f0792c1==0.0.0\n + preferences-dependent-forking-conflicting-bar-5f0792c1==2.0.0\n + preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0\n + preferences-dependent-forking-conflicting-foo-5f0792c1==2.0.0\n```\n\nIn the second run, we're using the preferences from the lockfile. We reject preference cleaver 1 in universal mode, then move to cleaver 2, fork, and fail in one of the forks by the cleaver 2 rejecting package:\n```console\n$ cargo run -q -- sync --preview\n × No solution found when resolving dependencies for split (sys_platform != 'linux'):\n ╰─▶ Because preferences-dependent-forking-conflicting-foo-5f0792c1==1.0.0\n depends on preferences-dependent-forking-conflicting-bar-5f0792c1==2 and\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0 depends on\n preferences-dependent-forking-conflicting-foo-5f0792c1{sys_platform == 'linux'}==1, we can\n conclude that preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0 depends on\n preferences-dependent-forking-conflicting-bar-5f0792c1==2.\n And because preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0 depends on\n preferences-dependent-forking-conflicting-bar-5f0792c1{sys_platform != 'linux'}==1 and only the following\n versions of preferences-dependent-forking-conflicting-cleaver-5f0792c1 are available:\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==2.0.0\n we can conclude that preferences-dependent-forking-conflicting-cleaver-5f0792c1<2.0.0 cannot be used. (1)\n\n Because preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1==1.0.0\n depends on preferences-dependent-forking-conflicting-unrelated-dep-5f0792c1==3 and only\n preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1==1.0.0 is available, we can\n conclude that all versions of preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1 and\n preferences-dependent-forking-conflicting-unrelated-dep-5f0792c1{sys_platform != 'linux'}==2.0.0 are\n incompatible.\n And because preferences-dependent-forking-conflicting-cleaver-5f0792c1==2.0.0 depends on\n preferences-dependent-forking-conflicting-unrelated-dep-5f0792c1{sys_platform != 'linux'}==2\n and preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1, we can conclude that\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==2.0.0 cannot be used.\n And because we know from (1) that preferences-dependent-forking-conflicting-cleaver-5f0792c1<2.0.0 cannot\n be used, we can conclude that all versions of preferences-dependent-forking-conflicting-cleaver-5f0792c1\n cannot be used.\n And because preferences-dependent-forking-conflicting-5f0792c1==0.0.0 depends on\n preferences-dependent-forking-conflicting-cleaver-5f0792c1, we can conclude that\n preferences-dependent-forking-conflicting-5f0792c1==0.0.0 cannot be used.\n And because only preferences-dependent-forking-conflicting-5f0792c1==0.0.0 is available and dummy==0.1.0\n depends on preferences-dependent-forking-conflicting-5f0792c1, we can conclude that dummy==0.1.0 cannot\n be used.\n And because only dummy==0.1.0 is available and you require dummy, we can conclude that the requirements\n are unsatisfiable.\n```\n\nThe logs confirm that we fork in both runs.\n\nI don't know whether this scenario should be tagged `satisfiable` yet or not.","shortMessageHtmlLink":"Add forking scenarios that are unstable with preferences"}},{"before":"1f70cbe8ddd572eb93e0a3679ce96a85c5017c78","after":"802361cb832afa9f4d109a955aa0dbd1903a643b","ref":"refs/heads/konsti/unstable-scenario","pushedAt":"2024-07-19T12:50:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add forking scenarios that are unstable with preferences\n\nIn the first scenario, `preferences-dependent-forking`, we show how the resolution can be different the second time because we don't fork anymore because the preferences from the lockfile make us skip the fork point. This scenario is inspired by the same happening in the `transformer` repo, where a single universal resolution leads to a more desirable lock without duplicate versions.\n\nConsider a fresh run without preferences:\n* We start with cleaver 2\n* We fork\n* We reject cleaver 2\n* We find a cleaver 1 solution in fork 1 with foo 2 with bar 1\n* We find a cleaver 1 solution in fork 2 with foo 1 with bar 2\n* We write cleaver 1, foo 1, foo 2, bar 1 and bar 2 to the lockfile\n\nIn a subsequent run, we read the preference cleaver 1 from the lockfile (the preferences for foo and bar don't matter):\n* We start with cleaver 1\n* We're in universal mode, we resolve foo 1 and bar 1\n* We write cleaver 1 and bar 1 to the lockfile\n\nWe call a resolution that's different between first and second run unstable.\n\nDesign sketch:\n```text\nroot -> cleaver, foo, bar\n# Cause a fork, then forget that version.\ncleaver 2 -> unrelated-dep==1; fork==1\ncleaver 2 -> unrelated-dep==2; fork==2\ncleaver 2 -> reject-cleaver-2\n# Allow diverging versions when forking, but force foo 1, bar 1 in universal mode without forking.\ncleaver 1 -> foo==1; fork==1\ncleaver 1 -> bar==1; fork==2\n```\n\nLet's try this out:\n\n```toml\n[project]\nname = \"dummy\"\nversion = \"0.1.0\"\nrequires-python = \">=3.12\"\ndependencies = [\n \"preferences-dependent-forking-5c5f76e6\"\n]\n\n[tool.uv]\nindex-url = \"http://127.0.0.1:3141/\"\n```\n\nCleanup and first, fresh run without preferences, on linux:\n```console\n$ rm -f uv.lock\n$ uv venv -q\n$ cargo run -q -- sync --preview\nResolved 6 packages in 647ms\nBuilt dummy @ file:///home/konsti/projects/uv/debug/dummy\nBuilt preferences-dependent-forking-5c5f76e6==0.0.0\nPrepared 2 packages in 457ms\nInstalled 5 packages in 1ms\n+ dummy==0.1.0 (from file:///home/konsti/projects/uv/debug/dummy)\n+ preferences-dependent-forking-5c5f76e6==0.0.0\n+ preferences-dependent-forking-bar-5c5f76e6==1.0.0\n+ preferences-dependent-forking-cleaver-5c5f76e6==1.0.0\n+ preferences-dependent-forking-foo-5c5f76e6==2.0.0\n```\n\nSecond run, using the preferences from the lockfile:\n```console\n$ cargo run -q -- sync --preview\n Resolved 5 packages in 113ms\n Uninstalled 1 package in 0.57ms\n Installed 1 package in 1ms\n- preferences-dependent-forking-foo-5c5f76e6==2.0.0\n+ preferences-dependent-forking-foo-5c5f76e6==1.0.0\n```\n\nThe logs confirm that in the first run with fork, while in the second we don't.\n\nIn the second scenario `preferences-dependent-forking-conflicting`, we add `foo 1 -> bar==2` so that the resolving cleaver 1 fails without forking:\n\n```toml\n[project]\nname = \"dummy\"\nversion = \"0.1.0\"\nrequires-python = \">=3.12\"\ndependencies = [\n \"preferences-dependent-forking-conflicting-5f0792c1\"\n]\n\n[tool.uv]\nindex-url = \"http://127.0.0.1:3141/\"\n```\n\nCleanup and first, fresh run, on linux:\n```console\n$ rm -f uv.lock\n$ uv venv -q\n$ cargo run -q -- sync --preview\nResolved 7 packages in 166ms\n Built dummy @ file:///home/konsti/projects/uv/debug/dummy\nPrepared 1 package in 489ms\nInstalled 5 packages in 1ms\n + dummy==0.1.0 (from file:///home/konsti/projects/uv/debug/dummy)\n + preferences-dependent-forking-conflicting-5f0792c1==0.0.0\n + preferences-dependent-forking-conflicting-bar-5f0792c1==2.0.0\n + preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0\n + preferences-dependent-forking-conflicting-foo-5f0792c1==2.0.0\n```\n\nIn the second run, we're using the preferences from the lockfile. We reject preference cleaver 1 in universal mode, then move to cleaver 2, fork, and fail in one of the forks by the cleaver 2 rejecting package:\n```console\n$ cargo run -q -- sync --preview\n × No solution found when resolving dependencies for split (sys_platform != 'linux'):\n ╰─▶ Because preferences-dependent-forking-conflicting-foo-5f0792c1==1.0.0\n depends on preferences-dependent-forking-conflicting-bar-5f0792c1==2 and\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0 depends on\n preferences-dependent-forking-conflicting-foo-5f0792c1{sys_platform == 'linux'}==1, we can\n conclude that preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0 depends on\n preferences-dependent-forking-conflicting-bar-5f0792c1==2.\n And because preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0 depends on\n preferences-dependent-forking-conflicting-bar-5f0792c1{sys_platform != 'linux'}==1 and only the following\n versions of preferences-dependent-forking-conflicting-cleaver-5f0792c1 are available:\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==1.0.0\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==2.0.0\n we can conclude that preferences-dependent-forking-conflicting-cleaver-5f0792c1<2.0.0 cannot be used. (1)\n\n Because preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1==1.0.0\n depends on preferences-dependent-forking-conflicting-unrelated-dep-5f0792c1==3 and only\n preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1==1.0.0 is available, we can\n conclude that all versions of preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1 and\n preferences-dependent-forking-conflicting-unrelated-dep-5f0792c1{sys_platform != 'linux'}==2.0.0 are\n incompatible.\n And because preferences-dependent-forking-conflicting-cleaver-5f0792c1==2.0.0 depends on\n preferences-dependent-forking-conflicting-unrelated-dep-5f0792c1{sys_platform != 'linux'}==2\n and preferences-dependent-forking-conflicting-reject-cleaver-2-5f0792c1, we can conclude that\n preferences-dependent-forking-conflicting-cleaver-5f0792c1==2.0.0 cannot be used.\n And because we know from (1) that preferences-dependent-forking-conflicting-cleaver-5f0792c1<2.0.0 cannot\n be used, we can conclude that all versions of preferences-dependent-forking-conflicting-cleaver-5f0792c1\n cannot be used.\n And because preferences-dependent-forking-conflicting-5f0792c1==0.0.0 depends on\n preferences-dependent-forking-conflicting-cleaver-5f0792c1, we can conclude that\n preferences-dependent-forking-conflicting-5f0792c1==0.0.0 cannot be used.\n And because only preferences-dependent-forking-conflicting-5f0792c1==0.0.0 is available and dummy==0.1.0\n depends on preferences-dependent-forking-conflicting-5f0792c1, we can conclude that dummy==0.1.0 cannot\n be used.\n And because only dummy==0.1.0 is available and you require dummy, we can conclude that the requirements\n are unsatisfiable.\n```\n\nThe logs confirm that we fork in both runs.\n\nI don't know whether this scenario should be tagged `satisfiable` yet or not.","shortMessageHtmlLink":"Add forking scenarios that are unstable with preferences"}},{"before":null,"after":"1f70cbe8ddd572eb93e0a3679ce96a85c5017c78","ref":"refs/heads/konsti/unstable-scenario","pushedAt":"2024-07-18T15:39:22.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add unstable scenarios","shortMessageHtmlLink":"Add unstable scenarios"}},{"before":"70ef7a93b123d66ff049a18970d39029fe69de4c","after":null,"ref":"refs/heads/konsti/fix-typo","pushedAt":"2024-07-15T11:16:01.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":null,"after":"70ef7a93b123d66ff049a18970d39029fe69de4c","ref":"refs/heads/konsti/fix-typo","pushedAt":"2024-07-15T11:15:09.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Fix typo\n\nCloses https://github.com/astral-sh/uv/pull/4625","shortMessageHtmlLink":"Fix typo"}},{"before":"d843f38170694adb3898731dc9e324dc5e4e0547","after":null,"ref":"refs/heads/konsti/conflict-in-fork","pushedAt":"2024-07-15T07:58:32.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}},{"before":"73f7a92dfbd4de46f589c601168eed2899ca9a06","after":"d843f38170694adb3898731dc9e324dc5e4e0547","ref":"refs/heads/konsti/conflict-in-fork","pushedAt":"2024-07-14T16:13:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add conflict in fork scenario\n\nAdd a scenario where we fail after forking. The error message is already not bad:\n\n```\n × No solution found when resolving dependencies:\n ╰─▶ Because only fork-basic-b-03509d5c==1.0.0 is available and fork-basic-b-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==1,\n we can conclude that all versions of fork-basic-b-03509d5c depend on fork-basic-d-03509d5c==1.\n And because fork-basic-c-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==2 and only fork-basic-c-03509d5c==1.0.0 is\n available, we can conclude that all versions of fork-basic-b-03509d5c and all versions of fork-basic-c-03509d5c are\n incompatible.\n And because fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 depends on fork-basic-b-03509d5c and fork-basic-c-03509d5c,\n we can conclude that fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 cannot be used.\n And because only the following versions of fork-basic-a-03509d5c{sys_platform == 'darwin'} are available:\n fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0\n fork-basic-a-03509d5c{sys_platform == 'darwin'}>=2\n and fork-basic-03509d5c==0.0.0 depends on fork-basic-a-03509d5c{sys_platform == 'darwin'}<2, we can conclude that\n fork-basic-03509d5c==0.0.0 cannot be used.\n And because only fork-basic-03509d5c==0.0.0 is available and you require fork-basic-03509d5c, we can conclude that the\n requirements are unsatisfiable.\n```","shortMessageHtmlLink":"Add conflict in fork scenario"}},{"before":"c8c26315bbd24c2217bc8ad8fad290d40245f6cd","after":"73f7a92dfbd4de46f589c601168eed2899ca9a06","ref":"refs/heads/konsti/conflict-in-fork","pushedAt":"2024-07-14T16:13:18.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add conflict in fork scenario\n\nAdd a scenario where we fail after forking. The error message is already not bad:\n\n```\n × No solution found when resolving dependencies:\n ╰─▶ Because only fork-basic-b-03509d5c==1.0.0 is available and fork-basic-b-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==1,\n we can conclude that all versions of fork-basic-b-03509d5c depend on fork-basic-d-03509d5c==1.\n And because fork-basic-c-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==2 and only fork-basic-c-03509d5c==1.0.0 is\n available, we can conclude that all versions of fork-basic-b-03509d5c and all versions of fork-basic-c-03509d5c are\n incompatible.\n And because fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 depends on fork-basic-b-03509d5c and fork-basic-c-03509d5c,\n we can conclude that fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 cannot be used.\n And because only the following versions of fork-basic-a-03509d5c{sys_platform == 'darwin'} are available:\n fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0\n fork-basic-a-03509d5c{sys_platform == 'darwin'}>=2\n and fork-basic-03509d5c==0.0.0 depends on fork-basic-a-03509d5c{sys_platform == 'darwin'}<2, we can conclude that\n fork-basic-03509d5c==0.0.0 cannot be used.\n And because only fork-basic-03509d5c==0.0.0 is available and you require fork-basic-03509d5c, we can conclude that the\n requirements are unsatisfiable.\n```","shortMessageHtmlLink":"Add conflict in fork scenario"}},{"before":"23ae71134f388aab0027e6e513d581a164ba32f7","after":"c8c26315bbd24c2217bc8ad8fad290d40245f6cd","ref":"refs/heads/konsti/conflict-in-fork","pushedAt":"2024-07-14T16:12:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add conflict in fork scenario\n\nAdd a scenario where we fail after forking. The error message is already not bad:\n\n```\n × No solution found when resolving dependencies:\n ╰─▶ Because only fork-basic-b-03509d5c==1.0.0 is available and fork-basic-b-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==1,\n we can conclude that all versions of fork-basic-b-03509d5c depend on fork-basic-d-03509d5c==1.\n And because fork-basic-c-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==2 and only fork-basic-c-03509d5c==1.0.0 is\n available, we can conclude that all versions of fork-basic-b-03509d5c and all versions of fork-basic-c-03509d5c are\n incompatible.\n And because fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 depends on fork-basic-b-03509d5c and fork-basic-c-03509d5c,\n we can conclude that fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 cannot be used.\n And because only the following versions of fork-basic-a-03509d5c{sys_platform == 'darwin'} are available:\n fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0\n fork-basic-a-03509d5c{sys_platform == 'darwin'}>=2\n and fork-basic-03509d5c==0.0.0 depends on fork-basic-a-03509d5c{sys_platform == 'darwin'}<2, we can conclude that\n fork-basic-03509d5c==0.0.0 cannot be used.\n And because only fork-basic-03509d5c==0.0.0 is available and you require fork-basic-03509d5c, we can conclude that the\n requirements are unsatisfiable.\n```","shortMessageHtmlLink":"Add conflict in fork scenario"}},{"before":null,"after":"23ae71134f388aab0027e6e513d581a164ba32f7","ref":"refs/heads/konsti/conflict-in-fork","pushedAt":"2024-07-14T16:11:58.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"},"commit":{"message":"Add conflict in fork scenario\n\nAdd a scenario where we fail after forking. The error message is already not bad:\n\n```\n × No solution found when resolving dependencies:\n ╰─▶ Because only fork-basic-b-03509d5c==1.0.0 is available and fork-basic-b-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==1,\n we can conclude that all versions of fork-basic-b-03509d5c depend on fork-basic-d-03509d5c==1.\n And because fork-basic-c-03509d5c==1.0.0 depends on fork-basic-d-03509d5c==2 and only fork-basic-c-03509d5c==1.0.0 is\n available, we can conclude that all versions of fork-basic-b-03509d5c and all versions of fork-basic-c-03509d5c are\n incompatible.\n And because fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 depends on fork-basic-b-03509d5c and fork-basic-c-03509d5c,\n we can conclude that fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0 cannot be used.\n And because only the following versions of fork-basic-a-03509d5c{sys_platform == 'darwin'} are available:\n fork-basic-a-03509d5c{sys_platform == 'darwin'}==1.0.0\n fork-basic-a-03509d5c{sys_platform == 'darwin'}>=2\n and fork-basic-03509d5c==0.0.0 depends on fork-basic-a-03509d5c{sys_platform == 'darwin'}<2, we can conclude that\n fork-basic-03509d5c==0.0.0 cannot be used.\n And because only fork-basic-03509d5c==0.0.0 is available and you require fork-basic-03509d5c, we can conclude that the\n requirements are unsatisfiable.\n```","shortMessageHtmlLink":"Add conflict in fork scenario"}},{"before":"add2be191f5da50ba229220d23e200856dee00f7","after":null,"ref":"refs/heads/konsti/failing-incomplete-marker-scenario","pushedAt":"2024-07-09T19:10:39.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"konstin","name":"konsti","path":"/konstin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/6826232?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0wM1QyMjoyNjoyNC4wMDAwMDBazwAAAASsE-Lm","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0wM1QyMjoyNjoyNC4wMDAwMDBazwAAAASsE-Lm","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNy0wOVQxOToxMDozOS4wMDAwMDBazwAAAAR7BHqW"}},"title":"Activity · konstin/packse"}