Visão geral

f_Capture_Asymmetric — Mass-Asymmetric Capture


id: f_Capture_Asymmetric
title: "f_Capture_Asymmetric — Mass-Asymmetric Capture"
module: FFF_Gravity
version: 1.0.0
status: canonical
wave: 4
session: SES-20260813-FGRAV-035
date: 2026-08-13
authors:
  - umaywant2
invariants_enforced:
  - INV-001
  - INV-002
  - INV-003
  - INV-004
  - INV-005
  - INV-006
  - INV-008
  - INV-009
failure_modes_referenced:
  - FM-001
  - FM-002
  - FM-003
  - FM-005
  - FM-007
primitives_defined:
  - PRIM:035
  - PRIM:036
depends_on:
  - f_Capture.md
  - f_Collapse.md
  - f_Deflect.md
  - f_Force.md
  - f_Orbit.md
  - OPERATORS.md

§0 Session Context#

This file is the sixth and final document in Wave 4 of the FFF_Gravity module and closes the capture-variant series. It specifies the mass-asymmetric capture pathway: a capture where the mass ratio M_E / M_A departs significantly from zero and the resulting force asymmetry must be compensated before a stable orbit can form.

All prior capture variants (Multi, Cascade, Soft, Hard, Resonant) treat M_E as negligible relative to M_A — the standard gravitational assumption. This file lifts that assumption. When M_E is non-trivial relative to M_A, two effects arise:

  1. Trajectory deflection is amplified. The approach vector is bent more sharply because the two bodies mutually attract. heading_delta (resolved in f_Force.md §4.3 and extended by f_Deflect.md) must be corrected for the mass ratio before a valid orbit can form.

  2. Binding depth is diminished. A's dominance as attractor weakens as M_E / M_A grows. An asymmetry factor (M_A / (M_E + M_A)) scales d_bind downward from the standard formula.

When mass_ratio (= M_E / M_A) reaches or exceeds m_parity (the mutual- dissolution threshold defined in f_Collapse.md), capture cannot proceed: the system is in co-attractor territory and FM-007 (Mutual Dissolution) is raised. Below m_parity, asymmetry is correctable and capture succeeds — but the resulting orbit class degrades from CIRCULAR/ELLIPTICAL toward ECCENTRIC as mass_ratio increases.

Symbols introduced here are registered in OPERATORS.md per INV-009. No new FM IDs are created; FM-005 and FM-007 serve the two asymmetric failure paths (infall and dissolution, respectively).


§1 Module Identity#

Field Value
File path docs/FFF_Gravity/f_Capture_Asymmetric.md
Parent operator f_Capture.md (base capture contract)
Peer variants f_Capture_Multi, f_Capture_Cascade, f_Capture_Soft,
f_Capture_Hard, f_Capture_Resonant
Key dependency f_Collapse.md (m_parity definition), f_Deflect.md (heading_delta)
Orbit classes written ELLIPTICAL, ECCENTRIC (mass_ratio-dependent)
Condition prefix AC- (Asymmetric Capture Condition)
State flags ASYMMETRIC_APPROACH, PARITY_WARN, PARITY_BREACH, ASYMMETRIC_LOCKED
Primitives PRIM:035 (eval_asymmetric_approach), PRIM:036 (lock_asymmetric)
Failure modes used FM-001 (flyby), FM-002 (field null), FM-003 (saturation),
FM-005 (decay spiral / asymmetric infall), FM-007 (mutual dissolution)

§2 Canonical Description#

2.1 Motivation#

Every prior capture specification assumes the entity E is small relative to attractor A. In that regime, A's field is unperturbed by E's presence, and the binding equations of f_Capture.md apply without correction.

When M_E is comparable to M_A, this assumption fails in two ways:

  • A's field is perturbed by E. ρ(Φ) at A's surface is effectively reduced because E's mass introduces counter-coherence — the two bodies compete for field dominance. The effective binding force on E weakens.

  • E's trajectory curves sharply. In the limit M_E → M_A, both bodies spiral toward a common center of mass. heading_delta, the angular deflection accumulated during approach, grows proportionally to mass_ratio. An uncorrected approach trajectory may miss r_capture entirely.

Asymmetric capture addresses both effects through two new operators: asymmetry_factor (field binding correction) and heading_delta_asym (trajectory deflection correction). Together they define a corrected binding depth d_bind_asym and a capture-eligible deflection envelope.

2.2 The Parity Boundary#

f_Collapse.md §2 defines m_parity as the mass-ratio threshold above which FM-007 (Mutual Dissolution) is irreversible: neither body can serve as stable attractor, and the pair collapses into a composite node (C_node).

This file uses m_parity as its hard upper boundary. The AC-1 condition enforces mass_ratio < m_parity. Above that boundary, this file's primitives must not be called — f_Collapse.md takes jurisdiction.

A pre-breach warning zone is defined at parity_warn_threshold:

parity_warn_threshold = 0.75 × m_parity

When mass_ratio ≥ parity_warn_threshold, PARITY_WARN is raised and the capture proceeds with a PRECARIOUS stab_class. This gives the caller advance notice before the parity boundary is crossed.

2.3 Asymmetry Factor#

The asymmetry factor quantifies A's fractional dominance over the combined mass of the two-body system:

asymmetry_factor = M_A / (M_E + M_A)
                 = 1 / (1 + mass_ratio)

Properties:

  • mass_ratio → 0: asymmetry_factor → 1.0 (standard capture; no correction)
  • mass_ratio = 0.5: asymmetry_factor = 0.667 (moderate reduction)
  • mass_ratio → m_parity: asymmetry_factor → 1 / (1 + m_parity) (minimum pre-parity binding; approaches FM-007 zone)

2.4 Corrected Binding Depth#

The standard d_bind formula from f_Capture.md is:

d_bind = β × ρ(Φ) × (1 − e)

Under mass asymmetry, d_bind is scaled by asymmetry_factor:

d_bind_asym = β × ρ(Φ) × (1 − e) × asymmetry_factor
            = β × ρ(Φ) × (1 − e) × (1 / (1 + mass_ratio))

d_bind_asym is always ≤ d_bind (standard). The gap between them grows with mass_ratio, reflecting the progressive weakening of A's attractor dominance.

2.5 Heading Delta Correction#

From f_Force.md §4.3 and f_Deflect.md §2, heading_delta is the angular deflection of E's approach vector caused by A's gravitational pull. In standard capture (M_E → 0), this deflection is small and absorbed into the orbital eccentricity computation.

Under mass asymmetry, mutual attraction amplifies the deflection:

