From 49436efe1f3c20e63253ef8d582069630b2b61b1 Mon Sep 17 00:00:00 2001 From: Matthew James Briggs Date: Sun, 28 Jun 2026 17:40:41 +0200 Subject: [PATCH 1/2] fix CI: pin DOCKER_VOLUME for bind-backed volume --- .github/workflows/ci.yaml | 7 +++++++ Makefile | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a95d1fcc7..a099245d8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,6 +13,13 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} +# Pin the Docker build-volume name so CI's bind-backed "mx-build" volume +# (created per-job below) is the one the Makefile actually mounts. Without +# this the Makefile computes a CURDIR-hashed name (for worktree isolation) +# that doesn't match the pre-created volume. +env: + DOCKER_VOLUME: mx-build + jobs: linux-gen: name: Linux (generator gates) diff --git a/Makefile b/Makefile index f97324315..158286bc6 100644 --- a/Makefile +++ b/Makefile @@ -39,8 +39,9 @@ DOCKER_CACHE := --cache-from type=gha --cache-to type=gha,mode=max endif # Docker SDK image + build volume. Incremental state persists across runs. +# Volume name includes a path hash so parallel worktrees get isolated caches. DOCKER_IMAGE := mx-sdk -DOCKER_VOLUME := mx-build +DOCKER_VOLUME ?= mx-build-$(shell printf '%s' '$(CURDIR)' | md5sum 2>/dev/null | cut -c1-8 || printf '%s' '$(CURDIR)' | md5 -q | cut -c1-8) DOCKER_STAMP := $(BUILD_ROOT)/.docker-image-stamp # Prevent root-owned files on Linux. From 6f197db8b2c196ecce4ad99e795915180881048e Mon Sep 17 00:00:00 2001 From: Matthew James Briggs Date: Sun, 28 Jun 2026 17:49:02 +0200 Subject: [PATCH 2/2] fix: parseWords never sets isColorSpecified --- src/private/mx/impl/DirectionReader.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/private/mx/impl/DirectionReader.cpp b/src/private/mx/impl/DirectionReader.cpp index ebf04df26..c94f71beb 100644 --- a/src/private/mx/impl/DirectionReader.cpp +++ b/src/private/mx/impl/DirectionReader.cpp @@ -416,7 +416,11 @@ void DirectionReader::parseWords(const core::DirectionType &directionType) api::WordsData outWords; outWords.text = wordEl.value(); outWords.positionData = getPositionData(wordEl); - outWords.colorData = getColor(wordEl); + outWords.isColorSpecified = wordEl.color().has_value(); + if (outWords.isColorSpecified) + { + outWords.colorData = getColor(wordEl); + } outWords.fontData = getFontData(wordEl); if (wordEl.enclosure().has_value()) {