Skip to content

fix: restore workspace build (llvm-cov) + resolve pre-existing CI failures at source#129

Merged
hyperpolymath merged 2 commits into
mainfrom
claude/dreamy-hypatia-O8XHo
Jun 27, 2026
Merged

fix: restore workspace build (llvm-cov) + resolve pre-existing CI failures at source#129
hyperpolymath merged 2 commits into
mainfrom
claude/dreamy-hypatia-O8XHo

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

What

Deals with the pre-existing CI failures at source, in scope order. Summary of every red and its disposition:

Failure Root cause Fix
llvm-cov "no profraw" My regression from #127CheckError::ResourceViolation made a match in my-lsp non-exhaustive, so cargo --workspace couldn't build → no tests ran → no profraw ✅ Added the missing match arm; cargo test --workspace --exclude my-llvm green
governance / Licence consistency repo-root LICENSE had no SPDX header ✅ Added SPDX-License-Identifier: MPL-2.0
PR (address) / PR (undefined) (ClusterFuzzLite) .clusterfuzzlite/Containerfile was conflict-broken and misnamed (the action builds from Dockerfile) ✅ Clean Dockerfile + corrected build.sh; removed broken Containerfile
stale merge-conflict markers unresolved <<<<<<</=======/>>>>>>> in CONTRIBUTING.md, .clusterfuzzlite/{Containerfile,build.sh} ✅ Resolved (kept the my-lang side; HEAD's my-lang-archive is a stale name)
scan / Hypatia + Validate Hypatia Baseline Upstream — the Hypatia analyzer itself fails to compile: undefined variable "real_subdirs" at lib/rules/structural_drift.ex:1019 in hyperpolymath/standards ⛔ Out of my push scope — must be fixed in standards; nothing in my-lang triggers it

Honesty notes

  • I mis-diagnosed llvm-cov earlier as "not caused by this PR." It was — the "no profraw" was a downstream symptom of my-lsp failing to build under --workspace. My local -p my-lang/-p my-qtt runs never built my-lsp, so they missed it. This PR fixes it and I've verified the full workspace build + tests.
  • The ClusterFuzzLite Dockerfile/build.sh follow the documented OSS-Fuzz Rust pattern and are syntax-checked, but the full image build needs the OSS-Fuzz base image (not runnable locally) — so that one is "root cause removed, correct by inspection," not locally executed.
  • Hypatia is the only remaining red and it's upstream. Exact fix for whoever owns standards: bind/define real_subdirs before its use at structural_drift.ex:1019 (looks like a variable that was renamed/dropped).

Verification

  • cargo test --workspace --exclude my-llvm → all crates green (my-lsp 5, my-lang 153, my-qtt 25, …).
  • No conflict markers remain repo-wide; bash -n .clusterfuzzlite/build.sh OK; LICENSE SPDX header present.

🤖 Generated with Claude Code

https://claude.ai/code/session_01BwV2DWsjkBiNP3oscimMLV


Generated by Claude Code

claude added 2 commits June 27, 2026 19:52
…build)

PR #127 added the `CheckError::ResourceViolation` variant but missed the
exhaustive `match` in `my-lsp::extract_error_location`, so `my-lsp` failed to
compile in a full `cargo --workspace` build (error[E0004], non-exhaustive
patterns). `cargo test -p my-lang`/`-p my-qtt` didn't catch it because they
never build my-lsp.

This is the true root cause of the `llvm-cov` "no profraw files" failure: the
coverage job runs `cargo llvm-cov --no-report --workspace --exclude my-llvm`,
which couldn't build my-lsp, so no tests ran and no profraw data was produced —
surfacing only as the downstream report-step error. Adding the missing arm
restores the workspace build; `cargo test --workspace --exclude my-llvm` is
green again.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BwV2DWsjkBiNP3oscimMLV
…zLite Dockerfile

Fixes several pre-existing CI failures at their source:

- LICENSE: add `SPDX-License-Identifier: MPL-2.0` header so the standards
  `check-licence-consistency.sh` (governance / Licence consistency) passes —
  it requires an SPDX header on the first lines for downstream scanners.

