Skip to content

Commit f6b5de1

Browse files
fix: elapsed time labels in memory traces + update gaps doc with implementation status
1 parent 86392eb commit f6b5de1

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

docs/simulation-experience-gaps.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,3 +1020,34 @@ Four completely different lives. Same simulation engine.
10201020
| **Aggregate mood** | Universal anxiety | Brief annoyance → apathy | Local fury → resignation | Split euphoria/FOMO/resentment |
10211021
| **Temporal feel** | Urgent daily countdown | 2-day blip | Slow grinding weeks | Volatile hourly swings |
10221022
| **Convergence** | Everyone scared, same plan | Quick resolution, move on | Bitter acceptance | Depends on price action |
1023+
1024+
---
1025+
1026+
## Implementation Status (Feb 2026)
1027+
1028+
Audit of current codebase against the issues above.
1029+
1030+
| Issue | Status | Notes |
1031+
|-------|--------|-------|
1032+
| **1. Population ↔ Network** | PARTIAL | Edge type rules infrastructure exists (`NetworkConfig.edge_type_rules`) but not populated by default. Partner matching done at sampling but not linked as network edges. |
1033+
| **2. Agent Names** | DONE | Full name generation via SSA/Census data in `extropy/population/names/`. Names used throughout: sampling, persona, engine, conversations. |
1034+
| **3. Family Members** | DONE | Partner linking + NPC dependents (kids, elders) generated in `households.py`. Available for conversations. |
1035+
| **4. Temporal Awareness** | DONE | Timestep + unit in prompts. Memory timestamps now show elapsed time ("2 days ago" not "Day 3"). |
1036+
| **5. Exposures** | PARTIAL | Experience templates exist but not demographic-aware. No aggregation of network sources. |
1037+
| **6. Peer Opinions** | DONE | Names and relationships rendered. Conviction comes through naturally in the public statement — explicit labels would be unnatural. |
1038+
| **7. Aggregate Sentiment** | DONE | Both macro (global) and local (neighborhood) mood rendered in natural language via `_render_macro_summary()` and `_render_local_mood()`. |
1039+
| **8. Memory** | DONE | Full history retained (no sliding window cap). Fidelity controls raw reasoning visibility: low=summaries only, medium=last 3 with excerpts, high=last 5 with excerpts. |
1040+
| **9. Private vs Public** | PARTIAL | Fields exist in state model but agent doesn't explicitly reason about the gap. Mechanical splitting still applied post-hoc. |
1041+
| **10. Narrative Prompt Structure** | OUT OF SCOPE | Day phase templates decided against. Current linear prompt structure is sufficient. |
1042+
| **11. Pass 2 Context** | NOT NEEDED | Pass 1 reasoning already contains enough demographic context. Adding demographics to Pass 2 would be redundant. |
1043+
| **12. Channel → Experience** | PARTIAL | Experience templates exist but not demographic-variant. |
1044+
| **13. Agent Interactions** | DONE | Full conversation system in `conversation.py`. Social posts recorded. Available contacts rendered. |
1045+
| **14. Cognitive Architecture** | PARTIAL | Emotional trajectory + conviction self-awareness + repetition detection implemented. Semantic memory consolidation not done. |
1046+
1047+
### Summary
1048+
1049+
- **DONE**: 2, 3, 4, 6, 7, 8, 13
1050+
- **PARTIAL**: 1, 5, 9, 12, 14
1051+
- **OUT OF SCOPE**: 10, 11
1052+
1053+
The simulation is in good shape. Remaining gaps are either edge cases (network edge rules, demographic channel variants) or ambitious features (semantic memory consolidation).

extropy/simulation/reasoning.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,18 @@ def build_pass1_prompt(
233233
original_idx = len(context.memory_trace) - len(display_memories) + i
234234
conviction_label = float_to_conviction(memory.conviction) or "uncertain"
235235
unit = context.timestep_unit
236+
237+
# Elapsed time label (e.g., "2 days ago" instead of "Day 3")
238+
elapsed = context.timestep - memory.timestep
239+
if elapsed == 0:
240+
time_label = "Earlier today"
241+
elif elapsed == 1:
242+
time_label = f"1 {unit} ago"
243+
else:
244+
time_label = f"{elapsed} {unit}s ago"
245+
236246
prompt_parts.append(
237-
f'- {unit} {memory.timestep + 1}: "{memory.summary}" '
238-
f"(conviction: {conviction_label})"
247+
f'- {time_label}: "{memory.summary}" (conviction: {conviction_label})'
239248
)
240249
# Show raw excerpt for recent steps in medium/high fidelity
241250
if (

0 commit comments

Comments
 (0)