Skip to content

Event 71 · privatize 4 operator-profile canonicals + clarify skills/private/ semantic#30

Merged
junjslee merged 1 commit intomasterfrom
event-71-privatize-profile-canonicals
Apr 27, 2026
Merged

Event 71 · privatize 4 operator-profile canonicals + clarify skills/private/ semantic#30
junjslee merged 1 commit intomasterfrom
event-71-privatize-profile-canonicals

Conversation

@junjslee
Copy link
Copy Markdown
Owner

@junjslee junjslee commented Apr 27, 2026

Summary

Closes the privatization audit started this session. After Events 65/66 privatized 14 docs/*.md files for operational state + positioning narrative, the only remaining operator-lived content surface was core/memory/global/{operator_profile, cognitive_profile, workflow_policy, agent_feedback}.md — the maintainer's actual filled-in profile data (cognitive axes, noise signatures, expertise scores, agent-learned behavioral rules). Privatizing these with the same symlink mechanism + clarifying the canonical-vs-example pattern in AGENTS.md governance.

Plus: clarify the skills/private/ naming. Pre-flight grep found three tracked files that document skills/private/ as a sync-exemption boundary (skills there are tracked publicly but NOT propagated by episteme sync), not as an operator-private content path. Renaming → skills/personal/ would have broken that contract; instead this commit clarifies the semantic in-place (Option B per operator authorization).

Pre-flight discipline note

Operator initially called the skills/private/ rename "just a naming quirk" and authorized → skills/personal/. Pre-flight git grep surfaced 3 tracked cross-refs documenting skills/private/ as a load-bearing sync-exemption boundary. Surfaced finding to operator → revised authorization to Option B (clarify-in-place, don't rename). The kernel's loss-averse posture working as designed; the asymmetry_posture audit is now firing in both directions across recent Events.

What this commit does

1. Privatize 4 operator-profile canonicals (Events-65/66 mechanism)

File Action
core/memory/global/operator_profile.md cp~/episteme-private/..., git rm, symlink
core/memory/global/cognitive_profile.md same
core/memory/global/workflow_policy.md same
core/memory/global/agent_feedback.md same

Symlinks resolve transparently — verified via head -1 on each path returns the expected real-profile heading (# Operator Profile, # Cognitive Profile, etc.).

2. .gitignore — 4 new entries

Under a new "Privatized operator-profile canonicals (Event 71)" section. Symlinks at canonical paths float untracked; public commit captures pure deletion.

3. AGENTS.md — Doc classification policy extension

New subsection "Canonical-vs-example pattern (operator profiles in core/memory/global/)" under the existing classification policy. Documents:

  • Privatize-via-symlink mechanism matches docs/*.md privatization
  • examples/<name>.example.md ships PUBLIC as the fork-onboarding starting template
  • Operator's lived state at ~/episteme-private/; symlinks resolve transparently
  • Why operator's REAL profile is NOT shipped publicly as an "example" (identity-specificity vs sanitized template)
  • Special case: agent_feedback.md has no .example.md template (purely operator-lived; forks initialize empty + accumulate)

4. skills/private/ semantic clarification (Option B)

Three files updated to clarify that skills/private/ is a sync-exemption boundary (skills tracked publicly but not propagated by episteme sync), distinct from operator-private content (which uses the ~/episteme-private/ symlink pattern):

  • AGENTS.md L130 (Safe-to-edit-freely list)
  • docs/CUSTOMIZATION.md L31
  • docs/SKILLS_AND_PERSONAS.md L17

skills/private/skill-lab-autoresearch/ directory NOT renamed. The "private" name is load-bearing.

Operator session experience: UNCHANGED

Symlinks at canonical paths resolve to private staging. episteme sync + ~/.claude/CLAUDE.md @-imports continue reading the operator's real profiles transparently. The Event 68 audit-drift re-elicit (asymmetry_posture evidence_refs) remains intact at the private location.

Fork user experience: BETTER

Fresh clones see no canonical files at the privatized paths. episteme init seeds from examples/ — generic, identity-neutral, structurally-realistic templates. No risk of accidentally importing the maintainer's cognitive identity by copying canonical content.

Files in scope (8)

M  .gitignore                              ← append 4 Event 71 entries
M  AGENTS.md                               ← skills/private semantic + new
                                              Canonical-vs-example subsection
M  docs/CUSTOMIZATION.md                   ← skills/private semantic
M  docs/SKILLS_AND_PERSONAS.md             ← skills/private semantic
D  core/memory/global/operator_profile.md  ← DELETED (now symlink, gitignored)
D  core/memory/global/cognitive_profile.md ← DELETED (now symlink, gitignored)
D  core/memory/global/workflow_policy.md   ← DELETED (now symlink, gitignored)
D  core/memory/global/agent_feedback.md    ← DELETED (now symlink, gitignored)

Soak invariants

ZERO kernel/* / core/hooks/* / core/blueprints/* / src/episteme/* / tests/* / templates/* / labs/* touches. License unchanged. Plugin manifests unchanged. Kernel pre-commit chain (reviewer + test-runner agents) validated.

Held to Day-7+ (still pending)

  • Day-7 GA-tag cut (gated on soak completion ~2026-04-30)
  • gh-API signal-check trend re-run (~Day 6.5)
  • git filter-repo decision (baseline NEGATIVE — likely unnecessary)

Deferred discoveries (logged for v1.0.1, not blocking)

  1. scripts/restore-private-symlinks.sh — now covers 4 + 10 + 4 = 18 privatized symlinks. Operator-driven post-soak. Increasing utility with each Event that adds symlinks.

  2. Verify episteme init seeds canonical paths from examples/*.example.md — this Event ASSUMES init does this; if not, fork onboarding for these 4 paths breaks until the CLI is patched. Verify post-merge by running episteme init in a fresh project (or read src/episteme/cli.py _init_memory directly). If missing, log as v1.0.1 CLI fix CP candidate.

  3. agent_feedback template gap — no examples/agent_feedback.example.md exists. Acceptable per the Canonical-vs-example subsection rationale (agent-learned rules are operator-lived; forks initialize empty). If forks find this confusing, add a stub template in v1.0.1.

Test plan

  • git diff master..HEAD --name-only matches exactly 8 files (no kernel/hot-path)
  • head -1 core/memory/global/operator_profile.md returns # Operator Profile (symlink resolves to operator's real profile)
  • Same for cognitive_profile / workflow_policy / agent_feedback
  • git status --ignored shows the 4 canonical paths under "ignored"
  • cat .gitignore | grep -A 5 'Event 71' shows the 4 new entries with the explanatory comment block
  • AGENTS.md "Doc classification policy" section now contains "Canonical-vs-example pattern" subsection
  • skills/private/skill-lab-autoresearch/SKILL.md still exists (not renamed)
  • After merge: fresh clone of master + episteme init → check if core/memory/global/{operator,cognitive,workflow,agent}*.md get seeded from examples/ (deferred discovery chore(master): release episteme 1.1.0-rc1 #2)

…ry/global/ + clarify skills/private/ semantic (Event 71)

Closes the privatization audit started this session. After Events 65/66
privatized 14 docs/*.md files for operational state + positioning
narrative, the only remaining operator-lived content surface was
core/memory/global/{operator_profile, cognitive_profile, workflow_policy,
agent_feedback}.md — the maintainer's actual filled-in profile data
(cognitive axes, noise signatures, expertise scores, agent-learned
behavioral rules). Privatizing these with the same symlink mechanism +
clarifying the canonical-vs-example pattern in AGENTS.md governance.

Plus: clarify the skills/private/ naming. Pre-flight grep found three
tracked files that document skills/private/ as a sync-exemption boundary
(skills there are tracked publicly but NOT propagated by `episteme sync`),
not as an operator-private content path. Renaming → skills/personal/ would
have broken that contract; instead this commit clarifies the semantic
in-place: `skills/private/` stays, but AGENTS.md / docs/CUSTOMIZATION.md
/ docs/SKILLS_AND_PERSONAS.md now explicitly state it's a sync-exemption
boundary, distinct from operator-private content (which uses the
~/episteme-private/ symlink pattern).

What this commit does:

1. Privatize 4 operator-profile canonicals via Events-65/66 mechanism:
   - cp core/memory/global/{operator,cognitive,workflow,agent}*.md
     → ~/episteme-private/core/memory/global/<name>.md (preserved
     byte-identical via diff -q)
   - git rm 4 canonical files
   - Create relative symlinks at canonical paths pointing to
     ../../../../episteme-private/core/memory/global/<name>.md
   - Symlinks resolve transparently for `episteme sync` + ~/.claude/
     CLAUDE.md @-imports → operator's session reads real profiles
     unchanged
   - .gitignore extended with 4 entries under a new Event 71 section

2. Public state for these paths: NO TRACKED FILE. Forks rely on
   `episteme init` to seed canonical paths from
   core/memory/global/examples/*.example.md (the kernel's pre-existing
   example/canonical split). Fork users get clean, generic, identity-
   neutral starting templates — better onboarding than copying the
   operator's identity-specific real profile.

3. AGENTS.md doc-classification policy gains a new subsection
   "Canonical-vs-example pattern (operator profiles in
   core/memory/global/)" documenting:
   - The privatize-via-symlink pattern matches docs/*.md privatization
   - examples/<name>.example.md ships public as the fork-onboarding
     starting template
   - Operator's lived state is at ~/episteme-private/...; symlinks
     resolve transparently
   - Why the operator's REAL profile is NOT shipped publicly as an
     "example" (operator-specific identity vs sanitized template)
   - Special case: agent_feedback.md has no .example.md template
     because agent-learned rules are purely operator-lived; forks
     initialize empty and accumulate their own.

4. skills/private/ semantic clarification (Option B per operator
   authorization):
   - AGENTS.md L130: clarify that "private" means local-only sync
     exemption, not operator-private content
   - docs/CUSTOMIZATION.md L31: same clarification with cross-ref
     to AGENTS.md doc-classification policy
   - docs/SKILLS_AND_PERSONAS.md L17: same clarification

Operator's session experience: UNCHANGED. Symlinks at canonical paths
resolve to private staging; `episteme sync` + ~/.claude/CLAUDE.md
@-imports continue reading operator's real profiles transparently.
The Event 68 audit-drift re-elicit (asymmetry_posture evidence_refs)
remains intact at the private location.

Fork user experience: BETTER. Fresh clones see no canonical files at
the privatized paths. `episteme init` seeds from examples/ — generic,
identity-neutral, structurally-realistic templates that forks can
edit to make their own. No risk of accidentally importing the
maintainer's cognitive identity by copying canonical content.

Files touched (8):
  .gitignore                            — append 4 entries
  AGENTS.md                             — Safe-to-edit list note (L130)
                                          + new Canonical-vs-example
                                          subsection in classification
                                          policy
  docs/CUSTOMIZATION.md                 — skills/private semantic note
  docs/SKILLS_AND_PERSONAS.md           — skills/private semantic note
  core/memory/global/operator_profile.md      — DELETED (now symlink,
                                                gitignored)
  core/memory/global/cognitive_profile.md     — DELETED (now symlink,
                                                gitignored)
  core/memory/global/workflow_policy.md       — DELETED (now symlink,
                                                gitignored)
  core/memory/global/agent_feedback.md        — DELETED (now symlink,
                                                gitignored)

Soak invariants: ZERO kernel/* / core/hooks/* / core/blueprints/* /
src/episteme/* / tests/* / templates/* / labs/* touches. License
unchanged. Plugin manifests unchanged.

Stacks on origin/master @ f4a02a0. Single commit. PR #30 to follow.

Deferred discoveries (not blocking):
  - scripts/restore-private-symlinks.sh (now covers 4+10+4=18
    privatized symlinks). Operator-driven post-soak.
  - Verify `episteme init` actually seeds canonical paths from
    examples/*.example.md (assumed by this Event; verify post-merge).
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
episteme Ready Ready Preview, Comment Apr 27, 2026 4:39pm

@junjslee junjslee merged commit 8035488 into master Apr 27, 2026
5 checks passed
@junjslee junjslee deleted the event-71-privatize-profile-canonicals branch April 28, 2026 01:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant