Skip to content

Publish to PyPI as da-sync, not da-cli - #6

Merged
FZ2000 merged 1 commit into
mainfrom
chore/pypi-name
Jul 31, 2026
Merged

Publish to PyPI as da-sync, not da-cli#6
FZ2000 merged 1 commit into
mainfrom
chore/pypi-name

Conversation

@FZ2000

@FZ2000 FZ2000 commented Jul 31, 2026

Copy link
Copy Markdown
Owner

PyPI refuses da-cli: it is too similar to the unrelated dacli
project, which the two differing only by a separator is precisely what
its typosquat guard exists to catch.

Worth recording, because it invalidates the check I had been relying on:
https://pypi.org/pypi/da-cli/json returns 404. The name is not
taken. It is still rejected. Availability and acceptability are separate
questions on PyPI, and only the pending-publisher form answers the
second — so tools/check_discoverability.py-style 404 probes cannot
clear a name on their own.

da-sync instead: seven characters, says what the tool does, reads
naturally with the da command, and differs from dacli by more than a
separator, which is the specific thing that tripped the guard.

THREE NAMES, THREE JOBS — this is the part worth being explicit about,
because they are now deliberately different and that looks like a mistake
if you do not know why:

distribution (PyPI) da-sync what you pip install
import package dacli what import resolves; unchanged
console script da what you type; unchanged
repository da-cli unchanged

Only the first changed. Nothing about the installed tool moves.

Verified by building and installing the wheel into a clean virtualenv
rather than reasoning about it:

built da_sync-0.1.0-py3-none-any.whl, da_sync-0.1.0.tar.gz
da --version -> da-cli 0.1.0
import dacli -> ok, version 0.1.0
metadata -> name=da-sync version=0.1.0

The existing dacli on PyPI installs a top-level dacli/ directory and
a dacli console script. So our console script does not collide, but the
import package would if both were installed into the same environment —
pip does not detect two distributions writing the same directory. That is
accepted deliberately: this is an application, not a library, nobody
imports it, the README recommends pipx (which isolates per tool), and the
two audiences barely overlap.

The README's install section now names da-sync and warns about both
neighbouring names rather than only one.

tools/check_version_sync.py matches both da-cli and da-sync when it
scans prose for a version that disagrees with the package — the first is
still the HTTP User-Agent and the repository name, the second is now the
distribution.

PyPI refuses `da-cli`: it is too similar to the unrelated `dacli`
project, which the two differing only by a separator is precisely what
its typosquat guard exists to catch.

Worth recording, because it invalidates the check I had been relying on:
`https://pypi.org/pypi/da-cli/json` returns **404**. The name is not
taken. It is still rejected. Availability and acceptability are separate
questions on PyPI, and only the pending-publisher form answers the
second — so `tools/check_discoverability.py`-style 404 probes cannot
clear a name on their own.

`da-sync` instead: seven characters, says what the tool does, reads
naturally with the `da` command, and differs from `dacli` by more than a
separator, which is the specific thing that tripped the guard.

THREE NAMES, THREE JOBS — this is the part worth being explicit about,
because they are now deliberately different and that looks like a mistake
if you do not know why:

  distribution (PyPI)  da-sync    what you `pip install`
  import package       dacli      what `import` resolves; unchanged
  console script       da         what you type; unchanged
  repository           da-cli     unchanged

Only the first changed. Nothing about the installed tool moves.

Verified by building and installing the wheel into a clean virtualenv
rather than reasoning about it:

  built    da_sync-0.1.0-py3-none-any.whl, da_sync-0.1.0.tar.gz
  da --version  -> da-cli 0.1.0
  import dacli  -> ok, version 0.1.0
  metadata      -> name=da-sync version=0.1.0

The existing `dacli` on PyPI installs a top-level `dacli/` directory and
a `dacli` console script. So our console script does not collide, but the
import package would if both were installed into the same environment —
pip does not detect two distributions writing the same directory. That is
accepted deliberately: this is an application, not a library, nobody
imports it, the README recommends pipx (which isolates per tool), and the
two audiences barely overlap.

The README's install section now names `da-sync` and warns about both
neighbouring names rather than only one.

tools/check_version_sync.py matches both `da-cli` and `da-sync` when it
scans prose for a version that disagrees with the package — the first is
still the HTTP User-Agent and the repository name, the second is now the
distribution.
@FZ2000
FZ2000 merged commit 6460695 into main Jul 31, 2026
24 checks passed
@FZ2000
FZ2000 deleted the chore/pypi-name branch July 31, 2026 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant