Decisions that shaped the workspace layout and that explain oddities you may meet. Product-specific history lives in each product's own docs. Names in older entries are the repository names of the time; the mapping to product names is in the root README.
2026-09-22: GitHub repositories renamed to match
The 17 bula173/* product repos (everything in the table below except RBC_Template itself, already correctly named) were renamed to match their folder/product name, reversing the "left unchanged" decision just below — collaborator impact turned out to be small (GitHub keeps the old name as a redirect for both the web UI and git operations) and the docs site's own broken/dead links (product-table links pointing at inconsistent old names) were the trigger. .gitmodules, every submodule's local origin remote, and every current-state documentation mention were updated in the same pass; dated ADRs and other point-in-time historical text below keep whatever name was correct when they were written, same posture as always.
2026-09: RCA layout and product names
Folders were regrouped by RCA layer (platform/, application/, test/, architecture/, docs/) and renamed to product names (Platform_RTE, RBC_GP, ...). GitHub repositories and Conan package names were deliberately left unchanged at the time; renaming a repository is a separate, external action with its own consequences for collaborators — see the entry above for why that decision was later reversed for GitHub repository names specifically (Conan package names are still unchanged).
What the rename required, in case it recurs:
- CMake defaults look for dependencies by the new layout first and fall back to the old flat sibling names.
- Scripts take the workspace root as WORKSPACE_ROOT and address projects by path.
- Docker builds use the workspace root as build context and copy projects in the same layout.
- Verified by building all six compose images and by configuring every CMake project.
Earlier decisions (still relevant)
- Monorepo grouping folder removed. At one point several projects were merged into one safeAPIExample/ repository with git subtree. It was flattened again with git subtree split
--prefix=<project>, which keeps history. Use the same approach if a grouping folder ever reappears.
- safeAPIExample became safeAPIRBC2oo2 (later renamed again to RBC_GP as part of the 2026-09 RCA layout change above, then split as the next bullet describes). Directory, Conan package, skill name and every text reference were renamed at the time. The old GitHub remote name was left alone then (see the 2026-09-22 entry above for when that changed). RTE_EXAMPLE_* macro and environment-variable names are established API surface and were not renamed. Use a plain grep (not an ignore-file-aware one) when sweeping for stale names: a tool that honours .gitignore silently skips ignored directories such as .claude/.
- safeAPIRBC2oo2 split into GP, GA, SA and the POSIX OSAdapter (GP itself was later renamed RBC_GP by the 2026-09 RCA layout change above). GP was a plain mv; GA and the OSAdapter were extracted with git subtree split; SA was merged into its existing repository. GP calls GA and GA calls back into GP; ordinary dynamic linking cannot express that for an executable plus a shared library, so GP first passed GA a struct of function pointers at init. That was later replaced: GP became a shared library too, and each library is built against an empty dummy of the other while the real one replaces it on disk before the process runs (ga_interface.h declares plain functions; see application/RBC_GA/docs/DESIGN_NOTES.dox).
- RBC image moved to RBC_SA. Final executables and install packages are produced in SA, so the Docker image is now built through SA's installer, and the build runs the installer to prove it works before the runtime stage copies the result.
- Build directories nest under each project's build/ (build/channel-a, build/toolchain-<target>, build/coverage), so every project's .gitignore covers them.
- build_toolchains.sh macOS target used to build only the framework; it now builds the RBC application as well, like the Linux targets. FreeRTOS builds only the framework by design (no POSIX OSAdapter for bare metal).
- Scripts moved between projects can carry stale relative paths. Check for SCRIPT_DIR/.. depth and hard-coded old directory names first when a script moves.