- Resolve unresolved git merge-conflict markers left in three files:
  * CONTRIBUTING.md — kept the `my-lang` side (HEAD's `my-lang-archive` is a
    stale repo name; this repo is `my-lang`);
  * .clusterfuzzlite/build.sh and .clusterfuzzlite/Containerfile — kept the
    `$SRC/my-lang` layout (matches project.yaml main_repo).

- ClusterFuzzLite (PR (address)/(undefined)): the google/clusterfuzzlite
  actions build from `.clusterfuzzlite/Dockerfile` by hard-coded convention,
  but the repo only had a (conflict-broken) `Containerfile`, so the image
  build failed. Replace it with a clean `Dockerfile` + a corrected `build.sh`
  that compiles the cargo-fuzz target in `fuzz/` and stages each binary into
  $OUT. (Build verified by inspection against the OSS-Fuzz Rust pattern;
  the full image build needs the OSS-Fuzz base image, not runnable locally.)

Not addressable here (upstream): the Hypatia checks fail because the Hypatia
analyzer itself does not compile — `undefined variable "real_subdirs"` at
`lib/rules/structural_drift.ex:1019` in hyperpolymath/standards. The fix
belongs in that repo; nothing in my-lang triggers it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BwV2DWsjkBiNP3oscimMLV
@hyperpolymath hyperpolymath marked this pull request as ready for review June 27, 2026 19:58
@hyperpolymath hyperpolymath merged commit f31b9b5 into main Jun 27, 2026
15 of 18 checks passed
@hyperpolymath hyperpolymath deleted the claude/dreamy-hypatia-O8XHo branch June 27, 2026 19:58
hyperpolymath added a commit that referenced this pull request Jun 27, 2026
…` sanitizer (#130)

## What

Follow-up to #129. #129 fixed the ClusterFuzzLite **build** (clean
`Dockerfile` + `build.sh`), and CI confirmed it works — the image builds
and `fuzz_main` compiles + stages. The only remaining red was the
**`undefined` sanitizer** matrix variant:

```
BAD BUILD: UBSan build of fuzz_main seems to be compiled with ASan.
ERROR: 100.0% of fuzz targets seem to be broken.
```

This is fundamental, not a config typo: **Rust/cargo-fuzz cannot emit a
valid UndefinedBehaviorSanitizer binary** — it links ASan regardless —
so OSS-Fuzz's `bad_build_check` rejects it. The `undefined` job could
never produce real UBSan coverage. Standard Rust OSS-Fuzz practice is
ASan-only.

## Changes
- `cflite_pr.yml` / `cflite_batch.yml`: matrix `sanitizer: [address]` —
removes the broken `PR (undefined)` job.
- `.clusterfuzzlite/project.yaml`: `sanitizers: [address]`.
- `.clusterfuzzlite/build.sh`: pass `--sanitizer
"${SANITIZER:-address}"` explicitly.

Each change carries an inline comment explaining the Rust/UBSan
limitation. The `address` variant (whose build already works per #129)
is retained, so ASan fuzzing continues.

## Verification
`bash -n .clusterfuzzlite/build.sh` OK; config greps confirm `[address]`
everywhere. The full OSS-Fuzz image build isn't runnable in this
environment, so this is correct-by-spec — the `address` job exercises it
in CI.

## Out of scope (separate, tracked)
The `Validate Hypatia Baseline` red is the pre-existing Hypatia backlog
(issue #34): the now-working analyzer reports 25 findings ≥ medium
against an empty `.hypatia-baseline.json`. Resolving it needs the actual
findings (artifact `hypatia-scan-findings`/the Security tab), which
aren't reachable from the CI sandbox — to be fixed at source once the
list is in hand, per the repo's fix-don't-suppress discipline.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01BwV2DWsjkBiNP3oscimMLV

---
_Generated by [Claude
Code](https://claude.ai/code/session_01BwV2DWsjkBiNP3oscimMLV)_

Co-authored-by: Claude <noreply@anthropic.com>
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