You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While investigating a rapidly filling Persona-linked Person record, we found that the current extraction path intentionally treats those records as an append-only “living identity log.” That preserves potentially meaningful emergence evidence, but it also turns a small number of conversations into a large, unstructured narrative that is difficult to review, cannot distinguish witnesses, and uses character count as a proxy for drift.
We need an attributed, bounded signal model for Persona emergence and Agent-work drift.
This issue is deliberately PG. The investigation involved personal conversation data, but no such content is needed to understand or implement the design.
Context and constraints
People records remain the canonical extraction and disambiguation surface for both humans and Personas. The pipeline correctly discovers Personas as people because that is how users naturally discuss them.
A Persona-linked Person record must remain the shared relationship/graph node. Do not replace it with an unrelated Persona-only registry.
Cross-persona observations are intentional witness evidence. “Alison observed Lena” is not contamination merely because the observer and subject differ.
Ordinary human People records may legitimately contain important narrative-shaped relationship detail. This work must not force all narrative into Topics or change ordinary-Person semantics.
Persona identity (“who they are”) and Agent operating contract (“how they work in a harness”) are separate durable targets. Evidence may support either, both, or neither.
Problem
For a matched Person with an Ei Persona identifier, buildPersonUpdatePrompt() takes a special append-only branch that says, among other things:
“living identity log”
“add, never truncate”
“Never remove or summarize away existing content”
“brevity is wrong here”
handlePersonUpdate() then accepts the model’s returned full description and replaces the record by ID. The resulting text simultaneously acts as:
relationship/disambiguation profile;
raw field-notes/transcript surrogate;
cross-observer evidence store;
reflection input;
prompt-cost accumulator.
One string cannot safely hold all five roles. Size-triggered reflection sees narrative volume, not necessarily novel or recurring drift. The current record also cannot retain claim-level provenance: who observed a behavior, whether it was self-report or cross-persona testimony, which source message supports it, whether it was repeated, or how a human reviewed it.
Agent evidence adds another gap. Coding-harness transcripts may show operating-contract drift, but they must not be treated as Agent evidence unless the active agent definition and execution context are verified for that source message.
Direction
Branch after the first-stage People scan resolves a candidate to an existing Person linked to an Ei Persona—not only inside the generic Person-update prompt.
conversation block
→ People/Topic scan
→ resolve candidate to Person
→ linked Ei Persona?
├─ no → ordinary Person flow
└─ yes → Persona observation flow
→ signal-target classification
→ Persona and/or Agent signal reducers
→ optional bounded Person profile update
Preserve the existing graph
Keep the linked Person record as the subject/relationship/disambiguation node. Keep normal identifiers, relationship semantics, search, and deduplication on that record.
Store derived signal state alongside the Persona runtime state rather than inside PersonaEntity itself, so normal full-record Persona corrections cannot accidentally overwrite it:
The exact persisted shape is an ADR decision, not settled by this issue.
Observation versus signal
An observation is compact, attributed testimony with source pointers. A signal is a bounded, reviewable grouping of corroborating or contradictory observations.
The final schema may use existing Quote records as evidence pointers, but Quotes alone do not currently preserve all required observer, claim, review, and historical-association semantics.
Target lenses
The classifier must produce separately phrased claims for each applicable target:
Target
Question
Durable destination
Persona
Who is this Persona?
Persona identity (long_description, traits, topics)
If provenance is unavailable, do not silently create Agent-contract evidence. It may remain Persona evidence or become a visible needs_agent_provenance review item.
Signal rules
A single observation may create a candidate but does not automatically prove identity drift.
Repetition, independent observers, contradiction with current identity/contract, or explicit human importance can promote a signal.
Subject self-report is meaningful testimony but does not self-confirm a change.
Cross-persona testimony must retain observer identity; it is not automatically weighted as truth or contamination.
A definition revision creates a new Agent-contract baseline. Intentional redesign is not drift.
Character count is only a cost/readiness metric, never a drift oracle.
Raw message history remains the source of truth. Do not copy scene-level narrative merely to preserve evidence.
Dismissed/superseded signals retain compact audit disposition and source pointers but do not remain in ordinary prompt context.
No prompt-only novelty gate is sufficient; no-op / no-profile-change semantics must be enforced at the write boundary and tested.
Existing mechanisms to reuse
Source messages and stable Quote/message IDs.
Persona pending_update, reflection-progress locking, apply/dismiss/drain lifecycle.
external_reflection_only protections for evidence that must survive until all applicable lenses finish.
Soft-alert/ambiguity approach from invalid-link and ghost-record work.
Existing dual-lens separation: Persona evidence and Agent operating-contract evidence must not be folded into one identity update.
Non-goals
Removing Persona-linked People records.
Treating cross-persona testimony as contamination by default.
Forcing ordinary human narrative into Topics.
Automatically changing Persona identity or Agent instructions based on a signal.
Using a character threshold as evidence that drift occurred.
Acceptance criteria
ADR: An ADR documents the chosen ownership/schema for Persona observations and signals, the retained role of Persona-linked People records, subject-versus-witness semantics, evidence retention/compaction, Agent-provenance requirements, and the contrary alternative of storing everything only in Persona identity fields. The ADR must explain why that alternative was rejected.
The extraction path branches after canonical Person resolution when the matched record has an Ei Persona identifier; ordinary-Person behavior remains unchanged.
The Persona branch produces bounded, attributed observations rather than append-only Person-description prose.
Signals preserve subject, witness kind, source message, timestamps, recurrence, and lifecycle state; cross-persona observations remain distinguishable from self-report and human observation.
Persona and Agent signals are classified separately and cannot silently write into each other’s durable targets.
Agent signals are produced only with verified active-agent execution provenance; missing provenance produces no Agent-contract mutation.
Reflection consumes active signals plus identity/contract baselines, not an unbounded narrative string. It preserves evidence until every applicable lens reaches a terminal reviewed state.
The existing generic Person update path keeps its bounded profile semantics and is not regressed.
Summary
While investigating a rapidly filling Persona-linked
Personrecord, we found that the current extraction path intentionally treats those records as an append-only “living identity log.” That preserves potentially meaningful emergence evidence, but it also turns a small number of conversations into a large, unstructured narrative that is difficult to review, cannot distinguish witnesses, and uses character count as a proxy for drift.We need an attributed, bounded signal model for Persona emergence and Agent-work drift.
This issue is deliberately PG. The investigation involved personal conversation data, but no such content is needed to understand or implement the design.
Context and constraints
Peoplerecords remain the canonical extraction and disambiguation surface for both humans and Personas. The pipeline correctly discovers Personas as people because that is how users naturally discuss them.Personrecord must remain the shared relationship/graph node. Do not replace it with an unrelated Persona-only registry.Peoplerecords may legitimately contain important narrative-shaped relationship detail. This work must not force all narrative into Topics or change ordinary-Person semantics.Problem
For a matched
Personwith anEi Personaidentifier,buildPersonUpdatePrompt()takes a special append-only branch that says, among other things:handlePersonUpdate()then accepts the model’s returned full description and replaces the record by ID. The resulting text simultaneously acts as:One string cannot safely hold all five roles. Size-triggered reflection sees narrative volume, not necessarily novel or recurring drift. The current record also cannot retain claim-level provenance: who observed a behavior, whether it was self-report or cross-persona testimony, which source message supports it, whether it was repeated, or how a human reviewed it.
Agent evidence adds another gap. Coding-harness transcripts may show operating-contract drift, but they must not be treated as Agent evidence unless the active agent definition and execution context are verified for that source message.
Direction
Branch after the first-stage People scan resolves a candidate to an existing
Personlinked to an Ei Persona—not only inside the generic Person-update prompt.Preserve the existing graph
Keep the linked
Personrecord as the subject/relationship/disambiguation node. Keep normal identifiers, relationship semantics, search, and deduplication on that record.Store derived signal state alongside the Persona runtime state rather than inside
PersonaEntityitself, so normal full-record Persona corrections cannot accidentally overwrite it:The exact persisted shape is an ADR decision, not settled by this issue.
Observation versus signal
An observation is compact, attributed testimony with source pointers. A signal is a bounded, reviewable grouping of corroborating or contradictory observations.
The final schema may use existing
Quoterecords as evidence pointers, but Quotes alone do not currently preserve all required observer, claim, review, and historical-association semantics.Target lenses
The classifier must produce separately phrased claims for each applicable target:
long_description, traits, topics)An Agent signal requires verified execution provenance captured at ingestion time:
If provenance is unavailable, do not silently create Agent-contract evidence. It may remain Persona evidence or become a visible
needs_agent_provenancereview item.Signal rules
no-op/ no-profile-change semantics must be enforced at the write boundary and tested.Existing mechanisms to reuse
pending_update, reflection-progress locking, apply/dismiss/drain lifecycle.external_reflection_onlyprotections for evidence that must survive until all applicable lenses finish.Non-goals
Acceptance criteria
Peoplerecords, subject-versus-witness semantics, evidence retention/compaction, Agent-provenance requirements, and the contrary alternative of storing everything only in Persona identity fields. The ADR must explain why that alternative was rejected.Personresolution when the matched record has anEi Personaidentifier; ordinary-Person behavior remains unchanged.Personupdate path keeps its bounded profile semantics and is not regressed.Open decisions for ADR/design review