orchestrata_ultimate.factory.dor_procedure.axes
Reference › orchestrata_ultimate › factory › dor_procedure › axes
axes is the catalogue of residual axes for step 7 of the DoR construction procedure (SPEC-033 row B23, ADR-0028). Steps 1 to 6 already force axes such as error handling, ordering, concurrency, boundaries, partial failure and capacity; the axes here are the residue that nothing earlier guarantees were considered, and step 7 forces an explicit SPECIFIED, NOT_APPLICABLE or GAP answer for each. Axis records an id, a title, a provenance ProvenanceTier and a source. The tiers are RESEARCH (validated requirements-engineering or safety research), ENGINEERING_LITERATURE (rigorous engineering sources outside requirements engineering) and CONVENTION (no formal source, labelled as such). RESIDUAL_AXES is the tuple of axes; it includes measurable-threshold (ISO/IEC/IEEE 29148) and authorization-default (fail-safe defaults). The validate module checks answers against it, and the scripts.factory_dor_procedure CLI imports it. Tests are in tests/factory/test_dor_axes.py.
At a glance
| Source | src/orchestrata_ultimate/factory/dor_procedure/axes.py |
| Lines of code | 103 |
| Classes | 2 |
| Functions | 0 |
| Imports (internal) | none |
| Imported by | orchestrata_ultimate.factory.dor_procedure.validate, scripts.factory_dor_procedure |
| Tests that import it | tests/factory/test_decision_phase.py, tests/factory/test_dor_axes.py, tests/factory/test_dor_validate.py, tests/scripts/test_factory_decision_cli.py, tests/scripts/test_factory_dor_procedure_cli.py |
Class diagram
Dependency diagram
API
Constants
| Name | Type | Value |
|---|---|---|
RESIDUAL_AXES |
tuple[Axis, ...] |
(Axis(axis_id='measurable-threshold', title='Measurable threshold', tier=Proven… |
Classes
ProvenanceTier (enum)
Bases: StrEnum · Line 24
ADR-0028's three provenance tiers: [A], [B], [C].
| Member | Value |
|---|---|
RESEARCH |
'research' |
ENGINEERING_LITERATURE |
'engineering_literature' |
CONVENTION |
'convention' |
Axis (dataclass)
Decorators: dataclass(frozen=True) · Line 33
One catalogued residual axis.
| Attribute | Type | Default |
|---|---|---|
axis_id |
str |
|
title |
str |
|
tier |
ProvenanceTier |
|
source |
str |
Source
"""The residual-axis catalogue (ADR-0028 step 7), verbatim.
Axes forced by steps 1-6 of the construction procedure — error handling,
ordering, idempotency, concurrency, units, boundaries, partial failure,
capacity, data-age, pagination [C], durability — live in their own steps,
not here. This catalogue is only the **residue**: the axes step 7 forces as
explicit ``SPECIFIED / NOT_APPLICABLE / GAP`` answers, because nothing
earlier in the procedure guarantees they were considered (ADR-0028 narrows
ADR-0015's flat forced-choice list to this residue).
Each axis carries a provenance tier so its authority is never overstated:
``RESEARCH`` axes trace to validated requirements-engineering/safety
research; ``ENGINEERING_LITERATURE`` axes trace to rigorous engineering
literature outside RE; ``CONVENTION`` axes have no formal source and are
included, honestly labelled, because their failure mode is common.
"""
from __future__ import annotations
from dataclasses import dataclass
from enum import StrEnum
class ProvenanceTier(StrEnum):
"""ADR-0028's three provenance tiers: ``[A]``, ``[B]``, ``[C]``."""
RESEARCH = "research"
ENGINEERING_LITERATURE = "engineering_literature"
CONVENTION = "convention"
@dataclass(frozen=True)
class Axis:
"""One catalogued residual axis."""
axis_id: str
title: str
tier: ProvenanceTier
source: str
RESIDUAL_AXES: tuple[Axis, ...] = (
Axis(
axis_id="measurable-threshold",
title="Measurable threshold",
tier=ProvenanceTier.RESEARCH,
source="ISO/IEC/IEEE 29148",
),
Axis(
axis_id="authorization-default",
title="Authorization default",
tier=ProvenanceTier.ENGINEERING_LITERATURE,
source="Saltzer & Schroeder, fail-safe defaults",
),
Axis(
axis_id="feedback-loop",
title="Feedback loop",
tier=ProvenanceTier.RESEARCH,
source="Leveson, completeness criteria (FMSP 2000)",
),
Axis(
axis_id="observability",
title="Observability",
tier=ProvenanceTier.RESEARCH,
source="Firesmith, systematically-omitted non-functionals (JOT 6(1), 2007)",
),
Axis(
axis_id="omitted-non-functionals",
title="Omitted non-functionals",
tier=ProvenanceTier.RESEARCH,
source="Firesmith, systematically-omitted non-functionals (JOT 6(1), 2007)",
),
Axis(
axis_id="time-timezone",
title="Time / timezone",
tier=ProvenanceTier.CONVENTION,
source="engineering convention (no formal source)",
),
Axis(
axis_id="encoding-locale",
title="Encoding / locale",
tier=ProvenanceTier.CONVENTION,
source="engineering convention (no formal source)",
),
Axis(
axis_id="domain-ambiguity-probe",
title="Domain-ambiguity probe",
tier=ProvenanceTier.RESEARCH,
source="PBR (Shull, Rus & Basili, IEEE Computer 33(7), 2000)",
),
Axis(
axis_id="external-completeness",
title="External completeness",
tier=ProvenanceTier.RESEARCH,
source="ISO/IEC/IEEE 29148",
),
Axis(
axis_id="divergent-interpretation-probe",
title="Divergent-interpretation probe",
tier=ProvenanceTier.RESEARCH,
source="PBR (Shull, Rus & Basili, IEEE Computer 33(7), 2000)",
),
)