0ded1a4e85810106df94bd989953283a7f47eeab
Signed-off-by: Onur Özkan <work@onurozkan.dev>
kaptan
Kaptan is a modular flight controller platform focused on deterministic bare-metal execution for flight-critical paths and strong verification discipline around the rest of the stack.
The repository is currently in infrastructure setup. Formal project specifications are automatically checked beside the file-backed modules they govern.
Current Direction
- Flight-critical runtime stays bare-metal with no RTOS in the control path.
- The first vehicle scope is multirotor.
- The first board support lane is Kakute F7 Mini V3.
- Non-critical extensibility, companion integration, and user-facing tooling will be added only after core runtime and verification contracts are established.
Immediate Priorities
- Create specification infrastructure without inventing the first formal spec.
- Establish crate and board boundaries that fit the first supported hardware lane.
- Add deterministic host-side validation before simulation and hardware automation expand.
Repository Structure
boards/<board>/: board firmware crates with the RTIC application, MCU bindings and board-specific configuration.libs/: reusable libraries that do not own a board firmware lifecycle.tests/sitl/: host-side simulation and deterministic verification scaffolding.tests/hitl/: hardware-in-the-loop scaffolding.scripts/: repository validation and developer helper scripts.
Spec Infrastructure
Formal specs should be colocated with the code or board package they govern.
- Implementation-linked specs should use stable sidecar filenames such as
control_loop.spec.mdnext to the related module or package. - Version history should live inside the same spec file as additional spec entries, not in the filename.
- Each appended spec entry should begin with version marker such as
# --- version: 0.1.0 ---. - Inside a spec entry,
#is reserved for version markers and content headings should start at##. - Each file-backed Rust module requires a same-name
.spec.mdsidecar. - Modules that intentionally have no formal specification must declare
no_spec!("reason");at module scope. - Missing sidecars and modules that have both a sidecar and
no_spec!(...)fail the build.
Example:
use kaptan_spec::no_spec;
no_spec!("Crate root declares child modules only.");
Languages
Rust
90.1%
Python
4.9%
JavaScript
1.3%
C++
1.2%
CMake
0.9%
Other
1.3%