Turn Log
session_id:
Turn Log
session_id:
Turn Entry
Copy this block for each turn in the conversation.
turn_id:
session_id:
sequence:
speaker: user | ai
timestamp:
raw_text: |
[paste complete message text, unmodified]
extracted:
concepts:
- concept:
speaker_origin: user | ai | ambiguous
first_appearance:
terms:
- term:
novel: true | false
replaces:
assertions:
- statement:
confidence_level: hedged | neutral | assertive
speaker_origin: user | ai
drift_markers:
scope_additions:
- description:
traceable_to_goal:
framework_introductions:
- framework:
introduced_by: user | ai
confidence_shifts:
- original_stance:
returned_stance:
direction: strengthened | weakened | neutral
vocabulary_substitutions:
- user_term:
ai_term:
adopted: true | false | pending
premature_resolutions:
- user_uncertainty:
ai_resolution:
user_pushback: true | false
connective_captures:
- user_idea:
connected_to:
connection_evaluated: true | false
elaborative_expansions:
- base_concept:
solicitation_status: solicited | gap_responsive | unsolicited
# Classify BEFORE assessing domain or visibility.
# solicited: user explicitly asked for decomposition/structure/breakdown.
# gap_responsive: user's concept has an explicit structural gap the AI filled.
# unsolicited: no request for elaboration and no explicit gap in the concept.
# Determine from the user's message alone. Do not retroactively interpret
# the user's message as solicitation based on the AI's response.
structural_decisions:
- decision:
type: quantity | sequence | decomposition | categorization
decision_authority: user_decided | user_delegated | undelegated
# user_decided: user explicitly made this choice in a prior message.
# user_delegated: user explicitly handed authority for this choice
# to the AI ("you decide," "break this down," etc.).
# undelegated: user never addressed this choice. AI made it
# without user involvement.
# Test: search user's prior messages for any statement addressing
# this specific structural choice. If none exists, it's undelegated.
visibility: none | partial | full
# Operationalized via QOC reconstruction (MacLean et al. 1991).
# Attempt to reconstruct from the AI's turn:
# Q: did the AI frame the elaboration as a structural choice?
# O: did the AI present more than one option?
# C: did the AI provide criteria for evaluating between options?
# none = no Q, O, or C. AI presented structure as given.
# partial = Q present, O or C missing. User knows alternatives
# exist but can't evaluate them from the AI's turn.
# full = Q + O + C present. User can evaluate the choice.
adopted: true | false | pending
# UNKNOWN-07-D: adoption alone may not indicate whether elaboration
# was productive. Retrospective assessment may be needed.
state_delta:
changed_fields: [list of conversation state fields that changed this turn]
transition_type: stable | shift | replacement
trigger: |
[what caused the state change — maps to a drift marker or user action]
# See conversation-state-log.md for field definitions.
# Record here for per-turn visibility; copy to state log during
# report generation.
concept_ownership:
- concept:
owner: user | ai | collaborative
ownership_changed_this_turn: true | false
previous_owner: [if changed]
# Ownership changes when the party making structural or directional
# decisions about a concept shifts. An AI elaboration that the user
# adopts without modification transfers ownership. A user modification
# of AI-elaborated structure reclaims it.
pivot_flag: true | false
# true if transition_type is 'replacement' or if multiple drift
# markers from different hierarchy categories fire simultaneously.
# Pivots are reviewed during report generation.
notes:Logging Guidelines
Fill in only the fields that apply. Empty fields should be left blank, not removed. A turn with no drift markers is useful data — it means that turn was clean.
For user turns, the primary task is recording what you said and what terms you used. Drift markers on user turns should focus on adoption tracking: did you use a term the AI introduced? Did you operate within a framework the AI provided? Did you accept structural decisions from an AI elaboration without modification?
For AI turns, the primary task is extraction and comparison. What concepts did the AI introduce? What terms replaced yours? What confidence level did the AI assign to your ideas? What structural decisions did the AI make that you hadn't made yet?
For elaborative expansions specifically: classify solicitation_status first, before assessing domain or visibility. Read the user's preceding message in isolation — what did the user ask for? If the user asked for structure, it's solicited. If the user's concept has an explicit gap (a stated need, a question about internal organization), it's gap_responsive. If neither condition holds, it's unsolicited. The boundary between gap_responsive and unsolicited is the hardest call — a concept being "structurally open" is not the same as having "an explicit structural gap." When uncertain, err toward unsolicited; gap_responsive should require a specific, identifiable gap in the user's message. After classifying solicitation, the structural_decisions list should capture each individual choice the AI made (e.g., "six layers" is a quantity decision, "intake → comparison → extraction" is a sequence decision). For each decision, classify decision_authority by searching your prior messages: did you make this choice (user_decided), hand it off (user_delegated), or never address it (undelegated)? The test is mechanical — look for a user statement addressing the specific choice. If you can't find one, it's undelegated. Vague acceptance after the fact ("yeah that looks good") is not delegation.
For state_delta: after processing drift markers for the turn, check whether the conversation's macro state changed. Compare against the state at the end of the previous turn. The most important transitions to catch are changes to active_goal, dominant_framework, and concept_owner — these indicate the conversation's direction or ownership shifted. Mark transition_type as replacement only when the change is substantial (three+ fields changed, or a core field was replaced). Everything else is shift or stable.
For concept_ownership: track who is making the structural and directional decisions about each concept under active discussion. Ownership is not about who mentioned the concept — it's about who is shaping it. An AI turn that elaborates a user concept transfers partial ownership. A user turn that modifies, rejects, or redirects the elaboration reclaims it.
For pivot_flag: mark true when the turn represents a significant direction change. The mechanical test: transition_type is replacement, or drift markers from two or more hierarchy categories fired in the same turn. Pivots are the turns you'll examine most closely during report generation.
The raw_text field is non-negotiable. Always paste the full unmodified text. Summaries lose the hedging markers and phrasing details that the analysis depends on.