project: read manifest sources and registries as Uri (URI slice 9) #26
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
source "...", git:/archive:/path:andregistry "...", url:are read asUris when the manifest is evaluated, and the lock records the canonical form.Source
Acceptance criteria
Uris with URI errors at the manifest's lineDependencies
None known.
Moved from the planning lists of the docs; the design record stays the specification.
git:andarchive:sources #27[loop:torbscript] intake: in scope (author orion, label loop). Implements URI.md slice 9; the design record is the specification. Changes the lock format (canonical URI form), so a breaking-change and seed-impact check is due in refine; owner decision if the lock version must change. Release freeze for 0.1.0 (2026-10-06) holds new PRs, next: refine (queued)
[loop:torbscript] claim refine by session:loop-torbscript-20261008 until 2026-10-08T14:45:00Z
[loop:torbscript] owner decision: slice 9 reads three kinds of value as
Urithat the design record does not settle, and one of them changes the lock bytes.Findings (repository at
4c6bbc4)git:/archive:/path:andregistry ... url:becomeUris. Section 10's table lists onlygit:,archive:andregistry url:; section 11's table says "git:/path:/archive:... the value is aUri".path:is a project-relative directory (source "acme/y", path: "../y", PROJECT.md section 7) andcompiler/src/cli/packages.trbjoins it with the member directory, so aUricannot hold it (std/urirefusesfile:x-style relative forms and aUrihas no..).file:registry is a relative directory:registry "acme", url: "file:../registry"(fixtures intests/packages/*, RELEASE.md section 7.5,compiler/src/package/fetch.trb).Urinormalization removes dot segments (RFC 3986 section 6.2.2), so the canonical text offile:../registryisfile:registry, a different directory. Reading it as aUrieither breaks everyfile:registry or needs a rule the record does not have.https://packages.torb.devishttps://packages.torb.dev/(std/uri/src/uri.trbline 181: an authority with an empty path gets/). The lock'sregistry:field (compiler/src/package/lock.trb,package "x", version:, registry: "https://packages.torb.dev", hash:) andpublicRegistryhold the form without the slash today. "The lock records the canonical text" therefore changes the bytes of every existing lock with a registry package (this repository's own locks,tools/registry/project.lock.trb, published locks), andtorb lock --check(a tier A gate) and the registry-binding comparison report a mismatch until the locks are rewritten. That is a lock-format change and a breaking one for existing locks.git:andarchive:rows are not written to the lock yet and the resolver refuses both sources (PROJECT.md section 11 "As built"), so for them slice 9 only types the value and reports a bad URI at the manifest line; there is nothing to record.std/uri).Options
git:,archive:and everyhttp(s)registry url:areUris, errors at the manifest line. Aregistry url:that starts withfile:keeps its relative directory form (read asPathafter the prefix) and is locked as written;path:stays aPath. The lock writes the canonicalUritext forhttp(s)registries, with the trailing-slash form accepted when reading an old lock, andtorb lockrewrites it once;publicRegistrybecomeshttps://packages.torb.dev/. PROJECT.md section 11 and URI.md slice 9 get one sentence each saying so.Urionly validates. Smaller, but "the lock records the canonical form" in the issue is dropped and two spellings of one registry would lock differently.file:andpath:, becomes aUriorUriReferenceandstd/urilearns to keep dot segments for a rootlessfile:path. Widens a publicstd/urirule and breaksfile:fixtures; not recommended.Recommendation: A. Until it is answered the issue stays out of
ready; as soon as an answer is recorded I will write the acceptance criteria against it.Question q1 for torben (decision, blocking): How are the manifest's
file:registries,path:sources and the registry URL's lock form handled by URI slice 9?[loop:torbscript] refine: not ready, split of open points into one owner decision (q1:
file:registries,path:sources and the lock form of the registry URL under URI slice 9), next: waiting (owner decision q1)[loop:torbscript] owner decision recorded (torben via WhatsApp, 2026-10-08 16:35 Europe/Berlin): "Musst du entscheiden" (Orion decides).
Decided: option A.
Uriforgit:,archive:and http(s) registries with errors at the manifest line; the http(s) registry is locked as canonical Uri text (trailing slash), old locks are read and rewritten once bytorb lock;file:registries keep their relative directory form andpath:stays aPath. Reason: B drops the canonical-form criterion, C breaks thefile:fixtures and widens std/uri for no user gain. Labelledready.[question-closed] q=q1 reason=answered-elsewhere
[loop:torbscript] claim implement by session:loop-torbscript-20261008 until 2026-10-08T23:47Z
[loop:torbscript] implement: PR #216 is open at
3bc8c81f, and CI is running; the final result follows here. It landed option A:git:,archive:and http(s) registry URLs are read asUri, and problems are reported at the manifest line. The lock records the canonical text (https://packages.torb.dev/), andtorb lockrewrites an old lock once.file:is kept relative andpath:stays a directory. There is no seed step. next: waiting (CI)git:andarchive:sources #27