Skip to content

Fix the docs deploy: a colon in a test name breaks artifact upload - #365

Merged
TonsOfFun merged 1 commit into
mainfrom
claude/solid-agent-docs-examples-mcm58b
Aug 18, 2026
Merged

Fix the docs deploy: a colon in a test name breaks artifact upload#365
TonsOfFun merged 1 commit into
mainfrom
claude/solid-agent-docs-examples-mcm58b

Conversation

@TonsOfFun

Copy link
Copy Markdown
Contributor

docs.activeagents.ai has not deployed since Aug 14. Every Deploy VitePress site to Pages run on main has failed since #360 — five in a row, including the merge of #364, so the site is still serving pre-delegation content and the SolidAgent section isn't live.

What's wrong

The site builds fine. build-current then dies on the upload:

##[error] The path for one of the files in artifact is not valid:
/parts/examples/delegation-examples-test.rb-test-budgets-layer:-the-agent-wide-ceiling-and-the-per-delegation-limit.html
Contains the following character:  Colon :

doc_example_output names its output file after the test method. test "budgets layer: the agent-wide ceiling and the per-delegation limit" keeps its colon through dasherize, VitePress renders a page at that path, and actions/upload-artifact refuses the characters NTFS can't store (" : < > | * ? \r \n). One bad name rejects the entire artifact, deploy skips, and nothing ships.

The build-versioned (0.6.3) job passes throughout, which is why the run looks half-healthy.

Fix

Sanitize in the helper, not by renaming the test:

DOC_EXAMPLE_UNSAFE_CHARACTERS = /["*:<>?|\r\n]/

def doc_example_filename_safe(name)
  name.to_s.gsub(DOC_EXAMPLE_UNSAFE_CHARACTERS, "-")
end

Renaming the one test would unbreak today and break again the next time someone writes a colon in a test name — and the failure message points at an artifact path, not at the test that produced it. The single @include referencing the old filename moves with it.

Also: the "no status" integration badge

integration.yml was only reachable through workflow_call from ci.yml, and GitHub attributes a called run to the caller — so it had no runs of its own and its README badge read no status no matter how often the suite passed. It now triggers itself on main, and ci.yml calls it for pull requests only: one combined check per PR, and a badge that reflects main.

Testing

  • Regenerated every doc example and scanned: no filename under docs/parts/examples/ contains a rejected character
  • npm run docs:build clean; find docs/.vitepress/dist -name '*[":<>?|*]*' returns 0 — the exact condition that failed
  • bin/rubocop clean (460 files)

The proof this works is the deploy run on merge, since the failure only reproduces inside upload-artifact.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NGn2NzpzFZT4JGKBdFMpxh


Generated by Claude Code

The docs deploy has failed on every push since #360. The site builds fine;
upload-artifact then rejects the whole upload:

  The path for one of the files in artifact is not valid:
  /parts/examples/delegation-examples-test.rb-test-budgets-layer:-the-
  agent-wide-ceiling-and-the-per-delegation-limit.html
  Contains the following character: Colon :

doc_example_output names its output after the test, "budgets layer: the
agent-wide ceiling..." keeps its colon through dasherize, VitePress emits a
page at that path, and the action refuses the characters NTFS cannot store.
So docs.activeagents.ai has been serving pre-#360 content for three days,
including the SolidAgent section merged in #364.

Sanitized in the helper rather than by renaming the test: the next colon in
a test name would otherwise break the deploy again, and nothing in the
failure points at the test that caused it. The one include referencing the
old filename moves with it.

Also fixes the "no status" cross-repo integration badge. A workflow_call
run is attributed to the caller, so integration.yml had no runs of its own
however often it passed. It now triggers itself on main, and ci.yml calls
it for pull requests only, so there is one check per PR and a badge that
reflects main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NGn2NzpzFZT4JGKBdFMpxh
@TonsOfFun
TonsOfFun marked this pull request as ready for review August 18, 2026 00:39
@TonsOfFun
TonsOfFun merged commit 5f31b3f into main Aug 18, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants