This file provides always-on guidance for GitHub Copilot and other AI coding agents working in this repository.
For CLASSIC-specific guidance that does not need to be injected on every prompt, use the project skill at .agents/skills/classic-project-guide/.
- Skill entrypoint:
.agents/skills/classic-project-guide/SKILL.md - Detailed reference:
.agents/skills/classic-project-guide/references/repo-guide.md
If your environment does not support project skills, read the reference file directly before doing repo-specific build, test, parity, or architecture work.
CLASSIC (Crash Log Auto Scanner & Setup Integrity Checker) is a C++ plus Rust application:
classic-cli/- C++20 CLI frontendclassic-gui/- Qt 6 C++20 GUI frontendClassicLib-rs/- Rust workspace for core logic and bindingsClassicLib-rs/cpp-bindings/classic-cpp-bridge/- C++ bridge to Rust
- Prioritize active work in
classic-cli/,classic-gui/, andClassicLib-rs/. - Keep all business logic in Rust. Put shared behavior, state transitions, data mutation, persistence rules, and validation in Rust core crates unless the task is explicitly interface-only.
- Keep non-interface layers thin. C++, Python, Node, and other binding/UI surfaces should act as wrappers over Rust APIs rather than reimplementing logic, unless the performance cost of FFI bridging is demonstrated to be too high for that specific path.
- Maintain a single shared Tokio runtime from Rust core runtime facilities; do not introduce independent runtimes.
- Keep docs synchronized with architecture or workflow changes, especially
README.mdand this file. - Never write to
NULornulas if it were a file path on Windows. - Consult
docs/api/README.mdbefore changing public Rust, bridge, GUI-consumer, or binding-facing APIs; if an API-breaking or contract-shaping change occurs, update the affected pages underdocs/api/in the same change. - Never run C++ tests by invoking test binaries or raw
ctestdirectly; useclassic-cli/build_cli.ps1 -Testorclassic-gui/build_gui.ps1 -Test, with-CTestNameor-IntegrationTestNamewhen you need a subset.
- Native C++ targets are Windows-focused and MSVC-based.
- When running Rust or C++ MSVC-targeted commands from Git Bash, source
tools/use_msvc_from_git_bash.shfirst, or run commands through it, so Git'susr/bin/link.exedoes not override the Visual Studio linker. - Python bindings remain for other potential projects and should be kept in sync with Rust core logic.
- Node bindings should be kept in sync with Rust core logic.
- Use the project skill whenever you need repo-specific commands, parity checklists, CI context, or architecture-routing guidance.