Skip to main content

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:

  1. .esysrepo/ is a workspace signal only if the directory exists and does not contain user_config.xml at its root.
  2. .tools_local/esys/repo/ is a workspace signal only if the directory exists and does not contain user_config.xml at 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 $HOME and 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.xml inside their workspace .esysrepo/ or .tools_local/esys/repo/ if they intend those directories to count as W signals.

References

Amends

  • ADR-0025 — exclude user-global user_config.xml trees from .esysrepo/ and .tools_local/esys/repo/ signals

Amended by

  • (none)

Supersedes

  • (none)

Superseded by

  • (none)