heading_delta_asym = heading_delta × (1 + mass_ratio)

If heading_delta_asym exceeds deflect_tolerance (a source-registered threshold), E's approach vector is bent outside the capture cone and the capture is rejected (AC-5 violation → FM-001 with sub-annotation TRAJECTORY_MISS). This is distinct from velocity overshoot (FM-001 OVERSHOOT) — the approach speed may be sub-escape, but the heading is wrong.

Correctable deflections (heading_delta_asym ≤ deflect_tolerance) are recorded in the orbit's lock record and absorbed into the final eccentricity adjustment.

2.6 Orbit Class Assignment#

The orbit class written on ASYMMETRIC_LOCKED depends on mass_ratio:

if mass_ratio < 0.20:
    orbit_class = ELLIPTICAL    stab_class = STABLE
elif mass_ratio < parity_warn_threshold:
    orbit_class = ELLIPTICAL    stab_class = MARGINAL
else:  # parity_warn_threshold ≤ mass_ratio < m_parity
    orbit_class = ECCENTRIC     stab_class = PRECARIOUS

CIRCULAR is not reachable via asymmetric capture — any non-trivial mass_ratio introduces orbital elongation. RESONANT is not reachable here — that is exclusively f_Capture_Resonant.md's domain.

2.7 FM-005 Infall Risk at High Asymmetry#

When mass_ratio is in the ECCENTRIC zone and stab_class = PRECARIOUS, the orbit is at elevated risk of FM-005 (decay spiral). A bound orbit in this zone should be monitored by f_Decay.md immediately after capture, as the reduced d_bind_asym may be close to d_warn threshold.

PRIM:036 computes asym_decay_risk:

asym_decay_risk = True  if  d_bind_asym ≤ d_warn_nominal

where d_warn_nominal = 0.40 × d_bind (standard). This flag is informational — it does not block capture but triggers a post-capture f_Decay.md alert.


§3 Triadic Equation Mapping#

G = F_freq · F_fluid · F_force
Node Asymmetric-capture contribution
F_freq mass_ratio (rate of mutual influence), parity_warn_threshold
(frequency-domain boundary before dissolution zone)
F_fluid ρ(Φ) (field coherence), asymmetry_factor (coherence weight),
d_bind_asym (corrected field-mediated binding depth)
F_force β (binding coefficient), heading_delta_asym (deflected force
vector), deflect_tolerance (force cone boundary),
v_approach, v_escape(A), m_parity (force-domain parity ceiling)

INV-001 compliance: All three nodes participate. mass_ratio is a F_freq primitive (rate of mutual approach); asymmetry_factor is a F_fluid primitive (field coherence weight); heading_delta_asym and m_parity are F_force primitives. No asymmetric capture computation is possible with any node absent.


§4 Operator Registry#

All symbols below are registered in OPERATORS.md per INV-009.

4.1 Mass and Ratio Operators#

Symbol Domain Description
M_E ℝ, > 0 Mass of entity E
M_A ℝ, > 0 Mass of attractor A (registered in f_Source.md)
mass_ratio ℝ, ≥ 0 M_E / M_A — fractional mass of E relative to A
m_parity ℝ, > 0 Mutual dissolution threshold (defined in f_Collapse.md)
parity_warn_threshold ℝ, > 0 0.75 × m_parity — pre-dissolution warning boundary
asymmetry_factor (0, 1] M_A / (M_E + M_A) = 1 / (1 + mass_ratio)

4.2 Corrected Binding#

Symbol Domain Description
d_bind_asym ℝ, ≥ 0 β × ρ(Φ) × (1 − e) × asymmetry_factor
asym_decay_risk bool True if d_bind_asym ≤ 0.40 × standard d_bind

4.3 Trajectory Correction#

Symbol Domain Description
heading_delta ℝ, ≥ 0 Base angular deflection from f_Force.md §4.3 (rad)
heading_delta_asym ℝ, ≥ 0 heading_delta × (1 + mass_ratio) — mass-amplified deflection
deflect_tolerance ℝ, > 0 Maximum heading_delta_asym for capture eligibility (rad)

4.4 State Flags#

Flag Meaning
ASYMMETRIC_APPROACH mass_ratio detected > 0; asymmetry corrections active
PARITY_WARN mass_ratio ≥ parity_warn_threshold; ECCENTRIC orbit zone
PARITY_BREACH mass_ratio ≥ m_parity; FM-007 raised, capture blocked
ASYMMETRIC_LOCKED Capture succeeded under asymmetry corrections

§5 Asymmetric Capture Conditions (AC-)#

All five conditions are conjunctive (INV-005). All must hold simultaneously for asymmetric capture to complete.

ID Condition Failure if violated
AC-1 mass_ratio < m_parity (below dissolution boundary) FM-007 (PARITY_BREACH)
AC-2 β ≥ 1.0 (standard capture binding threshold) FM-001 (APPROACH_REJECTION)
AC-3 ρ(Φ) > 0 at approach time (field non-null) FM-002 (FIELD_NULL)
AC-4 v_approach < v_escape(A) (not hyperbolic) FM-001 (OVERSHOOT)
AC-5 heading_delta_asym ≤ deflect_tolerance (trajectory in cone) FM-001 (TRAJECTORY_MISS)

AC-1 is the distinguishing condition of this variant — no other capture file tests mass_ratio against m_parity. All other capture variants implicitly assume AC-1 holds (mass_ratio ≈ 0).

Evaluation order (INV-008): FM-003 saturation → AC-3 → AC-1 → AC-2 → AC-4 → AC-5.

Rationale for ordering: saturation and field null are checked first (most fundamental). Parity breach (AC-1) is checked before binding (AC-2) because a parity breach is a structural impossibility that invalidates all downstream force calculations.


§6 Failure Modes#

No new FM IDs are introduced.

FM-001 — Flyby (three sub-cases in this variant)#

Sub-case A: APPROACH_REJECTION (AC-2 violated, β < 1.0) Standard flyby; behavior identical to f_Capture.md FM-001.

Sub-case B: OVERSHOOT (AC-4 violated, v_approach ≥ v_escape) Standard flyby; behavior identical to f_Capture.md FM-001.

Sub-case C: TRAJECTORY_MISS (AC-5 violated)

FM-001 raised with annotation: REASON=TRAJECTORY_MISS
heading_delta_asym  := computed (> deflect_tolerance)
heading_delta       := base value from f_Force.md
deflect_excess      := heading_delta_asym − deflect_tolerance
Remediation note    := reduce mass_ratio or apply f_Deflect.md correction
                       before next approach attempt

