> Agent-readable docs index: /llms.txt. Download /docs.zip to grep all markdown files locally.

---
$schema: https://holocron.so/frontmatter.json
title: Compliance
description: Executable IEC 61131-3 profile matrix, CI validation gates, and production-readiness evidence.
icon: lucide:shield-check
---

RoboC++ tracks compliance as **executable project data** rather than prose-only claims. The `iec_profile` crate defines edition profiles, implementation limits, feature statuses, and compliance matrix rendering.

## Feature statuses

| Status        | Meaning                                                                                      |
| ------------- | -------------------------------------------------------------------------------------------- |
| `implemented` | The feature is covered by the current implementation for the documented scope.               |
| `partial`     | Some parser, semantic, runtime, or backend behavior exists, but the feature is not complete. |
| `planned`     | The feature is recognized as part of scope but not implemented yet.                          |
| `unsupported` | The feature is intentionally unavailable for the selected profile.                           |

For **`2003-strict`** today, the leaf matrix reports **88 implemented** rows and **0** partial, planned, or unsupported rows. That can change as new rows are added to the matrix.

## Print the matrix

```bash
cargo run -p rbcpp_cli -- compliance
```

Use JSON when the matrix is consumed by automation:

```bash
cargo run -p rbcpp_cli -- compliance --json --profile 2003-strict
```

## TODO list

```bash
cargo run -p rbcpp_cli -- todos --profile 2003-strict
```

**`rbcpp todos`** filters the matrix to non-implemented leaf rows. For **`2003-strict`**, it currently prints **Remaining: 0** for both scoped profile items and full compiler completion items.

<Aside>
  <Tip>
    Pair **`rbcpp todos`** with the compliance matrix when planning implementation work. Both should stay in sync when support changes.
  </Tip>
</Aside>

## SFC compliance sets

**`rbcpp sfc-compliance`** reports compatible and minimal SFC compliance sets separately from the main matrix (textual and graphical, compatible and minimal):

```bash
cargo run -p rbcpp_cli -- sfc-compliance --profile 2003-strict
```

## Feature ID reference

The matrix defines **88 leaf feature IDs** for **`2003-strict`**, grouped by prefix:

| Prefix                                             | Topics                                                             |
| -------------------------------------------------- | ------------------------------------------------------------------ |
| `common.*`                                         | Comments, pragmas, identifiers                                     |
| `literals.*`, `types.*`, `variables.*`             | Literals, derived types, VAR blocks, initialization                |
| `pou.*`                                            | Functions, FBs, programs, EN/ENO                                   |
| `language.st.*`, `language.il.*`, `language.sfc.*` | Textual language bodies                                            |
| `language.ld.*`, `language.fbd.*`                  | Native textual LD/FBD and PLCopen graphical lowering               |
| `configuration.*`                                  | CONFIGURATION, RESOURCE, TASK, instances                           |
| `plcopen.*`                                        | XML import/export and vendor metadata                              |
| `backend.*`                                        | Interpreter, C codegen, target ABI                                 |
| `diagnostics.*`                                    | Annex E-style negative fixtures and unsupported-IR boundary guards |

Dump the full list with **`rbcpp compliance --json --profile 2003-strict`** and filter on the **`id`** field.

## IEC 61131-3:2003 checklist

The compiler repo also ships a human-readable clause checklist at [`docs/iec61131-2003-checklist.md`](https://github.com/zaidmukaddam/robocpp/blob/main/docs/iec61131-2003-checklist.md). It maps IEC tables (2.1 through 4.3, PLCopen, backends) to matrix ID prefixes and regression evidence. Use it alongside **`rbcpp compliance`** when auditing scope.

[`CONFORMANCE.md`](https://github.com/zaidmukaddam/robocpp/blob/main/CONFORMANCE.md) in the compiler repo summarizes source formats, runtime semantics, target HAL scope, and release verification gates.

## Verification gates

The compiler CI runs on every push and pull request:

```bash
cargo fmt --check
cargo clippy --workspace --all-targets -- -D warnings
cargo check --workspace
cargo test --workspace
cargo run -p xtask -- validate-corpus
cargo run -p xtask -- validate-differential
cargo run -p xtask -- validate-robustness
cargo run -p xtask -- validate-sanitizers
cargo run -p xtask -- fuzz-smoke
cargo run -p xtask -- hardening-check
```

The **`xtask`** commands exercise the **`validation/`** corpus (rejected-input `.diag` sidecars, differential interpreter vs generated C, robustness limits, C sanitizer builds, bounded fuzz smoke, and **hardening-check** for crate-split and emitter safety gates). A weekly workflow also runs longer fuzz targets. See [`validation/README.md`](https://github.com/zaidmukaddam/robocpp/blob/main/validation/README.md) in the compiler repo.

Representative programs also compile and execute as generated C in CI before release claims are made. Every shipped example under **`examples/`** must pass **`rbcpp check`** (and **`.xml`** files must pass **`import-plcopen`**).

## Production readiness

Language profile completeness and production compiler hardening are tracked separately:

| Status                          | Meaning                                                                            |
| ------------------------------- | ---------------------------------------------------------------------------------- |
| **Conformance** (`2003-strict`) | 88 leaf matrix rows **`implemented`** for the claimed IEC 61131-3:2003 profile     |
| **Production readiness**        | Corpus, fuzz, differential, sanitizer, and hardening evidence in **`validation/`** |
| **Safety certification**        | **Not certified**; requires external process and target-specific validation        |

The compiler repo records versioned status in **`validation/STATUS.toml`**:

| Field                         | Current value                               |
| ----------------------------- | ------------------------------------------- |
| `conformance_profile`         | `iec61131-3:2003-strict`                    |
| `conformance_status`          | `implemented-for-current-profile`           |
| `production_readiness_status` | `validation-required-hardening-in-progress` |
| `safety_certification_status` | `not-certified`                             |
| `readiness_evidence_version`  | `2026.05`                                   |

Read [`PRODUCTION_READINESS.md`](https://github.com/zaidmukaddam/robocpp/blob/main/PRODUCTION_READINESS.md) for milestone evidence and [`COMPILER_HARDENING_TODO.md`](https://github.com/zaidmukaddam/robocpp/blob/main/COMPILER_HARDENING_TODO.md) for ongoing engineering hardening (crate splits, hardening-check gates, maintainability work) separate from the 88-row language matrix.

RoboC++ is **not** a drop-in certified PLC IDE replacement and **not** safety-certified machinery control without independent validation by the deploying team.

## Profile policy

**`2003-strict`** is the default profile. **`2003-plus-extensions`** is also claimable; it relaxes strict identifier underscore rules only. **`2013-placeholder`** and **`2025-placeholder`** are routing placeholders only. Semantic checking adds an unsupported row and rejects check/run when a non-claimable profile is selected without a licensed edition audit.

## Keeping docs honest

When a language feature changes, update the **implementation and the compliance matrix together**. The docs should describe behavior visible through the CLI, examples, and matrix rather than promising full IEC coverage ahead of implementation.

<CardGroup cols={2}>
  <Card title="Language support" icon="lucide:code-2" href="/language-support">
    High-level coverage map.
  </Card>

  <Card title="Diagnostics" icon="lucide:bug" href="/diagnostics">
    RBCPP-\* codes and JSON output.
  </Card>
</CardGroup>


---

*Powered by [holocron.so](https://holocron.so)*
