Fix boundary parser Docker path: handle /app/sx/boundary.sx layout

In Docker, each service's sx/ dir is copied directly to /app/sx/,
not /app/{service}/sx/. Add fallback search for /app/sx/boundary.sx
alongside the dev glob pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-06 12:47:50 +00:00
parent 44d5414bc6
commit 07a73821e7

View File

@@ -36,13 +36,22 @@ def _ref_dir() -> str:
def _project_root() -> str:
"""Return the project root (3 levels up from shared/sx/ref/)."""
"""Return the project root containing service directories.
Dev: shared/sx/ref -> shared/sx -> shared -> project root
Docker: /app/shared/sx/ref -> /app (shared is inside /app)
"""
ref = _ref_dir()
# shared/sx/ref -> shared/sx -> shared -> project root
# Go up 3 levels: shared/sx/ref -> project root
root = os.path.abspath(os.path.join(ref, "..", "..", ".."))
# In Docker the layout is /app/shared/sx/ref -> /app
if not os.path.isdir(root):
root = os.path.abspath(os.path.join(ref, "..", ".."))
# Verify by checking for a known service directory or shared/
if os.path.isdir(os.path.join(root, "shared")):
return root
# Docker: /app/shared/sx/ref -> /app
# shared is INSIDE /app, not a sibling — go up to parent of shared
root = os.path.abspath(os.path.join(ref, "..", ".."))
if os.path.isdir(os.path.join(root, "sx")): # /app/sx exists in Docker
return root
return root
@@ -98,12 +107,25 @@ def _extract_declarations(
def _find_service_boundary_files() -> list[str]:
"""Find all {service}/sx/boundary.sx files in the project."""
"""Find service boundary.sx files.
Dev: {project}/{service}/sx/boundary.sx (e.g. blog/sx/boundary.sx)
Docker: /app/sx/boundary.sx (service's sx/ dir copied directly into /app/)
"""
root = _project_root()
pattern = os.path.join(root, "*/sx/boundary.sx")
files = glob.glob(pattern)
# Exclude shared/sx/ref/ — that's the core boundary
return [f for f in files if "/shared/" not in f]
files: list[str] = []
# Dev layout: {root}/{service}/sx/boundary.sx
for f in glob.glob(os.path.join(root, "*/sx/boundary.sx")):
if "/shared/" not in f:
files.append(f)
# Docker layout: service's sx/ dir is at {root}/sx/boundary.sx
docker_path = os.path.join(root, "sx", "boundary.sx")
if os.path.exists(docker_path) and docker_path not in files:
files.append(docker_path)
return files
# ---------------------------------------------------------------------------