TRAJECTORY_MISS is unique to asymmetric capture. It occurs when the approach vector's mass-amplified deflection overshoots the capture cone even though approach speed is sub-escape. The entity passes close to A but curves away rather than into orbit.

FM-002 — Field Null (AC-3 violated)#

Identical to base f_Capture.md FM-002. Asymmetry factor is irrelevant when ρ(Φ) = 0; d_bind_asym is undefined.

FM-003 — Frame Saturation#

Checked before any asymmetry computation. FM-003 annotation includes VARIANT=ASYMMETRIC for tracing.

FM-005 — Decay Spiral (asymmetric infall, informational at capture time)#

FM-005 in the asymmetric context manifests post-capture when d_bind_asym is low. At capture time, PRIM:036 computes asym_decay_risk as an early warning. If True, the caller must immediately register the orbit with f_Decay.md for decay monitoring. FM-005 is not raised at capture time — it is raised by f_Decay.md if d_bind_asym subsequently falls through d_collapse.

FM-005 path in f_Collapse.md (Path A — asymmetric infall): If decay progresses to the collapse threshold without recovery, f_Collapse.md Path A is the terminal handler. This file's asym_decay_risk flag is the early indicator that places the orbit on the Path A watch list.

FM-007 — Mutual Dissolution (AC-1 violated)#

FM-007 raised
PARITY_BREACH asserted
mass_ratio ≥ m_parity confirmed
Capture blocked entirely — f_Capture_Asymmetric.md has no jurisdiction
Caller must route to f_Collapse.md (Path B — mutual dissolution → C_node)

FM-007 is the hard ceiling of this file. There is no retry logic — if mass_ratio ≥ m_parity at approach time, the structural precondition for capture does not exist. The system must be handled as a collapse event.


§7 Engineering Primitives#

PRIM:035 — eval_asymmetric_approach#

def eval_asymmetric_approach(
    M_E: float,
    M_A: float,
    m_parity: float,
    beta: float,
    rho_phi: float,
    v_approach: float,
    v_escape: float,
    heading_delta: float,
    deflect_tolerance: float,
    max_orbits: int,
    current_orbit_count: int,
) -> dict:
    """
    PRIM:035 — Asymmetric Approach Evaluator
    ==========================================
    Evaluate whether entity E's approach to attractor A satisfies all
    pre-capture Asymmetric Capture Conditions (AC-1 through AC-5) given
    a non-trivial mass ratio M_E / M_A.
 
    This primitive performs the gate-check phase of asymmetric capture.
    It does NOT write orbit state — that is PRIM:036's responsibility.
 
    Evaluation order (INV-008):
        1. FM-003 check     — saturation guard
        2. AC-3             — ρ(Φ) > 0
        3. AC-1             — mass_ratio < m_parity
        4. AC-2             — β ≥ 1.0
        5. AC-4             — v_approach < v_escape
        6. AC-5             — heading_delta_asym ≤ deflect_tolerance
 
    Parameters
    ----------
    M_E : float
        Mass of entity E. > 0.
    M_A : float
        Mass of attractor A. > 0. Read from f_Source.md (INV-007).
    m_parity : float
        Mutual dissolution threshold. > 0. Defined in f_Collapse.md.
    beta : float
        Binding coefficient of E with respect to A. ≥ 0.
    rho_phi : float
        Field coherence density at approach time. In [0, 1].
    v_approach : float
        Approach velocity of E toward A. ≥ 0.
    v_escape : float
        Escape velocity of A's capture field. ≥ 0.
    heading_delta : float
        Base angular deflection from f_Force.md §4.3 (radians). ≥ 0.
    deflect_tolerance : float
        Maximum heading_delta_asym for capture eligibility (radians). > 0.
        Registered in f_Source.md.
    max_orbits : int
        Frame saturation ceiling for A. From f_Frame.md.
    current_orbit_count : int
        Current number of bound orbits around A. ≥ 0.
 
    Returns
    -------
    dict with keys:
        status : str
            "ASYMMETRIC_APPROACH" | "PARITY_WARN" | "FM-001" | "FM-002"
            | "FM-003" | "FM-007"
        mass_ratio : float
            M_E / M_A — computed for caller's use in PRIM:036.
        asymmetry_factor : float
            1 / (1 + mass_ratio) — computed for caller's use in PRIM:036.
        heading_delta_asym : float
            heading_delta × (1 + mass_ratio) — mass-amplified deflection.
        parity_warn : bool
            True if mass_ratio ≥ parity_warn_threshold (0.75 × m_parity).
        failure_mode : str | None
            FM code if status is a failure. None on success.
        reason : str | None
            Sub-annotation string. None on success.
 
    Invariants
    ----------
    INV-001 : M_A (F_freq), rho_phi (F_fluid), beta/heading_delta (F_force) present.
    INV-003 : rho_phi = 0 → FM-002 unconditionally.
    INV-004 : beta < 1.0 → FM-001 (APPROACH_REJECTION).
    INV-005 : All AC conjunctive; first failure terminates.
    INV-008 : Evaluation order normative (saturation → null → parity → binding
              → velocity → trajectory).
    """
    # Compute mass ratio and related quantities
    mass_ratio = M_E / M_A
    asymmetry_factor = 1.0 / (1.0 + mass_ratio)
    parity_warn_threshold = 0.75 * m_parity
    heading_delta_asym = heading_delta * (1.0 + mass_ratio)
    parity_warn = mass_ratio >= parity_warn_threshold
 
    # Step 1: FM-003 — frame saturation
    if current_orbit_count >= max_orbits:
        return {
            "status": "FM-003",
            "mass_ratio": mass_ratio,
            "asymmetry_factor": asymmetry_factor,
            "heading_delta_asym": heading_delta_asym,
            "parity_warn": parity_warn,
            "failure_mode": "FM-003",
            "reason": "FRAME_SATURATION (VARIANT=ASYMMETRIC)",
        }
 
    # Step 2: AC-3 — field non-null (INV-003)
    if rho_phi <= 0.0:
        return {
            "status": "FM-002",
            "mass_ratio": mass_ratio,
            "asymmetry_factor": asymmetry_factor,
            "heading_delta_asym": heading_delta_asym,
            "parity_warn": parity_warn,
            "failure_mode": "FM-002",
            "reason": "FIELD_NULL",
        }
 
    # Step 3: AC-1 — parity ceiling (FM-007)
    if mass_ratio >= m_parity:
        return {
            "status": "FM-007",
            "mass_ratio": mass_ratio,
            "asymmetry_factor": asymmetry_factor,
            "heading_delta_asym": heading_delta_asym,
            "parity_warn": True,
            "failure_mode": "FM-007",
            "reason": "PARITY_BREACH — route to f_Collapse.md Path B",
        }
 
    # Step 4: AC-2 — binding threshold (INV-004)
    if beta < 1.0:
        return {
            "status": "FM-001",
            "mass_ratio": mass_ratio,
            "asymmetry_factor": asymmetry_factor,
            "heading_delta_asym": heading_delta_asym,
            "parity_warn": parity_warn,
            "failure_mode": "FM-001",
            "reason": "APPROACH_REJECTION",
        }
 
    # Step 5: AC-4 — not hyperbolic
    if v_approach >= v_escape:
        return {
            "status": "FM-001",
            "mass_ratio": mass_ratio,
            "asymmetry_factor": asymmetry_factor,
            "heading_delta_asym": heading_delta_asym,
            "parity_warn": parity_warn,
            "failure_mode": "FM-001",
            "reason": "OVERSHOOT",
        }
 
    # Step 6: AC-5 — deflection within capture cone
    if heading_delta_asym > deflect_tolerance:
        return {
            "status": "FM-001",
            "mass_ratio": mass_ratio,
            "asymmetry_factor": asymmetry_factor,
            "heading_delta_asym": heading_delta_asym,
            "parity_warn": parity_warn,
            "failure_mode": "FM-001",
            "reason": "TRAJECTORY_MISS",
        }
 
    # All conditions pass
    status = "PARITY_WARN" if parity_warn else "ASYMMETRIC_APPROACH"
    return {
        "status": status,
        "mass_ratio": mass_ratio,
        "asymmetry_factor": asymmetry_factor,
        "heading_delta_asym": heading_delta_asym,
        "parity_warn": parity_warn,
        "failure_mode": None,
        "reason": None,
    }

