# EPICS Phoebus 4.7 and `lsi`/`lso` `.$` PV names
**Subject:** Phoebus 4.7 — `lsi`/`lso` long strings, `.$` PV names, and macro “not fully resolved” warnings
---
Hello,
I am wiring a PyDevice IOC for TAS scan plotting (Phoebus OPI + `lsi`/`lso` path PVs) and hit a mismatch between **EPICS long-string CA access** and **Phoebus Display Builder macro resolution** in Phoebus **4.7.4-SNAPSHOT**. I would like to confirm the recommended
pattern for **editable** full file paths in Phoebus.
## EPICS / CA side (works as documented)
For `lsi`/`lso` with `SIZV` > 40:
- Plain `caget TAS:Plot:SelectedFile` returns only the first **40 characters** (`DBR_STRING`).
- Full path works with the long-string modifier, e.g.
`caget -S TAS:Plot:SelectedFile.$`
or `caget -S TAS:Plot:SelectedFile.VAL$`.
Phoebus widgets need **`format=String`** (format 6) on textentry/textupdate. That part is clear from prior tech-talk threads and SNS training material.
## Phoebus 4.7 issue: `.$` in `pv_name`
Binding the OPI to `$(P)SelectedFile.$` (or `FullFileName_RBV.$`, `ColHeaders_RBV.$`, etc.) **works at runtime** after the display connects — full paths display, FileSelector browse loads data, plot updates.
On **every screen reload**, however, the Phoebus terminal logs warnings such as:
```
Widget 'SelectedFile' (textentry) 'pv_name' is not fully resolved: 'TAS:Plot:SelectedFile.$'
Widget 'GraphData' ... pv0 '$(P)ColHeaders_RBV.$' is not fully resolved: TAS:Plot:ColHeaders_RBV.$
```
Widgets can show a **magenta border** until a PV connects; the border often clears after browse/select.
I traced this to Phoebus macro handling: after `$(P)` expands, the resolved name still contains a literal `$`. `MacroHandler.containsMacros()` treats **any** `$` as an unresolved macro (`indexOf('$') >= 0`). So `TAS:Plot:SelectedFile.$` is flagged even though
it is a valid EPICS channel name, not a Phoebus macro.
## Workarounds we tried
| Approach | Result |
|----------|--------|
| `$(P)SelectedFile.$` with `format=String` | Works at runtime; load warnings remain |
| `ca://$(P)SelectedFile.VAL$` | Same — still contains `$` |
| Display macro `LONGSTR=.$` → `$(P)SelectedFile$(LONGSTR)` | **Fails** — macro value `.$` triggers `Incomplete macro expansion LONGSTR='.$'` |
| `{"longString":true}` modifier | Avoids `$` in the name, but default `pv_name_patches` strips it; unclear if that restores full-length CA reads for `lso` |
## Current workaround: CHAR waveform PVs (pcaspy style)
We followed the **pcaspy** / `plotData.bob` pattern: `waveform` with `FTVL=CHAR`, Phoebus `pv_name` without `$`, `format=String`:
- `SelectedFilePath`, `FullFileNameText`, `ColHeadersText`, `CommandText`, `DataFileText`
This **removes all Phoebus load warnings** and readback/display work well.
**Open problem:** `SelectedFilePath` is **not yet writable from the Phoebus File textentry** (browse via FileSelector and plot reload otherwise work). We use PyDevice `INP` with `('VAL', 'TPRO')` on the waveform record; Python `set_selected_file()` runs in
unit tests but screen writes do not reach the IOC the same way `lso` `OUT` does.
Legacy `lso SelectedFile` + `caput -S ….$` still works from the shell.
## Questions for the community
1. What is the **supported Phoebus 4.7** `pv_name` for an **editable** `lso`/`lsi` path field (full read/write, no load warnings)?
2. Are the `not fully resolved` warnings for `.$` **expected/harmless**, or is there a preferred syntax (site preference, escape sequence, `ca://` variant) we missed?
3. For **PyDevice** (or soft IOC) paths, is **writable CHAR waveform** the recommended substitute for `lso`, or is there a better record/link pattern for Phoebus writes?
4. Has this improved in Phoebus **5.x** or newer Jackie/PV layers?
Environment: EPICS base 7.x, PyDevice IOC, Phoebus 4.7.4-SNAPSHOT, Channel Access (no PVAccess on this IOC yet). Example path length ~90 characters; `SIZV=255`.
Thanks for any pointers to documented practice or OPI examples that handle long `lso` paths without `$` in the Display Builder `pv_name`.
Best regards,
Kazimierz Gofron
P.S. Phoebus messages
WARNING [org.csstudio.display.builder.model] Widget 'SelectedFile' (textentry) 'pv_name' is not fully resolved: 'TAS:Plot:SelectedFile.$'
WARNING [org.csstudio.display.builder.model] Widget 'SelectedFile' (textentry) 'tooltip' is not fully resolved: 'Full path; browse, paste, or edit (lso SelectedFile.$)'
WARNING [org.csstudio.display.builder.model] Widget 'FileSelector' (fileselector) 'tooltip' is not fully resolved: 'Browse for scan file (writes SelectedFile.$)'
WARNING [org.csstudio.display.builder.model] Widget 'FullFileName' (textupdate) 'pv_name' is not fully resolved: 'TAS:Plot:FullFileName_RBV.$'