ADR-0026: Exclude user-global esysrepo config from workspace signals
- Status: Accepted
- Date: 2026-07-25
- Deciders: Michel Gillet
Context
ADR-0025 treats .esysrepo/ and
.tools_local/esys/repo/ as first-class workspace signals when walking parents
of product repo R.
LibESys esysrepo also stores per-user / machine-global configuration under
paths that share those directory names (historically ~/.esysrepo/user_config.xml,
and forthcoming layout under .tools_local/esys/repo/user_config.xml). A parent
walk from disposable paths (e.g. pytest temp under the user profile) can reach
$HOME and falsely treat that global config tree as workspace W.
Decision
When evaluating first-class workspace signals from ADR-0025:
.esysrepo/is a workspace signal only if the directory exists and does not containuser_config.xmlat its root..tools_local/esys/repo/is a workspace signal only if the directory exists and does not containuser_config.xmlat its root.
Presence of user_config.xml means user-global (or non-workspace) esysrepo
state — ignore that ancestor for workspace discovery and continue the parent
walk (or fall through to single-repo mode).
All other ADR-0025 signals and rules are unchanged.
Consequences
Positive
- Parent walks remain safe under
$HOMEand similar profiles that host global esysrepo config. - Aligns discovery with the planned move of esysrepo local state into
.tools_local//.tools/.
Negative
- Workspace checkouts must not place a top-level
user_config.xmlinside their workspace.esysrepo/or.tools_local/esys/repo/if they intend those directories to count asWsignals.
References
Amends
- ADR-0025 — exclude user-global
user_config.xmltrees from.esysrepo/and.tools_local/esys/repo/signals
Amended by
- (none)
Supersedes
- (none)
Superseded by
- (none)