Reliability Allocation (systems-engineering-safety/arp4761a/reliability-allocation)
Use when you must allocate a system reliability requirement down to the
design items: flow one top-level reliability budget, expressed as a
system failure rate per flight hour or as an MTBF, into per-item target
rates and MTBF values by deterministic apportionment, then verify that
the item budgets close against the system rate and report the item
margins against predicted capability rates. This leaf implements the
equal split and complexity-weighted apportionment schemes in pure
Python, stdlib only, with no RNG and no base-rate tables: the weights
are design-team inputs. It pairs with the rate-estimation leaf for the
predicted item capability rates the margin report consumes and with the
block-evaluation leaf that later consumes the per-item targets this
leaf hands down.
Out of scope, owned by sibling leaves: apportioning failure-condition
severity probability targets across channels and assigning item
assurance levels (preliminary-system-safety-assessment); evaluating
series or parallel block structures from given rates
(reliability-block-diagram); assigning requirement statements to items
with coverage registers (requirements-allocation in the arp4754a pack);
estimating item rates from test or service data
(failure-rate-estimation); repair-time statistics (maintainability-
prediction).
Domain quick reference
- MTBF to failure rate: rate = 1 / MTBF. An MTBF system requirement
enters the flow-down as its rate equivalent (mtbf_to_rate).
- Equal split: item target i = system_rate / n_items. For a
non-redundant series chain the item rates sum to the system rate, so
every item carries the same share and the same MTBF target,
n_items x system MTBF.
- Complexity-weighted apportionment: item target i = system_rate x
w_i / sum(w), with w the item complexity or part-count weights
chosen by the design team (complexity_weighted_alloc). The
normalized weighted split also sums to the system rate.
- Series-sum closure: total = sum(item rates), relative_error =
(total - system_rate) / system_rate, exact when total matches the
system rate within rel_tol 1e-12 (closure_check). The allocated
item budgets must add back up to the system budget.
- Capability margin: margin = capability / target - 1 (margin_report).
A negative margin means the predicted capability rate is better,
lower, than the budget (slack); a positive margin means the
predicted rate exceeds the budget (deficit, an overrun).
- Item MTBF target: MTBF_i = 1 / rate_i, the reciprocal of the item
target rate, is the value recorded in the item development
specification.
- Units: failure rate in failures per flight hour, MTBF in hours.
- ARP4761A frames the safety assessment process and ARP4754A the
allocated-requirements practice that carries numeric targets into
item development specifications; both are reference-only here.
Workflow
- Fix the top-level reliability budget: state the system requirement
as system_rate failures per flight hour. If the requirement is an
MTBF, convert it with mtbf_to_rate so the budget is a rate.
- Choose the apportionment scheme: equal_split when the items are
comparable, or complexity_weighted_alloc with the design-team
complexity weights when part counts differ. The weights are item
complexity or part-count estimates, design data, not table lookups.
- Produce the per-item failure-rate and MTBF targets: take the item
target rates from the chosen split and convert each to its MTBF
target with mtbf_to_rate.
- Verify the series-sum closure: run closure_check on the allocated
item rates against the system rate and confirm the relative error
sits at float noise with the exact flag True.
- Report the capability margins: run margin_report with the item
target rates and the predicted item capability rates, then flag the
items with positive margin (budget overrun) and negative margin
(slack) and weigh the rebalancing trade between them.
- Record the per-item targets in the item development specifications:
one failure-rate target and one MTBF target per item, per ARP4754A
allocated-requirements practice.
- Confirm the deterministic checks with the contract test
scripts/test_reliability_allocation.py.
Worked example
Wing flap actuation system. Top-level reliability requirement: the
system shall fail at no more than 1e-4 per flight hour, the equivalent
of a 10000 h MTBF target, flowed down across six items: pump, valve,
sensor, computer, actuator, wiring, with design-team complexity weights
[1, 2, 1, 3, 2, 1] (sum 10). The dual-redundant computer is the most
complex item, the wiring run and the sensor the least.
- Equal split, equal_split(1e-4, 6): every item budget is
1.6666666666666667e-05 per flight hour, an MTBF target of 60000 h.
closure_check reports total 0.00010000000000000002 against system
rate 0.0001, relative error 1.36e-16, exact True: the budgets sum to
the system rate. Equal split asks the simple wiring run and the
complex computer to meet the same 60000 h MTBF, ignoring their
different part counts.
- Complexity-weighted split, complexity_weighted_alloc(1e-4,
[1, 2, 1, 3, 2, 1]): pump 1e-05 per flight hour (100000 h MTBF),
valve 2e-05 (50000 h), sensor 1e-05 (100000 h), computer 3e-05
(33333.3 h), actuator 2e-05 (50000 h), wiring 1e-05 (100000 h).
closure_check reports relative error 0 and exact True: the
normalized weighted split sums exactly to the target. The computer
carries the largest budget, 3e-05, and the light items the smallest,
1e-05, matching the weight ratio.
- Margin report against predicted capability rates [9e-6, 1.6e-5,
1.2e-5, 2.8e-5, 1.8e-5, 1.1e-5] per flight hour: margins -0.1000
(pump), -0.2000 (valve), +0.2000 (sensor), -0.0667 (computer),
-0.1000 (actuator), +0.1000 (wiring). The sensor and wiring
predictions overrun their budgets while the valve and actuator hold
slack. The capability rates sum to 9.4e-05 against the 1e-4 system
target, so the item-level prediction still closes at system level
with headroom, and the report flags the rebalancing trade: tighten
the valve budget or relax the sensor budget and the system
requirement stays met. A capability sum above the system rate would
mean the item budgets as predicted cannot meet the top-level
requirement and the design or the requirement must be revisited.
Verification
- Confirm equal_split(1e-4, 6) returns six budgets each
1.6666666666666667e-05 per flight hour and that 1.0 / budget is
60000 h within 1e-9.
- Confirm complexity_weighted_alloc(1e-4, [1, 2, 1, 3, 2, 1]) returns
[1e-05, 2e-05, 1e-05, 3e-05, 2e-05, 1e-05] and that the computer
share, 3e-05, is the largest budget.
- Confirm the closure identities: every equal and weighted split of a
positive system rate closes with relative error at float noise and
the exact flag True; mtbf_to_rate round-trips (rate x MTBF = 1.0).
- Confirm margin_report margins equal capability / target - 1.0 with
input order preserved and that a capability sum below the system
rate leaves headroom while a sum above it flags a requirement that
cannot be met.
- Confirm every non-positive rate, weight, MTBF or capability, empty
input list, item count outside 1..ITEMS_MAX, and length mismatch
raises ValueError.
- Run the contract test offline: python3
skills/systems-engineering-safety/arp4761a/reliability-allocation/
scripts/test_reliability_allocation.py (33 tests, deterministic).
Related leaves
- systems-engineering-safety/arp4761a/reliability-block-diagram: the
downstream consumer that evaluates a series chain of blocks from the
per-item target and capability rates this leaf allocates.
- systems-engineering-safety/arp4761a/preliminary-system-safety-
assessment: the sibling that apportions failure-condition severity
probability targets and assigns item assurance levels, the
per-condition side of the safety requirement flow.
- systems-engineering-safety/arp4761a/failure-rate-estimation:
demonstrates or estimates item rates from test and service data, the
source of the predicted capability rates the margin report needs.
- systems-engineering-safety/arp4754a/requirements-allocation: the
qualitative register that assigns requirement statements to design
items, complementing the numeric targets this leaf hands to items.
Pitfalls
- Equal splitting ignores part counts: the simple wiring run and the
complex dual computer receive the same 60000 h MTBF budget, so use
complexity_weighted_alloc whenever the item complexities differ.
- Reading the margin sign backwards: a negative margin is slack (the
predicted capability is better than the budget) and a positive
margin is a deficit (the predicted rate overruns the budget), the
inverse of the intuitive reading.
- Treating the closure check as a design endorsement: closure only
confirms the arithmetic split sums to the system rate; the design
still fails the requirement if the predicted capability sum exceeds
the system rate, and then the design or the requirement must change.
- Confusing the MTBF target with a demonstrated MTBF: the targets are
budgets flowed down for the item development specifications;
demonstrating rates from test or service data is the
failure-rate-estimation job.
- Inventing weights on the fly: the apportionment is only as good as
the design-team complexity weights, which should reflect part count
or complexity estimates agreed with the design team, not analyst
guesses.
- Applying the series-sum identity to redundant chains: the identity
holds for a non-redundant series item chain; evaluating redundant or
parallel structures from given rates is the
reliability-block-diagram scope.
Contract test
Run the deterministic contract test (stdlib unittest, offline, <20 s):
python3 skills/systems-engineering-safety/arp4761a/
reliability-allocation/scripts/test_reliability_allocation.py
The test covers the flap actuation worked example (six-item equal and
weighted target rates, closure relative error 1.36e-16 and exact True,
item MTBF targets 60000 h and 33333.3 h, margin report values), the
MTBF rate round trip, the share identity rate_i = system_rate x
w_i / sum(w), the largest-complexity-item largest-budget check, the
closure identity over arbitrary positive weights, the capability-sum
headroom check, ITEMS_MAX and single-item boundaries, and ValueError
rejection of every non-physical input.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 skills/systems-engineering-safety/arp4761a/
reliability-allocation/scripts/test_reliability_allocation.py
The test covers the 1e-4 per flight hour six-item flow-down contract
(equal and complexity-weighted target rates, MTBF targets, series-sum
closure, capability margins), the MTBF rate round trip, the weighted
share identity, deterministic repeatability, and ValueError rejection
of non-positive rates, weights, MTBF values and capabilities, invalid
item counts, empty lists and length mismatches. All numeric asserts
are tolerance-based (assertAlmostEqual / math.isclose), never exact
equality on computed sums.
Compliance
- Standards referenced, not reproduced: ARP4761A and ARP4754A are
proprietary SAE documents (sae.org/standards); the apportionment
relations above are standard engineering methodology, summary-only
per standards-map.yaml, with both ids marked reference-only.
- compliance: STANDARDS-REF, gated: false.
1---2name: reliability-allocation3description: Use when you must allocate a system reliability requirement down to the design items: flow one top-level failure rate per flight hour, or its MTBF equivalent, into per-item target rates by equal split or by complexity-weighted apportionment from design-team complexity weights, produce the per-item failure-rate and MTBF targets for the item development specifications, verify the series-sum closure of the item budgets against the system rate, and report each item capability margin against its predicted capability rate to flag overruns and slack for rebalancing. Produces the per-item failure-rate and MTBF targets, the closure result and the margin report. Trigger: reliability allocation, failure-rate budget, MTBF target flow-down, complexity weights, apportionment, item development specification, series-sum closure, capability margin.4license: Apache-2.05---67# Reliability Allocation (systems-engineering-safety/arp4761a/reliability-allocation)89Use when you must allocate a system reliability requirement down to the10design items: flow one top-level reliability budget, expressed as a11system failure rate per flight hour or as an MTBF, into per-item target12rates and MTBF values by deterministic apportionment, then verify that13the item budgets close against the system rate and report the item14margins against predicted capability rates. This leaf implements the15equal split and complexity-weighted apportionment schemes in pure16Python, stdlib only, with no RNG and no base-rate tables: the weights17are design-team inputs. It pairs with the rate-estimation leaf for the18predicted item capability rates the margin report consumes and with the19block-evaluation leaf that later consumes the per-item targets this20leaf hands down.2122Out of scope, owned by sibling leaves: apportioning failure-condition23severity probability targets across channels and assigning item24assurance levels (preliminary-system-safety-assessment); evaluating25series or parallel block structures from given rates26(reliability-block-diagram); assigning requirement statements to items27with coverage registers (requirements-allocation in the arp4754a pack);28estimating item rates from test or service data29(failure-rate-estimation); repair-time statistics (maintainability-30prediction).3132## Domain quick reference3334- MTBF to failure rate: rate = 1 / MTBF. An MTBF system requirement35 enters the flow-down as its rate equivalent (mtbf_to_rate).36- Equal split: item target i = system_rate / n_items. For a37 non-redundant series chain the item rates sum to the system rate, so38 every item carries the same share and the same MTBF target,39 n_items x system MTBF.40- Complexity-weighted apportionment: item target i = system_rate x41 w_i / sum(w), with w the item complexity or part-count weights42 chosen by the design team (complexity_weighted_alloc). The43 normalized weighted split also sums to the system rate.44- Series-sum closure: total = sum(item rates), relative_error =45 (total - system_rate) / system_rate, exact when total matches the46 system rate within rel_tol 1e-12 (closure_check). The allocated47 item budgets must add back up to the system budget.48- Capability margin: margin = capability / target - 1 (margin_report).49 A negative margin means the predicted capability rate is better,50 lower, than the budget (slack); a positive margin means the51 predicted rate exceeds the budget (deficit, an overrun).52- Item MTBF target: MTBF_i = 1 / rate_i, the reciprocal of the item53 target rate, is the value recorded in the item development54 specification.55- Units: failure rate in failures per flight hour, MTBF in hours.56- ARP4761A frames the safety assessment process and ARP4754A the57 allocated-requirements practice that carries numeric targets into58 item development specifications; both are reference-only here.5960## Workflow61621. Fix the top-level reliability budget: state the system requirement63 as system_rate failures per flight hour. If the requirement is an64 MTBF, convert it with mtbf_to_rate so the budget is a rate.652. Choose the apportionment scheme: equal_split when the items are66 comparable, or complexity_weighted_alloc with the design-team67 complexity weights when part counts differ. The weights are item68 complexity or part-count estimates, design data, not table lookups.693. Produce the per-item failure-rate and MTBF targets: take the item70 target rates from the chosen split and convert each to its MTBF71 target with mtbf_to_rate.724. Verify the series-sum closure: run closure_check on the allocated73 item rates against the system rate and confirm the relative error74 sits at float noise with the exact flag True.755. Report the capability margins: run margin_report with the item76 target rates and the predicted item capability rates, then flag the77 items with positive margin (budget overrun) and negative margin78 (slack) and weigh the rebalancing trade between them.796. Record the per-item targets in the item development specifications:80 one failure-rate target and one MTBF target per item, per ARP4754A81 allocated-requirements practice.827. Confirm the deterministic checks with the contract test83 scripts/test_reliability_allocation.py.8485## Worked example8687Wing flap actuation system. Top-level reliability requirement: the88system shall fail at no more than 1e-4 per flight hour, the equivalent89of a 10000 h MTBF target, flowed down across six items: pump, valve,90sensor, computer, actuator, wiring, with design-team complexity weights91[1, 2, 1, 3, 2, 1] (sum 10). The dual-redundant computer is the most92complex item, the wiring run and the sensor the least.9394- Equal split, equal_split(1e-4, 6): every item budget is95 1.6666666666666667e-05 per flight hour, an MTBF target of 60000 h.96 closure_check reports total 0.00010000000000000002 against system97 rate 0.0001, relative error 1.36e-16, exact True: the budgets sum to98 the system rate. Equal split asks the simple wiring run and the99 complex computer to meet the same 60000 h MTBF, ignoring their100 different part counts.101- Complexity-weighted split, complexity_weighted_alloc(1e-4,102 [1, 2, 1, 3, 2, 1]): pump 1e-05 per flight hour (100000 h MTBF),103 valve 2e-05 (50000 h), sensor 1e-05 (100000 h), computer 3e-05104 (33333.3 h), actuator 2e-05 (50000 h), wiring 1e-05 (100000 h).105 closure_check reports relative error 0 and exact True: the106 normalized weighted split sums exactly to the target. The computer107 carries the largest budget, 3e-05, and the light items the smallest,108 1e-05, matching the weight ratio.109- Margin report against predicted capability rates [9e-6, 1.6e-5,110 1.2e-5, 2.8e-5, 1.8e-5, 1.1e-5] per flight hour: margins -0.1000111 (pump), -0.2000 (valve), +0.2000 (sensor), -0.0667 (computer),112 -0.1000 (actuator), +0.1000 (wiring). The sensor and wiring113 predictions overrun their budgets while the valve and actuator hold114 slack. The capability rates sum to 9.4e-05 against the 1e-4 system115 target, so the item-level prediction still closes at system level116 with headroom, and the report flags the rebalancing trade: tighten117 the valve budget or relax the sensor budget and the system118 requirement stays met. A capability sum above the system rate would119 mean the item budgets as predicted cannot meet the top-level120 requirement and the design or the requirement must be revisited.121122## Verification123124- Confirm equal_split(1e-4, 6) returns six budgets each125 1.6666666666666667e-05 per flight hour and that 1.0 / budget is126 60000 h within 1e-9.127- Confirm complexity_weighted_alloc(1e-4, [1, 2, 1, 3, 2, 1]) returns128 [1e-05, 2e-05, 1e-05, 3e-05, 2e-05, 1e-05] and that the computer129 share, 3e-05, is the largest budget.130- Confirm the closure identities: every equal and weighted split of a131 positive system rate closes with relative error at float noise and132 the exact flag True; mtbf_to_rate round-trips (rate x MTBF = 1.0).133- Confirm margin_report margins equal capability / target - 1.0 with134 input order preserved and that a capability sum below the system135 rate leaves headroom while a sum above it flags a requirement that136 cannot be met.137- Confirm every non-positive rate, weight, MTBF or capability, empty138 input list, item count outside 1..ITEMS_MAX, and length mismatch139 raises ValueError.140- Run the contract test offline: python3141 skills/systems-engineering-safety/arp4761a/reliability-allocation/142 scripts/test_reliability_allocation.py (33 tests, deterministic).143144## Related leaves145146- systems-engineering-safety/arp4761a/reliability-block-diagram: the147 downstream consumer that evaluates a series chain of blocks from the148 per-item target and capability rates this leaf allocates.149- systems-engineering-safety/arp4761a/preliminary-system-safety-150 assessment: the sibling that apportions failure-condition severity151 probability targets and assigns item assurance levels, the152 per-condition side of the safety requirement flow.153- systems-engineering-safety/arp4761a/failure-rate-estimation:154 demonstrates or estimates item rates from test and service data, the155 source of the predicted capability rates the margin report needs.156- systems-engineering-safety/arp4754a/requirements-allocation: the157 qualitative register that assigns requirement statements to design158 items, complementing the numeric targets this leaf hands to items.159160## Pitfalls161162- Equal splitting ignores part counts: the simple wiring run and the163 complex dual computer receive the same 60000 h MTBF budget, so use164 complexity_weighted_alloc whenever the item complexities differ.165- Reading the margin sign backwards: a negative margin is slack (the166 predicted capability is better than the budget) and a positive167 margin is a deficit (the predicted rate overruns the budget), the168 inverse of the intuitive reading.169- Treating the closure check as a design endorsement: closure only170 confirms the arithmetic split sums to the system rate; the design171 still fails the requirement if the predicted capability sum exceeds172 the system rate, and then the design or the requirement must change.173- Confusing the MTBF target with a demonstrated MTBF: the targets are174 budgets flowed down for the item development specifications;175 demonstrating rates from test or service data is the176 failure-rate-estimation job.177- Inventing weights on the fly: the apportionment is only as good as178 the design-team complexity weights, which should reflect part count179 or complexity estimates agreed with the design team, not analyst180 guesses.181- Applying the series-sum identity to redundant chains: the identity182 holds for a non-redundant series item chain; evaluating redundant or183 parallel structures from given rates is the184 reliability-block-diagram scope.185186## Contract test187188Run the deterministic contract test (stdlib unittest, offline, <20 s):189190 python3 skills/systems-engineering-safety/arp4761a/191 reliability-allocation/scripts/test_reliability_allocation.py192193The test covers the flap actuation worked example (six-item equal and194weighted target rates, closure relative error 1.36e-16 and exact True,195item MTBF targets 60000 h and 33333.3 h, margin report values), the196MTBF rate round trip, the share identity rate_i = system_rate x197w_i / sum(w), the largest-complexity-item largest-budget check, the198closure identity over arbitrary positive weights, the capability-sum199headroom check, ITEMS_MAX and single-item boundaries, and ValueError200rejection of every non-physical input.201202## Behavior contract (gate 3)203204Run the deterministic contract test (stdlib unittest, offline):205206 python3 skills/systems-engineering-safety/arp4761a/207 reliability-allocation/scripts/test_reliability_allocation.py208209The test covers the 1e-4 per flight hour six-item flow-down contract210(equal and complexity-weighted target rates, MTBF targets, series-sum211closure, capability margins), the MTBF rate round trip, the weighted212share identity, deterministic repeatability, and ValueError rejection213of non-positive rates, weights, MTBF values and capabilities, invalid214item counts, empty lists and length mismatches. All numeric asserts215are tolerance-based (assertAlmostEqual / math.isclose), never exact216equality on computed sums.217218## Compliance219220- Standards referenced, not reproduced: ARP4761A and ARP4754A are221 proprietary SAE documents (sae.org/standards); the apportionment222 relations above are standard engineering methodology, summary-only223 per standards-map.yaml, with both ids marked reference-only.224- compliance: STANDARDS-REF, gated: false.