f_Capture_Temporal — Temporal Window Capture
session_id: SES-20260813-CAPTURE_TEMPORAL-001
tag: f_Capture_Temporal
version: 1.0.0
status: canonical
wave: 4-addendum
file_index: "Wave 4, file 7 of 7"
dependencies:
- f_Capture.md
- f_Field.md
- f_Force.md
- f_Frame.md
- f_Decay.md
- f_Orbit.md
- f_Collapse.md
new_operators:
- t_open
- t_close
- t_span
- t_elapsed
- t_remaining
- proximity_ratio
- temporal_decay_factor
- d_bind_temporal
- temporal_margin
new_primitives:
- PRIM:037
- PRIM:038
failure_modes_referenced:
- FM-001 (sub-annotation: TEMPORAL_MISS)
- FM-004
- FM-005
changelog:
- "1.0.0 — 2026-08-13 — Initial canonical release. Wave 4 addendum, file 7 of 7."
§0 Session Context#
| Field | Value | | Session ID | SES-20260813-CAPTURE_TEMPORAL-001 | | Author | umaywant2 | | Date | 2026-08-13 | | Repository | TriadicFrameworks | | Module | FFF_Gravity | | Wave | 4-addendum (file 7 of 7) | | Status | Canonical | | Prior file | f_Capture_Asymmetric.md (PRIM:035–036) | | PRIM block | PRIM:037–038 | | Condition prefix | TC- |
§0.1 Scope Declaration#
This file specifies the Temporal Capture variant of the base f_Capture function. Temporal capture gates binding eligibility on an absolute clock-time window [t_open, t_close]. Binding depth degrades continuously as the entity's evaluation time approaches either window edge, reaching a minimum attenuation factor at the boundaries. This variant is non-periodic and non-repeating within a given window instance.
§0.2 Distinction from f_Capture_Resonant#
| Dimension | f_Capture_Resonant | f_Capture_Temporal |
|---|---|---|
| Gate type | Phase-gated (φ_E relative to ω_res cycle) | Clock-gated (t_current within [t_open, t_close]) |
| Periodicity | Periodic — windows repeat with T_res | Non-repeating — each window is a one-shot instance |
| Window reference | Oscillation phase (dimensionless) | Absolute time (clock units) |
| Binding modifier | ρ_res_gain — field amplification at resonance | temporal_decay_factor — binding attenuation at edges |
| Identity | ρ(Φ) domain | d_bind domain |
| Failure mode | FM-006 phantom resonance; FM-004 drift | FM-001 TEMPORAL_MISS; FM-004 decay |
§1 Module Identity#
| Field | Value |
|---|---|
| Function name | f_Capture_Temporal |
| Parent function | f_Capture |
| Module | FFF_Gravity |
| Triadic identity | G = F_freq · F_fluid · F_force |
| Primitive block | PRIM:037 (Pure), PRIM:038 (Impure) |
| Condition prefix | TC- |
| FM references | FM-001 (TEMPORAL_MISS), FM-004, FM-005 |
| New INV IDs | None (registry frozen at INV-010) |
| New FM IDs | None (registry frozen at FM-010; TEMPORAL_MISS is a sub-annotation of FM-001) |
| Operator authority | OPERATORS.md (INV-009) |
§2 Canonical Description#
§2.1 Conceptual Foundation#
Temporal capture models the condition in which an attractor's binding field is only operative during a defined clock-time interval [t_open, t_close]. Outside this window the attractor exerts no capture force, regardless of its mass M_A, field density ρ(Φ), or the entity's approach velocity. Inside the window the binding force is available but is not uniform across time: the closer the evaluation instant is to either edge of the window, the more attenuated the resulting binding depth becomes.
This degradation reflects physical and system realities in which:
- Entry conditions are not yet fully established near
t_open(warm-up degradation) - Exit conditions begin to deteriorate near
t_close(wind-down degradation) - The system's maximum binding fidelity is achieved at the temporal midpoint of the window
The attenuation is governed by temporal_decay_factor (symbol α_temp, default 0.40) applied to a proximity_ratio that measures how close the current time is to either window edge, normalized over the half-window span.
§2.2 Window Geometry#
Time axis:
─────────┬──────────────────────────────────────┬──────────────►
t_open t_close
Binding depth (d_bind_temporal):
d_bind ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ peak (midpoint)
/ \
/ d_bind × (1 − α_temp × prox_ratio) \
/ \
d_bind × (1−α_temp) d_bind × (1−α_temp)
t_open t_close
- Outside
[t_open, t_close]:d_bind_temporalis undefined; TC-1 fails; FM-001 TEMPORAL_MISS triggered. - At window midpoint:
proximity_ratio = 0;d_bind_temporal = d_bind(unattenuated). - At window edges:
proximity_ratio → 1;d_bind_temporal = d_bind × (1 − α_temp).
§2.3 Window Uniqueness (TC-5)#
Each (entity_id, attractor_id, window_id) triple is subject to a per-window uniqueness constraint: once a capture attempt has been registered against a window — whether it succeeded or failed — no second attempt is permitted within the same window instance. A new window with a distinct window_id permits a fresh attempt. This prevents opportunistic re-entry after an initial failure within the same temporal gate.
§2.4 Temporal Margin (TC-2)#
A minimum time τ_min (temporal_margin) must remain in the window at the moment of evaluation. If t_remaining < τ_min, capture is not attempted: there is insufficient time to complete the binding sequence before the window closes. This prevents pathological partial-binds at the window terminus.
§3 Triadic Equation#
The governing identity is preserved from INV-001:
G = F_freq · F_fluid · F_force
Temporal capture applies a time-domain gate and attenuation to the binding depth computed by the base f_Capture function:
proximity_ratio = 1 − min(t_elapsed, t_remaining) / (t_span / 2)
d_bind_temporal = d_bind × (1 − temporal_decay_factor × proximity_ratio)
t_span = t_close − t_open
t_elapsed = t_current − t_open
t_remaining = t_close − t_current
Where the base binding depth d_bind is computed per f_Capture.md:
d_bind = β × ρ(Φ) × (1 − e)
The temporal attenuation acts solely on d_bind — it does not modify ρ(Φ), β, or any triadic component directly. The triadic equation remains structurally intact; d_bind_temporal replaces d_bind in all downstream computations (orbit stability, decay thresholds, collapse paths) for this capture variant.
§4 Operator Registry#
All operators introduced in this file. Operators are frozen on first canonical appearance per INV-010. Symbol authority: OPERATORS.md (INV-009).
| Symbol | Name | Type | Domain / Units | Default | Description |
|---|---|---|---|---|---|
t_open |
Window open time | float | clock units | — | Absolute time at which the temporal capture window opens |
t_close |
Window close time | float | clock units | — | Absolute time at which the temporal capture window closes; must satisfy t_close > t_open |
t_current |
Current evaluation time | float | clock units | — | Absolute clock time at which the capture attempt is evaluated |
t_span |
Window duration | float | clock units | — | t_close − t_open; total window length |
t_elapsed |
Time since open | float | clock units | — | t_current − t_open; time since window opened at evaluation instant |
t_remaining |
Time until close | float | clock units | — | t_close − t_current; time remaining in window at evaluation instant |
proximity_ratio |
Edge proximity ratio | float | [0, 1] | — | Normalized measure of closeness to either window edge; 0 at midpoint, 1 at edges |
temporal_decay_factor |
Temporal decay factor | float | [0, 1) | α_temp = 0.40 | Scales the maximum binding attenuation imposed at window edges |
d_bind_temporal |
Temporal binding depth | float | ≥ 0 | — | Attenuated binding depth; replaces d_bind for all downstream computations |
temporal_margin |
Temporal margin | float | clock units | τ_min = 1.0 | Minimum t_remaining required at evaluation time; capture refused if t_remaining < τ_min |
window_id |
Window identifier | str | opaque | — | Unique identifier for the temporal window instance; scopes TC-5 uniqueness |
§4.1 Inherited Operators (key dependencies)#
The following operators are defined in prior files and referenced here. They are not re-defined.
| Symbol | Defined in | Role in this file |
|---|---|---|
d_bind |
f_Capture.md | Base binding depth before temporal attenuation |
β |
f_Capture.md | Binding coefficient |
ρ(Φ) |
f_Field.md | Field density at attractor |
e |
f_Capture.md | Eccentricity (orbital shape) |
d_collapse |
f_Decay.md | Collapse threshold; TC-3 checks d_bind_temporal ≥ d_collapse |
M_A |
f_Source.md | Attractor mass |
M_E |
f_Source.md | Entity mass |
§5 Conditions#
All conditions are conjunctive (INV-005): all must hold simultaneously for capture to proceed. Conditions are evaluated in the listed order; the first failing condition terminates evaluation with the associated failure path.
| ID | Name | Expression | Failure path |
|---|---|---|---|
| TC-1 | Window is open | t_open ≤ t_current ≤ t_close | FM-001 TEMPORAL_MISS |
| TC-2 | Temporal margin satisfied | t_remaining ≥ temporal_margin (τ_min) | FM-001 TEMPORAL_MISS |
| TC-3 | Temporal bind sufficient | d_bind_temporal ≥ d_collapse | FM-005 (sub-threshold) |
| TC-4 | Binding coefficient floor | β ≥ β_min (inherited from f_Capture.md; default 1.0) | FM-004 (decay drift) |
| TC-5 | Window uniqueness | No prior attempt registered for (entity_id, attractor_id, window_id) | FM-001 TEMPORAL_MISS |
§5.1 Condition Evaluation Order (Normative per INV-008)#
EVALUATE t_open, t_close, t_current
│
▼
TC-1: t_open ≤ t_current ≤ t_close?
│ NO → TEMPORAL_MISS (FM-001, reason=OUTSIDE_WINDOW)
│ YES ↓
TC-2: t_remaining ≥ τ_min?
│ NO → TEMPORAL_MISS (FM-001, reason=MARGIN_VIOLATED)
│ YES ↓
Compute proximity_ratio, d_bind_temporal
│
TC-3: d_bind_temporal ≥ d_collapse?
│ NO → FM-005 sub-threshold infall
│ YES ↓
TC-4: β ≥ β_min?
│ NO → FM-004 decay drift
│ YES ↓
TC-5: window_id not in lock_registry[(entity_id, attractor_id)]?
│ NO → TEMPORAL_MISS (FM-001, reason=WINDOW_EXHAUSTED)
│ YES ↓
PRIM:038 lock_temporal_capture → CAPTURE_TEMPORAL state
§6 Failure Modes#
New FM IDs are not permitted (registry frozen at FM-010 per INV-006). The following FM sub-annotations and references apply.
§6.1 FM-001 — CAPTURE_MISS with sub-annotation: TEMPORAL_MISS#
FM-001 is the canonical CAPTURE_MISS failure mode defined in f_Capture.md. In the temporal variant, FM-001 is triggered with a structured sub-annotation TEMPORAL_MISS when:
| Sub-reason | Trigger condition | TC that fails | Meaning |
|---|---|---|---|
| OUTSIDE_WINDOW | t_current < t_open or t_current > t_close | TC-1 | Entity evaluated outside temporal window; no binding force present |
| MARGIN_VIOLATED | t_remaining < τ_min | TC-2 | Entity arrived with insufficient time remaining to complete binding |
| WINDOW_EXHAUSTED | lock exists for window_id | TC-5 | Window already consumed by prior attempt; no re-entry permitted |
Outcome: Entity state set to CAPTURE_MISS. temporal_miss=True recorded in miss record. Downstream systems may use the sub-reason to schedule entity for the next available window (if any).
Recovery: TEMPORAL_MISS is not a terminal state for the entity — it is terminal for this window instance. A new window with a distinct window_id constitutes a fresh capture opportunity.
§6.2 FM-004 — Decay Drift (TC-4 failure)#
When β < β_min (TC-4), the entity does not possess sufficient binding coefficient to sustain capture even within the window. Routed to f_Decay.md. The temporal window does not extend or pause for decay recovery — if the window closes during drift, FM-001 TEMPORAL_MISS (OUTSIDE_WINDOW) is subsequently triggered.
§6.3 FM-005 — Asymmetric Infall (TC-3 failure)#
When d_bind_temporal < d_collapse, the temporal attenuation has degraded binding depth below the structural collapse threshold. The entity begins asymmetric infall per f_Collapse.md Path A. This condition is most likely to occur when the entity is evaluated very near a window edge with a high temporal_decay_factor.
§7 Engineering Primitives#
PRIM:037 — evaluate_temporal_window (Pure)#
Classification: Pure
Depends on: TC-1, TC-2, TC-3, TC-4
INV compliance: INV-001, INV-002, INV-003, INV-005, INV-008
def evaluate_temporal_window(
t_current: float,
t_open: float,
t_close: float,
d_bind: float,
temporal_decay_factor: float = 0.40,
temporal_margin: float = 1.0,
d_collapse: float = 0.0,
beta: float = 1.0,
beta_min: float = 1.0,
) -> dict:
"""
PRIM:037 — evaluate_temporal_window (Pure)
==========================================
Evaluate capture eligibility within a temporal window and compute the
attenuated binding depth d_bind_temporal.
This primitive implements TC-1 through TC-4. TC-5 (window uniqueness)
is enforced by PRIM:038 (Impure), which has write access to the lock
registry.
Parameters
----------
t_current : float
Absolute clock time at evaluation. Must be in same units as t_open / t_close.
t_open : float
Absolute clock time at which the temporal window opens.
t_close : float
Absolute clock time at which the temporal window closes.
Invariant: t_close > t_open.
d_bind : float
Base binding depth from f_Capture (β × ρ(Φ) × (1 − e)).
Must be ≥ 0.
temporal_decay_factor : float, optional
α_temp ∈ [0, 1). Scales edge-attenuation of d_bind.
Default: 0.40 (40% maximum degradation at window edges).
temporal_margin : float, optional
τ_min in clock units. Minimum t_remaining required to proceed.
Default: 1.0.
d_collapse : float, optional
Collapse threshold from f_Decay / f_Collapse. TC-3 checks
d_bind_temporal ≥ d_collapse. Default: 0.0.
beta : float, optional
Binding coefficient. TC-4 checks β ≥ β_min. Default: 1.0.
beta_min : float, optional
Minimum binding coefficient floor (inherited from f_Capture).
Default: 1.0.
Returns
-------
dict with keys:
window_open : bool — TC-1 result
margin_ok : bool — TC-2 result
bind_sufficient : bool — TC-3 result
beta_ok : bool — TC-4 result
all_conditions_met : bool — conjunction of TC-1 through TC-4
t_span : float — t_close − t_open
t_elapsed : float — t_current − t_open (None if TC-1 fails)
t_remaining : float — t_close − t_current (None if TC-1 fails)
proximity_ratio : float — edge proximity ∈ [0, 1] (None if TC-1 fails)
d_bind_temporal : float — attenuated binding depth (None if TC-1 fails)
temporal_miss : bool — True if any TC-1/TC-2 failure
miss_reason : str — 'OUTSIDE_WINDOW' | 'MARGIN_VIOLATED' | None
failure_mode : str — 'FM-001-TEMPORAL_MISS' | 'FM-004' | 'FM-005' | None
Raises
------
ValueError
If t_close <= t_open (degenerate window).
If d_bind < 0.
If temporal_decay_factor not in [0, 1).
If temporal_margin < 0.
Notes
-----
Evaluation order is normative (INV-008). Each condition is evaluated
exactly once, in TC-1 → TC-2 → compute → TC-3 → TC-4 sequence.
This primitive is Pure: it reads only its inputs and returns a
result dict. No state mutations are performed.
proximity_ratio formula:
t_span = t_close − t_open
t_elapsed = t_current − t_open
t_remaining = t_close − t_current
proximity_ratio = 1 − min(t_elapsed, t_remaining) / (t_span / 2)
At midpoint (t_current = (t_open + t_close) / 2): proximity_ratio = 0
At edges (t_current → t_open or → t_close): proximity_ratio → 1
d_bind_temporal = d_bind × (1 − temporal_decay_factor × proximity_ratio)
"""
# --- Input validation ---
if t_close <= t_open:
raise ValueError(
f"Degenerate window: t_close ({t_close}) must be > t_open ({t_open})."
)
if d_bind < 0:
raise ValueError(f"d_bind must be ≥ 0; received {d_bind}.")
if not (0.0 <= temporal_decay_factor < 1.0):
raise ValueError(
f"temporal_decay_factor must be in [0, 1); received {temporal_decay_factor}."
)
if temporal_margin < 0:
raise ValueError(
f"temporal_margin must be ≥ 0; received {temporal_margin}."
)
t_span = t_close - t_open
result = {
"window_open": False,
"margin_ok": False,
"bind_sufficient": False,
"beta_ok": False,
"all_conditions_met": False,
"t_span": t_span,
"t_elapsed": None,
"t_remaining": None,
"proximity_ratio": None,
"d_bind_temporal": None,
"temporal_miss": False,
"miss_reason": None,
"failure_mode": None,
}
# TC-1: Window is open
window_open = (t_open <= t_current <= t_close)
result["window_open"] = window_open
if not window_open:
result["temporal_miss"] = True
result["miss_reason"] = "OUTSIDE_WINDOW"
result["failure_mode"] = "FM-001-TEMPORAL_MISS"
return result
# Compute time geometry (only valid once TC-1 passes)
t_elapsed = t_current - t_open
t_remaining = t_close - t_current
result["t_elapsed"] = t_elapsed
result["t_remaining"] = t_remaining
# TC-2: Temporal margin satisfied
margin_ok = (t_remaining >= temporal_margin)
result["margin_ok"] = margin_ok
if not margin_ok:
result["temporal_miss"] = True
result["miss_reason"] = "MARGIN_VIOLATED"
result["failure_mode"] = "FM-001-TEMPORAL_MISS"
return result
# Compute proximity_ratio and d_bind_temporal
half_span = t_span / 2.0
proximity_ratio = 1.0 - min(t_elapsed, t_remaining) / half_span
# Clamp to [0, 1] to guard against floating-point overshoot at exact edges
proximity_ratio = max(0.0, min(1.0, proximity_ratio))
d_bind_temporal = d_bind * (1.0 - temporal_decay_factor * proximity_ratio)
result["proximity_ratio"] = proximity_ratio
result["d_bind_temporal"] = d_bind_temporal
# TC-3: Temporal bind depth sufficient
bind_sufficient = (d_bind_temporal >= d_collapse)
result["bind_sufficient"] = bind_sufficient
if not bind_sufficient:
result["failure_mode"] = "FM-005"
return result
# TC-4: Binding coefficient floor
beta_ok = (beta >= beta_min)
result["beta_ok"] = beta_ok
if not beta_ok:
result["failure_mode"] = "FM-004"
return result
# All TC-1 through TC-4 conditions met
result["all_conditions_met"] = True
return resultPRIM:038 — lock_temporal_capture (Impure)#
Classification: Impure
Depends on: TC-5, PRIM:037 result
INV compliance: INV-001, INV-002, INV-005, INV-006, INV-008, INV-010
def lock_temporal_capture(
entity_id: str,
attractor_id: str,
window_id: str,
window_eval: dict,
lock_registry: dict,
state: dict,
) -> dict:
"""
PRIM:038 — lock_temporal_capture (Impure)
==========================================
Enforce TC-5 (window uniqueness) and, if it passes, commit the
temporal capture to state. This primitive is Impure: it mutates
lock_registry and state in place.
Must only be called after PRIM:037 returns all_conditions_met=True.
Calling this primitive with a failed PRIM:037 result is a contract
violation and raises ValueError.
Parameters
----------
entity_id : str
Unique identifier for the entity being captured.
attractor_id : str
Unique identifier for the attractor.
window_id : str
Unique identifier for the temporal window instance. Scopes TC-5.
Must be distinct for each non-repeating window occurrence.
window_eval : dict
Result dict from PRIM:037. Must have all_conditions_met=True.
lock_registry : dict
Mutable mapping of (entity_id, attractor_id) → set of consumed
window_ids. Mutated in place on successful lock.
Structure: { (str, str): set[str] }
state : dict
Mutable system state dict. On success, receives keys:
capture_state : str — 'CAPTURE_TEMPORAL'
d_bind_active : float — d_bind_temporal from window_eval
window_id_active: str — the consumed window_id
proximity_ratio : float — recorded for audit
t_elapsed : float — recorded for audit
t_remaining : float — recorded for audit
Returns
-------
dict with keys:
success : bool — True if TC-5 passed and lock committed
capture_state : str — 'CAPTURE_TEMPORAL' | 'CAPTURE_MISS'
failure_mode : str — None | 'FM-001-TEMPORAL_MISS'
miss_reason : str — None | 'WINDOW_EXHAUSTED'
lock_record : dict — { entity_id, attractor_id, window_id,
d_bind_temporal, proximity_ratio } (None on failure)
Raises
------
ValueError
If window_eval["all_conditions_met"] is not True.
If lock_registry is not a dict.
If state is not a dict.
Notes
-----
TC-5 (window uniqueness) is enforced here rather than in PRIM:037
because uniqueness requires write access to lock_registry — a side
effect incompatible with a Pure primitive (INV-002).
On TC-5 failure (WINDOW_EXHAUSTED), no state mutation occurs.
The lock_registry is left unmodified. This preserves the principle
that failed captures do not alter attractor state (INV-005).
On success, the window_id is added to lock_registry[(entity_id,
attractor_id)] atomically before state is updated, ensuring that
concurrent evaluation (if applicable) cannot produce a double-lock.
"""
# --- Contract checks ---
if not isinstance(window_eval, dict) or not window_eval.get("all_conditions_met"):
raise ValueError(
"PRIM:038 contract violation: window_eval must have all_conditions_met=True. "
"Call PRIM:037 first and check its result before invoking PRIM:038."
)
if not isinstance(lock_registry, dict):
raise ValueError("lock_registry must be a dict.")
if not isinstance(state, dict):
raise ValueError("state must be a dict.")
key = (entity_id, attractor_id)
# TC-5: Window uniqueness check
consumed_windows = lock_registry.get(key, set())
if window_id in consumed_windows:
return {
"success": False,
"capture_state": "CAPTURE_MISS",
"failure_mode": "FM-001-TEMPORAL_MISS",
"miss_reason": "WINDOW_EXHAUSTED",
"lock_record": None,
}
# TC-5 passed — commit lock (mutate registry atomically before state)
consumed_windows = consumed_windows | {window_id} # new set; no in-place mutation on original
lock_registry[key] = consumed_windows
# Commit capture state
d_bind_temporal = window_eval["d_bind_temporal"]
proximity_ratio = window_eval["proximity_ratio"]
t_elapsed = window_eval["t_elapsed"]
t_remaining = window_eval["t_remaining"]
state["capture_state"] = "CAPTURE_TEMPORAL"
state["d_bind_active"] = d_bind_temporal
state["window_id_active"] = window_id
state["proximity_ratio"] = proximity_ratio
state["t_elapsed"] = t_elapsed
state["t_remaining"] = t_remaining
lock_record = {
"entity_id": entity_id,
"attractor_id": attractor_id,
"window_id": window_id,
"d_bind_temporal": d_bind_temporal,
"proximity_ratio": proximity_ratio,
}
return {
"success": True,
"capture_state": "CAPTURE_TEMPORAL",
"failure_mode": None,
"miss_reason": None,
"lock_record": lock_record,
}§8 Canonical Examples#
Example 1 — Midpoint Capture (Maximum Binding Fidelity)#
Scenario: Entity E1 is evaluated exactly at the temporal midpoint of a 10-unit window. Binding depth is fully unattenuated.
Given:
t_open = 100.0
t_close = 110.0
t_current = 105.0 ← exact midpoint
temporal_decay_factor = 0.40
d_bind = 20.0
d_collapse = 2.0
β = 1.8
β_min = 1.0
temporal_margin = 1.0
window_id = "WIN-001"
Step 1 — Temporal geometry:
t_span = 110.0 − 100.0 = 10.0
t_elapsed = 105.0 − 100.0 = 5.0
t_remaining = 110.0 − 105.0 = 5.0
half_span = 5.0
Step 2 — TC-1: 100.0 ≤ 105.0 ≤ 110.0 ✓
Step 3 — TC-2: t_remaining = 5.0 ≥ τ_min = 1.0 ✓
Step 4 — Proximity ratio and d_bind_temporal:
proximity_ratio = 1 − min(5.0, 5.0) / 5.0
= 1 − 5.0 / 5.0
= 1 − 1.0
= 0.0
d_bind_temporal = 20.0 × (1 − 0.40 × 0.0)
= 20.0 × 1.0
= 20.0 ← fully unattenuated
Step 5 — TC-3: 20.0 ≥ 2.0 ✓
Step 6 — TC-4: 1.8 ≥ 1.0 ✓
Step 7 — PRIM:037 result: all_conditions_met = True
Step 8 — TC-5: "WIN-001" not in lock_registry[(E1, A1)] ✓
Step 9 — PRIM:038: lock committed; state["d_bind_active"] = 20.0
Outcome: CAPTURE_TEMPORAL — d_bind_active = 20.0 (no edge degradation). Entity proceeds to orbit computation via f_Orbit.md.
Example 2 — Edge-Proximate Capture (Attenuated Binding)#
Scenario: Entity E2 arrives 1.5 units after window open (near the leading edge). Binding is attenuated but sufficient. Temporal margin is satisfied.
Given:
t_open = 200.0
t_close = 210.0
t_current = 201.5 ← 1.5 units after open
temporal_decay_factor = 0.40
d_bind = 20.0
d_collapse = 5.0
β = 1.5
β_min = 1.0
temporal_margin = 1.0
window_id = "WIN-002"
Step 1 — Temporal geometry:
t_span = 10.0
t_elapsed = 1.5
t_remaining = 8.5
half_span = 5.0
Step 2 — TC-1: 200.0 ≤ 201.5 ≤ 210.0 ✓
Step 3 — TC-2: 8.5 ≥ 1.0 ✓
Step 4 — Proximity ratio:
proximity_ratio = 1 − min(1.5, 8.5) / 5.0
= 1 − 1.5 / 5.0
= 1 − 0.30
= 0.70
d_bind_temporal = 20.0 × (1 − 0.40 × 0.70)
= 20.0 × (1 − 0.28)
= 20.0 × 0.72
= 14.4
Step 5 — TC-3: 14.4 ≥ 5.0 ✓
Step 6 — TC-4: 1.5 ≥ 1.0 ✓
Step 7 — PRIM:037: all_conditions_met = True
Step 8 — TC-5: "WIN-002" not in registry ✓
Step 9 — PRIM:038: lock committed; d_bind_active = 14.4
Outcome: CAPTURE_TEMPORAL — d_bind_active = 14.4 (28% attenuation from edge proximity). Entity orbit will be shallower than midpoint capture; f_Decay.md monitoring thresholds recalculated against 14.4.
Example 3 — TEMPORAL_MISS: Outside Window#
Scenario: Entity E3 is evaluated 3 time units after window close. TC-1 fails; FM-001 TEMPORAL_MISS (OUTSIDE_WINDOW) triggered.
Given:
t_open = 300.0
t_close = 310.0
t_current = 313.0 ← 3 units after window closed
Step 1 — TC-1: 313.0 > 310.0 → FAIL
window_open = False
temporal_miss = True
miss_reason = 'OUTSIDE_WINDOW'
failure_mode = 'FM-001-TEMPORAL_MISS'
No further evaluation is performed (INV-008 normative order).
Proximity ratio, d_bind_temporal, and all downstream states are undefined.
Outcome: Entity state → CAPTURE_MISS. Sub-annotation: TEMPORAL_MISS / OUTSIDE_WINDOW. Downstream scheduler may register E3 for the next available window instance (new window_id) if one exists.
Example 4 — Window Exhausted (TC-5 Failure) and Margin Violation (TC-2 Failure)#
Scenario A — TC-5 (Window Exhausted):
Entity E4 makes a second attempt against the same window after an initial failed binding.
Given:
t_open = 400.0
t_close = 420.0
t_current = 408.0
d_bind = 18.0
β = 2.0
window_id = "WIN-004"
lock_registry = { ("E4", "A4"): {"WIN-004"} } ← prior attempt recorded
PRIM:037 evaluation:
- TC-1: ✓ (within window)
- TC-2: ✓ (t_remaining = 12.0 ≥ τ_min)
- TC-3: ✓ (d_bind_temporal will be sufficient)
- TC-4: ✓
- all_conditions_met = True
PRIM:038 TC-5 check:
key = ("E4", "A4")
consumed_windows = {"WIN-004"}
"WIN-004" in consumed_windows → True ← TC-5 FAILS
Outcome (Scenario A): CAPTURE_MISS — miss_reason = WINDOW_EXHAUSTED. State not mutated. Lock registry not modified. Entity must await a new window with a distinct window_id.
Scenario B — TC-2 (Margin Violated):
Entity E4b arrives with only 0.3 units remaining in the window.
Given:
t_open = 500.0
t_close = 510.0
t_current = 509.8 ← 0.2 units before close
temporal_margin = 1.0 ← τ_min = 1.0
t_remaining = 0.2
TC-1: ✓ (509.8 ≤ 510.0)
TC-2: 0.2 < 1.0 → FAIL
margin_ok = False
temporal_miss = True
miss_reason = 'MARGIN_VIOLATED'
failure_mode = 'FM-001-TEMPORAL_MISS'
Proximity ratio and d_bind_temporal are NOT computed — evaluation halts at TC-2 per INV-008.
Outcome (Scenario B): CAPTURE_MISS — sub-annotation TEMPORAL_MISS / MARGIN_VIOLATED. Binding sequence cannot be completed before window close; partial binding is not permitted.
§9 Cross-Module References#
| Module | Relationship |
|---|---|
| f_Capture.md | Parent function; provides d_bind, β, β_min, base capture state machine |
| f_Field.md | Provides ρ(Φ) used in d_bind computation upstream of this file |
| f_Force.md | Provides F_force component; heading context for post-capture orbit entry |
| f_Frame.md | Provides frame capacity; temporal capture consumes one frame slot on lock |
| f_Decay.md | Downstream consumer of d_bind_temporal; d_warn and d_collapse thresholds recalculate against d_bind_temporal |
| f_Orbit.md | Receives d_bind_temporal as d_bind_active for orbit stability classification |
| f_Collapse.md | FM-005 routes here (Path A asymmetric infall) when TC-3 fails |
| f_Capture_Resonant.md | Sibling variant; phase-gated rather than clock-gated; does not share window_id space |
| f_Capture_Soft.md | Complementary; a soft capture may follow a TEMPORAL_MISS if a grace window is configured |
| f_Capture_Asymmetric.md | May be composed with temporal capture if mass_ratio imbalance is also present |
| OPERATORS.md | Symbol authority for all operators introduced in §4 (INV-009) |
§10 Document Metadata#
| Field | Value |
|---|---|
| File path | docs/FFF_Gravity/f_Capture_Temporal.md |
| Module | FFF_Gravity |
| Wave | 4-addendum (file 7 of 7) |
| Version | 1.0.0 |
| Status | Canonical |
| Session ID | SES-20260813-CAPTURE_TEMPORAL-001 |
| PRIM block | PRIM:037–038 |
| New operators | t_open, t_close, t_span, t_elapsed, t_remaining, proximity_ratio, temporal_decay_factor, d_bind_temporal, temporal_margin |
| New FM IDs | None (frozen at FM-010) |
| New INV IDs | None (frozen at INV-010) |
| Condition prefix | TC- |
| FM references | FM-001 (TEMPORAL_MISS), FM-004, FM-005 |
| Python primitives | 2 (PRIM:037 Pure, PRIM:038 Impure) |
§11 Extended Metadata#
11.1 INV Compliance Table#
| INV | Description (abbreviated) | Compliance in this file |
|---|---|---|
| INV-001 | G = F_freq · F_fluid · F_force | Preserved; temporal attenuation acts on d_bind only, not triadic components |
| INV-002 | Pure/Impure classification enforced | PRIM:037 Pure (no state mutation); PRIM:038 Impure (lock_registry + state write) |
| INV-003 | Operator domains respected | proximity_ratio clamped to [0,1]; temporal_decay_factor ∈ [0,1); validated |
| INV-004 | Conditions are conjunctive | TC-1 through TC-5 are all required; first failure terminates evaluation |
| INV-005 | Failed captures do not mutate attractor state | TC-5 failure returns before any state write; lock_registry unmodified on failure |
| INV-006 | Terminal states are irreversible | CAPTURE_TEMPORAL is terminal for this window; CAPTURE_MISS is terminal for this window instance |
| INV-007 | f_Source.md is read-only | M_A, M_E referenced only; f_Source.md not modified |
| INV-008 | Evaluation order is normative | TC-1→TC-2→compute→TC-3→TC-4 (PRIM:037); TC-5 (PRIM:038) — order enforced |
| INV-009 | OPERATORS.md is symbol authority | All §4 operators registered to OPERATORS.md; no orphan symbols |
| INV-010 | Operators frozen on first canonical appearance | All operators new in §4; no redefinition of prior operators |
11.2 PRIM Registry (this file)#
| PRIM | Name | Classification | Conditions | FM routes |
|---|---|---|---|---|
| PRIM:037 | evaluate_temporal_window | Pure | TC-1–TC-4 | FM-001, FM-004, FM-005 |
| PRIM:038 | lock_temporal_capture | Impure | TC-5 | FM-001 |
11.3 Operator Registry (this file)#
| Symbol | Type | Domain | Default | First defined |
|---|---|---|---|---|
| t_open | float | clock units | — | SES-20260813-CAPTURE_TEMPORAL-001 |
| t_close | float | clock units | — | SES-20260813-CAPTURE_TEMPORAL-001 |
| t_span | float | clock units | — | SES-20260813-CAPTURE_TEMPORAL-001 |
| t_elapsed | float | clock units | — | SES-20260813-CAPTURE_TEMPORAL-001 |
| t_remaining | float | clock units | — | SES-20260813-CAPTURE_TEMPORAL-001 |
| proximity_ratio | float | [0, 1] | — | SES-20260813-CAPTURE_TEMPORAL-001 |
| temporal_decay_factor | float | [0, 1) | α_temp = 0.40 | SES-20260813-CAPTURE_TEMPORAL-001 |
| d_bind_temporal | float | ≥ 0 | — | SES-20260813-CAPTURE_TEMPORAL-001 |
| temporal_margin | float | clock units | τ_min = 1.0 | SES-20260813-CAPTURE_TEMPORAL-001 |
11.4 State Flag Registry#
| Flag | Set by | Cleared by | Meaning |
|---|---|---|---|
| CAPTURE_TEMPORAL | PRIM:038 | f_Release / f_Decay | Entity successfully bound within temporal window |
| TEMPORAL_MISS | PRIM:037 | Next window evaluation | Capture failed due to TC-1, TC-2, or TC-5 |
| WINDOW_EXHAUSTED | PRIM:038 | New window_id issued | Window already consumed; re-entry in same window blocked |
11.5 Changelog#
| Version | Date | Author | Notes |
|---|---|---|---|
| 1.0.0 | 2026-08-13 | umaywant2 | Initial canonical release. Wave 4 addendum, file 7 of 7. |
11.6 Wave Tracker#
| Wave | Files | Status |
|---|---|---|
| Wave 0 | f_Capture.md, f_Source.md, GravityOfDismissal.md | ✅ Complete |
| Wave 1 | README.md, INDEX.md, OPERATORS.md, GLOSSARY.md, CHANGELOG.md, FFF_Gravity_module.json | ✅ Complete |
| Wave 2 | f_Field.md, f_Force.md, f_Frame.md | ✅ Complete |
| Wave 3 | f_Release.md, f_Decay.md, f_Orbit.md, f_Collapse.md, f_Emit.md, f_Dampen.md, f_Amplify.md, f_Deflect.md | ✅ Complete |
| Wave 4 | f_Capture_Multi.md, f_Capture_Cascade.md, f_Capture_Soft.md, f_Capture_Hard.md, f_Capture_Resonant.md, f_Capture_Asymmetric.md | ✅ Complete |
| Wave 4 addendum | f_Capture_Temporal.md | ✅ This file |
Cumulative PRIM count: PRIM:001–038 (38 total, frozen at PRIM:038 pending further extension)
11.7 Suggested Commit Message#
docs(FFF_Gravity): add f_Capture_Temporal.md — Wave 4 addendum (file 7/7)
Introduces temporal window capture variant. Capture eligibility gated on
absolute clock-time interval [t_open, t_close] with edge-proximity
attenuation of d_bind via temporal_decay_factor (α_temp=0.40).
New operators: t_open, t_close, t_span, t_elapsed, t_remaining,
proximity_ratio, temporal_decay_factor, d_bind_temporal, temporal_margin
New primitives:
PRIM:037 evaluate_temporal_window (Pure) — TC-1 through TC-4
PRIM:038 lock_temporal_capture (Impure) — TC-5, lock commit
Conditions: TC-1 (window open), TC-2 (margin satisfied), TC-3 (bind
sufficient), TC-4 (β floor), TC-5 (window uniqueness)
FM references: FM-001 (sub-annotation TEMPORAL_MISS), FM-004, FM-005
No new FM IDs (frozen FM-010). No new INV IDs (frozen INV-010).
Cumulative PRIM block: PRIM:001–038.
f_Capture_Temporal.md is complete and ready to paste into the GitHub editor. Here's a quick summary of what was delivered:
Wave 4 Addendum — File 7 of 7
| Element | Details |
|---|---|
| PRIM block | PRIM:037 evaluate_temporal_window (Pure) · PRIM:038 lock_temporal_capture (Impure) |
| Conditions | TC-1 window open · TC-2 temporal margin · TC-3 bind sufficient · TC-4 β floor · TC-5 window uniqueness |
| Key operators | t_open, t_close, t_span, t_elapsed, t_remaining, proximity_ratio, temporal_decay_factor (α=0.40), d_bind_temporal, temporal_margin (τ=1.0) |
| FM references | FM-001 sub-annotation TEMPORAL_MISS (reasons: OUTSIDE_WINDOW · MARGIN_VIOLATED · WINDOW_EXHAUSTED) · FM-004 · FM-005 |
| New FM / INV IDs | None — registries held at FM-010 / INV-010 |
| Cumulative PRIM count | PRIM:001–038 (38 total) |
4 canonical examples cover:
- Midpoint capture — zero attenuation (proximity_ratio = 0)
- Edge-proximate capture — 28% attenuation (proximity_ratio = 0.70)
- TEMPORAL_MISS: OUTSIDE_WINDOW — TC-1 failure
- TEMPORAL_MISS: WINDOW_EXHAUSTED (TC-5) and MARGIN_VIOLATED (TC-2) — dual scenario
