@@ -48,3 +48,57 @@ You are working in the tasking project.
before writing anything to live state.
Afterward, execute the plan! Be sure to enjoy yourself. :)
```
Step 0 — aggregator dry-run: clean
Files committed (~/bootstrap commit 9f7c12c on vtwin):
- epics/dump-deps.mk — GNU-make helper that -includes an IOC's configure/RELEASE[.local] chain and dumps /home/controls/* paths. Filters by $(origin VAR) so PATH/PYTHONPATH/MAMBA_EXE etc. from the env don't leak.
- epics/build_modules.sh --show-only — walks applications/*/configure/RELEASE[.local], classifies each unique path to the matching git-release.sh invocation, canonicalizes deep paths (e.g. common/lakeshore/main/lakeshore336 → common/lakeshore/main + NOTE:
lakeshore336). Refuses to run without --show-only.
Dry-run results on bl4b-vtwin1:
┌───────────────────────────┬───────┐
│ metric │ count │
├───────────────────────────┼───────┤
│ apps scanned │ 62 │
├───────────────────────────┼───────┤
│ apps skipped (no RELEASE) │ 5 │
├───────────────────────────┼───────┤
│ raw paths harvested │ 719 │
├───────────────────────────┼───────┤
│ filtered non-module │ 5 │
├───────────────────────────┼───────┤
│ classified unique modules │ 80 │
├───────────────────────────┼───────┤
│ UNHANDLED │ 0 │
└───────────────────────────┴───────┘
All 4 plan §13 step 0 sanity checks pass:
1. Every unique path classifies to exactly one rule — confirmed
2. Zero UNHANDLED lines — confirmed (synthetic UNHANDLED test verified exit=1 path works)
3. Core modules present — base, asyn, autosave, seq, streamdevice, ioc-stats, busy, calc, sscan all in the classified set
4. $(SUPPORT)/$(TOP)-style variable references resolve — bl4b-Det-nED's 3 explicit prod/common/ paths resolve correctly; dump-deps.mk auto-includes the transitive $(TOP)/../../RELEASE.local chain without needing to pre-seed anything
Skipped apps (no configure/RELEASE*): bl4b-AdaraMonitor, bl4b-EICManager, bl4b-ExperimentPlanning, bl4b-IPTS, bl4b-PlanNewExp — these match the plan's skip list for stub/Python-only IOCs, plus bl4b-EICManager which is a config-only IOC that installs symlinks via its
own Makefile (plan §6.4 skip list may want to add it).
NOTE: lines worth eyeballing before step 1 (not errors, but flagged for operator review):
- common/vdet/merge with subpath bl4b — merge may be a branch, not a tag; likely a vdet special case
- prod/motion/rel1.11_20170630 and prod/motion/rel1.16_20181120 both with subpath bl4b — beamline-private layout inside the motion module; these might need a manual classifier exception
- common/base/main with subpath templates/makeBaseApp/top — this is TEMPLATE_TOP, the canonicalization correctly resolves it to base/main
- seq has three versions in play: main, rel2-0-14, rel2-2-9 — used by HighLevel, Det-Timing, and ProcServ respectively
Next up per plan §13: step 1 — create iocs/epics-controls-env.service and the controls-env target ("smallest, safest, highest-value" change). Want me to proceed, or would you like to review the classified module list and the NOTE: entries first?
```
## Prompt 1.3
Ok, regarding points raised in the NOTE:
Re: common/vdet/merge) I removed that dependency from bl4b-Det-nED IOC; it wasn't used other than to document its use. In the future we will need to deal with, so let's begin a plan/todo.md file to capture such things. For VDET it is needed to provide a time stream for nED when it is not connected to the accelerator timing system.
Re: prod/motion/*/*) This module appears to reference a folder within the version. Thus, the parser needs a special case handling for the module 'motion' because the 'tag' is 'tag/${BEAMLINE}'. I apologize, the software developers are crafty in their effort to create complexity and stifle automation (/jk). This will need to be dealt with because this will be a common pattern. Lets revise the plan before we move on, thank you for flagging it.
Re: bl4b-EICManager) Yes, lets add this to the skip list in §6.4
Please update the ~/bootstrap code with the above revisions.