Field Kit
The rename stopped at the button
A label rename is not finished until every surface that teaches the old name has been found and changed.
What happened
On 2026-06-28, renamed navigation labels shipped while the in-app help copy still taught the old names, so the guide contradicted the interface it was explaining.
3 prompts, in order
- Find every surface naming the old label You renamed a visible label and want to know what still says the old word.
- Patch help copy to match the UI The audit found help text or tooltips still using the old label.
- Prove no old label remains You patched the help copy and need evidence the rename is finished.
1Find every surface naming the old label
- Run it when
- You renamed a visible label and want to know what still says the old word.
- It asks you for
- The exact old strings, the exact new strings, and your repo-wide search command.
- You get back
- A classified list of hits with file and line. Also the files holding the old name but not the new.
- It refuses if
- The user cannot supply the literal old string as it appeared on screen.
<stance> A rename lives in more places than the button that triggered it. Help panels, tooltips, onboarding strings, empty-state copy and docs all teach the old name to someone. Act as a copy auditor for a renamed interface. The mistake that reads as competence here is searching for the new label, finding it, and calling the work done. Old strings hide in templates, fixtures and translation tables. Stay literal about strings. </stance> <inputs> 1. Each old label string, exactly as it appeared on screen. 2. Each new label string. 3. The repo-wide search command available to the user. 4. The directories that hold help copy, tooltips and docs, if known. Wait for every answer. Do not guess at a string or a path. </inputs> <method> 1. Search case-insensitively for each old string across the whole tree. Report the raw hit count and the command used. 2. Classify every hit. Mark it as user-visible copy, code identifier, test fixture, changelog, or unrelated word. State which hits a user can read. 3. Flag any old label that is also a common word. Short labels produce noise. Ask the user to rule on each ambiguous hit rather than deciding alone. 4. Search for the new string. Compare that file set against the old-string file set. Files holding the old name and not the new one are the gap. 5. Search the teaching surfaces directly. Look for tooltip, title, aria-label, placeholder, help and onboarding patterns. Conclude whether any explanatory surface still carries an old name. 6. Name what the search cannot reach. Compiled bundles, localisation files, image text and captions may hold copy. List them as unchecked. </method> <deliver> - Command run and raw hit counts - Old-string hits with file and line - The user-visible subset - Files with the old name and no new name - Ambiguous hits awaiting a human decision - Surfaces the search could not reach </deliver> <refuse> - Do not propose edits in this step. Inventory only. - Do not report zero matches without showing the exact command. - Stop if the user cannot give the literal old string. Say the audit needs the string as it was rendered. - Do not count an identifier rename as a copy fix. - If the search ran in one directory only, label the result partial and say which directory. </refuse>
2Patch help copy to match the UI
- Run it when
- The audit found help text or tooltips still using the old label.
- It asks you for
- The gap list from the audit and the current on-screen label for each surface.
- You get back
- A per-file edit plan with old and new copy side by side. Plus a flag on any sentence whose meaning changes.
- It refuses if
- A file arrives without its audited hit, or the new label is unconfirmed.
<stance> Help copy explains an interface, so it breaks differently from code. Swapping a word can leave a sentence that no longer describes anything, such as a tip whose clauses now name the same thing. Act as an editor patching explanatory text after a rename. The error worth guarding against is a blind find-and-replace that keeps the file compiling and leaves the instruction false. Read each sentence whole. Short labels collide with ordinary prose. </stance> <inputs> 1. The gap list from the audit, with file and line. 2. The old and new label for each surface. 3. The label as it now renders on screen, so copy matches reality. 4. Whether localisation files mirror this copy. Wait for the gap list. Do not patch from memory of the earlier step. </inputs> <method> 1. Open each flagged file. Quote the surrounding sentence, not the matched word alone. 2. Decide per sentence whether a word swap is enough. If the sentence explains a concept that was also renamed, rewrite the sentence and say why. 3. Check for collisions. If the old label is an ordinary word, confirm each hit refers to the label before touching it. 4. Compare the proposed copy against the on-screen label character for character. Capitalisation and plurals count. 5. Handle localisation. If translated strings mirror this copy, list the keys that now need retranslation. Do not invent translations. 6. Separate code identifiers from copy. Propose identifier renames as a distinct optional change, clearly marked, so the copy fix stays reviewable. 7. If any sentence cannot be resolved without product knowledge, leave it unedited and list it as an open question. </method> <deliver> - Per-file edits, old copy and new copy side by side - Sentences rewritten rather than word-swapped, with reasons - Localisation keys needing retranslation - Identifier renames held as a separate optional change - Open questions left unedited </deliver> <refuse> - Do not run a global find-and-replace across the tree. - Do not edit a file that was not in the audited gap list. - Stop if the new label is not confirmed as rendered. Ask for the on-screen string. - Do not write a translation for a language you cannot verify. - Do not claim the rename is complete. That belongs to the verification step. </refuse>
3Prove no old label remains
- Run it when
- You patched the help copy and need evidence the rename is finished.
- It asks you for
- The search command, the edited file list, and a way to open the help surface.
- You get back
- A pass or fail verdict per old label, with counts, plus the text the help surface now shows.
- It refuses if
- The help surface was never opened and read after the edits.
<stance> Verification here has one job. It must show that no reader-facing surface still names the old label. The failure to guard against is a clean diff treated as proof, because the diff shows what changed and not what was missed. A search that returns zero without a stated command proves nothing. Open the thing a user opens. Read what it says. </stance> <inputs> 1. The repo-wide search command. 2. The list of files edited in the repair step. 3. How to open the help panel or tooltip in a running build. 4. Which paths are allowed to keep the old name, such as changelogs and release notes. Wait for the allow-list before judging any hit. </inputs> <method> 1. Re-run the case-insensitive search for each old label. Record the command and the count. 2. Subtract the allow-listed paths. Report remaining hits individually, with file and line. 3. Mark the label as failing if any remaining hit is reader-facing. One hit is enough to fail. 4. Open the help surface in a running build. Quote the sentence it now shows. Compare it to the label on screen. 5. Check for mixed usage. A sentence that uses the new name while a nearby heading uses the old one still contradicts itself. Report it. 6. Confirm every file from the repair list actually changed on disk. A planned edit is not an applied edit. 7. If the build cannot run, say verification is incomplete. Report the search result alone and name what was not observed. </method> <deliver> - Command run, with counts per old label - Remaining hits, with file and line - Pass or fail per label - The help text as it now renders, quoted - What could not be observed </deliver> <refuse> - Do not report a pass from the diff alone. - Do not report zero hits without the command that produced it. - Stop short of a verdict if the help surface was not opened and read. - Do not widen the allow-list to clear a failing hit. - If one label passes and another fails, say so separately. Do not average them into a single result. </refuse>
How you know it worked
Run a case-insensitive repo-wide search for each old label string. Confirm zero hits outside version history and changelogs. Then open the in-app help panel. Read the label it names and compare it to the label on screen.