Repository navigation
DX1: a usable C ABI, the CLI, and the names we publish under #12
Description
Activity
- addedmilestoneMilestone tracking issueMilestone tracking issuedxDeveloper experience: SDKs, install, ergonomicsDeveloper experience: SDKs, install, ergonomicscapiC ABI surface and stabilityC ABI surface and stabilitycliCLI and interactive shellCLI and interactive shellcC and C++ developer kitC and C++ developer kit
on Aug 25, 2026 - changed the title
[-]DX1: a usable C ABI and the CLI[/-][+]DX1: a usable C ABI, the CLI, and the names we publish under[/+]on Aug 28, 2026 - addedpackagingDistribution, registries, release trainDistribution, registries, release train
on Aug 28, 2026 Split out as #28 — most of the reservation block is account registration a human has to do, and the automation is blocked on it. The spec is
dx/16-name-reservation.md.The name-reservation probe turned up a decision, not just an audit: the binary is renamed
yo→yodb(#29).yoonPATHis Yeoman's and is Yeoman's on Homebrew core, Chocolatey and the AUR;yodbis free on all three plus ScoopMainand Snap. One rename resolves every collision and removes the "installyodb, runyo" papercutdx/12§2 used to document.Reservation automation is written and running —
names.toml(37 rows, 20 registries) andreserve audit/plan/verify, all credential-free. Last audit 2026-08-28:blocked=7 free=23 released=1 reserved=4 unknown=2, 0 regressed. Staged outside the repo becausedx0-abiis mid-rebase. Live checklist isdx/16§13.cargo xtask reserve verifynow asks a registry again when the first request does not come back. PR #505.That gate is what stands between a release and publishing under a name somebody else has taken, and it exits 2 rather than 0 when it could not get an answer, which is right and stays. What was missing is that a request which never came back was only tried once. On the 8th one read against
search.maven.orgtimed out, the v0.3.28 release stopped there, and the publish jobs never ran, so 0.3.28 has no crates.io release and no GitHub release, only a tag. Nobody noticed for a day because the failure was in a job there is normally no reason to read.The message the tool already prints in that case says what to do about it, which is to retry, so it retries. Three attempts, two seconds then four between them, and only where the request did not come back at all. An HTTP status is a verdict, including a 404 and including a 403, and asking again would only get the same one.
v0.3.29 went out this morning with all forty three names across eleven registries reading held and none unchecked, so the gate itself is intact and this was only about how it fails.
Lands with M1. The C ABI stops being a skeleton and starts being usable, the CLI exists so there is something to type before any binding ships, and the names everything will publish under get reserved while they are still free.
Scope
yo_iter_next_batchwithBATCH_MAXof 64, and the_manyforms on every single-key readyo_iter_age_usandYO_ERR_EPOCH_STALLED, so a slow iterator is a diagnosable error and not a memory leakyo-c:YO_STR,YO_TRY, cleanup attributes, the things that make the C surface bearablelibyo_debugwith assertion-heavy buildsyoCLI:open,get,set,check,dumpName reservation
New in
dx/16-name-reservation.md, and it moves here from DX8 deliberately: a name is first-come, free to take, and unrecoverable once someone else has it. Discovering the problem at M9 is a rename across an engine, eleven repositories, a docs site and every install one-liner anyone ever posted.tamnd.dev, pointyo.tamnd.devat the docs host. This is a blocker:dx/01section 6 requires every error message URL to resolve, CI-checked, and the domain does not currently existtamnd/yo-swift,tamnd/yo-dart,tamnd/homebrew-tap,tamnd/scoop-bucketdx/16section 7, 2FA everywherecom.tamndon Maven Central,Tamnd.*on NuGet,@tamndand@yodbon npm,tamndon Docker Hub, thetamnd.comverified publisher on pub.devnames.tomlbesideclients.toml, anddx/12section 2's name table generated from itxtask reservewithaudit/plan/apply/verify; idempotent, redacting, one registry per invocation by default0.0.0placeholders under the policy indx/16section 6 — honest, minimal, buildable, superseded within the milestone track. Not squatting, and the difference is written downxtask reserve verifyweekly in CI and in the release trainTwo open questions this closes
yodbis a tombstone. The registry returns 200 with an empty versions map: versions0.0.1-0.0.7published December 2019 and fully unpublished 2020-07-16, no maintainers, no repository. Probe with a0.0.0publish; if refused, file a support request; if that stalls, the name becomes@yodb/coreanddx/12section 2 records the exception rather than quietly keeping the claim.tamnd.devis not registered (tamnd.comis, on Cloudflare, since 2026-05-12). Register the.devand no string in the spec changes; move toyo.tamnd.comand it touchesdx/12,17, every crate'shomepageand every URL in the error catalogue.Credentials live in
~/data/.envat mode 600, at the identity level and not the project level, using each tool's own environment variable name (CARGO_REGISTRY_TOKEN,NPM_TOKEN,GEM_HOST_API_KEY) so no project needs a translation layer.dx/16section 8.Exit
The C 60-second snippet in
dx/09section 1 compiles and runs as written, in 24 lines or fewer, and is run by CI as part of the snippet check.xtask reserve auditshows no row in statefreefor any primary name.yo.tamnd.devresolves, so the error-URL check can pass.Reference:
dx/02-c-abi.md,dx/09-c-and-tier3.md,dx/11-cli-and-shell.md,dx/16-name-reservation.md.