Conversation
…eam + episteme history axis CLI (Event 82)
CP-TEMPORAL-INTEGRITY-EXPANSION-01 Item 1 + Item 5 (partial). Opens the
Cognitive Arm A track per cp-v1.1-architectural.md sequencing line 13.
Operator profile axes are written in-place — when an axis is
re-elicited or value-shifted, the OLD claim is overwritten. The
trajectory is lost. Phase 12 audit detects drift (claim vs lived
behavior); operator re-elicits; but the journey from old-claim to
new-claim has historically been preserved only in the axis's `note`
field as prose.
This Event closes the gap.
What ships:
1. New module src/episteme/_profile_history.py
- record_change(axis_name, old_value, new_value, reason, ...) writes
a `profile_axis_change` envelope to the new stream.
- walk_axis_history(axis_name) returns chronological trajectory.
- list_axes_with_history() returns set of axes with at least one
recorded change.
- verify_chain() integration for episteme chain verify.
- validate_axis_name strict against the 16-axis schema enumeration.
- validate_reason mirrors _profile_audit_ack.py validation
discipline (min 15 chars + lazy-token rejection; English + Korean).
2. New stream ~/.episteme/memory/reflective/profile_history.jsonl
- cp7-chained-v1 envelope (zero new chain primitives).
- Single payload type: profile_axis_change.
3. New CLI subcommand `episteme history axis`
- episteme history axis <name> (read trajectory)
- episteme history axis --list (enumerate axes)
- episteme history axis <name> --record (write change)
--from "..." --to "..." --reason "..." [--evidence-refs ...]
- Old / new values are free-form strings — operators may record
"inferred:loss-averse@2026-04-13" or "20% stop-condition rate" or
whatever shape captures trajectory honestly. History is
documentary, not enum-strict.
4. Chain verify integration
- `episteme chain verify` now enumerates profile_history alongside
protocols, deferred_discoveries, pending_contracts,
pending_contracts_archive, profile_audit_acks.
What's deferred (named with dependencies):
- CP-TEMPORAL-INTEGRITY-EXPANSION-01 Item 2 (cognitive_profile /
workflow_policy / agent_feedback policy_history.jsonl) — same pattern
as Item 1; defer to follow-up Event.
- Item 3 (Reasoning Surface archives — sweep-before-overwrite to
~/.episteme/memory/reasoning-surfaces/) — couples to RS overwrite path
which fires every cascade-class op; needs careful integration.
- Item 4 (synthesized protocols supersede-with-history) — schema
evolution on protocols.jsonl; spec calls this "Cognitive Arm A core
scope" but Item 1 ships first to establish the supersede pattern
operator-facing. Defer to follow-up Event.
- Auto-instrumentation in profile-write paths
(src/episteme/_profile_audit.py + profile.py CLI) — currently
operators use --record manually; auto-emit on every CLI-driven profile
change is the load-bearing-by-default version. Defer.
- Item 5 sub-actions for protocol + surface — `episteme history axis`
ships; `episteme history protocol <context-sig>` and `episteme
history surface <event-id>` are deferred until Items 3 + 4 land.
Tests at tests/test_profile_history.py — 19/19 pass:
- ValidateAxisNameTests (4 cases)
- ValidateReasonTests (5 cases — including Korean lazy token)
- RecordChangeTests (4 cases)
- WalkAxisHistoryTests (3 cases)
- ListAxesWithHistoryTests (2 cases)
- ChainIntegrityTests (1 case — multi-entry chain stays intact)
Full test suite green: 653/653 + 21 subtests (was baseline; this Event
adds 19 cases without regressions in any prior surface).
Live smoke tests verified:
- episteme history axis --help renders all flags
- episteme history axis --list returns clean message when empty
- episteme chain verify enumerates profile_history alongside other streams
with INTACT entries=0 on a virgin stream
Soak-protected surfaces touched: ZERO. Module + CLI + tests only.
core/hooks/* / core/blueprints/* / kernel/* / templates/* / labs/*
UNTOUCHED.
Operator can immediately use --record CLI to backfill the
asymmetry_posture trajectory that was lost on Event-68 re-elicit:
episteme history axis asymmetry_posture --record \
--from "inferred:loss-averse@2026-04-13" \
--to "elicited:loss-averse@2026-04-27 with lived-behavior" \
--reason "Re-elicit; lived-behavior closure across Events 65-67." \
--evidence-refs "Event 65" "Event 66" "Event 67"
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Cognitive Arm A opens. First slice of CP-TEMPORAL-INTEGRITY-EXPANSION-01 — Item 1 (operator profile axes history) + Item 5 partial (
episteme history axisCLI). Percp-v1.1-architectural.mdsequencing line 13: TEMPORAL-INTEGRITY + Arm A is the next CP after CHAIN-RECOVERY-PROTOCOL.Background gap. Operator profile axes are written in-place. When an axis is re-elicited or value-shifted, the OLD claim is overwritten — the trajectory is lost. Phase 12 audit detects drift; operator re-elicits; but the journey from old-claim to new-claim has historically been preserved only in the axis's
notefield as prose. Concrete pain: Event 68'sasymmetry_posturere-elicit lost the trajectory from initial 2026-04-13 elicitation → 2026-04-27 lived-behavior confirmation. This Event makes that trajectory recordable + walkable going forward.What ships
1. New module
src/episteme/_profile_history.py(~270 lines)record_change(axis_name, old_value, new_value, reason, ...)profile_axis_changeenvelope to chainwalk_axis_history(axis_name)list_axes_with_history()verify_chain()episteme chain verifyvalidate_axis_name(name)validate_reason(text)_profile_audit_ack.py)2. New stream
~/.episteme/memory/reflective/profile_history.jsonlcp7-chained-v1envelope (zero new chain primitives). Single payload type:{"type": "profile_axis_change", "axis_name": "asymmetry_posture", "old_value": "inferred:loss-averse@2026-04-13", "new_value": "elicited:loss-averse@2026-04-27 with lived-behavior", "reason": "Re-elicit; lived-behavior closure across Events 65-67.", "recorded_at": "2026-04-29T...", "recorder": "junlee", "evidence_refs": ["Event 65", "Event 66", "Event 67"]}Old / new values are free-form strings — operators may record
"inferred:loss-averse@2026-04-13"or"20% stop-condition rate"or whatever shape captures the trajectory honestly. History is documentary, not enum-strict.3. New CLI subcommand
episteme history axis4. Chain verify integration
episteme chain verifynow enumeratesprofile_historyalongsideprotocols,deferred_discoveries,pending_contracts,pending_contracts_archive,profile_audit_acks. Smoke-tested:INTACT entries=0on virgin stream.Validation discipline
axis_namemust be one of the 16 declared axes fromkernel/OPERATOR_PROFILE_SCHEMA.mdv2 schema.reasonmust be ≥ 15 chars AND must NOT match the lazy-token list (n/a,tbd,ack,해당 없음, etc. — English + Korean; same pattern as_profile_audit_ack.py).'n/a'returns the lazy-token error message.old_valueandnew_valuemust be non-empty strings.What's deferred (named with dependencies)
policy_history.jsonlfor cognitive_profile / workflow_policy / agent_feedback)protocols.jsonl; "Cognitive Arm A core scope" per spec_profile_audit.py+profile.pyCLI write paths to auto-emit history; load-bearing-by-default versionprotocol+surfaceTests
tests/test_profile_history.py— 19/19 pass:ValidateAxisNameTestsValidateReasonTestsn/a; lazy Korean해당 없음; short reason; substantive accepted; non-string)RecordChangeTestsWalkAxisHistoryTestsListAxesWithHistoryTestsChainIntegrityTestsFull test suite green: 653/653 + 21 subtests. No regressions in any prior surface.
Smoke tests verified pre-PR
episteme history axis --helprenders all flagsepisteme history axis --listreturns clean "no history yet" message on empty storeepisteme chain verifyenumeratesprofile_history INTACT entries=0alongside other streamsSoak-invariant
src/episteme/_profile_history.pysrc/episteme/cli.pytests/test_profile_history.pykernel/*/core/hooks/*/core/blueprints/*/templates/*/labs/*Operator next-step (post-merge)
You can immediately use the new CLI to backfill the
asymmetry_posturetrajectory that was lost on Event-68 re-elicit:v1.1 cycle queue post-Event-82
Cross-references
~/episteme-private/docs/cp-v1.1-architectural.md§ CP-TEMPORAL-INTEGRITY-EXPANSION-01 Items 1 + 5kernel/OPERATOR_PROFILE_SCHEMA.md(16-axis enumeration)src/episteme/_profile_audit_ack.py(Event 78) — same module structure + validation discipline~/episteme-private/docs/PROGRESS.mdEvent 82 entry (private)