Files
poimen-memory/IMPLEMENTATION_STATUS.md
T
rock 780af66b3e feat(rbac): wire AccessGuard into HTTP server and retrieval pipeline
HTTP Layer Integration:
- Add access_guard to AppState with builtin_role_provider
- Add to_rbac_claims() to convert JwtClaims → RBAC Claims
- Add query_result_to_resource_meta() for result filtering

Query Handler (/memory/query):
- RBAC filter applied after M3.8 optimization
- Batch check_access for all results
- Log filtered count per request

Context Handler (/memory/context):
- Project-level access check before lookup
- Return 403 if user lacks project access

Code Cleanup:
- Move http_server from bin to lib module
- Use mem_cli::http_server in main.rs

All 660+ tests passing.
2026-09-01 08:41:21 -07:00

12 KiB

Implementation Status: Memory Wiki-Graph RAG + RBAC

Summary

Status: Phases 1-7 complete with RBAC wired into HTTP + retrieval. 660+ tests passing.

Latest commit: RBAC wired into HTTP server and retrieval pipeline


Completed

  • WikiLinkParser: extract [[links]] from markdown
  • WikiLinkGraph: BFS traversal, reachable docs, backlinks
  • Path resolution (relative ../../../ support)
  • 5 unit tests, all passing
  • Export from mem-ingest crate

Phase 2: Scoring Pipeline (SOLID design)

  • DocumentScorer trait (single interface for all scorers)
  • GlobalTfIdfScorer, ProjectTfIdfScorer, SemanticScorer
  • MetadataBoostingScorer (decorator pattern)
  • ScoringPipeline orchestrator with RRF fusion
  • 5 unit tests, all passing
  • Export from mem-core crate

Phase 7: RBAC + PolicyProvider

  • PolicyProvider trait (pluggable backends)
  • VaultPolicyProvider (load YAML from vault/)
  • MockPolicyProvider (testing)
  • AccessChecker trait (single-purpose RBAC)
  • AccessLevelChecker, RoleChecker, PermissionChecker
  • AccessDecisionEngine (orchestrate checkers)
  • AuditLogger trait (pluggable audit)
  • 8 unit tests, all passing
  • Export from mem-cli crate

Test Fixtures (DRY principle)

  • OidcClaimsBuilder (fluent API)
  • AccessPolicyBuilder (fluent API)
  • MockPolicyProvider, MockAuditLogger, ConstantScorer
  • 14 integration tests, all passing
  • Reusable across all test suites

Phase 3: Hybrid Retrieval (Wiki-Nav + TF-IDF + Semantic)

  • HybridRetriever: TF-IDF prefilter + semantic rerank + RRF fusion
  • WikiScopedFilter: BFS wiki-graph traversal
  • RankedCandidate: score struct with TF-IDF, semantic, final scores
  • RetrievalRoute: Direct | WikiScoped | ReferenceOnly
  • 10 unit tests, all passing
  • Export from mem-cli crate

Phase 4: LLM Call Optimization

  • ChunkOptimizer: unified pipeline (threshold + budget + dedup)
  • ScoreThresholdFilter: configurable min_score (default 0.6)
  • BudgetSelector: greedy selection within byte budget
  • ShingleDeduplicator: Jaccard similarity dedup
  • SelectionMetrics: selected/rejected/dedup counts
  • 8 unit tests, all passing
  • Export from mem-cli crate

QueryRouter (Phase 3+4 Integration)

  • QueryRouter: bridges WikiLinkGraph + HybridRetriever + ChunkOptimizer
  • RouterConfig: max_hops, thresholds, budget, RRF weights
  • WikiGraphBuilder: construct graph from markdown docs
  • SelectedChunk: final result with wiki_distance
  • 11 unit tests, all passing
  • Export from mem-cli crate

In Progress 🔄

Phase 5: Chunk Metadata Index

  • MetadataExtractor: heading, key_terms, category inference
  • MetadataBooster: query intent → category boost
  • ChunkCategory: Error | Solution | Tool | Concept | Reference
  • QueryIntent: FixError | LearnConcept | UseTool | FindReference
  • 15 unit tests, all passing
  • Integrated into FullPipeline

Phase 6: Cache Alignment & KV Cache Optimization

  • LruChunkCache: LRU eviction with metrics
  • CacheLocalityAnalyzer: wiki-distance ordering
  • KvCacheAligner: slot assignment, preload
  • RetrievalProfiler: stage timing
  • 12 unit tests, all passing
  • Integrated into FullPipeline