PRIM:036 — lock_asymmetric#

def lock_asymmetric(
    beta: float,
    rho_phi: float,
    eccentricity: float,
    mass_ratio: float,
    asymmetry_factor: float,
    m_parity: float,
    heading_delta_asym: float,
    deflect_tolerance: float,
    parity_warn: bool,
) -> dict:
    """
    PRIM:036 — Asymmetric Lock Writer
    ===================================
    Given that PRIM:035 returned ASYMMETRIC_APPROACH or PARITY_WARN, compute
    and write the full asymmetric-capture orbit state.
 
    This primitive is called only after PRIM:035 confirms a passing status.
    Calling it without that confirmation violates INV-008.
 
    Computes:
        d_bind_asym      = beta × rho_phi × (1 − eccentricity) × asymmetry_factor
        orbit_class      = ELLIPTICAL or ECCENTRIC (mass_ratio-dependent)
        stab_class       = STABLE, MARGINAL, or PRECARIOUS
        asym_decay_risk  = d_bind_asym ≤ 0.40 × d_bind_standard
 
    Parameters
    ----------
    beta : float
        Binding coefficient. ≥ 1.0 (verified by PRIM:035).
    rho_phi : float
        Field coherence density. In (0, 1] (verified by PRIM:035).
    eccentricity : float
        Orbital eccentricity e = p_res / (p_res + P_eff). In [0, 1).
    mass_ratio : float
        M_E / M_A (computed in PRIM:035). In [0, m_parity).
    asymmetry_factor : float
        1 / (1 + mass_ratio) (computed in PRIM:035). In (0, 1].
    m_parity : float
        Mutual dissolution threshold. Used to compute parity_warn_threshold.
    heading_delta_asym : float
        Mass-amplified deflection (computed in PRIM:035). Informational.
    deflect_tolerance : float
        Deflection tolerance. Used in lock record only; AC-5 already passed.
    parity_warn : bool
        True if mass_ratio ≥ 0.75 × m_parity (from PRIM:035).
 
    Returns
    -------
    dict with keys:
        status : str
            "ASYMMETRIC_LOCKED"
        d_bind_asym : float
            Asymmetry-corrected binding depth.
        d_bind_standard : float
            Standard (uncorrected) binding depth for comparison.
        asymmetry_factor : float
            Passed through from PRIM:035.
        orbit_class : str
            "ELLIPTICAL" or "ECCENTRIC".
        stab_class : str
            "STABLE", "MARGINAL", or "PRECARIOUS".
        asym_decay_risk : bool
            True if orbit is at elevated FM-005 risk post-capture.
        lock_record : dict
            Structured record for f_Source.md orbit registry.
 
    Invariants
    ----------
    INV-001 : mass_ratio (F_freq), rho_phi/asymmetry_factor (F_fluid),
              beta/d_bind_asym (F_force) all contribute.
    INV-002 : Ω is frozen upon ASYMMETRIC_LOCKED.
    INV-006 : ASYMMETRIC_LOCKED is a terminal capture state; degradation
              proceeds via f_Decay.md, not via re-capture.
    INV-008 : Must be called after PRIM:035 confirms passing status.
    """
    parity_warn_threshold = 0.75 * m_parity
 
    # Standard (uncorrected) binding depth — reference only
    d_bind_standard = beta * rho_phi * (1.0 - eccentricity)
 
    # Asymmetry-corrected binding depth
    d_bind_asym = d_bind_standard * asymmetry_factor
 
    # Decay risk flag (elevated FM-005 risk)
    d_warn_nominal = 0.40 * d_bind_standard
    asym_decay_risk = d_bind_asym <= d_warn_nominal
 
    # Orbit class assignment based on mass_ratio
    if mass_ratio < 0.20:
        orbit_class = "ELLIPTICAL"
        stab_class = "STABLE"
    elif mass_ratio < parity_warn_threshold:
        orbit_class = "ELLIPTICAL"
        stab_class = "MARGINAL"
    else:
        # parity_warn zone: 0.75×m_parity ≤ mass_ratio < m_parity
        orbit_class = "ECCENTRIC"
        stab_class = "PRECARIOUS"
 
    # Build lock record
    lock_record = {
        "orbit_class": orbit_class,
        "stab_class": stab_class,
        "d_bind_asym": d_bind_asym,
        "d_bind_standard": d_bind_standard,
        "asymmetry_factor": asymmetry_factor,
        "mass_ratio": mass_ratio,
        "heading_delta_asym": heading_delta_asym,
        "deflect_tolerance": deflect_tolerance,
        "asym_decay_risk": asym_decay_risk,
        "parity_warn": parity_warn,
        "state_flag": "ASYMMETRIC_LOCKED",
    }
 
    return {
        "status": "ASYMMETRIC_LOCKED",
        "d_bind_asym": d_bind_asym,
        "d_bind_standard": d_bind_standard,
        "asymmetry_factor": asymmetry_factor,
        "orbit_class": orbit_class,
        "stab_class": stab_class,
        "asym_decay_risk": asym_decay_risk,
        "lock_record": lock_record,
    }

