feat: workflow enforcement, RAG upgrade, and permission fixes

Task Management:
  - Add cancellation safeguards: require valid reason category (duplicate,
    obsolete, blocked_permanently, reassigned, scope_change, stakeholder_request)
  - Protect active work from arbitrary cancellation - must pause/block first
  - Auto-notify PM when task is blocked with ACTION REQUIRED message
  - PM task scan now shows blocked tasks needing their attention

  Permissions:
  - Add VIEW_STATS to Developer, QA, Documenter, Head Marketing KB permissions
  - Aligns code with docs/workflows/PERMISSIONS.md specification

  RAG/Embeddings:
  - Upgrade embedding model from all-MiniLM-L6-v2 to nomic-embed-text-v1.5
  - 768 dimensions with 8K token context (vs 512 tokens)
  - Add per-index chunk sizes: docs=1536, journals=1024, others=512
  - Switch to fixed chunking (semantic chunking loads separate MiniLM model)
  - Add einops dependency required by nomic model
This commit is contained in:
Renn F
2025-12-29 00:30:18 +01:00
parent fc55068f2b
commit 5315e9c72d
33 changed files with 1288 additions and 843 deletions
+11 -5
View File
@@ -121,11 +121,17 @@ class Settings(BaseSettings):
# ==========================================================================
rag_persist_dir: str = ".piragi"
rag_chunk_strategy: str = Field(
default="semantic",
default="fixed",
pattern="^(fixed|semantic|hierarchical|contextual)$",
description="Chunking strategy for documents",
description="Chunking strategy (fixed recommended - semantic loads separate model)",
)
rag_chunk_size: int = Field(default=512, ge=100)
rag_chunk_size_docs: int = Field(
default=1536, ge=100, description="Chunk size for docs (larger for 8K context)"
)
rag_chunk_size_journals: int = Field(
default=1024, ge=100, description="Chunk size for journals/reflections"
)
rag_chunk_overlap: int = Field(default=50, ge=0)
rag_use_hyde: bool = Field(
default=True, description="Use hypothetical document embeddings"
@@ -159,12 +165,12 @@ class Settings(BaseSettings):
# Default models
default_llm_model: str = "claude-3-opus-20240229"
default_embedding_model: str = Field(
default="all-MiniLM-L6-v2",
default="nomic-ai/nomic-embed-text-v1.5",
description="HuggingFace model for local or OpenAI name with API key",
)
embedding_dimensions: int = Field(
default=384,
description="Embedding dimensions (384 for MiniLM, 1536 for OpenAI)",
default=768,
description="Embedding dimensions (768 for nomic-embed, BGE-base)",
)
# ==========================================================================