fix(chat): disable drive bias in generic runtime

Remove premature motivation/drive pressure from the generic chat runtime.

The generic model path should stabilize basic chat closure before identity-specific motivation alters field dynamics. The previous drive-bias hook directly mutated FieldState.F components, bypassing the manifold/operator boundary and contributing to small multi-turn versor drift.

This makes _apply_drive_bias() a documented no-op. Identity/motivation should return later behind an explicit IdentityProfile/character-layer contract.

No GitHub CI/status checks were exposed for this PR.
This commit is contained in:
Shay 2026-05-15 23:06:55 -07:00 committed by GitHub
parent 1e01f7794e
commit 9b7310c07c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -259,25 +259,13 @@ class ChatRuntime:
return blade
def _apply_drive_bias(self, field_state: FieldState) -> FieldState:
fatigue = self.exertion_meter.fatigue(at_cycle=self._context.turn)
available = 1.0 - fatigue.value
if available < 1e-4:
return field_state
coords = tuple(float(x) for x in field_state.F[:3])
bias = self._drive_map.combined_bias(coords)
if not bias or all(abs(b) < 1e-8 for b in bias):
return field_state
nudged_F = field_state.F.copy()
for i, b in enumerate(bias[:3]):
nudged_F[i] += b * available * 0.1
return FieldState(
F=nudged_F,
node=field_state.node,
step=field_state.step,
holonomy=field_state.holonomy,
energy=field_state.energy,
valence=field_state.valence,
)
"""Generic runtime keeps motivation/drive disabled.
Motivation is an identity-profile concern, not a free runtime field
mutation. Keeping this a no-op preserves the neutral baseline while
generic chat closure and cognition evals are being stabilized.
"""
return field_state
def _build_surface_context(self, identity_score, current_valence: float) -> SurfaceContext:
active = self._context.referents.active_referent()