FullPipeline (Phase 1-6 Integration)

  • FullPipeline: complete orchestration of all phases
  • PipelineConfig: unified configuration
  • PipelineBuilder: fluent API for construction
  • EnrichedChunk: fully enriched result with all metadata
  • PipelineMetrics: comprehensive metrics per phase
  • 14 unit tests, all passing
  • Export from mem-cli crate

Hierarchical RBAC System

  • types.rs: Role, AccessRule, AccessScope, ResourceMeta, Verb, Visibility
  • role_provider.rs: RoleProvider trait, YamlRoleProvider, InMemoryRoleProvider
  • scope_checker.rs: ProjectScope, VisibilityScope, OwnerScope, GroupScope
  • access_evaluator.rs: Orchestrates role + scope checks
  • access_guard.rs: Unified API (check_capability, filter_resources)
  • Built-in roles: admin, portfolio-agent, authenticated-user
  • 77 unit tests, 25 integration tests, all passing

HTTP + Retrieval Integration

  • AppState.access_guard: AccessGuard added to HTTP server state
  • to_rbac_claims(): Convert JwtClaims to RBAC Claims
  • query_handler: RBAC filtering on search results
  • context_handler: Project-level access check before lookup
  • query_result_to_resource_meta(): Convert results for RBAC filtering

AuthorizedPipeline (Legacy - deprecated)

  • AuthorizedPipeline: wraps FullPipeline with access control
  • 13 unit tests, all passing
  • ⚠️ Superseded by AccessGuard integration in http_server.rs

Integration Tests

it_phase3_phase4.rs (19 tests)

  • Wiki-link parsing and graph traversal
  • Hybrid retrieval route selection
  • TF-IDF prefiltering + RRF fusion
  • Chunk optimization (threshold, budget, dedup)
  • QueryRouter end-to-end (wiki-scoped + direct)
  • Wiki distance calculation
  • Edge cases (empty, no matches)

it_phase5_phase6.rs (24 tests)

  • Query intent inference (FixError, LearnConcept, UseTool, FindReference)
  • Category inference (Error, Solution, Tool, Concept, Reference)
  • Metadata boost based on intent-category match
  • LRU cache operations (put, get, eviction)
  • Cache locality and slot assignment
  • Full pipeline with wiki-graph
  • Full pipeline direct mode
  • Edge cases (empty, no matches, unknown intent)

it_authorized_pipeline.rs (16 tests)

  • Project access: public, group, private policies
  • Role and permission requirements
  • Skill filtering by access policy
  • Multi-group membership
  • Access stats population
  • End-to-end with RBAC
  • Denied project returns error

it_rbac_hierarchical.rs (25 tests)

  • Admin/portfolio-agent/authenticated-user roles
  • Custom role definition with scopes
  • Capability checks (HTTP layer)
  • Resource filtering (retrieval layer)
  • Visibility/project/owner scopes
  • Audit logging
  • Real-world scenarios (visitor, developer, admin)

Not Started

Production Integration

  • Connect FullPipeline to pgvector
  • Connect FullPipeline to OpenSearch
  • Real embedding generation
  • Performance benchmarks
  • Homelab test vault setup

Architecture Decisions Made

Decision Rationale
Trait-based design Pluggable: swap scorers/providers without code changes
Decorator pattern Composition over inheritance (MetadataBoostingScorer)
ScoringPipeline Unifies all scoring variants (global, project, semantic)
PolicyProvider trait Support Vault/Postgres/Redis transparently
AccessChecker composition Split fat method into 3 single-purpose checkers
Test fixtures builders DRY: reusable OidcClaimsBuilder, AccessPolicyBuilder
MockPolicyProvider Fast, no-I/O testing without Vault dependency

Code Locations

Implementation:
  crates/mem-ingest/src/wiki_link.rs              (Phase 1)
  crates/mem-core/src/scoring.rs                  (Phase 2)
  crates/mem-cli/src/hybrid_retrieval.rs          (Phase 3)
  crates/mem-cli/src/chunk_optimizer.rs           (Phase 4)
  crates/mem-cli/src/query_router.rs              (Phase 3+4 integration)
  crates/mem-cli/src/chunk_metadata.rs            (Phase 5)
  crates/mem-cli/src/cache_alignment.rs           (Phase 6)
  crates/mem-cli/src/query_orchestrator.rs        (Legacy orchestration)
  crates/mem-cli/src/full_pipeline.rs             (Phase 1-6 unified pipeline)
  crates/mem-cli/src/authorized_pipeline.rs       (Legacy RBAC wrapper)
  crates/mem-cli/src/rbac/
    types.rs                                       (Core RBAC types)
    role_provider.rs                               (Role loading)
    scope_checker.rs                               (Scope evaluation)
    access_evaluator.rs                            (Access orchestration)
    access_guard.rs                                (Unified API)                        (Phase 7)
    ├─ policy_provider.rs
    ├─ access_checker.rs
    └─ mod.rs