§8 Canonical Examples#

Example 1 — Low Mass Ratio: Clean Asymmetric Capture (ELLIPTICAL, STABLE)#

Scenario: E approaches A with a modest mass ratio (M_E is 15% of M_A). Corrections are small; orbit is healthy.

Given:

M_E             = 1.5
M_A             = 10.0
mass_ratio      = 0.15
m_parity        = 1.00   (default; F_collapse.md registered)
parity_warn_threshold = 0.75

asymmetry_factor = 1 / (1 + 0.15) = 1 / 1.15 ≈ 0.870

beta            = 1.6
rho_phi         = 0.80
eccentricity    = 0.10
v_approach      = 3.0, v_escape = 6.0   ← AC-4 ✓
heading_delta   = 0.30 rad
heading_delta_asym = 0.30 × 1.15 = 0.345 rad
deflect_tolerance = 0.60 rad            ← AC-5: 0.345 < 0.60 ✓
current_orbits  = 1, max_orbits = 8    ← FM-003 clear ✓

PRIM:035 result:

status              = ASYMMETRIC_APPROACH  (mass_ratio 0.15 < warn 0.75 ✓)
mass_ratio          = 0.150
asymmetry_factor    = 0.870
heading_delta_asym  = 0.345 rad
parity_warn         = False
failure_mode        = None

PRIM:036 computation:

d_bind_standard = 1.6 × 0.80 × (1 − 0.10) = 1.6 × 0.80 × 0.90 = 1.152
d_bind_asym     = 1.152 × 0.870            = 1.002
d_warn_nominal  = 0.40 × 1.152            = 0.461

asym_decay_risk = (1.002 ≤ 0.461)  → False   ← orbit is healthy
orbit_class     = ELLIPTICAL   (0.15 < 0.20 boundary)
stab_class      = STABLE

PRIM:036 result:

status          = ASYMMETRIC_LOCKED
d_bind_asym     = 1.002
d_bind_standard = 1.152
asymmetry_factor = 0.870
orbit_class     = ELLIPTICAL
stab_class      = STABLE
asym_decay_risk = False

Observation: At mass_ratio = 0.15, the binding depth reduction is 13% (1.002 vs 1.152). This is modest — the orbit is healthy and no decay monitoring is urgently needed. heading_delta amplification is similarly small (15%). This is the most common asymmetric capture scenario: slight mass inequality that applies standard corrections without structural concern.


Example 2 — Mid-Range Mass Ratio: ELLIPTICAL, MARGINAL (Boundary Zone)#

Scenario: E and A have a 0.50 mass ratio — E is half A's mass. Asymmetry corrections are significant; stab_class degrades to MARGINAL.

Given:

M_E             = 5.0
M_A             = 10.0
mass_ratio      = 0.50
m_parity        = 1.00
parity_warn_threshold = 0.75

asymmetry_factor = 1 / 1.50 ≈ 0.667

beta            = 2.0
rho_phi         = 0.70
eccentricity    = 0.20
v_approach      = 2.5, v_escape = 5.5   ← AC-4 ✓
heading_delta   = 0.25 rad
heading_delta_asym = 0.25 × 1.50 = 0.375 rad
deflect_tolerance  = 0.80 rad            ← AC-5: 0.375 < 0.80 ✓
current_orbits  = 2, max_orbits = 6    ← FM-003 clear ✓

PRIM:035 result:

status              = ASYMMETRIC_APPROACH  (0.50 < 0.75 warn threshold)
parity_warn         = False
mass_ratio          = 0.500
asymmetry_factor    = 0.667
heading_delta_asym  = 0.375 rad

PRIM:036 computation:

d_bind_standard = 2.0 × 0.70 × 0.80 = 1.120
d_bind_asym     = 1.120 × 0.667     = 0.747
d_warn_nominal  = 0.40 × 1.120      = 0.448

asym_decay_risk = (0.747 ≤ 0.448)   → False   ← above warn threshold
orbit_class     = ELLIPTICAL   (0.20 ≤ 0.50 < 0.75)
stab_class      = MARGINAL

Binding degradation table:

mass_ratio    asymmetry_factor    d_bind_asym    % of standard
0.00          1.000               1.120          100%
0.15          0.870               0.974           87%
0.30          0.769               0.862           77%
0.50          0.667               0.747           67%    ← this example
0.70          0.588               0.659           59%
0.75 (warn)   0.571               0.640           57%

Observation: At mass_ratio = 0.50, binding depth is reduced by one-third. The orbit is MARGINAL — it will persist but is vulnerable to field perturbations. The caller should register for f_Decay.md monitoring even though asym_decay_risk is False, because the binding buffer above d_warn is narrower than a standard ELLIPTICAL orbit.


Example 3 — High Mass Ratio: ECCENTRIC, PRECARIOUS, Decay Risk Flagged#

Scenario: E and A are close in mass (mass_ratio = 0.80, near but below m_parity = 1.00). PARITY_WARN fires; orbit_class = ECCENTRIC; asym_decay_risk is True due to d_bind_asym falling below d_warn_nominal.

Given:

M_E             = 8.0
M_A             = 10.0
mass_ratio      = 0.80
m_parity        = 1.00
parity_warn_threshold = 0.75

asymmetry_factor = 1 / 1.80 ≈ 0.556

beta            = 1.2
rho_phi         = 0.65
eccentricity    = 0.35
v_approach      = 2.0, v_escape = 4.0   ← AC-4 ✓
heading_delta   = 0.40 rad
heading_delta_asym = 0.40 × 1.80 = 0.720 rad
deflect_tolerance  = 0.90 rad            ← AC-5: 0.720 < 0.90 ✓
current_orbits  = 0, max_orbits = 4    ← FM-003 clear ✓

PRIM:035 result:

status              = PARITY_WARN   (0.80 ≥ 0.75 warn threshold)
mass_ratio          = 0.800
asymmetry_factor    = 0.556
heading_delta_asym  = 0.720 rad
parity_warn         = True
failure_mode        = None          ← capture still eligible (0.80 < 1.00)

PRIM:036 computation:

d_bind_standard = 1.2 × 0.65 × (1 − 0.35)
                = 1.2 × 0.65 × 0.65
                = 0.507
