Skip to content

symfonic.platform.quick_nap_composition

quick_nap_composition

Opt-in observation of the shipped native quick-nap composition refusal.

Traceback provenance excludes unrelated constructor failures; it is not a process-tamperproof attestation. This module adds no module-level capability imports.

QuickNapCompositionRefusal dataclass

QuickNapCompositionRefusal(reason_code: str = 'quick_nap_nonpositive', surface: str = 'ConsolidationSchedule.quick_every_turns', boundary: str = 'composition', approval_reference: str = 'CORE-1:d79e0ce1-8a48-4edc-bce4-966d9c40159b')

Closed, code-owned metadata; no input, exception prose or identity.

quick_nap_schedule

quick_nap_schedule(quick_every_turns: int = 5, *, refusal_observer: Callable[[QuickNapCompositionRefusal], None] | None = None) -> ConsolidationSchedule

Construct the shipped schedule with its nightly/deep defaults.

Observe only an exact built-in nonpositive int rejected by the shipped validator. Ordinary observer failures preserve the same original refusal; BaseException (including cancellation) propagates. No observer means no IO.

Source code in src/symfonic/platform/quick_nap_composition.py
def quick_nap_schedule(
    quick_every_turns: int = 5, *,
    refusal_observer: Callable[[QuickNapCompositionRefusal], None] | None = None,
) -> ConsolidationSchedule:
    """Construct the shipped schedule with its nightly/deep defaults.

    Observe only an exact built-in nonpositive int rejected by the shipped
    validator. Ordinary observer failures preserve the same original refusal;
    BaseException (including cancellation) propagates. No observer means no IO.
    """
    from symfonic.capabilities.memory import schedule
    from symfonic.capabilities.memory.errors import MemoryContractError

    constructor = schedule.ConsolidationSchedule
    try:
        return constructor(quick_every_turns=quick_every_turns)
    except MemoryContractError as refusal:
        if (refusal_observer is not None and type(refusal) is MemoryContractError
                and type(quick_every_turns) is int and quick_every_turns <= 0):
            traceback = refusal.__traceback__
            while traceback is not None:
                frame = traceback.tb_frame
                code = frame.f_code
                if (code.co_filename == schedule.__file__
                        and code.co_qualname == "ConsolidationSchedule.validate"
                        and type(frame.f_locals.get("self")) is constructor
                        and constructor.__module__ == schedule.__name__):
                    with suppress(Exception):
                        refusal_observer(QuickNapCompositionRefusal())
                    break
                traceback = traceback.tb_next
        raise