Documentation menu

Production gate

arclang gate answers one question: can this architecture dossier go to a design review? It returns PASS or FAIL, lists each blocker with the check that raised it, and exits with a non-zero code on FAIL. The verdict is deterministic and computed offline: the same model always gives the same answer.

$ arclang gate examples/automotive/emergency-braking/complete_emergency_braking_simple.arc --standard iso26262
Production-readiness gate (ISO26262) — examples/automotive/emergency-braking/complete_emergency_braking_simple.arc
  Requirements: 7 total, 7 satisfied, 7 verified
  Constraints: 1 declared, 1 hold

PRODUCTION GATE: PASS ✓

What the gate checks

Check Blocker when
requirements.presence The model has no requirement
requirements.satisfaction A requirement is satisfied by no architecture element (no satisfies trace)
requirements.verification A requirement has no test_case that verifies it, or one of its cases fails: a constraint an analysis asserts does not hold, or a test says verdict: "fail"
verification.dangling A test case verifies a requirement that does not exist
safety.hara Elements declare an integrity level but the model has no hazard, or a hazard lacks its classification
safety.asil A hazard's declared ASIL contradicts the ISO 26262 table for its severity, exposure and controllability
safety.dal With --standard do178c: a hazard's declared DAL contradicts its failure condition
safety.mitigation A hazard has no mitigating requirement, or names one that does not exist
timing.latency A latency is not a time
timing.budget The latencies of a functional chain exceed its latency_budget, or a function of the chain declares none
icd.completeness A physical exchange lacks its carrying link, frequency or message type, or a link declares no protocol
constraints.violated A constraint evaluates to false
metamodel.types A typed attribute holds a value of the wrong type

The gate also raises warnings that do not fail it: a latency written without a unit (timing.units), a functional chain with no budget, and the methodology advisories of arclang check --lint.

A failing dossier

This model compiles. It is not ready: the chain overruns its budget, the hazard's ASIL is understated, and one requirement is neither satisfied nor verified.

not_ready.arc
operational_analysis "Driving" {
  actor "Driver" { id: "ACT-DRIVER" }
}

system_analysis "Braking" {
  requirement "REQ-001" { description: "Brake within 100 ms of detection" safety_level: "ASIL-D" }
  requirement "REQ-002" { description: "Warn the driver before braking" safety_level: "ASIL-B" }

  function "Detect obstacle" { id: "SF-DET" latency: 60 ms }
  function "Command braking" { id: "SF-BRK" latency: 55 ms }

  functional_chain "Detection to braking" {
    involves: ["SF-DET", "SF-BRK"]
    latency_budget: 100 ms
  }
}

logical_architecture "Components" {
  component "Brake controller" { id: "LC-BRAKE" safety_level: "ASIL-D" }
}

trace "LC-BRAKE" satisfies "REQ-001"

test_case "TC-001" { verifies: ["REQ-001"] method: "test" }

safety_analysis {
  hazard "Late braking" {
    severity: "S3"
    exposure: "E4"
    controllability: "C3"
    asil: "ASIL-B"
    mitigated_by: ["REQ-001"]
  }
}
$ arclang gate not_ready.arc
Production-readiness gate (ISO26262) — not_ready.arc
  Requirements: 2 total, 1 satisfied, 1 verified

✗ 4 blocker(s):
  [requirements.satisfaction] requirement 'REQ-002' is satisfied by no architecture element (no satisfies trace)
  [requirements.verification] requirement 'REQ-002' has no verification case (test_case verifies: [...])
  [safety.asil] hazard 'Late braking': declared ASIL 'ASIL-B' contradicts ISO 26262 table (S3 E4 C3 => ASIL-D)
  [timing.budget] functional_chain 'Detection to braking': sum of function latencies 115.0 ms exceeds the 100.0 ms budget

⚠ 1 warning(s):
  [methodology] logical component 'Brake controller' performs no functions — Arcadia expects logical components to realize behavior

PRODUCTION GATE: FAIL ✗ (4 blockers)
Error: Compilation error: production gate failed with 4 blocker(s)

Each line names the check, the element and the reason. Nothing here is a matter of opinion: the sum of two latencies, a table lookup, and the presence of a trace.

Standards

--standard selects how hazards are read.

  • iso26262 (default): each hazard needs severity (S1 to S3), exposure (E1 to E4) and controllability (C1 to C3). The gate computes the ASIL with the table of ISO 26262-3 and compares it with the declared asil.
  • do178c: each hazard needs a failure condition (catastrophic, hazardous, major, minor or no_effect), given as condition or severity. The gate derives the DAL and compares it with the declared dal.
  • iec61508: the requirement, verification, timing, interface and constraint checks apply. In this version hazards are read with the same severity, exposure and controllability fields as ISO 26262.
avionics.arc
operational_analysis "Flight" {
  actor "Pilot" { id: "ACT-PILOT" }
}

system_analysis "Pitch control" {
  requirement "REQ-FCS-001" { description: "Pitch command shall be computed every 10 ms" safety_level: "DAL-A" }
}

logical_architecture "Components" {
  component "Flight control computer" { id: "LC-FCC" safety_level: "DAL-A" }
}

trace "LC-FCC" satisfies "REQ-FCS-001"

test_case "TC-FCS-001" { verifies: ["REQ-FCS-001"] method: "analysis" }

safety_analysis {
  hazard "Loss of pitch control" {
    condition: "catastrophic"
    dal: "DAL-A"
    mitigated_by: ["REQ-FCS-001"]
  }
}
$ arclang gate avionics.arc --standard do178c
Production-readiness gate (DO178C) — avionics.arc
  Requirements: 1 total, 1 satisfied, 1 verified

⚠ 1 warning(s):
  [methodology] logical component 'Flight control computer' performs no functions — Arcadia expects logical components to realize behavior

