M3-53 + M3-58: name a memo, and let somebody change the name #61
No reviewers
Labels
No labels
area/agent
area/capture
area/editor
area/geo
area/security
area/sync
area/transcription
area/ui
area/vault
area/voice-memos
blocked
milestone/M1
milestone/M2
milestone/M3
milestone/M4
needs-decision
needs-hardware
p0
p1
p2
type/bug
type/enhancement
type/feature
type/idea
type/infrastructure
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Stash/stash-ios!61
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "m3-53-memo-titles"
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?
Closes #53. Closes #58.
Two issues in one PR, which is Wes's call on both — recorded in
.agent/m3-53-memo-titles/PLAN.mdand
PLAN-58.mdrather than argued. It runs past the fifteen-to-twenty-minute review the buildstandard asks for.
Auto-naming (#53)
A memo gets a short title taken from what was said in it, generated on the phone, opt-in and off by
default. The title is a fourth file —
<base>_title.txt, one line of UTF-8 — because the capture'sown filename is a cross-client contract that vault inbox processing already reads. Three tiers: the
Foundation Models tier where the phone can run it,
NLTaggerkeywords everywhere else, and theopening line when the tagger finds nothing. Turning the switch on names the memos already on the
phone, newest first.
Editing a name (#58)
A Name field in the detail screen's header. A generated title is a guess about somebody's words
and is sometimes wrong in a way only the person who recorded the memo can see.
TitleFile.writekeeps its claim semantics —link(2)into place, refuses to overwrite, which iswhat stops two naming passes fighting over one memo. Editing gets its own path rather than a flag on
that one:
replacerenames over whatever is there,removetakes the file away, and both check thekind of what is under the name first.
Clearing the field removes the file, which leaves the memo eligible for auto-naming again. The
generator skips a memo whose title file exists, so with the switch on a cleared title comes back on
the next pass. Clearing says this title is wrong; the switch in Settings says do not name my
memos. That is deliberate and it is the one part of this that surprises.
Nothing marks a typed title as different from a generated one, and nothing needs to — the file
existing is the whole rule.
What was validated
make test— 839 tests, green.make lint— clean..agent/m3-53-memo-titles/, with every finding's disposition inSUMMARY.mdandSUMMARY-58.md. The reviews found real faults in both halves: a killed titlewrite stranding the whole title in a file nothing recognised, a naming pass that could publish a
stale title over an edit, an edit that could outlive a deletion,
MemoTitlevalidating a candidateand returning something else, and a
renamethat would have destroyed a symbolic link.What was not validated
clicks do not land as touches and there is no UI test target here — so typing, clearing, the
sixty-character clamp, the refusal sentence, Return and tap-away-to-commit are covered only
underneath, through
MemoLibraryandTitleFile. Nothing has exercised the SwiftUI wiring.is a structural guarantee rather than a tested one; two windows on one memo; a title edited over
the cable with the screen open.
Both gaps are listed in full in
SUMMARY-58.mdunder Not tested.🤖 Generated with Claude Code