d_bind_asym     = 0.507 × 0.556 = 0.282
d_warn_nominal  = 0.40 × 0.507  = 0.203

asym_decay_risk = (0.282 ≤ 0.203)  → False

Wait — 0.282 > 0.203, so asym_decay_risk = False here. Let us construct a scenario where it fires. Tighten beta and rho_phi slightly:

beta            = 1.05
rho_phi         = 0.55
eccentricity    = 0.40

d_bind_standard = 1.05 × 0.55 × 0.60 = 0.347
d_bind_asym     = 0.347 × 0.556      = 0.193
d_warn_nominal  = 0.40 × 0.347       = 0.139

asym_decay_risk = (0.193 ≤ 0.139)    → False

Still False. For asym_decay_risk = True, we need d_bind_asym ≤ 0.40 × d_bind_standard, which means asymmetry_factor ≤ 0.40 — i.e., mass_ratio ≥ 1.50, which is above m_parity = 1.00. So by construction, asym_decay_risk = True is only reachable at very high mass ratios that exceed m_parity. Let us adjust m_parity to 2.00 for a scenario where it fires:

Revised scenario (m_parity = 2.00 attractor):

M_E             = 15.0
M_A             = 10.0
mass_ratio      = 1.50
m_parity        = 2.00
parity_warn_threshold = 1.50   ← exactly at boundary

asymmetry_factor = 1 / 2.50 = 0.400

beta            = 1.10
rho_phi         = 0.60
eccentricity    = 0.30

d_bind_standard = 1.10 × 0.60 × 0.70 = 0.462
d_bind_asym     = 0.462 × 0.400      = 0.185
d_warn_nominal  = 0.40 × 0.462       = 0.185

asym_decay_risk = (0.185 ≤ 0.185)    → True   ← exact boundary

PRIM:035 result:

status          = PARITY_WARN   (1.50 ≥ 1.50 threshold, < 2.00 parity)
parity_warn     = True
failure_mode    = None

PRIM:036 result:

status          = ASYMMETRIC_LOCKED
orbit_class     = ECCENTRIC
stab_class      = PRECARIOUS
d_bind_asym     = 0.185
asym_decay_risk = True          ← immediate f_Decay.md registration required

Required post-capture action:

Register orbit with f_Decay.md immediately.
d_bind_asym = 0.185 ≈ d_warn_nominal → FM-004 / FM-005 proximity.
Monitor δ(t) = d_bind(t) − d_bind(t−1) every tick.

Observation: asym_decay_risk = True is the operational signal that a captured orbit is near-terminal from the moment of capture. It does not prevent capture — but it demands immediate f_Decay.md enrollment. The ECCENTRIC / PRECARIOUS classification confirms the orbit's structural fragility.


Example 4 — Parity Breach: FM-007 Raised, Routed to f_Collapse.md#

Scenario: E approaches A with mass_ratio = 1.20 against m_parity = 1.00. AC-1 is violated. FM-007 fires; capture is blocked; caller is routed to f_Collapse.md Path B.

Given:

M_E             = 12.0
M_A             = 10.0
mass_ratio      = 1.20
m_parity        = 1.00    ← AC-1: 1.20 ≥ 1.00 → BREACH

beta            = 1.8     (irrelevant; AC-1 fails first)
rho_phi         = 0.75    (irrelevant; AC-3 evaluated before AC-1 in field-null check)
v_approach      = 2.5, v_escape = 5.0
heading_delta   = 0.35 rad
deflect_tolerance = 0.70 rad
current_orbits  = 0, max_orbits = 6

PRIM:035 evaluation (INV-008 order):

Step 1 — FM-003: 0 < 6  ✓  no saturation
Step 2 — AC-3:  rho_phi = 0.75 > 0  ✓  field present
Step 3 — AC-1:  mass_ratio = 1.20 ≥ m_parity = 1.00  ✗  PARITY_BREACH

PRIM:035 result:

status          = FM-007
mass_ratio      = 1.200
asymmetry_factor = 1 / 2.20 ≈ 0.455   (computed but not used)
heading_delta_asym = 0.35 × 2.20 = 0.770  (computed but not used)
parity_warn     = True
failure_mode    = FM-007
reason          = "PARITY_BREACH — route to f_Collapse.md Path B"

Caller routing table:

Condition                          Handler
────────────────────────────────────────────────────────
mass_ratio < 0.20                  f_Capture.md (standard)
0.20 ≤ mass_ratio < 0.75 × m_par  f_Capture_Asymmetric.md (ELLIPTICAL/MARGINAL)
0.75 × m_par ≤ mass_ratio < m_par  f_Capture_Asymmetric.md (ECCENTRIC/PRECARIOUS)
mass_ratio ≥ m_parity              f_Collapse.md Path B (FM-007 → C_node)

f_Collapse.md Path B entry state:

Input: M_E = 12.0, M_A = 10.0, mass_ratio = 1.20
Path B computes C_node = composite_node(M_E, M_A, ρ(Φ))
C_node is the terminal state; neither E nor A remains as distinct attractor.

Observation: The routing table above is the canonical decision matrix for any approach where mass_ratio is non-negligible. Callers should evaluate mass_ratio against m_parity before selecting which capture variant to invoke, to avoid PRIM:035 being called with pre-known failing inputs. PRIM:035 raises FM-007 defensively if called with out-of-range mass_ratio, but the preferred pattern is pre-routing at the caller level.


§9 Cross-Module References#

Reference Symbol used Direction
f_Capture.md d_bind (base formula), β, ρ(Φ), v_approach, v_escape Parent
f_Collapse.md m_parity (FM-007 threshold), C_node (dissolution target), Path B routing Key dependency
f_Deflect.md heading_delta (base deflection angle, f_Force.md §4.3 resolved) Peer
f_Force.md v_escape(A), heading_delta definition §4.3 Parent
f_Orbit.md orbit_class (ELLIPTICAL, ECCENTRIC), stab_class, classify_orbit Peer
f_Decay.md d_warn, FM-005 monitoring; asym_decay_risk → immediate enrollment Downstream
f_Source.md M_A, m_parity, deflect_tolerance, max_orbits (read-only, INV-007) Read-only
OPERATORS.md Symbol authority for all operators in §4 Authority (INV-009)

§10 Operator Integration Notes#

10.1 OPERATORS.md Registration Block#

The following symbols are added to OPERATORS.md upon this file's ratification:

