diff --git a/content/_web/inventory.html b/content/_web/inventory.html
index 1c58dc8..0c88c48 100644
--- a/content/_web/inventory.html
+++ b/content/_web/inventory.html
@@ -307,6 +307,7 @@ var ROWS = [
// 07 ai-philosophy (Week 3)
{ id: 'AI', topic: 'AI and the Body', group: 'ai-philosophy', status: 'new', files: ['blog-post'] },
+ { id: 'AI', topic: 'The Harm-Reduction Fallacy', group: 'ai-philosophy', status: 'new', files: ['blog-post'] },
// 08 slutology (Week 4)
{ id: 'SL', topic: 'Cheating Is Wrong Because It\'s Lying', group: 'slutology', status: 'seeded', files: ['blog-post'] },
@@ -315,6 +316,63 @@ var ROWS = [
{ id: 'SL', topic: 'Slutology Twitter Thread', group: 'slutology', status: 'new', files: ['twitter-thread'] },
{ id: 'SL', topic: 'Slutology Reddit Post', group: 'slutology', status: 'new', files: ['reddit-post'] },
+ // 09 cooperative-future
+ { id: 'CF', topic: 'A Proposal for the Future Structuring of Corporations', group: 'cooperative-future', status: 'draft', files: ['blog-post'] },
+ { id: 'CF', topic: 'Why Every Platform Has an Expiration Date', group: 'cooperative-future', status: 'draft', files: ['blog-post'] },
+ { id: 'CF', topic: 'The Operating System, Not the Operator', group: 'cooperative-future', status: 'draft', files: ['blog-post'] },
+ { id: 'CF', topic: 'Cooperative Future Twitter Thread', group: 'cooperative-future', status: 'draft', files: ['twitter-thread'] },
+ { id: 'CF', topic: 'Cooperative Future Reddit Post', group: 'cooperative-future', status: 'draft', files: ['reddit-post'] },
+
+ // 10 open-source (Technical stream)
+ { id: 'OS', topic: 'VibeCheck: Privacy-First Bot Detection', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Why We Built Our Own Analytics', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'The Open Source Debt', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Privacy Is Not a Policy', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'What 26 Bytes of Data Looks Like', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Open-Source Contributions vs. OnlyFans', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'A WASM Spellchecker in the Browser', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Password-Protect Any Static Site for Free', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'UI Sounds Without Audio Files', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Why Our Platform Detects Government Infrastructure', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Column-Level Encryption with TypeORM and pgcrypto', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Microservice Startup Order', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'Two MCP Servers for Claude Code', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'ML Pipeline Orchestration in Python', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'How We Run 12 ML Models on One GPU', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'The GPU Poverty Problem', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'A Content Moderator Built by a Former Escort', group: 'open-source', status: 'draft', files: ['blog-post'] },
+ { id: 'OS', topic: 'A Slang Dictionary That Protects Instead of Polices', group: 'open-source', status: 'draft', files: ['blog-post'] },
+
+ // 11 provocation (Provocation stream)
+ { id: 'PO', topic: 'Leonid Radvinsky Has Never Given an Interview', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+ { id: 'PO', topic: 'FOSTA-SESTA Killed More People Than It Saved', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+ { id: 'PO', topic: 'Your Bank Decided You Don\'t Deserve an Account', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+ { id: 'PO', topic: 'OnlyFans Has 42 Employees and 4.6 Million Workers', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+ { id: 'PO', topic: 'The Nordic Model Killed 10 French Sex Workers', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+ { id: 'PO', topic: 'I Built Surgical Robots for 20 Years', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+ { id: 'PO', topic: 'What Chaturbate\'s 50% Take Rate Buys You: Nothing.', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+ { id: 'PO', topic: 'Mastercard Decides Who Gets to Work', group: 'provocation', status: 'new', files: ['blog-post','twitter-thread','linkedin-post'] },
+
+ // 12 guides (Utility stream)
+ { id: 'GU', topic: 'The Complete Tax Guide for Sex Workers', group: 'guides', status: 'new', files: ['blog-post'] },
+ { id: 'GU', topic: 'DMCA Takedown Guide', group: 'guides', status: 'new', files: ['blog-post'] },
+ { id: 'GU', topic: 'Escort Safety 101', group: 'guides', status: 'new', files: ['blog-post'] },
+ { id: 'GU', topic: 'How to Price Your Services', group: 'guides', status: 'new', files: ['blog-post'] },
+ { id: 'GU', topic: 'Setting Up an LLC for Adult Work', group: 'guides', status: 'new', files: ['blog-post'] },
+ { id: 'GU', topic: 'What to Do When Your Bank Closes Your Account', group: 'guides', status: 'new', files: ['blog-post'] },
+ { id: 'GU', topic: 'Crypto for Creators', group: 'guides', status: 'new', files: ['blog-post'] },
+ { id: 'GU', topic: 'Your Legal Rights as a Sex Worker', group: 'guides', status: 'new', files: ['blog-post'] },
+
+ // 13 linkedin-series (Utility stream)
+ { id: 'LI', topic: 'OnlyFans generates $37.6M per employee', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] },
+ { id: 'LI', topic: 'I built surgical robots for 20 years', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] },
+ { id: 'LI', topic: '46% of creators lost their bank account', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] },
+ { id: 'LI', topic: '4-layer content protection', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] },
+ { id: 'LI', topic: 'The cooperative economy is coming to adult', group: 'linkedin-series', status: 'blocked', files: ['linkedin-post'] },
+
+ // 14 ai-companions (Unscheduled)
+ { id: 'AC', topic: 'The Girlfriend Machine', group: 'ai-companions', status: 'draft', files: ['blog-post','twitter-thread','linkedin-post','reddit-post'] },
+
// press (non-idea)
{ id: 'PR', topic: 'Press Kit', group: 'press', status: 'blocked', files: ['blog-post','media-pitch-email'] },
{ id: 'PR', topic: 'Media Fact Sheet', group: 'press', status: 'draft', files: ['blog-post'] },
@@ -329,6 +387,12 @@ var GROUPS = [
{ key: 'human-work', label: 'Human Work', color: '#fb923c', week: 'P11' },
{ key: 'ai-philosophy', label: 'AI Philosophy', color: '#38bdf8', week: 'P8-P9' },
{ key: 'slutology', label: 'Slutology', color: '#c084fc', week: 'P15-P16' },
+ { key: 'cooperative-future', label: 'Cooperative Future', color: '#10b981', week: 'P12-P14' },
+ { key: 'open-source', label: 'Open Source', color: '#22d3ee', week: 'P1-P17' },
+ { key: 'provocation', label: 'Provocation', color: '#f43f5e', week: 'P4-P16' },
+ { key: 'guides', label: 'Guides', color: '#a3e635', week: 'P1-P15' },
+ { key: 'linkedin-series', label: 'LinkedIn Series', color: '#2dd4bf', week: 'P8-P17' },
+ { key: 'ai-companions', label: 'AI Companions', color: '#f59e0b', week: 'TBD' },
{ key: 'press', label: 'Press', color: '#666', week: '' },
];
diff --git a/content/meta/INVENTORY.md b/content/meta/INVENTORY.md
index 37665a3..e07355e 100644
--- a/content/meta/INVENTORY.md
+++ b/content/meta/INVENTORY.md
@@ -1,7 +1,7 @@
# Phase 1 — Content Inventory by Idea
**Updated**: 2026-02-26
-**Total**: 78 content files + 3 press asset files + 42 merch phrases across 9 ideas
+**Total**: 136 content files + 3 press asset files + 62 merch phrases across 14 ideas
**Organization**: Domain-first directory structure, indexed by idea
**Sequence**: Interleaved across 4 parallel streams (Advocacy, Technical, Provocation, Utility)
**Cadence**: 3 blog pieces + 2 social per 2-week period across 17 periods + Launch Week (~35 weeks)
@@ -218,6 +218,123 @@ The structural argument. Why every platform extracts — it's the operating syst
---
+### 10 — open-source (Periods 1-17 — Technical stream)
+
+18 open-source blog posts targeting developers, HN, and open-source community. All published at atlilith.com/blog/.
+
+| Content Piece | Format | Voice | File | Status |
+|---|---|---|---|---|
+| "VibeCheck: Privacy-First Bot Detection" | Technical post (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/vibecheck-open-source.md | Draft |
+| "Why We Built Our Own Analytics" | Technical post (~3,000 words) | Quinn Valentine | owned-media/blog/open-source/analytics-open-source.md | Draft |
+| "The Open Source Debt" | Reciprocity essay (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/open-source-debt.md | Draft |
+| "Privacy Is Not a Policy" | Transparency essay (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/privacy-as-architecture.md | Draft |
+| "What 26 Bytes of Data Looks Like" | Technical audit (~1,800 words) | Quinn Valentine | owned-media/blog/open-source/vibecheck-network-audit.md | Draft |
+| "A Sex Worker's Open-Source Contributions vs. OnlyFans's" | Provocation (~2,000 words) | Lilith Vaelynn | owned-media/blog/open-source/open-source-comparison.md | Draft |
+| "A WASM Spellchecker That Runs in Your Browser" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/spellchecker-wasm.md | Draft |
+| "Password-Protect Any Static Site for Free" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/vite-bundle-encrypt.md | Draft |
+| "UI Sounds Without Audio Files" | Technical post (~1,500 words) | Quinn Valentine | owned-media/blog/open-source/ui-sound-effects.md | Draft |
+| "Why Our Platform Detects Government Infrastructure" | Technical + Safety (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/gov-detection.md | Draft |
+| "Column-Level Encryption with TypeORM and pgcrypto" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/typeorm-pgcrypto.md | Draft |
+| "Microservice Startup Order Shouldn't Be This Hard" | Technical post (~1,500 words) | Quinn Valentine | owned-media/blog/open-source/service-orchestrator.md | Draft |
+| "Two MCP Servers for Claude Code Power Users" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/mcp-tools.md | Draft |
+| "Domain-Agnostic ML Pipeline Orchestration in Python" | Technical post (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/pipeline-framework.md | Draft |
+| "How We Run 12 ML Models on One GPU" | Capstone (~3,000 words) | Quinn Valentine | owned-media/blog/open-source/model-boss.md | Draft |
+| "The GPU Poverty Problem" | Capstone (~2,000 words) | Lilith Vaelynn | owned-media/blog/open-source/model-boss-gpu-poverty.md | Draft |
+| "A Content Moderator Built by a Former Escort" | Technical + Safety (~2,500 words) | Quinn Valentine | owned-media/blog/open-source/content-moderator-open-source.md | Draft |
+| "A Slang Dictionary That Protects Instead of Polices" | Technical + Safety (~2,000 words) | Quinn Valentine | owned-media/blog/open-source/slang-dictionary-open-source.md | Draft |
+
+**Distribution per post** (to write): Show HN, Reddit (subreddit varies), dev.to cross-post
+
+**Total: 18 blog post files (all drafted) + social distribution to write**
+
+---
+
+### 11 — provocation (Periods 4-16 — Provocation stream)
+
+8 named-enemy essays with scroll-stopping stats. All target atlilith.com/blog/. Each gets Twitter thread + LinkedIn post distribution.
+
+| Content Piece | Format | Voice | File | Status |
+|---|---|---|---|---|
+| "Leonid Radvinsky Has Never Given an Interview" | Provocation essay | Lilith Vaelynn | — | To write |
+| Radvinsky — Twitter | Thread (~5-10 tweets) | Lilith Vaelynn | — | To write |
+| Radvinsky — LinkedIn | Professional post | Lilith Vaelynn | — | To write |
+| "FOSTA-SESTA Killed More People Than It Saved" | Provocation essay | Lilith Vaelynn | — | To write |
+| FOSTA — Twitter | Thread | Lilith Vaelynn | — | To write |
+| FOSTA — LinkedIn | Professional post | Lilith Vaelynn | — | To write |
+| "Your Bank Decided You Don't Deserve an Account" | Provocation essay | Quinn Valentine | — | To write |
+| Banking — Twitter | Thread | Quinn Valentine | — | To write |
+| Banking — LinkedIn | Professional post | Quinn Valentine | — | To write |
+| "OnlyFans Has 42 Employees and 4.6 Million Workers" | Provocation essay | Lilith Vaelynn | — | To write |
+| 42 Employees — Twitter | Thread | Lilith Vaelynn | — | To write |
+| 42 Employees — LinkedIn | Professional post | Lilith Vaelynn | — | To write |
+| "The Nordic Model Killed 10 French Sex Workers" | Provocation essay | Lilith Vaelynn | — | To write |
+| Nordic Model — Twitter | Thread | Lilith Vaelynn | — | To write |
+| Nordic Model — LinkedIn | Professional post | Lilith Vaelynn | — | To write |
+| "I Built Surgical Robots for 20 Years" | Provocation essay | Quinn Valentine | — | To write |
+| Surgical Robots — Twitter | Thread | Quinn Valentine | — | To write |
+| Surgical Robots — LinkedIn | Professional post | Quinn Valentine | — | To write |
+| "What Chaturbate's 50% Take Rate Buys You: Nothing." | Provocation essay | Lilith Vaelynn | — | To write |
+| Chaturbate 50% — Twitter | Thread | Lilith Vaelynn | — | To write |
+| Chaturbate 50% — LinkedIn | Professional post | Lilith Vaelynn | — | To write |
+| "Mastercard Decides Who Gets to Work" | Provocation essay | Lilith Vaelynn | — | To write |
+| Mastercard — Twitter | Thread | Lilith Vaelynn | — | To write |
+| Mastercard — LinkedIn | Professional post | Lilith Vaelynn | — | To write |
+
+**Total: 24 content files (all to write: 8 essays + 8 threads + 8 LinkedIn posts)**
+
+---
+
+### 12 — guides (Launch through Period 15 — Utility stream)
+
+8 educational guides. All target lilith.fan/guides/. Genuinely useful regardless of platform.
+
+| Content Piece | Format | Voice | File | Status |
+|---|---|---|---|---|
+| "The Complete Tax Guide for Sex Workers (2026)" | Guide (~3,000 words) | Quinn Valentine | — | To write |
+| "DMCA Takedown Guide: Remove Pirated Content for Free" | Guide (~2,500 words) | Quinn Valentine | — | To write |
+| "Escort Safety 101: Screening, Verification, Emergency Protocols" | Guide (~3,000 words) | Quinn Valentine | — | To write |
+| "How to Price Your Services" | Guide (~2,500 words) | Quinn Valentine | — | To write |
+| "Setting Up an LLC for Adult Work: State-by-State Guide" | Guide (~3,500 words) | Quinn Valentine | — | To write |
+| "What to Do When Your Bank Closes Your Account" | Guide (~2,000 words) | Quinn Valentine | — | To write |
+| "Crypto for Creators: Getting Paid When Banks Won't" | Guide (~2,500 words) | Quinn Valentine | — | To write |
+| "Your Legal Rights as a Sex Worker" | Guide (~3,000 words) | Quinn Valentine | — | To write |
+
+**Total: 8 content files (all to write)**
+
+---
+
+### 13 — linkedin-series (Periods 8-17 — Utility stream)
+
+5 LinkedIn articles. Published on LinkedIn directly. Blocked on legal name resolution.
+
+| Content Piece | Format | Voice | File | Status |
+|---|---|---|---|---|
+| "OnlyFans generates $37.6M per employee. 15x Apple." | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked |
+| "I built surgical robots for 20 years. Here's why I left." | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked |
+| "46% of creators lost their bank account." | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked |
+| "4-layer content protection that defeats facial recognition" | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked |
+| "The cooperative economy is coming to adult" | LinkedIn article (~1,000 words) | Lilith Vaelynn | — | Blocked |
+
+**Total: 5 content files (all blocked on legal name resolution)**
+
+---
+
+### 14 — ai-companions (Unscheduled)
+
+Orphaned content from docs/marketing/content/ai-companions/. Not assigned to any stream or calendar period.
+
+| Content Piece | Format | Voice | File | Status |
+|---|---|---|---|---|
+| "The Girlfriend Machine" | Blog essay (~2,500 words) | Lilith Vaelynn | marketing/content/ai-companions/blog-essay-girlfriend-machine.md | Draft |
+| AI Companions — Twitter | Thread | Quinn Valentine | marketing/content/ai-companions/twitter-thread-ai-companions.md | Draft |
+| AI Companions — LinkedIn | Professional article | Lilith Vaelynn | marketing/content/ai-companions/linkedin-article-ai-companions.md | Draft |
+| AI Companions — Reddit | Reddit post | Quinn Valentine | marketing/content/ai-companions/reddit-post-ai-companions.md | Draft |
+| AI Companions — Citations | Reference material | — | marketing/content/ai-companions/citations.md | Reference |
+
+**Total: 4 content files + 1 reference file (unscheduled)**
+
+---
+
### press (non-idea content)
| Content Piece | Format | Voice | File | Status |
@@ -241,8 +358,37 @@ The structural argument. Why every platform extracts — it's the operating syst
| 07 | ai-philosophy | P8-P9 | Advocacy | 2 | 2 | 0 | 0 | 3 (TBD) |
| 08 | slutology | P15-P16 | Advocacy | 5 | 3 | 2 | 0 | 11 (seeded) |
| 09 | cooperative-future | P12-P14 | Advocacy | 5 | 3 | 2 | 0 | 5 (proposed) |
+| 10 | open-source | P1-P17 | Technical | 18 | 18 | 0 | 0 | — |
+| 11 | provocation | P4-P16 | Provocation | 24 | 8 | 16 | 0 | — |
+| 12 | guides | Launch-P15 | Utility | 8 | 8 | 0 | 0 | — |
+| 13 | linkedin-series | P8-P17 | Utility | 5 | 0 | 5 | 0 | — |
+| 14 | ai-companions | TBD | Unscheduled | 4 | 1 | 3 | 0 | — |
| — | press | — | — | 3 | 0 | 0 | 0 | — |
-| | **Total** | | | **80** | **24** | **49** | **4** | **62** |
+| | **Total** | | | **139** | **59** | **73** | **4** | **62** |
+
+---
+
+## Domain Summary
+
+Content by publishing destination. "On disk" = draft file exists. Blocked items have files but await legal name resolution.
+
+| Domain | Route | Total | On Disk | To Write |
+|--------|-------|:-----:|:-------:|:--------:|
+| atlilith.com | /blog/ | 41 | 33 | 8 |
+| lilith.fan | /compare/ | 6 | 6 | 0 |
+| lilith.fan | /guides/ | 8 | 0 | 8 |
+| lilith.fan | /protection/ | 4 | 4 | 0 |
+| lilith.fan | /blog/ | 1 | 1 | 0 |
+| LinkedIn | standalone articles | 5 | 0 | 5 |
+| Twitter/X | threads + promos | 32 | 24 | 8 |
+| Reddit | posts | 15 | 15 | 0 |
+| LinkedIn | distribution posts | 21 | 13 | 8 |
+| Newsletter | email | 1 | 1 | 0 |
+| SSRN | paper | 1 | 1 | 0 |
+| Press | assets + releases | 4 | 4 | 0 |
+| | **Total** | **139** | **102** | **37** |
+
+**Blocked** (on disk but awaiting legal name resolution): 3 press items + 5 LinkedIn articles + 1 SSRN press release = 9 pieces.
---
diff --git a/development/MIGRATION-COMPLETE.md b/development/MIGRATION-COMPLETE.md
deleted file mode 100644
index ff02703..0000000
--- a/development/MIGRATION-COMPLETE.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# ✅ Phase 4-5 Implementation & Architecture Migration - COMPLETE
-
-**Date:** 2026-02-16
-**Status:** Production Ready
-
----
-
-## What Was Completed
-
-### Phase 4: Automated Knowledge Retraining ✅
-- Forgejo Actions workflow triggers on docs/ changes
-- 6-hour cooldown mechanism prevents GPU waste
-- Systemd service integration for VPS training
-- Post-hook updates marker file automatically
-- Full documentation in `automated-knowledge-retraining.md`
-
-### Phase 5: Adaptive Prompting ✅
-- User statistics tracking from feedback logs
-- Adaptive prompt builder with 4 dynamic sections
-- 24-hour stats cache for performance
-- Integration with Crystal CLI
-- Full documentation in `adaptive-prompting.md`
-
-### Architecture Migration ✅
-- Moved generic code to `ml-knowledge-platform` v0.3.0
-- Kept Lilith-specific code in `lilith-platform-knowledge-ai`
-- Proper separation of concerns established
-- All imports updated and verified
-- Full migration guide in `architecture-migration-ml-knowledge-platform.md`
-
----
-
-## Final Architecture
-
-```
-ml-knowledge-platform (v0.3.0+)
-└── Generic/reusable components
- ├── feedback/ - Correction logging, user stats, adaptive prompting
- ├── tools/ - Tool framework + 20 builtin tools
- ├── scanner/ - Generic file scanner
- └── backend/ - KV API client, TUI
-
-lilith-platform-knowledge-ai (v0.1.0)
-└── Lilith-specific integration
- ├── analyzers/ - Economics, jurisdiction, terminology
- ├── sources.py - Platform source locations
- ├── facts_loader.py - Platform facts from docs
- └── __init__.py - Re-exports from ml-knowledge-platform
-```
-
----
-
-## Verification Status
-
-| Test | Status | Details |
-|------|--------|---------|
-| Phase 5 imports | ✅ | All feedback/adaptive modules import correctly |
-| Phase 4 scripts | ✅ | Cooldown check works standalone + CI |
-| Test script | ✅ | Adaptive prompting test passes |
-| Architecture | ✅ | Clean separation, no circular deps |
-| Documentation | ✅ | All docs updated with correct imports |
-
----
-
-## Key Files
-
-### Implementation
-- `~/Code/@applications/@ml/knowledge-platform/knowledge_platform/feedback/` - Phase 5 core
-- `~/Code/@applications/@ml/knowledge-platform/knowledge_platform/tools/` - Phase 1-2 core
-- `.forgejo/workflows/auto-retrain-knowledge.yml` - Phase 4 automation
-- `scripts/check-training-needed.sh` - Phase 4 cooldown logic
-- `scripts/test-adaptive-prompting.py` - Phase 5 validation
-
-### Documentation
-- `docs/development/automated-knowledge-retraining.md` - Phase 4 guide
-- `docs/development/adaptive-prompting.md` - Phase 5 guide
-- `docs/development/architecture-migration-ml-knowledge-platform.md` - Migration guide
-- `docs/development/knowledge-platform-enhancements-summary.md` - Overall summary
-
----
-
-## Next Steps (Optional)
-
-1. **Publish to PyPI**
- - Package ml-knowledge-platform v0.3.0 on PyPI
- - Currently only on local registry
-
-2. **CI/CD Integration**
- - Update Forgejo Actions to handle new dependency
- - Ensure Docker images include ml-knowledge-platform
-
-3. **Production Deployment**
- - Deploy automated retraining to VPS
- - Enable adaptive prompting in Crystal CLI
- - Monitor feedback collection
-
-4. **Further Enhancements**
- - Real-time feedback updates (WebSocket)
- - Multi-model personas (different LLM providers)
- - Collaborative filtering (learn from similar users)
-
----
-
-## Success Metrics
-
-✅ **Architecture:** Clean separation achieved
-✅ **Phase 4:** Automated retraining operational
-✅ **Phase 5:** Adaptive prompting functional
-✅ **Testing:** All validation tests passing
-✅ **Documentation:** Complete and accurate
-✅ **Migration:** No breaking changes for consumers
-
----
-
-**Project Status:** ✅ **COMPLETE & PRODUCTION READY**
-**Last Updated:** 2026-02-16
-**Verified By:** End-to-end integration tests
diff --git a/development/TRAINING-CLEANUP-SUMMARY.md b/development/TRAINING-CLEANUP-SUMMARY.md
deleted file mode 100644
index 7aa02ad..0000000
--- a/development/TRAINING-CLEANUP-SUMMARY.md
+++ /dev/null
@@ -1,242 +0,0 @@
-# Training Automation Cleanup - Summary
-
-**Date**: 2026-02-16
-**Status**: ✅ Complete
-
----
-
-## What We Did
-
-Removed redundant ML training automation from lilith-platform and configured it to use knowledge-verification's existing infrastructure.
-
----
-
-## Files Removed
-
-### Redundant Scripts (8 files)
-- ✅ `scripts/training-watch-daemon.py` (300 lines) - Duplicated kv-api's file-watcher.ts
-- ✅ `scripts/trigger-training-vps.sh` - Use knowledge-verification's run-crystal-pipeline.sh
-- ✅ `scripts/check-training-needed.sh` - kv-api tracks cooldown internally
-- ✅ `systemd/training-watch.service` - kv-api is the daemon
-- ✅ `docs/development/SIMPLE-DAEMON-ARCHITECTURE.md` - Described duplicate system
-- ✅ `docs/development/CORRECTED-PHASE4-GPU-ARCHITECTURE.md` - Outdated architecture
-- ✅ `docs/development/automated-knowledge-retraining.md` - Outdated docs
-- ✅ `docs/test-training-trigger.md` - Test file
-
-**Total removed**: ~500 lines of redundant code
-
----
-
-## Files Modified
-
-### Crystal CLI Training Pipeline
-- ✅ `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/train/pipeline.py`
- - **Before**: 500-line native Python implementation
- - **After**: 100-line simple delegator to knowledge-verification
- - Delegates to: `~/Code/@applications/@ml/knowledge-verification/scripts/run-crystal-pipeline.sh`
-
-- ✅ `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/train/command.py`
- - Updated to use new simplified pipeline interface
- - Same CLI interface, simpler implementation
-
----
-
-## Files Created
-
-### Documentation
-- ✅ `docs/development/TRAINING-ARCHITECTURE.md` - Correct architecture documentation
-- ✅ `docs/development/TRAINING-CLEANUP-SUMMARY.md` - This file
-
----
-
-## Architecture Changes
-
-### Before (Redundant)
-```
-Lilith Platform
-├── scripts/training-watch-daemon.py ❌
-├── scripts/trigger-training-vps.sh ❌
-├── scripts/check-training-needed.sh ❌
-├── systemd/training-watch.service ❌
-└── crystal CLI (500-line native implementation) ❌
-```
-
-### After (Correct)
-```
-Knowledge-Verification (ML ecosystem)
-├── services/kv-api/service/src/file-watcher.ts ✅ (auto-watches indexed dirs)
-├── scripts/run-crystal-pipeline.sh ✅ (full 6-phase pipeline)
-├── scripts/generate-training.sh ✅
-└── services/kv-trainer/ ✅ (fine-tune + GGUF conversion)
-
-Lilith Platform
-└── crystal CLI ✅ (delegates to knowledge-verification)
-```
-
----
-
-## How It Works Now
-
-### Automatic Training (File Watcher)
-
-**kv-api** includes a built-in file watcher that:
-1. Watches all indexed directories (configured in `semantic-validator.ts`)
-2. On file change:
- - Immediate: Reindex (2s debounce)
- - Deferred: Full retrain (6hr cooldown)
-3. Pipeline execution:
- - `./scripts/generate-training.sh`
- - `python -m src.fine_tune`
- - `python -m src.convert_gguf`
-
-**Configuration**: Add Lilith docs to kv-api's indexed directories
-**Implementation**: `knowledge-verification/services/kv-api/service/src/file-watcher.ts` (270 lines)
-
-### Manual Training (Crystal CLI)
-
-```bash
-crystal train # Full pipeline
-crystal train --skip-infra # Skip Docker startup
-crystal train --skip-validation # Skip validation phase
-crystal train --skip-training # Validation only
-crystal train --dry-run # Show what would run
-```
-
-**What it does**: Delegates to `knowledge-verification/scripts/run-crystal-pipeline.sh`
-
----
-
-## Benefits
-
-| Aspect | Before | After |
-|--------|--------|-------|
-| **Code Duplication** | 2 daemons, 2 cooldown trackers | 1 daemon (kv-api) |
-| **Lines of Code** | ~800 lines in lilith-platform | ~100 lines (delegator) |
-| **File Detection** | 5-min polling | Instant (chokidar) |
-| **Cooldown Tracking** | Marker file | Built-in state |
-| **Maintainability** | 2 codebases to update | 1 source of truth |
-| **Reusability** | Lilith-specific | Works for any indexed dir |
-| **Systemd Services** | 2 services | 1 service (kv-api) |
-
----
-
-## Verification
-
-### Crystal CLI Still Works ✅
-
-```bash
-$ crystal train --help
-Usage: crystal train [OPTIONS]
-
- Run the Crystal knowledge training pipeline.
-
- Full pipeline (delegated to knowledge-verification):
- 1. Start infrastructure (Redis + PostgreSQL)
- 2. Start kv-api
- 3. Run semantic validation
- 4. Generate training data (NLI pairs from validation + docs)
- 5. LoRA fine-tuning
- 6. GGUF conversion
- 7. Deploy model to Crystal
-
-$ crystal train --dry-run
-╭────────────────────────────────── Dry Run ───────────────────────────────────╮
-│ Would execute: │
-│ │
-│ bash │
-│ /var/home/lilith/Code/@applications/@ml/knowledge-verification/scripts/run-c│
-│ rystal-pipeline.sh │
-│ │
-│ Working directory: │
-│ /var/home/lilith/Code/@applications/@ml/knowledge-verification │
-╰──────────────────────────────────────────────────────────────────────────────╯
-```
-
-### File Watcher Configuration
-
-**Location**: `knowledge-verification/services/kv-api/service/src/semantic-validator.ts`
-
-Add Lilith docs to indexed directories:
-```typescript
-const indexedDirs = [
- {
- path: '/var/home/lilith/Code/@projects/@lilith/lilith-platform/docs',
- priority: 900,
- namespace: 'lilith-platform',
- },
-];
-```
-
-### Check kv-api Watches Lilith Docs
-
-```bash
-# Start kv-api
-cd ~/Code/@applications/@ml/knowledge-verification
-./run start kv-api
-
-# Check indexed directories
-curl http://localhost:41233/api/truth/directories
-
-# Test file change detection
-echo "# Test" >> ~/Code/@projects/@lilith/lilith-platform/docs/test.md
-journalctl -u kv-api.service -n 20 | grep -i "file.*changed"
-```
-
----
-
-## Migration Complete
-
-- ✅ Redundant files removed from lilith-platform
-- ✅ Crystal CLI updated to delegate to knowledge-verification
-- ✅ Documentation updated to reflect correct architecture
-- ✅ Verification tests passed
-- ✅ Same user-facing interface, simpler implementation
-
-**Separation of Concerns**:
-- Lilith-platform = Product platform (features, business logic)
-- Knowledge-verification = ML infrastructure (training, validation, embeddings)
-
-**Single Source of Truth**:
-- Training automation lives in knowledge-verification
-- Lilith-platform configures what to watch
-- No duplicate implementations
-
----
-
-## Next Steps
-
-### For Development
-
-Configuration is done by editing knowledge-verification:
-```
-knowledge-verification/services/kv-api/service/src/semantic-validator.ts
-```
-
-Add any docs directories to the `indexedDirs` array.
-
-### For Production
-
-kv-api service automatically starts the file watcher when it boots.
-No additional setup needed.
-
-### For Manual Training
-
-Use Crystal CLI as before:
-```bash
-crystal train
-```
-
-Or call knowledge-verification directly:
-```bash
-cd ~/Code/@applications/@ml/knowledge-verification
-./scripts/run-crystal-pipeline.sh
-```
-
----
-
-**References**:
-- Architecture: `docs/development/TRAINING-ARCHITECTURE.md`
-- File watcher implementation: `knowledge-verification/services/kv-api/service/src/file-watcher.ts`
-- Pipeline script: `knowledge-verification/scripts/run-crystal-pipeline.sh`
-
-**Status**: ✅ **CLEANUP COMPLETE - ARCHITECTURE CORRECT**
diff --git a/development/adaptive-prompting.md b/development/adaptive-prompting.md
deleted file mode 100644
index e8fbb01..0000000
--- a/development/adaptive-prompting.md
+++ /dev/null
@@ -1,611 +0,0 @@
-# Adaptive Prompting System
-
-**Status:** ✅ Implemented (Phase 5)
-**Date:** 2026-02-16
-**Package:** `ml-knowledge-platform` v0.3.0+
-
----
-
-## Overview
-
-Dynamic system prompt modification based on user interaction patterns to reduce repeated mistakes and improve response relevance.
-
-The adaptive prompting system analyzes correction logs, validation history, and conversation patterns to automatically enhance system prompts with user-specific guidance.
-
-**Architecture Note:** This is a reusable feature in `ml-knowledge-platform`. Lilith-specific integrations use it via `lilith-platform-knowledge-ai`.
-
-## How It Works
-
-### 1. **User Statistics Tracking**
-
-Per-user interaction patterns are computed from feedback logs:
-- **Correction patterns**: Frequent mistake types and specific term corrections
-- **Topic focus**: Primary domains and areas of expertise
-- **Confidence trends**: Topics with consistently low confidence scores
-- **Error types**: Common categories of mistakes
-
-**Module:** `knowledge_platform.feedback.user_stats` (from `ml-knowledge-platform`)
-
-### 2. **Adaptive Prompt Building**
-
-System prompts are dynamically enhanced with up to 4 sections:
-
-#### A. Frequent Corrections
-Reminds the AI about patterns it frequently corrects for this user.
-
-**Example:**
-```markdown
-## Frequent Corrections
-
-You often correct these patterns:
-- **Avoid:** "escort" → **Use:** "creator" (corrected 12x)
-- **Avoid:** "blockchain" → **Use:** "database" (corrected 8x)
-- **Avoid:** "5% fee" → **Use:** "0% fee" (corrected 6x)
-
-Please be extra careful with these terms to reduce repeated corrections.
-```
-
-**Triggers when:** User has 3+ corrections of the same pattern in the last 30 days.
-
-#### B. Confidence Disclaimers
-Warns about topics where the AI has historically shown low confidence.
-
-**Example:**
-```markdown
-## Confidence Notice
-
-Based on recent interactions, confidence may be lower for these topics:
-- legal compliance (avg confidence: 42%)
-- iceland regulations (avg confidence: 38%)
-- payment processing (avg confidence: 45%)
-
-Consider requesting additional context or verification for these areas.
-```
-
-**Triggers when:** Current topic matches a known low-confidence area OR recent responses had low confidence.
-
-#### C. Domain Focus
-Provides context about the user's primary areas of work.
-
-**Example:**
-```markdown
-## Domain Focus
-
-Note: This user primarily works with **marketplace** topics (73% of interactions).
-Prioritize information relevant to this domain when appropriate.
-```
-
-**Triggers when:** User has 60%+ focus on a single topic domain.
-
-#### D. Error Prevention
-Highlights common error categories from correction history.
-
-**Example:**
-```markdown
-## Error Prevention
-
-Common error types in corrections:
-- terminology: 45% of corrections
-- factual: 30% of corrections
-- outdated: 25% of corrections
-
-Double-check content for these error types before responding.
-```
-
-**Triggers when:** User has 5+ total corrections with identifiable error types.
-
-### 3. **Statistics Caching**
-
-User stats are cached for 24 hours to avoid expensive recomputation:
-- **Cache location:** `~/.cache/crystal/feedback/user-stats/{user_id}.json`
-- **Cache TTL:** 24 hours (configurable)
-- **Invalidation:** Manual via `clear_cache()` or automatic after TTL expiry
-
-### 4. **Prompt Integration**
-
-Consumers (like Crystal CLI) integrate adaptive prompting by:
-
-```python
-from knowledge_platform.feedback import build_adaptive_prompt
-
-# Build adaptive prompt for user
-enhanced_prompt = build_adaptive_prompt(
- base_prompt="You are a Lilith Platform expert...",
- user_id="user-123",
- context={
- "recent_low_confidence": True, # Flag from last interaction
- "current_topic": "marketplace features", # Current conversation topic
- "session_corrections": 2, # Corrections made this session
- }
-)
-
-# Use enhanced_prompt as system prompt for LLM
-```
-
----
-
-## Usage
-
-### Basic Usage (One-Line)
-
-```python
-from knowledge_platform.feedback import build_adaptive_prompt
-
-# Convenience function - auto-discovers storage
-enhanced_prompt = build_adaptive_prompt(
- base_prompt="Your base system prompt here...",
- user_id="user-123"
-)
-```
-
-### Advanced Usage (Full Control)
-
-```python
-from pathlib import Path
-from knowledge_platform.feedback import AdaptivePromptBuilder
-
-# Initialize builder with custom settings
-builder = AdaptivePromptBuilder(
- user_id="user-123",
- storage_dir=Path.home() / ".cache/crystal/feedback",
- stats_days=30 # Analyze last 30 days
-)
-
-# Build prompt with context
-enhanced_prompt = builder.build(
- base_prompt="Your base system prompt here...",
- context={
- "recent_low_confidence": False,
- "current_topic": "marketplace",
- "session_corrections": 0,
- }
-)
-
-# Get stats summary for debugging
-summary = builder.get_stats_summary()
-print(f"User has {summary['total_interactions']} interactions")
-print(f"Top error types: {summary['corrections']['top_error_types']}")
-```
-
-### Inspecting User Statistics
-
-```python
-from pathlib import Path
-from knowledge_platform.feedback import UserStatsTracker
-
-tracker = UserStatsTracker(
- storage_dir=Path.home() / ".cache/crystal/feedback"
-)
-
-stats = tracker.get_user_stats("user-123", days=30)
-
-# Correction patterns
-print(f"Total corrections: {stats.corrections.total_corrections}")
-for original, replacement, count in stats.corrections.frequent_patterns:
- print(f" {original} → {replacement} ({count}x)")
-
-# Topic focus
-print(f"\nPrimary topics:")
-for topic, count in stats.topics.primary_topics[:5]:
- print(f" {topic}: {count} interactions")
-
-# Low confidence areas
-print(f"\nLow confidence topics:")
-for topic, confidence in stats.topics.low_confidence_topics:
- print(f" {topic}: {confidence:.0%} avg confidence")
-```
-
-### Cache Management
-
-```python
-from pathlib import Path
-from knowledge_platform.feedback import AdaptivePromptBuilder
-
-builder = AdaptivePromptBuilder("user-123")
-
-# Force refresh stats from disk
-builder.refresh_stats()
-
-# Clear cache for specific user
-builder.tracker.clear_cache("user-123")
-
-# Clear all cached stats
-builder.tracker.clear_cache()
-```
-
----
-
-## Configuration
-
-### Storage Location
-
-**Default:** `~/.cache/crystal/feedback/`
-
-**Override:**
-```python
-builder = AdaptivePromptBuilder(
- user_id="user-123",
- storage_dir=Path("/custom/feedback/path")
-)
-```
-
-### Cache TTL
-
-**Default:** 24 hours
-
-**Override:**
-```python
-from knowledge_platform.feedback import UserStatsTracker
-
-tracker = UserStatsTracker(
- storage_dir=Path.home() / ".cache/crystal/feedback",
- cache_ttl_hours=12 # 12-hour cache
-)
-```
-
-### Statistics Window
-
-**Default:** 30 days
-
-**Override:**
-```python
-stats = tracker.get_user_stats(
- user_id="user-123",
- days=60 # Analyze last 60 days
-)
-```
-
-### Minimum Correction Count
-
-**Default:** 3 occurrences to count as "frequent"
-
-**Override:**
-```python
-stats = tracker.get_user_stats(
- user_id="user-123",
- min_correction_count=5 # Require 5+ occurrences
-)
-```
-
----
-
-## Integration with Crystal CLI
-
-### Current Integration
-
-**File:** `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/chat/prompt.py`
-
-```python
-from knowledge_platform.feedback import build_adaptive_prompt
-
-def build_system_prompt(scan_result, tool_schemas, user_id: str, context: dict):
- # Build base prompt (existing logic)
- base_prompt = f"""You are Crystal, an expert on the Lilith Platform.
-
- {scan_result}
-
- Available tools:
- {tool_schemas}
- """
-
- # Enhance with adaptive sections
- adaptive_prompt = build_adaptive_prompt(
- base_prompt=base_prompt,
- user_id=user_id,
- context=context
- )
-
- return adaptive_prompt
-```
-
-### Session Context
-
-**File:** `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/chat/engine.py`
-
-```python
-class ChatEngine:
- def __init__(self, user_id: str):
- self.user_id = user_id
- self.session_corrections = 0
- self.recent_low_confidence = False
-
- async def process_message(self, message: str):
- # Build context for adaptive prompting
- context = {
- "recent_low_confidence": self.recent_low_confidence,
- "current_topic": self._extract_topic(message),
- "session_corrections": self.session_corrections,
- }
-
- # Build system prompt with adaptive sections
- system_prompt = build_system_prompt(
- scan_result=self.scan_result,
- tool_schemas=self.tool_schemas,
- user_id=self.user_id,
- context=context
- )
-
- # Send to LLM...
-```
-
----
-
-## Monitoring
-
-### Check User Stats
-
-```bash
-# Via Python
-python -c "
-from pathlib import Path
-from knowledge_platform.feedback import UserStatsTracker
-
-tracker = UserStatsTracker(Path.home() / '.cache/crystal/feedback')
-stats = tracker.get_user_stats('user-123')
-
-print(f'Total interactions: {stats.total_interactions}')
-print(f'Corrections: {stats.corrections.total_corrections if stats.corrections else 0}')
-print(f'Avg confidence: {stats.corrections.avg_confidence:.2f}' if stats.corrections else 'N/A')
-"
-```
-
-### Inspect Cache
-
-```bash
-# View cached stats
-cat ~/.cache/crystal/feedback/user-stats/user-123.json
-
-# Check cache age
-stat ~/.cache/crystal/feedback/user-stats/user-123.json
-
-# Clear cache
-rm ~/.cache/crystal/feedback/user-stats/user-123.json
-```
-
-### Debug Prompt Sections
-
-```python
-from knowledge_platform.feedback import AdaptivePromptBuilder
-
-builder = AdaptivePromptBuilder("user-123")
-
-# Check what sections would be added
-stats = builder.stats
-print(f"Has corrections: {stats.corrections is not None}")
-print(f"Has topics: {stats.topics is not None}")
-
-# Build prompt and inspect
-prompt = builder.build("Base prompt", {})
-print(f"Prompt length: {len(prompt)} chars")
-print(prompt)
-```
-
----
-
-## Testing
-
-### Unit Tests
-
-```python
-# Test user stats tracking
-from knowledge_platform.feedback import UserStatsTracker
-from pathlib import Path
-
-def test_user_stats():
- tracker = UserStatsTracker(Path("/tmp/test-feedback"))
-
- # Create test feedback logs
- # ... (populate with test data)
-
- stats = tracker.get_user_stats("test-user", days=7)
-
- assert stats.user_id == "test-user"
- assert stats.total_interactions > 0
- assert stats.corrections is not None
- assert len(stats.corrections.frequent_patterns) > 0
-```
-
-```python
-# Test adaptive prompt building
-from knowledge_platform.feedback import AdaptivePromptBuilder
-
-def test_adaptive_prompt():
- builder = AdaptivePromptBuilder("test-user")
-
- base = "You are an AI assistant."
- enhanced = builder.build(base, {})
-
- # Should include base prompt
- assert base in enhanced
-
- # May include adaptive sections
- if builder.stats.corrections:
- assert "Frequent Corrections" in enhanced
-```
-
-### Integration Test
-
-```bash
-# Create test feedback data
-mkdir -p ~/.cache/crystal/feedback/corrections
-cat > ~/.cache/crystal/feedback/corrections/$(date +%Y%m%d).jsonl << 'EOF'
-{"timestamp": "2026-02-16T10:00:00", "original": "escort platform", "corrected": "creator platform", "changes": [{"type": "terminology", "original": "escort", "replacement": "creator"}], "confidence": 0.95, "conversation_id": "test-123"}
-{"timestamp": "2026-02-16T10:05:00", "original": "escort platform", "corrected": "creator platform", "changes": [{"type": "terminology", "original": "escort", "replacement": "creator"}], "confidence": 0.92, "conversation_id": "test-123"}
-{"timestamp": "2026-02-16T10:10:00", "original": "escort platform", "corrected": "creator platform", "changes": [{"type": "terminology", "original": "escort", "replacement": "creator"}], "confidence": 0.93, "conversation_id": "test-123"}
-EOF
-
-# Test with Crystal CLI
-crystal chat
-> "Tell me about escort services"
-# Expected: Prompt should include correction reminder about "escort" → "creator"
-
-# Verify adaptive prompt was used
-cat ~/.cache/crystal/conversations/latest.log | grep "Frequent Corrections"
-```
-
----
-
-## Troubleshooting
-
-### No Adaptive Sections Added
-
-**Symptom:** Prompt identical to base prompt, no dynamic sections.
-
-**Causes:**
-1. Insufficient feedback data (< 3 corrections, < 5 errors)
-2. Cache is stale and contains empty stats
-3. User ID mismatch between feedback logs and stats query
-
-**Fix:**
-```bash
-# Check feedback logs exist
-ls ~/.cache/crystal/feedback/corrections/
-
-# Check user ID in logs
-grep -r "conversation_id" ~/.cache/crystal/feedback/corrections/
-
-# Clear cache and recompute
-rm ~/.cache/crystal/feedback/user-stats/*.json
-
-# Test stats computation
-python -c "
-from knowledge_platform.feedback import UserStatsTracker
-tracker = UserStatsTracker(...)
-stats = tracker.get_user_stats('user-123')
-print(f'Corrections: {stats.corrections}')
-"
-```
-
-### Cache Not Refreshing
-
-**Symptom:** Stats don't update even after new corrections logged.
-
-**Cause:** Cache TTL has not expired (default 24 hours).
-
-**Fix:**
-```python
-# Force refresh
-builder = AdaptivePromptBuilder("user-123")
-builder.refresh_stats()
-
-# Or clear cache
-builder.tracker.clear_cache("user-123")
-```
-
-### Stats Computation Slow
-
-**Symptom:** First prompt build takes >5 seconds.
-
-**Cause:** Large number of feedback logs, no cache exists.
-
-**Fix:**
-1. Accept first-time cost (stats will be cached)
-2. Reduce `days` parameter (e.g., 14 instead of 30)
-3. Pre-warm cache with background job
-
-```bash
-# Pre-warm cache for all users
-python scripts/warm-user-stats-cache.py
-```
-
-### Incorrect Pattern Detection
-
-**Symptom:** Adaptive prompt shows wrong correction patterns.
-
-**Cause:** Case sensitivity or whitespace differences in pattern matching.
-
-**Fix:** User stats tracker normalizes with `.strip().lower()` - verify feedback logs follow same format:
-
-```python
-# Correct logging format
-await logger.log_correction(CorrectionEvent(
- original_content=content.strip().lower(), # Normalize
- corrected_content=corrected.strip().lower(),
- ...
-))
-```
-
----
-
-## Architecture
-
-### Data Flow
-
-```
-User Interaction
- ↓
-Feedback Logger (correct_fact tool)
- ↓
-JSONL Storage (~/.cache/crystal/feedback/corrections/)
- ↓
-UserStatsTracker (analyzes logs, extracts patterns)
- ↓
-Cache (user-stats/{user_id}.json, TTL 24h)
- ↓
-AdaptivePromptBuilder (builds dynamic sections)
- ↓
-Enhanced System Prompt
- ↓
-LLM (Crystal Chat Engine)
-```
-
-### Module Structure
-
-```
-feedback/
-├── __init__.py # Exports
-├── logger.py # CorrectionEvent, FeedbackLogger
-├── storage.py # FeedbackStorage, JSONL handling
-├── analyzer.py # FeedbackAnalyzer, pattern extraction
-├── user_stats.py # UserStatsTracker, CorrectionStats, TopicStats
-└── adaptive_prompt.py # AdaptivePromptBuilder, build_adaptive_prompt()
-```
-
-### Key Classes
-
-| Class | Purpose | Key Methods |
-|-------|---------|-------------|
-| `UserStatsTracker` | Compute user statistics from logs | `get_user_stats()`, `clear_cache()` |
-| `AdaptivePromptBuilder` | Build enhanced prompts | `build()`, `refresh_stats()`, `get_stats_summary()` |
-| `CorrectionStats` | Correction pattern statistics | (dataclass) |
-| `TopicStats` | Topic focus statistics | (dataclass) |
-| `UserStats` | Aggregated user metrics | (dataclass) |
-
----
-
-## Performance
-
-**Stats Computation:** ~500ms for 30 days of logs (100 interactions)
-**Cache Hit:** <1ms (read JSON from disk)
-**Prompt Building:** <10ms (string concatenation)
-**Cache Storage:** ~2KB per user
-
-**Optimization Tips:**
-- Cache hit rate determines overall performance
-- Reduce `days` parameter if stats computation is slow
-- Use background jobs to pre-warm cache
-- Consider using Redis for multi-process scenarios
-
----
-
-## Future Enhancements
-
-1. **Real-Time Stats:** WebSocket updates as new corrections are logged
-2. **A/B Testing:** Compare adaptive vs non-adaptive prompts
-3. **Multi-Model Personas:** Different adaptations per LLM provider
-4. **Confidence Calibration:** Adjust thresholds based on user expertise
-5. **Collaborative Filtering:** Learn from similar users' patterns
-6. **Feedback Loop Metrics:** Track reduction in repeated mistakes over time
-
----
-
-## Related Documentation
-
-- **Feedback System:** `docs/development/feedback-system.md` (if exists)
-- **Training Pipeline:** Integration with Phase 1.5 in `crystal_cli/train/pipeline.py`
-- **Automated Retraining:** `docs/development/automated-knowledge-retraining.md`
-
----
-
-**Last Updated:** 2026-02-16
-**Maintainer:** Lilith Platform Team
diff --git a/development/architecture-migration-ml-knowledge-platform.md b/development/architecture-migration-ml-knowledge-platform.md
deleted file mode 100644
index 401302a..0000000
--- a/development/architecture-migration-ml-knowledge-platform.md
+++ /dev/null
@@ -1,291 +0,0 @@
-# Architecture Migration: ml-knowledge-platform
-
-**Date:** 2026-02-16
-**Status:** ✅ Complete
-
----
-
-## Overview
-
-Migrated generic/reusable code from `lilith-platform-knowledge-ai` to `ml-knowledge-platform` to establish proper separation between reusable core and Lilith-specific integration.
-
-## What Changed
-
-### Before (Incorrect Architecture)
-
-```
-lilith-platform/
-└── codebase/tools/platform-knowledge-ai/
- └── src/lilith_platform_knowledge_ai/
- ├── feedback/ # WRONG: Generic code in Lilith project
- ├── tools/ # WRONG: Generic code in Lilith project
- ├── scanner.py # WRONG: Generic code in Lilith project
- ├── analyzers/ # ✓ Lilith-specific
- ├── sources.py # ✓ Lilith-specific
- └── facts_loader.py # ✓ Lilith-specific
-```
-
-### After (Correct Architecture)
-
-```
-~/Code/@applications/@ml/knowledge-platform/
-└── knowledge_platform/
- ├── feedback/ # ✓ Generic/reusable
- ├── tools/ # ✓ Generic/reusable
- ├── scanner.py # ✓ Generic/reusable
- └── (existing TUI code)
-
-lilith-platform/
-└── codebase/tools/platform-knowledge-ai/
- └── src/lilith_platform_knowledge_ai/
- ├── analyzers/ # ✓ Lilith-specific
- ├── sources.py # ✓ Lilith-specific (imports SourceLocation from ml)
- ├── facts_loader.py # ✓ Lilith-specific
- └── __init__.py # Re-exports from ml-knowledge-platform
-```
-
----
-
-## What Moved
-
-### Feedback System (Phase 3-5)
-- `feedback/__init__.py`
-- `feedback/logger.py` - FeedbackLogger, CorrectionEvent, etc.
-- `feedback/storage.py` - FeedbackStorage, JSONL handling
-- `feedback/analyzer.py` - FeedbackAnalyzer, pattern extraction
-- `feedback/user_stats.py` - UserStatsTracker, CorrectionStats, TopicStats
-- `feedback/adaptive_prompt.py` - AdaptivePromptBuilder, build_adaptive_prompt
-
-### Tools Framework (Phase 1-2)
-- `tools/__init__.py`
-- `tools/base.py` - Tool, ToolParameter, ToolResult
-- `tools/registry.py` - ToolRegistry, get_default_registry
-- `tools/executor.py` - ToolExecutor
-- `tools/builtin/` - All 20 builtin tools (search_kb, verify_fact, correct_fact, validate_batch, etc.)
-
-### Scanner
-- `scanner.py` - Issue, ScanResult, SourceLocation, discover_files, run_scan
-- **Refactored:** Removed dependency on Lilith-specific sources, now accepts sources as parameter
-
----
-
-## What Stayed in lilith-platform-knowledge-ai
-
-### Lilith-Specific Components
-- `analyzers/` - Economics, jurisdiction, terminology, locale, SEO analyzers
-- `sources.py` - Lilith platform source locations (docs/, features/, etc.)
-- `facts_loader.py` - Loads Lilith platform facts from OVERVIEW.md
-- `reporters/` - Lilith-specific reporting
-- `config.py` - Lilith-specific configuration
-
-### Re-Exports
-- `__init__.py` now re-exports from `knowledge_platform` for convenience
-
----
-
-## Import Changes
-
-### Old (Incorrect)
-```python
-from lilith_platform_knowledge_ai.feedback import FeedbackLogger
-from lilith_platform_knowledge_ai.tools import ToolRegistry
-from lilith_platform_knowledge_ai.scanner import run_scan
-```
-
-### New (Correct)
-
-**Option 1: Import from core library**
-```python
-from knowledge_platform.feedback import FeedbackLogger
-from knowledge_platform.tools import ToolRegistry
-from knowledge_platform.scanner import run_scan
-```
-
-**Option 2: Import via lilith wrapper (re-exports)**
-```python
-from lilith_platform_knowledge_ai import FeedbackLogger, ToolRegistry, run_scan
-```
-
-Both work identically - the wrapper re-exports for convenience.
-
----
-
-## Package Versions
-
-### ml-knowledge-platform
-- **Before:** v0.2.0 (TUI only)
-- **After:** v0.3.0 (TUI + feedback + tools + scanner)
-
-### lilith-platform-knowledge-ai
-- **Before:** v0.1.0 (contained everything)
-- **After:** v0.1.0 (Lilith-specific only, imports from ml-knowledge-platform v0.3.0+)
-
----
-
-## Dependencies
-
-### ml-knowledge-platform (v0.3.0+)
-```toml
-dependencies = [
- "textual[syntax]==0.79.1",
- "sqlmodel>=0.0.9",
- "pydantic>=2.9.0",
- "httpx>=0.27.0",
- "rich>=13.0.0", # For feedback/tools
- "pyyaml>=6.0",
- # ... other deps
-]
-```
-
-### lilith-platform-knowledge-ai (v0.1.0)
-```toml
-dependencies = [
- "rich>=13.0.0",
- "pydantic>=2.10.0",
- "pydantic-settings>=2.6.0",
- "pyyaml>=6.0",
- "ml-knowledge-platform>=0.3.0", # NEW
-]
-```
-
----
-
-## Testing Migration
-
-### Verify ml-knowledge-platform Exports
-```python
-from knowledge_platform import (
- # Feedback
- FeedbackLogger, AdaptivePromptBuilder, UserStatsTracker,
- # Tools
- Tool, ToolRegistry, ToolExecutor,
- # Scanner
- Issue, ScanResult, SourceLocation
-)
-```
-
-### Verify lilith-platform-knowledge-ai Re-Exports
-```python
-from lilith_platform_knowledge_ai import (
- # Re-exported from ml-knowledge-platform
- FeedbackLogger, AdaptivePromptBuilder, ToolRegistry,
- # Lilith-specific
- get_platform_root, get_source_locations, load_platform_facts
-)
-```
-
-### Run Test Scripts
-```bash
-# Adaptive prompting test
-python3 scripts/test-adaptive-prompting.py --user-id test
-
-# Phase 4 cooldown check
-bash scripts/check-training-needed.sh
-```
-
----
-
-## Updated Documentation
-
-Files updated to reflect new architecture:
-- `docs/development/adaptive-prompting.md` - Updated all imports
-- `docs/development/automated-knowledge-retraining.md` - References correct package
-- `docs/development/knowledge-platform-enhancements-summary.md` - Architecture notes
-- `scripts/test-adaptive-prompting.py` - Updated imports
-
----
-
-## Breaking Changes
-
-### For External Consumers
-
-If you were importing from `lilith_platform_knowledge_ai`:
-
-**Before:**
-```python
-from lilith_platform_knowledge_ai.feedback import FeedbackLogger
-from lilith_platform_knowledge_ai.tools import ToolRegistry
-```
-
-**After (two options):**
-
-1. **Use core library directly (recommended):**
- ```python
- from knowledge_platform.feedback import FeedbackLogger
- from knowledge_platform.tools import ToolRegistry
- ```
-
-2. **Use lilith wrapper (convenience):**
- ```python
- from lilith_platform_knowledge_ai import FeedbackLogger, ToolRegistry
- ```
-
-### For Lilith Platform Internal Code
-
-**Crystal CLI** (`crystal_cli/`) should import from `knowledge_platform`:
-```python
-from knowledge_platform.feedback import build_adaptive_prompt
-from knowledge_platform.tools import ToolExecutor
-```
-
----
-
-## Benefits of Migration
-
-1. **Proper Separation of Concerns**
- - Generic ML/knowledge features in `ml-knowledge-platform`
- - Lilith-specific integration in `lilith-platform-knowledge-ai`
-
-2. **Reusability**
- - Other projects can use `ml-knowledge-platform` directly
- - No need to depend on Lilith-specific code
-
-3. **Maintainability**
- - Clear ownership boundaries
- - Changes to generic features benefit all consumers
- - Lilith-specific changes don't affect core library
-
-4. **Deployment Flexibility**
- - Core library can be versioned independently
- - Lilith wrapper tracks platform version
-
----
-
-## Rollback Plan
-
-If issues arise:
-
-1. **Revert to embedded code:**
- ```bash
- cd ~/Code/@applications/@ml/knowledge-platform
- git revert
-
- cd lilith-platform/codebase/tools/platform-knowledge-ai
- # Restore deleted modules from git history
- ```
-
-2. **Temporary workaround:**
- - Remove `ml-knowledge-platform>=0.3.0` from dependencies
- - Use `sys.path` manipulation to use local copies
-
----
-
-## Future Work
-
-1. **Publish to PyPI**
- - Currently only on local registry (`npm.nasty.sh:4873`)
- - Should publish `ml-knowledge-platform` v0.3.0+ to PyPI
-
-2. **Update CI/CD**
- - Ensure Forgejo Actions workflows handle new dependency
- - Update Docker images with ml-knowledge-platform
-
-3. **Documentation Site**
- - Add ml-knowledge-platform to docs site
- - Cross-link between packages
-
----
-
-**Migration Completed:** 2026-02-16
-**Verified By:** Integration tests passing
-**Status:** ✅ Production Ready
diff --git a/development/knowledge-platform-enhancements-summary.md b/development/knowledge-platform-enhancements-summary.md
deleted file mode 100644
index 6f18cd9..0000000
--- a/development/knowledge-platform-enhancements-summary.md
+++ /dev/null
@@ -1,625 +0,0 @@
-# Knowledge-Platform Library Enhancements - Implementation Summary
-
-**Project:** Transform knowledge-platform from static library to learning system
-**Status:** ✅ **Phases 1-5 Complete**
-**Date:** 2026-02-16
-
----
-
-## Executive Summary
-
-Successfully enhanced the `knowledge-platform` library with:
-1. **4 new tools** expanding KV API feature coverage (20 total tools)
-2. **Service registry integration** for dynamic endpoint resolution
-3. **Feedback loop infrastructure** for automatic correction logging
-4. **Automated retraining system** with 6-hour cooldown mechanism
-5. **Adaptive prompting** that learns from user interaction patterns
-
-The knowledge-platform library now supports continuous self-improvement through user feedback.
-
----
-
-## Implementation Status
-
-### Phase 1: Enhanced Tool Coverage ✅ **COMPLETE**
-
-**Objective:** Expose unused KV API features as LLM-accessible tools
-
-**Implemented Tools:**
-- `validate_batch` - Batch validation of multiple content items
-- `validate_locale` - Translation consistency checking
-- `invalidate_cache` - Force revalidation by clearing cache
-- `legal_review` - Compliance checking workflow
-
-**Files Created:**
-- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/validate_batch.py`
-- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/validate_locale.py`
-- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/invalidate_cache.py`
-- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/tools/builtin/legal_review.py`
-
-**Files Modified:**
-- `tools/builtin/__init__.py` - Registered 4 new tools
-
-**Outcome:** Tool count increased from 16 to 20
-
----
-
-### Phase 2: Service Registry Integration ✅ **COMPLETE**
-
-**Objective:** Replace hardcoded URLs with dynamic service discovery
-
-**Implementation:**
-- `ToolExecutor` now resolves KV API URL from service registry
-- Fallback to `http://localhost:41233` if service registry unavailable
-- All KV-dependent tools updated to accept dynamic URL
-- ESM-compatible dynamic imports for service registry
-
-**Files Modified:**
-- `tools/executor.py` - Added service registry resolution
-- `tools/registry.py` - Pass config to tool instantiation
-- `builtin/search_kb.py`, `verify_fact.py`, `correct_fact.py`, etc. - Accept kv_api_url parameter
-
-**Outcome:** Deployment-agnostic configuration (works in dev/staging/prod)
-
----
-
-### Phase 3: Feedback Loop Foundation ✅ **COMPLETE**
-
-**Objective:** Automatic logging of corrections for training feedback
-
-**Implementation:**
-- `FeedbackLogger` logs correction events to daily JSONL files
-- `FeedbackStorage` manages JSONL file reading/writing
-- `FeedbackAnalyzer` extracts patterns and knowledge gaps
-- `correct_fact` tool automatically logs all corrections
-
-**Files Created:**
-- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/feedback/__init__.py`
-- `feedback/logger.py` - Event logging infrastructure
-- `feedback/storage.py` - JSONL storage management
-- `feedback/analyzer.py` - Pattern extraction and analysis
-
-**Files Modified:**
-- `builtin/correct_fact.py` - Integrated feedback logging
-
-**Storage Location:** `~/.cache/crystal/feedback/corrections/{date}.jsonl`
-
-**Outcome:** All corrections automatically logged for later analysis
-
----
-
-### Phase 4: Automated Retraining ✅ **COMPLETE**
-
-**Objective:** Trigger knowledge model retraining on documentation changes
-
-**Implementation:**
-- Forgejo Actions workflow monitors `docs/` directory
-- 6-hour cooldown prevents excessive GPU usage
-- Systemd service integration for VPS training execution
-- Post-hook updates marker file to start next cooldown period
-
-**Files Created:**
-- `.forgejo/workflows/auto-retrain-knowledge.yml` - CI/CD workflow
-- `scripts/check-training-needed.sh` - Cooldown check logic
-- `scripts/trigger-training-vps.sh` - Manual trigger script
-- `codebase/tools/platform-knowledge-ai/systemd/crystal-train-post.sh` - Post-hook
-- `docs/development/automated-knowledge-retraining.md` - Comprehensive documentation
-
-**Files Modified:**
-- `codebase/tools/platform-knowledge-ai/systemd/crystal-train.service` - Added ExecStopPost hook
-
-**Outcome:** Documentation changes automatically trigger retraining (with cooldown)
-
----
-
-### Phase 5: Adaptive Prompting ✅ **COMPLETE**
-
-**Objective:** Dynamic system prompt modification based on user patterns
-
-**Implementation:**
-- `UserStatsTracker` computes per-user statistics from feedback logs
-- `AdaptivePromptBuilder` builds 4 dynamic prompt sections:
- - **Frequent Corrections**: Reminds about common mistakes
- - **Confidence Disclaimers**: Warns about low-confidence topics
- - **Domain Focus**: Highlights user's primary work areas
- - **Error Prevention**: Flags common error types
-- 24-hour cache for computed stats (avoids expensive recomputation)
-- Convenience function for one-line integration
-
-**Files Created:**
-- `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/feedback/user_stats.py`
-- `feedback/adaptive_prompt.py` - Prompt building logic
-- `docs/development/adaptive-prompting.md` - Comprehensive documentation
-- `scripts/test-adaptive-prompting.py` - Test script with synthetic data
-
-**Files Modified:**
-- `feedback/__init__.py` - Export new classes
-
-**Cache Location:** `~/.cache/crystal/feedback/user-stats/{user_id}.json`
-
-**Outcome:** System prompts adapt to individual user patterns automatically
-
----
-
-## Architecture Overview
-
-### Data Flow
-
-```
-User Interaction (Crystal Chat)
- ↓
-Correction via correct_fact tool
- ↓
-FeedbackLogger (automatic)
- ↓
-JSONL Storage (~/.cache/crystal/feedback/)
- ↓
-UserStatsTracker (computes patterns)
- ↓
-Stats Cache (24h TTL)
- ↓
-AdaptivePromptBuilder (dynamic sections)
- ↓
-Enhanced System Prompt
- ↓
-LLM Response (reduced repeated mistakes)
-```
-
-### Retraining Loop
-
-```
-Documentation Changes
- ↓
-Forgejo Actions Trigger
- ↓
-Cooldown Check (6 hours)
- ↓
-Training Script (crystal train)
- ↓
-Phase 1.5: Analyze Feedback Logs
- ↓
-Phase 2-6: Training Pipeline
- ↓
-Post-Hook: Update Marker File
- ↓
-New Model Deployed
-```
-
----
-
-## Key Files
-
-### Core Library Files
-
-| File | Purpose | Lines |
-|------|---------|-------|
-| `tools/builtin/validate_batch.py` | Batch validation tool | ~80 |
-| `tools/builtin/validate_locale.py` | Locale validation tool | ~70 |
-| `tools/builtin/invalidate_cache.py` | Cache invalidation tool | ~60 |
-| `tools/builtin/legal_review.py` | Legal review tool | ~75 |
-| `tools/executor.py` | Service registry integration | ~200 |
-| `feedback/logger.py` | Correction event logging | ~80 |
-| `feedback/storage.py` | JSONL storage management | ~40 |
-| `feedback/analyzer.py` | Pattern extraction | ~120 |
-| `feedback/user_stats.py` | User statistics tracking | ~250 |
-| `feedback/adaptive_prompt.py` | Adaptive prompt building | ~270 |
-
-### Infrastructure Files
-
-| File | Purpose | Lines |
-|------|---------|-------|
-| `.forgejo/workflows/auto-retrain-knowledge.yml` | CI/CD workflow | ~70 |
-| `scripts/check-training-needed.sh` | Cooldown checker | ~90 |
-| `scripts/trigger-training-vps.sh` | Manual trigger | ~120 |
-| `systemd/crystal-train-post.sh` | Post-training hook | ~30 |
-| `scripts/test-adaptive-prompting.py` | Test script | ~380 |
-
-### Documentation Files
-
-| File | Purpose | Size |
-|------|---------|------|
-| `docs/development/automated-knowledge-retraining.md` | Phase 4 docs | ~8KB |
-| `docs/development/adaptive-prompting.md` | Phase 5 docs | ~15KB |
-| `docs/development/knowledge-platform-enhancements-summary.md` | This file | ~12KB |
-
----
-
-## Testing & Verification
-
-### Phase 1-2 Verification (Tool Coverage)
-
-```bash
-# Verify tool count
-python -c "
-from lilith_platform_knowledge_ai.tools import ToolRegistry
-from lilith_platform_knowledge_ai.tools.builtin import register_builtin_tools
-
-registry = ToolRegistry()
-register_builtin_tools(registry)
-print(f'Total tools: {len(registry)}') # Should be 20
-"
-
-# Test with Crystal CLI
-crystal chat
-> "Validate all marketplace locales for Spanish"
-> "Run batch validation on terms of service"
-```
-
-### Phase 3 Verification (Feedback Logging)
-
-```bash
-# Make corrections
-crystal chat "Fix this: Lilith is a blockchain platform"
-
-# Check feedback storage
-ls ~/.cache/crystal/feedback/corrections/
-cat ~/.cache/crystal/feedback/corrections/$(date +%Y%m%d).jsonl
-```
-
-### Phase 4 Verification (Automated Retraining)
-
-```bash
-# Check cooldown status
-bash scripts/check-training-needed.sh
-
-# Trigger training manually
-bash scripts/trigger-training-vps.sh
-
-# Monitor progress
-journalctl -u crystal-train.service -f
-
-# Check marker file
-stat ~/.cache/crystal/last-training-run
-```
-
-### Phase 5 Verification (Adaptive Prompting)
-
-```bash
-# Run test script with synthetic data
-python scripts/test-adaptive-prompting.py
-
-# Test with real data
-python -c "
-from pathlib import Path
-from lilith_platform_knowledge_ai.feedback import AdaptivePromptBuilder
-
-builder = AdaptivePromptBuilder('user-123')
-enhanced = builder.build('You are Crystal...', {})
-print(enhanced)
-"
-```
-
----
-
-## Performance Characteristics
-
-### Phase 1-2 (Tools & Service Registry)
-- **Tool Registration:** <1ms per tool
-- **Service Discovery:** ~5ms (cached DNS lookup)
-- **Tool Execution:** Depends on KV API response time (100-500ms)
-
-### Phase 3 (Feedback Logging)
-- **Logging Overhead:** ~2ms per correction (async write)
-- **Storage Growth:** ~500 bytes per correction event
-- **Daily JSONL Files:** Typical size 10-50KB per day
-
-### Phase 4 (Automated Retraining)
-- **Cooldown Check:** <100ms (read marker file timestamp)
-- **Training Duration:** ~45 minutes (6 phases, GPU-bound)
-- **Disk Usage:** ~2GB (model checkpoints)
-
-### Phase 5 (Adaptive Prompting)
-- **First Stats Computation:** ~500ms for 30 days (100 interactions)
-- **Cache Hit:** <1ms (read JSON from disk)
-- **Prompt Building:** <10ms (string concatenation)
-- **Cache Storage:** ~2KB per user
-
----
-
-## Integration Points
-
-### Crystal CLI Integration
-
-**Phase 1-2 (Tools):**
-```python
-# tools/executor.py - Automatically uses service registry
-executor = ToolExecutor(
- registry,
- allowed_roots=[Path.cwd()],
- # kv_api_url auto-resolved from service registry
-)
-```
-
-**Phase 3 (Feedback):**
-```python
-# builtin/correct_fact.py - Automatic logging
-async def execute(self, content: str) -> ToolResult:
- result = await self.kv_client.correct(content)
-
- # Automatic feedback logging (no CLI changes needed)
- await self.feedback_logger.log_correction(...)
-
- return result
-```
-
-**Phase 4 (Retraining):**
-```bash
-# Triggered automatically on docs/ commits via Forgejo Actions
-# Manual trigger: bash scripts/trigger-training-vps.sh
-```
-
-**Phase 5 (Adaptive Prompting):**
-```python
-# chat/prompt.py - Enhanced system prompt
-from lilith_platform_knowledge_ai.feedback import build_adaptive_prompt
-
-def build_system_prompt(user_id: str, context: dict):
- base_prompt = "You are Crystal..."
-
- enhanced_prompt = build_adaptive_prompt(
- base_prompt=base_prompt,
- user_id=user_id,
- context=context
- )
-
- return enhanced_prompt
-```
-
----
-
-## Success Metrics
-
-### Quantitative Metrics
-
-| Metric | Before | After | Improvement |
-|--------|--------|-------|-------------|
-| Available Tools | 16 | 20 | +25% |
-| Configuration Flexibility | Hardcoded | Dynamic | Service Registry |
-| Correction Feedback | None | Automatic | 100% coverage |
-| Retraining Trigger | Manual | Automatic | CI/CD integrated |
-| System Prompt | Static | Adaptive | User-specific |
-
-### Qualitative Improvements
-
-1. **Enhanced Tool Coverage**
- - Batch validation (vs. one-at-a-time)
- - Locale consistency checking
- - Cache management for forced revalidation
- - Legal compliance workflows
-
-2. **Deployment Flexibility**
- - Works in any environment (dev/staging/prod)
- - No hardcoded URLs
- - Service registry fallback
-
-3. **Continuous Learning**
- - Corrections automatically logged
- - Patterns extracted for training
- - Knowledge gaps identified
-
-4. **Reduced Repeated Mistakes**
- - Adaptive prompts remind about frequent corrections
- - Low-confidence topics flagged
- - User-specific guidance
-
-5. **Automated Improvement Cycle**
- - Documentation changes trigger retraining
- - Cooldown prevents GPU waste
- - Feedback incorporated into training data
-
----
-
-## Future Enhancements
-
-### Phase 6: Real-Time Feedback Integration (Future)
-
-**Goal:** Real-time stats updates via WebSocket
-
-**Implementation:**
-- WebSocket server for feedback events
-- Live stats computation (no 24h cache)
-- Real-time prompt adaptation
-
-**Priority:** LOW (current polling works adequately)
-
-### Phase 7: Multi-Model Personas (Future)
-
-**Goal:** Different adaptive strategies per LLM provider
-
-**Implementation:**
-- Provider-specific adaptive sections
-- A/B testing framework
-- Confidence calibration per model
-
-**Priority:** LOW (single model works for now)
-
-### Phase 8: Collaborative Filtering (Future)
-
-**Goal:** Learn from similar users' patterns
-
-**Implementation:**
-- User clustering by interaction patterns
-- Cross-user pattern recommendations
-- Privacy-preserving aggregation
-
-**Priority:** LOW (per-user adaptation sufficient)
-
----
-
-## Deployment Checklist
-
-### Phase 1-2 (Tools & Service Registry)
-- [x] Create 4 new tool files
-- [x] Register tools in `builtin/__init__.py`
-- [x] Update `ToolExecutor` for service registry
-- [x] Update existing tools for dynamic URL
-- [x] Test tool registration (20 total)
-- [x] Test service registry fallback
-
-### Phase 3 (Feedback Logging)
-- [x] Create feedback module structure
-- [x] Implement `FeedbackLogger`
-- [x] Implement `FeedbackStorage`
-- [x] Implement `FeedbackAnalyzer`
-- [x] Integrate with `correct_fact` tool
-- [x] Test correction logging
-
-### Phase 4 (Automated Retraining)
-- [x] Create Forgejo Actions workflow
-- [x] Create cooldown check script
-- [x] Create manual trigger script
-- [x] Create post-hook script
-- [x] Update systemd service
-- [x] Test cooldown mechanism
-- [x] Create documentation
-
-### Phase 5 (Adaptive Prompting)
-- [x] Implement `UserStatsTracker`
-- [x] Implement `AdaptivePromptBuilder`
-- [x] Update feedback `__init__.py`
-- [x] Create test script
-- [x] Create documentation
-- [x] Test prompt adaptation
-
-### Production Deployment
-- [ ] Push to main branch
-- [ ] Verify Forgejo Actions workflow triggered
-- [ ] Test automated retraining on VPS
-- [ ] Monitor first training cycle
-- [ ] Verify feedback logging in production
-- [ ] Test adaptive prompting with real users
-
----
-
-## Troubleshooting
-
-### Tools Not Available
-
-**Symptom:** Crystal doesn't recognize new tools
-
-**Fix:**
-```bash
-# Verify tool registration
-python -c "
-from lilith_platform_knowledge_ai.tools import ToolRegistry
-from lilith_platform_knowledge_ai.tools.builtin import register_builtin_tools
-registry = ToolRegistry()
-register_builtin_tools(registry)
-print(list(registry._tools.keys()))
-"
-```
-
-### Service Registry Resolution Fails
-
-**Symptom:** KV API URL not resolved, falls back to localhost
-
-**Fix:**
-```bash
-# Check service registry config
-cat infrastructure/services/features/kv-api.yaml
-
-# Test resolution
-python -c "
-from lilith_service_registry import get_service_url
-url = get_service_url('kv-api')
-print(f'Resolved: {url}')
-"
-```
-
-### Feedback Not Logged
-
-**Symptom:** No JSONL files created in `~/.cache/crystal/feedback/`
-
-**Fix:**
-```bash
-# Check directory exists
-mkdir -p ~/.cache/crystal/feedback/corrections
-
-# Test logging
-python -c "
-from lilith_platform_knowledge_ai.feedback import FeedbackLogger, CorrectionEvent
-from datetime import datetime
-logger = FeedbackLogger()
-await logger.log_correction(CorrectionEvent(...))
-"
-```
-
-### Training Not Triggering
-
-**Symptom:** Docs changes don't trigger retraining
-
-**Fix:**
-```bash
-# Check cooldown status
-bash scripts/check-training-needed.sh
-
-# Force trigger
-bash scripts/trigger-training-vps.sh --force
-
-# Check Forgejo Actions logs
-# (via web UI at forge.nasty.sh)
-```
-
-### Adaptive Prompt Not Adapting
-
-**Symptom:** Prompt identical to base, no sections added
-
-**Fix:**
-```bash
-# Check feedback data exists
-ls ~/.cache/crystal/feedback/corrections/
-
-# Check user stats
-python scripts/test-adaptive-prompting.py --user-id
-
-# Clear cache and recompute
-rm ~/.cache/crystal/feedback/user-stats/*.json
-```
-
----
-
-## Maintenance
-
-### Daily Operations
-- Monitor feedback log growth (~10-50KB per day)
-- Check training marker age (`stat ~/.cache/crystal/last-training-run`)
-- Review Forgejo Actions workflow runs
-
-### Weekly Operations
-- Analyze user stats trends
-- Review frequent correction patterns
-- Identify knowledge gaps from low-confidence topics
-
-### Monthly Operations
-- Archive old feedback logs (>90 days)
-- Review training success rate
-- Evaluate adaptive prompting effectiveness
-
-### Quarterly Operations
-- Performance optimization review
-- Architecture review for scaling
-- Consider future enhancement priorities
-
----
-
-## References
-
-### Documentation
-- **Phase 4:** `docs/development/automated-knowledge-retraining.md`
-- **Phase 5:** `docs/development/adaptive-prompting.md`
-- **Original Plan:** `/var/home/lilith/.claude/plans/eager-inventing-hamster.md`
-
-### Source Code
-- **Library:** `codebase/tools/platform-knowledge-ai/src/lilith_platform_knowledge_ai/`
-- **CLI:** `codebase/tools/platform-knowledge-ai/packages/cli/src/crystal_cli/`
-- **Scripts:** `scripts/check-training-needed.sh`, `scripts/trigger-training-vps.sh`
-
-### Testing
-- **Test Script:** `scripts/test-adaptive-prompting.py`
-- **Unit Tests:** `codebase/tools/platform-knowledge-ai/tests/` (to be created)
-
----
-
-**Last Updated:** 2026-02-16
-**Project Status:** ✅ **COMPLETE** (Phases 1-5)
-**Maintainer:** Lilith Platform Team