PRODUCTION GATE: PASS ✓

Rules

Everything check and the gate report is a rule of the catalog: an identifier such as trace.requirement or metamodel.type, a severity, what it means and how to answer it. arclang check --json names the rule of every finding, the element concerned and, when one can be named, the edit that answers it; the playground's Problems view opens that edit.

$ arclang check --json examples/automotive/emergency-braking/complete_emergency_braking_simple.arc
{
  "errors": [],
  "file": "examples/automotive/emergency-braking/complete_emergency_braking_simple.arc",
  "findings": [],
  "metrics": {
    "components": 20,
    "functions": 17,
    "requirements": 7,
    "traces": 15
  },
  "realization": [
    {
      "name": "Obstacle detection range",
      "requirement": "REQ-AEB-001",
      "stages": [
        {
          "stage": "simulation",
          "state": "n/a"
        },
        {
          "stage": "sil",
          "state": "n/a"
        },
        {
          "stage": "pil",
          "state": "n/a"
        },
        {
          "stage": "hdl",
          "state": "n/a"
        },
        {
          "stage": "soc",
          "state": "n/a"
        },
        {
          "stage": "board",
          "state": "n/a"
        },
        {
          "stage": "twin",
          "state": "n/a"
        }
      ]
    },
    {
      "name": "Sensor fusion latency",
      "requirement": "REQ-AEB-002",
      "stages": [
        {
          "stage": "simulation",
          "state": "n/a"
        },
        {
          "stage": "sil",
          "state": "n/a"
        },
        {
          "stage": "pil",
          "state": "n/a"
        },
        {
          "stage": "hdl",
          "state": "n/a"
        },
        {
          "stage": "soc",
          "state": "n/a"
        },
        {
          "stage": "board",
          "state": "n/a"
        },
        {
          "stage": "twin",
          "state": "n/a"
        }
      ]
    },
    {
      "name": "Collision risk assessment",
      "requirement": "REQ-AEB-003",
      "stages": [
        {
          "stage": "simulation",
          "state": "n/a"
        },
        {
          "stage": "sil",
          "state": "n/a"
        },
        {
          "stage": "pil",
          "state": "n/a"
        },
        {
          "stage": "hdl",
          "state": "n/a"
        },
        {
          "stage": "soc",
          "state": "n/a"
        },
        {
          "stage": "board",
          "state": "n/a"
        },
        {
          "stage": "twin",
          "state": "n/a"
        }
      ]
    },
    {
      "name": "Emergency braking activation",
      "requirement": "REQ-AEB-004",
      "stages": [
        {
          "stage": "simulation",
          "state": "n/a"
        },
        {
          "stage": "sil",
          "state": "n/a"
        },
        {
          "stage": "pil",
          "state": "n/a"
        },
        {
          "stage": "hdl",
          "state": "n/a"
        },
        {
          "stage": "soc",
          "state": "n/a"
        },
        {
          "stage": "board",
          "state": "n/a"
        },
        {
          "stage": "twin",
          "state": "n/a"
        }
      ]
    },
    {
      "name": "Driver warning",
      "requirement": "REQ-AEB-005",
      "stages": [
        {
          "stage": "simulation",
          "state": "n/a"
        },
        {
          "stage": "sil",
          "state": "n/a"
        },
        {
          "stage": "pil",
          "state": "n/a"
        },
        {
          "stage": "hdl",
          "state": "n/a"
        },
        {
          "stage": "soc",
          "state": "n/a"
        },
        {
          "stage": "board",
          "state": "n/a"
        },
        {
          "stage": "twin",
          "state": "n/a"
        }
      ]
    },
    {
      "name": "Driver override",
      "requirement": "REQ-AEB-006",
      "stages": [
        {
          "stage": "simulation",
          "state": "n/a"
        },
        {
          "stage": "sil",
          "state": "n/a"
        },
        {
          "stage": "pil",
          "state": "n/a"
        },
        {
          "stage": "hdl",
          "state": "n/a"
        },
        {
          "stage": "soc",
          "state": "n/a"
        },
        {
          "stage": "board",
          "state": "n/a"
        },
        {
          "stage": "twin",
          "state": "n/a"
        }
      ]
    },
    {
      "name": "Health monitoring",
      "requirement": "REQ-AEB-007",
      "stages": [
        {
          "stage": "simulation",
          "state": "n/a"
        },
        {
          "stage": "sil",
          "state": "n/a"
        },
        {
          "stage": "pil",
          "state": "n/a"
        },
        {
          "stage": "hdl",
          "state": "n/a"
        },
        {
          "stage": "soc",
          "state": "n/a"
        },
        {
          "stage": "board",
          "state": "n/a"
        },
        {
          "stage": "twin",
          "state": "n/a"
        }
      ]
    }
  ],
  "success": true
}

What the gate does not do

The gate checks that the dossier is complete and consistent. It does not judge whether a requirement is well written, whether a trace makes sense, or whether a hazard analysis found the right hazards. It is evidence for a review, not a replacement for it, and it is not a certification.

For the question the compiler cannot answer, "is this trace plausible?", arclang review asks an external judgment model and returns probabilities. That command is optional, sends the names and descriptions of the traced elements to an external service, and never influences check or the gate. --dry-run prints what would be sent and sends nothing.

Qualification

A tool used in a safety process may need qualification. The repository holds a support kit in docs/qualification: tool confidence level analysis for ISO 26262-8 clause 11, tool qualification level for DO-330, an inventory of functions and malfunctions, and an evidence matrix into the test suite. Releases are built from tags, with checksums and build provenance attestations, so a qualified environment can pin and verify a version.

Every ArcLang sample on this page is compiled, and every command is run, with the released compiler when the site is built.