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

Class diagram orchestrata_ultimate.factory.dor_procedure.axes

Dependency diagram

Dependency diagram orchestrata_ultimate.factory.dor_procedure.axes

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

Permalink: https://gitlab.com/MSamy/orchestrata-ultimate-architecture/-/blob/a4cbc2bdf/src/orchestrata_ultimate/factory/dor_procedure/axes.py

"""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)",
    ),
)