From 63d8448197971a854c007fdf574af63546bddb1d Mon Sep 17 00:00:00 2001 From: "Derek J. Russell" Date: Sun, 26 Apr 2026 10:30:02 -0700 Subject: [PATCH 1/3] chore(ci): Remove orphan JARVIS-AI.wiki submodule gitlink MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The repo tree contained a gitlink (mode 160000, commit 99cd9e07d36b840) at JARVIS-AI.wiki/ with no corresponding entry in .gitmodules — likely an accidental `git add` from a sibling local clone. The orphan caused every workflow that runs `git submodule foreach --recursive` to emit: fatal: No url found for submodule path 'JARVIS-AI.wiki' in .gitmodules ##[warning]The process '/usr/bin/git' failed with exit code 128 Two real workflows depended on the wiki being a sibling working tree, NOT a submodule: deploy-wiki.sh clones from https://github.com/drussell23/JARVIS-AI.wiki.git into a local JARVIS-AI.wiki/ directory at deploy time. The orphan gitlink was never the intended representation. Fix: `git rm --cached JARVIS-AI.wiki` removes the gitlink from the index without deleting any local working-tree contents (deploy-wiki.sh remains fully functional). Added JARVIS-AI.wiki/ to .gitignore so it cannot be re-added accidentally. Closes #21795 Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitignore | 3 +++ JARVIS-AI.wiki | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) delete mode 160000 JARVIS-AI.wiki diff --git a/.gitignore b/.gitignore index c9d883aaf3..f874de8d80 100644 --- a/.gitignore +++ b/.gitignore @@ -387,3 +387,6 @@ terraform/terraform.tfvars .jarvis/vision_frames/ .jarvis/vision_cost_ledger.json .jarvis/vision_sensor_fp_ledger.json + +# Local wiki working tree (deploy-wiki.sh clones https://github.com/drussell23/JARVIS-AI.wiki.git here) +JARVIS-AI.wiki/ diff --git a/JARVIS-AI.wiki b/JARVIS-AI.wiki deleted file mode 160000 index 99cd9e07d3..0000000000 --- a/JARVIS-AI.wiki +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 99cd9e07d36b84015e637428c21c78a0b2ed5b9f From a5d4934c09809a6b3fa9058bcfca359e21e0c32b Mon Sep 17 00:00:00 2001 From: "Derek J. Russell" Date: Sun, 26 Apr 2026 10:31:15 -0700 Subject: [PATCH 2/3] chore(ci): Install setuptools+wheel on Mock + Integration testing runners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both jobs in screen-lock-e2e-test.yml fail with `ModuleNotFoundError: No module named 'pkg_resources'` during dependency resolution. Root cause: pkg_resources was removed from the Python 3.12+ stdlib (it now lives only in the setuptools package), and the runner image's `setup-python` action does not pre-install setuptools by default on newer Python versions. Tests never run because the import fails at boot. Fix: extend `pip install --upgrade pip` → `pip install --upgrade pip setuptools wheel` in the two affected jobs (Mock Testing + Integration Testing). The "real" E2E job is unaffected (different setup pattern, runs only on self-hosted runners). Closes #21796 Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/screen-lock-e2e-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/screen-lock-e2e-test.yml b/.github/workflows/screen-lock-e2e-test.yml index 715f7de055..80445a8e50 100644 --- a/.github/workflows/screen-lock-e2e-test.yml +++ b/.github/workflows/screen-lock-e2e-test.yml @@ -175,7 +175,7 @@ jobs: - name: Install Dependencies run: | - pip install --upgrade pip + pip install --upgrade pip setuptools wheel pip install pytest pytest-asyncio pytest-mock pytest-timeout aiohttp # Install project dependencies @@ -931,7 +931,7 @@ jobs: - name: Install Dependencies run: | - pip install --upgrade pip + pip install --upgrade pip setuptools wheel pip install pytest pytest-asyncio aiohttp if [ -f "backend/requirements.txt" ]; then From 7ab0c760a83dfb791e4b746bb13a9c928cd668ae Mon Sep 17 00:00:00 2001 From: "Derek J. Russell" Date: Sun, 26 Apr 2026 10:31:56 -0700 Subject: [PATCH 3/3] chore(ci): Use jq -Rsc for compact GITHUB_OUTPUT in auto-diagram discover MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The discover-diagrams step writes a JSON array of changed files to $GITHUB_OUTPUT via `echo "changed_files=$json" >> "$GITHUB_OUTPUT"`. The runner rejects this format because $GITHUB_OUTPUT's `name=value` writes require a single-line value, but `jq -Rs` emits pretty-printed multi-line JSON by default. Failure log: ##[error]Unable to process file command 'output' successfully. ##[error]Invalid format ' "docs/architecture/OUROBOROS_VENOM_PRD.md"' (The leading whitespace + quote is jq's pretty-print indentation, which is the smoking gun.) Fix: add -c (compact) flag → `jq -Rsc 'split("\n") | map(select(length > 0))'` emits single-line JSON suitable for $GITHUB_OUTPUT. Behavior is otherwise identical — same array shape, same content, just no whitespace. For multi-line outputs that genuinely need newlines, the heredoc syntax (`name< --- .github/workflows/auto-diagram-generator.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/auto-diagram-generator.yml b/.github/workflows/auto-diagram-generator.yml index 649fdb8b78..35ee7f6895 100644 --- a/.github/workflows/auto-diagram-generator.yml +++ b/.github/workflows/auto-diagram-generator.yml @@ -222,9 +222,13 @@ jobs: fi echo "has_changes=$has_changes" >> "$GITHUB_OUTPUT" - # Safely convert changed_files array to JSON, handling empty arrays + # Safely convert changed_files array to JSON, handling empty arrays. + # NOTE: -c flag (compact) is required — $GITHUB_OUTPUT only accepts + # single-line `name=value` writes; jq's default pretty-print emits + # multi-line JSON which the actions runner rejects with + # "Invalid format" and fails the job. if [[ "${#changed_files[@]}" -gt 0 ]]; then - changed_files_json=$(printf '%s\n' "${changed_files[@]}" | jq -Rs 'split("\n") | map(select(length > 0))') + changed_files_json=$(printf '%s\n' "${changed_files[@]}" | jq -Rsc 'split("\n") | map(select(length > 0))') else changed_files_json='[]' fi