Repository navigation
The implicit projects are common and one per configured layer repository; a repository-named project in any layer deploys unnamed #850
Description
Feature: #463 — writ command surface: layers, segments, adoption. A design point ruled 2026-09-06 (recorded on
#463), to become code, a design-record entry (#849), and an integration test.
The rule
The project selection of a deploy is: common, plus one project per configured layer repository, named for the
repository, plus every project named on the command line. A repository-named project may live in any layer's
Home — a personal Home/devlore-cli is the personal layer's overrides for working with that repository — and it
deploys with its suffix chain like every other project.
With base = noblefactor-ops, team = devlore-cli, personal = personal, on Darwin, a bare writ deploy overlays, per
layer in order:
Home/common{,.Unix,.Darwin}
Home/noblefactor-ops{,.Unix,.Darwin}
Home/devlore-cli{,.Unix,.Darwin}
Home/personal{,.Unix,.Darwin}
and writ deploy noblefamily adds Home/noblefamily{,.Unix,.Darwin} on top, from every layer that has it.
Today
withCommonProject (from the implicit-common plan, 2026-08-09) injects common into deploy and upgrade selection and
nothing else. writ deploy requires at least one project argument (cobra.MinimumNArgs(1)), so the bare form in the
ruling does not run at all. The repository's name is the layer registration's business: #793 rules that a clone is
named the way git clone names it, and that name is the one this rule uses.
Acceptance
-
writ deploywith no argument deploys the implicit set alone;writ upgradeselects the same way; decommission
stays explicit - the implicit set is
commonplus the configured layers' repository names, resolved from the registrations
(a path-registered layer contributes its directory's name, a URL-registered one its clone's name per writ names a cloned repository by its layer; it should name it the way git clone does #793) - a repository-named project in any layer is included, with its suffix chain
- a project named on the command line is added, from every layer that carries it; an unknown name is an error
naming it - an integration test: three fixture layers,
personal/Home/devlore-clipresent,commonpresent in all three,
noblefamilyin personal only; a bare deploy links the first two and not the third;deploy noblefamily
links all three; the plan narrates which projects were implicit and which were named - the design record (The writ design record states the layer overlay, the implicit common project, the suffix chain, and the manifest union in one place #849) states the rule and the example;
docs/guides/writ/repositories.mdand
platform-awareness.mdagree
Related
#849 (the design record), #793 (clone naming), #814 (manifests combine across all of these directories too),
the implicit-common plan docs/plans/implicit-common-project.md.
Selection is persistent (USER, 2026-09-06)
Deploy adds a named project to the machine's selection and converges the whole set; the reading to confirm is that the store is the record (a project is selected while it has entries). Open before ruling: a project that deploys no file on this platform (only a .Windows variant, deployed on a Mac) records nothing and would not be remembered — if that matters, selection needs its own record. No --only. Decommission is #851.
Ruled 2026-09-23 (schedule #916, lane 10, PR D; waits on #843, lane 9)
The rule above stands as recorded. With #843 the bare form runs, and with #926 it runs on every scope defined on
this platform.
Activity
David-Noble-at-work commentedon Sep 7, 2026
#843 is the open bug this closes —
writ deploywith no project refusing onMinimumNArgs(1)whileconfig.go:37already handles the empty list. Restated by the user 2026-09-07 against build155067ae. noblefactor-ops's README states the bare form and names #843 as the interim.test(writ): the layer-journey scenario -- self install, repo set, dep…
David-Noble-at-work commentedon Sep 8, 2026
The layer-journey scenario (#855,
cmd/writ/scenario_layer_journey_test.go, landed in #859) is this issue's acceptance test: steps 2.1, 2.6 and the seven layer subsets runs the ruled interface and skips by this issue's number until the binary has it, on all six legs of thescenariojob. When this lands, that skip turns into a pass without the scenario changing — and if it does not, the failure message names the step.David-Noble-at-work commentedon Sep 26, 2026
Ruled 2026-09-26 (lane 10, PR B with lanes 4 and 9)
The bare form is
writ deploy common, and it remembers everything it deployed. The record is the selection: aproject stays selected while the record holds a file of it; a project that put no file on this machine has nothing
to be remembered by. No selection record beside the receipts. (An earlier version of this comment read the ruling
the other way; this is the correction.) Lane 10 was taken into PR B beside lane 9 on 2026-09-24; PR D is retired.
Plan:
docs/plans/task/850-implicit-projects.md.feat(writ): bare writ deploy deploys the implicit set -- common, one …
Reconcile's three exit codes, and a bare writ deploy that deploys the…