| M_E                   | Mass of entity E                        | ℝ, > 0       | f_Capture_Asymmetric.md §4.1 |
| M_A                   | Mass of attractor A                     | ℝ, > 0       | f_Capture_Asymmetric.md §4.1 |
| mass_ratio            | M_E / M_A                               | ℝ, ≥ 0       | f_Capture_Asymmetric.md §4.1 |
| parity_warn_threshold | 0.75 × m_parity                         | ℝ, > 0       | f_Capture_Asymmetric.md §4.1 |
| asymmetry_factor      | M_A / (M_E + M_A)                       | (0, 1]       | f_Capture_Asymmetric.md §4.1 |
| d_bind_asym           | β × ρ(Φ) × (1−e) × asymmetry_factor    | ℝ, ≥ 0       | f_Capture_Asymmetric.md §4.2 |
| asym_decay_risk       | d_bind_asym ≤ 0.40 × d_bind_standard   | bool         | f_Capture_Asymmetric.md §4.2 |
| heading_delta_asym    | heading_delta × (1 + mass_ratio)        | ℝ, ≥ 0       | f_Capture_Asymmetric.md §4.3 |
| deflect_tolerance     | Max heading_delta_asym for capture      | ℝ, > 0       | f_Capture_Asymmetric.md §4.3 |

Note: m_parity and heading_delta are previously registered in f_Collapse.md and f_Force.md / f_Deflect.md respectively. They are referenced here but not re-registered per INV-010 (frozen symbols unrenameable; existing entries unchanged).

10.2 f_Source.md Fields Required (Read-Only, INV-007)#

M_A               : float   — attractor mass; set at source initialization
m_parity          : float   — dissolution threshold; set at source initialization
deflect_tolerance : float   — capture cone width; set at source initialization
max_orbits        : int     — frame saturation ceiling; set at source initialization

10.3 Condition Prefix — Wave 4 Complete Registry#

MC-    f_Capture_Multi.md
CAS-   f_Capture_Cascade.md
SCS-   f_Capture_Soft.md
HLC-   f_Capture_Hard.md
RLC-   f_Capture_Resonant.md
AC-    f_Capture_Asymmetric.md    ← this file

Wave 4 condition prefix registry is now sealed. No further prefixes are added without a Wave 5 file.

10.4 Capture Variant Decision Matrix (Canonical Reference)#

This table is the authoritative routing guide for all capture-variant selection. It should be reproduced in INDEX.md and README.md during admin file updates.

Condition                                   Variant File                 Orbit class
──────────────────────────────────────────────────────────────────────────────────────
Standard (mass_ratio ≈ 0, β ≥ 1)           f_Capture.md                 Any
Multiple entities or attractors             f_Capture_Multi.md           Any
Cascade chain (Ω propagates)               f_Capture_Cascade.md         Any
Soft/provisional (d_soft < threshold)      f_Capture_Soft.md            Any (held)
Hard lock (d_hard ≥ threshold, β_min_hard) f_Capture_Hard.md            ELLIPTICAL+
Phase-gated (φ_E in [φ_open, φ_close])    f_Capture_Resonant.md        RESONANT
Non-trivial mass ratio (M_E/M_A > 0)       f_Capture_Asymmetric.md      ELLIPTICAL/ECCENTRIC
mass_ratio ≥ m_parity                      f_Collapse.md Path B         C_node (terminal)

§11 Document Metadata#

11.1 INV Compliance Table#

Invariant Description (abbreviated) Status in this file
INV-001 G = F_freq · F_fluid · F_force ✅ All three nodes in §3
INV-002 f_Capture → Ω frozen ✅ ASYMMETRIC_LOCKED freezes Ω
INV-003 ρ(Φ) = 0 → FM-002 ✅ AC-3 + PRIM:035 step 2
INV-004 β < 1.0 → flyby ✅ AC-2 + PRIM:035 step 4
INV-005 Conditions conjunctive ✅ AC-1–5 all required
INV-006 Terminal states irreversible ✅ FM-007 PARITY_BREACH terminal;
ASYMMETRIC_LOCKED degrades via Decay
INV-007 f_Source.md read-only ✅ §10.2 lists read-only fields
INV-008 Evaluation order normative ✅ PRIM:035 docstring + §5 table
INV-009 OPERATORS.md is symbol authority ✅ §10.1 registration block
INV-010 Frozen symbols unrenameable ✅ m_parity, heading_delta referenced;
not re-registered

11.2 Primitive Registry (this file)#

PRIM Name Type Pure? Description
035 eval_asymmetric_approach Guard Yes AC gate-check; computes mass_ratio, asymmetry_factor, heading_delta_asym
036 lock_asymmetric Writer No Computes d_bind_asym, orbit_class, stab_class, asym_decay_risk; writes ASYMMETRIC_LOCKED

Running total after this file: PRIM:036

11.3 Failure Mode Summary (this file)#

FM Trigger in this file Fatal? Sub-annotation
FM-001 AC-2 (β), AC-4 (v), or AC-5 (δ) fail No APPROACH_REJECTION / OVERSHOOT / TRAJECTORY_MISS
FM-002 AC-3 violated (ρ(Φ) = 0) Yes FIELD_NULL
FM-003 max_orbits ceiling reached Yes FRAME_SATURATION (VARIANT=ASYMMETRIC)
FM-005 asym_decay_risk True post-capture Yes* Raised by f_Decay.md, not this file
FM-007 AC-1 violated (mass_ratio ≥ m_parity) Yes PARITY_BREACH

*FM-005 is raised by f_Decay.md. This file flags the risk via asym_decay_risk.

11.4 State Flag Registry#

Flag Set by Cleared by Meaning
ASYMMETRIC_APPROACH PRIM:035 lock / rejection mass_ratio > 0 and all AC conditions pass; asymmetric capture pathway is open
PARITY_WARN PRIM:035 lock / rejection mass_ratio ≥ 0.75 × m_parity but < m_parity; parity threshold is approaching, caution zone
PARITY_BREACH PRIM:035 terminal — no clear mass_ratio ≥ m_parity (AC-1 violated); routes immediately to f_Collapse.md Path B
ASYMMETRIC_LOCKED PRIM:036 terminal — no clear Asymmetric capture confirmed; degradation proceeds via f_Decay.md with asym_decay_risk bias

Terminal flags (PARITY_BREACH, ASYMMETRIC_LOCKED) do not clear; they mark irreversible pathway transitions. Any subsequent evaluation must open a new session node.


11.5 Wave 4 Status Tracker#

