Distinguishes project work items the maintainer files against the
project board from user-reported enhancements. Used to keep
`enhancement` semantically clean (= user-reported idea).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Records the full label set (existing plus newly created area:* and
needs-repro labels) in a format consumable by label-sync actions.
Lets future label changes go through PR review rather than ad-hoc
gh label create calls.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Forces new issues through the structured bug form so the load-bearing
fields are always captured. Adds a contact link to Discussions as the
escape hatch for questions and feature ideas.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the legacy markdown template with a YAML issue form. Lifts
load-bearing fields (build tool, compiler, install method, OS, arch)
out of free-text "Additional context" prose into validated dropdowns
and required inputs, and adds explicit fields for the exact bear
command, expected vs actual output, and the RUST_LOG=debug log. The
pre-flight checklist is now enforced via required checkboxes, and a
top-of-form note routes general questions to Discussions.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Collapse the integration-test verbosity controls onto a single
inherited RUST_LOG. run_bear no longer forces RUST_LOG=debug; it
inherits the test-process value, defaulting to info when unset --
this keeps warn/info/error log lines in captured stderr (so tests
that assert on them still work) while filtering the per-event
debug traces from the preload library that ccache was caching and
replaying through Command::status() leaks. CI sets RUST_LOG=debug
explicitly for full per-event traces on platforms that can't be
reproduced locally.
Drop::preserve_on_panic now dumps the last captured BearOutput
unconditionally; cargo's per-test capture handles the show-on-
failure filter for both Err returns and panics. The verbose-gated
inline debug-info blocks in CompilationDatabase / InterceptEvents
assertion methods, the new_with_verbose constructor, the
verbose: macro arm of bear_test!, and all the
show_verbose_if_enabled / force_show_verbose / show_last_bear_output
helpers are gone. BEAR_TEST_PRESERVE_FAILURES stays unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wrapper mode previously stored whatever `which(gcc)` returned as the
"real compiler" for each wrapper. On distributions with a ccache
masquerade in PATH (Fedora/Arch/Gentoo by default), that is the
ccache symlink, so the wrapper's child process was ccache. ccache
then searched PATH for gcc, skipping only symlinks to itself; Bear's
hard-linked wrapper in `.bear/` passed the self-check and was
re-executed, producing an infinite loop.
environment.rs now detects masquerade wrappers at discovery time by
canonicalising candidate paths and checking the target's basename
against a fixed set (ccache, distcc, icecc, colorgcc, buildcache).
The containing directory is stripped from the lookup PATH and
resolution retries, so the wrapper config always names the real
compiler. Both the CC-env and PATH-scan discovery paths are covered.
Other changes in the same fix:
- Requirement reworked around "resolve past masquerade wrappers at
discovery time"; the original CCACHE_COMPILER proposal is
documented as rejected, verified empirically to reproduce the
hang via CCACHE_COMPILER pointing at the ccache symlink.
- Nine new unit tests cover detection, filtering, and the
no-real-compiler fallback.
- New integration test wrapper_mode_survives_masquerade_wrapper_in_path
prepends the masquerade dir to its own child PATH so the
recursion scenario is exercised regardless of host PATH, while
keeping other tests ccache-free.
- build.rs scans well-known masquerade locations (/usr/lib/ccache,
/usr/lib64/ccache, /usr/libexec/ccache), exposes the found dir
via CCACHE_MASQUERADE_DIR, and sets cfg(host_has_ccache_masquerade)
to gate the new test.
- The manual ccache_free_path_and_compiler workaround in the
wrapper-mode tests is gone; the tests now run against the host's
real PATH and also protect this requirement.
- CI: Ubuntu job runs apt-get install ccache so the masquerade dir
exists on every PR. The job PATH is deliberately not modified --
ccache first on PATH would inflate event counts for preload-mode
tests that assert exact compiler-event counts.
Side effect: ccache is bypassed while Bear is observing. That
matches Bear's observe-don't-optimise stance and keeps
compile_commands.json recording the real compiler.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>