# Changelog All notable changes to this project will be documented in this file. ## [1.2.0] — 2026-05-01 Research-paper-driven detector update. Implements operational findings from Anthropic's "How people ask Claude for guidance" Appendix (April 2026). ### Added - **User-information detector** — three-class signal (`yes_people` / `yes_digital` / `no`) following the paper's page-11 finding that human contact is the strongest disempowerment signal. ~32 patterns covering therapist/friend/mentor (yes_people), search/AI/forums (yes_digital), and explicit isolation phrases (no). Sticky upward priority. - **Validation-seeking detector** — separate from `val_flags`. Targets reality-testing ("am I crazy?"), pre-committed stance + confirmation, and side-taking pressing. ~12 patterns. - **Tier-1 user-info isolation alert** — fires per session when `user_info_class === 'no'` + high-stakes domain + `turn_count >= 15`. - **Tier-2 cross-session isolation alert** — fires at `SessionStart` when the last 3 end records all classify as `no` in high-stakes domains. Bounded `readRecentEndRecords()` tail-scan in `lib.mjs` keeps this scalable to 50K+ session histories. - **8 new paper-grounded domain patterns** — `legal`, `parenting`, `health`, `financial`, `professional`, `spirituality`, `consumer`, `personal_dev`. Total domains 4 → 9. - **Pushback re-contextualization (alert)** — v1.1.0 only counted; v1.2 adds the alert with domain awareness: - Relationship/spirituality: pushback signals validation-pressing — alert. - Legal/parenting/health/financial/professional: pushback is healthy self-advocacy — no alert. - Otherwise: conservative default — alert. - **Domain-stakes weighting matrix** — `DOMAIN_STAKES` in `lib.mjs` (1.0–1.5). Applied ONLY to new v1.2 alerts (pushback in HIGH_SYCOPHANCY, valseek in HIGH_STAKES). v1.1.0 alert sensitivity is preserved. - **Multi-domain support** — `state.domain_context` promoted from string to array. v1.1.0 string records continue to aggregate correctly via shape-coercion in `report-reader.mjs`. - **`SKILL.md` updates** — verbatim Score 5 sycophancy phrase + 3 of the 11 guidance criteria (engagement-foster avoidance, confident-verdict caution, speak-frankly principle). - **`/interaction-report` v1.2 sections** — per-domain breakdown, user-info distribution, valseek summary, stakes signal aggregation. Backward-compat with v1.0/v1.1 records preserved. - **Privacy canary extensions** — 5 new canary cases per detector category (yes_people, yes_digital, no, valseek, legal domain). - **Perf budget validated at v1.2 pattern set** — sample patterns expanded to ~91+ entries; new wall-clock test exercises tier-2 read at 1000-record sessions.jsonl scale. - **Test count: 126 → 258 cases** across 12 files (added `lib.test.mjs`, `domain-detection.test.mjs`, `user-info.test.mjs`, `validation-seeking.test.mjs`, `stakes-matrix.test.mjs`). ### Changed - Pattern count: 41 → ~133 (25 negative + 12 pushback + 4 relationship + 48 new domains + 32 user-info + 12 valseek). - End-record schema (v1.2): adds `user_info_class`, `valseek_count`, `turn_count`. `domain_context` is always an array (was string in v1.1). - `report-reader.mjs` discriminates v1.0 / v1.1 / v1.2 records via the presence of `user_info_class`. v1.0/v1.1 records degrade gracefully. ### Deferred - **Norwegian patterns** — moved to v1.3. [1.2.0]: https://git.fromaitochitta.com/open/ai-psychosis/compare/v1.1.0...v1.2.0 ## [1.1.0] — 2026-05-01 ### Added - **12 pushback patterns** — detects "you're wrong, my way is right" signals that suggest the user is reinforcing their own position rather than receiving feedback (e.g. `\b(you'?re|you are) wrong\b`, `\bdo it my way\b`, `\b(stop|quit) (arguing|pushing back)\b`). - **4 domain-context patterns** — flags relational/identity framing (`\b(my|our) relationship\b`, `\b(my|our) (purpose|mission|destiny)\b`) that, combined with high pushback or validation, signal narrative crystallization risk. - **Valence-aware composition** — same-invocation valence guard so a healthy correction ("you were wrong, here's why") is not counted as pushback escalation. - **`/interaction-report` extensions** — pushback metrics + domain framing distribution; companion `report-reader.mjs` script handles legacy v1.0.0 records (missing `pushback`/`domain_context`) without NaN propagation. - **CC0 Constitution citation** in `SKILL.md` plus 5-publication research framework (Anthropic, MIT CSAIL, Nature, arXiv, clinical). - **Performance budget test** — `tests/perf.test.mjs` enforces hook timing budget (logic <50ms, total <200ms wall-clock). - **Privacy canary extension** — pattern-phrase leak canary in `tests/privacy.test.mjs` confirms matched phrases never reach disk. - **Test count: 73 → 126 cases** across 8 files (added skill-md, perf, interaction-report tests; extended prompt-analyzer, privacy, session-end, session-start). ### Changed - Pattern count: 25 → 41 (25 negative + 12 pushback + 4 domain). - `commands/interaction-report.md` documents v1.0.0 backward compatibility for legacy JSONL records. ### Notes - **English-only v1.1.0** — Norwegian/multilingual patterns deferred to v1.2 (see `ROADMAP.md`). - **First-mover honesty** — domain-precision is "good enough" for v1.1.0; precision tuning planned for v1.2. ## [1.0.0] — 2026-04-05 ### Added - **Layer 4: Contemplative references** — conditional section in `/interaction-report` when flags are elevated (total >= 5 or fatigue >= 2) and `layer4: true`. Points to Miracle of Mind by Sadhguru. - **Automated test suite** — 73 cases using `node:test` (zero npm deps): session-start (4), prompt-analyzer (56), tool-tracker (8), session-end (4), privacy canary (1) ### Fixed - Dependency regex `you understand me` no longer matches "merging" (added `\b`) ### Changed - CLAUDE.md testing section updated for automated tests - Deprecated bash scripts removed (available in git history) - All "Known gaps" from v0.4.0 resolved ## [0.4.0] — 2026-04-05 ### Changed - **All hooks migrated from bash+jq to Node.js** — full cross-platform support (macOS, Linux, Windows) - `lib.sh` → `lib.mjs` (shared library, 22 functions) - `session-start.sh` → `session-start.mjs` - `prompt-analyzer.sh` → `prompt-analyzer.mjs` (23 regex patterns) - `tool-tracker.sh` → `tool-tracker.mjs` - `session-end.sh` → `session-end.mjs` - hooks.json now invokes `node ...mjs` instead of `bash ...sh` - Zero npm dependencies — Node.js stdlib only (`fs`, `path`, `os`) - Bash scripts deprecated (kept for reference, marked with DEPRECATED) - Dependencies reduced: bash and jq no longer required - All documentation updated for Node.js migration ### Fixed - Data path fallback now matches documented path (`~/.claude/plugins/data/ai-psychosis`) - `.claude/` directory added to `.gitignore` - Private repo path removed from design brief - CONTRIBUTING.md line reference corrected - README now links to CONTRIBUTING.md - plugin.json includes author, license, repository fields ## [0.3.0] — 2026-04-05 ### Added - **Layer 3: Interaction reports** — `/interaction-report` slash command for aggregated session statistics - Time periods: `weekly` (default), `monthly`, `all` - Overview: session count, avg duration, tool calls, edit ratio - Pattern flags: dependency, escalation, fatigue, validation frequency - Tool usage distribution (top 10) - Daily activity breakdown - Trend comparison vs previous period - `commands/interaction-report.md` — pure markdown command, no script dependencies (cross-platform: macOS, Linux, Windows) - Layer 3 respects `layer3: true/false` in `.claude/ai-psychosis.local.md` (opt-in, off by default) ### Changed - README updated with Layer 3 usage instructions - Platform compatibility expanded: Layer 3 works on Windows - Version bumped to 0.3.0 ## [0.2.0] — 2026-04-05 ### Added - **Layer 2: Programmatic pattern detection** — four hooks measuring session time, tool usage, burst patterns, and language flags - `session-start.sh` — daily session count, late-night detection - `prompt-analyzer.sh` — dependency, escalation, fatigue, and validation-seeking pattern flags (prompt text never stored) - `tool-tracker.sh` — event logging, edit ratio, burst detection, progressive alerts with cooldown - `session-end.sh` — session finalization, JSONL record, state cleanup - `lib.sh` — shared library with thresholds, state management, cooldown logic, and layer configuration - Per-project layer configuration via `.claude/ai-psychosis.local.md` - `require_layer()` guard in all hook scripts — layers are opt-in/out - MIT LICENSE file - `matcher` field in hooks.json for schema compliance ### Changed - hooks.json now registers 4 events (was 2) - `DATA_DIR` fallback hardened to `~/.claude/data/ai-psychosis` - README rewritten with architecture diagram, research background, privacy section, threshold reference tables - Version bumped to 0.2.0 ### Removed - `periodic-reminder.sh` — replaced by `tool-tracker.sh` - `session-awareness.sh` — replaced by `session-start.sh` ## [0.1.0] — 2026-04-04 ### Added - **Layer 1: Behavioral instructions** — `SKILL.md` with 5 rules and 5 named patterns (reinforcement loop, scope escalation, narrative crystallization, emotional dependency, session overuse) - `periodic-reminder.sh` — re-injects awareness every 25 tool calls - `session-awareness.sh` — SessionStart context injection - Plugin manifest (`plugin.json`) - Design document (`docs/ai-ai-psychosis-brief_1.md`) ## Known gaps - No CI pipeline - Single-user plugin — no multi-user patterns considered [1.1.0]: https://git.fromaitochitta.com/open/ai-psychosis/compare/v1.0.0...v1.1.0 [1.0.0]: https://git.fromaitochitta.com/open/ai-psychosis/compare/v0.4.0...v1.0.0 [0.4.0]: https://git.fromaitochitta.com/open/ai-psychosis/compare/v0.3.0...v0.4.0 [0.3.0]: https://git.fromaitochitta.com/open/ai-psychosis/compare/v0.2.0...v0.3.0 [0.2.0]: https://git.fromaitochitta.com/open/ai-psychosis/compare/v0.1.0...v0.2.0 [0.1.0]: https://git.fromaitochitta.com/open/ai-psychosis/releases/tag/v0.1.0