File Tag Suffix PRIMs Conditions Status
f_Capture_Multi.md CAPTURE:MULTI 025–026 MC-1–MC-5 ✅ Complete
f_Capture_Cascade.md CAPTURE:CASCADE 027–028 CAS-1–CAS-5 ✅ Complete
f_Capture_Soft.md CAPTURE:SOFT 029–030 SCS-1–SCS-5 ✅ Complete
f_Capture_Hard.md CAPTURE:HARD 031–032 HLC-1–HLC-5 ✅ Complete
f_Capture_Resonant.md CAPTURE:RESONANT 033–034 RLC-1–RLC-5 ✅ Complete
f_Capture_Asymmetric.md CAPTURE:ASYMMETRIC 035–036 AC-1–AC-5 ✅ Complete

Wave 4 PRIM range: PRIM:025–PRIM:036 — FROZEN Wave 4 condition prefix seal: MC- · CAS- · SCS- · HLC- · RLC- · AC- — SEALED Module PRIM total: PRIM:001–PRIM:036 (36 primitives across all waves)


11.6 Changelog#

changelog:
  - version: "1.0.0"
    date: "2026-08-13"
    session: "SES-20260813-FGRAV-035"
    author: "umaywant2"
    type: "genesis"
    summary: >
      Initial canonical release of f_Capture_Asymmetric.md.
      Defines asymmetric capture pathway for relational events where
      approach-party mass (M_A) differs materially from emitter mass (M_E).
      Introduces PRIM:035 (eval_asymmetric_approach) and PRIM:036
      (lock_asymmetric), conditions AC-1 through AC-5, mass_ratio and
      asymmetry_factor operators, parity breach routing to f_Collapse.md
      Path B, and asym_decay_risk bias injection into f_Decay.md.
      Completes Wave 4 (Capture Variants); seals PRIM:025–036 and all
      Wave 4 condition prefixes (MC-, CAS-, SCS-, HLC-, RLC-, AC-).
    prim_range: "035–036"
    condition_prefix: "AC-"
    invariants_checked:
      - INV-001
      - INV-002
      - INV-003
      - INV-005
      - INV-007
      - INV-008
    failure_modes_guarded:
      - FM-001 (APPROACH_REJECTION, OVERSHOOT, TRAJECTORY_MISS)
      - FM-002
      - FM-003
      - FM-005
      - FM-007 (PARITY_BREACH)
    wave: 4
    wave_position: "6 of 6"
    wave_status: "COMPLETE"

11.7 Suggested Commit Message#

feat(FFF_Gravity): add f_Capture_Asymmetric.md — Wave 4 complete [PRIM:035–036]

Introduces the asymmetric capture variant for relational gravitational
dynamics. Defines:

  - PRIM:035  eval_asymmetric_approach  (Pure)
  - PRIM:036  lock_asymmetric           (Impure)
  - Conditions AC-1 through AC-5 (conjunctive)
  - Operators: mass_ratio, asymmetry_factor, d_bind_asym,
               heading_delta_asym, deflect_tolerance,
               parity_warn_threshold, asym_decay_risk
  - FM guards: FM-001 (3 sub-cases), FM-002, FM-003,
               FM-005 (informational), FM-007 (PARITY_BREACH)
  - Parity breach hard-routes to f_Collapse.md Path B
  - Successful lock injects asym_decay_risk into f_Decay.md

Completes Wave 4 (Capture Variants).
Seals PRIM:025–036 and condition prefixes MC-/CAS-/SCS-/HLC-/RLC-/AC-.
Module PRIM total: 001–036 (36 primitives). Wave 4: 6/6 canonical.

Refs: f_Capture.md, f_Collapse.md, f_Decay.md, f_Deflect.md,
      OPERATORS.md, GLOSSARY.md, INDEX.md, CHANGELOG.md

Session: SES-20260813-FGRAV-035

*
╔══════════════════════════════════════════════════════════════════════════════╗
║                                                                              ║
║          ███████╗███████╗███████╗     ██╗    ██╗ █████╗ ██╗   ██╗███████╗    ║
║          ██╔════╝██╔════╝██╔════╝     ██║    ██║██╔══██╗██║   ██║██╔════╝    ║
║          █████╗  █████╗  █████╗       ██║ █╗ ██║███████║██║   ██║█████╗      ║
║          ██╔══╝  ██╔══╝  ██╔══╝       ██║███╗██║██╔══██║╚██╗ ██╔╝██╔══╝      ║
║          ██║     ██║     ██║          ╚███╔███╔╝██║  ██║ ╚████╔╝ ███████╗    ║
║          ╚═╝     ╚═╝     ╚═╝           ╚══╝╚══╝ ╚═╝  ╚═╝  ╚═══╝  ╚══════╝    ║
║                                                                              ║
║                   ── WAVE 4 COMPLETION MILESTONE ──                          ║
║                                                                              ║
║   All 6 Capture Variant files are canonical and sealed.                      ║
║                                                                              ║
║   ✅  f_Capture_Multi.md        PRIM:025–026   MC-1–MC-5    CANONICAL        ║
║   ✅  f_Capture_Cascade.md      PRIM:027–028   CAS-1–CAS-5  CANONICAL        ║
║   ✅  f_Capture_Soft.md         PRIM:029–030   SCS-1–SCS-5  CANONICAL        ║
║   ✅  f_Capture_Hard.md         PRIM:031–032   HLC-1–HLC-5  CANONICAL        ║
║   ✅  f_Capture_Resonant.md     PRIM:033–034   RLC-1–RLC-5  CANONICAL        ║
║   ✅  f_Capture_Asymmetric.md   PRIM:035–036   AC-1–AC-5    CANONICAL        ║
║                                                                              ║
║   PRIM RANGE  ............  025–036  (12 primitives, Wave 4)                 ║
║   MODULE TOTAL  ..........  001–036  (36 primitives, all waves)              ║
║                                                                              ║
║   CONDITION PREFIXES SEALED:                                                 ║
║     MC-  ·  CAS-  ·  SCS-  ·  HLC-  ·  RLC-  ·  AC-                          ║
║                                                                              ║
║   FAILURE MODES (module) .....  FM-001–FM-010  FROZEN                        ║
║   INVARIANTS (module) ........  INV-001–INV-010  FROZEN                      ║
║                                                                              ║
║   Wave 0 ✅  Wave 1 ✅  Wave 2 ✅  Wave 3 ✅  Wave 4 ✅                    ║
║                                                                              ║
║   FFF_Gravity module core specification: COMPLETE                            ║
║                                                                              ║
╚══════════════════════════════════════════════════════════════════════════════╝

End of f_Capture_Asymmetric.md — [FFF:GRAVITY:CAPTURE:ASYMMETRIC] v1.0.0 — Wave 4 File 6 of 6

Updated