Appearance
Troubleshooting Operational Failures
This enterprise-grade operational reference guide outlines 7 typical scenarios, diagnosing UDE v2.0 pipeline anomalies with concrete, step-by-step remediation procedures.
1. Missing or Malformed src_dir
Symptom: The pipeline fails immediately with Error: 'src_dir' must be a list of paths. String values are not accepted — wrap single paths in a JSON array. or Error: No source directory specified.Root Cause: The target's ude_doc_config.json either omits src_dir entirely, or sets it to a bare string instead of a JSON array (a real engine constraint — enforced in UdeOrchestrator.parse() and again in DoxygenXmlCollector.validate_environment(), which raises a CollectorError with a similar message if the collector-level config still has a bad value). Remediation:
- Open the target's
ude_doc_config.json. - Confirm
src_diris a JSON array, even for a single path:"src_dir": ["./src"], not"src_dir": "./src". - Confirm each path is relative to the
ude_doc_config.jsonfile's own directory (paths are resolved relative to the config file, not the CWD or repo root). - Re-run
ude parseorude compile.
2. Pydantic Type Validation Mismatches (Legacy v1.0 Catalogs)
Symptom: ValidationError: fields.0: value is not a valid dict during IR loading. Root Cause: A stale v1.0 Intermediate Representation (IR) containing strings (e.g., ["int x"]) is being parsed by v2.0 ClassEntity Pydantic models. Remediation:
- Do not reuse a legacy v1.0 IR file (from
ude parse --output-ir ...) with a v2.0ude render. - Delete the stale IR file and any
.build_cache.json.gzin the output directory. - Regenerate a fresh IR from source:
ude parse --doc-config ude_doc_config.json --output-ir catalog_ir.gz, then render from it, or simply runude compile --doc-config ude_doc_config.jsonto redo both stages in one step.
3. L2 Render Cache Invalidated by Output Directory Wipes
Symptom: Compilation time increases noticeably on what should be an incremental build. Root Cause: A preemptive build step is deleting the L2 render cache (a .build_cache.json.gz file written into the output directory by default) before UDE runs. Remediation:
- Check CI configurations for aggressive clean steps (e.g.,
git clean -fdx) that remove the output directory between runs. - If you need the cache to live outside the output directory, set
cache_root_direxplicitly in your global or target config JSON (GlobalConfig.cache_root_dir, resolved to an absolute path relative to the config file's own directory) and persist that directory across CI runs viaactions/cache. - Note: there is no
--cache-dir(or--no-cache/--all) CLI flag — cache location is controlled exclusively via thecache_root_dirJSON config key, not a command-line option.
4. Missing VitePress Trailing Comma Linter Blocks
Symptom: user-docs deployment fails on npm run build with trailing comma syntax errors. Root Cause: Strict Prettier/ESLint configs in VitePress reject Python-generated MD arrays if trailing commas are missing. Remediation:
- Modify your custom renderer templates in
engine/ude/renderers/. - Ensure JSON/JS blocks within markdown generate trailing commas in multi-line structures.
- Run
npm run lint:fixlocally insideuser-docs/.
5. Cloudflare Pages Deploy Fails with "Project not found" (code 8000007)
Symptom: Deploy to Cloudflare Pages step fails: A request to the Cloudflare API (/accounts/***/pages/projects/<name>) failed. Project not found.Root Cause: wrangler pages deploy (used by every deploy.yml in this ecosystem) does not create the Cloudflare Pages project automatically on first use — only the deployment, once the named project already exists. Hit live 2026-07-22 on ude_promotion's first deploy. Remediation:
- Create the project once via the Cloudflare dashboard, or
wrangler pages project create <name> --production-branch=<branch>. - Set
--production-branchexplicitly if the repo's default branch isn't Cloudflare's own default (main) — otherwise deploys to e.g.masterland as invisible "Preview" deployments instead of updating the project's real*.pages.devdomain. - Re-run the deploy (
workflow_dispatchor push again).
6. A Deployed Site Returns a Cloudflare Access Login Redirect Instead of Real Content
Symptom: curl/browser hits https://<project>.pages.dev/ and gets redirected to a cloudflareaccess.com login page rather than the actual site. Root Cause: That Cloudflare Pages project has Cloudflare Access (Zero Trust) enabled at the project level — this is dashboard/API configuration, not something any deploy.yml in this ecosystem sets. Easy to misread as "the deploy is broken" when the deploy actually succeeded; the content is just gated. Remediation:
- Check that project's Access policy in the Cloudflare Zero Trust dashboard, not the deploy workflow logs.
- To verify deploy correctness without going through Access, check the workflow's own build/lint steps passed, or rebuild locally with the same environment variables the workflow uses and inspect the output directly.
7. AST Traceability Annotation Failures
Symptom: Output documentation lacks source code line trace links (github.com/org/repo/blob/main/file.cpp#L12). Root Cause: Doxygen failed to generate XML source linkage annotations. Remediation:
- Edit
Doxyfile. - Set
SOURCE_BROWSER = YESandGENERATE_XML = YES. - Re-run
ude parse.
Related Docs
(Paths below are repository-root-relative.)
user-docs/docs/admin-deployment.md— deployment architecture referenced in scenarios 5 and 6.github/AGENTS.md— per-workflow catalog for the CI jobs these scenarios occur inRUNBOOK.md§3 — PAT rotation procedure referenced in scenario 6
