Skip to content

Fix #89: make THINK vs SAY divergence observable#96

Closed
RandomOscillations wants to merge 1 commit intocodex/issue-88-macro-feedbackfrom
codex/issue-89-think-vs-say-divergence
Closed

Fix #89: make THINK vs SAY divergence observable#96
RandomOscillations wants to merge 1 commit intocodex/issue-88-macro-feedbackfrom
codex/issue-89-think-vs-say-divergence

Conversation

@RandomOscillations
Copy link
Copy Markdown
Collaborator

Summary

  • add public_position to ReasoningResponse so high-fidelity reasoning can carry a separate public stance
  • classify private position from private_thought (fallback to reasoning), and classify public position from public_statement at high fidelity
  • apply response.public_position in engine state updates (fallback to response.position) so divergence persists to DB-visible state
  • include fidelity in meta.json for run auditability
  • add tests for async two-pass divergence classification, engine public-position override behavior, and fidelity metadata export

Testing

  • pytest -q tests/test_reasoning_execution.py tests/test_engine.py::TestFlipResistance::test_public_position_prefers_explicit_public_field tests/test_engine.py::TestTokenAccumulation::test_cost_in_meta_json
  • ruff check extropy/core/models/simulation.py extropy/simulation/engine.py extropy/simulation/reasoning.py tests/test_engine.py tests/test_reasoning_execution.py

Closes #89

Copy link
Copy Markdown
Collaborator

@DeveshParagiri DeveshParagiri left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Verdict: ✅ Ready to merge

Summary

Makes THINK vs SAY divergence observable by classifying private_thought and public_statement separately in high-fidelity simulations.

Implementation

Component Change
ReasoningResponse Added public_position: str | None
Classification Separate calls for private_thought (→position) and public_statement (→public_position)
Engine Uses response.public_position or response.position for DB state
meta.json Now includes fidelity for auditability

Edge Cases

Case Handling
Empty public_statement Returns {}, falls back to position
No divergence public_position equals position
Medium/low fidelity Skips public classification

Minor Suggestion (non-blocking)

Consider adding a test for empty public_statement edge case to verify fallback works.

No blocking changes required.

@DeveshParagiri DeveshParagiri deleted the branch codex/issue-88-macro-feedback February 17, 2026 18:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants