settings-4: apply Paul's approved copy for the settings.box strings
All ten settings.box.* drafts approved unchanged on 2026-10-12; the approved record is docs/superpowers/plans/2026-10-07-instance-settings-4-copy.json and TestApprovedCopyIsApplied pins it. TODO-COPY markers removed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 files changed,
+19
−2
docs/superpowers/plans/2026-10-07-instance-settings-4-copy.json+16 −0internal/activator/logsink.go+1 −1internal/updatewords/words_box.go+2 −1
diff --git a/docs/superpowers/plans/2026-10-07-instance-settings-4-copy.json b/docs/superpowers/plans/2026-10-07-instance-settings-4-copy.json| new file mode 100644 |
| index 000000000..a19fa1f1d |
| --- /dev/null |
| +++ b/docs/superpowers/plans/2026-10-07-instance-settings-4-copy.json |
| @@ -0,0 +1,16 @@ |
| +{ |
| + "approved_by": "Paul", |
| + "approved_on": "2026-10-12", |
| + "entries": [ |
| + {"id": "settings.box.reason.adopt", "file": "internal/updatewords/words_box.go", "text": "following its channel"}, |
| + {"id": "settings.box.reason.pin", "file": "internal/updatewords/words_box.go", "text": "pinned to %s"}, |
| + {"id": "settings.box.reason.request", "file": "internal/updatewords/words_box.go", "text": "updating to %s (Update now)"}, |
| + {"id": "settings.box.reason.manual", "file": "internal/updatewords/words_box.go", "text": "manual updates: stays on %s"}, |
| + {"id": "settings.box.reason.major", "file": "internal/updatewords/words_box.go", "text": "held at major %d: stays on %s"}, |
| + {"id": "settings.box.reason.unknown", "file": "internal/updatewords/words_box.go", "text": "build unknown: use Update now or set a pin"}, |
| + {"id": "settings.box.reason.new", "file": "internal/updatewords/words_box.go", "text": "new instance: takes the channel's build"}, |
| + {"id": "settings.box.reason.baking", "file": "internal/updatewords/words_box.go", "text": "Update now waits for %s to finish its safety delay on this box"}, |
| + {"id": "settings.box.reason.failed", "file": "internal/updatewords/words_box.go", "text": "%s failed on this box, so it is not installed"}, |
| + {"id": "settings.box.request-failed", "file": "internal/updatewords/words_box.go", "text": "Update now to %s failed: the instance stayed on its previous build"} |
| + ] |
| +} |
diff --git a/internal/activator/logsink.go b/internal/activator/logsink.go| index 9256a744e..47d8a3d00 100644 |
| --- a/internal/activator/logsink.go |
| +++ b/internal/activator/logsink.go |
| @@ -52,7 +52,7 @@ var absPathToken = regexp.MustCompile(`(^|[\s"(=])(/[\w@.\-/]+)`) |
| func memberSafeWakeReason(err error) string { |
| // The held wake check's refusals (settings spec §4.3 rule 3; ruling |
| // R-WAKEWORDS). Unknown and failed need the member's action, so they get |
| - // the settings words (drafts, TODO-COPY until approved; R-COPY). A wait |
| + // the settings words (approved copy, settings plan 4). A wait |
| // for root that ran out, or a repoint after it, is the platform's own |
| // work and reopens by itself: the fence's existing wording. |
| if errors.Is(err, errBuildUnknown) { |
diff --git a/internal/updatewords/words_box.go b/internal/updatewords/words_box.go| index 86934e875..69acbfbae 100644 |
| --- a/internal/updatewords/words_box.go |
| +++ b/internal/updatewords/words_box.go |
| @@ -1,7 +1,8 @@ |
| package updatewords |
| func init() { |
| - // TODO-COPY: draft, awaiting Paul's copy review (settings plan 4) |
| + // Approved by Paul on 2026-10-12, unchanged from the drafts |
| + // (docs/superpowers/plans/2026-10-07-instance-settings-4-copy.json). |
| add( |
| Draft{ID: "settings.box.reason.adopt", Text: "following its channel", Context: "Why an instance runs the build it does: it takes its channel's builds as they arrive. Shown in carlos instances list and on the instance page."}, |
| Draft{ID: "settings.box.reason.pin", Text: "pinned to %s", Context: "The instance is pinned. %s is the build."}, |