Repository navigation
The conflict policy's vocabulary drifts: writ deploy's Examples and the guide name backup and overwrite, which the flag rejects, and three comments call two different defaults the floor #899
Description
Feature: #836 — the file provider, whose write seam defines the policy and its words. Two of the six sites are
writ's surface (#463); the words are the seam's.
The drift
--conflict has three names — stop, skip, replace — and ParseConflictPolicy
(pkg/op/runtime_environment.go:794) rejects any other: invalid conflict policy %q: must be stop, skip, or replace.
The seam's floor is replace (NewRuntimeEnvironmentConfig, runtime_environment.go:841); writ deploy's flag
default is stop. Six sites say otherwise, enumerated 2026-09-20 at ad2219ef:
Policy names that do not exist
cmd/writ/writ/commands.go:45-46— thewrit deployExamples:--conflict=backup,--conflict=overwrite.
docs/cli/writ/deploy.mdis generated from that text and carries them into the reference.docs/guides/writ/manage-environments.md:36-41— the same two, captioned "Back up conflicting files with
timestamps" and "Overwrite without backup". Neither describes anything writ does:replacearchives the occupant
to the recovery site, restorable.pkg/op/runtime_environment.go:58and:819—BackupSuffix"appended to back up filenames during conflict
resolution". Conflict resolution never suffixes; it archives. The field servesfile.backup.
The default, said three ways
pkg/op/provider/file/provider.go:2059—conflictPolicy: "the announced runtime section's floor applies
(ConflictStop)". The floor isConflictReplace.pkg/op/runtime_environment.go:789—ParseConflictPolicy:"""parses as theConflictStopfloor".""is
the flag's zero value and parses asstop, the command line's default; the seam's floor isreplace. Two
different things called "floor".docs/architecture/configuration.md:372— "ConflictPolicy: ConflictStopdirectly — the floor is a compiled-in
default". The compiled-in default isConflictReplace.
Correct as they stand: cmd/writ/writ/deploy/deploy.go:273 ("replace for a cleared default-stop run"), the guide's
"Stop on first conflict (default)" for writ deploy, docs/architecture/3.5.4-file-provider.md §3 and its status
row.
Found planning #822, whose fix puts the same three words into file.mkdir.
The rule
The policy has three names, stop, skip and replace, and no others, everywhere. The seam's floor is replace.
writ deploy's default is stop. "Back up", "overwrite" and "timestamps" are not its vocabulary.
Done when
-
writ deploy --helpanddocs/guides/writ/manage-environments.mdshowstop,skipandreplaceand nothing
else, each captioned with what it does;docs/cli/writ/deploy.mdregenerates to match - the three comments say what the code does:
""parses asstop, the command line's default; the seam's floor
isreplace;BackupSuffixservesfile.backup, not conflict resolution - a search of
cmd/,pkg/,docs/guides/anddocs/architecture/forconflict=(backup|overwrite)finds nothing
Plan and design documents
| Kind | Document |
|---|---|
| Plan | docs/plans/fix/822-mkdir-obeys-conflict.md — lane 13 rides in lane 12's pull request |
| Design | docs/architecture/3.5.4-file-provider.md §3 |
Epic: #887's lane 13, under the command line schedule · Feature: #836
Ticked 2026-09-21, in lane 12's pull request. Sites 1-6 edited as enumerated; docs/cli/writ/deploy.md is not a
repository file (/docs/cli/ is ignored; docs-publish.yaml generates it from source), and a local make docs shows
its Examples as --conflict=replace and --conflict=skip. The pull request script asserts the search finds nothing.
Activity