heidi-kernel is a native C++23 runtime daemon for WSL2-first environments. It exists to keep developer workflows stable under load: bounded queues, backpressure, deterministic scheduling, and clean shutdown.
- Public repo (
heidi-kernel): contains source code, CI, scripts, public docs. - Public companion repo (
.localsubmodule): contains governance rules, tasks, and worklogs - now public at https://github.com/heidi-dang/heidi-kernel-local
Before starting any work, sync with latest main and read .local/INDEX.md.
If you have access to the public .local submodule:
- First-time contributors must create an acknowledgement file at
.local/ack/<your_name>.md - See
.local/SYNC_POLICY.mdfor the sync workflow
git clone --recurse-submodules git@github.com:heidi-dang/heidi-kernel.git
cd heidi-kernelgit checkout main
git pull --rebase origin main
git submodule update --init --recursivegit checkout -b feat/<short-name>
git submodule update --init --recursive- Commit + push to public
.localrepo (heidi-kernel-local) - Bump the
.localsubmodule pointer in public repo:- Edit
.local(it is a file, not a directory) to point to the new commit - Commit the pointer change in the public repo
- Edit
heidi-kernel uses a strict C++23 ruleset for a long-running daemon. See .local/RULES_CPP.md for details:
- Compiler: clang, C++23
- Warnings as errors
- No exceptions, prefer
std::expected - Bounded resources everywhere
- Fixed small thread pool
- RAII for all resources
cd .local
git checkout main
git pull --rebase origin main
# edit files (rules/tasks/worklog)
git commit -am "chore(local): <summary>"
git push origin main
cd ..
git add .local
git commit -m "chore(local): bump .local submodule"
git push -u origin HEADgit fetch origin
git rebase origin/main
git submodule update --init --recursive
git statusEvery PR must update the .local submodule pointer.
- Language: C++23
- Formatting:
clang-format(enforced in CI) - Warnings: treat as errors in CI
- Logging: structured, rate-limited for noisy paths
- Timeouts: all blocking ops must have timeouts or cancellation
cmake --preset debug
cmake --build --preset debug./scripts/test.sh./scripts/lint.sh- Never commit secrets or tokens.
- Any files that contain secrets must be
0600perms when created.