You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
The word is scope, not target: TargetName, TargetSpec, TargetOrder, TargetHome and TargetSystem become Scope*, and writ.targets becomes writ.scopes; a target stays a path #925
Epic:#451 · Feature:#762 The writ lifecycle surface · Schedule:#916, lane 6, PR C
The ruling (#762, 2026-08-31; this lane ruled 2026-09-23)
The word is scope, not target. Language matters. A scope is a named execution context: a name, a target
root, a confinement boundary, an elevation posture, and its own graph (2.4-hermeticity-guarantees.md is the
authority). A target is a destination path -- where one file lands. The code uses Target for both, four lines
apart in one file: builder.go:49"Target is the absolute path to the target file"; builder.go:57 "TargetName is the target scope". A reader cannot tell from the word which is meant, and the lifecycle work that
follows (--scope, per-scope elevation, the lifetime as a whole writ deploy invocation across scopes) needs the
word to mean one thing.
The rename
From
To
Why
TargetName
ScopeName
it names a scope
TargetSpec
ScopeSpec
it describes a scope: name, root, elevation
TargetOrder()
ScopeOrder()
the order scopes run in
TargetHome() / TargetSystem()
ScopeHome() / ScopeSystem()
the two builtin scopes
writ.targets
writ.scopes
config key, user-visible; the schema and the defaults, both
TargetRoot
unchanged
it is a path: the scope's root directory
Target, Entry.Target
unchanged
it is a path: where the file lands
Mechanical; no behavior changes. Doc comments, test names and error strings that say "target" for a scope change
with the identifiers. builder.go:49 and :57 then read as two different words for two different things.
Acceptance
no identifier in cmd or pkg says Target where it means a scope; TargetRoot, Target and Entry.Target remain, and each's doc comment says it is a path
writ.scopes in schema/devlore-config.json and schema/defaults/writ.yaml; writ.targets refused
every error string and narration line that names a scope says "scope"
make check green; both VMs: deploy common noblefactor-ops, upgrade, unchanged results
Activity
fix(writ): the writ.targets refusal stops only the lifecycle commands…