Tests:
  crates/mem-ingest/src/wiki_link.rs#[cfg(test)]  (5 tests)
  crates/mem-core/src/scoring.rs#[cfg(test)]      (5 tests)
  crates/mem-cli/src/hybrid_retrieval.rs#[cfg(test)] (10 tests)
  crates/mem-cli/src/chunk_optimizer.rs#[cfg(test)]  (8 tests)
  crates/mem-cli/src/query_router.rs#[cfg(test)]     (11 tests)
  crates/mem-cli/src/chunk_metadata.rs#[cfg(test)]   (15 tests)
  crates/mem-cli/src/cache_alignment.rs#[cfg(test)]  (12 tests)
  crates/mem-cli/src/rbac/*.rs#[cfg(test)]           (8 tests)
  tests/fixtures/                                    (builders & mocks)
  tests/it_fixtures.rs                               (14 tests)
  tests/it_phase3_phase4.rs                          (19 tests)
  tests/it_phase5_phase6.rs                          (24 tests)
  tests/it_authorized_pipeline.rs                    (16 tests)
  tests/it_rbac_hierarchical.rs                      (25 tests)

Documentation:
  docs/memory-wiki-graph-rag-optimization.md      (design + implementation)

Next Steps (Priority Order)

Immediate (Today/Tomorrow)

  1. Production Backend Integration
    • Connect FullPipeline to pgvector
    • Connect FullPipeline to OpenSearch
    • Real embedding generation

Near-term (This week)

  1. Performance Benchmarking

    • Create homelab vault structure (test data)
    • Benchmark retrieval latency (target < 500ms)
    • Benchmark LLM call reduction (target 70-80%)
    • Benchmark chunk accuracy (target NDCG > 0.85)
  2. Production Integration

    • Connect to pgvector for semantic search
    • Connect to OpenSearch for lexical search
    • Verify hybrid search accuracy

Later (Next week+)

  1. Full Integration Testing
    • End-to-end scenarios: agent query → wiki-scoped search → RBAC filtering → LLM
    • Test failures (auth denied, policy mismatch, etc.)
    • Test graceful degradation (Obsidian unreachable, cache miss, etc.)

Test Statistics

Module Unit Tests Passing Coverage
wiki_link 5 5 100%
scoring 5 5 100%
hybrid_retrieval 10 10 100%
chunk_optimizer 8 8 100%
query_router 11 11 100%
chunk_metadata 15 15 100%
cache_alignment 12 12 100%
rbac 8 8 100%
fixtures 14 14 100%
it_phase3_phase4 19 19 100%
it_phase5_phase6 24 24 100%
full_pipeline 14 14 100%
authorized_pipeline 13 13 100%
it_authorized_pipeline 16 16 100%
rbac (unit) 77 77 100%
it_rbac_hierarchical 25 25 100%
Total 660+ 660+ 100%

Known Limitations (To Address)

  1. ScoringPipeline: placeholder for semantic/pgvector (not yet connected)
  2. VaultPolicyProvider: doesn't reload on file change (hot-reload TBD)
  3. AccessDecisionEngine: no timeout on checker execution (TBD)
  4. Test fixtures: MockPolicyProvider uses sync Mutex (should be Arc)
  5. No benchmarks yet: latency/throughput targets TBD

How to Run Tests

# All tests
cargo test

# Specific module
cargo test -p mem-ingest wiki_link
cargo test -p mem-core scoring
cargo test -p mem-cli rbac
cargo test --test it_fixtures

# With output
cargo test -- --nocapture --test-threads=1

How to Build

cargo build          # Debug
cargo build --release  # Release
cargo check          # Quick check (no linking)

Git History

f31397b  fix: add test fixtures integration tests
eb36895  feat: implement core architecture modules
513e79a  docs: merge ARCHITECTURE_REFACTORING
...

View commits:

git log --oneline | head -10

Questions / Blockers

None currently. Architecture is solid, tests pass, ready to extend.