-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Summary
Network exposure records currently store content=scenario.event.content for every propagated exposure, even when the source is reacting to a later timeline epoch. This makes peer-transmitted information stale/incorrect and breaks message provenance in prompts.
Why This Is Major
The prompt renders network exposures as named statements, e.g. "X told me: <content>". If propagated content is always the initial seed event text:
- Agents hear the wrong thing from peers
- Later timeline developments do not propagate semantically through network paths
- Exposure history appears repetitive and unnatural
- Re-reasoning triggers may fire on new epochs while textual evidence still shows old content
This produces contradictory internal context and weakens scenario fidelity.
Current Behavior (Code Evidence)
In /extropy/simulation/propagation.py:
467-472: networkExposureRecordis created withcontent=scenario.event.content473-489:info_epochandforce_rereasonare propagated, but textual content is not tied to that epoch/source message
In /extropy/simulation/reasoning.py:
135-142: prompt renders network exposure content verbatim as what peer said
So the model sees outdated/incorrect peer statements for timeline-driven updates.
Expected Behavior
Propagated network content should reflect what the sharer is actually transmitting, with epoch-consistent provenance.
At minimum:
- If sharer's latest known epoch is
k, propagated content should correspond to epochk(or the sharer's own public statement grounded ink) - If no epoch context exists (static/non-timeline), fallback to base event content is acceptable
Proposed Fix
Option A (preferred): propagate sharer public statement
When creating network exposure:
- use
content = sharer_state.public_statementwhen available - fallback to epoch content (see Option B)
- final fallback to
scenario.event.content
Pros: most realistic peer-to-peer wording; aligns with "X told me"
Option B: propagate epoch-specific canonical content
- Maintain map
epoch -> timeline_event_content - For sharer with
latest_info_epoch = k, set content from epochk - fallback to base event content if missing
Pros: deterministic and compact; less variability than A
Additional safeguards
- Keep
info_epoch+force_rereasonas-is - Ensure no empty content is written
- Consider length cap/sanitization before persistence
Tests to Add
tests/test_propagation.py:- network exposure from timeline-aware sharer carries epoch-consistent content (not seed event text)
- static scenario fallback still uses base event content
tests/test_reasoning_prompts.py:- rendered "X told me" lines reflect propagated content
Acceptance Criteria
- In evolving scenarios, peer exposure text changes when new timeline epochs propagate
- No systematic reuse of initial seed event text for all network exposures
- Existing non-evolving scenarios remain stable
Related
- Complementary to Critical: Timeline prompt leaks unseen events to agents (breaks information asymmetry) #115 (timeline prompt leakage)
- Improves semantic consistency of exposure-driven prompts and provenance-based re-reasoning