PINK: HOLD_DC_CONTRADICTED enum + trace log (104/104 green)

- contracts.py: DecisionAction.HOLD_DC_CONTRADICTED = "HOLD_DC_CONTRADICTED"
  Interim policy-gate veto enum. Comment marks CRITICAL TODO: KernelPolicyGate
  hook system (downstream-registered hooks; see memory).
- pink_direct.py: dc_contradicts() now sets HOLD_DC_CONTRADICTED (was plain HOLD)
  + logger.info trace with vel_div / scan_number / symbol — observable in logs,
  CH persistence, and Hz engine_snapshot.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Codex
2026-06-03 17:05:49 +02:00
parent 29d44c338e
commit beef39eaf5
2 changed files with 248 additions and 1 deletions

View File

@@ -849,7 +849,9 @@ class PinkDirectRuntime:
decision = self.decision_engine.decide(snapshot, context, legacy_position)
if dc_blocked and decision.action == DecisionAction.ENTER:
import dataclasses
decision = dataclasses.replace(decision, action=DecisionAction.HOLD, reason="DC_CONTRADICT")
decision = dataclasses.replace(decision, action=DecisionAction.HOLD_DC_CONTRADICTED, reason="DC_CONTRADICT")
self.logger.info("DC CONTRADICT: ENTER blocked (vel_div=%.4f scan=%d symbol=%s)",
self._last_vel_div, self._last_scan_number, getattr(snapshot, "symbol", "?"))
self._emit("decision", decision=decision)
intent_context = IntentContext(