diff --git a/README.md b/README.md index 04f30ba5..8e0ccc1e 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,6 @@ USER_ENABLED=TRUE USER_HOST=localhost USER_PORT=3200 JWT_SECRET_KEY=key -SESSION_SECRET_KEY=key GOOGLE_CLIENT.ID=key GOOGLE_CLIENT.SECRET=key GOOGLE_REDIRECT.URI=http://localhost:3200/auth/callback diff --git a/TODO.md b/TODO.md index 66ec2325..06ef7a4d 100644 --- a/TODO.md +++ b/TODO.md @@ -1,3 +1,10 @@ +- [X] cache ttl +- [ ] nginx scaling +- [ ] wallet endpoints +- [ ] uvicorn scaling + +--- + - [ ] Github OAuth - [ ] Implement an user management system so the user can customize its name, change password, profile picture and settings - [ ] Make an Password Recovery system and 2FA using the Email Protocol diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index 2d2d65d6..6afb4898 100644 --- a/graphify-out/.graphify_labels.json +++ b/graphify-out/.graphify_labels.json @@ -575,14 +575,47 @@ "573": "Community 573", "574": "Community 574", "575": "Community 575", + "576": "Community 576", "577": "Community 577", + "578": "Community 578", + "579": "Community 579", "580": "Community 580", "581": "Community 581", "582": "Community 582", "583": "Community 583", "584": "Community 584", + "585": "Community 585", + "586": "Community 586", "587": "Community 587", + "588": "Community 588", + "589": "Community 589", "590": "Community 590", + "591": "Community 591", + "592": "Community 592", + "593": "Community 593", + "594": "Community 594", "595": "Community 595", - "596": "Community 596" + "596": "Community 596", + "597": "Community 597", + "598": "Community 598", + "599": "Community 599", + "600": "Community 600", + "601": "Community 601", + "602": "Community 602", + "603": "Community 603", + "604": "Community 604", + "605": "Community 605", + "606": "Community 606", + "607": "Community 607", + "608": "Community 608", + "609": "Community 609", + "610": "Community 610", + "611": "Community 611", + "612": "Community 612", + "614": "Community 614", + "615": "Community 615", + "616": "Community 616", + "617": "Community 617", + "618": "Community 618", + "619": "Community 619" } diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index 4c481c3a..d738e43a 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - server (2026-09-29) ## Corpus Check -- 127 files · ~77,655 words +- 135 files · ~103,084 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 6269 nodes · 8527 edges · 586 communities (355 shown, 231 thin omitted) -- Extraction: 84% EXTRACTED · 16% INFERRED · 0% AMBIGUOUS · INFERRED: 1328 edges (avg confidence: 0.69) +- 6630 nodes · 8878 edges · 619 communities (386 shown, 233 thin omitted) +- Extraction: 85% EXTRACTED · 15% INFERRED · 0% AMBIGUOUS · INFERRED: 1329 edges (avg confidence: 0.69) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `09a23108` +- Built from commit: `e7ac7432` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -516,6 +516,7 @@ - [[_COMMUNITY_Community 508|Community 508]] - [[_COMMUNITY_Community 509|Community 509]] - [[_COMMUNITY_Community 510|Community 510]] +- [[_COMMUNITY_Community 511|Community 511]] - [[_COMMUNITY_Community 512|Community 512]] - [[_COMMUNITY_Community 517|Community 517]] - [[_COMMUNITY_Community 518|Community 518]] @@ -576,16 +577,49 @@ - [[_COMMUNITY_Community 573|Community 573]] - [[_COMMUNITY_Community 574|Community 574]] - [[_COMMUNITY_Community 575|Community 575]] +- [[_COMMUNITY_Community 576|Community 576]] - [[_COMMUNITY_Community 577|Community 577]] +- [[_COMMUNITY_Community 578|Community 578]] +- [[_COMMUNITY_Community 579|Community 579]] - [[_COMMUNITY_Community 580|Community 580]] - [[_COMMUNITY_Community 581|Community 581]] - [[_COMMUNITY_Community 582|Community 582]] - [[_COMMUNITY_Community 583|Community 583]] - [[_COMMUNITY_Community 584|Community 584]] +- [[_COMMUNITY_Community 585|Community 585]] +- [[_COMMUNITY_Community 586|Community 586]] - [[_COMMUNITY_Community 587|Community 587]] +- [[_COMMUNITY_Community 588|Community 588]] +- [[_COMMUNITY_Community 589|Community 589]] - [[_COMMUNITY_Community 590|Community 590]] +- [[_COMMUNITY_Community 591|Community 591]] +- [[_COMMUNITY_Community 592|Community 592]] +- [[_COMMUNITY_Community 593|Community 593]] +- [[_COMMUNITY_Community 594|Community 594]] - [[_COMMUNITY_Community 595|Community 595]] - [[_COMMUNITY_Community 596|Community 596]] +- [[_COMMUNITY_Community 597|Community 597]] +- [[_COMMUNITY_Community 598|Community 598]] +- [[_COMMUNITY_Community 599|Community 599]] +- [[_COMMUNITY_Community 600|Community 600]] +- [[_COMMUNITY_Community 601|Community 601]] +- [[_COMMUNITY_Community 602|Community 602]] +- [[_COMMUNITY_Community 603|Community 603]] +- [[_COMMUNITY_Community 604|Community 604]] +- [[_COMMUNITY_Community 605|Community 605]] +- [[_COMMUNITY_Community 606|Community 606]] +- [[_COMMUNITY_Community 607|Community 607]] +- [[_COMMUNITY_Community 608|Community 608]] +- [[_COMMUNITY_Community 609|Community 609]] +- [[_COMMUNITY_Community 610|Community 610]] +- [[_COMMUNITY_Community 611|Community 611]] +- [[_COMMUNITY_Community 612|Community 612]] +- [[_COMMUNITY_Community 614|Community 614]] +- [[_COMMUNITY_Community 615|Community 615]] +- [[_COMMUNITY_Community 616|Community 616]] +- [[_COMMUNITY_Community 617|Community 617]] +- [[_COMMUNITY_Community 618|Community 618]] +- [[_COMMUNITY_Community 619|Community 619]] ## God Nodes (most connected - your core abstractions) 1. `vocab` - 456 edges @@ -606,10 +640,10 @@ main/app/stocks_api/cache.py → tests/test_stocks_api_coverage.py - `StocksCacheManager` --calls--> `test_cache_scheduler_starts_daemon_thread()` [INFERRED] main/app/stocks_api/cache.py → tests/test_stocks_api_coverage.py -- `DiscordHandler` --uses--> `TestSetupLogging` [INFERRED] - main/utils/logging_config.py → tests/test_logging_config_coverage.py - `HarnessState` --uses--> `TestGetState` [INFERRED] main/app/prometheus/state.py → tests/test_state_tools.py +- `HarnessState` --uses--> `TestSetState` [INFERRED] + main/app/prometheus/state.py → tests/test_state_tools.py ## Hyperedges (group relationships) - **Authentication Module** — AuthenticationManager, SessionManager, auth_util, auth_constants, getGoogleSSO [INFERRED] @@ -619,7 +653,7 @@ - **Configuration & Database Infrastructure** — config_Config, config_engine, config_stocksEngine [INFERRED] - **User Authentication & Authorization** — user_service, authentication, user_roles, permission_system [INFERRED] -## Communities (586 total, 231 thin omitted) +## Communities (619 total, 233 thin omitted) ### Community 0 - "Stocks API Endpoints" Cohesion: 0.0 @@ -670,28 +704,28 @@ Cohesion: 0.05 Nodes (42): Code Review Report — Final, H1. Session Cookies Over HTTP, H2. Service → Controller Layer Violations, H3. Bare `except:` Blocks in Scraper, H4. Full DataFrame Copy Per Request, H5. Missing Database Indexes, H6. Scraper N+1 HTTP Pattern, H7. Raw `SessionLocal()` Bypassing DI (+34 more) ### Community 12 - "Frontend App Shell" -Cohesion: 0.06 -Nodes (18): LoopEvent, LoopEvent model for observable agent loops., LoopLogger, LoopLogger — batched event logging for observable agent loops., Queue events during a loop, flush to DB at end., Log a generic event with optional metadata., Log a tool invocation., Log end of a turn with timing. (+10 more) +Cohesion: 0.08 +Nodes (13): LoopEvent, LoopEvent model for observable agent loops., LoopLogger, LoopLogger — batched event logging for observable agent loops., Queue events during a loop, flush to DB at end., Log a generic event with optional metadata., Log a tool invocation., Log end of a turn with timing. (+5 more) ### Community 13 - "Prometheus Tools" -Cohesion: 0.13 -Nodes (21): benchOnce(), main(), fullTextSearch(), minMax(), scoreCandidates(), scoreRecency(), scoreRow(), search() (+13 more) +Cohesion: 0.06 +Nodes (31): code:python ("""Measure whether the stocks query hot path is GIL-bound.), code:bash (git add main/utils/migrator.py tests/test_migrator_guard.py), code:python (import importlib), code:python (DB_POOL_SIZE = int(os.getenv("DB_POOL_SIZE", "20"))), code:bash (git add config.py tests/test_config_pools.py), code:python (import importlib), code:python (if __name__ == "__main__":), code:python (if len(instances) > 1 and fcntl is None: # pragma: no cover) (+23 more) ### Community 14 - "User Roles & Permissions" -Cohesion: 0.05 -Nodes (35): _make_stocksapi_client(), Covers line 35: GET /stocks/historical., Covers line 35: GET /stocks/historical., Covers line 35: GET /stocks/historical., Covers line 35: GET /stocks/historical., Covers line 47: GET /stocks/fundamental., Covers line 47: GET /stocks/fundamental., Covers line 47: GET /stocks/fundamental. (+27 more) +Cohesion: 0.06 +Nodes (28): _make_stocksapi_client(), Covers line 35: GET /stocks/historical., Covers line 35: GET /stocks/historical., Covers line 35: GET /stocks/historical., Covers line 35: GET /stocks/historical., Covers line 47: GET /stocks/fundamental., Covers line 47: GET /stocks/fundamental., Covers line 47: GET /stocks/fundamental. (+20 more) ### Community 15 - "Community 15" Cohesion: 0.05 Nodes (38): code:block1 (User 123: "Analyze PETR4 vs VALE3 correlation"), code:python (from main.app.prometheus.sandbox import SandboxManager), code:python (TOOL_REGISTRY: dict[str, Any] = {), code:bash (git add main/app/prometheus/tools.py tests/test_sandbox_tool), code:python (import pytest), code:python (from main.app.prometheus.sandbox import SandboxManager), code:python (async def streamMessage(self, query=None, sessionId=None, db), code:python (## Code Sandbox (On-Demand)) (+30 more) ### Community 16 - "Community 16" -Cohesion: 0.07 -Nodes (24): Covers lines 114-115, 117-120, 122, 125: POST /prometheus/chat., Covers lines 114-115, 117-120, 122, 125: POST /prometheus/chat., Covers lines 111-112: sessionId is None, new session created., Covers lines 111-112: sessionId is None, new session created., Covers lines 109-136: POST /prometheus/chat/stream (SSE)., Covers lines 118-119: sessionId is None, new session created., Covers lines 114-115, 117-120, 122: existing session with verified ownership., Covers lines 114-115, 117-120, 122: existing session with verified ownership. (+16 more) +Cohesion: 0.15 +Nodes (18): executeStateTool(), get_state(), Retrieve values from the harness state. Use this to recall intermediate results,, Retrieve values from the harness state. Use this to recall intermediate results,, Retrieve values from the harness state. Use this to recall intermediate results,, Retrieve values from the harness state. Use this to recall intermediate results,, test_dispatch_get_state(), test_dispatch_set_state() (+10 more) ### Community 17 - "Community 17" -Cohesion: 0.11 -Nodes (17): Multiple search terms with tickerIndex., Multiple search terms with tickerIndex., Multiple search terms with tickerIndex., Search with no index match falls back to string startswith., Search with no index match falls back to string startswith., Search with no index match falls back to string startswith., Multiple search terms with tickerIndex., Multiple search terms with tickerIndex. (+9 more) +Cohesion: 0.05 +Nodes (40): Invalid date -> inner 400 passes through (not wrapped as 500)., Invalid date -> inner 400 caught by outer except -> 500., Invalid date -> inner 400 caught by outer except -> 500., Invalid date -> inner 400 caught by outer except -> 500., search.strip() == '' should still dedup (line 181)., search.strip() == '' should still dedup (line 181)., Invalid date -> inner 400 caught by outer except -> 500., Invalid date -> inner 400 caught by outer except -> 500. (+32 more) ### Community 18 - "Community 18" Cohesion: 0.07 @@ -706,12 +740,12 @@ Cohesion: 0.06 Nodes (35): 1. Memory System (B+), 2. Summarizer/Episodes (B), 3. Loop Events (A-), 4. Core Architecture (B+), 5. Security (B+), 6. Performance (B), 7. Code Quality (B), After (B+) (+27 more) ### Community 21 - "Community 21" -Cohesion: 0.12 -Nodes (4): B3Scraper, getCurrentSelic(), getInitialData(), calculateInvestingScore() +Cohesion: 0.14 +Nodes (3): getCurrentSelic(), getInitialData(), calculateInvestingScore() ### Community 22 - "Community 22" -Cohesion: 0.1 -Nodes (13): filterCotationColumn(), Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., GET /cotations without search returns 422., GET /cotations without search returns 422. (+5 more) +Cohesion: 0.14 +Nodes (7): filterCotationColumn(), Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., Tests for queryLiveCotation and /stocks/cotations/live., TestQueryLiveCotation ### Community 23 - "Community 23" Cohesion: 0.07 @@ -726,8 +760,8 @@ Cohesion: 0.06 Nodes (13): Tests for input validation via HTTP endpoints. Validation is now inline via Bod, PUT /prometheus/sessions/{sessionId} — validates title via Body(...), POST /prometheus/chat/stream — validates query via Body(...), POST /auth/register — validates username, email, password via Body(...), Test that endpoints reject requests with missing required fields., POST /auth/login — validates username, password via Body(...), POST /prometheus/sessions — validates title via Body(...), TestChatValidation (+5 more) ### Community 26 - "Community 26" -Cohesion: 0.08 -Nodes (27): _hash_key(), hashKey(), Return SHA-256 hex digest of the given key., dbSession(), Tests for atomic API key quota enforcement (race condition fix). Verifies tha, Test that concurrent requests are properly serialized at DB level. Th, Test edge case: request exactly at quota limit., Test edge case: request exactly at quota limit. (+19 more) +Cohesion: 0.12 +Nodes (20): createKey(), _hash_key(), hashKey(), Return SHA-256 hex digest of the given key., Test that concurrent requests are properly serialized at DB level. Th, Test edge case: request exactly at quota limit., Test edge case: request exactly at quota limit., Test that increment works from zero usage. (+12 more) ### Community 27 - "Community 27" Cohesion: 0.15 @@ -755,7 +789,7 @@ Nodes (12): ToolContext — bundles all dependencies for tool execution. Replac ### Community 33 - "Community 33" Cohesion: 0.12 -Nodes (13): BaseHTTPMiddleware, Tests for standardized error responses (errors.py)., SampleBody, TestErrorResponseModel, TestGenericExceptionHandler, TestHTTPExceptionHandler, TestRequestContextFilter, TestSuccessPassthrough (+5 more) +Nodes (14): BaseHTTPMiddleware, app(), Tests for standardized error responses (errors.py)., SampleBody, TestErrorResponseModel, TestGenericExceptionHandler, TestHTTPExceptionHandler, TestRequestContextFilter (+6 more) ### Community 34 - "Community 34" Cohesion: 0.11 @@ -778,8 +812,8 @@ Cohesion: 0.07 Nodes (27): code:json ([), code:javascript (const loadHistory = async (sid) => {), code:jsx (export default function MessageList({ messages, toolEvents, ), code:javascript (const loadHistory = async (sid) => {), code:jsx (export default function AgentLoop({ toolEvents, turnMetrics ), code:bash (git add frontend/src/App.jsx frontend/src/components/Message), code:bash (docker-compose up -d --build), code:sql (SELECT COUNT(*) FROM prometheus WHERE JSON_CONTAINS_PATH(his) (+19 more) ### Community 39 - "Community 39" -Cohesion: 0.05 -Nodes (40): Invalid date -> inner 400 passes through (not wrapped as 500)., Invalid date -> inner 400 caught by outer except -> 500., Invalid date -> inner 400 caught by outer except -> 500., Invalid date -> inner 400 caught by outer except -> 500., search.strip() == '' should still dedup (line 181)., search.strip() == '' should still dedup (line 181)., Invalid date -> inner 400 caught by outer except -> 500., Invalid date -> inner 400 caught by outer except -> 500. (+32 more) +Cohesion: 0.11 +Nodes (17): Multiple search terms with tickerIndex., Multiple search terms with tickerIndex., Multiple search terms with tickerIndex., Search with no index match falls back to string startswith., Search with no index match falls back to string startswith., Search with no index match falls back to string startswith., Multiple search terms with tickerIndex., Multiple search terms with tickerIndex. (+9 more) ### Community 40 - "Community 40" Cohesion: 0.12 @@ -794,8 +828,8 @@ Cohesion: 0.09 Nodes (16): StocksCacheManager, Tests for dynamic ticker index feature, Ticker index should be built when cache is loaded, Ticker index should contain all tickers from cache, Ticker index should be case-insensitive, Looking up ticker should return valid row index, Ticker index should be rebuilt when cache refreshes, TestTickerIndex (+8 more) ### Community 43 - "Community 43" -Cohesion: 0.11 -Nodes (10): Authentication System, createUserAccount(), createAccessToken(), hashPassword(), verifyPassword(), Google OAuth, JWT Authentication, TestAuthUtil (+2 more) +Cohesion: 0.15 +Nodes (5): authenticateUser(), hashPassword(), verifyPassword(), TestAuthUtil, TestAuthUtilEdgeCases ### Community 44 - "Community 44" Cohesion: 0.14 @@ -803,7 +837,7 @@ Nodes (3): UserSession, TestSessionExpiration, TestUserSessionModel ### Community 45 - "Community 45" Cohesion: 0.06 -Nodes (27): BaseModel, IntFlag, OrunmilaChatManager, MemoryCandidate, OrunmilaMemory, MemoryCandidate, Config, Covers line 28: GET /auth/health. (+19 more) +Nodes (29): Covers line 16: empty password raises ValueError., Covers line 16: empty password raises ValueError., Covers line 16: empty password raises ValueError., Covers line 16: empty password raises ValueError., Covers line 16: empty password raises ValueError., Covers line 13: UserManager.__init__., Covers line 13: UserManager.__init__., Covers line 13: UserManager.__init__. (+21 more) ### Community 46 - "Community 46" Cohesion: 0.09 @@ -818,8 +852,8 @@ Cohesion: 0.06 Nodes (34): Backend (COMMIT), code:bash (cd frontend && pnpm add @openuidev/react-lang), code:bash (rm frontend/src/components/MdocMessage.jsx), code:python ("""OpenUI Lang system prompt section for Prometheus agent.), code:block12, code:block13, code:block14, code:block15 (+26 more) ### Community 49 - "Community 49" -Cohesion: 0.09 -Nodes (24): dispatchToolCall(), TDD tests: verify memory tools are wired into the Prometheus agent. RED: Thes, makeChat must include MEMORY_TOOLS alongside MCP sessions., makeChat must include MEMORY_TOOLS alongside MCP sessions., makeChat must include MEMORY_TOOLS alongside MCP sessions., makeChat must include MEMORY_TOOLS alongside MCP sessions., makeChat must include MEMORY_TOOLS alongside MCP sessions., test_memory_tool_skipped_without_user() (+16 more) +Cohesion: 0.13 +Nodes (18): dispatchToolCall(), TDD tests: verify memory tools are wired into the Prometheus agent. RED: Thes, test_memory_tool_skipped_without_user(), test_non_memory_tool_not_routed_to_executeMemoryTool(), test_non_registry_tool_not_routed(), test_save_memory_routed_to_executeMemoryTool(), test_save_memory_routed_via_registry(), test_search_memory_routed_to_executeMemoryTool() (+10 more) ### Community 50 - "Community 50" Cohesion: 0.07 @@ -834,12 +868,12 @@ Cohesion: 0.08 Nodes (7): Cover all methods in chat.py (lines 11-120)., Cover all methods in chat.py (lines 11-120)., Cover all methods in chat.py (lines 11-120)., Cover all methods in chat.py (lines 11-120)., Cover all methods in chat.py (lines 11-120)., Cover all methods in chat.py (lines 11-120)., TestPrometheusChatManager ### Community 53 - "Community 53" -Cohesion: 0.11 -Nodes (29): applyUpdate(), archiveDead(), clearAll(), clearAllAsync(), count_memories(), countMemories(), decayScores(), deleteMemory() (+21 more) +Cohesion: 0.1 +Nodes (39): applyUpdate(), archiveDead(), clearAll(), clearAllAsync(), count_memories(), countMemories(), countTokensCached(), decayScores() (+31 more) ### Community 54 - "Community 54" -Cohesion: 0.2 -Nodes (10): listFields(), Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental. (+2 more) +Cohesion: 0.33 +Nodes (10): compactCotations(), compactRow(), compactValue(), compressResponse(), fixHeaders(), getAbbr(), getNest(), rebuildAbbrevs() (+2 more) ### Community 55 - "Community 55" Cohesion: 0.11 @@ -855,7 +889,7 @@ Nodes (15): Performance benchmark tests for stocks API, Performance benchmark te ### Community 58 - "Community 58" Cohesion: 0.15 -Nodes (16): getGoogleSSO(), googleCallback(), googleLogin(), isSecureScheme(), issueSessionCookie(), login(), logout(), register() (+8 more) +Nodes (17): getGoogleSSO(), createAccessToken(), googleCallback(), googleLogin(), isSecureScheme(), issueSessionCookie(), login(), logout() (+9 more) ### Community 59 - "Community 59" Cohesion: 0.17 @@ -874,8 +908,8 @@ Cohesion: 0.1 Nodes (20): architectures, attention_probs_dropout_prob, gradient_checkpointing, hidden_act, hidden_dropout_prob, hidden_size, initializer_range, intermediate_size (+12 more) ### Community 63 - "Community 63" -Cohesion: 0.28 -Nodes (4): Shared query pipeline for historical and fundamental endpoints., Fetch live prices for B3 tickers via yfinance. B3 tickers must match, sanitizeNanValues(), StocksQueryManager +Cohesion: 0.24 +Nodes (5): Store a value in state. Marks state as changed for context injection., Shared query pipeline for historical and fundamental endpoints., Fetch live prices for B3 tickers via yfinance. B3 tickers must match, sanitizeNanValues(), StocksQueryManager ### Community 64 - "Community 64" Cohesion: 0.06 @@ -894,8 +928,8 @@ Cohesion: 0.08 Nodes (11): Verify memory endpoints exist and are wired correctly., GET /prometheus/memories exists., POST /memories rejects missing key., POST /memories rejects missing value., POST /prometheus/memories exists., DELETE /prometheus/memories/{id} exists., GET /memories requires authentication., GET /memories requires USE_PROMETHEUS (basic USER role denied). (+3 more) ### Community 68 - "Community 68" -Cohesion: 0.11 -Nodes (20): authenticateUser(), AuthenticationManager, SessionManager, PrometheusChatManager, Cover getGoogleSSO (lines 6-14)., Cover getGoogleSSO (lines 6-14)., Cover __init__ and updateDates., Cover __init__ and updateDates (lines 22-37). (+12 more) +Cohesion: 0.23 +Nodes (6): chat_stream(), downloadWorkspaceFile(), getHistory(), resumeChatStream(), updateSessionTitle(), verifySessionOwnsership() ### Community 69 - "Community 69" Cohesion: 0.22 @@ -910,8 +944,8 @@ Cohesion: 0.11 Nodes (19): API Key System, B3 Scraper, Fundamental Data, Gemini Model, Historical Data, Ma'at Stock Algorithm, Mansa Server, MySQL Database (+11 more) ### Community 72 - "Community 72" -Cohesion: 0.15 -Nodes (12): initialize(), P5: register memory maintenance on the shared scheduler. Kept in this ser, registerMemoryMaintenanceJob(), initialize(), P5: register the session-cleanup job on the shared scheduler. Kept in thi, registerSessionCleanupJobs(), UserService, getSharedScheduler() (+4 more) +Cohesion: 0.19 +Nodes (9): initialize(), P5: register the session-cleanup job on the shared scheduler. Kept in thi, registerSessionCleanupJobs(), UserService, getSharedScheduler(), P5: single shared BackgroundScheduler for all services. Replaces the 4 per-serv, Return the process-wide scheduler, starting it on first use., Register func on the shared scheduler (replaces any same-id job). trigger i (+1 more) ### Community 73 - "Community 73" Cohesion: 0.19 @@ -942,16 +976,16 @@ Cohesion: 0.05 Nodes (44): cn(), AlertDialogAction(), AlertDialogCancel(), AlertDialogContent(), AlertDialogDescription(), AlertDialogFooter(), AlertDialogHeader(), AlertDialogMedia() (+36 more) ### Community 80 - "Community 80" -Cohesion: 0.1 -Nodes (22): buildSummary(), charCount(), countTokens(), dedup(), extractDecisions(), extractMetrics(), extractSnapshots(), extractTickers() (+14 more) +Cohesion: 0.14 +Nodes (19): buildSummary(), charCount(), countTokens(), dedup(), extractDecisions(), extractMetrics(), extractSnapshots(), extractTickers() (+11 more) ### Community 81 - "Community 81" -Cohesion: 0.17 -Nodes (12): getLiveCotation(), Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th (+4 more) +Cohesion: 0.15 +Nodes (13): getLiveCotation(), Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th, Get real-time price quotation for a single Brazilian B3 stock. Returns th (+5 more) ### Community 82 - "Community 82" -Cohesion: 0.16 -Nodes (13): arrowTypeFor(), buildCotationDateIndex(), buildFeatherCache(), buildTickerIndex(), optimizeDtypes(), P1: establish the sorted-cache invariant once at load/refresh. Sorts by (, P1: first-occurrence index over a sortCacheFrame-sorted frame. The cache, Get cached stocks data with optional column filtering. (+5 more) +Cohesion: 0.11 +Nodes (16): arrowTypeFor(), buildCotationDateIndex(), buildFeatherCache(), buildTickerIndex(), optimizeDtypes(), P1: establish the sorted-cache invariant once at load/refresh. Sorts by (, P1: first-occurrence index over a sortCacheFrame-sorted frame. The cache, Get cached stocks data with optional column filtering. (+8 more) ### Community 83 - "Community 83" Cohesion: 0.1 @@ -966,8 +1000,8 @@ Cohesion: 0.21 Nodes (16): AddDividendDialog(), fmtBRL(), AddLotDialog(), HoldingSearchBox(), matchHoldings(), assertDividendTotal(), assertNotFuture(), assertTicker() (+8 more) ### Community 86 - "Community 86" -Cohesion: 0.12 -Nodes (10): Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Tests covering query.py lines 50-67., Tests covering query.py lines 50-67., Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Tests covering query.py lines 50-67., Tests covering query.py lines 50-67. (+2 more) +Cohesion: 0.08 +Nodes (24): code:python (def test_build_requests_presorted_rows(monkeypatch, tmp_path), code:python (def test_read_feather_dataframe_uses_arrow_backed_columns(tm), code:python (from pyarrow import feather), code:python (def readFeatherDataFrame(path) -> tuple[pd.DataFrame, bool]:), code:python (df, presorted = readFeatherDataFrame(CACHE_FEATHER_PATH)), code:bash (git add main/app/stocks_api/cache.py tests/test_stocks_cache), code:python (def test_deserialize_jsoncolumns_handles_arrowdtype_binary()), code:python (if col in JSON_COLUMNS and (df[col].dtype == "object" or pd.) (+16 more) ### Community 87 - "Community 87" Cohesion: 0.1 @@ -994,8 +1028,8 @@ Cohesion: 0.09 Nodes (21): aliases, components, hooks, lib, ui, utils, iconLibrary, menuAccent (+13 more) ### Community 93 - "Community 93" -Cohesion: 0.12 -Nodes (10): System prompt should instruct LLM about harness state usage., System prompt should instruct LLM about harness state usage., System prompt should instruct LLM about harness state usage., System prompt should instruct LLM about memory vs state., System prompt should instruct LLM about memory vs state., System prompt should instruct LLM about memory vs state., System prompt should instruct LLM about memory vs state., TestSendMessageStateIntegration (+2 more) +Cohesion: 0.11 +Nodes (11): Pytest Testing, System prompt should instruct LLM about harness state usage., System prompt should instruct LLM about harness state usage., System prompt should instruct LLM about harness state usage., System prompt should instruct LLM about memory vs state., System prompt should instruct LLM about memory vs state., System prompt should instruct LLM about memory vs state., System prompt should instruct LLM about memory vs state. (+3 more) ### Community 94 - "Community 94" Cohesion: 0.12 @@ -1018,19 +1052,19 @@ Cohesion: 0.28 Nodes (6): extractTokenPayload(), Tests for extractTokenPayload — the standalone token extraction dependency., Create a mock Starlette Request with given headers., Authorization: Bearer (empty) — no token after Bearer., Authorization: Basic xxx — not Bearer, so no token found., TestExtractTokenPayload ### Community 99 - "Community 99" -Cohesion: 0.06 -Nodes (29): _make_prometheus_client(), Return (client, app) with prometheus router and mocked deps., Covers lines 33-36: GET /prometheus/sessions., Covers lines 33-36: GET /prometheus/sessions., Covers lines 33-36: GET /prometheus/sessions., Covers line 52: POST /prometheus/sessions., Covers line 52: POST /prometheus/sessions., Covers line 52: POST /prometheus/sessions. (+21 more) +Cohesion: 0.1 +Nodes (17): Covers lines 62-63, 65-68: PUT /prometheus/sessions/{sessionId}., Covers lines 62-63, 65-68: PUT /prometheus/sessions/{sessionId}., Covers lines 65-68: title updated successfully., Covers lines 65-68: title updated successfully., Covers lines 62-63, 65-68: PUT /prometheus/sessions/{sessionId}., Covers lines 65-68: title updated successfully., Covers lines 62-63: not the session owner., Covers lines 62-63: not the session owner. (+9 more) ### Community 100 - "Community 100" -Cohesion: 0.07 -Nodes (13): _assert_gemini_safe(), Every function in TOOL_REGISTRY must have Gemini-safe signatures. Custom cl, Every function in TOOL_REGISTRY must have Gemini-safe signatures. Custom cl, Regression: HarnessState must never leak into tool signatures., Regression: HarnessState must never leak into tool signatures., Assert a tool function has only Gemini-compatible parameter types., Assert a tool function has only Gemini-compatible parameter types., test_get_state_no_state_returns_error() (+5 more) +Cohesion: 0.16 +Nodes (6): _assert_gemini_safe(), Assert a tool function has only Gemini-compatible parameter types., Assert a tool function has only Gemini-compatible parameter types., test_get_state_no_state_returns_error(), test_tool_has_gemini_safe_signature(), TestStateToolFunctions ### Community 101 - "Community 101" -Cohesion: 0.17 -Nodes (7): Different query parameters should not share cache, Cache should expire after TTL, Tests for query result caching, CacheManager should track cached queries, Query cache should have configurable TTL, getCachedStocks should support column filtering, TestQueryCaching +Cohesion: 0.07 +Nodes (20): Tests for connection pool configuration, Stocks engine should have optimized pool settings, Tests for lazy JSON deserialization, Query manager should have deserialize method, Integration tests for all query optimizations, All optimizations should be implemented, Query filter should use ticker index, Tests for optimized search filtering (+12 more) ### Community 102 - "Community 102" -Cohesion: 0.12 +Cohesion: 0.11 Nodes (11): BaseSettings, BaseMansaSettings, DiscordSettings, MysqlSettings, OrunmilaSettings, PrometheusSettings, ScraperSettings, StocksApiSettings (+3 more) ### Community 103 - "Community 103" @@ -1038,12 +1072,12 @@ Cohesion: 0.13 Nodes (14): 10. Performance, 11. Testing, 12. Risks, 13. Out of Scope (YAGNI), 14. Open Questions, 1. Executive Summary, 2. Context & Motivation, 5. Architecture Decision (+6 more) ### Community 104 - "Community 104" -Cohesion: 0.06 -Nodes (34): Covers lines 83-84: session not found., Covers lines 126-136: DELETE /user/sessions/{sessionId}., Covers lines 126-136: DELETE /user/sessions/{sessionId}., Covers lines 126, 131, 135-136., Covers lines 126, 131, 135-136., Covers lines 126-136: DELETE /user/sessions/{sessionId}., Covers lines 126, 131, 135-136., Covers lines 127-129: session not found. (+26 more) +Cohesion: 0.14 +Nodes (13): benchOnce(), main(), batchCosineSimilarity(), decodeEmbeddings(), normalizeRows(), Empty matrix → empty array., Single row matches cosine_similarity., Multiple rows ranked correctly. (+5 more) ### Community 105 - "Community 105" -Cohesion: 0.18 -Nodes (11): client(), TestClient with all routers mounted — no lifespan (no DB/service init). O, TestClient with all routers mounted — no lifespan (no DB/service init). O, TestClient with all routers mounted — no lifespan (no DB/service init). O, TestClient with all routers mounted — no lifespan (no DB/service init). O, TestClient with all routers mounted — no lifespan (no DB/service init). O, TestClient with stocks router + verifyAPIKey + getCurrentUser overrides., TestClient with all routers mounted — no lifespan (no DB/service init). O (+3 more) +Cohesion: 0.12 +Nodes (10): Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Tests covering query.py lines 50-67., Tests covering query.py lines 50-67., Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Regression: is_string_dtype fails when column has strings + None (pandas 2.x)., Tests covering query.py lines 50-67., Tests covering query.py lines 50-67. (+2 more) ### Community 106 - "Community 106" Cohesion: 0.22 @@ -1062,8 +1096,8 @@ Cohesion: 0.14 Nodes (13): cls_token, do_basic_tokenize, do_lower_case, mask_token, model_max_length, name_or_path, never_split, pad_token (+5 more) ### Community 110 - "Community 110" -Cohesion: 0.21 -Nodes (7): ResultCache — SHA256-keyed file-based cache for computed results., File-based cache keyed by SHA256 of code. Stores results as JSON under:, Return cached result dict or None if miss., Store result with timestamp., Delete all cached results for a session., Check if a result exists for the given code., ResultCache +Cohesion: 0.07 +Nodes (27): code:python (import re), code:bash (git add main/controller/stocksapi_controller.py tests/test_s), code:python (def test_feather_reload_drops_cached_bodies(monkeypatch):), code:python (def clearEndpointCache() -> None:), code:python (from main.app.stocks_api.compress import rebuildAbbrevs), code:bash (git add main/app/stocks_api/sync_cache.py main/app/stocks_ap), code:bash (docker compose up -d --build api), code:powershell ($Key = $env:PERF_API_KEY) (+19 more) ### Community 111 - "Community 111" Cohesion: 0.14 @@ -1086,8 +1120,8 @@ Cohesion: 0.17 Nodes (11): dateOnly(), EditDividendDialog(), EditLotDialog(), fmtBRL(), fmtMoney(), KIND_STYLES, lotTitle(), deleteDividend() (+3 more) ### Community 116 - "Community 116" -Cohesion: 0.13 -Nodes (17): _build_system_prompt(), buildSystemPrompt(), chatSession(), _execute_memory_tool(), executeMemoryTool(), _get_client(), _get_memory_tools(), getClient() (+9 more) +Cohesion: 0.11 +Nodes (21): create_memory(), createMemory(), embed(), _build_system_prompt(), buildSystemPrompt(), chatSession(), _execute_memory_tool(), executeMemoryTool() (+13 more) ### Community 117 - "Community 117" Cohesion: 0.15 @@ -1102,16 +1136,16 @@ Cohesion: 0.07 Nodes (26): code:python ("""Tests for SandboxManager file mutation helpers (delete_fi), code:python (from main.app.prometheus.sandbox import SandboxManager, host), code:python (@router.post("/workspace/upload")), code:bash (git add main/controller/prometheus_controller.py tests/test_), code:python (from unittest.mock import patch, MagicMock), code:python (from main.app.prometheus.sandbox import SandboxManager, host), code:python (async def serve_file(path: str, **_) -> dict:), code:python ("serve_file": serve_file,) (+18 more) ### Community 120 - "Community 120" -Cohesion: 0.09 -Nodes (35): _make_auth_client(), Tests to cover uncovered lines across controllers, UserManager, and auth util., Covers lines 44-54, 63, 66-71: register success, ValueError, generic Exception., Covers lines 44-54, 63, 66-71: register success, ValueError, generic Exception., Covers lines 87-93, 102: login success and failure paths., Covers lines 87-93, 102: login success and failure paths., Return (client, app) with auth + user routers and mocked getSession., Covers lines 107, 109-130, 133: logout token extraction and revocation. (+27 more) +Cohesion: 0.08 +Nodes (40): _make_auth_client(), _make_prometheus_client(), Tests to cover uncovered lines across controllers, UserManager, and auth util., Covers lines 44-54, 63, 66-71: register success, ValueError, generic Exception., Covers lines 44-54, 63, 66-71: register success, ValueError, generic Exception., Covers lines 87-93, 102: login success and failure paths., Covers lines 87-93, 102: login success and failure paths., Return (client, app) with auth + user routers and mocked getSession. (+32 more) ### Community 121 - "Community 121" Cohesion: 0.21 Nodes (12): code:python (import inspect), code:python (from main.app.prometheus.sandbox import SandboxManager), code:python (TOOL_REGISTRY: dict[str, Any] = {), code:python (## Code Sandbox (On-Demand)), code:bash (git add main/app/prometheus/agent.py), code:dockerfile (FROM python:3.11-slim), code:bash (git add Dockerfile.sandbox), Phase 6: Agent Integration (All Layers) (+4 more) ### Community 122 - "Community 122" -Cohesion: 0.15 -Nodes (10): test_setup_discord_handler_disabled(), test_setup_discord_handler_enabled(), Many concurrent emit() calls must not create more threads than max_workers., Verify that DiscordHandler submits to a bounded executor, not raw threads., The module-level discordExecutor must exist with max_workers <= 5., DiscordHandler.emit() must use discordExecutor.submit, not Thread.start., TestDiscordHandlerThreadPool, DiscordHandler (+2 more) +Cohesion: 0.14 +Nodes (11): test_setup_discord_handler_disabled(), test_setup_discord_handler_enabled(), TestSetupLogging, Many concurrent emit() calls must not create more threads than max_workers., Verify that DiscordHandler submits to a bounded executor, not raw threads., The module-level discordExecutor must exist with max_workers <= 5., DiscordHandler.emit() must use discordExecutor.submit, not Thread.start., TestDiscordHandlerThreadPool (+3 more) ### Community 123 - "Community 123" Cohesion: 0.17 @@ -1122,8 +1156,8 @@ Cohesion: 0.07 Nodes (27): code:python (# tests/test_stocks_payload_cache.py), code:python (pc = self.cacheManager.tickerPayloads), code:python (# tests/test_stocks_sync_handlers.py), code:bash (git add main/controller/stocksapi_controller.py main/app/sto), code:python (def test_payload_cache_cotation_index():), code:python (self._cotations: dict[str, bytes] = {}), code:python (cotationCols = ["TICKER", "NOME", "TIME", "COTACAO 10Y PADRA), code:python (self._cotations = cot) (+19 more) ### Community 126 - "Community 126" -Cohesion: 0.18 -Nodes (11): Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback. (+3 more) +Cohesion: 0.07 +Nodes (26): code:powershell (netstat -ano | findstr ":80 " # must be empty; if not, ), code:powershell ($U = "http://localhost/stocks/cotations?search=PETR4"), code:nginx (proxy_pass http://stocks_api;), code:nginx (# Exact-match on purpose: a prefix match on /stocks/cotation), code:powershell (docker exec nginx nginx -t; if ($?) { docker exec nginx ngin), code:bash (git add nginx/conf.d/20-stocks.conf nginx/snippets/stocks-pr), code:powershell (docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{), code:powershell ($U = "http://localhost/stocks/cotations?search=PETR4") (+18 more) ### Community 127 - "Community 127" Cohesion: 0.2 @@ -1138,12 +1172,12 @@ Cohesion: 0.2 Nodes (10): Tests for stocks API field validation — verifies the fields parameter accepts a, Integration: /stocks/fundamental must accept slash and dot fields., Minimal TestClient with just the stocks router for validation tests., GET /fundamental?fields=P/L must not return 422 (validation error)., GET /fundamental?fields=P/L must not return 422 (validation error)., Integration: /stocks/fundamental must accept slash and dot fields., GET /fundamental?fields=P/L must not return 422 (validation error)., GET /historical?fields=P/L must not return 422. (+2 more) ### Community 130 - "Community 130" -Cohesion: 0.24 -Nodes (8): create_memory(), createMemory(), _downloadModel(), embed(), getEmbeddingModel(), executeMemoryTool(), initialize(), OrunmilaService +Cohesion: 0.08 +Nodes (25): 1.1 Functional (per surface; tags: EXISTS = build on it, PARTIAL = half reusable, MISSING = greenfield), 1.2 Non-functional, 1. Requirements, 2. Domain model, 3. API contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` → `main/service/wallet_service.py::` → `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout), 3. API contracts (all under `/wallet`; chain: `main/controller/wallet_controller.py` → `main/service/wallet_service.py::` → `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout), 4. Phased build plan (writing-plans: each phase independently reviewable; reviewer PASS per phase), 5. Risks / assumptions (honest flags carried over — do not treat as fact) (+17 more) ### Community 131 - "Community 131" -Cohesion: 0.11 -Nodes (17): Same input → same hash., Different inputs → different hashes., Returns 32-char hex string., pack → unpack preserves values., Empty list roundtrips., 384-dim vector packs to 1536 bytes., TestContentHash, TestPackUnpack (+9 more) +Cohesion: 0.23 +Nodes (9): Same input → same hash., Different inputs → different hashes., Returns 32-char hex string., TestContentHash, ALL(), content_hash(), contentHash(), MD5 hash for change detection. (+1 more) ### Community 132 - "Community 132" Cohesion: 0.25 @@ -1161,9 +1195,13 @@ Nodes (11): code:yaml (volumes:), code:bash (git add config.py docker-compose.ym Cohesion: 0.11 Nodes (4): cache(), Tests for ResultCache., TestColumnValidator, TestResultCache +### Community 136 - "Community 136" +Cohesion: 0.1 +Nodes (17): Covers lines 126-136: DELETE /user/sessions/{sessionId}., Covers lines 126-136: DELETE /user/sessions/{sessionId}., Covers lines 126, 131, 135-136., Covers lines 126, 131, 135-136., Covers lines 126-136: DELETE /user/sessions/{sessionId}., Covers lines 126, 131, 135-136., Covers lines 127-129: session not found., Covers lines 127-129: session not found. (+9 more) + ### Community 137 - "Community 137" -Cohesion: 0.17 -Nodes (21): countMemories(), deleteMemory(), extract(), findSimilarKey(), fullTextSearch(), getClient(), getMatrix(), getMemoryLimit() (+13 more) +Cohesion: 0.18 +Nodes (20): countMemories(), deleteMemory(), extract(), findSimilarKey(), fullTextSearch(), getClient(), getMatrix(), getMemoryLimit() (+12 more) ### Community 138 - "Community 138" Cohesion: 0.18 @@ -1174,8 +1212,8 @@ Cohesion: 0.24 Nodes (6): Dataset, produce_data(), Train script for a single file Need to set the TPU address first: export XRT_TP, A class that handles the reddit data files, A class that handles one dataset, RedditDataset ### Community 140 - "Community 140" -Cohesion: 0.04 -Nodes (51): Base, OrunmilaMemory, PrometheusMemory, PrometheusMemory, MemoryManager, PrometheusMemory, All memory operations. Stateless class methods., PrometheusService (+43 more) +Cohesion: 0.06 +Nodes (48): Base, BaseModel, OrunmilaMemory, PrometheusMemory, PrometheusMemory, MemoryCandidate, OrunmilaMemory, MemoryCandidate (+40 more) ### Community 141 - "Community 141" Cohesion: 0.24 @@ -1205,6 +1243,10 @@ Nodes (7): COLUMNS, fmtBRL(), fmtPct(), OverviewCards(), fetchWallet(), fetchWal Cohesion: 0.23 Nodes (3): categorizeColumns(), TestCategorizeColumns, TestCategorizeColumns +### Community 148 - "Community 148" +Cohesion: 0.07 +Nodes (24): Covers lines 114-115, 117-120, 122, 125: POST /prometheus/chat., Covers lines 114-115, 117-120, 122, 125: POST /prometheus/chat., Covers lines 111-112: sessionId is None, new session created., Covers lines 111-112: sessionId is None, new session created., Covers lines 109-136: POST /prometheus/chat/stream (SSE)., Covers lines 118-119: sessionId is None, new session created., Covers lines 114-115, 117-120, 122: existing session with verified ownership., Covers lines 114-115, 117-120, 122: existing session with verified ownership. (+16 more) + ### Community 149 - "Community 149" Cohesion: 0.18 Nodes (5): createSession(), getSessionById(), parseDeviceFields(), revokeSession(), validateSession() @@ -1254,8 +1296,8 @@ Cohesion: 0.11 Nodes (18): Category 2: Async/Sync Inconsistencies (MEDIUM), Category 4: Caching & Memory (MEDIUM), Category 6: Configuration & Environment (LOW), Category 7: Code Quality (LOW), Executive Summary, Full Code Review Report, Issue 2.1 — All route handlers are synchronous, Issue 2.2 — ServiceManager runs uvicorn in daemon threads (+10 more) ### Community 162 - "Community 162" -Cohesion: 0.15 -Nodes (18): executeStateTool(), get_state(), Retrieve values from the harness state. Use this to recall intermediate results,, Retrieve values from the harness state. Use this to recall intermediate results,, Retrieve values from the harness state. Use this to recall intermediate results,, Retrieve values from the harness state. Use this to recall intermediate results,, test_dispatch_get_state(), test_dispatch_set_state() (+10 more) +Cohesion: 0.24 +Nodes (14): buildSummary(), countTokens(), dedup(), extractDecisions(), extractMetrics(), extractSnapshots(), extractTickers(), extractToolCalls() (+6 more) ### Community 163 - "Community 163" Cohesion: 0.22 @@ -1282,16 +1324,16 @@ Cohesion: 0.4 Nodes (4): compilerOptions, baseUrl, paths, @/* ### Community 169 - "Community 169" -Cohesion: 0.11 -Nodes (14): getCotations(), JSONBytesResponse, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur (+6 more) +Cohesion: 0.17 +Nodes (12): getCotations(), Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur, Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur (+4 more) ### Community 170 - "Community 170" Cohesion: 0.25 Nodes (8): padding, direction, pad_id, pad_to_multiple_of, pad_token, pad_type_id, strategy, Fixed ### Community 172 - "Community 172" -Cohesion: 0.19 -Nodes (7): Tests for thread safety utilities (Issues 5 & 6). Issue 5: DiscordHandler use, Verify getSession returns thread-local sessions under concurrency., getSession() must give each thread its own Session., connectivity.checkServiceConnection must call getSession(), not use a global Ses, connectivity.checkServiceConnection must call getSession(), not use a global Ses, TestConcurrentGetSession, TestConcurrentHttpProxy +Cohesion: 0.14 +Nodes (19): AuthenticationManager, SessionManager, PrometheusChatManager, Cover getGoogleSSO (lines 6-14)., Cover getGoogleSSO (lines 6-14)., Cover __init__ and updateDates., Cover __init__ and updateDates (lines 22-37)., Cover streamMessage in agent.py. (+11 more) ### Community 173 - "Community 173" Cohesion: 0.25 @@ -1314,8 +1356,8 @@ Cohesion: 0.25 Nodes (7): computedHash, skillPath, source, sourceType, skills, backend-code-review, version ### Community 178 - "Community 178" -Cohesion: 0.2 -Nodes (9): Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: full sessions listing., Covers lines 66, 68-72, 74: full sessions listing., Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: full sessions listing., Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: full sessions listing. (+1 more) +Cohesion: 0.14 +Nodes (14): 3.0 Verified ground truth, 3.10 Migration sequence + verification, 3.1 Target topology, 3.2 Worker-container extraction, 3.3 nginx upstream evolution — validated against the user's plan, 3.4 TODO 13 migration — drop `{service}_HOST`/`{service}_PORT`, 3.5 Redis — exactly two jobs, 3.6 Cache strategy across boxes (+6 more) ### Community 179 - "Community 179" Cohesion: 0.29 @@ -1330,24 +1372,24 @@ Cohesion: 0.25 Nodes (7): code:block1 (main/), Execution Handoff, Executive Summary: What Mem0 Does That We Don't, File Structure, Mem0 vs Prometheus Memory System — Comparison & Upgrade Plan, Self-Review Checklist, What We Already Do Well (Don't Replace) ### Community 183 - "Community 183" -Cohesion: 0.07 -Nodes (20): Tests for connection pool configuration, Stocks engine should have optimized pool settings, Tests for lazy JSON deserialization, Query manager should have deserialize method, Integration tests for all query optimizations, All optimizations should be implemented, Query filter should use ticker index, Tests for optimized search filtering (+12 more) +Cohesion: 0.14 +Nodes (14): 3.0 Verified ground truth, 3.10 Migration sequence + verification, 3.1 Target topology, 3.2 Worker-container extraction, 3.3 nginx upstream evolution — validated against the user's plan, 3.4 TODO 13 migration — drop `{service}_HOST`/`{service}_PORT`, 3.5 Redis — exactly two jobs, 3.6 Cache strategy across boxes (+6 more) ### Community 184 - "Community 184" -Cohesion: 0.11 -Nodes (6): Tests for run.py /status endpoint — covers status response structure., Create a test client for the status endpoint without running lifespan., Create a test client for the status endpoint without running lifespan., statusClient(), TestScraperTrigger, TestStatusEndpoint +Cohesion: 0.23 +Nodes (8): pack → unpack preserves values., Empty list roundtrips., 384-dim vector packs to 1536 bytes., TestPackUnpack, pack_vector(), Unpack MySQL BLOB to float list., Vectorized cosine similarity: one query against N embeddings., unpack_vector() ### Community 185 - "Community 185" Cohesion: 0.38 Nodes (7): code:python (import pytest), code:python (from __future__ import annotations), code:bash (git add main/app/prometheus/context.py tests/test_context.py), Phase 4: ToolContext (Bundled Dispatch Dependencies), Phase 4: ToolContext (Replace God Function), Task 5: ToolContext — Dataclass for Agent Use, Task 5: ToolContext — Single Dispatch Object ### Community 187 - "Community 187" -Cohesion: 0.29 -Nodes (6): DEVELOPER:, PREMIUM:, Prometheus, STOCKS_API, USER:, User structure defined by string roles: +Cohesion: 0.25 +Nodes (7): DEVELOPER:, PREMIUM:, Priorities (active order, 2026-09-29), Prometheus, STOCKS_API, USER:, User structure defined by string roles: ### Community 188 - "Community 188" -Cohesion: 0.33 -Nodes (10): Tests for main/utils/logging_config.py — covers DiscordHandler branches., test_discord_disabled(), test_discord_no_webhook(), test_exception_in_submit(), test_level_below_error(), test_message_truncation(), test_submit_called_on_error(), test_with_exception_info() (+2 more) +Cohesion: 0.11 +Nodes (6): Tests for run.py /status endpoint — covers status response structure., Create a test client for the status endpoint without running lifespan., Create a test client for the status endpoint without running lifespan., statusClient(), TestScraperTrigger, TestStatusEndpoint ### Community 189 - "Community 189" Cohesion: 0.36 @@ -1382,8 +1424,8 @@ Cohesion: 0.33 Nodes (5): cls_token, mask_token, pad_token, sep_token, unk_token ### Community 197 - "Community 197" -Cohesion: 0.18 -Nodes (11): getHistorical(), Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns (+3 more) +Cohesion: 0.17 +Nodes (12): getHistorical(), Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns, Get year-based historical financial data for Brazilian B3 stocks. Returns (+4 more) ### Community 198 - "Community 198" Cohesion: 0.33 @@ -1426,8 +1468,8 @@ Cohesion: 0.33 Nodes (6): API Design (6), Architecture (8), Frontend (7), P1 — Should Fix, Security (6), Testing (4) ### Community 208 - "Community 208" -Cohesion: 0.2 -Nodes (10): Read a file from the workspace. Args: path: Path to the file (e., Read a file from the workspace. Args: path: Path to the file (e., Read a file from the workspace. Args: path: Path to the file (e., Read a file from the workspace. Args: path: Path to the file (e., Read a file from the sandbox filesystem. Args: path: Absolute pa, Read a file from the sandbox filesystem. Args: path: Absolute pa, List files in the workspace directory. Args: path: Directory pat, Read a file from the workspace. Args: path: Path to the file (e. (+2 more) +Cohesion: 0.09 +Nodes (22): 10. Plans and follow-ups, 1. Context, 2. Decisions, 3. Caching policy (canonical), 4. Topology, 5. Quota and rate limits after caching, 6. Non-goals, 7. Acceptance criteria (+14 more) ### Community 209 - "Community 209" Cohesion: 0.33 @@ -1450,8 +1492,8 @@ Cohesion: 0.17 Nodes (11): code:python (def test_search_defersEmbeddingBlob(db):), code:python (from contextlib import contextmanager), code:python (from sqlalchemy.orm import defer), code:bash (git add main/app/prometheus/memory.py tests/test_memory_sear), code:python (def test_search_fusesFulltextOverVectorOnly(db):), code:python (def minMax(values: list[float]) -> list[float]:), code:bash (git add main/app/prometheus/memory.py tests/test_memory_sear), Global Constraints (+3 more) ### Community 215 - "Community 215" -Cohesion: 0.12 -Nodes (12): Store a value in state. Marks state as changed for context injection., ResponseCache, autoAbbreviate(), dedupAbbrev(), detectNestedFields(), generateAbbreviations(), _parse_date(), parseDate() (+4 more) +Cohesion: 0.15 +Nodes (13): 1.10 Edge cases / risks (implementation), 1.1 Architecture decision, 1.2 File layout, 1.5 Phase P2 — port scheme, worker containers, keepalive, 1.6 Phase P3 — remote VPS upstreams + health strategy, 1.7 Phase P4 — handoff design (no code in this plan), 1.8 Quota / rate-limit semantics after caching, 1.9 Anti-scraping note (TODO 17) (+5 more) ### Community 216 - "Community 216" Cohesion: 0.29 @@ -1477,6 +1519,10 @@ Nodes (5): model, continuing_subword_prefix, max_input_chars_per_word, type, unk Cohesion: 0.2 Nodes (9): Covers lines 143, 145, 147-148: POST /user/sessions/revoke-all., Covers lines 143, 145, 147-148: POST /user/sessions/revoke-all., Covers lines 143, 145, 147-148., Covers lines 143, 145, 147-148., Covers lines 143, 145, 147-148: POST /user/sessions/revoke-all., Covers lines 143, 145, 147-148., Covers lines 143, 145, 147-148: POST /user/sessions/revoke-all., Covers lines 143, 145, 147-148. (+1 more) +### Community 222 - "Community 222" +Cohesion: 0.1 +Nodes (15): generateKey(), JSONBytesResponse, listFields(), Sends pre-serialized JSON bytes without re-encoding (cache-friendly)., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental., Discover available field names before querying /historical or /fundamental. (+7 more) + ### Community 223 - "Community 223" Cohesion: 0.4 Nodes (5): code:python (from main.app.prometheus.tools import SANDBOX_TOOLS, SANDBOX), code:python (from main.app.prometheus.sandbox import SandboxManager), code:python (async def dispatchToolCall(functionCall, mcpClients, user=No), code:bash (git add main/app/prometheus/tools.py tests/test_sandbox.py), Task 5: Sandbox Tools — Gemini Function Declarations + Dispatch @@ -1510,8 +1556,8 @@ Cohesion: 0.18 Nodes (11): 2.2.1 Complexity hotspots table (H1–H17 condensed to P0/P1/P2), 2.2.2 Blob inventory (LOC table + SRP evidence), 2.2.3 Mass data loads, 2.2.4 Phased fix roadmap (P0/P1/P2), §2.2 CODE EFFICIENCY — O(n²), Complexity & Blob Anti-Patterns, code:block4 (scraper.py:44 671 LOC — mass loads: SELECT * fetchma), code:powershell (ruff check . && ruff format --check .), code:powershell (pytest tests/test_stocks_cache_concurrency.py -v # ThreadPo) (+3 more) ### Community 231 - "Community 231" -Cohesion: 0.13 -Nodes (13): Covers lines 95-98: session deleted., Covers lines 96-97: session not found., Covers lines 96-97: session not found., Covers lines 96-97: session not found., Covers lines 95-98: DELETE /prometheus/sessions/{sessionId}., Covers lines 95-98: session deleted., Covers lines 96-97: session not found., Covers lines 95-98: DELETE /prometheus/sessions/{sessionId}. (+5 more) +Cohesion: 0.2 +Nodes (3): OrunmilaSession, createSession(), OrunmilaChatManager ### Community 232 - "Community 232" Cohesion: 0.4 @@ -1570,8 +1616,8 @@ Cohesion: 0.5 Nodes (4): Category 5: Error Handling Gaps (MEDIUM), Issue 5.1 — Generic exception handler swallows traceback in production, Issue 5.2 — DiscordHandler sends only message, not traceback, Issue 5.3 — `_build_error_response` ignores `status_code` parameter ### Community 251 - "Community 251" -Cohesion: 0.12 -Nodes (7): Pytest Testing, pytest_configure(), Set required env vars before test collection. config.py eagerly instantia, Reset slowapi in-memory rate limiter between every test., Set required env vars before test collection. config.py eagerly instantia, Set required env vars before test collection. config.py eagerly instantia, _reset_rate_limiter() +Cohesion: 0.09 +Nodes (17): client(), pytest_configure(), TestClient with all routers mounted — no lifespan (no DB/service init). O, Set required env vars before test collection. config.py eagerly instantia, Reset slowapi in-memory rate limiter between every test., Set required env vars before test collection. config.py eagerly instantia, TestClient with all routers mounted — no lifespan (no DB/service init). O, TestClient with all routers mounted — no lifespan (no DB/service init). O (+9 more) ### Community 252 - "Community 252" Cohesion: 0.5 @@ -1590,8 +1636,8 @@ Cohesion: 0.5 Nodes (3): Basic fields like ROE must still pass., Basic fields like ROE must still pass., Basic fields like ROE must still pass. ### Community 256 - "Community 256" -Cohesion: 0.21 -Nodes (6): buildSystemPrompt(), getClient(), Orunmila, persistEvent(), OrunmilaCompactor, newTokenCache() +Cohesion: 0.13 +Nodes (13): Covers lines 83-84: session not found., Covers lines 77, 83-84, 86: GET /prometheus/history/{sessionId}., Covers lines 77, 83-84, 86: GET /prometheus/history/{sessionId}., Covers lines 77, 86: session found with history., Covers lines 77, 86: session found with history., Covers lines 77, 83-84, 86: GET /prometheus/history/{sessionId}., Covers lines 77, 86: session found with history., Covers lines 77, 83-84, 86: GET /prometheus/history/{sessionId}. (+5 more) ### Community 258 - "Community 258" Cohesion: 0.67 @@ -1614,8 +1660,12 @@ Cohesion: 0.22 Nodes (8): 1. Prime owns the goal, lanes own the work, 2. Dispatch: `delegate()`, one per lane, one turn, 3. Delegate toolsets vary — verify each lane, 4. Trust nothing — verify everything, 5. Windows PowerShell survival, 6. Finish per lane, not per swarm, 7. Standing bans (this repo), SWARMS.md — subagent swarm playbook (OpenCode / Hermes) ### Community 474 - "Community 474" -Cohesion: 0.26 -Nodes (13): buildSummary(), countTokens(), dedup(), extractDecisions(), extractMetrics(), extractSnapshots(), extractTickers(), extractToolCalls() (+5 more) +Cohesion: 0.15 +Nodes (11): _count_memories(), _create_memory(), _get_memory(), Keys with Jaccard > 0.8 should merge., Keys with Jaccard > 0.8 should merge., Keys with low similarity should not merge., Keys with low similarity should not merge., Keys with low similarity should not merge. (+3 more) + +### Community 475 - "Community 475" +Cohesion: 0.15 +Nodes (13): 1.10 Edge cases / risks (implementation), 1.1 Architecture decision, 1.2 File layout, 1.5 Phase P2 — port scheme, worker containers, keepalive, 1.6 Phase P3 — remote VPS upstreams + health strategy, 1.7 Phase P4 — handoff design (no code in this plan), 1.8 Quota / rate-limit semantics after caching, 1.9 Anti-scraping note (TODO 17) (+5 more) ### Community 476 - "Community 476" Cohesion: 0.22 @@ -1662,8 +1712,8 @@ Cohesion: 0.23 Nodes (6): CHART_COLORS, PortfolioBarsCard(), PortfolioPieCard(), tooltipStyle, groupHistoryByMonth(), monthKey() ### Community 487 - "Community 487" -Cohesion: 0.15 -Nodes (14): execute_code(), Store a value in the harness state for this session. Use this to save inter, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis, (+6 more) +Cohesion: 0.12 +Nodes (15): 1.1 Process model — exactly one process, several threads, 1.2 Cache (post-refactor) — RAM sharing works, 1.3 Per-process resources that multiply with N workers, 1. Verified current state, 2. The blocking defect (must fix before N > 1), 3. Options evaluated, 4. Recommended plan, 5. Evaluation of the existing scaling plan (recovered from git) (+7 more) ### Community 489 - "Community 489" Cohesion: 0.6 @@ -1674,49 +1724,53 @@ Cohesion: 0.22 Nodes (8): API Endpoints, code:env (ORUNMILA_ENABLED=TRUE), code:bash (python run.py), code:mermaid (graph TD), License, Orunmila, Usage, Workflow ### Community 491 - "Community 491" -Cohesion: 0.43 -Nodes (4): _extractCredential(), _introspectUrl(), introspectUser(), _serviceToken() +Cohesion: 0.07 +Nodes (13): IntFlag, Covers line 28: GET /auth/health., Covers line 28: GET /auth/health., Covers lines 139, 141-149: googleLogin endpoint., Covers lines 139, 141-149: googleLogin endpoint., TestGoogleLogin, TestHealthEndpoint, Tests for main/utils/roles.py — covers requirePermission and edge cases. (+5 more) ### Community 492 - "Community 492" Cohesion: 0.33 Nodes (5): Baseline (lane 4), Export recipe, Move triggers (any one fires the migration), Options, Vector Scale-Up Runbook ### Community 493 - "Community 493" -Cohesion: 0.2 -Nodes (9): Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval., Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval., Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval. (+1 more) +Cohesion: 0.18 +Nodes (10): Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 48-49: user not in DB., Covers lines 48-49: user not in DB., Covers lines 48-49: user not in DB., Covers lines 48-49: user not in DB. (+2 more) ### Community 495 - "Community 495" -Cohesion: 0.14 -Nodes (13): dispatchToolCall(), execute_code(), list_files(), Read a file from the workspace. Args: path: Path to the file (e., Write a file to the workspace. Use this to save data files (CSV, JSON, scri, List files in the workspace directory. Args: path: Directory pat, Get a download link for a workspace file to share with the user. Use this, Search user's saved memories, preferences, and past analysis context. Use (+5 more) +Cohesion: 0.05 +Nodes (42): 0. The blockers, ranked, 1.1 Process model — exactly one process, several threads, 1.1 Runtime topology — one process, many threads, 1.2 Cache (post-refactor) — RAM sharing works, 1.2 The cache is already the right shape for multi-process, 1.3 Per-process resources that multiply with N workers, 1.3 Per-process state that multiplies with N, 1. Verified current state (+34 more) ### Community 497 - "Community 497" -Cohesion: 0.23 -Nodes (6): chat_stream(), downloadWorkspaceFile(), getHistory(), resumeChatStream(), updateSessionTitle(), verifySessionOwnsership() +Cohesion: 0.21 +Nodes (6): buildSystemPrompt(), getClient(), Orunmila, persistEvent(), OrunmilaCompactor, newTokenCache() ### Community 498 - "Community 498" -Cohesion: 0.07 -Nodes (24): Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., Covers line 13: UserManager.__init__., Covers line 13: UserManager.__init__., Covers line 13: UserManager.__init__. (+16 more) +Cohesion: 0.17 +Nodes (7): Different query parameters should not share cache, Cache should expire after TTL, Tests for query result caching, CacheManager should track cached queries, Query cache should have configurable TTL, getCachedStocks should support column filtering, TestQueryCaching ### Community 499 - "Community 499" Cohesion: 0.2 Nodes (9): code:python (import numpy as np), code:python (def normalizeRows(matrix: np.ndarray) -> np.ndarray:), code:bash (git add main/app/prometheus/vector.py tests/test_vector_norm), code:python ("""One-shot: renormalize stored embeddings to unit norm. Usa), code:bash (git add scripts/backfill_normalize_embeddings.py), Global Constraints, Lane 1: Normalized Embeddings + Dot-Product Search Implementation Plan, Task 1: Normalize on encode + row-normalize helper (+1 more) ### Community 500 - "Community 500" -Cohesion: 0.13 -Nodes (21): generateKey(), createKey(), createStoredApiKey(), hashApiKey(), initVerifyClient(), isValidStoredKey(), _serviceToken(), verifyAPIKey() (+13 more) +Cohesion: 0.16 +Nodes (17): createStoredApiKey(), hashApiKey(), initVerifyClient(), isValidStoredKey(), _serviceToken(), verifyAPIKey(), _verifyUrl(), Tests to increase coverage for query.py, key.py, and cache.py in stocks_api. (+9 more) ### Community 501 - "Community 501" Cohesion: 0.22 Nodes (3): getCurrentSession(), getSessions(), sessionToDict() ### Community 502 - "Community 502" -Cohesion: 0.08 -Nodes (20): Tests for connection pool configuration, Tests for connection pool configuration, Stocks engine should have optimized pool settings, Stocks engine should have optimized pool settings, Tests for lazy JSON deserialization, Tests for lazy JSON deserialization, Query manager should have deserialize method, Query manager should have deserialize method (+12 more) +Cohesion: 0.07 +Nodes (22): Tests for connection pool configuration, Tests for connection pool configuration, Stocks engine should have optimized pool settings, Stocks engine should have optimized pool settings, Tests for lazy JSON deserialization, Tests for lazy JSON deserialization, Query manager should have deserialize method, Query manager should have deserialize method (+14 more) ### Community 503 - "Community 503" Cohesion: 0.17 Nodes (7): Tests for dynamic ticker index feature, Ticker index should be built when cache is loaded, Ticker index should contain all tickers from cache, Ticker index should be case-insensitive, Looking up ticker should return valid row index, Ticker index should be rebuilt when cache refreshes, TestTickerIndex +### Community 504 - "Community 504" +Cohesion: 0.29 +Nodes (6): dbSession(), Tests for atomic API key quota enforcement (race condition fix). Verifies tha, Sample API key data for tests., Create an in-memory SQLite database for testing., Sample API key data for tests., sampleKeyData() + ### Community 505 - "Community 505" Cohesion: 0.33 Nodes (5): streamChat(), events, onChunk, onDone, onError @@ -1737,17 +1791,21 @@ Nodes (5): Disputed (already litigated — needs your ruling to proceed), Held o Cohesion: 0.6 Nodes (3): bench(), main(), stats() +### Community 511 - "Community 511" +Cohesion: 0.29 +Nodes (6): Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., Covers line 18: GET /stocks/health., TestStocksApiHealth + ### Community 512 - "Community 512" -Cohesion: 0.47 -Nodes (3): TestCleanup, cleanup(), Close the main thread's session at interpreter shutdown. +Cohesion: 0.18 +Nodes (11): 2.0 Grounding: what the code actually does, 2.1 Hypotheses, 2.3 Scenarios, 2.4 Protocol, 2.5 Metrics, 2.6 Acceptance thresholds — **ALL PROPOSED, freeze after first real run**, 2.7 Results doc layout, 2.8 Feeding `/status` (TODO 14) (+3 more) ### Community 517 - "Community 517" Cohesion: 0.2 Nodes (16): baseFrame(), deserializeJsonColumns(), envelope(), fetchLivePayload(), filterBySearchTerms(), _filterCotationByDate(), filterCotationData(), finalize() (+8 more) ### Community 518 - "Community 518" -Cohesion: 0.1 -Nodes (15): create_memories(), Decay happens first, then archive check with new scores., Decay happens first, then archive check with new scores., Score that decays to >= threshold stays alive. 0.11 * 0.95 = 0.1045 >= 0.1., Score that decays to >= threshold stays alive. 0.12 * 0.90 = 0.108 >= 0.1., 89 days with low score → not archived (need > 90)., 89 days with low score → not archived (need > 90)., Helper to create memories with controlled baseScore, lastAccessedAt, accessCount (+7 more) +Cohesion: 0.06 +Nodes (29): memoryMaintenance(), create_memories(), Zero access but score still above threshold → not archived., Even with low score, if accessed → not archived., Even with low score, if accessed → not archived., Already archived memories are skipped., Already archived memories are skipped., Decay happens first, then archive check with new scores. (+21 more) ### Community 519 - "Community 519" Cohesion: 0.57 @@ -1761,33 +1819,33 @@ Nodes (9): pd.NA is not a string, so lambda returns it unchanged., All four SPEC Cohesion: 0.33 Nodes (3): buildClient(), connect(), MCPClientPool +### Community 522 - "Community 522" +Cohesion: 0.18 +Nodes (11): 2.0 Grounding: what the code actually does, 2.1 Hypotheses, 2.3 Scenarios, 2.4 Protocol, 2.5 Metrics, 2.6 Acceptance thresholds — **ALL PROPOSED, freeze after first real run**, 2.7 Results doc layout, 2.8 Feeding `/status` (TODO 14) (+3 more) + ### Community 523 - "Community 523" -Cohesion: 0.25 -Nodes (8): check_cache(), Read a file from the sandbox filesystem. Args: path: Absolute pa, List files in the workspace directory. Args: path: Directory pat, Upload a file to the sandbox filesystem. Use this to push data files (CSV,, Get a download link for a workspace file to share with the user. Use this, Check if a computed result exists in the cache. Use before executing expens, read_sandbox_file(), upload_to_sandbox() +Cohesion: 0.43 +Nodes (4): _extractCredential(), _introspectUrl(), introspectUser(), _serviceToken() ### Community 524 - "Community 524" -Cohesion: 0.11 -Nodes (19): introspectToken(), verifyAccessToken(), introspect(), Covers lines 45-51: verifyAccessToken with expired and invalid tokens., Covers lines 48-49: jwt.ExpiredSignatureError., Covers lines 45-51: verifyAccessToken with expired and invalid tokens., Covers lines 45-51: verifyAccessToken with expired and invalid tokens., Covers lines 48-49: jwt.ExpiredSignatureError. (+11 more) +Cohesion: 0.1 +Nodes (20): introspectToken(), verifyAccessToken(), introspect(), Covers lines 45-51: verifyAccessToken with expired and invalid tokens., Covers line 16: empty password raises ValueError., Covers lines 48-49: jwt.ExpiredSignatureError., Covers lines 45-51: verifyAccessToken with expired and invalid tokens., Covers lines 45-51: verifyAccessToken with expired and invalid tokens. (+12 more) ### Community 525 - "Community 525" -Cohesion: 0.25 -Nodes (9): list_files(), List files in the workspace directory. Args: path: Directory pat, List files in the workspace directory. Args: path: Directory pat, Get a download link for a workspace file to share with the user. Use this, Get a download link for a workspace file to share with the user. Use this, List files in the workspace directory. Args: path: Directory pat, List files in the workspace directory. Args: path: Directory pat, List files in the workspace directory. Args: path: Directory pat (+1 more) +Cohesion: 0.11 +Nodes (21): list_files(), Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, List files in the workspace directory. Args: path: Directory pat, List files in the workspace directory. Args: path: Directory pat (+13 more) ### Community 526 - "Community 526" Cohesion: 0.33 Nodes (7): buildKey(), clearAll(), getMatrix(), invalidateUser(), runAwait(), main(), One-shot: renormalize stored embeddings to unit norm. Usage: python scripts/back ### Community 528 - "Community 528" -Cohesion: 0.29 -Nodes (6): Covers lines 19-20: user not found raises 404., Covers lines 19-20: user not found raises 404., Covers lines 19-20: user not found raises 404., Covers lines 19-20: user not found raises 404., Covers lines 19-20: user not found raises 404., Covers lines 19-20: user not found raises 404. +Cohesion: 0.18 +Nodes (11): Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback., Store a memory about the user's preferences, analysis results, or feedback. (+3 more) ### Community 529 - "Community 529" -Cohesion: 0.22 -Nodes (9): Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, List files in the workspace directory. Args: path: Directory pat, Write a file to the workspace. Use this to save data files (CSV, JSON, scri, Get a download link for a workspace file to share with the user. Use this (+1 more) - -### Community 530 - "Community 530" -Cohesion: 0.39 -Nodes (8): _build_error_response(), buildErrorResponse(), generic_exception_handler(), genericExceptionHandler(), http_exception_handler(), httpExceptionHandler(), validation_exception_handler(), validationExceptionHandler() +Cohesion: 0.29 +Nodes (6): GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422. ### Community 532 - "Community 532" Cohesion: 0.5 @@ -1802,24 +1860,28 @@ Cohesion: 0.5 Nodes (4): LATER (P2 — when touching these files), NOW (P0 — fix before next release), Priority Matrix, SOON (P1 — fix within 2 weeks) ### Community 535 - "Community 535" -Cohesion: 0.22 -Nodes (6): Store a memory about the user's preferences, analysis results, or feedback., save_memory(), batchCosineSimilarity(), contentHash(), embed(), normalizeRows() +Cohesion: 0.21 +Nodes (7): ResultCache — SHA256-keyed file-based cache for computed results., File-based cache keyed by SHA256 of code. Stores results as JSON under:, Return cached result dict or None if miss., Store result with timestamp., Delete all cached results for a session., Check if a result exists for the given code., ResultCache ### Community 536 - "Community 536" -Cohesion: 0.19 -Nodes (8): AuthenticationService, initialize(), initialize(), MCPDetectMiddleware, StocksAPIService, getApp(), runAll(), ServiceManager +Cohesion: 0.25 +Nodes (6): initialize(), initialize(), P5: register memory maintenance on the shared scheduler. Kept in this ser, registerMemoryMaintenanceJob(), getApp(), runAll() ### Community 538 - "Community 538" -Cohesion: 0.4 -Nodes (5): Category 8: Testing Gaps (MEDIUM), Issue 8.1 — No integration tests for full request lifecycle, Issue 8.2 — No tests for scraper, stocks query, or cache, Issue 8.3 — No tests for Google OAuth callback, Issue 8.4 — No tests for session cleanup +Cohesion: 0.14 +Nodes (13): dispatchToolCall(), execute_code(), list_files(), Read a file from the workspace. Args: path: Path to the file (e., Write a file to the workspace. Use this to save data files (CSV, JSON, scri, List files in the workspace directory. Args: path: Directory pat, Get a download link for a workspace file to share with the user. Use this, Search user's saved memories, preferences, and past analysis context. Use (+5 more) + +### Community 539 - "Community 539" +Cohesion: 0.22 +Nodes (8): 1. Feature inventory + nav structure, 2. User lifecycle end-to-end, 3. Wallet API reference, 4. Data model inference (from payloads, no DB access), 5. Product logic, 5b. Gaps / unverified (do not treat as fact), 6. Concrete Mansa proposal (build first → later; minimal sketches), Investidor10 Wallet — Empirical Research for Mansa ### Community 540 - "Community 540" Cohesion: 0.29 Nodes (6): code:python (import argparse), code:bash (git add bench/bench_memory_vector.py), Global Constraints, Lane 4: Before/After Bench Implementation Plan, Task 1: Bench script with synthetic scale sweep, Task 2: Record baseline and post-lane numbers ### Community 541 - "Community 541" -Cohesion: 0.24 -Nodes (5): lifespan(), status(), checkDatabaseConnection(), checkSingleDb(), runMigrations() +Cohesion: 0.2 +Nodes (9): Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: full sessions listing., Covers lines 66, 68-72, 74: full sessions listing., Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: full sessions listing., Covers lines 66, 68-72, 74: GET /user/sessions., Covers lines 66, 68-72, 74: full sessions listing. (+1 more) ### Community 542 - "Community 542" Cohesion: 0.5 @@ -1829,13 +1891,17 @@ Nodes (3): at, label, rows Cohesion: 0.2 Nodes (9): Invalid date format raises exception (line 132)., Invalid date format raises exception (line 132)., Invalid date format raises exception (line 132)., Invalid date format raises exception (line 132)., Invalid date format raises exception (line 132)., Invalid date format raises exception (line 132)., Invalid date format raises exception (line 132)., Invalid date format raises exception (line 132). (+1 more) +### Community 544 - "Community 544" +Cohesion: 0.29 +Nodes (6): Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 48-49: jwt.ExpiredSignatureError. + ### Community 545 - "Community 545" Cohesion: 0.29 Nodes (7): code:python (def test_split_cliff_no_fake_loss_on_adjusted_series(monkeyp), code:python (def test_snapshot_includes_received_and_cash_gain(dbSession,), code:python (def test_history_merges_dividend_receipts(dbSession, sampleU), code:python (def test_ex_div_methodology_decides_received_stacking(dbSess), code:python (def ex_div_smoothing_verdict(padrao_before: float, padrao_af), code:bash (git add main/app/wallet/manager.py main/controller/wallet_co), Task 12: Split-cliff regression test + snapshot/history dividend extension + final gate ### Community 546 - "Community 546" -Cohesion: 0.29 -Nodes (6): Covers lines 48-49: user not in DB., Covers lines 48-49: user not in DB., Covers lines 48-49: user not in DB., Covers lines 48-49: user not in DB., Covers lines 48-49: user not in DB., Covers line 16: empty password raises ValueError. +Cohesion: 0.16 +Nodes (14): execute_code(), Store a value in the harness state for this session. Use this to save inter, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis,, Execute Python code in an isolated sandbox. Use for quantitative analysis, (+6 more) ### Community 547 - "Community 547" Cohesion: 0.33 @@ -1891,23 +1957,19 @@ Nodes (4): code:python (import pytest), code:python (import logging), code:bash ### Community 560 - "Community 560" Cohesion: 0.29 -Nodes (6): Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 65-67: unexpected exception., Covers lines 48-49: jwt.ExpiredSignatureError. - -### Community 561 - "Community 561" -Cohesion: 0.29 Nodes (6): Covers lines 37-38, 46, 51, 58 (sessionId is None): skips session validation., Covers lines 37-38, 46, 51, 58 (sessionId is None): skips session validation., Covers lines 37-38, 46, 51, 58 (sessionId is None): skips session validation., Covers lines 37-38, 46, 51, 58 (sessionId is None): skips session validation., Covers lines 37-38, 46, 51, 58 (sessionId is None): skips session validation., Covers lines 37-38, 46, 51, 58 (sessionId is None): skips session validation. ### Community 562 - "Community 562" -Cohesion: 0.4 -Nodes (5): initialize(), P5: register the scraper cron jobs on the shared scheduler. Kept in this, registerScraperJobs(), runScraper(), ScraperService +Cohesion: 0.29 +Nodes (6): GET /cotations without search returns 422., GET /cotations without search returns 422., GET /cotations without search returns 422., GET /cotations without search returns 422., GET /cotations without search returns 422., GET /cotations without search returns 422. ### Community 563 - "Community 563" Cohesion: 0.33 -Nodes (6): Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval., TestAddRoleToUser +Nodes (5): Tests for optimized search filtering, Tests for optimized search filtering, Filter should use ticker index for O(1) lookup, Filter should use ticker index for O(1) lookup, TestFilterBySearchTerms ### Community 564 - "Community 564" -Cohesion: 0.33 -Nodes (5): Covers lines 17, 22-27: user found, role not present, role added., Covers lines 17, 22-27: user found, role not present, role added., Covers lines 17, 22-27: user found, role not present, role added., Covers lines 17, 22-27: user found, role not present, role added., Covers lines 17, 22-27: user found, role not present, role added. +Cohesion: 0.22 +Nodes (6): Store a memory about the user's preferences, analysis results, or feedback., save_memory(), batchCosineSimilarity(), contentHash(), embed(), normalizeRows() ### Community 565 - "Community 565" Cohesion: 0.33 @@ -1922,79 +1984,179 @@ Cohesion: 0.14 Nodes (11): Integration tests for the verifyAPIKey function., Test successful API key verification., Integration tests for the verifyAPIKey function., Test API key verification when quota is exceeded., Test API key verification with invalid key., Test API key verification with missing key., Test API key verification with invalid key., Test that API key system can be disabled. (+3 more) ### Community 568 - "Community 568" -Cohesion: 0.33 -Nodes (5): Covers line 27: user already has the role., Covers line 27: user already has the role., Covers line 27: user already has the role., Covers line 27: user already has the role., Covers lines 42-44: session validation fails. +Cohesion: 0.11 +Nodes (16): Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 17, 22-27: user found, role not present, role added., Covers lines 17, 22-27: user found, role not present, role added., Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 17, 22-27: user found, role not present, role added., Covers lines 13, 17, 19-20, 22-27: UserManager.addRoleToUser., Covers lines 17, 22-27: user found, role not present, role added. (+8 more) ### Community 569 - "Community 569" Cohesion: 0.33 -Nodes (5): Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails. +Nodes (3): initialize(), MCPDetectMiddleware, StocksAPIService ### Community 570 - "Community 570" -Cohesion: 0.18 -Nodes (8): memoryMaintenance(), Even with low score, if accessed → not archived., Even with low score, if accessed → not archived., Already archived memories are skipped., Already archived memories are skipped., _create(), After 10 cycles, preference (0.99^10) > context (0.90^10)., TestTypeAwareDecay +Cohesion: 0.33 +Nodes (6): 2.2 Tooling, code:bash (# Windows/Docker Desktop: do NOT use --network host (the Lin), code:bash (curl -s -o /dev/null -w '%header{x-cache-status}\n' -H "X-AP), code:bash (docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{), code:bash (docker exec api sh -c "pidstat -w -p 1 1 30" # if sysst), code:block15 (tests/perf/nginx/) ### Community 571 - "Community 571" -Cohesion: 0.4 -Nodes (5): Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, TestVerifyAPIKey +Cohesion: 0.29 +Nodes (7): check_cache(), Read a file from the sandbox filesystem. Args: path: Absolute pa, List files in the workspace directory. Args: path: Directory pat, Upload a file to the sandbox filesystem. Use this to push data files (CSV,, Check if a computed result exists in the cache. Use before executing expens, read_sandbox_file(), upload_to_sandbox() ### Community 572 - "Community 572" -Cohesion: 0.5 -Nodes (4): code:python ("""add wallet_holdings and wallet_lots tables), code:python (import main.models.wallet), code:bash (git add migrations/versions/wallet_tables_20260904_add_walle), Task 2: Alembic migration for wallet tables +Cohesion: 0.27 +Nodes (4): Test that invalid API key returns zero rows affected., Test that multiple API keys have independent quotas., Test that invalid API key returns zero rows affected., Test that multiple API keys have independent quotas. + +### Community 573 - "Community 573" +Cohesion: 0.25 +Nodes (8): Read a file from the workspace. Args: path: Path to the file (e., Read a file from the workspace. Args: path: Path to the file (e., Read a file from the workspace. Args: path: Path to the file (e., Read a file from the workspace. Args: path: Path to the file (e., Read a file from the sandbox filesystem. Args: path: Absolute pa, Read a file from the sandbox filesystem. Args: path: Absolute pa, Read a file from the workspace. Args: path: Path to the file (e., read_file() ### Community 574 - "Community 574" +Cohesion: 0.14 +Nodes (9): Verify that getSession() returns per-thread Session instances., Calling getSession() twice in the same thread returns the same object., Two threads must NOT share a Session object., With 20 concurrent threads, every thread must get its own Session., The returned object must be a real requests.Session., TestGetSession, get_session(), Return a requests.Session for the current thread. Sessions are created la (+1 more) + +### Community 577 - "Community 577" Cohesion: 0.33 -Nodes (10): compactCotations(), compactRow(), compactValue(), compressResponse(), fixHeaders(), getAbbr(), getNest(), rebuildAbbrevs() (+2 more) +Nodes (5): replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34). -### Community 575 - "Community 575" +### Community 578 - "Community 578" Cohesion: 0.33 -Nodes (6): dispatchToolCall must route memory tool names via TOOL_REGISTRY., dispatchToolCall must route memory tool names to executeMemoryTool., dispatchToolCall must route memory tool names to executeMemoryTool., dispatchToolCall must route memory tool names to executeMemoryTool., dispatchToolCall must route memory tool names to executeMemoryTool., TestDispatchRoutesMemoryTools +Nodes (5): Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval., Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval., Covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: UserManager.getC, Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval., Covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval. -### Community 577 - "Community 577" +### Community 579 - "Community 579" Cohesion: 0.33 -Nodes (5): replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34)., replaceNan handles direct float NaN values (line 34). +Nodes (5): 0.1 Rev 2 — do FIRST: app cache TTL increase + `/fields` cache (no nginx, no Redis), 0. Purpose and constraints, Next actions (not in scope here), nginx Scaling Plan — reverse proxy + response cache for `/stocks`, and the multi-server evolution, Open decisions (blocking or product-owned) ### Community 580 - "Community 580" -Cohesion: 0.14 -Nodes (9): Verify that getSession() returns per-thread Session instances., Calling getSession() twice in the same thread returns the same object., Two threads must NOT share a Session object., With 20 concurrent threads, every thread must get its own Session., The returned object must be a real requests.Session., TestGetSession, get_session(), Return a requests.Session for the current thread. Sessions are created la (+1 more) +Cohesion: 0.33 +Nodes (6): 2.2 Tooling, code:bash (# Windows/Docker Desktop: do NOT use --network host (the Lin), code:bash (curl -s -o /dev/null -w '%header{x-cache-status}\n' -H "X-AP), code:bash (docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{), code:bash (docker exec api sh -c "pidstat -w -p 1 1 30" # if sysst), code:block15 (tests/perf/nginx/) ### Community 582 - "Community 582" Cohesion: 0.22 Nodes (8): 1. Feature inventory + nav structure, 2. User lifecycle end-to-end, 3. Wallet API reference, 4. Data model inference (from payloads, no DB access), 5. Product logic, 5b. Gaps / unverified (do not treat as fact), 6. Concrete Mansa proposal (build first → later; minimal sketches), Investidor10 Wallet — Empirical Research for Mansa ### Community 583 - "Community 583" -Cohesion: 0.22 -Nodes (8): 1.1 Functional (per surface; tags: EXISTS = build on it, PARTIAL = half reusable, MISSING = greenfield), 1.2 Non-functional, 1. Requirements, 2. Domain model, 3. API contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` → `main/service/wallet_service.py::` → `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout), 4. Phased build plan (writing-plans: each phase independently reviewable; reviewer PASS per phase), 5. Risks / assumptions (honest flags carried over — do not treat as fact), Mansa Wallet — Spec-Driven Implementation Spec +Cohesion: 0.13 +Nodes (14): 1.1 Functional (per surface; tags: EXISTS = build on it, PARTIAL = half reusable, MISSING = greenfield), 1.2 Non-functional, 1. Requirements, 2. Domain model, 3. API contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` → `main/service/wallet_service.py::` → `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout), 4. Phased build plan (writing-plans: each phase independently reviewable; reviewer PASS per phase), 5. Risks / assumptions (honest flags carried over — do not treat as fact), 6.1 DB & migrations (`user_db`) — READY, 2 actions (+6 more) + +### Community 584 - "Community 584" +Cohesion: 0.13 +Nodes (13): Covers lines 95-98: session deleted., Covers lines 96-97: session not found., Covers lines 96-97: session not found., Covers lines 96-97: session not found., Covers lines 95-98: DELETE /prometheus/sessions/{sessionId}., Covers lines 95-98: session deleted., Covers lines 96-97: session not found., Covers lines 95-98: DELETE /prometheus/sessions/{sessionId}. (+5 more) + +### Community 585 - "Community 585" +Cohesion: 0.33 +Nodes (5): Every function in TOOL_REGISTRY must have Gemini-safe signatures. Custom cl, Every function in TOOL_REGISTRY must have Gemini-safe signatures. Custom cl, Regression: HarnessState must never leak into tool signatures., Regression: HarnessState must never leak into tool signatures., TestGeminiCompatibility + +### Community 586 - "Community 586" +Cohesion: 0.21 +Nodes (6): B3Scraper, initialize(), P5: register the scraper cron jobs on the shared scheduler. Kept in this, registerScraperJobs(), runScraper(), ScraperService ### Community 587 - "Community 587" -Cohesion: 0.29 -Nodes (6): GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422., GET /stocks/realtime-cotation without search returns 422. +Cohesion: 0.4 +Nodes (5): Category 8: Testing Gaps (MEDIUM), Issue 8.1 — No integration tests for full request lifecycle, Issue 8.2 — No tests for scraper, stocks query, or cache, Issue 8.3 — No tests for Google OAuth callback, Issue 8.4 — No tests for session cleanup + +### Community 588 - "Community 588" +Cohesion: 0.33 +Nodes (5): Covers line 27: user already has the role., Covers line 27: user already has the role., Covers line 27: user already has the role., Covers line 27: user already has the role., Covers lines 42-44: session validation fails. + +### Community 589 - "Community 589" +Cohesion: 0.15 +Nodes (12): dispatchToolCall must route memory tool names via TOOL_REGISTRY., makeChat must include MEMORY_TOOLS alongside MCP sessions., makeChat must include MEMORY_TOOLS alongside MCP sessions., makeChat must include MEMORY_TOOLS alongside MCP sessions., makeChat must include MEMORY_TOOLS alongside MCP sessions., dispatchToolCall must route memory tool names to executeMemoryTool., makeChat must include MEMORY_TOOLS alongside MCP sessions., dispatchToolCall must route memory tool names to executeMemoryTool. (+4 more) ### Community 590 - "Community 590" -Cohesion: 0.22 -Nodes (7): Integration tests for all query optimizations, Integration tests for all query optimizations, All optimizations should be implemented, All optimizations should be implemented, Query filter should use ticker index, Query filter should use ticker index, TestQueryOptimization +Cohesion: 0.29 +Nodes (5): buildClient(), connect(), ensureFastmcp(), MCPClientPool, _parseServers() + +### Community 591 - "Community 591" +Cohesion: 0.4 +Nodes (4): 0. Purpose and constraints, Next actions (not in scope here), nginx Scaling Plan — reverse proxy + response cache for `/stocks`, and the multi-server evolution, Open decisions (blocking or product-owned) + +### Community 592 - "Community 592" +Cohesion: 0.33 +Nodes (5): Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails., Covers lines 42-44: session validation fails. + +### Community 593 - "Community 593" +Cohesion: 0.5 +Nodes (4): 1.3 Phase P0 — nginx service + config skeleton, code:yaml (nginx:), code:nginx (proxy_cache_path /var/cache/nginx/stocks), code:nginx (upstream stocks_api {) + +### Community 594 - "Community 594" +Cohesion: 0.5 +Nodes (4): 1.4 Phase P1 — cache locations, TTL table, directives, code:nginx (proxy_pass http://stocks_api;), code:nginx (server {), code:bash (K=sk_test_...; U='http://localhost/stocks/historical?search=) ### Community 595 - "Community 595" +Cohesion: 0.19 +Nodes (7): Tests for thread safety utilities (Issues 5 & 6). Issue 5: DiscordHandler use, Verify getSession returns thread-local sessions under concurrency., getSession() must give each thread its own Session., connectivity.checkServiceConnection must call getSession(), not use a global Ses, connectivity.checkServiceConnection must call getSession(), not use a global Ses, TestConcurrentGetSession, TestConcurrentHttpProxy + +### Community 596 - "Community 596" +Cohesion: 0.2 +Nodes (9): ResponseCache, autoAbbreviate(), dedupAbbrev(), detectNestedFields(), generateAbbreviations(), _parse_date(), parseDate(), parseDateEnd() (+1 more) + +### Community 597 - "Community 597" +Cohesion: 0.5 +Nodes (4): 1.3 Phase P0 — nginx service + config skeleton, code:yaml (nginx:), code:nginx (proxy_cache_path /var/cache/nginx/stocks), code:nginx (upstream stocks_api {) + +### Community 598 - "Community 598" +Cohesion: 0.5 +Nodes (4): 1.4 Phase P1 — cache locations, TTL table, directives, code:nginx (proxy_pass http://stocks_api;), code:nginx (server {), code:bash (K=sk_test_...; U='http://localhost/stocks/historical?search=) + +### Community 599 - "Community 599" +Cohesion: 0.38 +Nodes (9): Tests for main/utils/logging_config.py — covers DiscordHandler branches., test_discord_disabled(), test_discord_no_webhook(), test_exception_in_submit(), test_level_below_error(), test_message_truncation(), test_submit_called_on_error(), test_with_exception_info() (+1 more) + +### Community 602 - "Community 602" +Cohesion: 0.24 +Nodes (5): lifespan(), status(), checkDatabaseConnection(), checkSingleDb(), runMigrations() + +### Community 603 - "Community 603" +Cohesion: 0.4 +Nodes (5): Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, Tests covering key.py lines 15-40. Uses asyncio.run() since pytest-asyncio, TestVerifyAPIKey + +### Community 605 - "Community 605" +Cohesion: 0.4 +Nodes (4): _downloadModel(), getEmbeddingModel(), initialize(), OrunmilaService + +### Community 606 - "Community 606" +Cohesion: 0.22 +Nodes (4): Authentication System, Google OAuth, JWT Authentication, TestSessionExpiryConfig + +### Community 607 - "Community 607" +Cohesion: 0.39 +Nodes (8): _build_error_response(), buildErrorResponse(), generic_exception_handler(), genericExceptionHandler(), http_exception_handler(), httpExceptionHandler(), validation_exception_handler(), validationExceptionHandler() + +### Community 609 - "Community 609" +Cohesion: 0.2 +Nodes (8): Covers lines 57-60: admin bypasses permission check and generates key., Covers lines 57-60: admin bypasses permission check and generates key., Covers lines 57-60: admin bypasses permission check and generates key., Covers lines 57-60: admin bypasses permission check and generates key., Covers lines 61-63: exception during key generation (admin path)., Covers lines 61-63: exception during key generation (admin path)., Covers lines 61-63: exception during key generation (admin path)., Covers lines 61-63: exception during key generation (admin path). + +### Community 610 - "Community 610" +Cohesion: 0.33 +Nodes (5): Covers line 24: GET /prometheus/health., Covers line 24: GET /prometheus/health., Covers line 24: GET /prometheus/health., Covers line 24: GET /prometheus/health., TestPrometheusHealth + +### Community 612 - "Community 612" +Cohesion: 0.47 +Nodes (3): TestCleanup, cleanup(), Close the main thread's session at interpreter shutdown. + +### Community 615 - "Community 615" +Cohesion: 0.5 +Nodes (4): code:python ("""add wallet_holdings and wallet_lots tables), code:python (import main.models.wallet), code:bash (git add migrations/versions/wallet_tables_20260904_add_walle), Task 2: Alembic migration for wallet tables + +### Community 617 - "Community 617" Cohesion: 0.67 Nodes (3): checkServiceConnection — success, not found, errors., checkServiceConnection — success, not found, errors., TestCheckServiceConnection -### Community 596 - "Community 596" +### Community 618 - "Community 618" Cohesion: 0.67 Nodes (3): checkMySqlConnection — success, errors, engine=None paths., checkMySqlConnection — success, errors, engine=None paths., TestCheckMySqlConnection ## Knowledge Gaps -- **3075 isolated node(s):** `$schema`, `style`, `rsc`, `tsx`, `config` (+3070 more) +- **3350 isolated node(s):** `$schema`, `style`, `rsc`, `tsx`, `config` (+3345 more) These have ≤1 connection - possible missing edges or undocumented components. -- **231 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. +- **233 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ -- **Why does `Pytest Testing` connect `Community 251` to `Authentication Core`, `Frontend Components`, `Community 129`, `Data Models & Types`, `Community 131`, `Community 518`, `Community 135`, `Community 138`, `Community 140`, `Community 527`, `Community 18`, `Community 147`, `Community 24`, `Community 25`, `Community 26`, `Community 27`, `Community 29`, `Community 32`, `Community 33`, `Community 162`, `Community 40`, `Community 43`, `Community 44`, `Community 45`, `Community 172`, `Community 49`, `Community 51`, `Community 183`, `Community 184`, `Community 186`, `Community 59`, `Community 188`, `Community 61`, `Community 570`, `Community 67`, `Community 475`, `Community 93`, `Community 477`, `Community 482`, `Community 100`, `Community 500`, `Community 502`, `Community 120`?** - _High betweenness centrality (0.079) - this node is a cross-community bridge._ -- **Why does `FastAPI` connect `Community 482` to `Community 129`, `Community 517`, `Community 519`, `Community 530`, `Community 18`, `Community 147`, `Community 536`, `Community 26`, `Community 541`, `Community 33`, `Community 34`, `Community 40`, `Community 169`, `Community 43`, `Community 45`, `Community 58`, `Community 68`, `Community 71`, `Community 84`, `Community 215`, `Community 475`, `Community 477`, `Community 491`, `Community 497`, `Community 500`, `Community 501`, `Community 120`?** - _High betweenness centrality (0.044) - this node is a cross-community bridge._ -- **Why does `UserManager` connect `Community 498` to `Prometheus Agent`, `Community 519`, `Prometheus Memory`, `Community 524`, `Community 141`, `User Roles & Permissions`, `Community 16`, `Community 22`, `Community 28`, `Community 37`, `Community 45`, `Community 47`, `Community 178`, `Community 563`, `Community 565`, `Community 58`, `Community 571`, `Community 61`, `Community 67`, `Community 68`, `Community 86`, `Community 221`, `Community 99`, `Community 231`, `Community 104`, `Community 107`, `Community 493`, `Community 112`, `Community 114`, `Community 120`?** - _High betweenness centrality (0.042) - this node is a cross-community bridge._ +- **Why does `Pytest Testing` connect `Community 93` to `Authentication Core`, `Frontend Components`, `Community 129`, `Data Models & Types`, `Community 518`, `Community 135`, `Community 138`, `Community 140`, `Community 527`, `Community 16`, `Community 18`, `Community 147`, `Community 24`, `Community 25`, `Community 27`, `Community 29`, `Community 32`, `Community 33`, `Community 40`, `Community 44`, `Community 49`, `Community 51`, `Community 59`, `Community 188`, `Community 61`, `Community 67`, `Community 595`, `Community 599`, `Community 600`, `Community 120`, `Community 477`, `Community 606`, `Community 482`, `Community 611`, `Community 100`, `Community 101`, `Community 102`, `Community 104`, `Community 491`, `Community 500`, `Community 502`, `Community 504`, `Community 251`?** + _High betweenness centrality (0.078) - this node is a cross-community bridge._ +- **Why does `FastAPI` connect `Community 482` to `Community 129`, `Community 517`, `Community 519`, `Community 523`, `Community 18`, `Community 147`, `Community 536`, `Community 33`, `Community 34`, `Community 40`, `Community 58`, `Community 576`, `Community 68`, `Community 71`, `Community 596`, `Community 84`, `Community 600`, `Community 602`, `Community 120`, `Community 477`, `Community 222`, `Community 606`, `Community 607`, `Community 491`, `Community 500`, `Community 501`, `Community 504`?** + _High betweenness centrality (0.036) - this node is a cross-community bridge._ +- **Why does `UserManager` connect `Community 45` to `Community 256`, `Prometheus Agent`, `Community 519`, `Community 136`, `Prometheus Memory`, `Community 140`, `Community 524`, `User Roles & Permissions`, `Community 141`, `Community 148`, `Community 22`, `Community 28`, `Community 541`, `Community 37`, `Community 172`, `Community 47`, `Community 565`, `Community 568`, `Community 58`, `Community 61`, `Community 67`, `Community 584`, `Community 603`, `Community 221`, `Community 610`, `Community 99`, `Community 105`, `Community 491`, `Community 107`, `Community 493`, `Community 112`, `Community 114`, `Community 120`, `Community 511`?** + _High betweenness centrality (0.031) - this node is a cross-community bridge._ - **Are the 72 inferred relationships involving `StocksCacheManager` (e.g. with `TestStocksCacheManager` and `TestVerifyAPIKey`) actually correct?** _`StocksCacheManager` has 72 INFERRED edges - model-reasoned connections that need verification._ - **Are the 52 inferred relationships involving `HarnessState` (e.g. with `Prometheus` and `.streamMessage()`) actually correct?** diff --git a/graphify-out/graph.json b/graphify-out/graph.json index 3d3333dc..7e7c7f00 100644 --- a/graphify-out/graph.json +++ b/graphify-out/graph.json @@ -199,7 +199,7 @@ "label": "StocksApiSettings", "file_type": "code", "source_file": "config.py", - "source_location": "L50", + "source_location": "L49", "id": "server_config_stocksapisettings", "community": 102, "norm_label": "stocksapisettings" @@ -208,7 +208,7 @@ "label": "OrunmilaSettings", "file_type": "code", "source_file": "config.py", - "source_location": "L59", + "source_location": "L58", "id": "server_config_orunmilasettings", "community": 102, "norm_label": "orunmilasettings" @@ -217,7 +217,7 @@ "label": "ScraperSettings", "file_type": "code", "source_file": "config.py", - "source_location": "L76", + "source_location": "L75", "id": "server_config_scrapersettings", "community": 102, "norm_label": "scrapersettings" @@ -226,7 +226,7 @@ "label": "DiscordSettings", "file_type": "code", "source_file": "config.py", - "source_location": "L85", + "source_location": "L84", "id": "server_config_discordsettings", "community": 102, "norm_label": "discordsettings" @@ -235,16 +235,16 @@ "label": "Config", "file_type": "code", "source_file": "config.py", - "source_location": "L91", + "source_location": "L90", "id": "server_config_config", - "community": 45, + "community": 140, "norm_label": "config" }, { "label": "getSession()", "file_type": "code", "source_file": "config.py", - "source_location": "L129", + "source_location": "L128", "id": "server_config_getsession", "community": 102, "norm_label": "getsession()" @@ -253,7 +253,7 @@ "label": "getStocksSession()", "file_type": "code", "source_file": "config.py", - "source_location": "L137", + "source_location": "L136", "id": "server_config_getstockssession", "community": 102, "norm_label": "getstockssession()" @@ -264,7 +264,7 @@ "source_file": "run.py", "source_location": "L1", "id": "run_py", - "community": 541, + "community": 602, "norm_label": "run.py" }, { @@ -273,7 +273,7 @@ "source_file": "run.py", "source_location": "L28", "id": "server_run_lifespan", - "community": 541, + "community": 602, "norm_label": "lifespan()" }, { @@ -282,7 +282,7 @@ "source_file": "run.py", "source_location": "L73", "id": "server_run_health", - "community": 541, + "community": 602, "norm_label": "health()" }, { @@ -291,7 +291,7 @@ "source_file": "run.py", "source_location": "L78", "id": "server_run_status", - "community": 541, + "community": 602, "norm_label": "status()" }, { @@ -300,7 +300,7 @@ "source_file": "run.py", "source_location": "L112", "id": "server_run_triggerscraper", - "community": 541, + "community": 602, "norm_label": "triggerscraper()" }, { @@ -2190,7 +2190,7 @@ "source_file": "main/app/authentication/authentication.py", "source_location": "L1", "id": "main_app_authentication_authentication_py", - "community": 68, + "community": 576, "norm_label": "authentication.py" }, { @@ -2199,7 +2199,7 @@ "source_file": "main/app/authentication/authentication.py", "source_location": "L14", "id": "authentication_authentication_authenticationmanager", - "community": 68, + "community": 172, "norm_label": "authenticationmanager" }, { @@ -2208,7 +2208,7 @@ "source_file": "main/app/authentication/authentication.py", "source_location": "L16", "id": "authentication_authentication_createuseraccount", - "community": 43, + "community": 576, "norm_label": "createuseraccount()" }, { @@ -2217,7 +2217,7 @@ "source_file": "main/app/authentication/authentication.py", "source_location": "L51", "id": "authentication_authentication_authenticategoogleuser", - "community": 68, + "community": 576, "norm_label": "authenticategoogleuser()" }, { @@ -2226,7 +2226,7 @@ "source_file": "main/app/authentication/authentication.py", "source_location": "L65", "id": "authentication_authentication_authenticateuser", - "community": 68, + "community": 43, "norm_label": "authenticateuser()" }, { @@ -2235,7 +2235,7 @@ "source_file": "main/app/authentication/authentication.py", "source_location": "L79", "id": "authentication_authentication_resolveuniqueusername", - "community": 68, + "community": 576, "norm_label": "resolveuniqueusername()" }, { @@ -2260,7 +2260,7 @@ "label": "introspectToken()", "file_type": "code", "source_file": "main/app/authentication/introspect.py", - "source_location": "L16", + "source_location": "L14", "id": "authentication_introspect_introspecttoken", "community": 524, "norm_label": "introspecttoken()" @@ -2289,7 +2289,7 @@ "source_file": "main/app/authentication/session.py", "source_location": "L30", "id": "authentication_session_sessionmanager", - "community": 68, + "community": 172, "norm_label": "sessionmanager" }, { @@ -2397,7 +2397,7 @@ "source_file": "main/app/authentication/util.py", "source_location": "L1", "id": "main_app_authentication_util_py", - "community": 43, + "community": 606, "norm_label": "util.py" }, { @@ -2424,7 +2424,7 @@ "source_file": "main/app/authentication/util.py", "source_location": "L31", "id": "authentication_util_createaccesstoken", - "community": 43, + "community": 58, "norm_label": "createaccesstoken()" }, { @@ -2451,7 +2451,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L1", "id": "main_app_orunmila_agent_py", - "community": 256, + "community": 497, "norm_label": "agent.py" }, { @@ -2460,7 +2460,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L25", "id": "orunmila_agent_safefilter", - "community": 256, + "community": 497, "norm_label": "safefilter()" }, { @@ -2469,7 +2469,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L31", "id": "orunmila_agent_persistevent", - "community": 256, + "community": 497, "norm_label": "persistevent()" }, { @@ -2478,7 +2478,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L45", "id": "orunmila_agent_getclient", - "community": 256, + "community": 497, "norm_label": "getclient()" }, { @@ -2487,7 +2487,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L208", "id": "orunmila_agent_orunmila", - "community": 256, + "community": 497, "norm_label": "orunmila" }, { @@ -2496,7 +2496,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L209", "id": "orunmila_agent_orunmila_init", - "community": 256, + "community": 497, "norm_label": ".__init__()" }, { @@ -2505,7 +2505,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L213", "id": "orunmila_agent_buildsystemprompt", - "community": 256, + "community": 497, "norm_label": "buildsystemprompt()" }, { @@ -2514,7 +2514,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L242", "id": "orunmila_agent_orunmila_makechat", - "community": 256, + "community": 497, "norm_label": ".makechat()" }, { @@ -2523,7 +2523,7 @@ "source_file": "main/app/orunmila/agent.py", "source_location": "L253", "id": "orunmila_agent_orunmila_streammessage", - "community": 256, + "community": 497, "norm_label": ".streammessage()" }, { @@ -2532,7 +2532,7 @@ "source_file": "main/app/orunmila/chat.py", "source_location": "L1", "id": "main_app_orunmila_chat_py", - "community": 136, + "community": 231, "norm_label": "chat.py" }, { @@ -2541,7 +2541,7 @@ "source_file": "main/app/orunmila/chat.py", "source_location": "L13", "id": "orunmila_chat_orunmilachatmanager", - "community": 45, + "community": 231, "norm_label": "orunmilachatmanager" }, { @@ -2550,61 +2550,61 @@ "source_file": "main/app/orunmila/chat.py", "source_location": "L15", "id": "orunmila_chat_getusersessions", - "community": 136, + "community": 231, "norm_label": "getusersessions()" }, { "label": "createSession()", "file_type": "code", "source_file": "main/app/orunmila/chat.py", - "source_location": "L33", + "source_location": "L34", "id": "orunmila_chat_createsession", - "community": 136, + "community": 231, "norm_label": "createsession()" }, { "label": "updateSessionTitle()", "file_type": "code", "source_file": "main/app/orunmila/chat.py", - "source_location": "L41", + "source_location": "L42", "id": "orunmila_chat_updatesessiontitle", - "community": 136, + "community": 231, "norm_label": "updatesessiontitle()" }, { "label": "appendHistory()", "file_type": "code", "source_file": "main/app/orunmila/chat.py", - "source_location": "L52", + "source_location": "L53", "id": "orunmila_chat_appendhistory", - "community": 136, + "community": 231, "norm_label": "appendhistory()" }, { "label": "getHistory()", "file_type": "code", "source_file": "main/app/orunmila/chat.py", - "source_location": "L71", + "source_location": "L72", "id": "orunmila_chat_gethistory", - "community": 136, + "community": 231, "norm_label": "gethistory()" }, { "label": "deleteSession()", "file_type": "code", "source_file": "main/app/orunmila/chat.py", - "source_location": "L92", + "source_location": "L93", "id": "orunmila_chat_deletesession", - "community": 136, + "community": 231, "norm_label": "deletesession()" }, { "label": "verifySessionOwnership()", "file_type": "code", "source_file": "main/app/orunmila/chat.py", - "source_location": "L106", + "source_location": "L107", "id": "orunmila_chat_verifysessionownership", - "community": 136, + "community": 231, "norm_label": "verifysessionownership()" }, { @@ -2613,7 +2613,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L1", "id": "main_app_orunmila_compact_py", - "community": 474, + "community": 162, "norm_label": "compact.py" }, { @@ -2622,7 +2622,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L35", "id": "orunmila_compact_gettokenizer", - "community": 474, + "community": 162, "norm_label": "gettokenizer()" }, { @@ -2631,7 +2631,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L47", "id": "orunmila_compact_counttokens", - "community": 474, + "community": 162, "norm_label": "counttokens()" }, { @@ -2640,7 +2640,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L64", "id": "orunmila_compact_getstocksfieldsurl", - "community": 474, + "community": 162, "norm_label": "getstocksfieldsurl()" }, { @@ -2649,7 +2649,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L68", "id": "orunmila_compact_istransientfieldserror", - "community": 474, + "community": 162, "norm_label": "istransientfieldserror()" }, { @@ -2658,7 +2658,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L83", "id": "orunmila_compact_fetchfieldspayload", - "community": 474, + "community": 162, "norm_label": "fetchfieldspayload()" }, { @@ -2667,7 +2667,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L89", "id": "orunmila_compact_loadfielddata", - "community": 474, + "community": 162, "norm_label": "loadfielddata()" }, { @@ -2676,7 +2676,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L105", "id": "orunmila_compact_getmetricregex", - "community": 474, + "community": 162, "norm_label": "getmetricregex()" }, { @@ -2685,7 +2685,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L119", "id": "orunmila_compact_dedup", - "community": 474, + "community": 162, "norm_label": "dedup()" }, { @@ -2694,7 +2694,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L123", "id": "orunmila_compact_extracttickers", - "community": 474, + "community": 162, "norm_label": "extracttickers()" }, { @@ -2703,7 +2703,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L127", "id": "orunmila_compact_extractmetrics", - "community": 474, + "community": 162, "norm_label": "extractmetrics()" }, { @@ -2712,7 +2712,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L131", "id": "orunmila_compact_extractdecisions", - "community": 474, + "community": 162, "norm_label": "extractdecisions()" }, { @@ -2721,7 +2721,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L145", "id": "orunmila_compact_extractsnapshots", - "community": 474, + "community": 162, "norm_label": "extractsnapshots()" }, { @@ -2730,7 +2730,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L158", "id": "orunmila_compact_extracttoolcalls", - "community": 474, + "community": 162, "norm_label": "extracttoolcalls()" }, { @@ -2739,7 +2739,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L174", "id": "orunmila_compact_buildsummary", - "community": 474, + "community": 162, "norm_label": "buildsummary()" }, { @@ -2748,7 +2748,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L195", "id": "orunmila_compact_orunmilacompactor", - "community": 256, + "community": 497, "norm_label": "orunmilacompactor" }, { @@ -2757,7 +2757,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L196", "id": "orunmila_compact_orunmilacompactor_shouldcompact", - "community": 256, + "community": 497, "norm_label": ".shouldcompact()" }, { @@ -2766,7 +2766,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L213", "id": "orunmila_compact_orunmilacompactor_getcompactablechunk", - "community": 256, + "community": 497, "norm_label": ".getcompactablechunk()" }, { @@ -2775,7 +2775,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L222", "id": "orunmila_compact_orunmilacompactor_extractepisode", - "community": 474, + "community": 162, "norm_label": ".extractepisode()" }, { @@ -2784,7 +2784,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L244", "id": "orunmila_compact_orunmilacompactor_consolidate", - "community": 256, + "community": 497, "norm_label": ".consolidate()" }, { @@ -2793,7 +2793,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L271", "id": "orunmila_compact_orunmilacompactor_compact", - "community": 256, + "community": 497, "norm_label": ".compact()" }, { @@ -2802,7 +2802,7 @@ "source_file": "main/app/orunmila/compact.py", "source_location": "L310", "id": "orunmila_compact_orunmilacompactor_getepisodes", - "community": 256, + "community": 497, "norm_label": ".getepisodes()" }, { @@ -2937,7 +2937,7 @@ "source_file": "main/app/orunmila/memory.py", "source_location": "L64", "id": "orunmila_memory_memorycandidate", - "community": 45, + "community": 140, "norm_label": "memorycandidate" }, { @@ -2946,7 +2946,7 @@ "source_file": "", "source_location": "", "id": "basemodel", - "community": 45, + "community": 140, "norm_label": "basemodel" }, { @@ -2955,7 +2955,7 @@ "source_file": "main/app/orunmila/memory.py", "source_location": "L90", "id": "orunmila_memory_newtokencache", - "community": 256, + "community": 497, "norm_label": "newtokencache()" }, { @@ -3027,7 +3027,7 @@ "source_file": "main/app/orunmila/memory.py", "source_location": "L179", "id": "orunmila_memory_sumtokens", - "community": 137, + "community": 162, "norm_label": "sumtokens()" }, { @@ -3036,7 +3036,7 @@ "source_file": "main/app/orunmila/memory.py", "source_location": "L194", "id": "orunmila_memory_orunmilamemory", - "community": 45, + "community": 140, "norm_label": "orunmilamemory" }, { @@ -3396,7 +3396,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L1", "id": "main_app_orunmila_tools_py", - "community": 495, + "community": 538, "norm_label": "tools.py" }, { @@ -3405,7 +3405,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L20", "id": "orunmila_tools_search_memory", - "community": 495, + "community": 538, "norm_label": "search_memory()" }, { @@ -3414,7 +3414,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L51", "id": "orunmila_tools_save_memory", - "community": 535, + "community": 564, "norm_label": "save_memory()" }, { @@ -3423,7 +3423,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L93", "id": "orunmila_tools_execute_code", - "community": 495, + "community": 538, "norm_label": "execute_code()" }, { @@ -3432,7 +3432,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L114", "id": "orunmila_tools_read_file", - "community": 495, + "community": 538, "norm_label": "read_file()" }, { @@ -3441,7 +3441,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L128", "id": "orunmila_tools_write_file", - "community": 495, + "community": 538, "norm_label": "write_file()" }, { @@ -3450,7 +3450,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L144", "id": "orunmila_tools_list_files", - "community": 495, + "community": 538, "norm_label": "list_files()" }, { @@ -3459,7 +3459,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L157", "id": "orunmila_tools_serve_file", - "community": 495, + "community": 538, "norm_label": "serve_file()" }, { @@ -3468,7 +3468,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L190", "id": "orunmila_tools_dispatchtoolcall", - "community": 495, + "community": 538, "norm_label": "dispatchtoolcall()" }, { @@ -3477,7 +3477,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L21", "id": "orunmila_tools_rationale_21", - "community": 495, + "community": 538, "norm_label": "search user's saved memories, preferences, and past analysis context. use" }, { @@ -3486,7 +3486,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L52", "id": "orunmila_tools_rationale_52", - "community": 535, + "community": 564, "norm_label": "store a memory about the user's preferences, analysis results, or feedback." }, { @@ -3495,7 +3495,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L94", "id": "orunmila_tools_rationale_94", - "community": 495, + "community": 538, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis," }, { @@ -3504,7 +3504,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L115", "id": "orunmila_tools_rationale_115", - "community": 495, + "community": 538, "norm_label": "read a file from the workspace. args: path: path to the file (e." }, { @@ -3513,7 +3513,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L129", "id": "orunmila_tools_rationale_129", - "community": 495, + "community": 538, "norm_label": "write a file to the workspace. use this to save data files (csv, json, scri" }, { @@ -3522,7 +3522,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L145", "id": "orunmila_tools_rationale_145", - "community": 495, + "community": 538, "norm_label": "list files in the workspace directory. args: path: directory pat" }, { @@ -3531,7 +3531,7 @@ "source_file": "main/app/orunmila/tools.py", "source_location": "L158", "id": "orunmila_tools_rationale_158", - "community": 495, + "community": 538, "norm_label": "get a download link for a workspace file to share with the user. use this" }, { @@ -3540,7 +3540,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L1", "id": "main_app_orunmila_vector_py", - "community": 535, + "community": 564, "norm_label": "vector.py" }, { @@ -3549,7 +3549,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L10", "id": "orunmila_vector_normalizerows", - "community": 535, + "community": 564, "norm_label": "normalizerows()" }, { @@ -3558,7 +3558,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L15", "id": "orunmila_vector_embed", - "community": 535, + "community": 564, "norm_label": "embed()" }, { @@ -3567,7 +3567,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L19", "id": "orunmila_vector_decodeembeddings", - "community": 535, + "community": 564, "norm_label": "decodeembeddings()" }, { @@ -3576,7 +3576,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L41", "id": "orunmila_vector_batchcosinesimilarity", - "community": 535, + "community": 564, "norm_label": "batchcosinesimilarity()" }, { @@ -3585,7 +3585,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L51", "id": "orunmila_vector_contenthash", - "community": 535, + "community": 564, "norm_label": "contenthash()" }, { @@ -3594,7 +3594,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L55", "id": "orunmila_vector_tovectorstring", - "community": 535, + "community": 564, "norm_label": "tovectorstring()" }, { @@ -3603,7 +3603,7 @@ "source_file": "main/app/orunmila/vector.py", "source_location": "L59", "id": "orunmila_vector_fromvectorstring", - "community": 535, + "community": 564, "norm_label": "fromvectorstring()" }, { @@ -3639,7 +3639,7 @@ "source_file": "main/app/scraper_b3/scraper.py", "source_location": "L42", "id": "scraper_b3_scraper_b3scraper", - "community": 21, + "community": 586, "norm_label": "b3scraper" }, { @@ -3711,7 +3711,7 @@ "source_file": "main/app/scraper_b3/scraper.py", "source_location": "L230", "id": "scraper_b3_scraper_b3scraper_historicalcotationprofits_oceans14", - "community": 21, + "community": 586, "norm_label": ".historicalcotationprofits_oceans14()" }, { @@ -3736,7 +3736,7 @@ "label": "stockNews()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L285", + "source_location": "L281", "id": "scraper_b3_scraper_stocknews", "community": 21, "norm_label": "stocknews()" @@ -3745,63 +3745,63 @@ "label": ".fundamentalIndicators()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L298", + "source_location": "L294", "id": "scraper_b3_scraper_b3scraper_fundamentalindicators", - "community": 21, + "community": 586, "norm_label": ".fundamentalindicators()" }, { "label": ".processTicker()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L421", + "source_location": "L417", "id": "scraper_b3_scraper_b3scraper_processticker", - "community": 21, + "community": 586, "norm_label": ".processticker()" }, { "label": ".scrapeStocks()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L452", + "source_location": "L448", "id": "scraper_b3_scraper_b3scraper_scrapestocks", - "community": 21, + "community": 586, "norm_label": ".scrapestocks()" }, { "label": ".reorderColumns()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L499", + "source_location": "L495", "id": "scraper_b3_scraper_b3scraper_reordercolumns", - "community": 21, + "community": 586, "norm_label": ".reordercolumns()" }, { "label": ".serializeComplexTypes()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L508", + "source_location": "L504", "id": "scraper_b3_scraper_b3scraper_serializecomplextypes", - "community": 21, + "community": 586, "norm_label": ".serializecomplextypes()" }, { "label": ".exportJson()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L527", + "source_location": "L523", "id": "scraper_b3_scraper_b3scraper_exportjson", - "community": 21, + "community": 586, "norm_label": ".exportjson()" }, { "label": ".exportMysql()", "file_type": "code", "source_file": "main/app/scraper_b3/scraper.py", - "source_location": "L535", + "source_location": "L531", "id": "scraper_b3_scraper_b3scraper_exportmysql", - "community": 21, + "community": 586, "norm_label": ".exportmysql()" }, { @@ -3835,7 +3835,7 @@ "label": "optimizeDtypes()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L40", + "source_location": "L43", "id": "stocks_api_cache_optimizedtypes", "community": 82, "norm_label": "optimizedtypes()" @@ -3844,7 +3844,7 @@ "label": "arrowTypeFor()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L60", + "source_location": "L63", "id": "stocks_api_cache_arrowtypefor", "community": 82, "norm_label": "arrowtypefor()" @@ -3853,7 +3853,7 @@ "label": "buildFeatherCache()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L77", + "source_location": "L80", "id": "stocks_api_cache_buildfeathercache", "community": 82, "norm_label": "buildfeathercache()" @@ -3862,7 +3862,7 @@ "label": "tryBuildLock()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L168", + "source_location": "L171", "id": "stocks_api_cache_trybuildlock", "community": 82, "norm_label": "trybuildlock()" @@ -3871,7 +3871,7 @@ "label": "sortCacheFrame()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L185", + "source_location": "L188", "id": "stocks_api_cache_sortcacheframe", "community": 82, "norm_label": "sortcacheframe()" @@ -3880,16 +3880,25 @@ "label": "buildTickerIndex()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L195", + "source_location": "L198", "id": "stocks_api_cache_buildtickerindex", "community": 82, "norm_label": "buildtickerindex()" }, + { + "label": "readFeatherDataFrame()", + "file_type": "code", + "source_file": "main/app/stocks_api/cache.py", + "source_location": "L207", + "id": "stocks_api_cache_readfeatherdataframe", + "community": 82, + "norm_label": "readfeatherdataframe()" + }, { "label": "StocksCacheManager", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L204", + "source_location": "L214", "id": "stocks_api_cache_stockscachemanager", "community": 42, "norm_label": "stockscachemanager" @@ -3898,7 +3907,7 @@ "label": ".__init__()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L205", + "source_location": "L215", "id": "stocks_api_cache_stockscachemanager_init", "community": 42, "norm_label": ".__init__()" @@ -3907,7 +3916,7 @@ "label": ".snapshot()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L213", + "source_location": "L223", "id": "stocks_api_cache_stockscachemanager_snapshot", "community": 42, "norm_label": ".snapshot()" @@ -3916,7 +3925,7 @@ "label": ".cacheScheduler()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L217", + "source_location": "L227", "id": "stocks_api_cache_stockscachemanager_cachescheduler", "community": 82, "norm_label": ".cachescheduler()" @@ -3925,7 +3934,7 @@ "label": ".loadFromFeather()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L228", + "source_location": "L238", "id": "stocks_api_cache_stockscachemanager_loadfromfeather", "community": 82, "norm_label": ".loadfromfeather()" @@ -3934,7 +3943,7 @@ "label": ".getCachedStocks()", "file_type": "code", "source_file": "main/app/stocks_api/cache.py", - "source_location": "L247", + "source_location": "L257", "id": "stocks_api_cache_stockscachemanager_getcachedstocks", "community": 82, "norm_label": ".getcachedstocks()" @@ -4024,7 +4033,7 @@ "label": "hashApiKey()", "file_type": "code", "source_file": "main/app/stocks_api/key.py", - "source_location": "L25", + "source_location": "L19", "id": "stocks_api_key_hashapikey", "community": 500, "norm_label": "hashapikey()" @@ -4033,7 +4042,7 @@ "label": "createStoredApiKey()", "file_type": "code", "source_file": "main/app/stocks_api/key.py", - "source_location": "L29", + "source_location": "L23", "id": "stocks_api_key_createstoredapikey", "community": 500, "norm_label": "createstoredapikey()" @@ -4042,7 +4051,7 @@ "label": "isValidStoredKey()", "file_type": "code", "source_file": "main/app/stocks_api/key.py", - "source_location": "L35", + "source_location": "L29", "id": "stocks_api_key_isvalidstoredkey", "community": 500, "norm_label": "isvalidstoredkey()" @@ -4051,7 +4060,7 @@ "label": "verifyAPIKey()", "file_type": "code", "source_file": "main/app/stocks_api/key.py", - "source_location": "L48", + "source_location": "L42", "id": "stocks_api_key_verifyapikey", "community": 500, "norm_label": "verifyapikey()" @@ -4132,7 +4141,7 @@ "label": "filterBySearchTerms()", "file_type": "code", "source_file": "main/app/stocks_api/query.py", - "source_location": "L153", + "source_location": "L156", "id": "stocks_api_query_filterbysearchterms", "community": 517, "norm_label": "filterbysearchterms()" @@ -4141,7 +4150,7 @@ "label": "queryHistorical()", "file_type": "code", "source_file": "main/app/stocks_api/query.py", - "source_location": "L171", + "source_location": "L174", "id": "stocks_api_query_queryhistorical", "community": 517, "norm_label": "queryhistorical()" @@ -4150,7 +4159,7 @@ "label": "queryFundamental()", "file_type": "code", "source_file": "main/app/stocks_api/query.py", - "source_location": "L228", + "source_location": "L231", "id": "stocks_api_query_queryfundamental", "community": 517, "norm_label": "queryfundamental()" @@ -4159,7 +4168,7 @@ "label": "queryCotations()", "file_type": "code", "source_file": "main/app/stocks_api/query.py", - "source_location": "L291", + "source_location": "L294", "id": "stocks_api_query_querycotations", "community": 517, "norm_label": "querycotations()" @@ -4168,7 +4177,7 @@ "label": "isTransientLiveError()", "file_type": "code", "source_file": "main/app/stocks_api/query.py", - "source_location": "L332", + "source_location": "L335", "id": "stocks_api_query_istransientliveerror", "community": 517, "norm_label": "istransientliveerror()" @@ -4177,7 +4186,7 @@ "label": "fetchLivePayload()", "file_type": "code", "source_file": "main/app/stocks_api/query.py", - "source_location": "L347", + "source_location": "L350", "id": "stocks_api_query_fetchlivepayload", "community": 517, "norm_label": "fetchlivepayload()" @@ -4186,7 +4195,7 @@ "label": "queryLiveCotation()", "file_type": "code", "source_file": "main/app/stocks_api/query.py", - "source_location": "L356", + "source_location": "L359", "id": "stocks_api_query_querylivecotation", "community": 517, "norm_label": "querylivecotation()" @@ -4197,7 +4206,7 @@ "source_file": "main/app/stocks_api/sync_cache.py", "source_location": "L1", "id": "main_app_stocks_api_sync_cache_py", - "community": 511, + "community": 82, "norm_label": "sync_cache.py" }, { @@ -4206,16 +4215,34 @@ "source_file": "main/app/stocks_api/sync_cache.py", "source_location": "L14", "id": "stocks_api_sync_cache_cache", - "community": 511, + "community": 82, "norm_label": "cache()" }, + { + "label": "clearEndpointCache()", + "file_type": "code", + "source_file": "main/app/stocks_api/sync_cache.py", + "source_location": "L37", + "id": "stocks_api_sync_cache_clearendpointcache", + "community": 82, + "norm_label": "clearendpointcache()" + }, + { + "label": "Drop every cached endpoint body \u2014 called when the feather frame is replaced.", + "file_type": "rationale", + "source_file": "main/app/stocks_api/sync_cache.py", + "source_location": "L38", + "id": "stocks_api_sync_cache_rationale_38", + "community": 82, + "norm_label": "drop every cached endpoint body \u2014 called when the feather frame is replaced." + }, { "label": "util.py", "file_type": "code", "source_file": "main/app/stocks_api/util.py", "source_location": "L1", "id": "main_app_stocks_api_util_py", - "community": 215, + "community": 596, "norm_label": "util.py" }, { @@ -4224,7 +4251,7 @@ "source_file": "main/app/stocks_api/util.py", "source_location": "L17", "id": "stocks_api_util_dedupabbrev", - "community": 215, + "community": 596, "norm_label": "dedupabbrev()" }, { @@ -4233,7 +4260,7 @@ "source_file": "main/app/stocks_api/util.py", "source_location": "L26", "id": "stocks_api_util_autoabbreviate", - "community": 215, + "community": 596, "norm_label": "autoabbreviate()" }, { @@ -4242,7 +4269,7 @@ "source_file": "main/app/stocks_api/util.py", "source_location": "L47", "id": "stocks_api_util_generateabbreviations", - "community": 215, + "community": 596, "norm_label": "generateabbreviations()" }, { @@ -4260,7 +4287,7 @@ "source_file": "main/app/stocks_api/util.py", "source_location": "L73", "id": "stocks_api_util_parsedate", - "community": 215, + "community": 596, "norm_label": "parsedate()" }, { @@ -4278,7 +4305,7 @@ "source_file": "main/app/stocks_api/util.py", "source_location": "L96", "id": "stocks_api_util_detectnestedfields", - "community": 215, + "community": 596, "norm_label": "detectnestedfields()" }, { @@ -4296,7 +4323,7 @@ "source_file": "main/app/user/user.py", "source_location": "L15", "id": "user_user_usermanager", - "community": 498, + "community": 45, "norm_label": "usermanager" }, { @@ -4330,7 +4357,7 @@ "label": "isSecureScheme()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L35", + "source_location": "L32", "id": "controller_authentication_controller_issecurescheme", "community": 58, "norm_label": "issecurescheme()" @@ -4339,7 +4366,7 @@ "label": "resolveCookieDomain()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L39", + "source_location": "L36", "id": "controller_authentication_controller_resolvecookiedomain", "community": 58, "norm_label": "resolvecookiedomain()" @@ -4348,7 +4375,7 @@ "label": "issueSessionCookie()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L44", + "source_location": "L41", "id": "controller_authentication_controller_issuesessioncookie", "community": 58, "norm_label": "issuesessioncookie()" @@ -4357,7 +4384,7 @@ "label": "health()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L65", + "source_location": "L62", "id": "controller_authentication_controller_health", "community": 58, "norm_label": "health()" @@ -4366,7 +4393,7 @@ "label": "register()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L71", + "source_location": "L68", "id": "controller_authentication_controller_register", "community": 58, "norm_label": "register()" @@ -4375,7 +4402,7 @@ "label": "login()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L103", + "source_location": "L100", "id": "controller_authentication_controller_login", "community": 58, "norm_label": "login()" @@ -4384,7 +4411,7 @@ "label": "logout()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L121", + "source_location": "L118", "id": "controller_authentication_controller_logout", "community": 58, "norm_label": "logout()" @@ -4393,7 +4420,7 @@ "label": "introspect()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L157", + "source_location": "L154", "id": "controller_authentication_controller_introspect", "community": 524, "norm_label": "introspect()" @@ -4402,7 +4429,7 @@ "label": "googleLogin()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L182", + "source_location": "L180", "id": "controller_authentication_controller_googlelogin", "community": 58, "norm_label": "googlelogin()" @@ -4411,7 +4438,7 @@ "label": "googleCallback()", "file_type": "code", "source_file": "main/controller/authentication_controller.py", - "source_location": "L198", + "source_location": "L196", "id": "controller_authentication_controller_googlecallback", "community": 58, "norm_label": "googlecallback()" @@ -4422,7 +4449,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L1", "id": "main_controller_orunmila_controller_py", - "community": 497, + "community": 68, "norm_label": "orunmila_controller.py" }, { @@ -4431,7 +4458,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L26", "id": "controller_orunmila_controller_verifysessionownsership", - "community": 497, + "community": 68, "norm_label": "verifysessionownsership()" }, { @@ -4440,7 +4467,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L32", "id": "controller_orunmila_controller_health", - "community": 497, + "community": 68, "norm_label": "health()" }, { @@ -4449,7 +4476,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L37", "id": "controller_orunmila_controller_getsessions", - "community": 497, + "community": 68, "norm_label": "getsessions()" }, { @@ -4458,7 +4485,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L56", "id": "controller_orunmila_controller_updatesessiontitle", - "community": 497, + "community": 68, "norm_label": "updatesessiontitle()" }, { @@ -4467,7 +4494,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L71", "id": "controller_orunmila_controller_gethistory", - "community": 497, + "community": 68, "norm_label": "gethistory()" }, { @@ -4476,7 +4503,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L90", "id": "controller_orunmila_controller_deletesession", - "community": 497, + "community": 68, "norm_label": "deletesession()" }, { @@ -4485,7 +4512,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L103", "id": "controller_orunmila_controller_chat_stream", - "community": 497, + "community": 68, "norm_label": "chat_stream()" }, { @@ -4494,7 +4521,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L154", "id": "controller_orunmila_controller_resumechatstream", - "community": 497, + "community": 68, "norm_label": "resumechatstream()" }, { @@ -4503,7 +4530,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L166", "id": "controller_orunmila_controller_deleteworkspacefile", - "community": 497, + "community": 68, "norm_label": "deleteworkspacefile()" }, { @@ -4512,7 +4539,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L179", "id": "controller_orunmila_controller_downloadworkspacefile", - "community": 497, + "community": 68, "norm_label": "downloadworkspacefile()" }, { @@ -4521,7 +4548,7 @@ "source_file": "main/controller/orunmila_controller.py", "source_location": "L195", "id": "controller_orunmila_controller_listworkspacefiles", - "community": 497, + "community": 68, "norm_label": "listworkspacefiles()" }, { @@ -4530,32 +4557,32 @@ "source_file": "main/controller/stocksapi_controller.py", "source_location": "L1", "id": "main_controller_stocksapi_controller_py", - "community": 169, + "community": 222, "norm_label": "stocksapi_controller.py" }, { "label": "health()", "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L23", + "source_location": "L28", "id": "controller_stocksapi_controller_health", - "community": 169, + "community": 222, "norm_label": "health()" }, { "label": "listFields()", "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L38", + "source_location": "L44", "id": "controller_stocksapi_controller_listfields", - "community": 54, + "community": 222, "norm_label": "listfields()" }, { "label": "getHistorical()", "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L85", + "source_location": "L92", "id": "controller_stocksapi_controller_gethistorical", "community": 197, "norm_label": "gethistorical()" @@ -4564,7 +4591,7 @@ "label": "getFundamental()", "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L150", + "source_location": "L157", "id": "controller_stocksapi_controller_getfundamental", "community": 157, "norm_label": "getfundamental()" @@ -4573,7 +4600,7 @@ "label": "getCotations()", "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L220", + "source_location": "L227", "id": "controller_stocksapi_controller_getcotations", "community": 169, "norm_label": "getcotations()" @@ -4582,7 +4609,7 @@ "label": "getLiveCotation()", "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L276", + "source_location": "L283", "id": "controller_stocksapi_controller_getlivecotation", "community": 81, "norm_label": "getlivecotation()" @@ -4591,17 +4618,17 @@ "label": "Discover available field names before querying /historical or /fundamental.", "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L39", - "id": "controller_stocksapi_controller_rationale_39", - "community": 54, + "source_location": "L45", + "id": "controller_stocksapi_controller_rationale_45", + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental." }, { "label": "Get year-based historical financial data for Brazilian B3 stocks. Returns", "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L95", - "id": "controller_stocksapi_controller_rationale_95", + "source_location": "L102", + "id": "controller_stocksapi_controller_rationale_102", "community": 197, "norm_label": "get year-based historical financial data for brazilian b3 stocks. returns" }, @@ -4609,8 +4636,8 @@ "label": "Get point-in-time fundamental/valuation data for Brazilian B3 stocks. Ret", "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L160", - "id": "controller_stocksapi_controller_rationale_160", + "source_location": "L167", + "id": "controller_stocksapi_controller_rationale_167", "community": 157, "norm_label": "get point-in-time fundamental/valuation data for brazilian b3 stocks. ret" }, @@ -4618,8 +4645,8 @@ "label": "Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur", "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L228", - "id": "controller_stocksapi_controller_rationale_228", + "source_location": "L235", + "id": "controller_stocksapi_controller_rationale_235", "community": 169, "norm_label": "get 10-year daily price history (cotation) for brazilian b3 stocks. retur" }, @@ -4627,8 +4654,8 @@ "label": "Get real-time price quotation for a single Brazilian B3 stock. Returns th", "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L282", - "id": "controller_stocksapi_controller_rationale_282", + "source_location": "L289", + "id": "controller_stocksapi_controller_rationale_289", "community": 81, "norm_label": "get real-time price quotation for a single brazilian b3 stock. returns th" }, @@ -4755,7 +4782,7 @@ "source_file": "main/models/orunmila.py", "source_location": "L1", "id": "main_models_orunmila_py", - "community": 136, + "community": 231, "norm_label": "orunmila.py" }, { @@ -4764,7 +4791,7 @@ "source_file": "main/models/orunmila.py", "source_location": "L7", "id": "models_orunmila_orunmilasession", - "community": 136, + "community": 231, "norm_label": "orunmilasession" }, { @@ -4906,16 +4933,16 @@ "label": "AuthenticationService", "file_type": "code", "source_file": "main/service/authentication_service.py", - "source_location": "L9", + "source_location": "L5", "id": "service_authentication_service_authenticationservice", - "community": 536, + "community": 140, "norm_label": "authenticationservice" }, { "label": "initialize()", "file_type": "code", "source_file": "main/service/authentication_service.py", - "source_location": "L11", + "source_location": "L7", "id": "service_authentication_service_initialize", "community": 536, "norm_label": "initialize()" @@ -4926,7 +4953,7 @@ "source_file": "main/service/orunmila_service.py", "source_location": "L1", "id": "main_service_orunmila_service_py", - "community": 130, + "community": 605, "norm_label": "orunmila_service.py" }, { @@ -4944,7 +4971,7 @@ "source_file": "main/service/orunmila_service.py", "source_location": "L65", "id": "service_orunmila_service_orunmilaservice", - "community": 130, + "community": 605, "norm_label": "orunmilaservice" }, { @@ -4953,7 +4980,7 @@ "source_file": "main/service/orunmila_service.py", "source_location": "L67", "id": "service_orunmila_service_initialize", - "community": 130, + "community": 605, "norm_label": "initialize()" }, { @@ -4962,7 +4989,7 @@ "source_file": "main/service/scraper_service.py", "source_location": "L1", "id": "main_service_scraper_service_py", - "community": 562, + "community": 586, "norm_label": "scraper_service.py" }, { @@ -4971,7 +4998,7 @@ "source_file": "main/service/scraper_service.py", "source_location": "L13", "id": "service_scraper_service_runscraper", - "community": 562, + "community": 586, "norm_label": "runscraper()" }, { @@ -4980,7 +5007,7 @@ "source_file": "main/service/scraper_service.py", "source_location": "L23", "id": "service_scraper_service_registerscraperjobs", - "community": 562, + "community": 586, "norm_label": "registerscraperjobs()" }, { @@ -4989,7 +5016,7 @@ "source_file": "main/service/scraper_service.py", "source_location": "L49", "id": "service_scraper_service_scraperservice", - "community": 562, + "community": 586, "norm_label": "scraperservice" }, { @@ -4998,7 +5025,7 @@ "source_file": "main/service/scraper_service.py", "source_location": "L51", "id": "service_scraper_service_initialize", - "community": 562, + "community": 586, "norm_label": "initialize()" }, { @@ -5007,7 +5034,7 @@ "source_file": "main/service/stocksapi_service.py", "source_location": "L1", "id": "main_service_stocksapi_service_py", - "community": 536, + "community": 569, "norm_label": "stocksapi_service.py" }, { @@ -5016,7 +5043,7 @@ "source_file": "main/service/stocksapi_service.py", "source_location": "L10", "id": "service_stocksapi_service_mcpdetectmiddleware", - "community": 536, + "community": 569, "norm_label": "mcpdetectmiddleware" }, { @@ -5025,7 +5052,7 @@ "source_file": "main/service/stocksapi_service.py", "source_location": "L11", "id": "service_stocksapi_service_mcpdetectmiddleware_init", - "community": 536, + "community": 569, "norm_label": ".__init__()" }, { @@ -5034,7 +5061,7 @@ "source_file": "main/service/stocksapi_service.py", "source_location": "L14", "id": "service_stocksapi_service_mcpdetectmiddleware_call", - "community": 536, + "community": 569, "norm_label": ".__call__()" }, { @@ -5043,7 +5070,7 @@ "source_file": "main/service/stocksapi_service.py", "source_location": "L25", "id": "service_stocksapi_service_stocksapiservice", - "community": 536, + "community": 569, "norm_label": "stocksapiservice" }, { @@ -5052,7 +5079,7 @@ "source_file": "main/service/stocksapi_service.py", "source_location": "L27", "id": "service_stocksapi_service_initialize", - "community": 536, + "community": 569, "norm_label": "initialize()" }, { @@ -5097,7 +5124,7 @@ "source_file": "main/utils/connectivity.py", "source_location": "L1", "id": "main_utils_connectivity_py", - "community": 541, + "community": 602, "norm_label": "connectivity.py" }, { @@ -5106,7 +5133,7 @@ "source_file": "main/utils/connectivity.py", "source_location": "L11", "id": "utils_connectivity_checkdatabaseconnection", - "community": 541, + "community": 602, "norm_label": "checkdatabaseconnection()" }, { @@ -5124,7 +5151,7 @@ "source_file": "main/utils/errors.py", "source_location": "L1", "id": "main_utils_errors_py", - "community": 530, + "community": 607, "norm_label": "errors.py" }, { @@ -5160,7 +5187,7 @@ "source_file": "main/utils/errors.py", "source_location": "L26", "id": "utils_errors_builderrorresponse", - "community": 530, + "community": 607, "norm_label": "builderrorresponse()" }, { @@ -5169,7 +5196,7 @@ "source_file": "main/utils/errors.py", "source_location": "L36", "id": "utils_errors_httpexceptionhandler", - "community": 530, + "community": 607, "norm_label": "httpexceptionhandler()" }, { @@ -5178,7 +5205,7 @@ "source_file": "main/utils/errors.py", "source_location": "L43", "id": "utils_errors_validationexceptionhandler", - "community": 530, + "community": 607, "norm_label": "validationexceptionhandler()" }, { @@ -5187,7 +5214,7 @@ "source_file": "main/utils/errors.py", "source_location": "L55", "id": "utils_errors_genericexceptionhandler", - "community": 530, + "community": 607, "norm_label": "genericexceptionhandler()" }, { @@ -5205,7 +5232,7 @@ "source_file": "main/utils/http_session.py", "source_location": "L1", "id": "main_utils_http_session_py", - "community": 580, + "community": 574, "norm_label": "http_session.py" }, { @@ -5214,7 +5241,7 @@ "source_file": "main/utils/http_session.py", "source_location": "L8", "id": "utils_http_session_getsession", - "community": 580, + "community": 574, "norm_label": "getsession()" }, { @@ -5277,7 +5304,7 @@ "source_file": "main/utils/migrator.py", "source_location": "L1", "id": "main_utils_migrator_py", - "community": 541, + "community": 602, "norm_label": "migrator.py" }, { @@ -5286,7 +5313,7 @@ "source_file": "main/utils/migrator.py", "source_location": "L8", "id": "utils_migrator_runmigrations", - "community": 541, + "community": 602, "norm_label": "runmigrations()" }, { @@ -5331,7 +5358,7 @@ "source_file": "main/utils/roles.py", "source_location": "L1", "id": "main_utils_roles_py", - "community": 491, + "community": 523, "norm_label": "roles.py" }, { @@ -5340,7 +5367,7 @@ "source_file": "main/utils/roles.py", "source_location": "L5", "id": "utils_roles_permission", - "community": 45, + "community": 140, "norm_label": "permission" }, { @@ -5349,7 +5376,7 @@ "source_file": "", "source_location": "", "id": "intflag", - "community": 45, + "community": 491, "norm_label": "intflag" }, { @@ -5367,7 +5394,7 @@ "source_file": "main/utils/roles.py", "source_location": "L17", "id": "utils_roles_roles", - "community": 45, + "community": 491, "norm_label": "roles" }, { @@ -5376,7 +5403,7 @@ "source_file": "main/utils/roles.py", "source_location": "L29", "id": "utils_roles_checkaccess", - "community": 491, + "community": 523, "norm_label": "checkaccess()" }, { @@ -5385,7 +5412,7 @@ "source_file": "main/utils/roles.py", "source_location": "L42", "id": "utils_roles_requirepermission", - "community": 491, + "community": 523, "norm_label": "requirepermission()" }, { @@ -5448,7 +5475,7 @@ "source_file": "main/utils/models/loader.py", "source_location": "L1", "id": "main_utils_models_loader_py", - "community": 130, + "community": 605, "norm_label": "loader.py" }, { @@ -5457,7 +5484,7 @@ "source_file": "main/utils/models/loader.py", "source_location": "L12", "id": "models_loader_getembeddingmodel", - "community": 130, + "community": 605, "norm_label": "getembeddingmodel()" }, { @@ -6112,7 +6139,7 @@ "label": "Health Check", "file_type": "document", "source_file": "README.md", - "source_location": "L92", + "source_location": "L91", "id": "server_readme_health_check", "community": 163, "norm_label": "health check" @@ -6121,7 +6148,7 @@ "label": "code:bash (curl http://localhost:3200/health)", "file_type": "document", "source_file": "README.md", - "source_location": "L94", + "source_location": "L93", "id": "server_readme_codeblock_3", "community": 163, "norm_label": "code:bash (curl http://localhost:3200/health)" @@ -6130,7 +6157,7 @@ "label": "License", "file_type": "document", "source_file": "README.md", - "source_location": "L98", + "source_location": "L97", "id": "server_readme_license", "community": 163, "norm_label": "license" @@ -6148,7 +6175,7 @@ "label": "User structure defined by string roles:", "file_type": "document", "source_file": "TODO.md", - "source_location": "L32", + "source_location": "L39", "id": "server_todo_user_structure_defined_by_string_roles", "community": 187, "norm_label": "user structure defined by string roles:" @@ -6157,7 +6184,7 @@ "label": "USER:", "file_type": "document", "source_file": "TODO.md", - "source_location": "L41", + "source_location": "L48", "id": "server_todo_user", "community": 187, "norm_label": "user:" @@ -6166,7 +6193,7 @@ "label": "PREMIUM:", "file_type": "document", "source_file": "TODO.md", - "source_location": "L44", + "source_location": "L51", "id": "server_todo_premium", "community": 187, "norm_label": "premium:" @@ -6175,7 +6202,7 @@ "label": "DEVELOPER:", "file_type": "document", "source_file": "TODO.md", - "source_location": "L47", + "source_location": "L54", "id": "server_todo_developer", "community": 187, "norm_label": "developer:" @@ -6405,168 +6432,6 @@ "community": 41, "norm_label": "license" }, - { - "label": "investidor10-wallet-research.md", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L1", - "id": "docs_investidor10_wallet_research_md", - "community": 582, - "norm_label": "investidor10-wallet-research.md" - }, - { - "label": "Investidor10 Wallet \u2014 Empirical Research for Mansa", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L1", - "id": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "community": 582, - "norm_label": "investidor10 wallet \u2014 empirical research for mansa" - }, - { - "label": "1. Feature inventory + nav structure", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L10", - "id": "docs_investidor10_wallet_research_1_feature_inventory_nav_structure", - "community": 582, - "norm_label": "1. feature inventory + nav structure" - }, - { - "label": "2. User lifecycle end-to-end", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L30", - "id": "docs_investidor10_wallet_research_2_user_lifecycle_end_to_end", - "community": 582, - "norm_label": "2. user lifecycle end-to-end" - }, - { - "label": "3. Wallet API reference", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L40", - "id": "docs_investidor10_wallet_research_3_wallet_api_reference", - "community": 582, - "norm_label": "3. wallet api reference" - }, - { - "label": "4. Data model inference (from payloads, no DB access)", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L65", - "id": "docs_investidor10_wallet_research_4_data_model_inference_from_payloads_no_db_access", - "community": 582, - "norm_label": "4. data model inference (from payloads, no db access)" - }, - { - "label": "5. Product logic", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L74", - "id": "docs_investidor10_wallet_research_5_product_logic", - "community": 582, - "norm_label": "5. product logic" - }, - { - "label": "5b. Gaps / unverified (do not treat as fact)", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L82", - "id": "docs_investidor10_wallet_research_5b_gaps_unverified_do_not_treat_as_fact", - "community": 582, - "norm_label": "5b. gaps / unverified (do not treat as fact)" - }, - { - "label": "6. Concrete Mansa proposal (build first \u2192 later; minimal sketches)", - "file_type": "document", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L86", - "id": "docs_investidor10_wallet_research_6_concrete_mansa_proposal_build_first_later_minimal_sketches", - "community": 582, - "norm_label": "6. concrete mansa proposal (build first \u2192 later; minimal sketches)" - }, - { - "label": "investidor10-wallet-spec.md", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L1", - "id": "docs_investidor10_wallet_spec_md", - "community": 583, - "norm_label": "investidor10-wallet-spec.md" - }, - { - "label": "Mansa Wallet \u2014 Spec-Driven Implementation Spec", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L1", - "id": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", - "community": 583, - "norm_label": "mansa wallet \u2014 spec-driven implementation spec" - }, - { - "label": "1. Requirements", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L12", - "id": "docs_investidor10_wallet_spec_1_requirements", - "community": 583, - "norm_label": "1. requirements" - }, - { - "label": "1.1 Functional (per surface; tags: EXISTS = build on it, PARTIAL = half reusable, MISSING = greenfield)", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L14", - "id": "docs_investidor10_wallet_spec_1_1_functional_per_surface_tags_exists_build_on_it_partial_half_reusable_missing_greenfield", - "community": 583, - "norm_label": "1.1 functional (per surface; tags: exists = build on it, partial = half reusable, missing = greenfield)" - }, - { - "label": "1.2 Non-functional", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L28", - "id": "docs_investidor10_wallet_spec_1_2_non_functional", - "community": 583, - "norm_label": "1.2 non-functional" - }, - { - "label": "2. Domain model", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L38", - "id": "docs_investidor10_wallet_spec_2_domain_model", - "community": 583, - "norm_label": "2. domain model" - }, - { - "label": "3. API contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout)", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L49", - "id": "docs_investidor10_wallet_spec_3_api_contracts_all_under_api_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout", - "community": 583, - "norm_label": "3. api contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `depends(usermanager.getcurrentuser)` + `depends(getsession)` throughout)" - }, - { - "label": "4. Phased build plan (writing-plans: each phase independently reviewable; reviewer PASS per phase)", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L66", - "id": "docs_investidor10_wallet_spec_4_phased_build_plan_writing_plans_each_phase_independently_reviewable_reviewer_pass_per_phase", - "community": 583, - "norm_label": "4. phased build plan (writing-plans: each phase independently reviewable; reviewer pass per phase)" - }, - { - "label": "5. Risks / assumptions (honest flags carried over \u2014 do not treat as fact)", - "file_type": "document", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L72", - "id": "docs_investidor10_wallet_spec_5_risks_assumptions_honest_flags_carried_over_do_not_treat_as_fact", - "community": 583, - "norm_label": "5. risks / assumptions (honest flags carried over \u2014 do not treat as fact)" - }, { "label": "orunmila.md", "file_type": "document", @@ -7152,6 +7017,969 @@ "community": 23, "norm_label": "license" }, + { + "label": "investidor10-wallet-research.md", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L1", + "id": "docs_superpowers_investidor10_wallet_research_md", + "community": 539, + "norm_label": "investidor10-wallet-research.md" + }, + { + "label": "Investidor10 Wallet \u2014 Empirical Research for Mansa", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L1", + "id": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "community": 539, + "norm_label": "investidor10 wallet \u2014 empirical research for mansa" + }, + { + "label": "1. Feature inventory + nav structure", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L10", + "id": "superpowers_investidor10_wallet_research_1_feature_inventory_nav_structure", + "community": 539, + "norm_label": "1. feature inventory + nav structure" + }, + { + "label": "2. User lifecycle end-to-end", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L30", + "id": "superpowers_investidor10_wallet_research_2_user_lifecycle_end_to_end", + "community": 539, + "norm_label": "2. user lifecycle end-to-end" + }, + { + "label": "3. Wallet API reference", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L40", + "id": "superpowers_investidor10_wallet_research_3_wallet_api_reference", + "community": 539, + "norm_label": "3. wallet api reference" + }, + { + "label": "4. Data model inference (from payloads, no DB access)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L65", + "id": "superpowers_investidor10_wallet_research_4_data_model_inference_from_payloads_no_db_access", + "community": 539, + "norm_label": "4. data model inference (from payloads, no db access)" + }, + { + "label": "5. Product logic", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L74", + "id": "superpowers_investidor10_wallet_research_5_product_logic", + "community": 539, + "norm_label": "5. product logic" + }, + { + "label": "5b. Gaps / unverified (do not treat as fact)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L82", + "id": "superpowers_investidor10_wallet_research_5b_gaps_unverified_do_not_treat_as_fact", + "community": 539, + "norm_label": "5b. gaps / unverified (do not treat as fact)" + }, + { + "label": "6. Concrete Mansa proposal (build first \u2192 later; minimal sketches)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L86", + "id": "superpowers_investidor10_wallet_research_6_concrete_mansa_proposal_build_first_later_minimal_sketches", + "community": 539, + "norm_label": "6. concrete mansa proposal (build first \u2192 later; minimal sketches)" + }, + { + "label": "investidor10-wallet-spec.md", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L1", + "id": "docs_superpowers_investidor10_wallet_spec_md", + "community": 130, + "norm_label": "investidor10-wallet-spec.md" + }, + { + "label": "Mansa Wallet \u2014 Spec-Driven Implementation Spec", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L1", + "id": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "community": 130, + "norm_label": "mansa wallet \u2014 spec-driven implementation spec" + }, + { + "label": "1. Requirements", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L12", + "id": "superpowers_investidor10_wallet_spec_1_requirements", + "community": 130, + "norm_label": "1. requirements" + }, + { + "label": "1.1 Functional (per surface; tags: EXISTS = build on it, PARTIAL = half reusable, MISSING = greenfield)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L14", + "id": "superpowers_investidor10_wallet_spec_1_1_functional_per_surface_tags_exists_build_on_it_partial_half_reusable_missing_greenfield", + "community": 130, + "norm_label": "1.1 functional (per surface; tags: exists = build on it, partial = half reusable, missing = greenfield)" + }, + { + "label": "1.2 Non-functional", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L28", + "id": "superpowers_investidor10_wallet_spec_1_2_non_functional", + "community": 130, + "norm_label": "1.2 non-functional" + }, + { + "label": "2. Domain model", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L38", + "id": "superpowers_investidor10_wallet_spec_2_domain_model", + "community": 130, + "norm_label": "2. domain model" + }, + { + "label": "3. API contracts (all under `/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L49", + "id": "superpowers_investidor10_wallet_spec_3_api_contracts_all_under_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout", + "community": 130, + "norm_label": "3. api contracts (all under `/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `depends(usermanager.getcurrentuser)` + `depends(getsession)` throughout)" + }, + { + "label": "4. Phased build plan (writing-plans: each phase independently reviewable; reviewer PASS per phase)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L66", + "id": "superpowers_investidor10_wallet_spec_4_phased_build_plan_writing_plans_each_phase_independently_reviewable_reviewer_pass_per_phase", + "community": 130, + "norm_label": "4. phased build plan (writing-plans: each phase independently reviewable; reviewer pass per phase)" + }, + { + "label": "5. Risks / assumptions (honest flags carried over \u2014 do not treat as fact)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L72", + "id": "superpowers_investidor10_wallet_spec_5_risks_assumptions_honest_flags_carried_over_do_not_treat_as_fact", + "community": 130, + "norm_label": "5. risks / assumptions (honest flags carried over \u2014 do not treat as fact)" + }, + { + "label": "6. Readiness assessment (s3, verified 2026-09-29) \u2014 prerequisites before P1", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L81", + "id": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "community": 130, + "norm_label": "6. readiness assessment (s3, verified 2026-09-29) \u2014 prerequisites before p1" + }, + { + "label": "6.1 DB & migrations (`user_db`) \u2014 CONTESTED (\u00a77.1): 3 actions, incl. one destructive autogenerate risk", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L87", + "id": "superpowers_investidor10_wallet_spec_6_1_db_migrations_user_db_contested_7_1_3_actions_incl_one_destructive_autogenerate_risk", + "community": 130, + "norm_label": "6.1 db & migrations (`user_db`) \u2014 contested (\u00a77.1): 3 actions, incl. one destructive autogenerate risk" + }, + { + "label": "6.2 Stocks/price access \u2014 CONFIRMED + extended (\u00a77.2)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L94", + "id": "superpowers_investidor10_wallet_spec_6_2_stocks_price_access_confirmed_extended_7_2", + "community": 130, + "norm_label": "6.2 stocks/price access \u2014 confirmed + extended (\u00a77.2)" + }, + { + "label": "6.3 Wiring / auth / tests \u2014 CONTESTED (\u00a77.3): mounting TRUE; gating + test seams missing", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L100", + "id": "superpowers_investidor10_wallet_spec_6_3_wiring_auth_tests_contested_7_3_mounting_true_gating_test_seams_missing", + "community": 130, + "norm_label": "6.3 wiring / auth / tests \u2014 contested (\u00a77.3): mounting true; gating + test seams missing" + }, + { + "label": "6.4 Scraper pipeline (P2 dividends / has_b3) \u2014 CONTESTED (\u00a77.4): data present; source/staleness gaps", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L106", + "id": "superpowers_investidor10_wallet_spec_6_4_scraper_pipeline_p2_dividends_has_b3_contested_7_4_data_present_source_staleness_gaps", + "community": 130, + "norm_label": "6.4 scraper pipeline (p2 dividends / has_b3) \u2014 contested (\u00a77.4): data present; source/staleness gaps" + }, + { + "label": "6.5 Ordered actions before P1 code", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L112", + "id": "superpowers_investidor10_wallet_spec_6_5_ordered_actions_before_p1_code", + "community": 130, + "norm_label": "6.5 ordered actions before p1 code" + }, + { + "label": "7. Independent re-verification (swarm s4, 2026-09-29) \u2014 corrections to \u00a76", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L121", + "id": "superpowers_investidor10_wallet_spec_7_independent_re_verification_swarm_s4_2026_09_29_corrections_to_6", + "community": 130, + "norm_label": "7. independent re-verification (swarm s4, 2026-09-29) \u2014 corrections to \u00a76" + }, + { + "label": "7.1 DB & migrations \u2014 \u00a76.1 CONTESTED: 3 actions, one destructive risk", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L125", + "id": "superpowers_investidor10_wallet_spec_7_1_db_migrations_6_1_contested_3_actions_one_destructive_risk", + "community": 130, + "norm_label": "7.1 db & migrations \u2014 \u00a76.1 contested: 3 actions, one destructive risk" + }, + { + "label": "7.2 Stocks/price access \u2014 \u00a76.2 CONFIRMED, incomplete", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L133", + "id": "superpowers_investidor10_wallet_spec_7_2_stocks_price_access_6_2_confirmed_incomplete", + "community": 130, + "norm_label": "7.2 stocks/price access \u2014 \u00a76.2 confirmed, incomplete" + }, + { + "label": "7.3 Wiring / auth / tests \u2014 \u00a76.3 CONTESTED (mounting TRUE)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L143", + "id": "superpowers_investidor10_wallet_spec_7_3_wiring_auth_tests_6_3_contested_mounting_true", + "community": 130, + "norm_label": "7.3 wiring / auth / tests \u2014 \u00a76.3 contested (mounting true)" + }, + { + "label": "7.4 Scraper pipeline \u2014 \u00a76.4 CONTESTED", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L150", + "id": "superpowers_investidor10_wallet_spec_7_4_scraper_pipeline_6_4_contested", + "community": 130, + "norm_label": "7.4 scraper pipeline \u2014 \u00a76.4 contested" + }, + { + "label": "7.5 Revised pre-P1 actions (supersedes \u00a76.5)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L159", + "id": "superpowers_investidor10_wallet_spec_7_5_revised_pre_p1_actions_supersedes_6_5", + "community": 130, + "norm_label": "7.5 revised pre-p1 actions (supersedes \u00a76.5)" + }, + { + "label": "nginx-scaling-plan.md", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L1", + "id": "docs_superpowers_nginx_scaling_plan_md", + "community": 579, + "norm_label": "nginx-scaling-plan.md" + }, + { + "label": "nginx Scaling Plan \u2014 reverse proxy + response cache for `/stocks`, and the multi-server evolution", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L1", + "id": "superpowers_nginx_scaling_plan_nginx_scaling_plan_reverse_proxy_response_cache_for_stocks_and_the_multi_server_evolution", + "community": 579, + "norm_label": "nginx scaling plan \u2014 reverse proxy + response cache for `/stocks`, and the multi-server evolution" + }, + { + "label": "0. Purpose and constraints", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L17", + "id": "superpowers_nginx_scaling_plan_0_purpose_and_constraints", + "community": 579, + "norm_label": "0. purpose and constraints" + }, + { + "label": "0.1 Rev 2 \u2014 do FIRST: app cache TTL increase + `/fields` cache (no nginx, no Redis)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L35", + "id": "superpowers_nginx_scaling_plan_0_1_rev_2_do_first_app_cache_ttl_increase_fields_cache_no_nginx_no_redis", + "community": 579, + "norm_label": "0.1 rev 2 \u2014 do first: app cache ttl increase + `/fields` cache (no nginx, no redis)" + }, + { + "label": "Part 1 \u2014 Implementation plan", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L64", + "id": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "community": 215, + "norm_label": "part 1 \u2014 implementation plan" + }, + { + "label": "1.1 Architecture decision", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L66", + "id": "superpowers_nginx_scaling_plan_1_1_architecture_decision", + "community": 215, + "norm_label": "1.1 architecture decision" + }, + { + "label": "1.2 File layout", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L79", + "id": "superpowers_nginx_scaling_plan_1_2_file_layout", + "community": 215, + "norm_label": "1.2 file layout" + }, + { + "label": "code:block1 (nginx/)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L82", + "id": "superpowers_nginx_scaling_plan_codeblock_1", + "community": 215, + "norm_label": "code:block1 (nginx/)" + }, + { + "label": "1.3 Phase P0 \u2014 nginx service + config skeleton", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L96", + "id": "superpowers_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton", + "community": 597, + "norm_label": "1.3 phase p0 \u2014 nginx service + config skeleton" + }, + { + "label": "code:yaml (nginx:)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L98", + "id": "superpowers_nginx_scaling_plan_codeblock_2", + "community": 597, + "norm_label": "code:yaml (nginx:)" + }, + { + "label": "code:nginx (proxy_cache_path /var/cache/nginx/stocks)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L118", + "id": "superpowers_nginx_scaling_plan_codeblock_3", + "community": 597, + "norm_label": "code:nginx (proxy_cache_path /var/cache/nginx/stocks)" + }, + { + "label": "code:nginx (upstream stocks_api {)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L139", + "id": "superpowers_nginx_scaling_plan_codeblock_4", + "community": 597, + "norm_label": "code:nginx (upstream stocks_api {)" + }, + { + "label": "1.4 Phase P1 \u2014 cache locations, TTL table, directives", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L152", + "id": "superpowers_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives", + "community": 598, + "norm_label": "1.4 phase p1 \u2014 cache locations, ttl table, directives" + }, + { + "label": "code:nginx (proxy_pass http://stocks_api;)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L155", + "id": "superpowers_nginx_scaling_plan_codeblock_5", + "community": 598, + "norm_label": "code:nginx (proxy_pass http://stocks_api;)" + }, + { + "label": "code:nginx (server {)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L186", + "id": "superpowers_nginx_scaling_plan_codeblock_6", + "community": 598, + "norm_label": "code:nginx (server {)" + }, + { + "label": "code:bash (K=sk_test_...; U='http://localhost/stocks/historical?search=)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L242", + "id": "superpowers_nginx_scaling_plan_codeblock_7", + "community": 598, + "norm_label": "code:bash (k=sk_test_...; u='http://localhost/stocks/historical?search=)" + }, + { + "label": "1.5 Phase P2 \u2014 port scheme, worker containers, keepalive", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L251", + "id": "superpowers_nginx_scaling_plan_1_5_phase_p2_port_scheme_worker_containers_keepalive", + "community": 215, + "norm_label": "1.5 phase p2 \u2014 port scheme, worker containers, keepalive" + }, + { + "label": "code:yaml (stocksapi:)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L257", + "id": "superpowers_nginx_scaling_plan_codeblock_8", + "community": 215, + "norm_label": "code:yaml (stocksapi:)" + }, + { + "label": "1.6 Phase P3 \u2014 remote VPS upstreams + health strategy", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L277", + "id": "superpowers_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy", + "community": 215, + "norm_label": "1.6 phase p3 \u2014 remote vps upstreams + health strategy" + }, + { + "label": "code:nginx (upstream stocks_api {)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L279", + "id": "superpowers_nginx_scaling_plan_codeblock_9", + "community": 215, + "norm_label": "code:nginx (upstream stocks_api {)" + }, + { + "label": "code:nginx (proxy_next_upstream error timeout http_502 http_503 http_504)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L291", + "id": "superpowers_nginx_scaling_plan_codeblock_10", + "community": 215, + "norm_label": "code:nginx (proxy_next_upstream error timeout http_502 http_503 http_504)" + }, + { + "label": "1.7 Phase P4 \u2014 handoff design (no code in this plan)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L309", + "id": "superpowers_nginx_scaling_plan_1_7_phase_p4_handoff_design_no_code_in_this_plan", + "community": 215, + "norm_label": "1.7 phase p4 \u2014 handoff design (no code in this plan)" + }, + { + "label": "1.8 Quota / rate-limit semantics after caching", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L320", + "id": "superpowers_nginx_scaling_plan_1_8_quota_rate_limit_semantics_after_caching", + "community": 215, + "norm_label": "1.8 quota / rate-limit semantics after caching" + }, + { + "label": "1.9 Anti-scraping note (TODO 17)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L332", + "id": "superpowers_nginx_scaling_plan_1_9_anti_scraping_note_todo_17", + "community": 215, + "norm_label": "1.9 anti-scraping note (todo 17)" + }, + { + "label": "1.10 Edge cases / risks (implementation)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L336", + "id": "superpowers_nginx_scaling_plan_1_10_edge_cases_risks_implementation", + "community": 215, + "norm_label": "1.10 edge cases / risks (implementation)" + }, + { + "label": "Part 2 \u2014 Benchmark plan", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L347", + "id": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "community": 522, + "norm_label": "part 2 \u2014 benchmark plan" + }, + { + "label": "2.0 Grounding: what the code actually does", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L349", + "id": "superpowers_nginx_scaling_plan_2_0_grounding_what_the_code_actually_does", + "community": 522, + "norm_label": "2.0 grounding: what the code actually does" + }, + { + "label": "2.1 Hypotheses", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L381", + "id": "superpowers_nginx_scaling_plan_2_1_hypotheses", + "community": 522, + "norm_label": "2.1 hypotheses" + }, + { + "label": "2.2 Tooling", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L390", + "id": "superpowers_nginx_scaling_plan_2_2_tooling", + "community": 580, + "norm_label": "2.2 tooling" + }, + { + "label": "code:bash (# Windows/Docker Desktop: do NOT use --network host (the Lin)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L393", + "id": "superpowers_nginx_scaling_plan_codeblock_11", + "community": 580, + "norm_label": "code:bash (# windows/docker desktop: do not use --network host (the lin)" + }, + { + "label": "code:bash (curl -s -o /dev/null -w '%header{x-cache-status}\\n' -H \"X-AP)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L406", + "id": "superpowers_nginx_scaling_plan_codeblock_12", + "community": 580, + "norm_label": "code:bash (curl -s -o /dev/null -w '%header{x-cache-status}\\n' -h \"x-ap)" + }, + { + "label": "code:bash (docker stats --no-stream --format \"{{.Name}},{{.CPUPerc}},{{)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L414", + "id": "superpowers_nginx_scaling_plan_codeblock_13", + "community": 580, + "norm_label": "code:bash (docker stats --no-stream --format \"{{.name}},{{.cpuperc}},{{)" + }, + { + "label": "code:bash (docker exec api sh -c \"pidstat -w -p 1 1 30\" # if sysst)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L420", + "id": "superpowers_nginx_scaling_plan_codeblock_14", + "community": 580, + "norm_label": "code:bash (docker exec api sh -c \"pidstat -w -p 1 1 30\" # if sysst)" + }, + { + "label": "code:block15 (tests/perf/nginx/)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L431", + "id": "superpowers_nginx_scaling_plan_codeblock_15", + "community": 580, + "norm_label": "code:block15 (tests/perf/nginx/)" + }, + { + "label": "2.3 Scenarios", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L440", + "id": "superpowers_nginx_scaling_plan_2_3_scenarios", + "community": 522, + "norm_label": "2.3 scenarios" + }, + { + "label": "2.4 Protocol", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L452", + "id": "superpowers_nginx_scaling_plan_2_4_protocol", + "community": 522, + "norm_label": "2.4 protocol" + }, + { + "label": "2.5 Metrics", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L463", + "id": "superpowers_nginx_scaling_plan_2_5_metrics", + "community": 522, + "norm_label": "2.5 metrics" + }, + { + "label": "2.6 Acceptance thresholds \u2014 **ALL PROPOSED, freeze after first real run**", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L467", + "id": "superpowers_nginx_scaling_plan_2_6_acceptance_thresholds_all_proposed_freeze_after_first_real_run", + "community": 522, + "norm_label": "2.6 acceptance thresholds \u2014 **all proposed, freeze after first real run**" + }, + { + "label": "2.7 Results doc layout", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L484", + "id": "superpowers_nginx_scaling_plan_2_7_results_doc_layout", + "community": 522, + "norm_label": "2.7 results doc layout" + }, + { + "label": "code:block16 (docs/benchmarks/nginx/)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L486", + "id": "superpowers_nginx_scaling_plan_codeblock_16", + "community": 522, + "norm_label": "code:block16 (docs/benchmarks/nginx/)" + }, + { + "label": "2.8 Feeding `/status` (TODO 14)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L493", + "id": "superpowers_nginx_scaling_plan_2_8_feeding_status_todo_14", + "community": 522, + "norm_label": "2.8 feeding `/status` (todo 14)" + }, + { + "label": "2.9 Benchmark risks", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L499", + "id": "superpowers_nginx_scaling_plan_2_9_benchmark_risks", + "community": 522, + "norm_label": "2.9 benchmark risks" + }, + { + "label": "Part 3 \u2014 Future scaling evolution + risks", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L510", + "id": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "community": 178, + "norm_label": "part 3 \u2014 future scaling evolution + risks" + }, + { + "label": "3.0 Verified ground truth", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L512", + "id": "superpowers_nginx_scaling_plan_3_0_verified_ground_truth", + "community": 178, + "norm_label": "3.0 verified ground truth" + }, + { + "label": "3.1 Target topology", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L529", + "id": "superpowers_nginx_scaling_plan_3_1_target_topology", + "community": 178, + "norm_label": "3.1 target topology" + }, + { + "label": "code:block17 (NODE A NODE B)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L534", + "id": "superpowers_nginx_scaling_plan_codeblock_17", + "community": 178, + "norm_label": "code:block17 (node a node b)" + }, + { + "label": "3.2 Worker-container extraction", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L546", + "id": "superpowers_nginx_scaling_plan_3_2_worker_container_extraction", + "community": 178, + "norm_label": "3.2 worker-container extraction" + }, + { + "label": "3.3 nginx upstream evolution \u2014 validated against the user's plan", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L563", + "id": "superpowers_nginx_scaling_plan_3_3_nginx_upstream_evolution_validated_against_the_user_s_plan", + "community": 178, + "norm_label": "3.3 nginx upstream evolution \u2014 validated against the user's plan" + }, + { + "label": "code:nginx (upstream stocks_api { server 10.0.0.12:3200 max_fails=3 fail)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L567", + "id": "superpowers_nginx_scaling_plan_codeblock_18", + "community": 178, + "norm_label": "code:nginx (upstream stocks_api { server 10.0.0.12:3200 max_fails=3 fail)" + }, + { + "label": "3.4 TODO 13 migration \u2014 drop `{service}_HOST`/`{service}_PORT`", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L584", + "id": "superpowers_nginx_scaling_plan_3_4_todo_13_migration_drop_service_host_service_port", + "community": 178, + "norm_label": "3.4 todo 13 migration \u2014 drop `{service}_host`/`{service}_port`" + }, + { + "label": "3.5 Redis \u2014 exactly two jobs", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L591", + "id": "superpowers_nginx_scaling_plan_3_5_redis_exactly_two_jobs", + "community": 178, + "norm_label": "3.5 redis \u2014 exactly two jobs" + }, + { + "label": "3.6 Cache strategy across boxes", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L607", + "id": "superpowers_nginx_scaling_plan_3_6_cache_strategy_across_boxes", + "community": 178, + "norm_label": "3.6 cache strategy across boxes" + }, + { + "label": "3.7 Autoscaling story (TODO 11)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L613", + "id": "superpowers_nginx_scaling_plan_3_7_autoscaling_story_todo_11", + "community": 178, + "norm_label": "3.7 autoscaling story (todo 11)" + }, + { + "label": "3.8 ForgeVM interplay (TODO 12)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L618", + "id": "superpowers_nginx_scaling_plan_3_8_forgevm_interplay_todo_12", + "community": 178, + "norm_label": "3.8 forgevm interplay (todo 12)" + }, + { + "label": "3.9 Risk register", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L622", + "id": "superpowers_nginx_scaling_plan_3_9_risk_register", + "community": 178, + "norm_label": "3.9 risk register" + }, + { + "label": "3.10 Migration sequence + verification", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L642", + "id": "superpowers_nginx_scaling_plan_3_10_migration_sequence_verification", + "community": 178, + "norm_label": "3.10 migration sequence + verification" + }, + { + "label": "Open decisions (blocking or product-owned)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L661", + "id": "superpowers_nginx_scaling_plan_open_decisions_blocking_or_product_owned", + "community": 579, + "norm_label": "open decisions (blocking or product-owned)" + }, + { + "label": "Next actions (not in scope here)", + "file_type": "document", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L669", + "id": "superpowers_nginx_scaling_plan_next_actions_not_in_scope_here", + "community": 579, + "norm_label": "next actions (not in scope here)" + }, + { + "label": "uvicorn-worker-scaling-plan.md", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "id": "docs_superpowers_uvicorn_worker_scaling_plan_md", + "community": 495, + "norm_label": "uvicorn-worker-scaling-plan.md" + }, + { + "label": "Uvicorn Worker Migration \u00e2\u20ac\u201d What Must Change", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "id": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "community": 495, + "norm_label": "uvicorn worker migration a\u20ac\u201d what must change" + }, + { + "label": "0. The blockers, ranked", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L17", + "id": "superpowers_uvicorn_worker_scaling_plan_0_the_blockers_ranked", + "community": 495, + "norm_label": "0. the blockers, ranked" + }, + { + "label": "1. Verified state (compact)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L32", + "id": "superpowers_uvicorn_worker_scaling_plan_1_verified_state_compact", + "community": 495, + "norm_label": "1. verified state (compact)" + }, + { + "label": "2. Change inventory (the spine)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L52", + "id": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine", + "community": 495, + "norm_label": "2. change inventory (the spine)" + }, + { + "label": "B1 \u00e2\u20ac\u201d Startup and process model `must-fix`", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L54", + "id": "superpowers_uvicorn_worker_scaling_plan_b1_\u00e2_startup_and_process_model_must_fix", + "community": 495, + "norm_label": "b1 a\u20ac\u201d startup and process model `must-fix`" + }, + { + "label": "B2 \u00e2\u20ac\u201d Cache under N>1 `must-fix`", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L67", + "id": "superpowers_uvicorn_worker_scaling_plan_b2_\u00e2_cache_under_n_1_must_fix", + "community": 495, + "norm_label": "b2 a\u20ac\u201d cache under n>1 `must-fix`" + }, + { + "label": "B3 \u00e2\u20ac\u201d DB pools `must-fix at N\u00e2\u2030\u00a53 on one server`", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L79", + "id": "superpowers_uvicorn_worker_scaling_plan_b3_\u00e2_db_pools_must_fix_at_n\u00e2_3_on_one_server", + "community": 495, + "norm_label": "b3 a\u20ac\u201d db pools `must-fix at na\u2030\u00a53 on one server`" + }, + { + "label": "B4 \u00e2\u20ac\u201d Migrations `must-fix`", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L98", + "id": "superpowers_uvicorn_worker_scaling_plan_b4_\u00e2_migrations_must_fix", + "community": 495, + "norm_label": "b4 a\u20ac\u201d migrations `must-fix`" + }, + { + "label": "B5 \u00e2\u20ac\u201d Per-process state (ranked; scope by service)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L107", + "id": "superpowers_uvicorn_worker_scaling_plan_b5_\u00e2_per_process_state_ranked_scope_by_service", + "community": 495, + "norm_label": "b5 a\u20ac\u201d per-process state (ranked; scope by service)" + }, + { + "label": "B6 \u00e2\u20ac\u201d Deployment glue `must-build`", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L123", + "id": "superpowers_uvicorn_worker_scaling_plan_b6_\u00e2_deployment_glue_must_build", + "community": 495, + "norm_label": "b6 a\u20ac\u201d deployment glue `must-build`" + }, + { + "label": "3. Rulings (conflicts I adjudicated)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L135", + "id": "superpowers_uvicorn_worker_scaling_plan_3_rulings_conflicts_i_adjudicated", + "community": 495, + "norm_label": "3. rulings (conflicts i adjudicated)" + }, + { + "label": "4. Design-spec alignment (`2026-09-29-nginx-scaling-design.md`)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L147", + "id": "superpowers_uvicorn_worker_scaling_plan_4_design_spec_alignment_2026_09_29_nginx_scaling_design_md", + "community": 495, + "norm_label": "4. design-spec alignment (`2026-09-29-nginx-scaling-design.md`)" + }, + { + "label": "5. Sequencing, verification, and bans", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L162", + "id": "superpowers_uvicorn_worker_scaling_plan_5_sequencing_verification_and_bans", + "community": 495, + "norm_label": "5. sequencing, verification, and bans" + }, + { + "label": "6. Options (demoted)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L174", + "id": "superpowers_uvicorn_worker_scaling_plan_6_options_demoted", + "community": 495, + "norm_label": "6. options (demoted)" + }, + { + "label": "7. Risks", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L186", + "id": "superpowers_uvicorn_worker_scaling_plan_7_risks", + "community": 495, + "norm_label": "7. risks" + }, + { + "label": "8. Evidence index", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L200", + "id": "superpowers_uvicorn_worker_scaling_plan_8_evidence_index", + "community": 495, + "norm_label": "8. evidence index" + }, + { + "label": "stocks-cache-ttl.md", + "file_type": "document", + "source_file": "docs/superpowers/benchmarks/stocks-cache-ttl.md", + "source_location": "L1", + "id": "docs_superpowers_benchmarks_stocks_cache_ttl_md", + "community": 619, + "norm_label": "stocks-cache-ttl.md" + }, + { + "label": "Stocks endpoint cache TTL \u2014 6h RSS check", + "file_type": "document", + "source_file": "docs/superpowers/benchmarks/stocks-cache-ttl.md", + "source_location": "L1", + "id": "benchmarks_stocks_cache_ttl_stocks_endpoint_cache_ttl_6h_rss_check", + "community": 619, + "norm_label": "stocks endpoint cache ttl \u2014 6h rss check" + }, { "label": "2026-08-09-sse-resume.md", "file_type": "document", @@ -8868,7 +9696,7 @@ "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", "source_location": "L166", "id": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables", - "community": 572, + "community": 615, "norm_label": "task 2: alembic migration for wallet tables" }, { @@ -8877,7 +9705,7 @@ "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", "source_location": "L189", "id": "plans_2026_09_04_wallet_management_codeblock_6", - "community": 572, + "community": 615, "norm_label": "code:python (\"\"\"add wallet_holdings and wallet_lots tables)" }, { @@ -8886,7 +9714,7 @@ "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", "source_location": "L248", "id": "plans_2026_09_04_wallet_management_codeblock_7", - "community": 572, + "community": 615, "norm_label": "code:python (import main.models.wallet)" }, { @@ -8895,7 +9723,7 @@ "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", "source_location": "L262", "id": "plans_2026_09_04_wallet_management_codeblock_8", - "community": 572, + "community": 615, "norm_label": "code:bash (git add migrations/versions/wallet_tables_20260904_add_walle)" }, { @@ -9735,6 +10563,1023 @@ "community": 90, "norm_label": "task 8: pytest plugin set" }, + { + "label": "2026-09-29-nginx-response-cache.md", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L1", + "id": "docs_superpowers_plans_2026_09_29_nginx_response_cache_md", + "community": 126, + "norm_label": "2026-09-29-nginx-response-cache.md" + }, + { + "label": "nginx Response Cache Implementation Plan", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L1", + "id": "plans_2026_09_29_nginx_response_cache_nginx_response_cache_implementation_plan", + "community": 126, + "norm_label": "nginx response cache implementation plan" + }, + { + "label": "Global Constraints", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L14", + "id": "plans_2026_09_29_nginx_response_cache_global_constraints", + "community": 126, + "norm_label": "global constraints" + }, + { + "label": "Review Focus (spec-implied inputs most likely to bite)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L25", + "id": "plans_2026_09_29_nginx_response_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "community": 126, + "norm_label": "review focus (spec-implied inputs most likely to bite)" + }, + { + "label": "Task 1: nginx compose service, http-context config, upstream, bypass routing", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L36", + "id": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "community": 126, + "norm_label": "task 1: nginx compose service, http-context config, upstream, bypass routing" + }, + { + "label": "code:powershell (netstat -ano | findstr \":80 \" # must be empty; if not, )", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L51", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_1", + "community": 126, + "norm_label": "code:powershell (netstat -ano | findstr \":80 \" # must be empty; if not, )" + }, + { + "label": "code:nginx (# http-context directives only (no server{}).)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L62", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_2", + "community": 126, + "norm_label": "code:nginx (# http-context directives only (no server{}).)" + }, + { + "label": "code:nginx (upstream stocks_api {)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L87", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_3", + "community": 126, + "norm_label": "code:nginx (upstream stocks_api {)" + }, + { + "label": "code:nginx (proxy_pass http://stocks_api;)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L101", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_4", + "community": 126, + "norm_label": "code:nginx (proxy_pass http://stocks_api;)" + }, + { + "label": "code:nginx (server {)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L116", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_5", + "community": 126, + "norm_label": "code:nginx (server {)" + }, + { + "label": "code:yaml (nginx:)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L131", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_6", + "community": 126, + "norm_label": "code:yaml (nginx:)" + }, + { + "label": "code:yaml (volumes:)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L152", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_7", + "community": 126, + "norm_label": "code:yaml (volumes:)" + }, + { + "label": "code:powershell (docker compose config -q)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L164", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_8", + "community": 126, + "norm_label": "code:powershell (docker compose config -q)" + }, + { + "label": "code:bash (git add docker-compose.yml nginx/conf.d/00-http-common.conf )", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L176", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_9", + "community": 126, + "norm_label": "code:bash (git add docker-compose.yml nginx/conf.d/00-http-common.conf )" + }, + { + "label": "Task 2: Cached locations, shared proxy snippet, mirrored TTLs", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L183", + "id": "plans_2026_09_29_nginx_response_cache_task_2_cached_locations_shared_proxy_snippet_mirrored_ttls", + "community": 126, + "norm_label": "task 2: cached locations, shared proxy snippet, mirrored ttls" + }, + { + "label": "code:powershell ($U = \"http://localhost/stocks/cotations?search=PETR4\")", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L195", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_10", + "community": 126, + "norm_label": "code:powershell ($u = \"http://localhost/stocks/cotations?search=petr4\")" + }, + { + "label": "code:nginx (proxy_pass http://stocks_api;)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L206", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_11", + "community": 126, + "norm_label": "code:nginx (proxy_pass http://stocks_api;)" + }, + { + "label": "code:nginx (# Exact-match on purpose: a prefix match on /stocks/cotation)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L246", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_12", + "community": 126, + "norm_label": "code:nginx (# exact-match on purpose: a prefix match on /stocks/cotation)" + }, + { + "label": "code:powershell (docker exec nginx nginx -t; if ($?) { docker exec nginx ngin)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L282", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_13", + "community": 126, + "norm_label": "code:powershell (docker exec nginx nginx -t; if ($?) { docker exec nginx ngin)" + }, + { + "label": "code:bash (git add nginx/conf.d/20-stocks.conf nginx/snippets/stocks-pr)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L295", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_14", + "community": 126, + "norm_label": "code:bash (git add nginx/conf.d/20-stocks.conf nginx/snippets/stocks-pr)" + }, + { + "label": "Task 3: Measure the GIL relief and record it", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L302", + "id": "plans_2026_09_29_nginx_response_cache_task_3_measure_the_gil_relief_and_record_it", + "community": 126, + "norm_label": "task 3: measure the gil relief and record it" + }, + { + "label": "code:powershell (docker stats --no-stream --format \"{{.Name}},{{.CPUPerc}},{{)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L314", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_15", + "community": 126, + "norm_label": "code:powershell (docker stats --no-stream --format \"{{.name}},{{.cpuperc}},{{)" + }, + { + "label": "code:powershell ($U = \"http://localhost/stocks/cotations?search=PETR4\")", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L321", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_16", + "community": 126, + "norm_label": "code:powershell ($u = \"http://localhost/stocks/cotations?search=petr4\")" + }, + { + "label": "code:powershell ($D = \"http://localhost:3200/stocks/cotations?search=PETR4\")", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L333", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_17", + "community": 126, + "norm_label": "code:powershell ($d = \"http://localhost:3200/stocks/cotations?search=petr4\")" + }, + { + "label": "code:markdown (# nginx response cache \u2014 GIL-relief measurement)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L346", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_18", + "community": 126, + "norm_label": "code:markdown (# nginx response cache \u2014 gil-relief measurement)" + }, + { + "label": "code:bash (.\\ci.ps1)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L367", + "id": "plans_2026_09_29_nginx_response_cache_codeblock_19", + "community": 126, + "norm_label": "code:bash (.\\ci.ps1)" + }, + { + "label": "Execution Handoff", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L375", + "id": "plans_2026_09_29_nginx_response_cache_execution_handoff", + "community": 126, + "norm_label": "execution handoff" + }, + { + "label": "2026-09-29-stocks-cache-ttl.md", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L1", + "id": "docs_superpowers_plans_2026_09_29_stocks_cache_ttl_md", + "community": 110, + "norm_label": "2026-09-29-stocks-cache-ttl.md" + }, + { + "label": "Stocks API Cache TTL + `/fields` Cache Implementation Plan", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L1", + "id": "plans_2026_09_29_stocks_cache_ttl_stocks_api_cache_ttl_fields_cache_implementation_plan", + "community": 110, + "norm_label": "stocks api cache ttl + `/fields` cache implementation plan" + }, + { + "label": "Global Constraints", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L15", + "id": "plans_2026_09_29_stocks_cache_ttl_global_constraints", + "community": 110, + "norm_label": "global constraints" + }, + { + "label": "Review Focus (spec-implied inputs most likely to bite)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L27", + "id": "plans_2026_09_29_stocks_cache_ttl_review_focus_spec_implied_inputs_most_likely_to_bite", + "community": 110, + "norm_label": "review focus (spec-implied inputs most likely to bite)" + }, + { + "label": "Task 1: TTL constants, 6h on the three data routes, header alignment", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L38", + "id": "plans_2026_09_29_stocks_cache_ttl_task_1_ttl_constants_6h_on_the_three_data_routes_header_alignment", + "community": 110, + "norm_label": "task 1: ttl constants, 6h on the three data routes, header alignment" + }, + { + "label": "code:python (import re)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L52", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_1", + "community": 110, + "norm_label": "code:python (import re)" + }, + { + "label": "code:python (# Endpoint cache TTLs. STOCKS_TTL must stay <= STALE_AFTER_S)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L93", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_2", + "community": 110, + "norm_label": "code:python (# endpoint cache ttls. stocks_ttl must stay <= stale_after_s)" + }, + { + "label": "code:python (@endpointCache(ttl=STOCKS_TTL, key=\"stocks:historical:{searc)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L105", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_3", + "community": 110, + "norm_label": "code:python (@endpointcache(ttl=stocks_ttl, key=\"stocks:historical:{searc)" + }, + { + "label": "code:python (response.headers[\"Cache-Control\"] = f\"public, max-age={STOCK)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L114", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_4", + "community": 110, + "norm_label": "code:python (response.headers[\"cache-control\"] = f\"public, max-age={stock)" + }, + { + "label": "code:bash (git add main/controller/stocksapi_controller.py tests/test_s)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L131", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_5", + "community": 110, + "norm_label": "code:bash (git add main/controller/stocksapi_controller.py tests/test_s)" + }, + { + "label": "Task 2: Cache `/stocks/fields`", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L138", + "id": "plans_2026_09_29_stocks_cache_ttl_task_2_cache_stocks_fields", + "community": 110, + "norm_label": "task 2: cache `/stocks/fields`" + }, + { + "label": "code:python (import asyncio)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L154", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_6", + "community": 110, + "norm_label": "code:python (import asyncio)" + }, + { + "label": "code:python (@pytest_asyncio.fixture(scope=\"module\", loop_scope=\"module\",)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L167", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_7", + "community": 110, + "norm_label": "code:python (@pytest_asyncio.fixture(scope=\"module\", loop_scope=\"module\",)" + }, + { + "label": "code:python (@router.get(\"/fields\", operation_id=\"list_fields\"))", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L222", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_8", + "community": 110, + "norm_label": "code:python (@router.get(\"/fields\", operation_id=\"list_fields\"))" + }, + { + "label": "code:python (response.headers[\"Cache-Control\"] = f\"public, max-age={STOCK)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L230", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_9", + "community": 110, + "norm_label": "code:python (response.headers[\"cache-control\"] = f\"public, max-age={stock)" + }, + { + "label": "code:bash (git add main/controller/stocksapi_controller.py tests/test_s)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L249", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_10", + "community": 110, + "norm_label": "code:bash (git add main/controller/stocksapi_controller.py tests/test_s)" + }, + { + "label": "Task 3: Invalidate the endpoint cache on feather reload", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L256", + "id": "plans_2026_09_29_stocks_cache_ttl_task_3_invalidate_the_endpoint_cache_on_feather_reload", + "community": 110, + "norm_label": "task 3: invalidate the endpoint cache on feather reload" + }, + { + "label": "code:python (def test_feather_reload_drops_cached_bodies(monkeypatch):)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L271", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_11", + "community": 110, + "norm_label": "code:python (def test_feather_reload_drops_cached_bodies(monkeypatch):)" + }, + { + "label": "code:python (def clearEndpointCache() -> None:)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L303", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_12", + "community": 110, + "norm_label": "code:python (def clearendpointcache() -> none:)" + }, + { + "label": "code:python (from main.app.stocks_api.compress import rebuildAbbrevs)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L313", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_13", + "community": 110, + "norm_label": "code:python (from main.app.stocks_api.compress import rebuildabbrevs)" + }, + { + "label": "code:bash (git add main/app/stocks_api/sync_cache.py main/app/stocks_ap)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L335", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_14", + "community": 110, + "norm_label": "code:bash (git add main/app/stocks_api/sync_cache.py main/app/stocks_ap)" + }, + { + "label": "Task 4: Measure the 6h window (RSS) and record the verdict", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L342", + "id": "plans_2026_09_29_stocks_cache_ttl_task_4_measure_the_6h_window_rss_and_record_the_verdict", + "community": 110, + "norm_label": "task 4: measure the 6h window (rss) and record the verdict" + }, + { + "label": "code:bash (docker compose up -d --build api)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L354", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_15", + "community": 110, + "norm_label": "code:bash (docker compose up -d --build api)" + }, + { + "label": "code:powershell ($Key = $env:PERF_API_KEY)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L365", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_16", + "community": 110, + "norm_label": "code:powershell ($key = $env:perf_api_key)" + }, + { + "label": "code:bash (docker stats --no-stream --format \"{{.Name}},{{.MemUsage}},{)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L378", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_17", + "community": 110, + "norm_label": "code:bash (docker stats --no-stream --format \"{{.name}},{{.memusage}},{)" + }, + { + "label": "code:markdown (# Stocks endpoint cache TTL \u2014 6h RSS check)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L386", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_18", + "community": 110, + "norm_label": "code:markdown (# stocks endpoint cache ttl \u2014 6h rss check)" + }, + { + "label": "code:bash (.\\ci.ps1)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L404", + "id": "plans_2026_09_29_stocks_cache_ttl_codeblock_19", + "community": 110, + "norm_label": "code:bash (.\\ci.ps1)" + }, + { + "label": "Execution Handoff", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L412", + "id": "plans_2026_09_29_stocks_cache_ttl_execution_handoff", + "community": 110, + "norm_label": "execution handoff" + }, + { + "label": "2026-09-29-uvicorn-worker-scaling.md", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L1", + "id": "docs_superpowers_plans_2026_09_29_uvicorn_worker_scaling_md", + "community": 13, + "norm_label": "2026-09-29-uvicorn-worker-scaling.md" + }, + { + "label": "Uvicorn / FastAPI Worker Scaling Implementation Plan", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L1", + "id": "plans_2026_09_29_uvicorn_worker_scaling_uvicorn_fastapi_worker_scaling_implementation_plan", + "community": 13, + "norm_label": "uvicorn / fastapi worker scaling implementation plan" + }, + { + "label": "Global Constraints", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L13", + "id": "plans_2026_09_29_uvicorn_worker_scaling_global_constraints", + "community": 13, + "norm_label": "global constraints" + }, + { + "label": "Review Focus", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L23", + "id": "plans_2026_09_29_uvicorn_worker_scaling_review_focus", + "community": 13, + "norm_label": "review focus" + }, + { + "label": "Task 1: Measure the concurrency ceiling and record the decision", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L35", + "id": "plans_2026_09_29_uvicorn_worker_scaling_task_1_measure_the_concurrency_ceiling_and_record_the_decision", + "community": 13, + "norm_label": "task 1: measure the concurrency ceiling and record the decision" + }, + { + "label": "code:python (\"\"\"Measure whether the stocks query hot path is GIL-bound.)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L47", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_1", + "community": 13, + "norm_label": "code:python (\"\"\"measure whether the stocks query hot path is gil-bound.)" + }, + { + "label": "code:markdown (## Baseline (measured))", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L145", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_2", + "community": 13, + "norm_label": "code:markdown (## baseline (measured))" + }, + { + "label": "code:bash (git add scripts/bench_query.py docs/superpowers/uvicorn-work)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L158", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_3", + "community": 13, + "norm_label": "code:bash (git add scripts/bench_query.py docs/superpowers/uvicorn-work)" + }, + { + "label": "Task 2: Load the cache on the build-loser path", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L170", + "id": "plans_2026_09_29_uvicorn_worker_scaling_task_2_load_the_cache_on_the_build_loser_path", + "community": 13, + "norm_label": "task 2: load the cache on the build-loser path" + }, + { + "label": "code:python (def test_loser_path_loads_after_other_process_build(monkeypa)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L182", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_4", + "community": 13, + "norm_label": "code:python (def test_loser_path_loads_after_other_process_build(monkeypa)" + }, + { + "label": "code:python (def awaitFreshCacheAndLoad(self, timeout: float = 120.0, int)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L228", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_5", + "community": 13, + "norm_label": "code:python (def awaitfreshcacheandload(self, timeout: float = 120.0, int)" + }, + { + "label": "code:python (built = False)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L244", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_6", + "community": 13, + "norm_label": "code:python (built = false)" + }, + { + "label": "code:bash (git add main/app/stocks_api/cache.py tests/test_stocks_cache)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L285", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_7", + "community": 13, + "norm_label": "code:bash (git add main/app/stocks_api/cache.py tests/test_stocks_cache)" + }, + { + "label": "Task 3: Run migrations exactly once per deploy", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L292", + "id": "plans_2026_09_29_uvicorn_worker_scaling_task_3_run_migrations_exactly_once_per_deploy", + "community": 13, + "norm_label": "task 3: run migrations exactly once per deploy" + }, + { + "label": "code:python (from main.utils import migrator)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L304", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_8", + "community": 13, + "norm_label": "code:python (from main.utils import migrator)" + }, + { + "label": "code:python (def shouldRunMigrations() -> bool:)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L333", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_9", + "community": 13, + "norm_label": "code:python (def shouldrunmigrations() -> bool:)" + }, + { + "label": "code:bash (git add main/utils/migrator.py tests/test_migrator_guard.py)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L358", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_10", + "community": 13, + "norm_label": "code:bash (git add main/utils/migrator.py tests/test_migrator_guard.py)" + }, + { + "label": "Task 4: Size database pools by process count", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L365", + "id": "plans_2026_09_29_uvicorn_worker_scaling_task_4_size_database_pools_by_process_count", + "community": 13, + "norm_label": "task 4: size database pools by process count" + }, + { + "label": "code:python (import importlib)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L377", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_11", + "community": 13, + "norm_label": "code:python (import importlib)" + }, + { + "label": "code:python (DB_POOL_SIZE = int(os.getenv(\"DB_POOL_SIZE\", \"20\")))", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L407", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_12", + "community": 13, + "norm_label": "code:python (db_pool_size = int(os.getenv(\"db_pool_size\", \"20\")))" + }, + { + "label": "code:bash (git add config.py tests/test_config_pools.py)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L424", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_13", + "community": 13, + "norm_label": "code:bash (git add config.py tests/test_config_pools.py)" + }, + { + "label": "Task 5: Run STOCKS_API as N single-service processes behind nginx", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L431", + "id": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx", + "community": 13, + "norm_label": "task 5: run stocks_api as n single-service processes behind nginx" + }, + { + "label": "code:python (import importlib)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L444", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_14", + "community": 13, + "norm_label": "code:python (import importlib)" + }, + { + "label": "code:python (if __name__ == \"__main__\":)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L476", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_15", + "community": 13, + "norm_label": "code:python (if __name__ == \"__main__\":)" + }, + { + "label": "code:python (if len(instances) > 1 and fcntl is None: # pragma: no cover)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L483", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_16", + "community": 13, + "norm_label": "code:python (if len(instances) > 1 and fcntl is none: # pragma: no cover)" + }, + { + "label": "code:yaml (api:)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L494", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_17", + "community": 13, + "norm_label": "code:yaml (api:)" + }, + { + "label": "code:nginx (# Addresses/steps are chosen at implementation time (stub_st)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L641", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_18", + "community": 13, + "norm_label": "code:nginx (# addresses/steps are chosen at implementation time (stub_st)" + }, + { + "label": "code:bash (git add run.py main/utils/service_manager.py docker-compose.)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L681", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_19", + "community": 13, + "norm_label": "code:bash (git add run.py main/utils/service_manager.py docker-compose.)" + }, + { + "label": "Task 6: Verify the fleet (single build, one migration, shared frame)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L688", + "id": "plans_2026_09_29_uvicorn_worker_scaling_task_6_verify_the_fleet_single_build_one_migration_shared_frame", + "community": 13, + "norm_label": "task 6: verify the fleet (single build, one migration, shared frame)" + }, + { + "label": "code:powershell (# Verifies the multi-process stocks fleet: one build, one mi)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L700", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_20", + "community": 13, + "norm_label": "code:powershell (# verifies the multi-process stocks fleet: one build, one mi)" + }, + { + "label": "code:bash (git add scripts/verify_fleet.ps1 docs/superpowers/uvicorn-wo)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L752", + "id": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_21", + "community": 13, + "norm_label": "code:bash (git add scripts/verify_fleet.ps1 docs/superpowers/uvicorn-wo)" + }, + { + "label": "Self-Review", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L759", + "id": "plans_2026_09_29_uvicorn_worker_scaling_self_review", + "community": 13, + "norm_label": "self-review" + }, + { + "label": "2026-09-29-zerocopy-stocks-cache.md", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L1", + "id": "docs_superpowers_plans_2026_09_29_zerocopy_stocks_cache_md", + "community": 86, + "norm_label": "2026-09-29-zerocopy-stocks-cache.md" + }, + { + "label": "Zero-Copy Memory-Mapped Stocks Cache Implementation Plan", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L1", + "id": "plans_2026_09_29_zerocopy_stocks_cache_zero_copy_memory_mapped_stocks_cache_implementation_plan", + "community": 86, + "norm_label": "zero-copy memory-mapped stocks cache implementation plan" + }, + { + "label": "Global Constraints", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L13", + "id": "plans_2026_09_29_zerocopy_stocks_cache_global_constraints", + "community": 86, + "norm_label": "global constraints" + }, + { + "label": "Review Focus (spec-implied inputs most likely to bite)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L23", + "id": "plans_2026_09_29_zerocopy_stocks_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "community": 86, + "norm_label": "review focus (spec-implied inputs most likely to bite)" + }, + { + "label": "Task 1: Presort at build time (ORDER BY + `b3_presorted` marker)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L33", + "id": "plans_2026_09_29_zerocopy_stocks_cache_task_1_presort_at_build_time_order_by_b3_presorted_marker", + "community": 86, + "norm_label": "task 1: presort at build time (order by + `b3_presorted` marker)" + }, + { + "label": "code:python (def test_build_requests_presorted_rows(monkeypatch, tmp_path)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L47", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_1", + "community": 86, + "norm_label": "code:python (def test_build_requests_presorted_rows(monkeypatch, tmp_path)" + }, + { + "label": "code:python (STALE_AFTER_SECONDS = 6 * 3600)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L93", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_2", + "community": 86, + "norm_label": "code:python (stale_after_seconds = 6 * 3600)" + }, + { + "label": "code:python (result = stream.exec_driver_sql(\"SELECT * FROM b3_stocks ORD)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L101", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_3", + "community": 86, + "norm_label": "code:python (result = stream.exec_driver_sql(\"select * from b3_stocks ord)" + }, + { + "label": "code:python (schema = pa.schema(fields).with_metadata({PRESORTED_FLAG_KEY)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L107", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_4", + "community": 86, + "norm_label": "code:python (schema = pa.schema(fields).with_metadata({presorted_flag_key)" + }, + { + "label": "code:bash (git add main/app/stocks_api/cache.py tests/test_stocks_cache)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L118", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_5", + "community": 86, + "norm_label": "code:bash (git add main/app/stocks_api/cache.py tests/test_stocks_cache)" + }, + { + "label": "Task 2: Zero-copy mmap load (`readFeatherDataFrame` + marker-aware sort skip)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L125", + "id": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "community": 86, + "norm_label": "task 2: zero-copy mmap load (`readfeatherdataframe` + marker-aware sort skip)" + }, + { + "label": "code:python (monkeypatch.setattr(cache_mod, \"readFeatherDataFrame\", lambd)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L142", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_6", + "community": 86, + "norm_label": "code:python (monkeypatch.setattr(cache_mod, \"readfeatherdataframe\", lambd)" + }, + { + "label": "code:python (patch(\"main.app.stocks_api.cache.pd.read_feather\", return_va)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L148", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_7", + "community": 86, + "norm_label": "code:python (patch(\"main.app.stocks_api.cache.pd.read_feather\", return_va)" + }, + { + "label": "code:python (patch(\"main.app.stocks_api.cache.readFeatherDataFrame\", retu)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L152", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_8", + "community": 86, + "norm_label": "code:python (patch(\"main.app.stocks_api.cache.readfeatherdataframe\", retu)" + }, + { + "label": "code:python (assert pd.isna(df[\"NOTICIAS\"].iloc[1]))", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L159", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_9", + "community": 86, + "norm_label": "code:python (assert pd.isna(df[\"noticias\"].iloc[1]))" + }, + { + "label": "code:python (def test_read_feather_dataframe_uses_arrow_backed_columns(tm)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L165", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_10", + "community": 86, + "norm_label": "code:python (def test_read_feather_dataframe_uses_arrow_backed_columns(tm)" + }, + { + "label": "code:python (from pyarrow import feather)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L250", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_11", + "community": 86, + "norm_label": "code:python (from pyarrow import feather)" + }, + { + "label": "code:python (def readFeatherDataFrame(path) -> tuple[pd.DataFrame, bool]:)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L256", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_12", + "community": 86, + "norm_label": "code:python (def readfeatherdataframe(path) -> tuple[pd.dataframe, bool]:)" + }, + { + "label": "code:python (df, presorted = readFeatherDataFrame(CACHE_FEATHER_PATH))", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L268", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_13", + "community": 86, + "norm_label": "code:python (df, presorted = readfeatherdataframe(cache_feather_path))" + }, + { + "label": "code:bash (git add main/app/stocks_api/cache.py tests/test_stocks_cache)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L285", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_14", + "community": 86, + "norm_label": "code:bash (git add main/app/stocks_api/cache.py tests/test_stocks_cache)" + }, + { + "label": "Task 3: ArrowDtype-aware JSON column decompression (`query.py` guard)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L292", + "id": "plans_2026_09_29_zerocopy_stocks_cache_task_3_arrowdtype_aware_json_column_decompression_query_py_guard", + "community": 86, + "norm_label": "task 3: arrowdtype-aware json column decompression (`query.py` guard)" + }, + { + "label": "code:python (def test_deserialize_jsoncolumns_handles_arrowdtype_binary())", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L306", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_15", + "community": 86, + "norm_label": "code:python (def test_deserialize_jsoncolumns_handles_arrowdtype_binary())" + }, + { + "label": "code:python (if col in JSON_COLUMNS and (df[col].dtype == \"object\" or pd.)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L327", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_16", + "community": 86, + "norm_label": "code:python (if col in json_columns and (df[col].dtype == \"object\" or pd.)" + }, + { + "label": "code:python (if col in JSON_COLUMNS and ()", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L331", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_17", + "community": 86, + "norm_label": "code:python (if col in json_columns and ()" + }, + { + "label": "code:bash (git add main/app/stocks_api/query.py tests/test_stocks_cache)", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L346", + "id": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_18", + "community": 86, + "norm_label": "code:bash (git add main/app/stocks_api/query.py tests/test_stocks_cache)" + }, + { + "label": "Execution Handoff", + "file_type": "document", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L353", + "id": "plans_2026_09_29_zerocopy_stocks_cache_execution_handoff", + "community": 86, + "norm_label": "execution handoff" + }, { "label": "2026-09-04-wallet-design.md", "file_type": "document", @@ -9889,368 +11734,1826 @@ "norm_label": "spec self-review" }, { - "label": "_serviceToken()", - "file_type": "code", - "source_file": "main/app/stocks_api/key.py", - "source_location": "L18", - "community": 500, - "norm_label": "_servicetoken()", - "id": "stocks_api_key_servicetoken" + "label": "2026-09-29-nginx-scaling-design.md", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L1", + "id": "docs_superpowers_specs_2026_09_29_nginx_scaling_design_md", + "community": 208, + "norm_label": "2026-09-29-nginx-scaling-design.md" }, { - "label": "_verifyUrl()", - "file_type": "code", - "source_file": "main/app/stocks_api/key.py", - "source_location": "L22", - "community": 500, - "norm_label": "_verifyurl()", - "id": "stocks_api_key_verifyurl" + "label": "nginx Response Cache + Multi-Server Scaling \u2014 Design Spec", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L1", + "id": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "community": 208, + "norm_label": "nginx response cache + multi-server scaling \u2014 design spec" }, { - "label": "initVerifyClient()", - "file_type": "code", - "source_file": "main/app/stocks_api/key.py", - "source_location": "L26", - "community": 500, - "norm_label": "initverifyclient()", - "id": "stocks_api_key_initverifyclient" + "label": "1. Context", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L9", + "id": "specs_2026_09_29_nginx_scaling_design_1_context", + "community": 208, + "norm_label": "1. context" }, { - "label": "closeVerifyClient()", - "file_type": "code", - "source_file": "main/app/stocks_api/key.py", - "source_location": "L33", - "community": 500, - "norm_label": "closeverifyclient()", - "id": "stocks_api_key_closeverifyclient" + "label": "2. Decisions", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L40", + "id": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "community": 208, + "norm_label": "2. decisions" }, { - "label": "requireServiceToken()", - "file_type": "code", - "source_file": "main/controller/authentication_controller.py", - "source_location": "L245", - "community": 58, - "norm_label": "requireservicetoken()", - "id": "controller_authentication_controller_requireservicetoken" + "label": "D1 \u2014 Put an nginx response cache in front of `/stocks` (accepted)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L42", + "id": "specs_2026_09_29_nginx_scaling_design_d1_put_an_nginx_response_cache_in_front_of_stocks_accepted", + "community": 208, + "norm_label": "d1 \u2014 put an nginx response cache in front of `/stocks` (accepted)" }, { - "label": "verifyServiceKey()", - "file_type": "code", - "source_file": "main/controller/authentication_controller.py", - "source_location": "L277", - "community": 58, - "norm_label": "verifyservicekey()", - "id": "controller_authentication_controller_verifyservicekey" + "label": "D2 \u2014 Raise the app-layer TTLs and cache `/fields` **before** any nginx work (accepted, Rev 2)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L55", + "id": "specs_2026_09_29_nginx_scaling_design_d2_raise_the_app_layer_ttls_and_cache_fields_before_any_nginx_work_accepted_rev_2", + "community": 208, + "norm_label": "d2 \u2014 raise the app-layer ttls and cache `/fields` **before** any nginx work (accepted, rev 2)" }, { - "label": "_serviceToken()", - "file_type": "code", - "source_file": "main/utils/roles.py", - "source_location": "L63", - "community": 491, - "norm_label": "_servicetoken()", - "id": "utils_roles_servicetoken" + "label": "D3 \u2014 Pinned static upstreams now; Docker Swarm routing mesh only at \u22655 nodes (accepted)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L59", + "id": "specs_2026_09_29_nginx_scaling_design_d3_pinned_static_upstreams_now_docker_swarm_routing_mesh_only_at_5_nodes_accepted", + "community": 208, + "norm_label": "d3 \u2014 pinned static upstreams now; docker swarm routing mesh only at \u22655 nodes (accepted)" }, { - "label": "_introspectUrl()", - "file_type": "code", - "source_file": "main/utils/roles.py", - "source_location": "L69", - "community": 491, - "norm_label": "_introspecturl()", - "id": "utils_roles_introspecturl" + "label": "D4 \u2014 Cache is per node, rebuilt on version; **not** NFS, not rsync (accepted)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L75", + "id": "specs_2026_09_29_nginx_scaling_design_d4_cache_is_per_node_rebuilt_on_version_not_nfs_not_rsync_accepted", + "community": 208, + "norm_label": "d4 \u2014 cache is per node, rebuilt on version; **not** nfs, not rsync (accepted)" }, { - "label": "_extractCredential()", - "file_type": "code", - "source_file": "main/utils/roles.py", - "source_location": "L75", - "community": 491, - "norm_label": "_extractcredential()", - "id": "utils_roles_extractcredential" + "label": "D5 \u2014 Redis is deferred (accepted, Rev 2)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L79", + "id": "specs_2026_09_29_nginx_scaling_design_d5_redis_is_deferred_accepted_rev_2", + "community": 208, + "norm_label": "d5 \u2014 redis is deferred (accepted, rev 2)" }, { - "label": "introspectUser()", - "file_type": "code", - "source_file": "main/utils/roles.py", - "source_location": "L92", - "community": 491, - "norm_label": "introspectuser()", - "id": "utils_roles_introspectuser" + "label": "D6 \u2014 Extraction order: STOCKS_API \u2192 ORUNMILA+ForgeVM \u2192 USER \u2192 scraper (accepted)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L83", + "id": "specs_2026_09_29_nginx_scaling_design_d6_extraction_order_stocks_api_orunmila_forgevm_user_scraper_accepted", + "community": 208, + "norm_label": "d6 \u2014 extraction order: stocks_api \u2192 orunmila+forgevm \u2192 user \u2192 scraper (accepted)" }, { - "label": "PrometheusSettings", - "file_type": "code", - "source_file": "config.py", - "source_location": "L59", - "community": 102, - "norm_label": "prometheussettings", - "id": "server_config_prometheussettings" + "label": "D7 \u2014 Health strategy stays passive until a black hole is observed (accepted)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L87", + "id": "specs_2026_09_29_nginx_scaling_design_d7_health_strategy_stays_passive_until_a_black_hole_is_observed_accepted", + "community": 208, + "norm_label": "d7 \u2014 health strategy stays passive until a black hole is observed (accepted)" }, { - "label": "agent.py", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L1", - "community": 116, - "norm_label": "agent.py", - "id": "main_app_prometheus_agent_py" + "label": "D8 \u2014 Cached HITs bypass the monthly quota counter (accepted, product-visible)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L91", + "id": "specs_2026_09_29_nginx_scaling_design_d8_cached_hits_bypass_the_monthly_quota_counter_accepted_product_visible", + "community": 208, + "norm_label": "d8 \u2014 cached hits bypass the monthly quota counter (accepted, product-visible)" }, { - "label": "safeFilter()", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L25", - "community": 116, - "norm_label": "safefilter()", - "id": "prometheus_agent_safefilter" + "label": "D9 \u2014 Benchmark/result artifacts follow the draft convention (accepted, Rev 2)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L95", + "id": "specs_2026_09_29_nginx_scaling_design_d9_benchmark_result_artifacts_follow_the_draft_convention_accepted_rev_2", + "community": 208, + "norm_label": "d9 \u2014 benchmark/result artifacts follow the draft convention (accepted, rev 2)" }, { - "label": "persistEvent()", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L31", - "community": 116, - "norm_label": "persistevent()", - "id": "prometheus_agent_persistevent" + "label": "D10 \u2014 The endpoint cache is invalidated on every feather reload (accepted)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L99", + "id": "specs_2026_09_29_nginx_scaling_design_d10_the_endpoint_cache_is_invalidated_on_every_feather_reload_accepted", + "community": 208, + "norm_label": "d10 \u2014 the endpoint cache is invalidated on every feather reload (accepted)" }, { - "label": "getClient()", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L45", - "community": 116, - "norm_label": "getclient()", - "id": "prometheus_agent_getclient" + "label": "3. Caching policy (canonical)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L103", + "id": "specs_2026_09_29_nginx_scaling_design_3_caching_policy_canonical", + "community": 208, + "norm_label": "3. caching policy (canonical)" }, { - "label": "Prometheus", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L208", - "community": 116, - "norm_label": "prometheus", - "id": "prometheus_agent_prometheus" + "label": "4. Topology", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L130", + "id": "specs_2026_09_29_nginx_scaling_design_4_topology", + "community": 208, + "norm_label": "4. topology" }, { - "label": ".__init__()", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L209", - "community": 116, - "norm_label": ".__init__()", - "id": "prometheus_agent_prometheus_init" + "label": "code:block1 (NODE A NODE B)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L135", + "id": "specs_2026_09_29_nginx_scaling_design_codeblock_1", + "community": 208, + "norm_label": "code:block1 (node a node b)" }, { - "label": "buildSystemPrompt()", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L213", - "community": 116, - "norm_label": "buildsystemprompt()", - "id": "prometheus_agent_buildsystemprompt" + "label": "5. Quota and rate limits after caching", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L148", + "id": "specs_2026_09_29_nginx_scaling_design_5_quota_and_rate_limits_after_caching", + "community": 208, + "norm_label": "5. quota and rate limits after caching" }, { - "label": ".makeChat()", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L242", - "community": 116, - "norm_label": ".makechat()", - "id": "prometheus_agent_prometheus_makechat" + "label": "6. Non-goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L159", + "id": "specs_2026_09_29_nginx_scaling_design_6_non_goals", + "community": 208, + "norm_label": "6. non-goals" }, { - "label": ".streamMessage()", - "file_type": "code", - "source_file": "main/app/prometheus/agent.py", - "source_location": "L253", - "community": 116, - "norm_label": ".streammessage()", - "id": "prometheus_agent_prometheus_streammessage" + "label": "7. Acceptance criteria", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L163", + "id": "specs_2026_09_29_nginx_scaling_design_7_acceptance_criteria", + "community": 208, + "norm_label": "7. acceptance criteria" }, { - "label": "chat.py", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L1", - "community": 125, - "norm_label": "chat.py", - "id": "main_app_prometheus_chat_py" + "label": "8. Open decisions (product-owned)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L173", + "id": "specs_2026_09_29_nginx_scaling_design_8_open_decisions_product_owned", + "community": 208, + "norm_label": "8. open decisions (product-owned)" }, { - "label": "PrometheusChatManager", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L13", - "community": 68, - "norm_label": "prometheuschatmanager", - "id": "prometheus_chat_prometheuschatmanager" + "label": "9. Risks (top of the register; full 15-row table in the source document \u00a73.9)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L182", + "id": "specs_2026_09_29_nginx_scaling_design_9_risks_top_of_the_register_full_15_row_table_in_the_source_document_3_9", + "community": 208, + "norm_label": "9. risks (top of the register; full 15-row table in the source document \u00a73.9)" }, { - "label": "getUserSessions()", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L15", - "community": 125, - "norm_label": "getusersessions()", - "id": "prometheus_chat_getusersessions" + "label": "10. Plans and follow-ups", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L195", + "id": "specs_2026_09_29_nginx_scaling_design_10_plans_and_follow_ups", + "community": 208, + "norm_label": "10. plans and follow-ups" }, { - "label": "createSession()", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L33", - "community": 125, - "norm_label": "createsession()", - "id": "prometheus_chat_createsession" + "label": "Priorities (active order, 2026-09-29)", + "file_type": "document", + "source_file": "TODO.md", + "source_location": "L1", + "community": 187, + "norm_label": "priorities (active order, 2026-09-29)", + "id": "server_todo_priorities_active_order_2026_09_29" }, { - "label": "updateSessionTitle()", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L41", - "community": 125, - "norm_label": "updatesessiontitle()", - "id": "prometheus_chat_updatesessiontitle" + "label": "Discover available field names before querying /historical or /fundamental.", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L47", + "community": 222, + "norm_label": "discover available field names before querying /historical or /fundamental.", + "id": "controller_stocksapi_controller_rationale_47" }, { - "label": "appendHistory()", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L52", - "community": 125, - "norm_label": "appendhistory()", - "id": "prometheus_chat_appendhistory" + "label": "Get year-based historical financial data for Brazilian B3 stocks. Returns", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L103", + "community": 197, + "norm_label": "get year-based historical financial data for brazilian b3 stocks. returns", + "id": "controller_stocksapi_controller_rationale_103" }, { - "label": "getHistory()", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L71", - "community": 125, - "norm_label": "gethistory()", - "id": "prometheus_chat_gethistory" + "label": "Get point-in-time fundamental/valuation data for Brazilian B3 stocks. Ret", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L168", + "community": 157, + "norm_label": "get point-in-time fundamental/valuation data for brazilian b3 stocks. ret", + "id": "controller_stocksapi_controller_rationale_168" }, { - "label": "deleteSession()", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L92", - "community": 125, - "norm_label": "deletesession()", - "id": "prometheus_chat_deletesession" + "label": "Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L236", + "community": 169, + "norm_label": "get 10-year daily price history (cotation) for brazilian b3 stocks. retur", + "id": "controller_stocksapi_controller_rationale_236" }, { - "label": "verifySessionOwnership()", - "file_type": "code", - "source_file": "main/app/prometheus/chat.py", - "source_location": "L106", - "community": 125, - "norm_label": "verifysessionownership()", - "id": "prometheus_chat_verifysessionownership" + "label": "Get real-time price quotation for a single Brazilian B3 stock. Returns th", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L290", + "community": 81, + "norm_label": "get real-time price quotation for a single brazilian b3 stock. returns th", + "id": "controller_stocksapi_controller_rationale_290" }, { - "label": "compact.py", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L1", - "community": 80, - "norm_label": "compact.py", - "id": "main_app_prometheus_compact_py" + "label": "Discover available field names before querying /historical or /fundamental.", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L39", + "community": 222, + "norm_label": "discover available field names before querying /historical or /fundamental.", + "id": "controller_stocksapi_controller_rationale_39" }, { - "label": "getTokenizer()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L35", - "community": 80, - "norm_label": "gettokenizer()", - "id": "prometheus_compact_gettokenizer" + "label": "Get year-based historical financial data for Brazilian B3 stocks. Returns", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L95", + "community": 197, + "norm_label": "get year-based historical financial data for brazilian b3 stocks. returns", + "id": "controller_stocksapi_controller_rationale_95" }, { - "label": "countTokens()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L47", - "community": 80, - "norm_label": "counttokens()", - "id": "prometheus_compact_counttokens" + "label": "Get point-in-time fundamental/valuation data for Brazilian B3 stocks. Ret", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L160", + "community": 157, + "norm_label": "get point-in-time fundamental/valuation data for brazilian b3 stocks. ret", + "id": "controller_stocksapi_controller_rationale_160" }, { - "label": "getStocksFieldsUrl()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L64", - "community": 80, - "norm_label": "getstocksfieldsurl()", - "id": "prometheus_compact_getstocksfieldsurl" + "label": "Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L228", + "community": 169, + "norm_label": "get 10-year daily price history (cotation) for brazilian b3 stocks. retur", + "id": "controller_stocksapi_controller_rationale_228" }, { - "label": "isTransientFieldsError()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L68", - "community": 80, - "norm_label": "istransientfieldserror()", - "id": "prometheus_compact_istransientfieldserror" + "label": "Get real-time price quotation for a single Brazilian B3 stock. Returns th", + "file_type": "rationale", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L282", + "community": 81, + "norm_label": "get real-time price quotation for a single brazilian b3 stock. returns th", + "id": "controller_stocksapi_controller_rationale_282" }, { - "label": "fetchFieldsPayload()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L83", - "community": 80, - "norm_label": "fetchfieldspayload()", - "id": "prometheus_compact_fetchfieldspayload" + "label": "Uvicorn Worker Scaling \u2014 Verified State and Evaluated Plan", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "community": 495, + "norm_label": "uvicorn worker scaling \u2014 verified state and evaluated plan", + "id": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan" }, { - "label": "loadFieldData()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L89", - "community": 80, - "norm_label": "loadfielddata()", - "id": "prometheus_compact_loadfielddata" + "label": "1. Verified current state (file:line)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L13", + "community": 495, + "norm_label": "1. verified current state (file:line)", + "id": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state_file_line" }, { - "label": "getMetricRegex()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L105", - "community": 80, - "norm_label": "getmetricregex()", - "id": "prometheus_compact_getmetricregex" + "label": "1.1 Runtime topology \u2014 one process, many threads", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L15", + "community": 495, + "norm_label": "1.1 runtime topology \u2014 one process, many threads", + "id": "superpowers_uvicorn_worker_scaling_plan_1_1_runtime_topology_one_process_many_threads" }, { - "label": "dedup()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L119", - "community": 80, - "norm_label": "dedup()", - "id": "prometheus_compact_dedup" + "label": "1.2 The cache is already the right shape for multi-process", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L33", + "community": 495, + "norm_label": "1.2 the cache is already the right shape for multi-process", + "id": "superpowers_uvicorn_worker_scaling_plan_1_2_the_cache_is_already_the_right_shape_for_multi_process" }, { - "label": "extractTickers()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L123", - "community": 80, - "norm_label": "extracttickers()", - "id": "prometheus_compact_extracttickers" + "label": "1.3 Per-process state that multiplies with N", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L48", + "community": 495, + "norm_label": "1.3 per-process state that multiplies with n", + "id": "superpowers_uvicorn_worker_scaling_plan_1_3_per_process_state_that_multiplies_with_n" }, { - "label": "extractMetrics()", - "file_type": "code", - "source_file": "main/app/prometheus/compact.py", - "source_location": "L127", - "community": 80, - "norm_label": "extractmetrics()", - "id": "prometheus_compact_extractmetrics" + "label": "2. Options evaluated", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L60", + "community": 495, + "norm_label": "2. options evaluated", + "id": "superpowers_uvicorn_worker_scaling_plan_2_options_evaluated" }, { - "label": "extractDecisions()", - "file_type": "code", + "label": "3. Exact required changes (before raising N)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L74", + "community": 495, + "norm_label": "3. exact required changes (before raising n)", + "id": "superpowers_uvicorn_worker_scaling_plan_3_exact_required_changes_before_raising_n" + }, + { + "label": "4. Risks and open items", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L87", + "community": 495, + "norm_label": "4. risks and open items", + "id": "superpowers_uvicorn_worker_scaling_plan_4_risks_and_open_items" + }, + { + "label": "5. Baseline (measured)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L100", + "community": 495, + "norm_label": "5. baseline (measured)", + "id": "superpowers_uvicorn_worker_scaling_plan_5_baseline_measured" + }, + { + "label": "6. Evaluation of the user's `docs/nginx-scaling-plan.md`", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L106", + "community": 495, + "norm_label": "6. evaluation of the user's `docs/nginx-scaling-plan.md`", + "id": "superpowers_uvicorn_worker_scaling_plan_6_evaluation_of_the_user_s_docs_nginx_scaling_plan_md" + }, + { + "label": "7. What is out of scope (separate plan)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L121", + "community": 495, + "norm_label": "7. what is out of scope (separate plan)", + "id": "superpowers_uvicorn_worker_scaling_plan_7_what_is_out_of_scope_separate_plan" + }, + { + "label": "3. API contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L49", + "community": 130, + "norm_label": "3. api contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `depends(usermanager.getcurrentuser)` + `depends(getsession)` throughout)", + "id": "superpowers_investidor10_wallet_spec_3_api_contracts_all_under_api_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout" + }, + { + "label": "Uvicorn Worker Scaling \u2014 Verified State + Evaluated Plan", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "community": 495, + "norm_label": "uvicorn worker scaling \u2014 verified state + evaluated plan", + "id": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan" + }, + { + "label": "1. Verified current state", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L8", + "community": 495, + "norm_label": "1. verified current state", + "id": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state" + }, + { + "label": "1.1 Process model \u2014 exactly one process, several threads", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L10", + "community": 495, + "norm_label": "1.1 process model \u2014 exactly one process, several threads", + "id": "superpowers_uvicorn_worker_scaling_plan_1_1_process_model_exactly_one_process_several_threads" + }, + { + "label": "1.2 Cache (post-refactor) \u2014 RAM sharing works", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L23", + "community": 495, + "norm_label": "1.2 cache (post-refactor) \u2014 ram sharing works", + "id": "superpowers_uvicorn_worker_scaling_plan_1_2_cache_post_refactor_ram_sharing_works" + }, + { + "label": "1.3 Per-process resources that multiply with N workers", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L27", + "community": 495, + "norm_label": "1.3 per-process resources that multiply with n workers", + "id": "superpowers_uvicorn_worker_scaling_plan_1_3_per_process_resources_that_multiply_with_n_workers" + }, + { + "label": "2. The blocking defect (must fix before N > 1)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L40", + "community": 495, + "norm_label": "2. the blocking defect (must fix before n > 1)", + "id": "superpowers_uvicorn_worker_scaling_plan_2_the_blocking_defect_must_fix_before_n_1" + }, + { + "label": "code:block1 (275: lockFile = tryBuildLock())", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L44", + "community": 495, + "norm_label": "code:block1 (275: lockfile = trybuildlock())", + "id": "superpowers_uvicorn_worker_scaling_plan_codeblock_1" + }, + { + "label": "3. Options evaluated", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L66", + "community": 495, + "norm_label": "3. options evaluated", + "id": "superpowers_uvicorn_worker_scaling_plan_3_options_evaluated" + }, + { + "label": "4. Recommended plan", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L79", + "community": 495, + "norm_label": "4. recommended plan", + "id": "superpowers_uvicorn_worker_scaling_plan_4_recommended_plan" + }, + { + "label": "Phase 0 \u2014 Measure (half a day, no infra)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L81", + "community": 495, + "norm_label": "phase 0 \u2014 measure (half a day, no infra)", + "id": "superpowers_uvicorn_worker_scaling_plan_phase_0_measure_half_a_day_no_infra" + }, + { + "label": "Phase 1 \u2014 Correctness fixes (required before any N > 1)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L87", + "community": 495, + "norm_label": "phase 1 \u2014 correctness fixes (required before any n > 1)", + "id": "superpowers_uvicorn_worker_scaling_plan_phase_1_correctness_fixes_required_before_any_n_1" + }, + { + "label": "Phase 2 \u2014 Enable workers on one host (option c)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L93", + "community": 495, + "norm_label": "phase 2 \u2014 enable workers on one host (option c)", + "id": "superpowers_uvicorn_worker_scaling_plan_phase_2_enable_workers_on_one_host_option_c" + }, + { + "label": "Phase 3 \u2014 Multi-host (only if you split boxes)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L99", + "community": 495, + "norm_label": "phase 3 \u2014 multi-host (only if you split boxes)", + "id": "superpowers_uvicorn_worker_scaling_plan_phase_3_multi_host_only_if_you_split_boxes" + }, + { + "label": "5. Evaluation of the existing scaling plan (recovered from git)", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L109", + "community": 495, + "norm_label": "5. evaluation of the existing scaling plan (recovered from git)", + "id": "superpowers_uvicorn_worker_scaling_plan_5_evaluation_of_the_existing_scaling_plan_recovered_from_git" + }, + { + "label": "6. Risks / open items", + "file_type": "document", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L122", + "community": 495, + "norm_label": "6. risks / open items", + "id": "superpowers_uvicorn_worker_scaling_plan_6_risks_open_items" + }, + { + "label": "uvicorn-worker-scaling-plan.md", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "community": 487, + "norm_label": "uvicorn-worker-scaling-plan.md", + "id": "docs_uvicorn_worker_scaling_plan_md" + }, + { + "label": "Uvicorn Worker Scaling \u2014 Verified State + Evaluated Plan", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "community": 487, + "norm_label": "uvicorn worker scaling \u2014 verified state + evaluated plan", + "id": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan" + }, + { + "label": "1. Verified current state", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L8", + "community": 487, + "norm_label": "1. verified current state", + "id": "docs_uvicorn_worker_scaling_plan_1_verified_current_state" + }, + { + "label": "1.1 Process model \u2014 exactly one process, several threads", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L10", + "community": 487, + "norm_label": "1.1 process model \u2014 exactly one process, several threads", + "id": "docs_uvicorn_worker_scaling_plan_1_1_process_model_exactly_one_process_several_threads" + }, + { + "label": "1.2 Cache (post-refactor) \u2014 RAM sharing works", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L23", + "community": 487, + "norm_label": "1.2 cache (post-refactor) \u2014 ram sharing works", + "id": "docs_uvicorn_worker_scaling_plan_1_2_cache_post_refactor_ram_sharing_works" + }, + { + "label": "1.3 Per-process resources that multiply with N workers", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L27", + "community": 487, + "norm_label": "1.3 per-process resources that multiply with n workers", + "id": "docs_uvicorn_worker_scaling_plan_1_3_per_process_resources_that_multiply_with_n_workers" + }, + { + "label": "2. The blocking defect (must fix before N > 1)", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L40", + "community": 487, + "norm_label": "2. the blocking defect (must fix before n > 1)", + "id": "docs_uvicorn_worker_scaling_plan_2_the_blocking_defect_must_fix_before_n_1" + }, + { + "label": "code:block1 (275: lockFile = tryBuildLock())", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L44", + "community": 487, + "norm_label": "code:block1 (275: lockfile = trybuildlock())", + "id": "docs_uvicorn_worker_scaling_plan_codeblock_1" + }, + { + "label": "3. Options evaluated", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L66", + "community": 487, + "norm_label": "3. options evaluated", + "id": "docs_uvicorn_worker_scaling_plan_3_options_evaluated" + }, + { + "label": "4. Recommended plan", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L79", + "community": 487, + "norm_label": "4. recommended plan", + "id": "docs_uvicorn_worker_scaling_plan_4_recommended_plan" + }, + { + "label": "Phase 0 \u2014 Measure (half a day, no infra)", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L81", + "community": 487, + "norm_label": "phase 0 \u2014 measure (half a day, no infra)", + "id": "docs_uvicorn_worker_scaling_plan_phase_0_measure_half_a_day_no_infra" + }, + { + "label": "Phase 1 \u2014 Correctness fixes (required before any N > 1)", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L87", + "community": 487, + "norm_label": "phase 1 \u2014 correctness fixes (required before any n > 1)", + "id": "docs_uvicorn_worker_scaling_plan_phase_1_correctness_fixes_required_before_any_n_1" + }, + { + "label": "Phase 2 \u2014 Enable workers on one host (option c)", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L93", + "community": 487, + "norm_label": "phase 2 \u2014 enable workers on one host (option c)", + "id": "docs_uvicorn_worker_scaling_plan_phase_2_enable_workers_on_one_host_option_c" + }, + { + "label": "Phase 3 \u2014 Multi-host (only if you split boxes)", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L99", + "community": 487, + "norm_label": "phase 3 \u2014 multi-host (only if you split boxes)", + "id": "docs_uvicorn_worker_scaling_plan_phase_3_multi_host_only_if_you_split_boxes" + }, + { + "label": "5. Evaluation of the existing scaling plan (recovered from git)", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L109", + "community": 487, + "norm_label": "5. evaluation of the existing scaling plan (recovered from git)", + "id": "docs_uvicorn_worker_scaling_plan_5_evaluation_of_the_existing_scaling_plan_recovered_from_git" + }, + { + "label": "6. Risks / open items", + "file_type": "document", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L122", + "community": 487, + "norm_label": "6. risks / open items", + "id": "docs_uvicorn_worker_scaling_plan_6_risks_open_items" + }, + { + "label": "6.1 DB & migrations (`user_db`) \u2014 READY, 2 actions", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L85", + "community": 130, + "norm_label": "6.1 db & migrations (`user_db`) \u2014 ready, 2 actions", + "id": "superpowers_investidor10_wallet_spec_6_1_db_migrations_user_db_ready_2_actions" + }, + { + "label": "6.2 Stocks/price access \u2014 READY for full-series; ONE new helper needed", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L92", + "community": 130, + "norm_label": "6.2 stocks/price access \u2014 ready for full-series; one new helper needed", + "id": "superpowers_investidor10_wallet_spec_6_2_stocks_price_access_ready_for_full_series_one_new_helper_needed" + }, + { + "label": "6.3 Wiring / auth / tests \u2014 READY", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L98", + "community": 130, + "norm_label": "6.3 wiring / auth / tests \u2014 ready", + "id": "superpowers_investidor10_wallet_spec_6_3_wiring_auth_tests_ready" + }, + { + "label": "6.4 Scraper pipeline (P2 dividends / has_b3) \u2014 READY (public sources only)", + "file_type": "document", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L104", + "community": 130, + "norm_label": "6.4 scraper pipeline (p2 dividends / has_b3) \u2014 ready (public sources only)", + "id": "superpowers_investidor10_wallet_spec_6_4_scraper_pipeline_p2_dividends_has_b3_ready_public_sources_only" + }, + { + "label": "investidor10-wallet-research.md", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L1", + "community": 582, + "norm_label": "investidor10-wallet-research.md", + "id": "docs_investidor10_wallet_research_md" + }, + { + "label": "Investidor10 Wallet \u2014 Empirical Research for Mansa", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L1", + "community": 582, + "norm_label": "investidor10 wallet \u2014 empirical research for mansa", + "id": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa" + }, + { + "label": "1. Feature inventory + nav structure", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L10", + "community": 582, + "norm_label": "1. feature inventory + nav structure", + "id": "docs_investidor10_wallet_research_1_feature_inventory_nav_structure" + }, + { + "label": "2. User lifecycle end-to-end", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L30", + "community": 582, + "norm_label": "2. user lifecycle end-to-end", + "id": "docs_investidor10_wallet_research_2_user_lifecycle_end_to_end" + }, + { + "label": "3. Wallet API reference", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L40", + "community": 582, + "norm_label": "3. wallet api reference", + "id": "docs_investidor10_wallet_research_3_wallet_api_reference" + }, + { + "label": "4. Data model inference (from payloads, no DB access)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L65", + "community": 582, + "norm_label": "4. data model inference (from payloads, no db access)", + "id": "docs_investidor10_wallet_research_4_data_model_inference_from_payloads_no_db_access" + }, + { + "label": "5. Product logic", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L74", + "community": 582, + "norm_label": "5. product logic", + "id": "docs_investidor10_wallet_research_5_product_logic" + }, + { + "label": "5b. Gaps / unverified (do not treat as fact)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L82", + "community": 582, + "norm_label": "5b. gaps / unverified (do not treat as fact)", + "id": "docs_investidor10_wallet_research_5b_gaps_unverified_do_not_treat_as_fact" + }, + { + "label": "6. Concrete Mansa proposal (build first \u2192 later; minimal sketches)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L86", + "community": 582, + "norm_label": "6. concrete mansa proposal (build first \u2192 later; minimal sketches)", + "id": "docs_investidor10_wallet_research_6_concrete_mansa_proposal_build_first_later_minimal_sketches" + }, + { + "label": "investidor10-wallet-spec.md", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L1", + "community": 583, + "norm_label": "investidor10-wallet-spec.md", + "id": "docs_investidor10_wallet_spec_md" + }, + { + "label": "Mansa Wallet \u2014 Spec-Driven Implementation Spec", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L1", + "community": 583, + "norm_label": "mansa wallet \u2014 spec-driven implementation spec", + "id": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec" + }, + { + "label": "1. Requirements", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L12", + "community": 583, + "norm_label": "1. requirements", + "id": "docs_investidor10_wallet_spec_1_requirements" + }, + { + "label": "1.1 Functional (per surface; tags: EXISTS = build on it, PARTIAL = half reusable, MISSING = greenfield)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L14", + "community": 583, + "norm_label": "1.1 functional (per surface; tags: exists = build on it, partial = half reusable, missing = greenfield)", + "id": "docs_investidor10_wallet_spec_1_1_functional_per_surface_tags_exists_build_on_it_partial_half_reusable_missing_greenfield" + }, + { + "label": "1.2 Non-functional", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L28", + "community": 583, + "norm_label": "1.2 non-functional", + "id": "docs_investidor10_wallet_spec_1_2_non_functional" + }, + { + "label": "2. Domain model", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L38", + "community": 583, + "norm_label": "2. domain model", + "id": "docs_investidor10_wallet_spec_2_domain_model" + }, + { + "label": "3. API contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `Depends(UserManager.getCurrentUser)` + `Depends(getSession)` throughout)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L49", + "community": 583, + "norm_label": "3. api contracts (all under `/api/wallet`; chain: `main/controller/wallet_controller.py` \u2192 `main/service/wallet_service.py::` \u2192 `main/models/wallet.py::`; auth `depends(usermanager.getcurrentuser)` + `depends(getsession)` throughout)", + "id": "docs_investidor10_wallet_spec_3_api_contracts_all_under_api_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout" + }, + { + "label": "4. Phased build plan (writing-plans: each phase independently reviewable; reviewer PASS per phase)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L66", + "community": 583, + "norm_label": "4. phased build plan (writing-plans: each phase independently reviewable; reviewer pass per phase)", + "id": "docs_investidor10_wallet_spec_4_phased_build_plan_writing_plans_each_phase_independently_reviewable_reviewer_pass_per_phase" + }, + { + "label": "5. Risks / assumptions (honest flags carried over \u2014 do not treat as fact)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L72", + "community": 583, + "norm_label": "5. risks / assumptions (honest flags carried over \u2014 do not treat as fact)", + "id": "docs_investidor10_wallet_spec_5_risks_assumptions_honest_flags_carried_over_do_not_treat_as_fact" + }, + { + "label": "6. Readiness assessment (s3, verified 2026-09-29) \u2014 prerequisites before P1", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L81", + "community": 583, + "norm_label": "6. readiness assessment (s3, verified 2026-09-29) \u2014 prerequisites before p1", + "id": "docs_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1" + }, + { + "label": "6.1 DB & migrations (`user_db`) \u2014 READY, 2 actions", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L85", + "community": 583, + "norm_label": "6.1 db & migrations (`user_db`) \u2014 ready, 2 actions", + "id": "docs_investidor10_wallet_spec_6_1_db_migrations_user_db_ready_2_actions" + }, + { + "label": "6.2 Stocks/price access \u2014 READY for full-series; ONE new helper needed", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L92", + "community": 583, + "norm_label": "6.2 stocks/price access \u2014 ready for full-series; one new helper needed", + "id": "docs_investidor10_wallet_spec_6_2_stocks_price_access_ready_for_full_series_one_new_helper_needed" + }, + { + "label": "6.3 Wiring / auth / tests \u2014 READY", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L98", + "community": 583, + "norm_label": "6.3 wiring / auth / tests \u2014 ready", + "id": "docs_investidor10_wallet_spec_6_3_wiring_auth_tests_ready" + }, + { + "label": "6.4 Scraper pipeline (P2 dividends / has_b3) \u2014 READY (public sources only)", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L104", + "community": 583, + "norm_label": "6.4 scraper pipeline (p2 dividends / has_b3) \u2014 ready (public sources only)", + "id": "docs_investidor10_wallet_spec_6_4_scraper_pipeline_p2_dividends_has_b3_ready_public_sources_only" + }, + { + "label": "6.5 Ordered actions before P1 code", + "file_type": "document", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L110", + "community": 583, + "norm_label": "6.5 ordered actions before p1 code", + "id": "docs_investidor10_wallet_spec_6_5_ordered_actions_before_p1_code" + }, + { + "label": "nginx-scaling-plan.md", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L1", + "community": 591, + "norm_label": "nginx-scaling-plan.md", + "id": "docs_nginx_scaling_plan_md" + }, + { + "label": "nginx Scaling Plan \u2014 reverse proxy + response cache for `/stocks`, and the multi-server evolution", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L1", + "community": 591, + "norm_label": "nginx scaling plan \u2014 reverse proxy + response cache for `/stocks`, and the multi-server evolution", + "id": "docs_nginx_scaling_plan_nginx_scaling_plan_reverse_proxy_response_cache_for_stocks_and_the_multi_server_evolution" + }, + { + "label": "0. Purpose and constraints", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L11", + "community": 591, + "norm_label": "0. purpose and constraints", + "id": "docs_nginx_scaling_plan_0_purpose_and_constraints" + }, + { + "label": "Part 1 \u2014 Implementation plan", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L31", + "community": 475, + "norm_label": "part 1 \u2014 implementation plan", + "id": "docs_nginx_scaling_plan_part_1_implementation_plan" + }, + { + "label": "1.1 Architecture decision", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L33", + "community": 475, + "norm_label": "1.1 architecture decision", + "id": "docs_nginx_scaling_plan_1_1_architecture_decision" + }, + { + "label": "1.2 File layout", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L46", + "community": 475, + "norm_label": "1.2 file layout", + "id": "docs_nginx_scaling_plan_1_2_file_layout" + }, + { + "label": "code:block1 (nginx/)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L49", + "community": 475, + "norm_label": "code:block1 (nginx/)", + "id": "docs_nginx_scaling_plan_codeblock_1" + }, + { + "label": "1.3 Phase P0 \u2014 nginx service + config skeleton", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L63", + "community": 593, + "norm_label": "1.3 phase p0 \u2014 nginx service + config skeleton", + "id": "docs_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton" + }, + { + "label": "code:yaml (nginx:)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L65", + "community": 593, + "norm_label": "code:yaml (nginx:)", + "id": "docs_nginx_scaling_plan_codeblock_2" + }, + { + "label": "code:nginx (proxy_cache_path /var/cache/nginx/stocks)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L85", + "community": 593, + "norm_label": "code:nginx (proxy_cache_path /var/cache/nginx/stocks)", + "id": "docs_nginx_scaling_plan_codeblock_3" + }, + { + "label": "code:nginx (upstream stocks_api {)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L106", + "community": 593, + "norm_label": "code:nginx (upstream stocks_api {)", + "id": "docs_nginx_scaling_plan_codeblock_4" + }, + { + "label": "1.4 Phase P1 \u2014 cache locations, TTL table, directives", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L119", + "community": 594, + "norm_label": "1.4 phase p1 \u2014 cache locations, ttl table, directives", + "id": "docs_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives" + }, + { + "label": "code:nginx (proxy_pass http://stocks_api;)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L122", + "community": 594, + "norm_label": "code:nginx (proxy_pass http://stocks_api;)", + "id": "docs_nginx_scaling_plan_codeblock_5" + }, + { + "label": "code:nginx (server {)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L153", + "community": 594, + "norm_label": "code:nginx (server {)", + "id": "docs_nginx_scaling_plan_codeblock_6" + }, + { + "label": "code:bash (K=sk_test_...; U='http://localhost/stocks/historical?search=)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L209", + "community": 594, + "norm_label": "code:bash (k=sk_test_...; u='http://localhost/stocks/historical?search=)", + "id": "docs_nginx_scaling_plan_codeblock_7" + }, + { + "label": "1.5 Phase P2 \u2014 port scheme, worker containers, keepalive", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L218", + "community": 475, + "norm_label": "1.5 phase p2 \u2014 port scheme, worker containers, keepalive", + "id": "docs_nginx_scaling_plan_1_5_phase_p2_port_scheme_worker_containers_keepalive" + }, + { + "label": "code:yaml (stocksapi:)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L224", + "community": 475, + "norm_label": "code:yaml (stocksapi:)", + "id": "docs_nginx_scaling_plan_codeblock_8" + }, + { + "label": "1.6 Phase P3 \u2014 remote VPS upstreams + health strategy", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L244", + "community": 475, + "norm_label": "1.6 phase p3 \u2014 remote vps upstreams + health strategy", + "id": "docs_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy" + }, + { + "label": "code:nginx (upstream stocks_api {)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L246", + "community": 475, + "norm_label": "code:nginx (upstream stocks_api {)", + "id": "docs_nginx_scaling_plan_codeblock_9" + }, + { + "label": "code:nginx (proxy_next_upstream error timeout http_502 http_503 http_504)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L258", + "community": 475, + "norm_label": "code:nginx (proxy_next_upstream error timeout http_502 http_503 http_504)", + "id": "docs_nginx_scaling_plan_codeblock_10" + }, + { + "label": "1.7 Phase P4 \u2014 handoff design (no code in this plan)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L276", + "community": 475, + "norm_label": "1.7 phase p4 \u2014 handoff design (no code in this plan)", + "id": "docs_nginx_scaling_plan_1_7_phase_p4_handoff_design_no_code_in_this_plan" + }, + { + "label": "1.8 Quota / rate-limit semantics after caching", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L287", + "community": 475, + "norm_label": "1.8 quota / rate-limit semantics after caching", + "id": "docs_nginx_scaling_plan_1_8_quota_rate_limit_semantics_after_caching" + }, + { + "label": "1.9 Anti-scraping note (TODO 17)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L299", + "community": 475, + "norm_label": "1.9 anti-scraping note (todo 17)", + "id": "docs_nginx_scaling_plan_1_9_anti_scraping_note_todo_17" + }, + { + "label": "1.10 Edge cases / risks (implementation)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L303", + "community": 475, + "norm_label": "1.10 edge cases / risks (implementation)", + "id": "docs_nginx_scaling_plan_1_10_edge_cases_risks_implementation" + }, + { + "label": "Part 2 \u2014 Benchmark plan", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L314", + "community": 512, + "norm_label": "part 2 \u2014 benchmark plan", + "id": "docs_nginx_scaling_plan_part_2_benchmark_plan" + }, + { + "label": "2.0 Grounding: what the code actually does", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L316", + "community": 512, + "norm_label": "2.0 grounding: what the code actually does", + "id": "docs_nginx_scaling_plan_2_0_grounding_what_the_code_actually_does" + }, + { + "label": "2.1 Hypotheses", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L348", + "community": 512, + "norm_label": "2.1 hypotheses", + "id": "docs_nginx_scaling_plan_2_1_hypotheses" + }, + { + "label": "2.2 Tooling", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L357", + "community": 570, + "norm_label": "2.2 tooling", + "id": "docs_nginx_scaling_plan_2_2_tooling" + }, + { + "label": "code:bash (# Windows/Docker Desktop: do NOT use --network host (the Lin)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L360", + "community": 570, + "norm_label": "code:bash (# windows/docker desktop: do not use --network host (the lin)", + "id": "docs_nginx_scaling_plan_codeblock_11" + }, + { + "label": "code:bash (curl -s -o /dev/null -w '%header{x-cache-status}\\n' -H \"X-AP)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L373", + "community": 570, + "norm_label": "code:bash (curl -s -o /dev/null -w '%header{x-cache-status}\\n' -h \"x-ap)", + "id": "docs_nginx_scaling_plan_codeblock_12" + }, + { + "label": "code:bash (docker stats --no-stream --format \"{{.Name}},{{.CPUPerc}},{{)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L381", + "community": 570, + "norm_label": "code:bash (docker stats --no-stream --format \"{{.name}},{{.cpuperc}},{{)", + "id": "docs_nginx_scaling_plan_codeblock_13" + }, + { + "label": "code:bash (docker exec api sh -c \"pidstat -w -p 1 1 30\" # if sysst)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L387", + "community": 570, + "norm_label": "code:bash (docker exec api sh -c \"pidstat -w -p 1 1 30\" # if sysst)", + "id": "docs_nginx_scaling_plan_codeblock_14" + }, + { + "label": "code:block15 (tests/perf/nginx/)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L398", + "community": 570, + "norm_label": "code:block15 (tests/perf/nginx/)", + "id": "docs_nginx_scaling_plan_codeblock_15" + }, + { + "label": "2.3 Scenarios", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L407", + "community": 512, + "norm_label": "2.3 scenarios", + "id": "docs_nginx_scaling_plan_2_3_scenarios" + }, + { + "label": "2.4 Protocol", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L419", + "community": 512, + "norm_label": "2.4 protocol", + "id": "docs_nginx_scaling_plan_2_4_protocol" + }, + { + "label": "2.5 Metrics", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L430", + "community": 512, + "norm_label": "2.5 metrics", + "id": "docs_nginx_scaling_plan_2_5_metrics" + }, + { + "label": "2.6 Acceptance thresholds \u2014 **ALL PROPOSED, freeze after first real run**", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L434", + "community": 512, + "norm_label": "2.6 acceptance thresholds \u2014 **all proposed, freeze after first real run**", + "id": "docs_nginx_scaling_plan_2_6_acceptance_thresholds_all_proposed_freeze_after_first_real_run" + }, + { + "label": "2.7 Results doc layout", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L451", + "community": 512, + "norm_label": "2.7 results doc layout", + "id": "docs_nginx_scaling_plan_2_7_results_doc_layout" + }, + { + "label": "code:block16 (docs/benchmarks/nginx/)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L453", + "community": 512, + "norm_label": "code:block16 (docs/benchmarks/nginx/)", + "id": "docs_nginx_scaling_plan_codeblock_16" + }, + { + "label": "2.8 Feeding `/status` (TODO 14)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L460", + "community": 512, + "norm_label": "2.8 feeding `/status` (todo 14)", + "id": "docs_nginx_scaling_plan_2_8_feeding_status_todo_14" + }, + { + "label": "2.9 Benchmark risks", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L466", + "community": 512, + "norm_label": "2.9 benchmark risks", + "id": "docs_nginx_scaling_plan_2_9_benchmark_risks" + }, + { + "label": "Part 3 \u2014 Future scaling evolution + risks", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L477", + "community": 183, + "norm_label": "part 3 \u2014 future scaling evolution + risks", + "id": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks" + }, + { + "label": "3.0 Verified ground truth", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L479", + "community": 183, + "norm_label": "3.0 verified ground truth", + "id": "docs_nginx_scaling_plan_3_0_verified_ground_truth" + }, + { + "label": "3.1 Target topology", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L496", + "community": 183, + "norm_label": "3.1 target topology", + "id": "docs_nginx_scaling_plan_3_1_target_topology" + }, + { + "label": "code:block17 (NODE A NODE B)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L501", + "community": 183, + "norm_label": "code:block17 (node a node b)", + "id": "docs_nginx_scaling_plan_codeblock_17" + }, + { + "label": "3.2 Worker-container extraction", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L513", + "community": 183, + "norm_label": "3.2 worker-container extraction", + "id": "docs_nginx_scaling_plan_3_2_worker_container_extraction" + }, + { + "label": "3.3 nginx upstream evolution \u2014 validated against the user's plan", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L530", + "community": 183, + "norm_label": "3.3 nginx upstream evolution \u2014 validated against the user's plan", + "id": "docs_nginx_scaling_plan_3_3_nginx_upstream_evolution_validated_against_the_user_s_plan" + }, + { + "label": "code:nginx (upstream stocks_api { server 10.0.0.12:3200 max_fails=3 fail)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L534", + "community": 183, + "norm_label": "code:nginx (upstream stocks_api { server 10.0.0.12:3200 max_fails=3 fail)", + "id": "docs_nginx_scaling_plan_codeblock_18" + }, + { + "label": "3.4 TODO 13 migration \u2014 drop `{service}_HOST`/`{service}_PORT`", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L551", + "community": 183, + "norm_label": "3.4 todo 13 migration \u2014 drop `{service}_host`/`{service}_port`", + "id": "docs_nginx_scaling_plan_3_4_todo_13_migration_drop_service_host_service_port" + }, + { + "label": "3.5 Redis \u2014 exactly two jobs", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L558", + "community": 183, + "norm_label": "3.5 redis \u2014 exactly two jobs", + "id": "docs_nginx_scaling_plan_3_5_redis_exactly_two_jobs" + }, + { + "label": "3.6 Cache strategy across boxes", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L574", + "community": 183, + "norm_label": "3.6 cache strategy across boxes", + "id": "docs_nginx_scaling_plan_3_6_cache_strategy_across_boxes" + }, + { + "label": "3.7 Autoscaling story (TODO 11)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L580", + "community": 183, + "norm_label": "3.7 autoscaling story (todo 11)", + "id": "docs_nginx_scaling_plan_3_7_autoscaling_story_todo_11" + }, + { + "label": "3.8 ForgeVM interplay (TODO 12)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L585", + "community": 183, + "norm_label": "3.8 forgevm interplay (todo 12)", + "id": "docs_nginx_scaling_plan_3_8_forgevm_interplay_todo_12" + }, + { + "label": "3.9 Risk register", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L589", + "community": 183, + "norm_label": "3.9 risk register", + "id": "docs_nginx_scaling_plan_3_9_risk_register" + }, + { + "label": "3.10 Migration sequence + verification", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L609", + "community": 183, + "norm_label": "3.10 migration sequence + verification", + "id": "docs_nginx_scaling_plan_3_10_migration_sequence_verification" + }, + { + "label": "Open decisions (blocking or product-owned)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L628", + "community": 591, + "norm_label": "open decisions (blocking or product-owned)", + "id": "docs_nginx_scaling_plan_open_decisions_blocking_or_product_owned" + }, + { + "label": "Next actions (not in scope here)", + "file_type": "document", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L636", + "community": 591, + "norm_label": "next actions (not in scope here)", + "id": "docs_nginx_scaling_plan_next_actions_not_in_scope_here" + }, + { + "label": "_serviceToken()", + "file_type": "code", + "source_file": "main/app/stocks_api/key.py", + "source_location": "L18", + "community": 500, + "norm_label": "_servicetoken()", + "id": "stocks_api_key_servicetoken" + }, + { + "label": "_verifyUrl()", + "file_type": "code", + "source_file": "main/app/stocks_api/key.py", + "source_location": "L22", + "community": 500, + "norm_label": "_verifyurl()", + "id": "stocks_api_key_verifyurl" + }, + { + "label": "initVerifyClient()", + "file_type": "code", + "source_file": "main/app/stocks_api/key.py", + "source_location": "L26", + "community": 500, + "norm_label": "initverifyclient()", + "id": "stocks_api_key_initverifyclient" + }, + { + "label": "closeVerifyClient()", + "file_type": "code", + "source_file": "main/app/stocks_api/key.py", + "source_location": "L33", + "community": 500, + "norm_label": "closeverifyclient()", + "id": "stocks_api_key_closeverifyclient" + }, + { + "label": "requireServiceToken()", + "file_type": "code", + "source_file": "main/controller/authentication_controller.py", + "source_location": "L245", + "community": 58, + "norm_label": "requireservicetoken()", + "id": "controller_authentication_controller_requireservicetoken" + }, + { + "label": "verifyServiceKey()", + "file_type": "code", + "source_file": "main/controller/authentication_controller.py", + "source_location": "L277", + "community": 58, + "norm_label": "verifyservicekey()", + "id": "controller_authentication_controller_verifyservicekey" + }, + { + "label": "_serviceToken()", + "file_type": "code", + "source_file": "main/utils/roles.py", + "source_location": "L63", + "community": 523, + "norm_label": "_servicetoken()", + "id": "utils_roles_servicetoken" + }, + { + "label": "_introspectUrl()", + "file_type": "code", + "source_file": "main/utils/roles.py", + "source_location": "L69", + "community": 523, + "norm_label": "_introspecturl()", + "id": "utils_roles_introspecturl" + }, + { + "label": "_extractCredential()", + "file_type": "code", + "source_file": "main/utils/roles.py", + "source_location": "L75", + "community": 523, + "norm_label": "_extractcredential()", + "id": "utils_roles_extractcredential" + }, + { + "label": "introspectUser()", + "file_type": "code", + "source_file": "main/utils/roles.py", + "source_location": "L92", + "community": 523, + "norm_label": "introspectuser()", + "id": "utils_roles_introspectuser" + }, + { + "label": "PrometheusSettings", + "file_type": "code", + "source_file": "config.py", + "source_location": "L59", + "community": 102, + "norm_label": "prometheussettings", + "id": "server_config_prometheussettings" + }, + { + "label": "agent.py", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L1", + "community": 116, + "norm_label": "agent.py", + "id": "main_app_prometheus_agent_py" + }, + { + "label": "safeFilter()", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L25", + "community": 116, + "norm_label": "safefilter()", + "id": "prometheus_agent_safefilter" + }, + { + "label": "persistEvent()", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L31", + "community": 116, + "norm_label": "persistevent()", + "id": "prometheus_agent_persistevent" + }, + { + "label": "getClient()", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L45", + "community": 116, + "norm_label": "getclient()", + "id": "prometheus_agent_getclient" + }, + { + "label": "Prometheus", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L208", + "community": 116, + "norm_label": "prometheus", + "id": "prometheus_agent_prometheus" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L209", + "community": 116, + "norm_label": ".__init__()", + "id": "prometheus_agent_prometheus_init" + }, + { + "label": "buildSystemPrompt()", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L213", + "community": 116, + "norm_label": "buildsystemprompt()", + "id": "prometheus_agent_buildsystemprompt" + }, + { + "label": ".makeChat()", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L242", + "community": 116, + "norm_label": ".makechat()", + "id": "prometheus_agent_prometheus_makechat" + }, + { + "label": ".streamMessage()", + "file_type": "code", + "source_file": "main/app/prometheus/agent.py", + "source_location": "L253", + "community": 116, + "norm_label": ".streammessage()", + "id": "prometheus_agent_prometheus_streammessage" + }, + { + "label": "chat.py", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L1", + "community": 125, + "norm_label": "chat.py", + "id": "main_app_prometheus_chat_py" + }, + { + "label": "PrometheusChatManager", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L13", + "community": 172, + "norm_label": "prometheuschatmanager", + "id": "prometheus_chat_prometheuschatmanager" + }, + { + "label": "getUserSessions()", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L15", + "community": 125, + "norm_label": "getusersessions()", + "id": "prometheus_chat_getusersessions" + }, + { + "label": "createSession()", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L33", + "community": 125, + "norm_label": "createsession()", + "id": "prometheus_chat_createsession" + }, + { + "label": "updateSessionTitle()", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L41", + "community": 125, + "norm_label": "updatesessiontitle()", + "id": "prometheus_chat_updatesessiontitle" + }, + { + "label": "appendHistory()", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L52", + "community": 125, + "norm_label": "appendhistory()", + "id": "prometheus_chat_appendhistory" + }, + { + "label": "getHistory()", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L71", + "community": 125, + "norm_label": "gethistory()", + "id": "prometheus_chat_gethistory" + }, + { + "label": "deleteSession()", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L92", + "community": 125, + "norm_label": "deletesession()", + "id": "prometheus_chat_deletesession" + }, + { + "label": "verifySessionOwnership()", + "file_type": "code", + "source_file": "main/app/prometheus/chat.py", + "source_location": "L106", + "community": 125, + "norm_label": "verifysessionownership()", + "id": "prometheus_chat_verifysessionownership" + }, + { + "label": "compact.py", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L1", + "community": 80, + "norm_label": "compact.py", + "id": "main_app_prometheus_compact_py" + }, + { + "label": "getTokenizer()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L35", + "community": 80, + "norm_label": "gettokenizer()", + "id": "prometheus_compact_gettokenizer" + }, + { + "label": "countTokens()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L47", + "community": 80, + "norm_label": "counttokens()", + "id": "prometheus_compact_counttokens" + }, + { + "label": "getStocksFieldsUrl()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L64", + "community": 80, + "norm_label": "getstocksfieldsurl()", + "id": "prometheus_compact_getstocksfieldsurl" + }, + { + "label": "isTransientFieldsError()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L68", + "community": 80, + "norm_label": "istransientfieldserror()", + "id": "prometheus_compact_istransientfieldserror" + }, + { + "label": "fetchFieldsPayload()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L83", + "community": 80, + "norm_label": "fetchfieldspayload()", + "id": "prometheus_compact_fetchfieldspayload" + }, + { + "label": "loadFieldData()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L89", + "community": 80, + "norm_label": "loadfielddata()", + "id": "prometheus_compact_loadfielddata" + }, + { + "label": "getMetricRegex()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L105", + "community": 80, + "norm_label": "getmetricregex()", + "id": "prometheus_compact_getmetricregex" + }, + { + "label": "dedup()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L119", + "community": 80, + "norm_label": "dedup()", + "id": "prometheus_compact_dedup" + }, + { + "label": "extractTickers()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L123", + "community": 80, + "norm_label": "extracttickers()", + "id": "prometheus_compact_extracttickers" + }, + { + "label": "extractMetrics()", + "file_type": "code", + "source_file": "main/app/prometheus/compact.py", + "source_location": "L127", + "community": 80, + "norm_label": "extractmetrics()", + "id": "prometheus_compact_extractmetrics" + }, + { + "label": "extractDecisions()", + "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L131", "community": 80, @@ -10352,7 +13655,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L1", - "community": 12, + "community": 590, "norm_label": "mcp.py", "id": "main_app_prometheus_mcp_py" }, @@ -10361,7 +13664,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L21", - "community": 12, + "community": 590, "norm_label": "buildclient()", "id": "prometheus_mcp_buildclient" }, @@ -10370,7 +13673,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L29", - "community": 12, + "community": 590, "norm_label": "connect()", "id": "prometheus_mcp_connect" }, @@ -10379,7 +13682,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L36", - "community": 12, + "community": 590, "norm_label": "mcpclientpool", "id": "prometheus_mcp_mcpclientpool" }, @@ -10388,7 +13691,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L37", - "community": 12, + "community": 590, "norm_label": ".__init__()", "id": "prometheus_mcp_mcpclientpool_init" }, @@ -10397,7 +13700,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L42", - "community": 12, + "community": 590, "norm_label": ".initialize()", "id": "prometheus_mcp_mcpclientpool_initialize" }, @@ -10406,7 +13709,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L56", - "community": 12, + "community": 590, "norm_label": ".getclients()", "id": "prometheus_mcp_mcpclientpool_getclients" }, @@ -10415,7 +13718,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L63", - "community": 12, + "community": 590, "norm_label": ".healthcheck()", "id": "prometheus_mcp_mcpclientpool_healthcheck" }, @@ -10424,7 +13727,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L75", - "community": 12, + "community": 590, "norm_label": ".reconnect()", "id": "prometheus_mcp_mcpclientpool_reconnect" }, @@ -10433,7 +13736,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L90", - "community": 12, + "community": 590, "norm_label": ".close()", "id": "prometheus_mcp_mcpclientpool_close" }, @@ -10478,7 +13781,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L64", - "community": 45, + "community": 140, "norm_label": "memorycandidate", "id": "prometheus_memory_memorycandidate" }, @@ -10505,7 +13808,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L104", - "community": 13, + "community": 53, "norm_label": "minmax()", "id": "prometheus_memory_minmax" }, @@ -10532,7 +13835,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L140", - "community": 13, + "community": 53, "norm_label": "scorerow()", "id": "prometheus_memory_scorerow" }, @@ -10541,7 +13844,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L152", - "community": 13, + "community": 53, "norm_label": "scorerecency()", "id": "prometheus_memory_scorerecency" }, @@ -10550,7 +13853,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L162", - "community": 13, + "community": 53, "norm_label": "scorecandidates()", "id": "prometheus_memory_scorecandidates" }, @@ -10559,7 +13862,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L179", - "community": 80, + "community": 53, "norm_label": "sumtokens()", "id": "prometheus_memory_sumtokens" }, @@ -10613,7 +13916,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L286", - "community": 13, + "community": 53, "norm_label": "search()", "id": "prometheus_memory_search" }, @@ -10622,7 +13925,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L349", - "community": 13, + "community": 53, "norm_label": "fulltextsearch()", "id": "prometheus_memory_fulltextsearch" }, @@ -10928,7 +14231,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L1", - "community": 523, + "community": 571, "norm_label": "tools.py", "id": "main_app_prometheus_tools_py" }, @@ -10946,7 +14249,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L51", - "community": 126, + "community": 528, "norm_label": "save_memory()", "id": "prometheus_tools_save_memory" }, @@ -10955,7 +14258,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L93", - "community": 487, + "community": 546, "norm_label": "execute_code()", "id": "prometheus_tools_execute_code" }, @@ -10964,7 +14267,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L114", - "community": 208, + "community": 573, "norm_label": "read_file()", "id": "prometheus_tools_read_file" }, @@ -10973,7 +14276,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L128", - "community": 529, + "community": 525, "norm_label": "write_file()", "id": "prometheus_tools_write_file" }, @@ -11018,7 +14321,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L52", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_52" }, @@ -11027,7 +14330,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L94", - "community": 487, + "community": 546, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis,", "id": "prometheus_tools_rationale_94" }, @@ -11036,7 +14339,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L115", - "community": 208, + "community": 573, "norm_label": "read a file from the workspace. args: path: path to the file (e.", "id": "prometheus_tools_rationale_115" }, @@ -11045,7 +14348,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L129", - "community": 529, + "community": 525, "norm_label": "write a file to the workspace. use this to save data files (csv, json, scri", "id": "prometheus_tools_rationale_129" }, @@ -11072,7 +14375,7 @@ "file_type": "code", "source_file": "main/app/prometheus/vector.py", "source_location": "L1", - "community": 13, + "community": 104, "norm_label": "vector.py", "id": "main_app_prometheus_vector_py" }, @@ -11081,7 +14384,7 @@ "file_type": "code", "source_file": "main/app/prometheus/vector.py", "source_location": "L10", - "community": 13, + "community": 104, "norm_label": "normalizerows()", "id": "prometheus_vector_normalizerows" }, @@ -11090,7 +14393,7 @@ "file_type": "code", "source_file": "main/app/prometheus/vector.py", "source_location": "L15", - "community": 13, + "community": 53, "norm_label": "embed()", "id": "prometheus_vector_embed" }, @@ -11099,7 +14402,7 @@ "file_type": "code", "source_file": "main/app/prometheus/vector.py", "source_location": "L19", - "community": 13, + "community": 104, "norm_label": "decodeembeddings()", "id": "prometheus_vector_decodeembeddings" }, @@ -11108,7 +14411,7 @@ "file_type": "code", "source_file": "main/app/prometheus/vector.py", "source_location": "L41", - "community": 13, + "community": 104, "norm_label": "batchcosinesimilarity()", "id": "prometheus_vector_batchcosinesimilarity" }, @@ -11126,7 +14429,7 @@ "file_type": "code", "source_file": "main/app/prometheus/vector.py", "source_location": "L55", - "community": 13, + "community": 104, "norm_label": "tovectorstring()", "id": "prometheus_vector_tovectorstring" }, @@ -11135,7 +14438,7 @@ "file_type": "code", "source_file": "main/app/prometheus/vector.py", "source_location": "L59", - "community": 13, + "community": 104, "norm_label": "fromvectorstring()", "id": "prometheus_vector_fromvectorstring" }, @@ -11297,7 +14600,7 @@ "file_type": "code", "source_file": "main/service/prometheus_service.py", "source_location": "L1", - "community": 72, + "community": 536, "norm_label": "prometheus_service.py", "id": "main_service_prometheus_service_py" }, @@ -11306,7 +14609,7 @@ "file_type": "code", "source_file": "main/service/prometheus_service.py", "source_location": "L23", - "community": 570, + "community": 518, "norm_label": "memorymaintenance()", "id": "service_prometheus_service_memorymaintenance" }, @@ -11324,7 +14627,7 @@ "file_type": "code", "source_file": "main/service/prometheus_service.py", "source_location": "L67", - "community": 72, + "community": 536, "norm_label": "initialize()", "id": "service_prometheus_service_initialize" }, @@ -12044,7 +15347,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L450", - "community": 80, + "community": 53, "norm_label": "counttokenscached()", "id": "prometheus_memory_counttokenscached" }, @@ -12053,7 +15356,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/sync_cache.py", "source_location": "L13", - "community": 511, + "community": 82, "norm_label": "sync_cache()", "id": "stocks_api_sync_cache_sync_cache" }, @@ -12071,7 +15374,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L10", - "community": 12, + "community": 590, "norm_label": "ensurefastmcp()", "id": "prometheus_mcp_ensurefastmcp" }, @@ -12116,7 +15419,7 @@ "file_type": "code", "source_file": "main/app/prometheus/memory.py", "source_location": "L333", - "community": 13, + "community": 53, "norm_label": "searchasync()", "id": "prometheus_memory_searchasync" }, @@ -12143,7 +15446,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L50", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_50" }, @@ -12152,7 +15455,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L91", - "community": 487, + "community": 546, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis,", "id": "prometheus_tools_rationale_91" }, @@ -12161,7 +15464,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L112", - "community": 208, + "community": 573, "norm_label": "read a file from the workspace. args: path: path to the file (e.", "id": "prometheus_tools_rationale_112" }, @@ -12170,7 +15473,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L126", - "community": 529, + "community": 525, "norm_label": "write a file to the workspace. use this to save data files (csv, json, scri", "id": "prometheus_tools_rationale_126" }, @@ -12179,7 +15482,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L142", - "community": 523, + "community": 571, "norm_label": "list files in the workspace directory. args: path: directory pat", "id": "prometheus_tools_rationale_142" }, @@ -12188,7 +15491,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L155", - "community": 529, + "community": 525, "norm_label": "get a download link for a workspace file to share with the user. use this", "id": "prometheus_tools_rationale_155" }, @@ -12233,7 +15536,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L49", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_49" }, @@ -12242,7 +15545,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L90", - "community": 487, + "community": 546, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis,", "id": "prometheus_tools_rationale_90" }, @@ -12251,7 +15554,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L111", - "community": 208, + "community": 573, "norm_label": "read a file from the workspace. args: path: path to the file (e.", "id": "prometheus_tools_rationale_111" }, @@ -12260,7 +15563,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L125", - "community": 529, + "community": 525, "norm_label": "write a file to the workspace. use this to save data files (csv, json, scri", "id": "prometheus_tools_rationale_125" }, @@ -12278,7 +15581,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L154", - "community": 523, + "community": 525, "norm_label": "get a download link for a workspace file to share with the user. use this", "id": "prometheus_tools_rationale_154" }, @@ -12296,7 +15599,7 @@ "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L23", - "community": 169, + "community": 222, "norm_label": "jsonbytesresponse", "id": "controller_stocksapi_controller_jsonbytesresponse" }, @@ -12305,7 +15608,7 @@ "file_type": "code", "source_file": "", "source_location": "", - "community": 169, + "community": 222, "norm_label": "fastapiresponse", "id": "fastapiresponse" }, @@ -12314,55 +15617,10 @@ "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L26", - "community": 169, + "community": 222, "norm_label": ".render()", "id": "controller_stocksapi_controller_jsonbytesresponse_render" }, - { - "label": "Discover available field names before querying /historical or /fundamental.", - "file_type": "rationale", - "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L47", - "community": 54, - "norm_label": "discover available field names before querying /historical or /fundamental.", - "id": "controller_stocksapi_controller_rationale_47" - }, - { - "label": "Get year-based historical financial data for Brazilian B3 stocks. Returns", - "file_type": "rationale", - "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L103", - "community": 197, - "norm_label": "get year-based historical financial data for brazilian b3 stocks. returns", - "id": "controller_stocksapi_controller_rationale_103" - }, - { - "label": "Get point-in-time fundamental/valuation data for Brazilian B3 stocks. Ret", - "file_type": "rationale", - "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L168", - "community": 157, - "norm_label": "get point-in-time fundamental/valuation data for brazilian b3 stocks. ret", - "id": "controller_stocksapi_controller_rationale_168" - }, - { - "label": "Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur", - "file_type": "rationale", - "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L236", - "community": 169, - "norm_label": "get 10-year daily price history (cotation) for brazilian b3 stocks. retur", - "id": "controller_stocksapi_controller_rationale_236" - }, - { - "label": "Get real-time price quotation for a single Brazilian B3 stock. Returns th", - "file_type": "rationale", - "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L290", - "community": 81, - "norm_label": "get real-time price quotation for a single brazilian b3 stock. returns th", - "id": "controller_stocksapi_controller_rationale_290" - }, { "label": "Load historical/fundamental field names via STOCKS_API /fields endpoint, caching", "file_type": "rationale", @@ -12431,7 +15689,7 @@ "file_type": "code", "source_file": "bench/bench_memory_vector.py", "source_location": "L1", - "community": 13, + "community": 104, "norm_label": "bench_memory_vector.py", "id": "bench_bench_memory_vector_py" }, @@ -12440,7 +15698,7 @@ "file_type": "code", "source_file": "bench/bench_memory_vector.py", "source_location": "L14", - "community": 13, + "community": 104, "norm_label": "benchonce()", "id": "bench_bench_memory_vector_benchonce" }, @@ -12449,7 +15707,7 @@ "file_type": "code", "source_file": "bench/bench_memory_vector.py", "source_location": "L41", - "community": 13, + "community": 104, "norm_label": "main()", "id": "bench_bench_memory_vector_main" }, @@ -13151,7 +16409,7 @@ "file_type": "rationale", "source_file": "main/service/scraper_service.py", "source_location": "L23", - "community": 562, + "community": 586, "norm_label": "p5: register the scraper cron jobs on the shared scheduler. kept in this", "id": "service_scraper_service_rationale_23" }, @@ -14303,7 +17561,7 @@ "file_type": "code", "source_file": "main/service/prometheus_service.py", "source_location": "L60", - "community": 72, + "community": 536, "norm_label": "registermemorymaintenancejob()", "id": "service_prometheus_service_registermemorymaintenancejob" }, @@ -14312,7 +17570,7 @@ "file_type": "rationale", "source_file": "main/service/prometheus_service.py", "source_location": "L61", - "community": 72, + "community": 536, "norm_label": "p5: register memory maintenance on the shared scheduler. kept in this ser", "id": "service_prometheus_service_rationale_61" }, @@ -14348,7 +17606,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L36", - "community": 54, + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental.", "id": "controller_stocksapi_controller_rationale_36" }, @@ -14393,7 +17651,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L40", - "community": 54, + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental.", "id": "controller_stocksapi_controller_rationale_40" }, @@ -14474,7 +17732,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L89", - "community": 80, + "community": 608, "norm_label": "fieldregistry", "id": "prometheus_compact_fieldregistry" }, @@ -14483,7 +17741,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L94", - "community": 80, + "community": 608, "norm_label": ".buildurl()", "id": "prometheus_compact_fieldregistry_buildurl" }, @@ -14492,7 +17750,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L99", - "community": 80, + "community": 608, "norm_label": ".fetchfields()", "id": "prometheus_compact_fieldregistry_fetchfields" }, @@ -14501,7 +17759,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L120", - "community": 80, + "community": 608, "norm_label": ".getfields()", "id": "prometheus_compact_fieldregistry_getfields" }, @@ -14510,7 +17768,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L127", - "community": 80, + "community": 608, "norm_label": ".buildmetricregex()", "id": "prometheus_compact_fieldregistry_buildmetricregex" }, @@ -14519,7 +17777,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L134", - "community": 80, + "community": 608, "norm_label": ".getmetricregex()", "id": "prometheus_compact_fieldregistry_getmetricregex" }, @@ -14555,7 +17813,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L54", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_54" }, @@ -14564,7 +17822,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L92", - "community": 487, + "community": 546, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis,", "id": "prometheus_tools_rationale_92" }, @@ -14573,7 +17831,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L113", - "community": 208, + "community": 573, "norm_label": "read a file from the workspace. args: path: path to the file (e.", "id": "prometheus_tools_rationale_113" }, @@ -14582,7 +17840,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L127", - "community": 529, + "community": 525, "norm_label": "write a file to the workspace. use this to save data files (csv, json, scri", "id": "prometheus_tools_rationale_127" }, @@ -14591,7 +17849,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L143", - "community": 529, + "community": 525, "norm_label": "list files in the workspace directory. args: path: directory pat", "id": "prometheus_tools_rationale_143" }, @@ -14627,7 +17885,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L48", - "community": 54, + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental.", "id": "controller_stocksapi_controller_rationale_48" }, @@ -14672,7 +17930,7 @@ "file_type": "code", "source_file": "main/utils/service_manager.py", "source_location": "L15", - "community": 536, + "community": 140, "norm_label": "servicemanager", "id": "utils_service_manager_servicemanager" }, @@ -14703,15 +17961,6 @@ "norm_label": "_forward()", "id": "controller_prometheus_controller_forward" }, - { - "label": "Get point-in-time fundamental/valuation data for Brazilian B3 stocks. Ret", - "file_type": "rationale", - "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L167", - "community": 157, - "norm_label": "get point-in-time fundamental/valuation data for brazilian b3 stocks. ret", - "id": "controller_stocksapi_controller_rationale_167" - }, { "label": "Get 10-year daily price history (cotation) for Brazilian B3 stocks. Retur", "file_type": "rationale", @@ -14825,7 +18074,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L122", - "community": 529, + "community": 525, "norm_label": "write a file to the workspace. use this to save data files (csv, json, scri", "id": "prometheus_tools_rationale_122" }, @@ -14834,7 +18083,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L135", - "community": 208, + "community": 525, "norm_label": "list files in the workspace directory. args: path: directory pat", "id": "prometheus_tools_rationale_135" }, @@ -15041,7 +18290,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L139", - "community": 80, + "community": 608, "norm_label": ".invalidate()", "id": "prometheus_compact_fieldregistry_invalidate" }, @@ -15050,7 +18299,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L145", - "community": 80, + "community": 608, "norm_label": ".warmup()", "id": "prometheus_compact_fieldregistry_warmup" }, @@ -15113,7 +18362,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/key.py", "source_location": "L61", - "community": 500, + "community": 26, "norm_label": "createkey()", "id": "stocks_api_key_createkey" }, @@ -15131,7 +18380,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L24", - "community": 169, + "community": 222, "norm_label": "sends pre-serialized json bytes without re-encoding (cache-friendly).", "id": "controller_stocksapi_controller_rationale_24" }, @@ -15140,7 +18389,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L49", - "community": 54, + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental.", "id": "controller_stocksapi_controller_rationale_49" }, @@ -15185,7 +18434,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/response_cache.py", "source_location": "L1", - "community": 215, + "community": 596, "norm_label": "response_cache.py", "id": "main_app_stocks_api_response_cache_py" }, @@ -15194,7 +18443,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/response_cache.py", "source_location": "L19", - "community": 215, + "community": 596, "norm_label": "responsecache", "id": "stocks_api_response_cache_responsecache" }, @@ -15203,7 +18452,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/response_cache.py", "source_location": "L20", - "community": 215, + "community": 596, "norm_label": ".__init__()", "id": "stocks_api_response_cache_responsecache_init" }, @@ -15212,7 +18461,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/response_cache.py", "source_location": "L29", - "community": 215, + "community": 596, "norm_label": ".makekey()", "id": "stocks_api_response_cache_responsecache_makekey" }, @@ -15221,7 +18470,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/response_cache.py", "source_location": "L34", - "community": 215, + "community": 596, "norm_label": ".get()", "id": "stocks_api_response_cache_responsecache_get" }, @@ -15230,7 +18479,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/response_cache.py", "source_location": "L51", - "community": 215, + "community": 596, "norm_label": ".set()", "id": "stocks_api_response_cache_responsecache_set" }, @@ -15275,7 +18524,7 @@ "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L323", - "community": 500, + "community": 222, "norm_label": "generatekey()", "id": "controller_stocksapi_controller_generatekey" }, @@ -15284,7 +18533,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L30", - "community": 54, + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental.", "id": "controller_stocksapi_controller_rationale_30" }, @@ -16013,7 +19262,7 @@ "file_type": "code", "source_file": "main/app/prometheus/compact.py", "source_location": "L94", - "community": 80, + "community": 608, "norm_label": ".__new__()", "id": "prometheus_compact_fieldregistry_new" }, @@ -16022,7 +19271,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L38", - "community": 12, + "community": 590, "norm_label": ".__new__()", "id": "prometheus_mcp_mcpclientpool_new" }, @@ -16076,7 +19325,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L1", - "community": 574, + "community": 54, "norm_label": "compressor.py", "id": "main_app_stocks_api_compressor_py" }, @@ -16085,7 +19334,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L25", - "community": 574, + "community": 54, "norm_label": "getabbr()", "id": "stocks_api_compressor_getabbr" }, @@ -16094,7 +19343,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L36", - "community": 574, + "community": 54, "norm_label": "getnest()", "id": "stocks_api_compressor_getnest" }, @@ -16103,7 +19352,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L46", - "community": 574, + "community": 54, "norm_label": "rebuildabbrevs()", "id": "stocks_api_compressor_rebuildabbrevs" }, @@ -16112,7 +19361,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L51", - "community": 574, + "community": 54, "norm_label": "walk()", "id": "stocks_api_compressor_walk" }, @@ -16121,7 +19370,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L59", - "community": 574, + "community": 54, "norm_label": "compactvalue()", "id": "stocks_api_compressor_compactvalue" }, @@ -16130,7 +19379,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L80", - "community": 574, + "community": 54, "norm_label": "tocolumnar()", "id": "stocks_api_compressor_tocolumnar" }, @@ -16139,7 +19388,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L89", - "community": 574, + "community": 54, "norm_label": "fixheaders()", "id": "stocks_api_compressor_fixheaders" }, @@ -16148,7 +19397,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L98", - "community": 574, + "community": 54, "norm_label": "compactrow()", "id": "stocks_api_compressor_compactrow" }, @@ -16157,7 +19406,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L126", - "community": 574, + "community": 54, "norm_label": "compactcotations()", "id": "stocks_api_compressor_compactcotations" }, @@ -16166,7 +19415,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/compressor.py", "source_location": "L160", - "community": 574, + "community": 54, "norm_label": "compressresponse()", "id": "stocks_api_compressor_compressresponse" }, @@ -17048,7 +20297,7 @@ "file_type": "code", "source_file": "main/app/prometheus/state.py", "source_location": "L14", - "community": 215, + "community": 63, "norm_label": ".set()", "id": "prometheus_state_harnessstate_set" }, @@ -17102,7 +20351,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L89", - "community": 162, + "community": 16, "norm_label": "get_state()", "id": "prometheus_tools_get_state" }, @@ -17111,7 +20360,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L104", - "community": 487, + "community": 546, "norm_label": "set_state()", "id": "prometheus_tools_set_state" }, @@ -17120,7 +20369,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L105", - "community": 487, + "community": 546, "norm_label": "store a value in the harness state for this session. use this to save inter", "id": "prometheus_tools_rationale_105" }, @@ -17129,7 +20378,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L123", - "community": 487, + "community": 546, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis,", "id": "prometheus_tools_rationale_123" }, @@ -17138,7 +20387,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L144", - "community": 208, + "community": 525, "norm_label": "read a file from the workspace. args: path: path to the file (e.", "id": "prometheus_tools_rationale_144" }, @@ -17156,7 +20405,7 @@ "file_type": "code", "source_file": "main/app/prometheus/mcp.py", "source_location": "L16", - "community": 12, + "community": 590, "norm_label": "_parseservers()", "id": "prometheus_mcp_parseservers" }, @@ -17327,7 +20576,7 @@ "file_type": "code", "source_file": "main/utils/connectivity.py", "source_location": "L13", - "community": 541, + "community": 602, "norm_label": "checksingledb()", "id": "utils_connectivity_checksingledb" }, @@ -17435,7 +20684,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L27", - "community": 54, + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental.", "id": "controller_stocksapi_controller_rationale_27" }, @@ -18515,7 +21764,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L44", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_44" }, @@ -18524,7 +21773,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L81", - "community": 162, + "community": 16, "norm_label": "retrieve values from the harness state. use this to recall intermediate results,", "id": "prometheus_tools_rationale_81" }, @@ -18533,7 +21782,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L96", - "community": 487, + "community": 546, "norm_label": "store a value in the harness state for this session. use this to save inter", "id": "prometheus_tools_rationale_96" }, @@ -18542,7 +21791,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L114", - "community": 487, + "community": 546, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis,", "id": "prometheus_tools_rationale_114" }, @@ -18551,7 +21800,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L146", - "community": 529, + "community": 525, "norm_label": "write a file to the workspace. use this to save data files (csv, json, scri", "id": "prometheus_tools_rationale_146" }, @@ -19253,7 +22502,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/util.py", "source_location": "L27", - "community": 215, + "community": 596, "norm_label": "_parse_date()", "id": "stocks_api_util_parse_date" }, @@ -19262,7 +22511,7 @@ "file_type": "rationale", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L26", - "community": 54, + "community": 222, "norm_label": "discover available field names before querying /historical or /fundamental.", "id": "controller_stocksapi_controller_rationale_26" }, @@ -19469,7 +22718,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/util.py", "source_location": "L39", - "community": 215, + "community": 596, "norm_label": "parsedatestart()", "id": "stocks_api_util_parsedatestart" }, @@ -19478,7 +22727,7 @@ "file_type": "code", "source_file": "main/app/stocks_api/util.py", "source_location": "L43", - "community": 215, + "community": 596, "norm_label": "parsedateend()", "id": "stocks_api_util_parsedateend" }, @@ -24797,7 +28046,7 @@ "file_type": "code", "source_file": "tests/conftest.py", "source_location": "L81", - "community": 105, + "community": 251, "norm_label": "stocks_http_client()", "id": "tests_conftest_stocks_http_client" }, @@ -24806,7 +28055,7 @@ "file_type": "code", "source_file": "tests/conftest.py", "source_location": "L106", - "community": 105, + "community": 251, "norm_label": "client()", "id": "tests_conftest_client" }, @@ -24833,7 +28082,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L82", - "community": 105, + "community": 251, "norm_label": "testclient with stocks router + verifyapikey + getcurrentuser overrides.", "id": "tests_conftest_rationale_82" }, @@ -24842,7 +28091,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L107", - "community": 105, + "community": 251, "norm_label": "testclient with all routers mounted \u2014 no lifespan (no db/service init). o", "id": "tests_conftest_rationale_107" }, @@ -25166,7 +28415,7 @@ "file_type": "code", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L1", - "community": 26, + "community": 504, "norm_label": "test_api_key_quota_atomic.py", "id": "tests_test_api_key_quota_atomic_py" }, @@ -25175,7 +28424,7 @@ "file_type": "code", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L18", - "community": 26, + "community": 504, "norm_label": "samplekeydata()", "id": "tests_test_api_key_quota_atomic_samplekeydata" }, @@ -25229,7 +28478,7 @@ "file_type": "code", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L150", - "community": 26, + "community": 572, "norm_label": ".test_invalid_api_key_returns_zero_rows()", "id": "tests_test_api_key_quota_atomic_testatomicquotaincrement_test_invalid_api_key_returns_zero_rows" }, @@ -25238,7 +28487,7 @@ "file_type": "code", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L164", - "community": 26, + "community": 572, "norm_label": ".test_multiple_keys_independent_quotas()", "id": "tests_test_api_key_quota_atomic_testatomicquotaincrement_test_multiple_keys_independent_quotas" }, @@ -25310,7 +28559,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L1", - "community": 26, + "community": 504, "norm_label": "tests for atomic api key quota enforcement (race condition fix). verifies tha", "id": "tests_test_api_key_quota_atomic_rationale_1" }, @@ -25319,7 +28568,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L19", - "community": 26, + "community": 504, "norm_label": "sample api key data for tests.", "id": "tests_test_api_key_quota_atomic_rationale_19" }, @@ -25373,7 +28622,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L151", - "community": 26, + "community": 572, "norm_label": "test that invalid api key returns zero rows affected.", "id": "tests_test_api_key_quota_atomic_rationale_151" }, @@ -25382,7 +28631,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L165", - "community": 26, + "community": 572, "norm_label": "test that multiple api keys have independent quotas.", "id": "tests_test_api_key_quota_atomic_rationale_165" }, @@ -25454,7 +28703,7 @@ "file_type": "code", "source_file": "tests/test_auth_util.py", "source_location": "L1", - "community": 43, + "community": 606, "norm_label": "test_auth_util.py", "id": "tests_test_auth_util_py" }, @@ -25553,7 +28802,7 @@ "file_type": "code", "source_file": "tests/test_auth_util.py", "source_location": "L69", - "community": 43, + "community": 606, "norm_label": "testsessionexpiryconfig", "id": "tests_test_auth_util_testsessionexpiryconfig" }, @@ -25562,7 +28811,7 @@ "file_type": "code", "source_file": "tests/test_auth_util.py", "source_location": "L70", - "community": 43, + "community": 606, "norm_label": ".test_session_expiry_days_is_30()", "id": "tests_test_auth_util_testsessionexpiryconfig_test_session_expiry_days_is_30" }, @@ -25571,7 +28820,7 @@ "file_type": "code", "source_file": "tests/test_auth_util.py", "source_location": "L73", - "community": 43, + "community": 606, "norm_label": ".test_session_expiry_hours_calculation()", "id": "tests_test_auth_util_testsessionexpiryconfig_test_session_expiry_hours_calculation" }, @@ -25580,7 +28829,7 @@ "file_type": "code", "source_file": "tests/test_auth_util.py", "source_location": "L78", - "community": 43, + "community": 606, "norm_label": ".test_default_token_expiry_equals_30_days()", "id": "tests_test_auth_util_testsessionexpiryconfig_test_default_token_expiry_equals_30_days" }, @@ -25643,7 +28892,7 @@ "file_type": "code", "source_file": "tests/test_config.py", "source_location": "L1", - "community": 251, + "community": 102, "norm_label": "test_config.py", "id": "tests_test_config_py" }, @@ -25706,7 +28955,7 @@ "file_type": "code", "source_file": "tests/test_connectivity_coverage.py", "source_location": "L8", - "community": 596, + "community": 618, "norm_label": "testcheckmysqlconnection", "id": "tests_test_connectivity_coverage_testcheckmysqlconnection" }, @@ -25796,7 +29045,7 @@ "file_type": "code", "source_file": "tests/test_connectivity_coverage.py", "source_location": "L114", - "community": 595, + "community": 617, "norm_label": "testcheckserviceconnection", "id": "tests_test_connectivity_coverage_testcheckserviceconnection" }, @@ -25886,7 +29135,7 @@ "file_type": "rationale", "source_file": "tests/test_connectivity_coverage.py", "source_location": "L9", - "community": 596, + "community": 618, "norm_label": "checkmysqlconnection \u2014 success, errors, engine=none paths.", "id": "tests_test_connectivity_coverage_rationale_9" }, @@ -25895,7 +29144,7 @@ "file_type": "rationale", "source_file": "tests/test_connectivity_coverage.py", "source_location": "L115", - "community": 595, + "community": 617, "norm_label": "checkserviceconnection \u2014 success, not found, errors.", "id": "tests_test_connectivity_coverage_rationale_115" }, @@ -25931,7 +29180,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L57", - "community": 99, + "community": 120, "norm_label": "_make_prometheus_client()", "id": "tests_test_controllers_coverage_make_prometheus_client" }, @@ -25985,7 +29234,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L130", - "community": 45, + "community": 491, "norm_label": "testhealthendpoint", "id": "tests_test_controllers_coverage_testhealthendpoint" }, @@ -25994,7 +29243,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L133", - "community": 45, + "community": 491, "norm_label": ".test_health_returns_ok()", "id": "tests_test_controllers_coverage_testhealthendpoint_test_health_returns_ok" }, @@ -26138,7 +29387,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L344", - "community": 45, + "community": 491, "norm_label": "testgooglelogin", "id": "tests_test_controllers_coverage_testgooglelogin" }, @@ -26219,7 +29468,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L527", - "community": 498, + "community": 45, "norm_label": "testuserhealth", "id": "tests_test_controllers_coverage_testuserhealth" }, @@ -26228,7 +29477,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L530", - "community": 498, + "community": 45, "norm_label": ".test_health()", "id": "tests_test_controllers_coverage_testuserhealth_test_health" }, @@ -26327,7 +29576,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L614", - "community": 178, + "community": 541, "norm_label": "testgetsessions", "id": "tests_test_controllers_coverage_testgetsessions" }, @@ -26336,7 +29585,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L617", - "community": 178, + "community": 541, "norm_label": ".test_get_sessions()", "id": "tests_test_controllers_coverage_testgetsessions_test_get_sessions" }, @@ -26372,7 +29621,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L727", - "community": 104, + "community": 136, "norm_label": "testrevokesession", "id": "tests_test_controllers_coverage_testrevokesession" }, @@ -26381,7 +29630,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L730", - "community": 104, + "community": 136, "norm_label": ".test_revoke_session_success()", "id": "tests_test_controllers_coverage_testrevokesession_test_revoke_session_success" }, @@ -26390,7 +29639,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L757", - "community": 104, + "community": 136, "norm_label": ".test_revoke_session_not_found()", "id": "tests_test_controllers_coverage_testrevokesession_test_revoke_session_not_found" }, @@ -26399,7 +29648,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L779", - "community": 104, + "community": 136, "norm_label": ".test_revoke_session_failure()", "id": "tests_test_controllers_coverage_testrevokesession_test_revoke_session_failure" }, @@ -26426,7 +29675,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L835", - "community": 498, + "community": 610, "norm_label": "testprometheushealth", "id": "tests_test_controllers_coverage_testprometheushealth" }, @@ -26435,7 +29684,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L838", - "community": 498, + "community": 610, "norm_label": ".test_health()", "id": "tests_test_controllers_coverage_testprometheushealth_test_health" }, @@ -26444,7 +29693,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L849", - "community": 99, + "community": 45, "norm_label": "testprometheusgetsessions", "id": "tests_test_controllers_coverage_testprometheusgetsessions" }, @@ -26453,7 +29702,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L852", - "community": 99, + "community": 45, "norm_label": ".test_get_sessions()", "id": "tests_test_controllers_coverage_testprometheusgetsessions_test_get_sessions" }, @@ -26462,7 +29711,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L867", - "community": 99, + "community": 45, "norm_label": "testprometheuscreatesession", "id": "tests_test_controllers_coverage_testprometheuscreatesession" }, @@ -26471,7 +29720,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L870", - "community": 99, + "community": 45, "norm_label": ".test_create_session()", "id": "tests_test_controllers_coverage_testprometheuscreatesession_test_create_session" }, @@ -26516,7 +29765,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L915", - "community": 104, + "community": 256, "norm_label": "testprometheusgethistory", "id": "tests_test_controllers_coverage_testprometheusgethistory" }, @@ -26525,7 +29774,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L918", - "community": 104, + "community": 256, "norm_label": ".test_get_history_found()", "id": "tests_test_controllers_coverage_testprometheusgethistory_test_get_history_found" }, @@ -26534,7 +29783,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L962", - "community": 104, + "community": 256, "norm_label": ".test_get_history_not_found()", "id": "tests_test_controllers_coverage_testprometheusgethistory_test_get_history_not_found" }, @@ -26543,7 +29792,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L997", - "community": 231, + "community": 584, "norm_label": "testprometheusdeletesession", "id": "tests_test_controllers_coverage_testprometheusdeletesession" }, @@ -26552,7 +29801,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1000", - "community": 231, + "community": 584, "norm_label": ".test_delete_session_success()", "id": "tests_test_controllers_coverage_testprometheusdeletesession_test_delete_session_success" }, @@ -26561,7 +29810,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1010", - "community": 231, + "community": 584, "norm_label": ".test_delete_session_not_found()", "id": "tests_test_controllers_coverage_testprometheusdeletesession_test_delete_session_not_found" }, @@ -26570,7 +29819,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1020", - "community": 16, + "community": 148, "norm_label": "testprometheuschat", "id": "tests_test_controllers_coverage_testprometheuschat" }, @@ -26579,7 +29828,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1023", - "community": 16, + "community": 148, "norm_label": ".test_chat_new_session()", "id": "tests_test_controllers_coverage_testprometheuschat_test_chat_new_session" }, @@ -26588,7 +29837,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1042", - "community": 16, + "community": 148, "norm_label": ".test_chat_existing_session_verified()", "id": "tests_test_controllers_coverage_testprometheuschat_test_chat_existing_session_verified" }, @@ -26597,7 +29846,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1085", - "community": 16, + "community": 148, "norm_label": ".test_chat_existing_session_not_owner()", "id": "tests_test_controllers_coverage_testprometheuschat_test_chat_existing_session_not_owner" }, @@ -26606,7 +29855,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1121", - "community": 16, + "community": 148, "norm_label": ".test_chat_generic_exception()", "id": "tests_test_controllers_coverage_testprometheuschat_test_chat_generic_exception" }, @@ -26615,7 +29864,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1144", - "community": 498, + "community": 511, "norm_label": "teststocksapihealth", "id": "tests_test_controllers_coverage_teststocksapihealth" }, @@ -26624,7 +29873,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1147", - "community": 498, + "community": 511, "norm_label": ".test_health()", "id": "tests_test_controllers_coverage_teststocksapihealth_test_health" }, @@ -26687,7 +29936,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1202", - "community": 14, + "community": 609, "norm_label": ".test_generate_key_admin_bypasses_permission_check()", "id": "tests_test_controllers_coverage_teststocksapigeneratekey_test_generate_key_admin_bypasses_permission_check" }, @@ -26696,7 +29945,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1214", - "community": 14, + "community": 609, "norm_label": ".test_generate_key_exception()", "id": "tests_test_controllers_coverage_teststocksapigeneratekey_test_generate_key_exception" }, @@ -26705,7 +29954,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1229", - "community": 563, + "community": 568, "norm_label": "testaddroletouser", "id": "tests_test_controllers_coverage_testaddroletouser" }, @@ -26714,7 +29963,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1232", - "community": 564, + "community": 568, "norm_label": ".test_add_role_success()", "id": "tests_test_controllers_coverage_testaddroletouser_test_add_role_success" }, @@ -26723,7 +29972,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1249", - "community": 568, + "community": 588, "norm_label": ".test_add_role_already_has_role()", "id": "tests_test_controllers_coverage_testaddroletouser_test_add_role_already_has_role" }, @@ -26732,7 +29981,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1263", - "community": 528, + "community": 568, "norm_label": ".test_add_role_user_not_found()", "id": "tests_test_controllers_coverage_testaddroletouser_test_add_role_user_not_found" }, @@ -26759,7 +30008,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1282", - "community": 493, + "community": 578, "norm_label": ".test_get_current_user_valid_session()", "id": "tests_test_controllers_coverage_testgetcurrentuser_test_get_current_user_valid_session" }, @@ -26768,7 +30017,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1307", - "community": 569, + "community": 592, "norm_label": ".test_get_current_user_session_revoked()", "id": "tests_test_controllers_coverage_testgetcurrentuser_test_get_current_user_session_revoked" }, @@ -26777,7 +30026,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1323", - "community": 546, + "community": 493, "norm_label": ".test_get_current_user_not_found()", "id": "tests_test_controllers_coverage_testgetcurrentuser_test_get_current_user_not_found" }, @@ -26786,7 +30035,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1340", - "community": 560, + "community": 544, "norm_label": ".test_get_current_user_generic_exception()", "id": "tests_test_controllers_coverage_testgetcurrentuser_test_get_current_user_generic_exception" }, @@ -26795,7 +30044,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1357", - "community": 561, + "community": 560, "norm_label": ".test_get_current_user_no_session_id()", "id": "tests_test_controllers_coverage_testgetcurrentuser_test_get_current_user_no_session_id" }, @@ -26867,7 +30116,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1441", - "community": 498, + "community": 45, "norm_label": "testmanagerinit", "id": "tests_test_controllers_coverage_testmanagerinit" }, @@ -26876,7 +30125,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1444", - "community": 498, + "community": 45, "norm_label": ".test_manager_init()", "id": "tests_test_controllers_coverage_testmanagerinit_test_manager_init" }, @@ -26912,7 +30161,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L58", - "community": 99, + "community": 120, "norm_label": "return (client, app) with prometheus router and mocked deps.", "id": "tests_test_controllers_coverage_rationale_58" }, @@ -26939,7 +30188,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L131", - "community": 45, + "community": 491, "norm_label": "covers line 28: get /auth/health.", "id": "tests_test_controllers_coverage_rationale_131" }, @@ -27083,7 +30332,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L345", - "community": 45, + "community": 491, "norm_label": "covers lines 139, 141-149: googlelogin endpoint.", "id": "tests_test_controllers_coverage_rationale_345" }, @@ -27164,7 +30413,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L528", - "community": 498, + "community": 45, "norm_label": "covers line 19: get /user/health.", "id": "tests_test_controllers_coverage_rationale_528" }, @@ -27200,7 +30449,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L615", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: get /user/sessions.", "id": "tests_test_controllers_coverage_rationale_615" }, @@ -27209,7 +30458,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L618", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: full sessions listing.", "id": "tests_test_controllers_coverage_rationale_618" }, @@ -27245,7 +30494,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L728", - "community": 104, + "community": 136, "norm_label": "covers lines 126-136: delete /user/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_728" }, @@ -27254,7 +30503,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L731", - "community": 104, + "community": 136, "norm_label": "covers lines 126, 131, 135-136.", "id": "tests_test_controllers_coverage_rationale_731" }, @@ -27263,7 +30512,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L758", - "community": 104, + "community": 136, "norm_label": "covers lines 127-129: session not found.", "id": "tests_test_controllers_coverage_rationale_758" }, @@ -27272,7 +30521,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L780", - "community": 104, + "community": 136, "norm_label": "covers lines 132-133: revokesession returns false.", "id": "tests_test_controllers_coverage_rationale_780" }, @@ -27299,7 +30548,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L836", - "community": 498, + "community": 610, "norm_label": "covers line 24: get /prometheus/health.", "id": "tests_test_controllers_coverage_rationale_836" }, @@ -27308,7 +30557,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L850", - "community": 99, + "community": 45, "norm_label": "covers lines 33-36: get /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_850" }, @@ -27317,7 +30566,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L868", - "community": 99, + "community": 45, "norm_label": "covers line 52: post /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_868" }, @@ -27362,7 +30611,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L916", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 83-84, 86: get /prometheus/history/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_916" }, @@ -27371,7 +30620,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L919", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 86: session found with history.", "id": "tests_test_controllers_coverage_rationale_919" }, @@ -27380,7 +30629,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L963", - "community": 104, + "community": 256, "norm_label": "covers lines 83-84: session not found.", "id": "tests_test_controllers_coverage_rationale_963" }, @@ -27389,7 +30638,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L998", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: delete /prometheus/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_998" }, @@ -27398,7 +30647,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1001", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: session deleted.", "id": "tests_test_controllers_coverage_rationale_1001" }, @@ -27407,7 +30656,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1011", - "community": 231, + "community": 584, "norm_label": "covers lines 96-97: session not found.", "id": "tests_test_controllers_coverage_rationale_1011" }, @@ -27416,7 +30665,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1021", - "community": 16, + "community": 148, "norm_label": "covers lines 109-136: post /prometheus/chat/stream (sse).", "id": "tests_test_controllers_coverage_rationale_1021" }, @@ -27425,7 +30674,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1024", - "community": 16, + "community": 148, "norm_label": "covers lines 118-119: sessionid is none, new session created.", "id": "tests_test_controllers_coverage_rationale_1024" }, @@ -27434,7 +30683,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1043", - "community": 16, + "community": 148, "norm_label": "covers lines 120-121: existing session with verified ownership.", "id": "tests_test_controllers_coverage_rationale_1043" }, @@ -27443,7 +30692,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1086", - "community": 16, + "community": 148, "norm_label": "covers lines 120-121: session ownership check fails.", "id": "tests_test_controllers_coverage_rationale_1086" }, @@ -27452,7 +30701,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1122", - "community": 16, + "community": 148, "norm_label": "generic exception in chat propagates via sse error event.", "id": "tests_test_controllers_coverage_rationale_1122" }, @@ -27461,7 +30710,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1145", - "community": 498, + "community": 511, "norm_label": "covers line 18: get /stocks/health.", "id": "tests_test_controllers_coverage_rationale_1145" }, @@ -27506,7 +30755,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1203", - "community": 14, + "community": 609, "norm_label": "covers lines 57-60: admin bypasses permission check and generates key.", "id": "tests_test_controllers_coverage_rationale_1203" }, @@ -27515,7 +30764,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1215", - "community": 14, + "community": 609, "norm_label": "covers lines 61-63: exception during key generation (admin path).", "id": "tests_test_controllers_coverage_rationale_1215" }, @@ -27524,7 +30773,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1230", - "community": 563, + "community": 568, "norm_label": "covers lines 13, 17, 19-20, 22-27: usermanager.addroletouser.", "id": "tests_test_controllers_coverage_rationale_1230" }, @@ -27533,7 +30782,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1233", - "community": 564, + "community": 568, "norm_label": "covers lines 17, 22-27: user found, role not present, role added.", "id": "tests_test_controllers_coverage_rationale_1233" }, @@ -27542,7 +30791,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1250", - "community": 568, + "community": 588, "norm_label": "covers line 27: user already has the role.", "id": "tests_test_controllers_coverage_rationale_1250" }, @@ -27551,7 +30800,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1264", - "community": 528, + "community": 568, "norm_label": "covers lines 19-20: user not found raises 404.", "id": "tests_test_controllers_coverage_rationale_1264" }, @@ -27560,7 +30809,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1276", - "community": 493, + "community": 578, "norm_label": "covers lines 34, 36-38, 40-44, 46, 48-49, 51, 58-59, 61, 63-67: usermanager.getc", "id": "tests_test_controllers_coverage_rationale_1276" }, @@ -27569,7 +30818,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1283", - "community": 493, + "community": 578, "norm_label": "covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval.", "id": "tests_test_controllers_coverage_rationale_1283" }, @@ -27578,7 +30827,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1308", - "community": 569, + "community": 592, "norm_label": "covers lines 42-44: session validation fails.", "id": "tests_test_controllers_coverage_rationale_1308" }, @@ -27587,7 +30836,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1324", - "community": 546, + "community": 493, "norm_label": "covers lines 48-49: user not in db.", "id": "tests_test_controllers_coverage_rationale_1324" }, @@ -27596,7 +30845,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1341", - "community": 560, + "community": 544, "norm_label": "covers lines 65-67: unexpected exception.", "id": "tests_test_controllers_coverage_rationale_1341" }, @@ -27605,7 +30854,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1358", - "community": 561, + "community": 560, "norm_label": "covers lines 37-38, 46, 51, 58 (sessionid is none): skips session validation.", "id": "tests_test_controllers_coverage_rationale_1358" }, @@ -27614,7 +30863,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1382", - "community": 45, + "community": 524, "norm_label": "covers line 16: empty password raises valueerror.", "id": "tests_test_controllers_coverage_rationale_1382" }, @@ -27668,7 +30917,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1442", - "community": 498, + "community": 45, "norm_label": "covers line 13: usermanager.__init__.", "id": "tests_test_controllers_coverage_rationale_1442" }, @@ -28244,7 +31493,7 @@ "file_type": "code", "source_file": "tests/test_error_handlers.py", "source_location": "L25", - "community": 104, + "community": 33, "norm_label": "app()", "id": "tests_test_error_handlers_app" }, @@ -28532,7 +31781,7 @@ "file_type": "code", "source_file": "tests/test_harness_state.py", "source_location": "L1", - "community": 251, + "community": 93, "norm_label": "test_harness_state.py", "id": "tests_test_harness_state_py" }, @@ -28640,7 +31889,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L1", - "community": 186, + "community": 611, "norm_label": "test_http_session_coverage.py", "id": "tests_test_http_session_coverage_py" }, @@ -28649,7 +31898,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L8", - "community": 186, + "community": 611, "norm_label": "testgetsession", "id": "tests_test_http_session_coverage_testgetsession" }, @@ -28658,7 +31907,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L9", - "community": 186, + "community": 611, "norm_label": ".test_returns_same_session()", "id": "tests_test_http_session_coverage_testgetsession_test_returns_same_session" }, @@ -28667,7 +31916,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L16", - "community": 186, + "community": 611, "norm_label": ".test_returns_requests_session()", "id": "tests_test_http_session_coverage_testgetsession_test_returns_requests_session" }, @@ -28676,7 +31925,7 @@ "file_type": "rationale", "source_file": "tests/test_http_session_coverage.py", "source_location": "L1", - "community": 186, + "community": 611, "norm_label": "tests for main/utils/http_session.py \u2014 covers all branches.", "id": "tests_test_http_session_coverage_rationale_1" }, @@ -28982,7 +32231,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L1", - "community": 188, + "community": 599, "norm_label": "test_logging_config_coverage.py", "id": "tests_test_logging_config_coverage_py" }, @@ -28991,7 +32240,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L8", - "community": 188, + "community": 599, "norm_label": "testdiscordhandleremit", "id": "tests_test_logging_config_coverage_testdiscordhandleremit" }, @@ -29000,7 +32249,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L9", - "community": 188, + "community": 599, "norm_label": "._make_handler()", "id": "tests_test_logging_config_coverage_testdiscordhandleremit_make_handler" }, @@ -29009,7 +32258,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L14", - "community": 188, + "community": 599, "norm_label": "._make_record()", "id": "tests_test_logging_config_coverage_testdiscordhandleremit_make_record" }, @@ -29018,7 +32267,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L27", - "community": 188, + "community": 599, "norm_label": "test_discord_disabled()", "id": "tests_test_logging_config_coverage_test_discord_disabled" }, @@ -29027,7 +32276,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L35", - "community": 188, + "community": 599, "norm_label": "test_discord_no_webhook()", "id": "tests_test_logging_config_coverage_test_discord_no_webhook" }, @@ -29036,7 +32285,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L43", - "community": 188, + "community": 599, "norm_label": "test_level_below_error()", "id": "tests_test_logging_config_coverage_test_level_below_error" }, @@ -29045,7 +32294,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L52", - "community": 188, + "community": 599, "norm_label": "test_submit_called_on_error()", "id": "tests_test_logging_config_coverage_test_submit_called_on_error" }, @@ -29054,7 +32303,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L62", - "community": 188, + "community": 599, "norm_label": "test_message_truncation()", "id": "tests_test_logging_config_coverage_test_message_truncation" }, @@ -29063,7 +32312,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L77", - "community": 188, + "community": 599, "norm_label": "test_exception_in_submit()", "id": "tests_test_logging_config_coverage_test_exception_in_submit" }, @@ -29072,7 +32321,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L88", - "community": 188, + "community": 599, "norm_label": "test_with_exception_info()", "id": "tests_test_logging_config_coverage_test_with_exception_info" }, @@ -29081,7 +32330,7 @@ "file_type": "code", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L103", - "community": 188, + "community": 122, "norm_label": "testsetuplogging", "id": "tests_test_logging_config_coverage_testsetuplogging" }, @@ -29108,7 +32357,7 @@ "file_type": "rationale", "source_file": "tests/test_logging_config_coverage.py", "source_location": "L1", - "community": 188, + "community": 599, "norm_label": "tests for main/utils/logging_config.py \u2014 covers discordhandler branches.", "id": "tests_test_logging_config_coverage_rationale_1" }, @@ -29126,7 +32375,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L8", - "community": 140, + "community": 474, "norm_label": "_create_memory()", "id": "tests_test_memory_dedup_create_memory" }, @@ -29135,7 +32384,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L12", - "community": 140, + "community": 474, "norm_label": "_count_memories()", "id": "tests_test_memory_dedup_count_memories" }, @@ -29144,7 +32393,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L20", - "community": 140, + "community": 474, "norm_label": "_get_memory()", "id": "tests_test_memory_dedup_get_memory" }, @@ -29162,7 +32411,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L29", - "community": 140, + "community": 474, "norm_label": ".test_exact_same_key_updates()", "id": "tests_test_memory_dedup_testexactsamekeyupdates_test_exact_same_key_updates" }, @@ -29180,7 +32429,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L37", - "community": 140, + "community": 474, "norm_label": ".test_similar_key_merges()", "id": "tests_test_memory_dedup_testsimilarkeymerges_test_similar_key_merges" }, @@ -29198,7 +32447,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L47", - "community": 140, + "community": 474, "norm_label": ".test_different_keys_no_merge()", "id": "tests_test_memory_dedup_testdifferentkeysnomerge_test_different_keys_no_merge" }, @@ -29216,7 +32465,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L56", - "community": 140, + "community": 474, "norm_label": ".test_merge_boosts_score()", "id": "tests_test_memory_dedup_testmergeboostsscore_test_merge_boosts_score" }, @@ -29234,7 +32483,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L65", - "community": 140, + "community": 474, "norm_label": ".test_merge_increments_access()", "id": "tests_test_memory_dedup_testmergeincrementsaccess_test_merge_increments_access" }, @@ -29252,7 +32501,7 @@ "file_type": "code", "source_file": "tests/test_memory_dedup.py", "source_location": "L74", - "community": 140, + "community": 474, "norm_label": ".test_threshold_boundary()", "id": "tests_test_memory_dedup_testthresholdboundary_test_threshold_boundary" }, @@ -29261,7 +32510,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L38", - "community": 140, + "community": 474, "norm_label": "keys with jaccard > 0.8 should merge.", "id": "tests_test_memory_dedup_rationale_38" }, @@ -29270,7 +32519,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L48", - "community": 140, + "community": 474, "norm_label": "keys with low similarity should not merge.", "id": "tests_test_memory_dedup_rationale_48" }, @@ -29279,7 +32528,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L75", - "community": 140, + "community": 474, "norm_label": "keys with jaccard <= 0.8 should not merge.", "id": "tests_test_memory_dedup_rationale_75" }, @@ -29378,7 +32627,7 @@ "file_type": "code", "source_file": "tests/test_memory_maintenance.py", "source_location": "L85", - "community": 544, + "community": 518, "norm_label": ".test_dead_memory_archived()", "id": "tests_test_memory_maintenance_testarchive_test_dead_memory_archived" }, @@ -29387,7 +32636,7 @@ "file_type": "code", "source_file": "tests/test_memory_maintenance.py", "source_location": "L92", - "community": 573, + "community": 518, "norm_label": ".test_low_score_but_recent_not_archived()", "id": "tests_test_memory_maintenance_testarchive_test_low_score_but_recent_not_archived" }, @@ -29396,7 +32645,7 @@ "file_type": "code", "source_file": "tests/test_memory_maintenance.py", "source_location": "L99", - "community": 539, + "community": 518, "norm_label": ".test_zero_access_but_high_score_not_archived()", "id": "tests_test_memory_maintenance_testarchive_test_zero_access_but_high_score_not_archived" }, @@ -29405,7 +32654,7 @@ "file_type": "code", "source_file": "tests/test_memory_maintenance.py", "source_location": "L106", - "community": 570, + "community": 518, "norm_label": ".test_accessed_memory_not_archived()", "id": "tests_test_memory_maintenance_testarchive_test_accessed_memory_not_archived" }, @@ -29414,7 +32663,7 @@ "file_type": "code", "source_file": "tests/test_memory_maintenance.py", "source_location": "L113", - "community": 570, + "community": 518, "norm_label": ".test_already_archived_not_double_archived()", "id": "tests_test_memory_maintenance_testarchive_test_already_archived_not_double_archived" }, @@ -29495,7 +32744,7 @@ "file_type": "code", "source_file": "tests/test_memory_maintenance.py", "source_location": "L171", - "community": 570, + "community": 518, "norm_label": ".test_no_memories_does_not_crash()", "id": "tests_test_memory_maintenance_testemptydatabase_test_no_memories_does_not_crash" }, @@ -29531,7 +32780,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L86", - "community": 544, + "community": 518, "norm_label": "score below threshold + accesscount=0 + 90+ days \u2192 archived.", "id": "tests_test_memory_maintenance_rationale_86" }, @@ -29540,7 +32789,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L93", - "community": 573, + "community": 518, "norm_label": "low score but accessed recently \u2192 not archived.", "id": "tests_test_memory_maintenance_rationale_93" }, @@ -29549,7 +32798,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L100", - "community": 539, + "community": 518, "norm_label": "zero access but score still above threshold \u2192 not archived.", "id": "tests_test_memory_maintenance_rationale_100" }, @@ -29558,7 +32807,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L107", - "community": 570, + "community": 518, "norm_label": "even with low score, if accessed \u2192 not archived.", "id": "tests_test_memory_maintenance_rationale_107" }, @@ -29567,7 +32816,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L114", - "community": 570, + "community": 518, "norm_label": "already archived memories are skipped.", "id": "tests_test_memory_maintenance_rationale_114" }, @@ -29846,7 +33095,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L23", - "community": 584, + "community": 561, "norm_label": "testmemorytoolfunctions", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions" }, @@ -29855,7 +33104,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L26", - "community": 584, + "community": 561, "norm_label": ".test_search_memory_has_docstring()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_search_memory_has_docstring" }, @@ -29864,7 +33113,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L30", - "community": 584, + "community": 561, "norm_label": ".test_save_memory_has_docstring()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_save_memory_has_docstring" }, @@ -29873,7 +33122,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L34", - "community": 584, + "community": 561, "norm_label": ".test_search_memory_signature()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_search_memory_signature" }, @@ -29882,7 +33131,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L39", - "community": 584, + "community": 561, "norm_label": ".test_save_memory_signature()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_save_memory_signature" }, @@ -29891,7 +33140,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L46", - "community": 584, + "community": 561, "norm_label": ".test_search_memory_has_type_hints()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_search_memory_has_type_hints" }, @@ -29900,7 +33149,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L50", - "community": 584, + "community": 561, "norm_label": ".test_save_memory_has_type_hints()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_save_memory_has_type_hints" }, @@ -29909,7 +33158,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L54", - "community": 584, + "community": 561, "norm_label": ".test_memory_tools_is_list_of_callables()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_memory_tools_is_list_of_callables" }, @@ -29918,7 +33167,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L60", - "community": 215, + "community": 561, "norm_label": ".test_memory_tool_names_unchanged()", "id": "tests_test_memory_tools_wiring_testmemorytoolfunctions_test_memory_tool_names_unchanged" }, @@ -29927,7 +33176,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L64", - "community": 215, + "community": 614, "norm_label": "testtoolregistry", "id": "tests_test_memory_tools_wiring_testtoolregistry" }, @@ -29936,7 +33185,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L67", - "community": 215, + "community": 614, "norm_label": ".test_registry_contains_memory_tools()", "id": "tests_test_memory_tools_wiring_testtoolregistry_test_registry_contains_memory_tools" }, @@ -29945,7 +33194,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L71", - "community": 215, + "community": 614, "norm_label": ".test_registry_values_are_callable()", "id": "tests_test_memory_tools_wiring_testtoolregistry_test_registry_values_are_callable" }, @@ -29954,7 +33203,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L75", - "community": 215, + "community": 614, "norm_label": ".test_registry_matches_tool_names()", "id": "tests_test_memory_tools_wiring_testtoolregistry_test_registry_matches_tool_names" }, @@ -29963,7 +33212,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L79", - "community": 49, + "community": 589, "norm_label": "testmakechatincludesmemorytools", "id": "tests_test_memory_tools_wiring_testmakechatincludesmemorytools" }, @@ -29981,7 +33230,7 @@ "file_type": "code", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L112", - "community": 575, + "community": 589, "norm_label": "testdispatchroutesmemorytools", "id": "tests_test_memory_tools_wiring_testdispatchroutesmemorytools" }, @@ -30026,7 +33275,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L24", - "community": 584, + "community": 561, "norm_label": "verify the actual async tool functions have correct signatures.", "id": "tests_test_memory_tools_wiring_rationale_24" }, @@ -30035,7 +33284,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L65", - "community": 215, + "community": 614, "norm_label": "tool_registry pattern must work correctly.", "id": "tests_test_memory_tools_wiring_rationale_65" }, @@ -30044,7 +33293,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L80", - "community": 49, + "community": 589, "norm_label": "makechat must include memory_tools alongside mcp sessions.", "id": "tests_test_memory_tools_wiring_rationale_80" }, @@ -30053,7 +33302,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L113", - "community": 575, + "community": 589, "norm_label": "dispatchtoolcall must route memory tool names via tool_registry.", "id": "tests_test_memory_tools_wiring_rationale_113" }, @@ -30638,7 +33887,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L39", - "community": 504, + "community": 186, "norm_label": "testinlinepagination", "id": "tests_test_pagination_testinlinepagination" }, @@ -30647,7 +33896,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L40", - "community": 504, + "community": 186, "norm_label": ".test_defaults()", "id": "tests_test_pagination_testinlinepagination_test_defaults" }, @@ -30656,7 +33905,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L48", - "community": 504, + "community": 186, "norm_label": ".test_custom_limit()", "id": "tests_test_pagination_testinlinepagination_test_custom_limit" }, @@ -30665,7 +33914,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L54", - "community": 504, + "community": 186, "norm_label": ".test_custom_offset()", "id": "tests_test_pagination_testinlinepagination_test_custom_offset" }, @@ -30674,7 +33923,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L61", - "community": 504, + "community": 186, "norm_label": ".test_limit_and_offset()", "id": "tests_test_pagination_testinlinepagination_test_limit_and_offset" }, @@ -30683,7 +33932,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L69", - "community": 504, + "community": 186, "norm_label": ".test_limit_exceeds_max_rejected()", "id": "tests_test_pagination_testinlinepagination_test_limit_exceeds_max_rejected" }, @@ -30692,7 +33941,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L73", - "community": 504, + "community": 186, "norm_label": ".test_limit_zero_rejected()", "id": "tests_test_pagination_testinlinepagination_test_limit_zero_rejected" }, @@ -30701,7 +33950,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L77", - "community": 504, + "community": 186, "norm_label": ".test_negative_offset_rejected()", "id": "tests_test_pagination_testinlinepagination_test_negative_offset_rejected" }, @@ -30710,7 +33959,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L81", - "community": 504, + "community": 186, "norm_label": ".test_offset_beyond_total()", "id": "tests_test_pagination_testinlinepagination_test_offset_beyond_total" }, @@ -30719,7 +33968,7 @@ "file_type": "code", "source_file": "tests/test_pagination.py", "source_location": "L86", - "community": 504, + "community": 186, "norm_label": ".test_limit_equals_max()", "id": "tests_test_pagination_testinlinepagination_test_limit_equals_max" }, @@ -30746,7 +33995,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L26", - "community": 68, + "community": 172, "norm_label": "testprometheusinit", "id": "tests_test_prometheus_auth_coverage_testprometheusinit" }, @@ -30764,7 +34013,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L41", - "community": 68, + "community": 172, "norm_label": "testprometheussendmessage", "id": "tests_test_prometheus_auth_coverage_testprometheussendmessage" }, @@ -30827,7 +34076,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L248", - "community": 68, + "community": 172, "norm_label": ".test_init()", "id": "tests_test_prometheus_auth_coverage_testprometheuschatmanager_test_init" }, @@ -31322,7 +34571,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L914", - "community": 68, + "community": 172, "norm_label": "testsso", "id": "tests_test_prometheus_auth_coverage_testsso" }, @@ -31358,7 +34607,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L42", - "community": 68, + "community": 172, "norm_label": "cover streammessage in agent.py.", "id": "tests_test_prometheus_auth_coverage_rationale_42" }, @@ -31430,7 +34679,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L915", - "community": 68, + "community": 172, "norm_label": "cover getgooglesso (lines 6-14).", "id": "tests_test_prometheus_auth_coverage_rationale_915" }, @@ -31457,7 +34706,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L44", - "community": 100, + "community": 530, "norm_label": "testmemorytoolfunctions", "id": "tests_test_prometheus_tools_testmemorytoolfunctions" }, @@ -31466,7 +34715,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L45", - "community": 100, + "community": 530, "norm_label": ".test_search_memory_has_docstring()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_search_memory_has_docstring" }, @@ -31475,7 +34724,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L49", - "community": 100, + "community": 530, "norm_label": ".test_save_memory_has_docstring()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_save_memory_has_docstring" }, @@ -31484,7 +34733,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L53", - "community": 100, + "community": 530, "norm_label": ".test_search_memory_signature()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_search_memory_signature" }, @@ -31493,7 +34742,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L59", - "community": 100, + "community": 530, "norm_label": ".test_save_memory_signature()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_save_memory_signature" }, @@ -31502,7 +34751,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L66", - "community": 100, + "community": 530, "norm_label": ".test_search_memory_has_type_hints()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_search_memory_has_type_hints" }, @@ -31511,7 +34760,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L71", - "community": 100, + "community": 530, "norm_label": ".test_save_memory_has_type_hints()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_save_memory_has_type_hints" }, @@ -31520,7 +34769,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L77", - "community": 100, + "community": 530, "norm_label": ".test_memory_tools_is_list_of_callables()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_memory_tools_is_list_of_callables" }, @@ -31529,7 +34778,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L83", - "community": 100, + "community": 530, "norm_label": ".test_memory_tool_names_unchanged()", "id": "tests_test_prometheus_tools_testmemorytoolfunctions_test_memory_tool_names_unchanged" }, @@ -31610,7 +34859,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L118", - "community": 487, + "community": 100, "norm_label": ".test_set_state_no_state_returns_error()", "id": "tests_test_prometheus_tools_teststatetoolfunctions_test_set_state_no_state_returns_error" }, @@ -31619,7 +34868,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L126", - "community": 100, + "community": 585, "norm_label": "testgeminicompatibility", "id": "tests_test_prometheus_tools_testgeminicompatibility" }, @@ -31637,7 +34886,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L135", - "community": 100, + "community": 585, "norm_label": ".test_no_harnessstate_in_any_signature()", "id": "tests_test_prometheus_tools_testgeminicompatibility_test_no_harnessstate_in_any_signature" }, @@ -31646,7 +34895,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L151", - "community": 100, + "community": 616, "norm_label": "testtoolregistry", "id": "tests_test_prometheus_tools_testtoolregistry" }, @@ -31655,7 +34904,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L152", - "community": 100, + "community": 616, "norm_label": ".test_registry_contains_memory_tools()", "id": "tests_test_prometheus_tools_testtoolregistry_test_registry_contains_memory_tools" }, @@ -31664,7 +34913,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L156", - "community": 100, + "community": 616, "norm_label": ".test_registry_values_are_callable()", "id": "tests_test_prometheus_tools_testtoolregistry_test_registry_values_are_callable" }, @@ -31673,7 +34922,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L160", - "community": 100, + "community": 616, "norm_label": ".test_registry_matches_tool_names()", "id": "tests_test_prometheus_tools_testtoolregistry_test_registry_matches_tool_names" }, @@ -31691,7 +34940,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_tools.py", "source_location": "L127", - "community": 100, + "community": 585, "norm_label": "every function in tool_registry must have gemini-safe signatures. custom cl", "id": "tests_test_prometheus_tools_rationale_127" }, @@ -31700,7 +34949,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_tools.py", "source_location": "L136", - "community": 100, + "community": 585, "norm_label": "regression: harnessstate must never leak into tool signatures.", "id": "tests_test_prometheus_tools_rationale_136" }, @@ -31970,7 +35219,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L1", - "community": 475, + "community": 600, "norm_label": "test_request_id.py", "id": "tests_test_request_id_py" }, @@ -31979,7 +35228,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L14", - "community": 475, + "community": 600, "norm_label": "app()", "id": "tests_test_request_id_app" }, @@ -31988,7 +35237,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L30", - "community": 475, + "community": 600, "norm_label": "client()", "id": "tests_test_request_id_client" }, @@ -31997,7 +35246,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L34", - "community": 475, + "community": 600, "norm_label": "testrequestidmiddleware", "id": "tests_test_request_id_testrequestidmiddleware" }, @@ -32006,7 +35255,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L35", - "community": 475, + "community": 600, "norm_label": ".test_generates_uuid_when_no_header()", "id": "tests_test_request_id_testrequestidmiddleware_test_generates_uuid_when_no_header" }, @@ -32015,7 +35264,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L44", - "community": 475, + "community": 600, "norm_label": ".test_returns_generated_uuid_in_body()", "id": "tests_test_request_id_testrequestidmiddleware_test_returns_generated_uuid_in_body" }, @@ -32024,7 +35273,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L51", - "community": 475, + "community": 600, "norm_label": ".test_uses_client_provided_request_id()", "id": "tests_test_request_id_testrequestidmiddleware_test_uses_client_provided_request_id" }, @@ -32033,7 +35282,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L57", - "community": 475, + "community": 600, "norm_label": ".test_response_header_matches_request()", "id": "tests_test_request_id_testrequestidmiddleware_test_response_header_matches_request" }, @@ -32042,7 +35291,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L62", - "community": 475, + "community": 600, "norm_label": ".test_different_requests_get_different_ids()", "id": "tests_test_request_id_testrequestidmiddleware_test_different_requests_get_different_ids" }, @@ -32051,7 +35300,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L67", - "community": 475, + "community": 600, "norm_label": ".test_context_var_available_in_route()", "id": "tests_test_request_id_testrequestidmiddleware_test_context_var_available_in_route" }, @@ -32060,7 +35309,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L72", - "community": 475, + "community": 600, "norm_label": ".test_empty_x_request_id_header_generates_uuid()", "id": "tests_test_request_id_testrequestidmiddleware_test_empty_x_request_id_header_generates_uuid" }, @@ -32069,7 +35318,7 @@ "file_type": "code", "source_file": "tests/test_request_id.py", "source_location": "L81", - "community": 475, + "community": 600, "norm_label": ".test_middleware_preserves_response_body()", "id": "tests_test_request_id_testrequestidmiddleware_test_middleware_preserves_response_body" }, @@ -32258,7 +35507,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L1", - "community": 45, + "community": 491, "norm_label": "test_roles_coverage.py", "id": "tests_test_roles_coverage_py" }, @@ -32267,7 +35516,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L9", - "community": 45, + "community": 491, "norm_label": "testcheckaccess", "id": "tests_test_roles_coverage_testcheckaccess" }, @@ -32276,7 +35525,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L10", - "community": 45, + "community": 491, "norm_label": ".test_admin_always_passes()", "id": "tests_test_roles_coverage_testcheckaccess_test_admin_always_passes" }, @@ -32285,7 +35534,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L13", - "community": 45, + "community": 491, "norm_label": ".test_user_has_view_profile()", "id": "tests_test_roles_coverage_testcheckaccess_test_user_has_view_profile" }, @@ -32294,7 +35543,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L16", - "community": 45, + "community": 491, "norm_label": ".test_user_lacks_prometheus()", "id": "tests_test_roles_coverage_testcheckaccess_test_user_lacks_prometheus" }, @@ -32303,7 +35552,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L19", - "community": 45, + "community": 491, "norm_label": ".test_premium_has_prometheus()", "id": "tests_test_roles_coverage_testcheckaccess_test_premium_has_prometheus" }, @@ -32312,7 +35561,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L22", - "community": 45, + "community": 491, "norm_label": ".test_developer_starter_has_api()", "id": "tests_test_roles_coverage_testcheckaccess_test_developer_starter_has_api" }, @@ -32321,7 +35570,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L25", - "community": 45, + "community": 491, "norm_label": ".test_developer_starter_lacks_enterprise()", "id": "tests_test_roles_coverage_testcheckaccess_test_developer_starter_lacks_enterprise" }, @@ -32330,7 +35579,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L28", - "community": 45, + "community": 491, "norm_label": ".test_developer_enterprise_has_all_dev()", "id": "tests_test_roles_coverage_testcheckaccess_test_developer_enterprise_has_all_dev" }, @@ -32339,7 +35588,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L32", - "community": 45, + "community": 491, "norm_label": ".test_unknown_role_ignored()", "id": "tests_test_roles_coverage_testcheckaccess_test_unknown_role_ignored" }, @@ -32348,7 +35597,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L35", - "community": 45, + "community": 491, "norm_label": ".test_multiple_roles_combined()", "id": "tests_test_roles_coverage_testcheckaccess_test_multiple_roles_combined" }, @@ -32357,7 +35606,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L38", - "community": 45, + "community": 491, "norm_label": ".test_empty_roles()", "id": "tests_test_roles_coverage_testcheckaccess_test_empty_roles" }, @@ -32366,7 +35615,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L41", - "community": 45, + "community": 491, "norm_label": ".test_admin_skips_other_roles()", "id": "tests_test_roles_coverage_testcheckaccess_test_admin_skips_other_roles" }, @@ -32375,7 +35624,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L45", - "community": 45, + "community": 491, "norm_label": "testrequirepermission", "id": "tests_test_roles_coverage_testrequirepermission" }, @@ -32384,7 +35633,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L46", - "community": 45, + "community": 491, "norm_label": ".test_raises_403_when_missing()", "id": "tests_test_roles_coverage_testrequirepermission_test_raises_403_when_missing" }, @@ -32393,7 +35642,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L64", - "community": 45, + "community": 491, "norm_label": ".test_passes_when_has_permission()", "id": "tests_test_roles_coverage_testrequirepermission_test_passes_when_has_permission" }, @@ -32402,7 +35651,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L83", - "community": 45, + "community": 491, "norm_label": "testpermissionall", "id": "tests_test_roles_coverage_testpermissionall" }, @@ -32411,7 +35660,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L84", - "community": 45, + "community": 491, "norm_label": ".test_all_includes_all_permissions()", "id": "tests_test_roles_coverage_testpermissionall_test_all_includes_all_permissions" }, @@ -32420,7 +35669,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L92", - "community": 45, + "community": 491, "norm_label": "testroleshierarchy", "id": "tests_test_roles_coverage_testroleshierarchy" }, @@ -32429,7 +35678,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L93", - "community": 45, + "community": 491, "norm_label": ".test_premium_includes_user()", "id": "tests_test_roles_coverage_testroleshierarchy_test_premium_includes_user" }, @@ -32438,7 +35687,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L96", - "community": 45, + "community": 491, "norm_label": ".test_enterprise_includes_starter()", "id": "tests_test_roles_coverage_testroleshierarchy_test_enterprise_includes_starter" }, @@ -32447,7 +35696,7 @@ "file_type": "code", "source_file": "tests/test_roles_coverage.py", "source_location": "L99", - "community": 45, + "community": 491, "norm_label": ".test_admin_includes_all()", "id": "tests_test_roles_coverage_testroleshierarchy_test_admin_includes_all" }, @@ -32456,7 +35705,7 @@ "file_type": "rationale", "source_file": "tests/test_roles_coverage.py", "source_location": "L1", - "community": 45, + "community": 491, "norm_label": "tests for main/utils/roles.py \u2014 covers requirepermission and edge cases.", "id": "tests_test_roles_coverage_rationale_1" }, @@ -32852,7 +36101,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L6", - "community": 222, + "community": 604, "norm_label": "testsandboxtooldefinitions", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions" }, @@ -32861,7 +36110,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L7", - "community": 222, + "community": 604, "norm_label": ".test_execute_code_in_registry()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_execute_code_in_registry" }, @@ -32870,7 +36119,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L10", - "community": 222, + "community": 604, "norm_label": ".test_read_file_in_registry()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_read_file_in_registry" }, @@ -32879,7 +36128,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L13", - "community": 222, + "community": 604, "norm_label": ".test_write_file_in_registry()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_write_file_in_registry" }, @@ -32888,7 +36137,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L16", - "community": 222, + "community": 604, "norm_label": ".test_list_files_in_registry()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_list_files_in_registry" }, @@ -32897,7 +36146,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L19", - "community": 222, + "community": 604, "norm_label": ".test_execute_code_has_docstring()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_execute_code_has_docstring" }, @@ -33329,7 +36578,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L1", - "community": 162, + "community": 16, "norm_label": "test_state_tools.py", "id": "tests_test_state_tools_py" }, @@ -33338,7 +36587,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L15", - "community": 148, + "community": 601, "norm_label": "teststatetoolfunctions", "id": "tests_test_state_tools_teststatetoolfunctions" }, @@ -33347,7 +36596,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L16", - "community": 148, + "community": 601, "norm_label": ".test_get_state_has_docstring()", "id": "tests_test_state_tools_teststatetoolfunctions_test_get_state_has_docstring" }, @@ -33356,7 +36605,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L20", - "community": 148, + "community": 601, "norm_label": ".test_set_state_has_docstring()", "id": "tests_test_state_tools_teststatetoolfunctions_test_set_state_has_docstring" }, @@ -33365,7 +36614,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L24", - "community": 148, + "community": 601, "norm_label": ".test_get_state_signature()", "id": "tests_test_state_tools_teststatetoolfunctions_test_get_state_signature" }, @@ -33374,7 +36623,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L31", - "community": 148, + "community": 601, "norm_label": ".test_set_state_signature()", "id": "tests_test_state_tools_teststatetoolfunctions_test_set_state_signature" }, @@ -33383,7 +36632,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L38", - "community": 148, + "community": 601, "norm_label": ".test_get_state_has_type_hints()", "id": "tests_test_state_tools_teststatetoolfunctions_test_get_state_has_type_hints" }, @@ -33392,7 +36641,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L44", - "community": 148, + "community": 601, "norm_label": ".test_set_state_has_type_hints()", "id": "tests_test_state_tools_teststatetoolfunctions_test_set_state_has_type_hints" }, @@ -33401,7 +36650,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L50", - "community": 148, + "community": 601, "norm_label": ".test_state_tools_in_registry()", "id": "tests_test_state_tools_teststatetoolfunctions_test_state_tools_in_registry" }, @@ -33410,7 +36659,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L56", - "community": 148, + "community": 601, "norm_label": ".test_registry_has_all_tools()", "id": "tests_test_state_tools_teststatetoolfunctions_test_registry_has_all_tools" }, @@ -33419,7 +36668,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L60", - "community": 162, + "community": 16, "norm_label": "testgetstate", "id": "tests_test_state_tools_testgetstate" }, @@ -33428,7 +36677,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L62", - "community": 162, + "community": 16, "norm_label": "test_get_state_specific_key()", "id": "tests_test_state_tools_test_get_state_specific_key" }, @@ -33437,7 +36686,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L69", - "community": 162, + "community": 16, "norm_label": "test_get_state_all()", "id": "tests_test_state_tools_test_get_state_all" }, @@ -33446,7 +36695,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L77", - "community": 162, + "community": 16, "norm_label": "test_get_state_missing_key()", "id": "tests_test_state_tools_test_get_state_missing_key" }, @@ -33455,7 +36704,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L83", - "community": 162, + "community": 16, "norm_label": "test_get_state_no_state()", "id": "tests_test_state_tools_test_get_state_no_state" }, @@ -33464,7 +36713,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L88", - "community": 162, + "community": 16, "norm_label": "testsetstate", "id": "tests_test_state_tools_testsetstate" }, @@ -33473,7 +36722,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L90", - "community": 162, + "community": 16, "norm_label": "test_set_state()", "id": "tests_test_state_tools_test_set_state" }, @@ -33482,7 +36731,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L97", - "community": 487, + "community": 546, "norm_label": "test_set_state_no_state()", "id": "tests_test_state_tools_test_set_state_no_state" }, @@ -33491,7 +36740,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L102", - "community": 162, + "community": 16, "norm_label": "teststatedispatch", "id": "tests_test_state_tools_teststatedispatch" }, @@ -33500,7 +36749,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L104", - "community": 162, + "community": 16, "norm_label": "test_dispatch_get_state()", "id": "tests_test_state_tools_test_dispatch_get_state" }, @@ -33509,7 +36758,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L114", - "community": 162, + "community": 16, "norm_label": "test_dispatch_set_state()", "id": "tests_test_state_tools_test_dispatch_set_state" }, @@ -33518,7 +36767,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L1", - "community": 184, + "community": 188, "norm_label": "test_status_endpoint.py", "id": "tests_test_status_endpoint_py" }, @@ -33527,7 +36776,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L9", - "community": 184, + "community": 188, "norm_label": "statusclient()", "id": "tests_test_status_endpoint_statusclient" }, @@ -33536,7 +36785,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L16", - "community": 184, + "community": 188, "norm_label": "teststatusendpoint", "id": "tests_test_status_endpoint_teststatusendpoint" }, @@ -33545,7 +36794,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L17", - "community": 184, + "community": 188, "norm_label": ".test_status_returns_200()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_returns_200" }, @@ -33554,7 +36803,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L21", - "community": 184, + "community": 188, "norm_label": ".test_status_has_healthy()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_has_healthy" }, @@ -33563,7 +36812,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L25", - "community": 184, + "community": 188, "norm_label": ".test_status_has_uptime_format()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_has_uptime_format" }, @@ -33572,7 +36821,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L30", - "community": 184, + "community": 188, "norm_label": ".test_status_has_services_dict()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_has_services_dict" }, @@ -33581,7 +36830,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L35", - "community": 184, + "community": 188, "norm_label": ".test_status_services_contain_expected_keys()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_services_contain_expected_keys" }, @@ -33590,7 +36839,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L41", - "community": 184, + "community": 188, "norm_label": ".test_status_local_service_has_port_and_type()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_local_service_has_port_and_type" }, @@ -33599,7 +36848,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L51", - "community": 184, + "community": 188, "norm_label": ".test_status_disabled_service()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_disabled_service" }, @@ -33608,7 +36857,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L57", - "community": 184, + "community": 188, "norm_label": ".test_status_scraper_no_port()", "id": "tests_test_status_endpoint_teststatusendpoint_test_status_scraper_no_port" }, @@ -33617,7 +36866,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L63", - "community": 184, + "community": 188, "norm_label": ".test_health_endpoint()", "id": "tests_test_status_endpoint_teststatusendpoint_test_health_endpoint" }, @@ -33626,7 +36875,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L69", - "community": 184, + "community": 188, "norm_label": "testscrapertrigger", "id": "tests_test_status_endpoint_testscrapertrigger" }, @@ -33635,7 +36884,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L70", - "community": 184, + "community": 188, "norm_label": ".test_scraper_trigger_debug_mode()", "id": "tests_test_status_endpoint_testscrapertrigger_test_scraper_trigger_debug_mode" }, @@ -33644,7 +36893,7 @@ "file_type": "code", "source_file": "tests/test_status_endpoint.py", "source_location": "L77", - "community": 184, + "community": 188, "norm_label": ".test_scraper_trigger_not_debug()", "id": "tests_test_status_endpoint_testscrapertrigger_test_scraper_trigger_not_debug" }, @@ -33653,7 +36902,7 @@ "file_type": "rationale", "source_file": "tests/test_status_endpoint.py", "source_location": "L1", - "community": 184, + "community": 188, "norm_label": "tests for run.py /status endpoint \u2014 covers status response structure.", "id": "tests_test_status_endpoint_rationale_1" }, @@ -33662,7 +36911,7 @@ "file_type": "rationale", "source_file": "tests/test_status_endpoint.py", "source_location": "L10", - "community": 184, + "community": 188, "norm_label": "create a test client for the status endpoint without running lifespan.", "id": "tests_test_status_endpoint_rationale_10" }, @@ -33779,7 +37028,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L152", - "community": 571, + "community": 603, "norm_label": "testverifyapikey", "id": "tests_test_stocks_api_coverage_testverifyapikey" }, @@ -33896,7 +37145,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L291", - "community": 500, + "community": 26, "norm_label": "test_create_key_new_user()", "id": "tests_test_stocks_api_coverage_test_create_key_new_user" }, @@ -33914,7 +37163,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L323", - "community": 500, + "community": 26, "norm_label": "test_create_key_exception_rollback()", "id": "tests_test_stocks_api_coverage_test_create_key_exception_rollback" }, @@ -34058,7 +37307,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L451", - "community": 86, + "community": 105, "norm_label": ".test_deserialize_mixed_string_none_parses_json()", "id": "tests_test_stocks_api_coverage_testdeserializejsoncolumns_test_deserialize_mixed_string_none_parses_json" }, @@ -34076,7 +37325,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L498", - "community": 86, + "community": 105, "norm_label": "testfilterbysearchterms", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms" }, @@ -34085,7 +37334,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L501", - "community": 86, + "community": 105, "norm_label": "._make_manager()", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms_make_manager" }, @@ -34094,7 +37343,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L509", - "community": 86, + "community": 105, "norm_label": ".test_filter_empty_search_returns_all()", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms_test_filter_empty_search_returns_all" }, @@ -34103,7 +37352,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L515", - "community": 86, + "community": 105, "norm_label": ".test_filter_ticker_index_hit()", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms_test_filter_ticker_index_hit" }, @@ -34112,7 +37361,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L523", - "community": 86, + "community": 105, "norm_label": ".test_filter_multiple_terms_index()", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms_test_filter_multiple_terms_index" }, @@ -34121,7 +37370,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L530", - "community": 86, + "community": 105, "norm_label": ".test_filter_no_index_match_fallback_to_str()", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms_test_filter_no_index_match_fallback_to_str" }, @@ -34130,7 +37379,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L538", - "community": 86, + "community": 105, "norm_label": ".test_filter_fallback_multiple_terms()", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms_test_filter_fallback_multiple_terms" }, @@ -34139,7 +37388,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L545", - "community": 86, + "community": 105, "norm_label": ".test_filter_case_insensitive()", "id": "tests_test_stocks_api_coverage_testfilterbysearchterms_test_filter_case_insensitive" }, @@ -34391,7 +37640,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L766", - "community": 39, + "community": 17, "norm_label": ".test_fundamental_with_invalid_date()", "id": "tests_test_stocks_api_coverage_testqueryfundamental_test_fundamental_with_invalid_date" }, @@ -34445,7 +37694,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L819", - "community": 39, + "community": 17, "norm_label": ".test_fundamental_empty_search_string_no_dedup()", "id": "tests_test_stocks_api_coverage_testqueryfundamental_test_fundamental_empty_search_string_no_dedup" }, @@ -34454,7 +37703,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L828", - "community": 39, + "community": 17, "norm_label": ".test_fundamental_no_time_column()", "id": "tests_test_stocks_api_coverage_testqueryfundamental_test_fundamental_no_time_column" }, @@ -34463,7 +37712,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L841", - "community": 39, + "community": 17, "norm_label": ".test_fundamental_date_range_two_dates()", "id": "tests_test_stocks_api_coverage_testqueryfundamental_test_fundamental_date_range_two_dates" }, @@ -34490,7 +37739,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L882", - "community": 17, + "community": 39, "norm_label": ".test_fundamental_search_multiple_terms()", "id": "tests_test_stocks_api_coverage_testqueryfundamental_test_fundamental_search_multiple_terms" }, @@ -34499,7 +37748,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L890", - "community": 17, + "community": 39, "norm_label": ".test_fundamental_search_fallback_string_match()", "id": "tests_test_stocks_api_coverage_testqueryfundamental_test_fundamental_search_fallback_string_match" }, @@ -34508,7 +37757,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L898", - "community": 39, + "community": 17, "norm_label": ".test_fundamental_dates_one_date()", "id": "tests_test_stocks_api_coverage_testqueryfundamental_test_fundamental_dates_one_date" }, @@ -34787,7 +38036,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1265", - "community": 587, + "community": 529, "norm_label": ".test_http_route_search_required()", "id": "tests_test_stocks_api_coverage_testquerylivecotation_test_http_route_search_required" }, @@ -34823,7 +38072,7 @@ "file_type": "code", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1315", - "community": 22, + "community": 562, "norm_label": ".test_cotations_search_required()", "id": "tests_test_stocks_api_coverage_testquerylivecotation_test_cotations_search_required" }, @@ -34859,7 +38108,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L153", - "community": 571, + "community": 603, "norm_label": "tests covering key.py lines 15-40. uses asyncio.run() since pytest-asyncio", "id": "tests_test_stocks_api_coverage_rationale_153" }, @@ -35012,7 +38261,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L452", - "community": 86, + "community": 105, "norm_label": "regression: is_string_dtype fails when column has strings + none (pandas 2.x).", "id": "tests_test_stocks_api_coverage_rationale_452" }, @@ -35030,7 +38279,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L499", - "community": 86, + "community": 105, "norm_label": "tests covering query.py lines 50-67.", "id": "tests_test_stocks_api_coverage_rationale_499" }, @@ -35129,7 +38378,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L767", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 passes through (not wrapped as 500).", "id": "tests_test_stocks_api_coverage_rationale_767" }, @@ -35138,7 +38387,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L820", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_820" }, @@ -35147,7 +38396,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L829", - "community": 39, + "community": 17, "norm_label": "dataframe without time column.", "id": "tests_test_stocks_api_coverage_rationale_829" }, @@ -35156,7 +38405,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L842", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_842" }, @@ -35183,7 +38432,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L883", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_883" }, @@ -35192,7 +38441,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L891", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_891" }, @@ -35201,7 +38450,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L899", - "community": 39, + "community": 17, "norm_label": "len(daterange) == 1 -> per-ticker closest snapshot.", "id": "tests_test_stocks_api_coverage_rationale_899" }, @@ -35282,7 +38531,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1266", - "community": 587, + "community": 529, "norm_label": "get /stocks/realtime-cotation without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1266" }, @@ -35291,7 +38540,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1316", - "community": 22, + "community": 562, "norm_label": "get /cotations without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1316" }, @@ -36299,7 +39548,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L1", - "community": 172, + "community": 595, "norm_label": "test_thread_safety.py", "id": "tests_test_thread_safety_py" }, @@ -36308,7 +39557,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L21", - "community": 580, + "community": 574, "norm_label": "testgetsession", "id": "tests_test_thread_safety_testgetsession" }, @@ -36317,7 +39566,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L24", - "community": 580, + "community": 574, "norm_label": ".test_same_session_within_same_thread()", "id": "tests_test_thread_safety_testgetsession_test_same_session_within_same_thread" }, @@ -36326,7 +39575,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L32", - "community": 580, + "community": 574, "norm_label": ".test_different_sessions_in_different_threads()", "id": "tests_test_thread_safety_testgetsession_test_different_sessions_in_different_threads" }, @@ -36335,7 +39584,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L52", - "community": 580, + "community": 574, "norm_label": ".test_isolation_under_high_concurrency()", "id": "tests_test_thread_safety_testgetsession_test_isolation_under_high_concurrency" }, @@ -36344,7 +39593,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L73", - "community": 580, + "community": 574, "norm_label": ".test_session_is_requests_session()", "id": "tests_test_thread_safety_testgetsession_test_session_is_requests_session" }, @@ -36389,7 +39638,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L175", - "community": 172, + "community": 595, "norm_label": "testconcurrentgetsession", "id": "tests_test_thread_safety_testconcurrentgetsession" }, @@ -36398,7 +39647,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L178", - "community": 172, + "community": 595, "norm_label": ".test_getsession_returns_thread_local_sessions()", "id": "tests_test_thread_safety_testconcurrentgetsession_test_getsession_returns_thread_local_sessions" }, @@ -36407,7 +39656,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L199", - "community": 172, + "community": 595, "norm_label": ".test_connectivity_uses_getsession()", "id": "tests_test_thread_safety_testconcurrentgetsession_test_connectivity_uses_getsession" }, @@ -36416,7 +39665,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L1", - "community": 172, + "community": 595, "norm_label": "tests for thread safety utilities (issues 5 & 6). issue 5: discordhandler use", "id": "tests_test_thread_safety_rationale_1" }, @@ -36425,7 +39674,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L22", - "community": 580, + "community": 574, "norm_label": "verify that getsession() returns per-thread session instances.", "id": "tests_test_thread_safety_rationale_22" }, @@ -36434,7 +39683,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L25", - "community": 580, + "community": 574, "norm_label": "calling getsession() twice in the same thread returns the same object.", "id": "tests_test_thread_safety_rationale_25" }, @@ -36443,7 +39692,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L33", - "community": 580, + "community": 574, "norm_label": "two threads must not share a session object.", "id": "tests_test_thread_safety_rationale_33" }, @@ -36452,7 +39701,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L53", - "community": 580, + "community": 574, "norm_label": "with 20 concurrent threads, every thread must get its own session.", "id": "tests_test_thread_safety_rationale_53" }, @@ -36461,7 +39710,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L74", - "community": 580, + "community": 574, "norm_label": "the returned object must be a real requests.session.", "id": "tests_test_thread_safety_rationale_74" }, @@ -36506,7 +39755,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L176", - "community": 172, + "community": 595, "norm_label": "verify getsession returns thread-local sessions under concurrency.", "id": "tests_test_thread_safety_rationale_176" }, @@ -36515,7 +39764,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L179", - "community": 172, + "community": 595, "norm_label": "getsession() must give each thread its own session.", "id": "tests_test_thread_safety_rationale_179" }, @@ -36524,7 +39773,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L200", - "community": 172, + "community": 595, "norm_label": "connectivity.checkserviceconnection must call getsession(), not use a global ses", "id": "tests_test_thread_safety_rationale_200" }, @@ -36533,7 +39782,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L1", - "community": 570, + "community": 518, "norm_label": "test_type_aware_decay.py", "id": "tests_test_type_aware_decay_py" }, @@ -36542,7 +39791,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L11", - "community": 570, + "community": 518, "norm_label": "_create()", "id": "tests_test_type_aware_decay_create" }, @@ -36551,7 +39800,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L29", - "community": 570, + "community": 518, "norm_label": "testtypeawaredecay", "id": "tests_test_type_aware_decay_testtypeawaredecay" }, @@ -36560,7 +39809,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L30", - "community": 570, + "community": 518, "norm_label": ".test_preference_decays_slowly()", "id": "tests_test_type_aware_decay_testtypeawaredecay_test_preference_decays_slowly" }, @@ -36569,7 +39818,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L36", - "community": 570, + "community": 518, "norm_label": ".test_context_decays_fast()", "id": "tests_test_type_aware_decay_testtypeawaredecay_test_context_decays_fast" }, @@ -36578,7 +39827,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L42", - "community": 570, + "community": 518, "norm_label": ".test_analysis_decays_normally()", "id": "tests_test_type_aware_decay_testtypeawaredecay_test_analysis_decays_normally" }, @@ -36587,7 +39836,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L48", - "community": 570, + "community": 518, "norm_label": ".test_feedback_decays_medium()", "id": "tests_test_type_aware_decay_testtypeawaredecay_test_feedback_decays_medium" }, @@ -36596,7 +39845,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L54", - "community": 570, + "community": 518, "norm_label": ".test_unknown_type_uses_default()", "id": "tests_test_type_aware_decay_testtypeawaredecay_test_unknown_type_uses_default" }, @@ -36605,7 +39854,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L60", - "community": 570, + "community": 518, "norm_label": ".test_mixed_types_all_correct()", "id": "tests_test_type_aware_decay_testtypeawaredecay_test_mixed_types_all_correct" }, @@ -36614,7 +39863,7 @@ "file_type": "code", "source_file": "tests/test_type_aware_decay.py", "source_location": "L76", - "community": 570, + "community": 518, "norm_label": ".test_preference_survives_longer()", "id": "tests_test_type_aware_decay_testtypeawaredecay_test_preference_survives_longer" }, @@ -36623,7 +39872,7 @@ "file_type": "rationale", "source_file": "tests/test_type_aware_decay.py", "source_location": "L77", - "community": 570, + "community": 518, "norm_label": "after 10 cycles, preference (0.99^10) > context (0.90^10).", "id": "tests_test_type_aware_decay_rationale_77" }, @@ -36767,7 +40016,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L1", - "community": 131, + "community": 104, "norm_label": "test_vector_utils.py", "id": "tests_test_vector_utils_py" }, @@ -36776,7 +40025,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L6", - "community": 13, + "community": 104, "norm_label": "testbatchcosinesimilarity", "id": "tests_test_vector_utils_testbatchcosinesimilarity" }, @@ -36785,7 +40034,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L7", - "community": 13, + "community": 104, "norm_label": ".test_empty_matrix()", "id": "tests_test_vector_utils_testbatchcosinesimilarity_test_empty_matrix" }, @@ -36794,7 +40043,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L11", - "community": 13, + "community": 104, "norm_label": ".test_single_row()", "id": "tests_test_vector_utils_testbatchcosinesimilarity_test_single_row" }, @@ -36803,7 +40052,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L17", - "community": 13, + "community": 104, "norm_label": ".test_multiple_rows()", "id": "tests_test_vector_utils_testbatchcosinesimilarity_test_multiple_rows" }, @@ -36812,7 +40061,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L32", - "community": 13, + "community": 104, "norm_label": ".test_zero_query()", "id": "tests_test_vector_utils_testbatchcosinesimilarity_test_zero_query" }, @@ -38180,7 +41429,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1042", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115, 117-120, 122: existing session with verified ownership.", "id": "tests_test_controllers_coverage_rationale_1042" }, @@ -38189,7 +41438,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1083", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115: session ownership check fails.", "id": "tests_test_controllers_coverage_rationale_1083" }, @@ -38198,7 +41447,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1120", - "community": 16, + "community": 148, "norm_label": "generic exception in chat propagates to fastapi's default 500 handler.", "id": "tests_test_controllers_coverage_rationale_1120" }, @@ -38207,7 +41456,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1138", - "community": 498, + "community": 511, "norm_label": "covers line 18: get /stocks/health.", "id": "tests_test_controllers_coverage_rationale_1138" }, @@ -38252,7 +41501,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1196", - "community": 14, + "community": 609, "norm_label": "covers lines 57-60: admin bypasses permission check and generates key.", "id": "tests_test_controllers_coverage_rationale_1196" }, @@ -38261,7 +41510,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1208", - "community": 14, + "community": 609, "norm_label": "covers lines 61-63: exception during key generation (admin path).", "id": "tests_test_controllers_coverage_rationale_1208" }, @@ -38270,7 +41519,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1223", - "community": 563, + "community": 568, "norm_label": "covers lines 13, 17, 19-20, 22-27: usermanager.addroletouser.", "id": "tests_test_controllers_coverage_rationale_1223" }, @@ -38279,7 +41528,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1226", - "community": 564, + "community": 568, "norm_label": "covers lines 17, 22-27: user found, role not present, role added.", "id": "tests_test_controllers_coverage_rationale_1226" }, @@ -38288,7 +41537,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1243", - "community": 568, + "community": 588, "norm_label": "covers line 27: user already has the role.", "id": "tests_test_controllers_coverage_rationale_1243" }, @@ -38297,7 +41546,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1257", - "community": 528, + "community": 568, "norm_label": "covers lines 19-20: user not found raises 404.", "id": "tests_test_controllers_coverage_rationale_1257" }, @@ -38315,7 +41564,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1301", - "community": 569, + "community": 592, "norm_label": "covers lines 42-44: session validation fails.", "id": "tests_test_controllers_coverage_rationale_1301" }, @@ -38324,7 +41573,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1317", - "community": 546, + "community": 493, "norm_label": "covers lines 48-49: user not in db.", "id": "tests_test_controllers_coverage_rationale_1317" }, @@ -38333,7 +41582,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1334", - "community": 560, + "community": 544, "norm_label": "covers lines 65-67: unexpected exception.", "id": "tests_test_controllers_coverage_rationale_1334" }, @@ -38342,7 +41591,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1351", - "community": 561, + "community": 560, "norm_label": "covers lines 37-38, 46, 51, 58 (sessionid is none): skips session validation.", "id": "tests_test_controllers_coverage_rationale_1351" }, @@ -38405,7 +41654,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1435", - "community": 498, + "community": 45, "norm_label": "covers line 13: usermanager.__init__.", "id": "tests_test_controllers_coverage_rationale_1435" }, @@ -38477,7 +41726,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L947", - "community": 68, + "community": 172, "norm_label": "cover getgooglesso (lines 6-14).", "id": "tests_test_prometheus_auth_coverage_rationale_947" }, @@ -38513,7 +41762,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L42", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_42" }, @@ -38522,7 +41771,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L79", - "community": 162, + "community": 16, "norm_label": "retrieve values from the harness state. use this to recall intermediate results,", "id": "prometheus_tools_rationale_79" }, @@ -38531,7 +41780,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L147", - "community": 208, + "community": 573, "norm_label": "read a file from the workspace. args: path: path to the file (e.", "id": "prometheus_tools_rationale_147" }, @@ -38549,7 +41798,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L30", - "community": 140, + "community": 474, "norm_label": "keys with jaccard > 0.8 should merge.", "id": "tests_test_memory_dedup_rationale_30" }, @@ -38558,7 +41807,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L40", - "community": 140, + "community": 474, "norm_label": "keys with low similarity should not merge.", "id": "tests_test_memory_dedup_rationale_40" }, @@ -38567,7 +41816,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L67", - "community": 140, + "community": 474, "norm_label": "keys with jaccard <= 0.8 should not merge.", "id": "tests_test_memory_dedup_rationale_67" }, @@ -38837,7 +42086,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L131", - "community": 208, + "community": 573, "norm_label": "read a file from the sandbox filesystem. args: path: absolute pa", "id": "prometheus_tools_rationale_131" }, @@ -39035,7 +42284,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L130", - "community": 208, + "community": 573, "norm_label": "read a file from the sandbox filesystem. args: path: absolute pa", "id": "prometheus_tools_rationale_130" }, @@ -39044,7 +42293,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L7", - "community": 522, + "community": 575, "norm_label": "testagentsandboxintegration", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration" }, @@ -39053,7 +42302,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L8", - "community": 522, + "community": 575, "norm_label": ".test_build_system_prompt_includes_sandbox_instructions()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_build_system_prompt_includes_sandbox_instructions" }, @@ -39062,7 +42311,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L14", - "community": 522, + "community": 575, "norm_label": ".test_build_system_prompt_includes_state_instructions()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_build_system_prompt_includes_state_instructions" }, @@ -39071,7 +42320,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L19", - "community": 522, + "community": 575, "norm_label": ".test_build_system_prompt_with_state()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_build_system_prompt_with_state" }, @@ -39170,7 +42419,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L41", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_41" }, @@ -39179,7 +42428,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L78", - "community": 162, + "community": 16, "norm_label": "retrieve values from the harness state. use this to recall intermediate results,", "id": "prometheus_tools_rationale_78" }, @@ -39188,7 +42437,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L93", - "community": 487, + "community": 546, "norm_label": "store a value in the harness state for this session. use this to save inter", "id": "prometheus_tools_rationale_93" }, @@ -41384,7 +44633,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_tools.py", "source_location": "L119", - "community": 487, + "community": 546, "norm_label": "test_set_state_no_state_returns_error()", "id": "tests_test_prometheus_tools_test_set_state_no_state_returns_error" }, @@ -41402,7 +44651,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_tools.py", "source_location": "L128", - "community": 100, + "community": 585, "norm_label": "every function in tool_registry must have gemini-safe signatures. custom cl", "id": "tests_test_prometheus_tools_rationale_128" }, @@ -41411,7 +44660,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_tools.py", "source_location": "L137", - "community": 100, + "community": 585, "norm_label": "regression: harnessstate must never leak into tool signatures.", "id": "tests_test_prometheus_tools_rationale_137" }, @@ -41420,7 +44669,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L1", - "community": 110, + "community": 535, "norm_label": "cache.py", "id": "main_app_prometheus_cache_py" }, @@ -41429,7 +44678,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L7", - "community": 110, + "community": 535, "norm_label": "resultcache", "id": "prometheus_cache_resultcache" }, @@ -41438,7 +44687,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L8", - "community": 110, + "community": 535, "norm_label": ".__init__()", "id": "prometheus_cache_resultcache_init" }, @@ -41447,7 +44696,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L11", - "community": 110, + "community": 535, "norm_label": ".cachepath()", "id": "prometheus_cache_resultcache_cachepath" }, @@ -41456,7 +44705,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L15", - "community": 110, + "community": 535, "norm_label": ".get()", "id": "prometheus_cache_resultcache_get" }, @@ -41465,7 +44714,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L21", - "community": 110, + "community": 535, "norm_label": ".set()", "id": "prometheus_cache_resultcache_set" }, @@ -41474,7 +44723,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L31", - "community": 110, + "community": 535, "norm_label": ".invalidate()", "id": "prometheus_cache_resultcache_invalidate" }, @@ -41483,7 +44732,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L38", - "community": 110, + "community": 535, "norm_label": ".exists()", "id": "prometheus_cache_resultcache_exists" }, @@ -41528,7 +44777,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L139", - "community": 523, + "community": 571, "norm_label": "read_sandbox_file()", "id": "prometheus_tools_read_sandbox_file" }, @@ -41537,7 +44786,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L151", - "community": 523, + "community": 571, "norm_label": "upload_to_sandbox()", "id": "prometheus_tools_upload_to_sandbox" }, @@ -41546,7 +44795,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L165", - "community": 523, + "community": 571, "norm_label": "check_cache()", "id": "prometheus_tools_check_cache" }, @@ -41564,7 +44813,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L109", - "community": 487, + "community": 546, "norm_label": "execute python code in an isolated sandbox. use for quantitative analysis,", "id": "prometheus_tools_rationale_109" }, @@ -41573,7 +44822,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L140", - "community": 523, + "community": 571, "norm_label": "read a file from the sandbox filesystem. args: path: absolute pa", "id": "prometheus_tools_rationale_140" }, @@ -41582,7 +44831,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L152", - "community": 523, + "community": 571, "norm_label": "upload a file to the sandbox filesystem. use this to push data files (csv,", "id": "prometheus_tools_rationale_152" }, @@ -41591,7 +44840,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L166", - "community": 523, + "community": 571, "norm_label": "check if a computed result exists in the cache. use before executing expens", "id": "prometheus_tools_rationale_166" }, @@ -41600,7 +44849,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L9", - "community": 522, + "community": 575, "norm_label": ".test_build_system_prompt_no_state()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_build_system_prompt_no_state" }, @@ -41609,7 +44858,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L20", - "community": 522, + "community": 575, "norm_label": ".test_build_system_prompt_empty_state()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_build_system_prompt_empty_state" }, @@ -41618,7 +44867,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L25", - "community": 522, + "community": 575, "norm_label": ".test_system_prompt_includes_state_instructions()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_system_prompt_includes_state_instructions" }, @@ -41627,7 +44876,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L30", - "community": 522, + "community": 575, "norm_label": ".test_system_prompt_includes_sandbox_instructions()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_system_prompt_includes_sandbox_instructions" }, @@ -41636,7 +44885,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L34", - "community": 522, + "community": 575, "norm_label": ".test_system_prompt_includes_cache_instructions()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_system_prompt_includes_cache_instructions" }, @@ -41645,7 +44894,7 @@ "file_type": "code", "source_file": "tests/test_agent_sandbox_integration.py", "source_location": "L38", - "community": 522, + "community": 575, "norm_label": ".test_makechat_uses_tool_registry()", "id": "tests_test_agent_sandbox_integration_testagentsandboxintegration_test_makechat_uses_tool_registry" }, @@ -41816,7 +45065,7 @@ "file_type": "code", "source_file": "tests/test_config_sandbox.py", "source_location": "L1", - "community": 251, + "community": 102, "norm_label": "test_config_sandbox.py", "id": "tests_test_config_sandbox_py" }, @@ -42113,7 +45362,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L12", - "community": 222, + "community": 604, "norm_label": ".test_read_sandbox_file_in_registry()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_read_sandbox_file_in_registry" }, @@ -42122,7 +45371,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L15", - "community": 222, + "community": 604, "norm_label": ".test_check_cache_in_registry()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_check_cache_in_registry" }, @@ -42131,7 +45380,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L23", - "community": 222, + "community": 604, "norm_label": ".test_read_sandbox_file_has_docstring()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_read_sandbox_file_has_docstring" }, @@ -42140,7 +45389,7 @@ "file_type": "code", "source_file": "tests/test_sandbox_tools.py", "source_location": "L28", - "community": 222, + "community": 604, "norm_label": ".test_check_cache_has_docstring()", "id": "tests_test_sandbox_tools_testsandboxtooldefinitions_test_check_cache_has_docstring" }, @@ -42473,7 +45722,7 @@ "file_type": "code", "source_file": "main/app/prometheus/cache.py", "source_location": "L19", - "community": 110, + "community": 535, "norm_label": "._cache_path()", "id": "prometheus_cache_resultcache_cache_path" }, @@ -42482,7 +45731,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/cache.py", "source_location": "L1", - "community": 110, + "community": 535, "norm_label": "resultcache \u2014 sha256-keyed file-based cache for computed results.", "id": "prometheus_cache_rationale_1" }, @@ -42491,7 +45740,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/cache.py", "source_location": "L10", - "community": 110, + "community": 535, "norm_label": "file-based cache keyed by sha256 of code. stores results as json under:", "id": "prometheus_cache_rationale_10" }, @@ -42500,7 +45749,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/cache.py", "source_location": "L24", - "community": 110, + "community": 535, "norm_label": "return cached result dict or none if miss.", "id": "prometheus_cache_rationale_24" }, @@ -42509,7 +45758,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/cache.py", "source_location": "L31", - "community": 110, + "community": 535, "norm_label": "store result with timestamp.", "id": "prometheus_cache_rationale_31" }, @@ -42518,7 +45767,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/cache.py", "source_location": "L42", - "community": 110, + "community": 535, "norm_label": "delete all cached results for a session.", "id": "prometheus_cache_rationale_42" }, @@ -42527,7 +45776,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/cache.py", "source_location": "L50", - "community": 110, + "community": 535, "norm_label": "check if a result exists for the given code.", "id": "prometheus_cache_rationale_50" }, @@ -42869,7 +46118,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L77", - "community": 162, + "community": 16, "norm_label": "retrieve values from the harness state. use this to recall intermediate results,", "id": "prometheus_tools_rationale_77" }, @@ -42932,7 +46181,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L104", - "community": 162, + "community": 16, "norm_label": "executestatetool()", "id": "prometheus_tools_executestatetool" }, @@ -42950,7 +46199,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L39", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_39" }, @@ -42959,7 +46208,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L44", - "community": 148, + "community": 601, "norm_label": ".test_state_tools_is_list_of_callables()", "id": "tests_test_state_tools_teststatetoolfunctions_test_state_tools_is_list_of_callables" }, @@ -42968,7 +46217,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L50", - "community": 148, + "community": 601, "norm_label": ".test_state_tool_names()", "id": "tests_test_state_tools_teststatetoolfunctions_test_state_tool_names" }, @@ -42977,7 +46226,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L54", - "community": 162, + "community": 16, "norm_label": "testexecutestatetool", "id": "tests_test_state_tools_testexecutestatetool" }, @@ -42986,7 +46235,7 @@ "file_type": "code", "source_file": "tests/test_state_tools.py", "source_location": "L84", - "community": 162, + "community": 16, "norm_label": "test_unknown_tool()", "id": "tests_test_state_tools_test_unknown_tool" }, @@ -43013,7 +46262,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/state.py", "source_location": "L22", - "community": 215, + "community": 63, "norm_label": "store a value in state. marks state as changed for context injection.", "id": "prometheus_state_rationale_22" }, @@ -43076,7 +46325,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L38", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_38" }, @@ -43130,7 +46379,7 @@ "file_type": "code", "source_file": "main/app/prometheus/tools.py", "source_location": "L46", - "community": 130, + "community": 116, "norm_label": "executememorytool()", "id": "prometheus_tools_executememorytool" }, @@ -43139,7 +46388,7 @@ "file_type": "rationale", "source_file": "main/app/prometheus/tools.py", "source_location": "L29", - "community": 126, + "community": 528, "norm_label": "store a memory about the user's preferences, analysis results, or feedback.", "id": "prometheus_tools_rationale_29" }, @@ -43148,7 +46397,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L52", - "community": 140, + "community": 474, "norm_label": "keys with low similarity should not merge.", "id": "tests_test_memory_dedup_rationale_52" }, @@ -43157,7 +46406,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_dedup.py", "source_location": "L85", - "community": 140, + "community": 474, "norm_label": "keys with jaccard <= 0.8 should not merge.", "id": "tests_test_memory_dedup_rationale_85" }, @@ -43274,7 +46523,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L52", - "community": 49, + "community": 589, "norm_label": "makechat must include memory_tools alongside mcp sessions.", "id": "tests_test_memory_tools_wiring_rationale_52" }, @@ -43283,7 +46532,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L89", - "community": 575, + "community": 589, "norm_label": "dispatchtoolcall must route memory tool names to executememorytool.", "id": "tests_test_memory_tools_wiring_rationale_89" }, @@ -43310,7 +46559,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L57", - "community": 49, + "community": 589, "norm_label": "makechat must include memory_tools alongside mcp sessions.", "id": "tests_test_memory_tools_wiring_rationale_57" }, @@ -43319,7 +46568,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L92", - "community": 575, + "community": 589, "norm_label": "dispatchtoolcall must route memory tool names to executememorytool.", "id": "tests_test_memory_tools_wiring_rationale_92" }, @@ -43364,7 +46613,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L85", - "community": 544, + "community": 518, "norm_label": "score below threshold + accesscount=0 + 90+ days \u2192 archived.", "id": "tests_test_memory_maintenance_rationale_85" }, @@ -43373,7 +46622,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L92", - "community": 573, + "community": 518, "norm_label": "low score but accessed recently \u2192 not archived.", "id": "tests_test_memory_maintenance_rationale_92" }, @@ -43382,7 +46631,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L99", - "community": 539, + "community": 518, "norm_label": "zero access but score still above threshold \u2192 not archived.", "id": "tests_test_memory_maintenance_rationale_99" }, @@ -43391,7 +46640,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L106", - "community": 570, + "community": 518, "norm_label": "even with low score, if accessed \u2192 not archived.", "id": "tests_test_memory_maintenance_rationale_106" }, @@ -43400,7 +46649,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_maintenance.py", "source_location": "L113", - "community": 570, + "community": 518, "norm_label": "already archived memories are skipped.", "id": "tests_test_memory_maintenance_rationale_113" }, @@ -43436,7 +46685,7 @@ "file_type": "code", "source_file": "main/utils/models/loader.py", "source_location": "L23", - "community": 130, + "community": 116, "norm_label": "embed()", "id": "models_loader_embed" }, @@ -43616,7 +46865,7 @@ "file_type": "code", "source_file": "main/utils/models/loader.py", "source_location": "L11", - "community": 130, + "community": 605, "norm_label": "_downloadmodel()", "id": "models_loader_downloadmodel" }, @@ -43733,7 +46982,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1258", - "community": 528, + "community": 568, "norm_label": "covers lines 19-20: user not found raises 404.", "id": "tests_test_controllers_coverage_rationale_1258" }, @@ -43751,7 +47000,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1277", - "community": 563, + "community": 578, "norm_label": "covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval.", "id": "tests_test_controllers_coverage_rationale_1277" }, @@ -43760,7 +47009,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1302", - "community": 569, + "community": 592, "norm_label": "covers lines 42-44: session validation fails.", "id": "tests_test_controllers_coverage_rationale_1302" }, @@ -43769,7 +47018,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1318", - "community": 546, + "community": 493, "norm_label": "covers lines 48-49: user not in db.", "id": "tests_test_controllers_coverage_rationale_1318" }, @@ -43778,7 +47027,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1335", - "community": 560, + "community": 544, "norm_label": "covers lines 65-67: unexpected exception.", "id": "tests_test_controllers_coverage_rationale_1335" }, @@ -43787,7 +47036,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1352", - "community": 561, + "community": 560, "norm_label": "covers lines 37-38, 46, 51, 58 (sessionid is none): skips session validation.", "id": "tests_test_controllers_coverage_rationale_1352" }, @@ -43814,7 +47063,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1389", - "community": 560, + "community": 544, "norm_label": "covers lines 48-49: jwt.expiredsignatureerror.", "id": "tests_test_controllers_coverage_rationale_1389" }, @@ -43850,7 +47099,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1436", - "community": 498, + "community": 45, "norm_label": "covers line 13: usermanager.__init__.", "id": "tests_test_controllers_coverage_rationale_1436" }, @@ -44075,7 +47324,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L56", - "community": 49, + "community": 589, "norm_label": "makechat must include memory_tools alongside mcp sessions.", "id": "tests_test_memory_tools_wiring_rationale_56" }, @@ -44084,7 +47333,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L91", - "community": 575, + "community": 589, "norm_label": "dispatchtoolcall must route memory tool names to executememorytool.", "id": "tests_test_memory_tools_wiring_rationale_91" }, @@ -44093,7 +47342,7 @@ "file_type": "code", "source_file": "main/utils/vector.py", "source_location": "L1", - "community": 131, + "community": 184, "norm_label": "vector.py", "id": "main_utils_vector_py" }, @@ -44102,7 +47351,7 @@ "file_type": "code", "source_file": "main/utils/vector.py", "source_location": "L8", - "community": 13, + "community": 104, "norm_label": "batchcosinesimilarity()", "id": "utils_vector_batchcosinesimilarity" }, @@ -44408,7 +47657,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L48", - "community": 49, + "community": 589, "norm_label": "makechat must include memory_tools alongside mcp sessions.", "id": "tests_test_memory_tools_wiring_rationale_48" }, @@ -44417,7 +47666,7 @@ "file_type": "rationale", "source_file": "tests/test_memory_tools_wiring.py", "source_location": "L76", - "community": 575, + "community": 589, "norm_label": "dispatchtoolcall must route memory tool names to executememorytool.", "id": "tests_test_memory_tools_wiring_rationale_76" }, @@ -44507,7 +47756,7 @@ "file_type": "code", "source_file": "main/controller/prometheus_controller.py", "source_location": "L177", - "community": 130, + "community": 116, "norm_label": "creatememory()", "id": "controller_prometheus_controller_creatememory" }, @@ -44669,7 +47918,7 @@ "file_type": "rationale", "source_file": "main/utils/vector.py", "source_location": "L6", - "community": 131, + "community": 184, "norm_label": "vectorized cosine similarity: one query against n embeddings.", "id": "utils_vector_rationale_6" }, @@ -45317,7 +48566,7 @@ "file_type": "code", "source_file": "main/controller/prometheus_controller.py", "source_location": "L177", - "community": 130, + "community": 116, "norm_label": "create_memory()", "id": "controller_prometheus_controller_create_memory" }, @@ -45335,7 +48584,7 @@ "file_type": "code", "source_file": "main/utils/vector.py", "source_location": "L5", - "community": 131, + "community": 184, "norm_label": "pack_vector()", "id": "utils_vector_pack_vector" }, @@ -45344,7 +48593,7 @@ "file_type": "code", "source_file": "main/utils/vector.py", "source_location": "L11", - "community": 131, + "community": 184, "norm_label": "unpack_vector()", "id": "utils_vector_unpack_vector" }, @@ -45362,7 +48611,7 @@ "file_type": "code", "source_file": "main/utils/vector.py", "source_location": "L28", - "community": 13, + "community": 104, "norm_label": "batch_cosine_similarity()", "id": "utils_vector_batch_cosine_similarity" }, @@ -45380,7 +48629,7 @@ "file_type": "rationale", "source_file": "main/utils/vector.py", "source_location": "L12", - "community": 131, + "community": 184, "norm_label": "unpack mysql blob to float list.", "id": "utils_vector_rationale_12" }, @@ -45398,7 +48647,7 @@ "file_type": "rationale", "source_file": "main/utils/vector.py", "source_location": "L29", - "community": 13, + "community": 104, "norm_label": "vectorized cosine similarity: one query against n embeddings.", "id": "utils_vector_rationale_29" }, @@ -45704,7 +48953,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L11", - "community": 131, + "community": 184, "norm_label": "testpackunpack", "id": "tests_test_vector_utils_testpackunpack" }, @@ -45713,7 +48962,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L12", - "community": 131, + "community": 184, "norm_label": ".test_roundtrip()", "id": "tests_test_vector_utils_testpackunpack_test_roundtrip" }, @@ -45722,7 +48971,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L20", - "community": 131, + "community": 184, "norm_label": ".test_empty()", "id": "tests_test_vector_utils_testpackunpack_test_empty" }, @@ -45731,7 +48980,7 @@ "file_type": "code", "source_file": "tests/test_vector_utils.py", "source_location": "L26", - "community": 131, + "community": 184, "norm_label": ".test_384_dims()", "id": "tests_test_vector_utils_testpackunpack_test_384_dims" }, @@ -45794,7 +49043,7 @@ "file_type": "rationale", "source_file": "tests/test_vector_utils.py", "source_location": "L13", - "community": 131, + "community": 184, "norm_label": "pack \u2192 unpack preserves values.", "id": "tests_test_vector_utils_rationale_13" }, @@ -45803,7 +49052,7 @@ "file_type": "rationale", "source_file": "tests/test_vector_utils.py", "source_location": "L21", - "community": 131, + "community": 184, "norm_label": "empty list roundtrips.", "id": "tests_test_vector_utils_rationale_21" }, @@ -45812,7 +49061,7 @@ "file_type": "rationale", "source_file": "tests/test_vector_utils.py", "source_location": "L27", - "community": 131, + "community": 184, "norm_label": "384-dim vector packs to 1536 bytes.", "id": "tests_test_vector_utils_rationale_27" }, @@ -45866,7 +49115,7 @@ "file_type": "rationale", "source_file": "tests/test_vector_utils.py", "source_location": "L68", - "community": 13, + "community": 104, "norm_label": "empty matrix \u2192 empty array.", "id": "tests_test_vector_utils_rationale_68" }, @@ -45875,7 +49124,7 @@ "file_type": "rationale", "source_file": "tests/test_vector_utils.py", "source_location": "L73", - "community": 13, + "community": 104, "norm_label": "single row matches cosine_similarity.", "id": "tests_test_vector_utils_rationale_73" }, @@ -45884,7 +49133,7 @@ "file_type": "rationale", "source_file": "tests/test_vector_utils.py", "source_location": "L80", - "community": 13, + "community": 104, "norm_label": "multiple rows ranked correctly.", "id": "tests_test_vector_utils_rationale_80" }, @@ -45893,7 +49142,7 @@ "file_type": "rationale", "source_file": "tests/test_vector_utils.py", "source_location": "L93", - "community": 13, + "community": 104, "norm_label": "zero query \u2192 all zeros.", "id": "tests_test_vector_utils_rationale_93" }, @@ -46235,7 +49484,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L937", - "community": 68, + "community": 172, "norm_label": "cover getgooglesso (lines 6-14).", "id": "tests_test_prometheus_auth_coverage_rationale_937" }, @@ -46478,7 +49727,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L27", - "community": 68, + "community": 172, "norm_label": "cover __init__ and updatedates.", "id": "tests_test_prometheus_auth_coverage_rationale_27" }, @@ -46487,7 +49736,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L58", - "community": 68, + "community": 172, "norm_label": "cover sendmessage and streammessage in agent.py.", "id": "tests_test_prometheus_auth_coverage_rationale_58" }, @@ -46541,7 +49790,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L843", - "community": 68, + "community": 172, "norm_label": "cover getgooglesso (lines 6-14).", "id": "tests_test_prometheus_auth_coverage_rationale_843" }, @@ -46550,7 +49799,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L26", - "community": 68, + "community": 172, "norm_label": "testprometheusgeneratorinit", "id": "tests_test_prometheus_auth_coverage_testprometheusgeneratorinit" }, @@ -46559,7 +49808,7 @@ "file_type": "code", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L57", - "community": 68, + "community": 172, "norm_label": "testprometheusgeneratorexecuteworkflow", "id": "tests_test_prometheus_auth_coverage_testprometheusgeneratorexecuteworkflow" }, @@ -46784,7 +50033,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L1109", - "community": 68, + "community": 172, "norm_label": "cover getgooglesso (lines 6-14).", "id": "tests_test_prometheus_auth_coverage_rationale_1109" }, @@ -46910,7 +50159,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L74", - "community": 105, + "community": 251, "norm_label": "testclient with stocks router + verifyapikey + getcurrentuser overrides.", "id": "tests_conftest_rationale_74" }, @@ -46919,7 +50168,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L99", - "community": 105, + "community": 251, "norm_label": "testclient with all routers mounted \u2014 no lifespan (no db/service init). o", "id": "tests_conftest_rationale_99" }, @@ -46937,7 +50186,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L524", - "community": 498, + "community": 45, "norm_label": "covers line 19: get /user/health.", "id": "tests_test_controllers_coverage_rationale_524" }, @@ -46973,7 +50222,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L611", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: get /user/sessions.", "id": "tests_test_controllers_coverage_rationale_611" }, @@ -46982,7 +50231,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L614", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: full sessions listing.", "id": "tests_test_controllers_coverage_rationale_614" }, @@ -47018,7 +50267,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L724", - "community": 104, + "community": 136, "norm_label": "covers lines 126-136: delete /user/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_724" }, @@ -47027,7 +50276,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L727", - "community": 104, + "community": 136, "norm_label": "covers lines 126, 131, 135-136.", "id": "tests_test_controllers_coverage_rationale_727" }, @@ -47036,7 +50285,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L754", - "community": 104, + "community": 136, "norm_label": "covers lines 127-129: session not found.", "id": "tests_test_controllers_coverage_rationale_754" }, @@ -47045,7 +50294,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L776", - "community": 104, + "community": 136, "norm_label": "covers lines 132-133: revokesession returns false.", "id": "tests_test_controllers_coverage_rationale_776" }, @@ -47072,7 +50321,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L832", - "community": 498, + "community": 610, "norm_label": "covers line 24: get /prometheus/health.", "id": "tests_test_controllers_coverage_rationale_832" }, @@ -47081,7 +50330,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L846", - "community": 99, + "community": 45, "norm_label": "covers lines 33-36: get /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_846" }, @@ -47090,7 +50339,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L864", - "community": 99, + "community": 45, "norm_label": "covers line 52: post /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_864" }, @@ -47135,7 +50384,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L912", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 83-84, 86: get /prometheus/history/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_912" }, @@ -47144,7 +50393,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L915", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 86: session found with history.", "id": "tests_test_controllers_coverage_rationale_915" }, @@ -47153,7 +50402,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L959", - "community": 104, + "community": 256, "norm_label": "covers lines 83-84: session not found.", "id": "tests_test_controllers_coverage_rationale_959" }, @@ -47162,7 +50411,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L994", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: delete /prometheus/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_994" }, @@ -47171,7 +50420,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L997", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: session deleted.", "id": "tests_test_controllers_coverage_rationale_997" }, @@ -47180,7 +50429,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1007", - "community": 231, + "community": 584, "norm_label": "covers lines 96-97: session not found.", "id": "tests_test_controllers_coverage_rationale_1007" }, @@ -47189,7 +50438,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1017", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115, 117-120, 122, 125: post /prometheus/chat.", "id": "tests_test_controllers_coverage_rationale_1017" }, @@ -47198,7 +50447,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1020", - "community": 16, + "community": 148, "norm_label": "covers lines 111-112: sessionid is none, new session created.", "id": "tests_test_controllers_coverage_rationale_1020" }, @@ -47207,7 +50456,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1038", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115, 117-120, 122: existing session with verified ownership.", "id": "tests_test_controllers_coverage_rationale_1038" }, @@ -47216,7 +50465,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1079", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115: session ownership check fails.", "id": "tests_test_controllers_coverage_rationale_1079" }, @@ -47225,7 +50474,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1116", - "community": 16, + "community": 148, "norm_label": "generic exception in chat propagates to fastapi's default 500 handler.", "id": "tests_test_controllers_coverage_rationale_1116" }, @@ -47234,7 +50483,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1134", - "community": 498, + "community": 511, "norm_label": "covers line 18: get /stocks/health.", "id": "tests_test_controllers_coverage_rationale_1134" }, @@ -47279,7 +50528,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1192", - "community": 14, + "community": 609, "norm_label": "covers lines 57-60: admin bypasses permission check and generates key.", "id": "tests_test_controllers_coverage_rationale_1192" }, @@ -47288,7 +50537,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1204", - "community": 14, + "community": 609, "norm_label": "covers lines 61-63: exception during key generation (admin path).", "id": "tests_test_controllers_coverage_rationale_1204" }, @@ -47297,7 +50546,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1219", - "community": 563, + "community": 568, "norm_label": "covers lines 13, 17, 19-20, 22-27: usermanager.addroletouser.", "id": "tests_test_controllers_coverage_rationale_1219" }, @@ -47306,7 +50555,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1222", - "community": 564, + "community": 568, "norm_label": "covers lines 17, 22-27: user found, role not present, role added.", "id": "tests_test_controllers_coverage_rationale_1222" }, @@ -47315,7 +50564,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1239", - "community": 568, + "community": 588, "norm_label": "covers line 27: user already has the role.", "id": "tests_test_controllers_coverage_rationale_1239" }, @@ -47324,7 +50573,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1254", - "community": 528, + "community": 568, "norm_label": "covers lines 19-20: user not found raises 404.", "id": "tests_test_controllers_coverage_rationale_1254" }, @@ -47342,7 +50591,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1273", - "community": 493, + "community": 578, "norm_label": "covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval.", "id": "tests_test_controllers_coverage_rationale_1273" }, @@ -47351,7 +50600,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1298", - "community": 569, + "community": 592, "norm_label": "covers lines 42-44: session validation fails.", "id": "tests_test_controllers_coverage_rationale_1298" }, @@ -47360,7 +50609,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1314", - "community": 546, + "community": 493, "norm_label": "covers lines 48-49: user not in db.", "id": "tests_test_controllers_coverage_rationale_1314" }, @@ -47369,7 +50618,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1331", - "community": 560, + "community": 544, "norm_label": "covers lines 65-67: unexpected exception.", "id": "tests_test_controllers_coverage_rationale_1331" }, @@ -47378,7 +50627,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1348", - "community": 561, + "community": 560, "norm_label": "covers lines 37-38, 46, 51, 58 (sessionid is none): skips session validation.", "id": "tests_test_controllers_coverage_rationale_1348" }, @@ -47387,7 +50636,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1372", - "community": 546, + "community": 45, "norm_label": "covers line 16: empty password raises valueerror.", "id": "tests_test_controllers_coverage_rationale_1372" }, @@ -47414,7 +50663,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1432", - "community": 498, + "community": 45, "norm_label": "covers line 13: usermanager.__init__.", "id": "tests_test_controllers_coverage_rationale_1432" }, @@ -47549,7 +50798,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L522", - "community": 498, + "community": 45, "norm_label": "covers line 19: get /user/health.", "id": "tests_test_controllers_coverage_rationale_522" }, @@ -47585,7 +50834,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L609", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: get /user/sessions.", "id": "tests_test_controllers_coverage_rationale_609" }, @@ -47594,7 +50843,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L612", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: full sessions listing.", "id": "tests_test_controllers_coverage_rationale_612" }, @@ -47630,7 +50879,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L722", - "community": 104, + "community": 136, "norm_label": "covers lines 126-136: delete /user/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_722" }, @@ -47639,7 +50888,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L725", - "community": 104, + "community": 136, "norm_label": "covers lines 126, 131, 135-136.", "id": "tests_test_controllers_coverage_rationale_725" }, @@ -47648,7 +50897,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L752", - "community": 104, + "community": 136, "norm_label": "covers lines 127-129: session not found.", "id": "tests_test_controllers_coverage_rationale_752" }, @@ -47657,7 +50906,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L774", - "community": 104, + "community": 136, "norm_label": "covers lines 132-133: revokesession returns false.", "id": "tests_test_controllers_coverage_rationale_774" }, @@ -47684,7 +50933,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L830", - "community": 498, + "community": 610, "norm_label": "covers line 24: get /prometheus/health.", "id": "tests_test_controllers_coverage_rationale_830" }, @@ -47693,7 +50942,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L844", - "community": 99, + "community": 45, "norm_label": "covers lines 33-36: get /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_844" }, @@ -47702,7 +50951,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L862", - "community": 99, + "community": 45, "norm_label": "covers line 52: post /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_862" }, @@ -47747,7 +50996,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L910", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 83-84, 86: get /prometheus/history/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_910" }, @@ -47756,7 +51005,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L913", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 86: session found with history.", "id": "tests_test_controllers_coverage_rationale_913" }, @@ -47765,7 +51014,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L957", - "community": 104, + "community": 256, "norm_label": "covers lines 83-84: session not found.", "id": "tests_test_controllers_coverage_rationale_957" }, @@ -47774,7 +51023,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L992", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: delete /prometheus/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_992" }, @@ -47783,7 +51032,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L995", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: session deleted.", "id": "tests_test_controllers_coverage_rationale_995" }, @@ -47792,7 +51041,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1005", - "community": 231, + "community": 584, "norm_label": "covers lines 96-97: session not found.", "id": "tests_test_controllers_coverage_rationale_1005" }, @@ -47801,7 +51050,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1015", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115, 117-120, 122, 125: post /prometheus/chat.", "id": "tests_test_controllers_coverage_rationale_1015" }, @@ -47810,7 +51059,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1018", - "community": 16, + "community": 148, "norm_label": "covers lines 111-112: sessionid is none, new session created.", "id": "tests_test_controllers_coverage_rationale_1018" }, @@ -47819,7 +51068,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1036", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115, 117-120, 122: existing session with verified ownership.", "id": "tests_test_controllers_coverage_rationale_1036" }, @@ -47828,7 +51077,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1078", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115: session ownership check fails.", "id": "tests_test_controllers_coverage_rationale_1078" }, @@ -47837,7 +51086,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1115", - "community": 16, + "community": 148, "norm_label": "generic exception in chat propagates to fastapi's default 500 handler.", "id": "tests_test_controllers_coverage_rationale_1115" }, @@ -47846,7 +51095,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1133", - "community": 498, + "community": 511, "norm_label": "covers line 18: get /stocks/health.", "id": "tests_test_controllers_coverage_rationale_1133" }, @@ -47891,7 +51140,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1191", - "community": 14, + "community": 609, "norm_label": "covers lines 57-60: admin bypasses permission check and generates key.", "id": "tests_test_controllers_coverage_rationale_1191" }, @@ -47900,7 +51149,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1218", - "community": 563, + "community": 568, "norm_label": "covers lines 13, 17, 19-20, 22-27: usermanager.addroletouser.", "id": "tests_test_controllers_coverage_rationale_1218" }, @@ -47909,7 +51158,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1221", - "community": 564, + "community": 568, "norm_label": "covers lines 17, 22-27: user found, role not present, role added.", "id": "tests_test_controllers_coverage_rationale_1221" }, @@ -47918,7 +51167,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1238", - "community": 568, + "community": 588, "norm_label": "covers line 27: user already has the role.", "id": "tests_test_controllers_coverage_rationale_1238" }, @@ -47927,7 +51176,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1253", - "community": 528, + "community": 568, "norm_label": "covers lines 19-20: user not found raises 404.", "id": "tests_test_controllers_coverage_rationale_1253" }, @@ -47945,7 +51194,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1272", - "community": 493, + "community": 578, "norm_label": "covers lines 36-38, 40-44, 46, 48-49, 51, 58-59, 61: successful user retrieval.", "id": "tests_test_controllers_coverage_rationale_1272" }, @@ -47954,7 +51203,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1297", - "community": 568, + "community": 588, "norm_label": "covers lines 42-44: session validation fails.", "id": "tests_test_controllers_coverage_rationale_1297" }, @@ -47963,7 +51212,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1313", - "community": 546, + "community": 493, "norm_label": "covers lines 48-49: user not in db.", "id": "tests_test_controllers_coverage_rationale_1313" }, @@ -47972,7 +51221,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1330", - "community": 560, + "community": 544, "norm_label": "covers lines 65-67: unexpected exception.", "id": "tests_test_controllers_coverage_rationale_1330" }, @@ -47981,7 +51230,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1347", - "community": 561, + "community": 560, "norm_label": "covers lines 37-38, 46, 51, 58 (sessionid is none): skips session validation.", "id": "tests_test_controllers_coverage_rationale_1347" }, @@ -48044,7 +51293,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1431", - "community": 498, + "community": 45, "norm_label": "covers line 13: usermanager.__init__.", "id": "tests_test_controllers_coverage_rationale_1431" }, @@ -48368,7 +51617,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L229", - "community": 571, + "community": 603, "norm_label": "tests covering key.py lines 15-40. uses asyncio.run() since pytest-asyncio", "id": "tests_test_stocks_api_coverage_rationale_229" }, @@ -48512,7 +51761,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L528", - "community": 86, + "community": 105, "norm_label": "regression: is_string_dtype fails when column has strings + none (pandas 2.x).", "id": "tests_test_stocks_api_coverage_rationale_528" }, @@ -48530,7 +51779,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L575", - "community": 86, + "community": 105, "norm_label": "tests covering query.py lines 50-67.", "id": "tests_test_stocks_api_coverage_rationale_575" }, @@ -48620,7 +51869,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L843", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 passes through (not wrapped as 500).", "id": "tests_test_stocks_api_coverage_rationale_843" }, @@ -48629,7 +51878,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L896", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_896" }, @@ -48638,7 +51887,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L905", - "community": 39, + "community": 17, "norm_label": "dataframe without time column.", "id": "tests_test_stocks_api_coverage_rationale_905" }, @@ -48647,7 +51896,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L918", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_918" }, @@ -48674,7 +51923,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L959", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_959" }, @@ -48683,7 +51932,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L967", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_967" }, @@ -48692,7 +51941,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L975", - "community": 39, + "community": 17, "norm_label": "len(daterange) == 1 -> per-ticker closest snapshot.", "id": "tests_test_stocks_api_coverage_rationale_975" }, @@ -48773,7 +52022,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1342", - "community": 587, + "community": 529, "norm_label": "get /stocks/realtime-cotation without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1342" }, @@ -48782,7 +52031,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1392", - "community": 22, + "community": 562, "norm_label": "get /cotations without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1392" }, @@ -48908,7 +52157,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1344", - "community": 587, + "community": 529, "norm_label": "get /stocks/realtime-cotation without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1344" }, @@ -48917,7 +52166,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1394", - "community": 22, + "community": 562, "norm_label": "get /cotations without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1394" }, @@ -49097,7 +52346,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1400", - "community": 587, + "community": 529, "norm_label": "get /stocks/realtime-cotation without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1400" }, @@ -49106,7 +52355,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1468", - "community": 22, + "community": 562, "norm_label": "get /cotations without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1468" }, @@ -49133,7 +52382,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L228", - "community": 571, + "community": 603, "norm_label": "tests covering key.py lines 15-40. uses asyncio.run() since pytest-asyncio", "id": "tests_test_stocks_api_coverage_rationale_228" }, @@ -49277,7 +52526,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L527", - "community": 86, + "community": 105, "norm_label": "regression: is_string_dtype fails when column has strings + none (pandas 2.x).", "id": "tests_test_stocks_api_coverage_rationale_527" }, @@ -49295,7 +52544,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L574", - "community": 86, + "community": 105, "norm_label": "tests covering query.py lines 50-67.", "id": "tests_test_stocks_api_coverage_rationale_574" }, @@ -49394,7 +52643,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L895", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_895" }, @@ -49403,7 +52652,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L904", - "community": 39, + "community": 17, "norm_label": "dataframe without time column.", "id": "tests_test_stocks_api_coverage_rationale_904" }, @@ -49412,7 +52661,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L917", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_917" }, @@ -49430,7 +52679,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L956", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_956" }, @@ -49439,7 +52688,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L964", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_964" }, @@ -49448,7 +52697,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L972", - "community": 39, + "community": 17, "norm_label": "len(daterange) == 1 -> single date filter.", "id": "tests_test_stocks_api_coverage_rationale_972" }, @@ -49529,7 +52778,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1396", - "community": 587, + "community": 529, "norm_label": "get /stocks/realtime-cotation without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1396" }, @@ -49538,7 +52787,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1464", - "community": 22, + "community": 562, "norm_label": "get /cotations without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1464" }, @@ -49565,7 +52814,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1388", - "community": 587, + "community": 529, "norm_label": "get /stocks/realtime-cotation without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1388" }, @@ -49574,7 +52823,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L1456", - "community": 22, + "community": 562, "norm_label": "get /cotations without search returns 422.", "id": "tests_test_stocks_api_coverage_rationale_1456" }, @@ -49673,7 +52922,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L832", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 caught by outer except -> 500.", "id": "tests_test_stocks_api_coverage_rationale_832" }, @@ -49682,7 +52931,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L885", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_885" }, @@ -49691,7 +52940,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L894", - "community": 39, + "community": 17, "norm_label": "dataframe without time column.", "id": "tests_test_stocks_api_coverage_rationale_894" }, @@ -49700,7 +52949,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L907", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_907" }, @@ -49718,7 +52967,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L946", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_946" }, @@ -49727,7 +52976,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L954", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_954" }, @@ -49736,7 +52985,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L962", - "community": 39, + "community": 17, "norm_label": "len(daterange) == 1 -> single date filter.", "id": "tests_test_stocks_api_coverage_rationale_962" }, @@ -50438,7 +53687,7 @@ "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L63", - "community": 169, + "community": 222, "norm_label": "getrealtimecotation()", "id": "controller_stocksapi_controller_getrealtimecotation" }, @@ -50483,7 +53732,7 @@ "file_type": "code", "source_file": "main/app/prometheus/chat.py", "source_location": "L14", - "community": 68, + "community": 172, "norm_label": ".__init__()", "id": "prometheus_chat_prometheuschatmanager_init" }, @@ -50546,7 +53795,7 @@ "file_type": "code", "source_file": "main/controller/stocksapi_controller.py", "source_location": "L23", - "community": 169, + "community": 222, "norm_label": "apikeytest()", "id": "controller_stocksapi_controller_apikeytest" }, @@ -50600,7 +53849,7 @@ "file_type": "code", "source_file": "main/utils/http_session.py", "source_location": "L18", - "community": 512, + "community": 612, "norm_label": "cleanup()", "id": "utils_http_session_cleanup" }, @@ -50645,7 +53894,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L75", - "community": 105, + "community": 251, "norm_label": "testclient with all routers mounted \u2014 no lifespan (no db/service init). o", "id": "tests_conftest_rationale_75" }, @@ -50654,7 +53903,7 @@ "file_type": "code", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L20", - "community": 26, + "community": 504, "norm_label": "dbsession()", "id": "tests_test_api_key_quota_atomic_dbsession" }, @@ -50663,7 +53912,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L21", - "community": 26, + "community": 504, "norm_label": "create an in-memory sqlite database for testing.", "id": "tests_test_api_key_quota_atomic_rationale_21" }, @@ -50672,7 +53921,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L34", - "community": 26, + "community": 504, "norm_label": "sample api key data for tests.", "id": "tests_test_api_key_quota_atomic_rationale_34" }, @@ -50726,7 +53975,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L166", - "community": 26, + "community": 572, "norm_label": "test that invalid api key returns zero rows affected.", "id": "tests_test_api_key_quota_atomic_rationale_166" }, @@ -50735,7 +53984,7 @@ "file_type": "rationale", "source_file": "tests/test_api_key_quota_atomic.py", "source_location": "L180", - "community": 26, + "community": 572, "norm_label": "test that multiple api keys have independent quotas.", "id": "tests_test_api_key_quota_atomic_rationale_180" }, @@ -50825,7 +54074,7 @@ "file_type": "code", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1194", - "community": 45, + "community": 14, "norm_label": "teststocksapikeytest", "id": "tests_test_controllers_coverage_teststocksapikeytest" }, @@ -50861,7 +54110,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L132", - "community": 45, + "community": 491, "norm_label": "covers line 28: get /auth/health.", "id": "tests_test_controllers_coverage_rationale_132" }, @@ -50978,7 +54227,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L379", - "community": 45, + "community": 491, "norm_label": "covers lines 139, 141-149: googlelogin endpoint.", "id": "tests_test_controllers_coverage_rationale_379" }, @@ -51041,7 +54290,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L567", - "community": 498, + "community": 45, "norm_label": "covers line 19: get /user/health.", "id": "tests_test_controllers_coverage_rationale_567" }, @@ -51077,7 +54326,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L654", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: get /user/sessions.", "id": "tests_test_controllers_coverage_rationale_654" }, @@ -51086,7 +54335,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L657", - "community": 178, + "community": 541, "norm_label": "covers lines 66, 68-72, 74: full sessions listing.", "id": "tests_test_controllers_coverage_rationale_657" }, @@ -51122,7 +54371,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L767", - "community": 104, + "community": 136, "norm_label": "covers lines 126-136: delete /user/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_767" }, @@ -51131,7 +54380,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L770", - "community": 104, + "community": 136, "norm_label": "covers lines 126, 131, 135-136.", "id": "tests_test_controllers_coverage_rationale_770" }, @@ -51140,7 +54389,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L797", - "community": 104, + "community": 136, "norm_label": "covers lines 127-129: session not found.", "id": "tests_test_controllers_coverage_rationale_797" }, @@ -51149,7 +54398,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L819", - "community": 104, + "community": 136, "norm_label": "covers lines 132-133: revokesession returns false.", "id": "tests_test_controllers_coverage_rationale_819" }, @@ -51176,7 +54425,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L875", - "community": 498, + "community": 610, "norm_label": "covers line 24: get /prometheus/health.", "id": "tests_test_controllers_coverage_rationale_875" }, @@ -51185,7 +54434,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L889", - "community": 99, + "community": 45, "norm_label": "covers lines 33-36: get /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_889" }, @@ -51194,7 +54443,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L907", - "community": 99, + "community": 45, "norm_label": "covers line 52: post /prometheus/sessions.", "id": "tests_test_controllers_coverage_rationale_907" }, @@ -51239,7 +54488,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L955", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 83-84, 86: get /prometheus/history/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_955" }, @@ -51248,7 +54497,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L958", - "community": 104, + "community": 256, "norm_label": "covers lines 77, 86: session found with history.", "id": "tests_test_controllers_coverage_rationale_958" }, @@ -51257,7 +54506,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1002", - "community": 104, + "community": 256, "norm_label": "covers lines 83-84: session not found.", "id": "tests_test_controllers_coverage_rationale_1002" }, @@ -51266,7 +54515,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1037", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: delete /prometheus/sessions/{sessionid}.", "id": "tests_test_controllers_coverage_rationale_1037" }, @@ -51275,7 +54524,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1040", - "community": 231, + "community": 584, "norm_label": "covers lines 95-98: session deleted.", "id": "tests_test_controllers_coverage_rationale_1040" }, @@ -51284,7 +54533,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1050", - "community": 231, + "community": 584, "norm_label": "covers lines 96-97: session not found.", "id": "tests_test_controllers_coverage_rationale_1050" }, @@ -51293,7 +54542,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1060", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115, 117-120, 122, 125: post /prometheus/chat.", "id": "tests_test_controllers_coverage_rationale_1060" }, @@ -51302,7 +54551,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1063", - "community": 16, + "community": 148, "norm_label": "covers lines 111-112: sessionid is none, new session created.", "id": "tests_test_controllers_coverage_rationale_1063" }, @@ -51311,7 +54560,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1081", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115, 117-120, 122: existing session with verified ownership.", "id": "tests_test_controllers_coverage_rationale_1081" }, @@ -51320,7 +54569,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1123", - "community": 16, + "community": 148, "norm_label": "covers lines 114-115: session ownership check fails.", "id": "tests_test_controllers_coverage_rationale_1123" }, @@ -51329,7 +54578,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1160", - "community": 16, + "community": 148, "norm_label": "covers line 125, 126-128: generic exception in chat.", "id": "tests_test_controllers_coverage_rationale_1160" }, @@ -51338,7 +54587,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1181", - "community": 498, + "community": 511, "norm_label": "covers line 18: get /stocks/health.", "id": "tests_test_controllers_coverage_rationale_1181" }, @@ -51392,7 +54641,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1262", - "community": 14, + "community": 609, "norm_label": "covers lines 61-63: exception during key generation (admin path).", "id": "tests_test_controllers_coverage_rationale_1262" }, @@ -51401,7 +54650,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1280", - "community": 564, + "community": 568, "norm_label": "covers lines 17, 22-27: user found, role not present, role added.", "id": "tests_test_controllers_coverage_rationale_1280" }, @@ -51410,7 +54659,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1312", - "community": 528, + "community": 568, "norm_label": "covers lines 19-20: user not found raises 404.", "id": "tests_test_controllers_coverage_rationale_1312" }, @@ -51419,7 +54668,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1356", - "community": 569, + "community": 592, "norm_label": "covers lines 42-44: session validation fails.", "id": "tests_test_controllers_coverage_rationale_1356" }, @@ -51428,7 +54677,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1406", - "community": 561, + "community": 560, "norm_label": "covers lines 37-38, 46, 51, 58 (sessionid is none): skips session validation.", "id": "tests_test_controllers_coverage_rationale_1406" }, @@ -51491,7 +54740,7 @@ "file_type": "rationale", "source_file": "tests/test_controllers_coverage.py", "source_location": "L1490", - "community": 498, + "community": 45, "norm_label": "covers line 13: usermanager.__init__.", "id": "tests_test_controllers_coverage_rationale_1490" }, @@ -51500,7 +54749,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L9", - "community": 186, + "community": 611, "norm_label": ".test_creates_new_session()", "id": "tests_test_http_session_coverage_testgetsession_test_creates_new_session" }, @@ -51509,7 +54758,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L28", - "community": 512, + "community": 612, "norm_label": "testcleanup", "id": "tests_test_http_session_coverage_testcleanup" }, @@ -51518,7 +54767,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L29", - "community": 512, + "community": 612, "norm_label": ".test_cleanup_closes_session()", "id": "tests_test_http_session_coverage_testcleanup_test_cleanup_closes_session" }, @@ -51527,7 +54776,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L37", - "community": 512, + "community": 612, "norm_label": ".test_cleanup_no_session()", "id": "tests_test_http_session_coverage_testcleanup_test_cleanup_no_session" }, @@ -51536,7 +54785,7 @@ "file_type": "code", "source_file": "tests/test_http_session_coverage.py", "source_location": "L46", - "community": 512, + "community": 612, "norm_label": ".test_cleanup_exception_during_close()", "id": "tests_test_http_session_coverage_testcleanup_test_cleanup_exception_during_close" }, @@ -51653,7 +54902,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L28", - "community": 68, + "community": 172, "norm_label": "cover __init__ and updatedates (lines 22-37).", "id": "tests_test_prometheus_auth_coverage_rationale_28" }, @@ -51662,7 +54911,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L59", - "community": 68, + "community": 172, "norm_label": "cover executeworkflow (lines 39-363).", "id": "tests_test_prometheus_auth_coverage_rationale_59" }, @@ -51797,7 +55046,7 @@ "file_type": "rationale", "source_file": "tests/test_prometheus_auth_coverage.py", "source_location": "L1110", - "community": 68, + "community": 172, "norm_label": "cover getgooglesso (lines 6-14).", "id": "tests_test_prometheus_auth_coverage_rationale_1110" }, @@ -51914,7 +55163,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L175", - "community": 172, + "community": 595, "norm_label": "testconcurrenthttpproxy", "id": "tests_test_thread_safety_testconcurrenthttpproxy" }, @@ -51923,7 +55172,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L178", - "community": 172, + "community": 595, "norm_label": ".test_proxy_returns_thread_local_sessions()", "id": "tests_test_thread_safety_testconcurrenthttpproxy_test_proxy_returns_thread_local_sessions" }, @@ -51932,7 +55181,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L203", - "community": 172, + "community": 595, "norm_label": ".test_connectivity_uses_getsession()", "id": "tests_test_thread_safety_testconcurrenthttpproxy_test_connectivity_uses_getsession" }, @@ -51941,7 +55190,7 @@ "file_type": "rationale", "source_file": "tests/test_thread_safety.py", "source_location": "L204", - "community": 172, + "community": 595, "norm_label": "connectivity.checkserviceconnection must call getsession(), not use a global ses", "id": "tests_test_thread_safety_rationale_204" }, @@ -51950,7 +55199,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L227", - "community": 571, + "community": 603, "norm_label": "tests covering key.py lines 15-40. uses asyncio.run() since pytest-asyncio", "id": "tests_test_stocks_api_coverage_rationale_227" }, @@ -52094,7 +55343,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L526", - "community": 86, + "community": 105, "norm_label": "regression: is_string_dtype fails when column has strings + none (pandas 2.x).", "id": "tests_test_stocks_api_coverage_rationale_526" }, @@ -52112,7 +55361,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L573", - "community": 86, + "community": 105, "norm_label": "tests covering query.py lines 50-67.", "id": "tests_test_stocks_api_coverage_rationale_573" }, @@ -52193,7 +55442,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L831", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 caught by outer except -> 500.", "id": "tests_test_stocks_api_coverage_rationale_831" }, @@ -52202,7 +55451,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L884", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_884" }, @@ -52211,7 +55460,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L893", - "community": 39, + "community": 17, "norm_label": "dataframe without time column.", "id": "tests_test_stocks_api_coverage_rationale_893" }, @@ -52220,7 +55469,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L906", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_906" }, @@ -52247,7 +55496,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L945", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_945" }, @@ -52256,7 +55505,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L953", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_953" }, @@ -52265,7 +55514,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L961", - "community": 39, + "community": 17, "norm_label": "len(daterange) == 1 -> single date filter.", "id": "tests_test_stocks_api_coverage_rationale_961" }, @@ -52463,7 +55712,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L827", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 caught by outer except -> 500.", "id": "tests_test_stocks_api_coverage_rationale_827" }, @@ -52472,7 +55721,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L876", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_876" }, @@ -52481,7 +55730,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L898", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_898" }, @@ -52508,7 +55757,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L937", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_937" }, @@ -52553,7 +55802,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L826", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 caught by outer except -> 500.", "id": "tests_test_stocks_api_coverage_rationale_826" }, @@ -52580,7 +55829,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L935", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_935" }, @@ -52589,7 +55838,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L943", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_943" }, @@ -52598,7 +55847,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L951", - "community": 39, + "community": 17, "norm_label": "len(daterange) == 1 -> single date filter.", "id": "tests_test_stocks_api_coverage_rationale_951" }, @@ -52688,7 +55937,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L780", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 caught by outer except -> 500.", "id": "tests_test_stocks_api_coverage_rationale_780" }, @@ -52697,7 +55946,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L828", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_828" }, @@ -52706,7 +55955,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L837", - "community": 39, + "community": 17, "norm_label": "dataframe without time column.", "id": "tests_test_stocks_api_coverage_rationale_837" }, @@ -52715,7 +55964,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L850", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_850" }, @@ -52733,7 +55982,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L889", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_889" }, @@ -52742,7 +55991,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L897", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_897" }, @@ -52751,7 +56000,7 @@ "file_type": "rationale", "source_file": "tests/test_connectivity_coverage.py", "source_location": "L8", - "community": 596, + "community": 618, "norm_label": "checkmysqlconnection \u2014 success, errors, engine=none paths.", "id": "tests_test_connectivity_coverage_rationale_8" }, @@ -52760,7 +56009,7 @@ "file_type": "rationale", "source_file": "tests/test_connectivity_coverage.py", "source_location": "L105", - "community": 595, + "community": 617, "norm_label": "checkserviceconnection \u2014 success, not found, errors.", "id": "tests_test_connectivity_coverage_rationale_105" }, @@ -52769,7 +56018,7 @@ "file_type": "rationale", "source_file": "tests/test_status_endpoint.py", "source_location": "L9", - "community": 184, + "community": 188, "norm_label": "create a test client for the status endpoint without running lifespan.", "id": "tests_test_status_endpoint_rationale_9" }, @@ -52859,7 +56108,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L781", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 caught by outer except -> 500.", "id": "tests_test_stocks_api_coverage_rationale_781" }, @@ -52868,7 +56117,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L838", - "community": 39, + "community": 17, "norm_label": "dataframe without time column.", "id": "tests_test_stocks_api_coverage_rationale_838" }, @@ -52877,7 +56126,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L851", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_851" }, @@ -52904,7 +56153,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L890", - "community": 17, + "community": 39, "norm_label": "multiple search terms with tickerindex.", "id": "tests_test_stocks_api_coverage_rationale_890" }, @@ -52931,7 +56180,7 @@ "file_type": "code", "source_file": "main/utils/errors.py", "source_location": "L27", - "community": 530, + "community": 607, "norm_label": "_build_error_response()", "id": "utils_errors_build_error_response" }, @@ -52940,7 +56189,7 @@ "file_type": "code", "source_file": "main/utils/errors.py", "source_location": "L37", - "community": 530, + "community": 607, "norm_label": "http_exception_handler()", "id": "utils_errors_http_exception_handler" }, @@ -52949,7 +56198,7 @@ "file_type": "code", "source_file": "main/utils/errors.py", "source_location": "L44", - "community": 530, + "community": 607, "norm_label": "validation_exception_handler()", "id": "utils_errors_validation_exception_handler" }, @@ -52958,7 +56207,7 @@ "file_type": "code", "source_file": "main/utils/errors.py", "source_location": "L56", - "community": 530, + "community": 607, "norm_label": "generic_exception_handler()", "id": "utils_errors_generic_exception_handler" }, @@ -52967,7 +56216,7 @@ "file_type": "code", "source_file": "main/utils/errors.py", "source_location": "L65", - "community": 104, + "community": 120, "norm_label": "register_error_handlers()", "id": "utils_errors_register_error_handlers" }, @@ -52976,7 +56225,7 @@ "file_type": "code", "source_file": "main/utils/http_session.py", "source_location": "L9", - "community": 580, + "community": 574, "norm_label": "get_session()", "id": "utils_http_session_get_session" }, @@ -52985,7 +56234,7 @@ "file_type": "rationale", "source_file": "main/utils/http_session.py", "source_location": "L10", - "community": 580, + "community": 574, "norm_label": "return a requests.session for the current thread. sessions are created la", "id": "utils_http_session_rationale_10" }, @@ -52994,7 +56243,7 @@ "file_type": "rationale", "source_file": "main/utils/http_session.py", "source_location": "L23", - "community": 512, + "community": 612, "norm_label": "close the main thread's session at interpreter shutdown.", "id": "utils_http_session_rationale_23" }, @@ -53003,7 +56252,7 @@ "file_type": "code", "source_file": "tests/test_thread_safety.py", "source_location": "L203", - "community": 172, + "community": 595, "norm_label": ".test_connectivity_uses_get_session()", "id": "tests_test_thread_safety_testconcurrenthttpproxy_test_connectivity_uses_get_session" }, @@ -53399,7 +56648,7 @@ "file_type": "rationale", "source_file": "main/utils/http_session.py", "source_location": "L9", - "community": 580, + "community": 574, "norm_label": "return a requests.session for the current thread. sessions are created la", "id": "utils_http_session_rationale_9" }, @@ -53417,7 +56666,7 @@ "file_type": "code", "source_file": "main/app/user/user.py", "source_location": "L12", - "community": 498, + "community": 45, "norm_label": ".__init__()", "id": "user_user_usermanager_init" }, @@ -53777,7 +57026,7 @@ "file_type": "rationale", "source_file": "main/utils/errors.py", "source_location": "L68", - "community": 104, + "community": 120, "norm_label": "register exception handlers on the fastapi app. note: httpexception and r", "id": "utils_errors_rationale_68" }, @@ -53894,7 +57143,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L522", - "community": 86, + "community": 105, "norm_label": "tests covering query.py lines 50-67.", "id": "tests_test_stocks_api_coverage_rationale_522" }, @@ -53975,7 +57224,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L775", - "community": 39, + "community": 17, "norm_label": "invalid date -> inner 400 caught by outer except -> 500.", "id": "tests_test_stocks_api_coverage_rationale_775" }, @@ -53984,7 +57233,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L823", - "community": 39, + "community": 17, "norm_label": "search.strip() == '' should still dedup (line 181).", "id": "tests_test_stocks_api_coverage_rationale_823" }, @@ -53993,7 +57242,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L845", - "community": 39, + "community": 17, "norm_label": "two dates in the range, both valid.", "id": "tests_test_stocks_api_coverage_rationale_845" }, @@ -54020,7 +57269,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L892", - "community": 17, + "community": 39, "norm_label": "search with no index match falls back to string startswith.", "id": "tests_test_stocks_api_coverage_rationale_892" }, @@ -54029,7 +57278,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_api_coverage.py", "source_location": "L900", - "community": 39, + "community": 17, "norm_label": "len(daterange) == 1 -> single date filter.", "id": "tests_test_stocks_api_coverage_rationale_900" }, @@ -54038,7 +57287,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L62", - "community": 105, + "community": 251, "norm_label": "testclient with all routers mounted \u2014 no lifespan (no db/service init). o", "id": "tests_conftest_rationale_62" }, @@ -54047,7 +57296,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L61", - "community": 105, + "community": 251, "norm_label": "testclient with all routers mounted \u2014 no lifespan (no db/service init). o", "id": "tests_conftest_rationale_61" }, @@ -54056,7 +57305,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L57", - "community": 105, + "community": 251, "norm_label": "testclient with all routers mounted \u2014 no lifespan (no db/service init). o", "id": "tests_conftest_rationale_57" }, @@ -54065,7 +57314,7 @@ "file_type": "rationale", "source_file": "tests/conftest.py", "source_location": "L49", - "community": 105, + "community": 251, "norm_label": "testclient with all routers mounted \u2014 no lifespan (no db/service init). o", "id": "tests_conftest_rationale_49" }, @@ -54335,7 +57584,7 @@ "file_type": "document", "source_file": "CODE_REVIEW_REPORT.md", "source_location": "L217", - "community": 538, + "community": 587, "norm_label": "category 8: testing gaps (medium)", "id": "server_code_review_report_category_8_testing_gaps_medium" }, @@ -54344,7 +57593,7 @@ "file_type": "document", "source_file": "CODE_REVIEW_REPORT.md", "source_location": "L219", - "community": 538, + "community": 587, "norm_label": "issue 8.1 \u2014 no integration tests for full request lifecycle", "id": "server_code_review_report_issue_8_1_no_integration_tests_for_full_request_lifecycle" }, @@ -54353,7 +57602,7 @@ "file_type": "document", "source_file": "CODE_REVIEW_REPORT.md", "source_location": "L223", - "community": 538, + "community": 587, "norm_label": "issue 8.2 \u2014 no tests for scraper, stocks query, or cache", "id": "server_code_review_report_issue_8_2_no_tests_for_scraper_stocks_query_or_cache" }, @@ -54362,7 +57611,7 @@ "file_type": "document", "source_file": "CODE_REVIEW_REPORT.md", "source_location": "L230", - "community": 538, + "community": 587, "norm_label": "issue 8.3 \u2014 no tests for google oauth callback", "id": "server_code_review_report_issue_8_3_no_tests_for_google_oauth_callback" }, @@ -54371,7 +57620,7 @@ "file_type": "document", "source_file": "CODE_REVIEW_REPORT.md", "source_location": "L234", - "community": 538, + "community": 587, "norm_label": "issue 8.4 \u2014 no tests for session cleanup", "id": "server_code_review_report_issue_8_4_no_tests_for_session_cleanup" }, @@ -54434,7 +57683,7 @@ "file_type": "rationale", "source_file": "main/utils/errors.py", "source_location": "L67", - "community": 104, + "community": 120, "norm_label": "register exception handlers on the fastapi app. note: httpexception and r", "id": "utils_errors_rationale_67" }, @@ -54605,7 +57854,7 @@ "file_type": "code", "source_file": "tests/test_stocks_cache.py", "source_location": "L135", - "community": 590, + "community": 502, "norm_label": "testqueryoptimization", "id": "tests_test_stocks_cache_testqueryoptimization" }, @@ -54614,7 +57863,7 @@ "file_type": "code", "source_file": "tests/test_stocks_cache.py", "source_location": "L138", - "community": 590, + "community": 502, "norm_label": ".test_all_optimizations_present()", "id": "tests_test_stocks_cache_testqueryoptimization_test_all_optimizations_present" }, @@ -54623,7 +57872,7 @@ "file_type": "code", "source_file": "tests/test_stocks_cache.py", "source_location": "L153", - "community": 590, + "community": 502, "norm_label": ".test_query_filter_uses_optimization()", "id": "tests_test_stocks_cache_testqueryoptimization_test_query_filter_uses_optimization" }, @@ -54695,7 +57944,7 @@ "file_type": "code", "source_file": "tests/test_stocks_cache.py", "source_location": "L299", - "community": 502, + "community": 563, "norm_label": "testfilterbysearchterms", "id": "tests_test_stocks_cache_testfilterbysearchterms" }, @@ -54704,7 +57953,7 @@ "file_type": "code", "source_file": "tests/test_stocks_cache.py", "source_location": "L302", - "community": 502, + "community": 563, "norm_label": ".test_filter_with_tickerindex()", "id": "tests_test_stocks_cache_testfilterbysearchterms_test_filter_with_tickerindex" }, @@ -54875,7 +58124,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L136", - "community": 590, + "community": 502, "norm_label": "integration tests for all query optimizations", "id": "tests_test_stocks_cache_rationale_136" }, @@ -54884,7 +58133,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L139", - "community": 590, + "community": 502, "norm_label": "all optimizations should be implemented", "id": "tests_test_stocks_cache_rationale_139" }, @@ -54893,7 +58142,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L154", - "community": 590, + "community": 502, "norm_label": "query filter should use ticker index", "id": "tests_test_stocks_cache_rationale_154" }, @@ -54965,7 +58214,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L300", - "community": 502, + "community": 563, "norm_label": "tests for optimized search filtering", "id": "tests_test_stocks_cache_rationale_300" }, @@ -54974,7 +58223,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L303", - "community": 502, + "community": 563, "norm_label": "filter should use ticker index for o(1) lookup", "id": "tests_test_stocks_cache_rationale_303" }, @@ -55163,7 +58412,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L138", - "community": 590, + "community": 502, "norm_label": "integration tests for all query optimizations", "id": "tests_test_stocks_cache_rationale_138" }, @@ -55172,7 +58421,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L141", - "community": 590, + "community": 502, "norm_label": "all optimizations should be implemented", "id": "tests_test_stocks_cache_rationale_141" }, @@ -55181,7 +58430,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L156", - "community": 590, + "community": 502, "norm_label": "query filter should use ticker index", "id": "tests_test_stocks_cache_rationale_156" }, @@ -55253,7 +58502,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L302", - "community": 502, + "community": 563, "norm_label": "tests for optimized search filtering", "id": "tests_test_stocks_cache_rationale_302" }, @@ -55262,7 +58511,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_cache.py", "source_location": "L305", - "community": 502, + "community": 563, "norm_label": "filter should use ticker index for o(1) lookup", "id": "tests_test_stocks_cache_rationale_305" }, @@ -55352,7 +58601,7 @@ "file_type": "code", "source_file": "tests/test_stocks_cache.py", "source_location": "L304", - "community": 502, + "community": 563, "norm_label": ".test_filter_with_tickerindex()", "id": "tests_test_stocks_cache_testfilterbysearchterms_test_filter_with_tickerIndex" }, @@ -55361,7 +58610,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L1", - "community": 183, + "community": 101, "norm_label": "test_stocks_optimization.py", "id": "tests_test_stocks_optimization_py" }, @@ -55424,7 +58673,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L72", - "community": 101, + "community": 498, "norm_label": "testquerycaching", "id": "tests_test_stocks_optimization_testquerycaching" }, @@ -55433,7 +58682,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L75", - "community": 101, + "community": 498, "norm_label": ".test_cache_manager_has_caches_method()", "id": "tests_test_stocks_optimization_testquerycaching_test_cache_manager_has_caches_method" }, @@ -55442,7 +58691,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L83", - "community": 101, + "community": 498, "norm_label": ".test_querycache_ttl_configuration()", "id": "tests_test_stocks_optimization_testquerycaching_test_queryCache_ttl_configuration" }, @@ -55451,7 +58700,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L91", - "community": 101, + "community": 498, "norm_label": ".test_get_cached_stocks_respects_columns_parameter()", "id": "tests_test_stocks_optimization_testquerycaching_test_get_cached_stocks_respects_columns_parameter" }, @@ -55460,7 +58709,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L101", - "community": 101, + "community": 498, "norm_label": ".test_different_queries_not_cached()", "id": "tests_test_stocks_optimization_testquerycaching_test_different_queries_not_cached" }, @@ -55469,7 +58718,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L105", - "community": 101, + "community": 498, "norm_label": ".test_cache_expiry_after_ttl()", "id": "tests_test_stocks_optimization_testquerycaching_test_cache_expiry_after_ttl" }, @@ -55478,7 +58727,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L111", - "community": 183, + "community": 101, "norm_label": "testconnectionpool", "id": "tests_test_stocks_optimization_testconnectionpool" }, @@ -55487,7 +58736,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L114", - "community": 183, + "community": 101, "norm_label": ".test_stocks_engine_has_pool_configuration()", "id": "tests_test_stocks_optimization_testconnectionpool_test_stocks_engine_has_pool_configuration" }, @@ -55496,7 +58745,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L123", - "community": 183, + "community": 101, "norm_label": "testlazydeserialization", "id": "tests_test_stocks_optimization_testlazydeserialization" }, @@ -55505,7 +58754,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L126", - "community": 183, + "community": 101, "norm_label": ".test_query_manager_has_deserialize_method()", "id": "tests_test_stocks_optimization_testlazydeserialization_test_query_manager_has_deserialize_method" }, @@ -55514,7 +58763,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L137", - "community": 183, + "community": 101, "norm_label": "testqueryoptimization", "id": "tests_test_stocks_optimization_testqueryoptimization" }, @@ -55523,7 +58772,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L140", - "community": 183, + "community": 101, "norm_label": ".test_all_optimizations_present()", "id": "tests_test_stocks_optimization_testqueryoptimization_test_all_optimizations_present" }, @@ -55532,7 +58781,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L155", - "community": 183, + "community": 101, "norm_label": ".test_query_filter_uses_optimization()", "id": "tests_test_stocks_optimization_testqueryoptimization_test_query_filter_uses_optimization" }, @@ -55604,7 +58853,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L301", - "community": 183, + "community": 101, "norm_label": "testfilterbysearchterms", "id": "tests_test_stocks_optimization_testfilterbysearchterms" }, @@ -55613,7 +58862,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L304", - "community": 183, + "community": 101, "norm_label": ".test_filter_with_tickerindex()", "id": "tests_test_stocks_optimization_testfilterbysearchterms_test_filter_with_tickerIndex" }, @@ -55622,7 +58871,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L310", - "community": 183, + "community": 101, "norm_label": "testqueryperformance", "id": "tests_test_stocks_optimization_testqueryperformance" }, @@ -55631,7 +58880,7 @@ "file_type": "code", "source_file": "tests/test_stocks_optimization.py", "source_location": "L313", - "community": 183, + "community": 101, "norm_label": ".test_query_response_time_under_1_second()", "id": "tests_test_stocks_optimization_testqueryperformance_test_query_response_time_under_1_second" }, @@ -55694,7 +58943,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L73", - "community": 101, + "community": 498, "norm_label": "tests for query result caching", "id": "tests_test_stocks_optimization_rationale_73" }, @@ -55703,7 +58952,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L76", - "community": 101, + "community": 498, "norm_label": "cachemanager should track cached queries", "id": "tests_test_stocks_optimization_rationale_76" }, @@ -55712,7 +58961,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L84", - "community": 101, + "community": 498, "norm_label": "query cache should have configurable ttl", "id": "tests_test_stocks_optimization_rationale_84" }, @@ -55721,7 +58970,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L92", - "community": 101, + "community": 498, "norm_label": "getcachedstocks should support column filtering", "id": "tests_test_stocks_optimization_rationale_92" }, @@ -55730,7 +58979,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L102", - "community": 101, + "community": 498, "norm_label": "different query parameters should not share cache", "id": "tests_test_stocks_optimization_rationale_102" }, @@ -55739,7 +58988,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L106", - "community": 101, + "community": 498, "norm_label": "cache should expire after ttl", "id": "tests_test_stocks_optimization_rationale_106" }, @@ -55748,7 +58997,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L112", - "community": 183, + "community": 101, "norm_label": "tests for connection pool configuration", "id": "tests_test_stocks_optimization_rationale_112" }, @@ -55757,7 +59006,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L115", - "community": 183, + "community": 101, "norm_label": "stocks engine should have optimized pool settings", "id": "tests_test_stocks_optimization_rationale_115" }, @@ -55766,7 +59015,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L124", - "community": 183, + "community": 101, "norm_label": "tests for lazy json deserialization", "id": "tests_test_stocks_optimization_rationale_124" }, @@ -55775,7 +59024,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L127", - "community": 183, + "community": 101, "norm_label": "query manager should have deserialize method", "id": "tests_test_stocks_optimization_rationale_127" }, @@ -55784,7 +59033,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L138", - "community": 183, + "community": 101, "norm_label": "integration tests for all query optimizations", "id": "tests_test_stocks_optimization_rationale_138" }, @@ -55793,7 +59042,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L141", - "community": 183, + "community": 101, "norm_label": "all optimizations should be implemented", "id": "tests_test_stocks_optimization_rationale_141" }, @@ -55802,7 +59051,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L156", - "community": 183, + "community": 101, "norm_label": "query filter should use ticker index", "id": "tests_test_stocks_optimization_rationale_156" }, @@ -55874,7 +59123,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L302", - "community": 183, + "community": 101, "norm_label": "tests for optimized search filtering", "id": "tests_test_stocks_optimization_rationale_302" }, @@ -55883,7 +59132,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L305", - "community": 183, + "community": 101, "norm_label": "filter should use ticker index for o(1) lookup", "id": "tests_test_stocks_optimization_rationale_305" }, @@ -55892,7 +59141,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L311", - "community": 183, + "community": 101, "norm_label": "performance tests for query operations", "id": "tests_test_stocks_optimization_rationale_311" }, @@ -55901,7 +59150,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L314", - "community": 183, + "community": 101, "norm_label": "query should respond within 1 second", "id": "tests_test_stocks_optimization_rationale_314" }, @@ -55919,7 +59168,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L173", - "community": 183, + "community": 101, "norm_label": "tests for optimized search filtering", "id": "tests_test_stocks_optimization_rationale_173" }, @@ -55928,7 +59177,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L176", - "community": 183, + "community": 101, "norm_label": "filter should use ticker index for o(1) lookup", "id": "tests_test_stocks_optimization_rationale_176" }, @@ -55937,7 +59186,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L182", - "community": 183, + "community": 101, "norm_label": "performance tests for query operations", "id": "tests_test_stocks_optimization_rationale_182" }, @@ -55946,7 +59195,7 @@ "file_type": "rationale", "source_file": "tests/test_stocks_optimization.py", "source_location": "L185", - "community": 183, + "community": 101, "norm_label": "query should respond within 1 second", "id": "tests_test_stocks_optimization_rationale_185" }, @@ -56269,7 +59518,7 @@ "label": "Authentication System", "file_type": "document", "source_file": "docs/authentication.md", - "community": 43, + "community": 606, "norm_label": "authentication system", "id": "authentication" }, @@ -56277,7 +59526,7 @@ "label": "JWT Authentication", "file_type": "rationale", "source_file": "docs/authentication.md", - "community": 43, + "community": 606, "norm_label": "jwt authentication", "id": "jwt" }, @@ -56285,7 +59534,7 @@ "label": "Google OAuth", "file_type": "rationale", "source_file": "docs/authentication.md", - "community": 43, + "community": 606, "norm_label": "google oauth", "id": "google_oauth" }, @@ -56373,7 +59622,7 @@ "label": "Pytest Testing", "file_type": "rationale", "source_file": "pyproject.toml", - "community": 251, + "community": 93, "norm_label": "pytest testing", "id": "pytest" }, @@ -57000,32 +60249,32 @@ { "relation": "uses", "confidence": "INFERRED", - "source_file": "main/service/authentication_service.py", - "source_location": "L2", + "source_file": "main/service/scraper_service.py", + "source_location": "L7", "weight": 0.8, "confidence_score": 0.5, "source": "server_config_config", - "target": "service_authentication_service_authenticationservice" + "target": "service_scraper_service_scraperservice" }, { "relation": "uses", "confidence": "INFERRED", - "source_file": "main/service/scraper_service.py", - "source_location": "L7", + "source_file": "main/utils/logging_config.py", + "source_location": "L6", "weight": 0.8, "confidence_score": 0.5, "source": "server_config_config", - "target": "service_scraper_service_scraperservice" + "target": "utils_logging_config_discordhandler" }, { "relation": "uses", "confidence": "INFERRED", - "source_file": "main/utils/logging_config.py", - "source_location": "L6", + "source_file": "main/service/authentication_service.py", + "source_location": "L2", "weight": 0.8, "confidence_score": 0.5, "source": "server_config_config", - "target": "utils_logging_config_discordhandler" + "target": "service_authentication_service_authenticationservice" }, { "relation": "uses", @@ -65348,6 +68597,16 @@ "source": "main_app_stocks_api_cache_py", "target": "stocks_api_cache_buildtickerindex" }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/app/stocks_api/cache.py", + "source_location": "L206", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_app_stocks_api_cache_py", + "target": "stocks_api_cache_readfeatherdataframe" + }, { "relation": "contains", "confidence": "EXTRACTED", @@ -65474,6 +68733,17 @@ "source": "stocks_api_cache_rationale_191", "target": "stocks_api_cache_buildtickerindex" }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "main/app/stocks_api/cache.py", + "source_location": "L238", + "weight": 1.0, + "confidence_score": 1.0, + "source": "stocks_api_cache_stockscachemanager_loadfromfeather", + "target": "stocks_api_cache_readfeatherdataframe" + }, { "relation": "method", "confidence": "EXTRACTED", @@ -66350,6 +69620,17 @@ "source": "stocks_api_cache_stockscachemanager_loadfromfeather", "target": "stocks_api_compress_rebuildabbrevs" }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "main/app/stocks_api/cache.py", + "source_location": "L255", + "weight": 1.0, + "source": "stocks_api_cache_stockscachemanager_loadfromfeather", + "target": "stocks_api_sync_cache_clearendpointcache" + }, { "relation": "calls", "context": "call", @@ -67742,6 +71023,16 @@ "source": "main_app_stocks_api_sync_cache_py", "target": "stocks_api_sync_cache_cache" }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/app/stocks_api/sync_cache.py", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_app_stocks_api_sync_cache_py", + "target": "stocks_api_sync_cache_clearendpointcache" + }, { "relation": "contains", "confidence": "EXTRACTED", @@ -67752,6 +71043,16 @@ "source": "main_app_stocks_api_sync_cache_py", "target": "stocks_api_sync_cache_sync_cache" }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/app/stocks_api/sync_cache.py", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "stocks_api_sync_cache_rationale_38", + "target": "stocks_api_sync_cache_clearendpointcache" + }, { "relation": "imports_from", "context": "import", @@ -69643,10 +72944,10 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L39", + "source_location": "L45", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_39", + "source": "controller_stocksapi_controller_rationale_45", "target": "controller_stocksapi_controller_listfields" }, { @@ -69659,6 +72960,16 @@ "source": "controller_stocksapi_controller_rationale_47", "target": "controller_stocksapi_controller_listfields" }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "controller_stocksapi_controller_rationale_39", + "target": "controller_stocksapi_controller_listfields" + }, { "relation": "rationale_for", "confidence": "EXTRACTED", @@ -69744,10 +73055,10 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L95", + "source_location": "L102", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_95", + "source": "controller_stocksapi_controller_rationale_102", "target": "controller_stocksapi_controller_gethistorical" }, { @@ -69760,6 +73071,16 @@ "source": "controller_stocksapi_controller_rationale_103", "target": "controller_stocksapi_controller_gethistorical" }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L95", + "weight": 1.0, + "confidence_score": 1.0, + "source": "controller_stocksapi_controller_rationale_95", + "target": "controller_stocksapi_controller_gethistorical" + }, { "relation": "rationale_for", "confidence": "EXTRACTED", @@ -69855,10 +73176,10 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L160", + "source_location": "L167", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_160", + "source": "controller_stocksapi_controller_rationale_167", "target": "controller_stocksapi_controller_getfundamental" }, { @@ -69875,40 +73196,40 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L157", + "source_location": "L160", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_157", + "source": "controller_stocksapi_controller_rationale_160", "target": "controller_stocksapi_controller_getfundamental" }, { "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L161", + "source_location": "L157", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_161", + "source": "controller_stocksapi_controller_rationale_157", "target": "controller_stocksapi_controller_getfundamental" }, { "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L169", + "source_location": "L161", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_169", + "source": "controller_stocksapi_controller_rationale_161", "target": "controller_stocksapi_controller_getfundamental" }, { "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L167", + "source_location": "L169", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_167", + "source": "controller_stocksapi_controller_rationale_169", "target": "controller_stocksapi_controller_getfundamental" }, { @@ -69976,10 +73297,10 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L228", + "source_location": "L235", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_228", + "source": "controller_stocksapi_controller_rationale_235", "target": "controller_stocksapi_controller_getcotations" }, { @@ -69992,6 +73313,16 @@ "source": "controller_stocksapi_controller_rationale_236", "target": "controller_stocksapi_controller_getcotations" }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L228", + "weight": 1.0, + "confidence_score": 1.0, + "source": "controller_stocksapi_controller_rationale_228", + "target": "controller_stocksapi_controller_getcotations" + }, { "relation": "rationale_for", "confidence": "EXTRACTED", @@ -70087,10 +73418,10 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "main/controller/stocksapi_controller.py", - "source_location": "L282", + "source_location": "L289", "weight": 1.0, "confidence_score": 1.0, - "source": "controller_stocksapi_controller_rationale_282", + "source": "controller_stocksapi_controller_rationale_289", "target": "controller_stocksapi_controller_getlivecotation" }, { @@ -70103,6 +73434,16 @@ "source": "controller_stocksapi_controller_rationale_290", "target": "controller_stocksapi_controller_getlivecotation" }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/controller/stocksapi_controller.py", + "source_location": "L282", + "weight": 1.0, + "confidence_score": 1.0, + "source": "controller_stocksapi_controller_rationale_282", + "target": "controller_stocksapi_controller_getlivecotation" + }, { "relation": "rationale_for", "confidence": "EXTRACTED", @@ -73862,5626 +77203,9046 @@ "target": "tests_test_controllers_coverage_testissecurescheme" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testhealthendpoint" + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testhealthendpoint" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testregisterendpoint" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testloginendpoint" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testlogoutendpoint" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testgooglelogin" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testgooglecallback" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testuserhealth" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testgetme" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testupgradeendpoints" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testadminaccess" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testgetsessions" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testgetcurrentsession" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testrevokesession" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testrevokeallsessions" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testprometheushealth" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testprometheusgetsessions" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testprometheuscreatesession" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testprometheusupdatesessiontitle" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testprometheusgethistory" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testprometheusdeletesession" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testprometheuschat" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_teststocksapihealth" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_teststocksapikeytest" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_teststocksapihistorical" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_teststocksapifundamental" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_teststocksapigeneratekey" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testaddroletouser" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testgetcurrentuser" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testhashpasswordempty" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testverifyaccesstoken" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testextracttokenpayloadreraise" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/test_controllers_coverage.py", + "source_location": "L61", + "weight": 0.8, + "confidence_score": 0.5, + "source": "utils_roles_roles", + "target": "tests_test_controllers_coverage_testmanagerinit" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/scheduler.py", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_scheduler_py", + "target": "utils_scheduler_getsharedscheduler" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/scheduler.py", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_scheduler_py", + "target": "utils_scheduler_registerjob" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/utils/scheduler.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "utils_scheduler_rationale_1", + "target": "main_utils_scheduler_py" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "main/utils/scheduler.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "utils_scheduler_registerjob", + "target": "utils_scheduler_getsharedscheduler" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/utils/scheduler.py", + "source_location": "L33", + "weight": 1.0, + "confidence_score": 1.0, + "source": "utils_scheduler_rationale_33", + "target": "utils_scheduler_getsharedscheduler" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "main/service/prometheus_service.py", + "source_location": "L70", + "weight": 1.0, + "source": "service_prometheus_service_initialize", + "target": "utils_scheduler_registerjob" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "main/service/user_service.py", + "source_location": "L55", + "weight": 1.0, + "source": "service_user_service_registersessioncleanupjobs", + "target": "utils_scheduler_registerjob" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "main/service/prometheus_service.py", + "source_location": "L69", + "weight": 1.0, + "source": "service_prometheus_service_registermemorymaintenancejob", + "target": "utils_scheduler_registerjob" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "main/utils/scheduler.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "utils_scheduler_rationale_43", + "target": "utils_scheduler_registerjob" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "main/utils/service_manager.py", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_service_manager_py", + "target": "fastapi" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/service_manager.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_service_manager_py", + "target": "utils_service_manager_getapp" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/service_manager.py", + "source_location": "L48", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_service_manager_py", + "target": "utils_service_manager_runall" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/service_manager.py", + "source_location": "L16", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_service_manager_py", + "target": "utils_service_manager_servicemanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "main/service/prometheus_service.py", + "source_location": "L64", + "weight": 1.0, + "source": "service_prometheus_service_initialize", + "target": "utils_service_manager_getapp" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/models/loader.py", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_models_loader_py", + "target": "models_loader_getembeddingmodel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/models/loader.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_models_loader_py", + "target": "models_loader_embed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "main/utils/models/loader.py", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "main_utils_models_loader_py", + "target": "models_loader_downloadmodel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "main/app/prometheus/vector.py", + "source_location": "L11", + "weight": 1.0, + "source": "prometheus_vector_embed", + "target": "models_loader_getembeddingmodel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "main/service/prometheus_service.py", + "source_location": "L12", + "weight": 1.0, + "source": "service_prometheus_service_initialize", + "target": "models_loader_getembeddingmodel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "main/utils/models/loader.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "models_loader_getembeddingmodel", + "target": "models_loader_embed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "main/utils/models/loader.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "models_loader_getembeddingmodel", + "target": "models_loader_downloadmodel" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/env.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_env_py", + "target": "migrations_env_getdatabaseurl" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/env.py", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_env_py", + "target": "migrations_env_runmigrationsoffline" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/env.py", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_env_py", + "target": "migrations_env_runmigrationsonline" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "migrations/env.py", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_env_getdatabaseurl", + "target": "migrations_env_runmigrationsoffline" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "migrations/env.py", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_env_getdatabaseurl", + "target": "migrations_env_runmigrationsonline" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/25af7ad931e7_initial_migration.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_25af7ad931e7_initial_migration_py", + "target": "versions_25af7ad931e7_initial_migration_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/25af7ad931e7_initial_migration.py", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_25af7ad931e7_initial_migration_py", + "target": "versions_25af7ad931e7_initial_migration_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/25af7ad931e7_initial_migration.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_25af7ad931e7_initial_migration_py", + "target": "versions_25af7ad931e7_initial_migration_rationale_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/4a2f1c9e3b5d_user_sessions.py", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_4a2f1c9e3b5d_user_sessions_py", + "target": "versions_4a2f1c9e3b5d_user_sessions_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/4a2f1c9e3b5d_user_sessions.py", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_4a2f1c9e3b5d_user_sessions_py", + "target": "versions_4a2f1c9e3b5d_user_sessions_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/4a2f1c9e3b5d_user_sessions.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_4a2f1c9e3b5d_user_sessions_py", + "target": "versions_4a2f1c9e3b5d_user_sessions_rationale_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_9f3b339dde20_drop_unused_user_sessions_columns_py", + "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_9f3b339dde20_drop_unused_user_sessions_columns_py", + "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_9f3b339dde20_drop_unused_user_sessions_columns_py", + "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_rationale_1" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", + "source_location": "L44", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_9f3b339dde20_drop_unused_user_sessions_columns_upgrade", + "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_rationale_44" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_9f3b339dde20_drop_unused_user_sessions_columns_downgrade", + "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_rationale_51" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/add_access_token_hash.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_add_access_token_hash_py", + "target": "versions_add_access_token_hash_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/add_access_token_hash.py", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_add_access_token_hash_py", + "target": "versions_add_access_token_hash_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/add_access_token_hash.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_add_access_token_hash_py", + "target": "versions_add_access_token_hash_rationale_1" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/add_access_token_hash.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_add_access_token_hash_upgrade", + "target": "versions_add_access_token_hash_rationale_22" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/add_access_token_hash.py", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_add_access_token_hash_downgrade", + "target": "versions_add_access_token_hash_rationale_55" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", + "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", + "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", + "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_fix_partial" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", + "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_rationale_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/c2e4f6a8b0c1_drop_embedding_model_version.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_c2e4f6a8b0c1_drop_embedding_model_version_py", + "target": "versions_c2e4f6a8b0c1_drop_embedding_model_version_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/c2e4f6a8b0c1_drop_embedding_model_version.py", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_c2e4f6a8b0c1_drop_embedding_model_version_py", + "target": "versions_c2e4f6a8b0c1_drop_embedding_model_version_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/c2e4f6a8b0c1_drop_embedding_model_version.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_c2e4f6a8b0c1_drop_embedding_model_version_py", + "target": "versions_c2e4f6a8b0c1_drop_embedding_model_version_rationale_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/d3df3fc5ca72_rename_memory_base_score.py", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_d3df3fc5ca72_rename_memory_base_score_py", + "target": "versions_d3df3fc5ca72_rename_memory_base_score_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/d3df3fc5ca72_rename_memory_base_score.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_d3df3fc5ca72_rename_memory_base_score_py", + "target": "versions_d3df3fc5ca72_rename_memory_base_score_downgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/d3e4f5a6b7c8_add_prometheus_sandboxes.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_d3e4f5a6b7c8_add_prometheus_sandboxes_py", + "target": "versions_d3e4f5a6b7c8_add_prometheus_sandboxes_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/d3e4f5a6b7c8_add_prometheus_sandboxes.py", + "source_location": "L36", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_d3e4f5a6b7c8_add_prometheus_sandboxes_py", + "target": "versions_d3e4f5a6b7c8_add_prometheus_sandboxes_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/d3e4f5a6b7c8_add_prometheus_sandboxes.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_d3e4f5a6b7c8_add_prometheus_sandboxes_py", + "target": "versions_d3e4f5a6b7c8_add_prometheus_sandboxes_rationale_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories.py", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_py", + "target": "versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories.py", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_py", + "target": "versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_rationale_1", + "target": "migrations_versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes.py", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_py", + "target": "versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_py", + "target": "versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_rationale_1", + "target": "migrations_versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/f1a2b3c4d5e6_session_gc_index.py", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_f1a2b3c4d5e6_session_gc_index_py", + "target": "versions_f1a2b3c4d5e6_session_gc_index_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/f1a2b3c4d5e6_session_gc_index.py", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_f1a2b3c4d5e6_session_gc_index_py", + "target": "versions_f1a2b3c4d5e6_session_gc_index_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/f1a2b3c4d5e6_session_gc_index.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_f1a2b3c4d5e6_session_gc_index_rationale_1", + "target": "migrations_versions_f1a2b3c4d5e6_session_gc_index_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/f7a8b9c0d1e2_rename_prometheus_to_orunmila.py", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_py", + "target": "versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_upgrade" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/f7a8b9c0d1e2_rename_prometheus_to_orunmila.py", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "migrations_versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_py", + "target": "versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_downgrade" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "migrations/versions/f7a8b9c0d1e2_rename_prometheus_to_orunmila.py", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_rationale_1", + "target": "migrations_versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_project_overview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L4", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_dev_commands" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L23", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_architecture" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_testing" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_graphify" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_swarm_delegation_default" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_stocks_api_pandas_first_pattern" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_scraper_b3_xango_batch_data_pipeline" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L60", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_auth_users_dual_layer_session_security" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_key_quirks" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "agents_md", + "target": "server_agents_prometheus_ai_chat_strengths_gaps" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_agents_dev_commands", + "target": "server_agents_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_agents_dev_commands", + "target": "server_agents_ci_pipeline_order" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "readme_md", + "target": "server_readme_mansa_server" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_readme_mansa_server", + "target": "server_readme_run_with_docker" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_readme_mansa_server", + "target": "server_readme_environment_setup" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_readme_mansa_server", + "target": "server_readme_health_check" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_readme_mansa_server", + "target": "server_readme_license" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_readme_run_with_docker", + "target": "server_readme_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L24", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_readme_environment_setup", + "target": "server_readme_codeblock_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_readme_health_check", + "target": "server_readme_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "TODO.md", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "todo_md", + "target": "server_todo_user_structure_defined_by_string_roles" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "TODO.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "todo_md", + "target": "server_todo_priorities_active_order_2026_09_29" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "TODO.md", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_todo_user_structure_defined_by_string_roles", + "target": "server_todo_user" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "TODO.md", + "source_location": "L37", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_todo_user_structure_defined_by_string_roles", + "target": "server_todo_premium" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "TODO.md", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_todo_user_structure_defined_by_string_roles", + "target": "server_todo_developer" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "TODO.md", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_todo_user_structure_defined_by_string_roles", + "target": "server_todo_stocks_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "TODO.md", + "source_location": "L70", + "weight": 1.0, + "confidence_score": 1.0, + "source": "server_todo_user_structure_defined_by_string_roles", + "target": "server_todo_prometheus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_md", + "target": "docs_authentication_authentication_management" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_token_session_lifetime" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_token_extraction_order" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_cookie_handling_conditional_secure" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_session_data_model_family_only" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_roles_and_permissions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L61", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_rate_limits" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_api_endpoints" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L117", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_security_features" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L138", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_not_implemented" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L154", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_workflow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L187", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_license" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_usage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_device_detection" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_authentication_management", + "target": "docs_authentication_session_management" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L51", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_health_check" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L57", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_user_registration" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_user_login" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_logout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_google_oauth2_login" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_google_callback_cookie_only" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L77", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_profile_me" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L108", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_api_endpoints", + "target": "docs_authentication_google_callback" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_health_check", + "target": "docs_authentication_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_health_check", + "target": "docs_authentication_codeblock_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_usage", + "target": "docs_authentication_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L84", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_user_registration", + "target": "docs_authentication_codeblock_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_user_registration", + "target": "docs_authentication_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_user_login", + "target": "docs_authentication_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_user_login", + "target": "docs_authentication_codeblock_4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_logout", + "target": "docs_authentication_codeblock_4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_logout", + "target": "docs_authentication_codeblock_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_google_oauth2_login", + "target": "docs_authentication_codeblock_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_google_oauth2_login", + "target": "docs_authentication_codeblock_7" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_google_oauth2_login", + "target": "docs_authentication_codeblock_8" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_profile_me", + "target": "docs_authentication_codeblock_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L144", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_workflow", + "target": "docs_authentication_codeblock_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/authentication.md", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_authentication_workflow", + "target": "docs_authentication_codeblock_9" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_md", + "target": "docs_orunmila_orunmila" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_orunmila", + "target": "docs_orunmila_usage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_orunmila", + "target": "docs_orunmila_workflow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_orunmila", + "target": "docs_orunmila_api_endpoints" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_orunmila", + "target": "docs_orunmila_license" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_usage", + "target": "docs_orunmila_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_usage", + "target": "docs_orunmila_codeblock_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/orunmila.md", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_orunmila_workflow", + "target": "docs_orunmila_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_md", + "target": "docs_scraper_b3_b3_market_scraper" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_md", + "target": "docs_scraper_b3_brazilian_stocks_market_scraper" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_b3_market_scraper", + "target": "docs_scraper_b3_sources_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_b3_market_scraper", + "target": "docs_scraper_b3_scheduling_config_config_py_77_81_scraper_service_py_23_36" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_b3_market_scraper", + "target": "docs_scraper_b3_xango_score_main_app_scraper_b3_xango_py" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_b3_market_scraper", + "target": "docs_scraper_b3_outputs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L21", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_scheduling_config_config_py_77_81_scraper_service_py_23_36", + "target": "docs_scraper_b3_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/scraper_b3.md", + "source_location": "L8", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_scraper_b3_usage", + "target": "docs_scraper_b3_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_md", + "target": "docs_stocks_api_brazilian_stocks_market_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L7", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_brazilian_stocks_market_api", + "target": "docs_stocks_api_usage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L22", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_brazilian_stocks_market_api", + "target": "docs_stocks_api_auth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_brazilian_stocks_market_api", + "target": "docs_stocks_api_api_endpoints" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L90", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_brazilian_stocks_market_api", + "target": "docs_stocks_api_response_format" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L119", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_brazilian_stocks_market_api", + "target": "docs_stocks_api_architecture" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L113", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_brazilian_stocks_market_api", + "target": "docs_stocks_api_license" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L9", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_usage", + "target": "docs_stocks_api_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L34", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_health_check" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_field_discovery" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_historical_data" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_fundamental_data" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_cotations_10_year_daily_history" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_live_price" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_mcp_ai_agent_tools" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_api_key_verification" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L45", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_endpoints", + "target": "docs_stocks_api_key_management" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_health_check", + "target": "docs_stocks_api_codeblock_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L42", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_field_discovery", + "target": "docs_stocks_api_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_api_key_verification", + "target": "docs_stocks_api_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L50", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_historical_data", + "target": "docs_stocks_api_codeblock_4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_historical_data", + "target": "docs_stocks_api_codeblock_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L68", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_historical_data", + "target": "docs_stocks_api_codeblock_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_key_management", + "target": "docs_stocks_api_codeblock_4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_fundamental_data", + "target": "docs_stocks_api_codeblock_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_fundamental_data", + "target": "docs_stocks_api_codeblock_7" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_fundamental_data", + "target": "docs_stocks_api_codeblock_8" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L76", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_cotations_10_year_daily_history", + "target": "docs_stocks_api_codeblock_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L89", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_live_price", + "target": "docs_stocks_api_codeblock_7" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_response_format", + "target": "docs_stocks_api_codeblock_8" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/stocks_api.md", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_stocks_api_response_format", + "target": "docs_stocks_api_codeblock_9" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_md", + "target": "docs_user_user_management" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L5", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_roles_and_permissions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_api_endpoints" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_session_management" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L112", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_api_keys_stocks_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_rate_limits_related_services" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_not_implemented" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L156", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_workflow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L177", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_license" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L140", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_user_management", + "target": "docs_user_permission_system" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L19", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_api_endpoints", + "target": "docs_user_health_check" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L25", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_api_endpoints", + "target": "docs_user_get_profile" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L53", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_api_endpoints", + "target": "docs_user_admin_access" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_api_endpoints", + "target": "docs_user_upgrade_to_developer_starter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L47", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_api_endpoints", + "target": "docs_user_upgrade_to_developer_enterprise" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L20", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_health_check", + "target": "docs_user_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L27", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_get_profile", + "target": "docs_user_codeblock_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L31", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_get_profile", + "target": "docs_user_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L39", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_admin_access", + "target": "docs_user_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_admin_access", + "target": "docs_user_codeblock_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L63", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_session_management", + "target": "docs_user_list_all_sessions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_session_management", + "target": "docs_user_get_current_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L114", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_session_management", + "target": "docs_user_revoke_a_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L127", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_session_management", + "target": "docs_user_revoke_all_sessions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L55", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_list_all_sessions", + "target": "docs_user_codeblock_4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L59", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_list_all_sessions", + "target": "docs_user_codeblock_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_list_all_sessions", + "target": "docs_user_codeblock_7" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L69", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_list_all_sessions", + "target": "docs_user_codeblock_8" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L43", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_upgrade_to_developer_starter", + "target": "docs_user_codeblock_4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_upgrade_to_developer_enterprise", + "target": "docs_user_codeblock_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L83", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_get_current_session", + "target": "docs_user_codeblock_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_get_current_session", + "target": "docs_user_codeblock_9" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_get_current_session", + "target": "docs_user_codeblock_10" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L91", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_revoke_a_session", + "target": "docs_user_codeblock_7" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L116", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_revoke_a_session", + "target": "docs_user_codeblock_11" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L120", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_revoke_a_session", + "target": "docs_user_codeblock_12" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L101", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_revoke_all_sessions", + "target": "docs_user_codeblock_8" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L105", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_revoke_all_sessions", + "target": "docs_user_codeblock_9" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L129", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_revoke_all_sessions", + "target": "docs_user_codeblock_13" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_revoke_all_sessions", + "target": "docs_user_codeblock_14" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L141", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_workflow", + "target": "docs_user_codeblock_10" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/user.md", + "source_location": "L158", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_user_workflow", + "target": "docs_user_codeblock_16" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_investidor10_wallet_research_md", + "target": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L10", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "superpowers_investidor10_wallet_research_1_feature_inventory_nav_structure" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L30", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "superpowers_investidor10_wallet_research_2_user_lifecycle_end_to_end" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L40", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "superpowers_investidor10_wallet_research_3_wallet_api_reference" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L65", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "superpowers_investidor10_wallet_research_4_data_model_inference_from_payloads_no_db_access" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L74", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "superpowers_investidor10_wallet_research_5_product_logic" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "superpowers_investidor10_wallet_research_5b_gaps_unverified_do_not_treat_as_fact" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-research.md", + "source_location": "L86", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "superpowers_investidor10_wallet_research_6_concrete_mansa_proposal_build_first_later_minimal_sketches" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_investidor10_wallet_spec_md", + "target": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L12", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_1_requirements" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L38", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_2_domain_model" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_3_api_contracts_all_under_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_4_phased_build_plan_writing_plans_each_phase_independently_reviewable_reviewer_pass_per_phase" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L72", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_5_risks_assumptions_honest_flags_carried_over_do_not_treat_as_fact" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L81", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L121", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_7_independent_re_verification_swarm_s4_2026_09_29_corrections_to_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L49", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "superpowers_investidor10_wallet_spec_3_api_contracts_all_under_api_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L14", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_1_requirements", + "target": "superpowers_investidor10_wallet_spec_1_1_functional_per_surface_tags_exists_build_on_it_partial_half_reusable_missing_greenfield" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L28", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_1_requirements", + "target": "superpowers_investidor10_wallet_spec_1_2_non_functional" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L87", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_1_db_migrations_user_db_contested_7_1_3_actions_incl_one_destructive_autogenerate_risk" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L94", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_2_stocks_price_access_confirmed_extended_7_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L100", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_3_wiring_auth_tests_contested_7_3_mounting_true_gating_test_seams_missing" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L106", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_4_scraper_pipeline_p2_dividends_has_b3_contested_7_4_data_present_source_staleness_gaps" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L110", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_5_ordered_actions_before_p1_code" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L85", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_1_db_migrations_user_db_ready_2_actions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L92", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_2_stocks_price_access_ready_for_full_series_one_new_helper_needed" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_3_wiring_auth_tests_ready" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L104", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "superpowers_investidor10_wallet_spec_6_4_scraper_pipeline_p2_dividends_has_b3_ready_public_sources_only" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L125", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_7_independent_re_verification_swarm_s4_2026_09_29_corrections_to_6", + "target": "superpowers_investidor10_wallet_spec_7_1_db_migrations_6_1_contested_3_actions_one_destructive_risk" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L133", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_7_independent_re_verification_swarm_s4_2026_09_29_corrections_to_6", + "target": "superpowers_investidor10_wallet_spec_7_2_stocks_price_access_6_2_confirmed_incomplete" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L143", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_7_independent_re_verification_swarm_s4_2026_09_29_corrections_to_6", + "target": "superpowers_investidor10_wallet_spec_7_3_wiring_auth_tests_6_3_contested_mounting_true" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L150", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_7_independent_re_verification_swarm_s4_2026_09_29_corrections_to_6", + "target": "superpowers_investidor10_wallet_spec_7_4_scraper_pipeline_6_4_contested" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/investidor10-wallet-spec.md", + "source_location": "L159", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_investidor10_wallet_spec_7_independent_re_verification_swarm_s4_2026_09_29_corrections_to_6", + "target": "superpowers_investidor10_wallet_spec_7_5_revised_pre_p1_actions_supersedes_6_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_nginx_scaling_plan_md", + "target": "superpowers_nginx_scaling_plan_nginx_scaling_plan_reverse_proxy_response_cache_for_stocks_and_the_multi_server_evolution" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L64", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_nginx_scaling_plan_md", + "target": "superpowers_nginx_scaling_plan_part_1_implementation_plan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L347", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_nginx_scaling_plan_md", + "target": "superpowers_nginx_scaling_plan_part_2_benchmark_plan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L510", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_nginx_scaling_plan_md", + "target": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L661", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_nginx_scaling_plan_md", + "target": "superpowers_nginx_scaling_plan_open_decisions_blocking_or_product_owned" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L669", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_nginx_scaling_plan_md", + "target": "superpowers_nginx_scaling_plan_next_actions_not_in_scope_here" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_nginx_scaling_plan_reverse_proxy_response_cache_for_stocks_and_the_multi_server_evolution", + "target": "superpowers_nginx_scaling_plan_0_purpose_and_constraints" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L35", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_nginx_scaling_plan_reverse_proxy_response_cache_for_stocks_and_the_multi_server_evolution", + "target": "superpowers_nginx_scaling_plan_0_1_rev_2_do_first_app_cache_ttl_increase_fields_cache_no_nginx_no_redis" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L66", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_1_architecture_decision" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_2_file_layout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L96", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L152", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L251", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_5_phase_p2_port_scheme_worker_containers_keepalive" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L277", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L309", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_7_phase_p4_handoff_design_no_code_in_this_plan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L320", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_8_quota_rate_limit_semantics_after_caching" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L332", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_9_anti_scraping_note_todo_17" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L336", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_1_implementation_plan", + "target": "superpowers_nginx_scaling_plan_1_10_edge_cases_risks_implementation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L82", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_2_file_layout", + "target": "superpowers_nginx_scaling_plan_codeblock_1" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton", + "target": "superpowers_nginx_scaling_plan_codeblock_2" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L118", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton", + "target": "superpowers_nginx_scaling_plan_codeblock_3" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L139", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton", + "target": "superpowers_nginx_scaling_plan_codeblock_4" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L155", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives", + "target": "superpowers_nginx_scaling_plan_codeblock_5" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L186", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives", + "target": "superpowers_nginx_scaling_plan_codeblock_6" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives", + "target": "superpowers_nginx_scaling_plan_codeblock_7" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L257", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_5_phase_p2_port_scheme_worker_containers_keepalive", + "target": "superpowers_nginx_scaling_plan_codeblock_8" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L279", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy", + "target": "superpowers_nginx_scaling_plan_codeblock_9" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L291", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy", + "target": "superpowers_nginx_scaling_plan_codeblock_10" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L349", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_0_grounding_what_the_code_actually_does" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L381", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_1_hypotheses" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L390", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_2_tooling" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L440", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_3_scenarios" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L452", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_4_protocol" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L463", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_5_metrics" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L467", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_6_acceptance_thresholds_all_proposed_freeze_after_first_real_run" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L484", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_7_results_doc_layout" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L493", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_8_feeding_status_todo_14" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L499", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_2_benchmark_plan", + "target": "superpowers_nginx_scaling_plan_2_9_benchmark_risks" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L393", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_2_2_tooling", + "target": "superpowers_nginx_scaling_plan_codeblock_11" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L406", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_2_2_tooling", + "target": "superpowers_nginx_scaling_plan_codeblock_12" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L414", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_2_2_tooling", + "target": "superpowers_nginx_scaling_plan_codeblock_13" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L420", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_2_2_tooling", + "target": "superpowers_nginx_scaling_plan_codeblock_14" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L431", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_2_2_tooling", + "target": "superpowers_nginx_scaling_plan_codeblock_15" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L486", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_2_7_results_doc_layout", + "target": "superpowers_nginx_scaling_plan_codeblock_16" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L512", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_0_verified_ground_truth" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L529", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_1_target_topology" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L546", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_2_worker_container_extraction" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L563", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_3_nginx_upstream_evolution_validated_against_the_user_s_plan" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L584", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_4_todo_13_migration_drop_service_host_service_port" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L591", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_5_redis_exactly_two_jobs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L607", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_6_cache_strategy_across_boxes" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L613", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_7_autoscaling_story_todo_11" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L618", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_8_forgevm_interplay_todo_12" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L622", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_9_risk_register" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L642", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "superpowers_nginx_scaling_plan_3_10_migration_sequence_verification" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testregisterendpoint" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L534", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_3_1_target_topology", + "target": "superpowers_nginx_scaling_plan_codeblock_17" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testloginendpoint" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/nginx-scaling-plan.md", + "source_location": "L567", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_nginx_scaling_plan_3_3_nginx_upstream_evolution_validated_against_the_user_s_plan", + "target": "superpowers_nginx_scaling_plan_codeblock_18" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testlogoutendpoint" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_uvicorn_worker_scaling_plan_md", + "target": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testgooglelogin" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_uvicorn_worker_scaling_plan_md", + "target": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testgooglecallback" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_uvicorn_worker_scaling_plan_md", + "target": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testuserhealth" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L17", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_0_the_blockers_ranked" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testgetme" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L32", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_1_verified_state_compact" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testupgradeendpoints" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L52", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testadminaccess" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L135", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_3_rulings_conflicts_i_adjudicated" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testgetsessions" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L147", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_4_design_spec_alignment_2026_09_29_nginx_scaling_design_md" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testgetcurrentsession" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L162", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_5_sequencing_verification_and_bans" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testrevokesession" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L174", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_6_options_demoted" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testrevokeallsessions" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L186", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_7_risks" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testprometheushealth" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L200", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_migration_\u00e2_what_must_change", + "target": "superpowers_uvicorn_worker_scaling_plan_8_evidence_index" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testprometheusgetsessions" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L54", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine", + "target": "superpowers_uvicorn_worker_scaling_plan_b1_\u00e2_startup_and_process_model_must_fix" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testprometheuscreatesession" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L67", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine", + "target": "superpowers_uvicorn_worker_scaling_plan_b2_\u00e2_cache_under_n_1_must_fix" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testprometheusupdatesessiontitle" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L79", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine", + "target": "superpowers_uvicorn_worker_scaling_plan_b3_\u00e2_db_pools_must_fix_at_n\u00e2_3_on_one_server" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testprometheusgethistory" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L98", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine", + "target": "superpowers_uvicorn_worker_scaling_plan_b4_\u00e2_migrations_must_fix" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testprometheusdeletesession" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L107", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine", + "target": "superpowers_uvicorn_worker_scaling_plan_b5_\u00e2_per_process_state_ranked_scope_by_service" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testprometheuschat" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L123", + "weight": 1.0, + "confidence_score": 1.0, + "source": "superpowers_uvicorn_worker_scaling_plan_2_change_inventory_the_spine", + "target": "superpowers_uvicorn_worker_scaling_plan_b6_\u00e2_deployment_glue_must_build" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_teststocksapihealth" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/benchmarks/stocks-cache-ttl.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_benchmarks_stocks_cache_ttl_md", + "target": "benchmarks_stocks_cache_ttl_stocks_endpoint_cache_ttl_6h_rss_check" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_teststocksapikeytest" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L1", + "weight": 1.0, + "confidence_score": 1.0, + "source": "docs_superpowers_plans_2026_08_09_sse_resume_md", + "target": "plans_2026_08_09_sse_resume_sse_resume_implementation_plan" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_teststocksapihistorical" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L11", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_sse_resume_implementation_plan", + "target": "plans_2026_08_09_sse_resume_global_constraints" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_teststocksapifundamental" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L26", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_global_constraints", + "target": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_teststocksapigeneratekey" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L242", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_global_constraints", + "target": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testaddroletouser" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L412", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_global_constraints", + "target": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testgetcurrentuser" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L576", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_global_constraints", + "target": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testhashpasswordempty" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L863", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_global_constraints", + "target": "plans_2026_08_09_sse_resume_task_5_full_verification_todo_check_off" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testverifyaccesstoken" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L41", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests", + "target": "plans_2026_08_09_sse_resume_codeblock_1" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testextracttokenpayloadreraise" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L130", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests", + "target": "plans_2026_08_09_sse_resume_codeblock_2" }, { - "relation": "uses", - "confidence": "INFERRED", - "source_file": "tests/test_controllers_coverage.py", - "source_location": "L61", - "weight": 0.8, - "confidence_score": 0.5, - "source": "utils_roles_roles", - "target": "tests_test_controllers_coverage_testmanagerinit" + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L235", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests", + "target": "plans_2026_08_09_sse_resume_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/scheduler.py", - "source_location": "L32", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L257", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_scheduler_py", - "target": "utils_scheduler_getsharedscheduler" + "source": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller", + "target": "plans_2026_08_09_sse_resume_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/scheduler.py", - "source_location": "L42", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L329", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_scheduler_py", - "target": "utils_scheduler_registerjob" + "source": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller", + "target": "plans_2026_08_09_sse_resume_codeblock_5" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/scheduler.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L405", "weight": 1.0, "confidence_score": 1.0, - "source": "utils_scheduler_rationale_1", - "target": "main_utils_scheduler_py" + "source": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller", + "target": "plans_2026_08_09_sse_resume_codeblock_6" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/scheduler.py", - "source_location": "L50", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L426", "weight": 1.0, "confidence_score": 1.0, - "source": "utils_scheduler_registerjob", - "target": "utils_scheduler_getsharedscheduler" + "source": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking", + "target": "plans_2026_08_09_sse_resume_codeblock_7" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/scheduler.py", - "source_location": "L33", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L498", "weight": 1.0, "confidence_score": 1.0, - "source": "utils_scheduler_rationale_33", - "target": "utils_scheduler_getsharedscheduler" + "source": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking", + "target": "plans_2026_08_09_sse_resume_codeblock_8" }, { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "main/service/prometheus_service.py", - "source_location": "L70", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L569", "weight": 1.0, - "source": "service_prometheus_service_initialize", - "target": "utils_scheduler_registerjob" + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking", + "target": "plans_2026_08_09_sse_resume_codeblock_9" }, { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "main/service/user_service.py", - "source_location": "L55", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L590", "weight": 1.0, - "source": "service_user_service_registersessioncleanupjobs", - "target": "utils_scheduler_registerjob" + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", + "target": "plans_2026_08_09_sse_resume_codeblock_10" }, { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "main/service/prometheus_service.py", - "source_location": "L69", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L659", "weight": 1.0, - "source": "service_prometheus_service_registermemorymaintenancejob", - "target": "utils_scheduler_registerjob" + "confidence_score": 1.0, + "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", + "target": "plans_2026_08_09_sse_resume_codeblock_11" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/scheduler.py", - "source_location": "L43", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L681", "weight": 1.0, "confidence_score": 1.0, - "source": "utils_scheduler_rationale_43", - "target": "utils_scheduler_registerjob" + "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", + "target": "plans_2026_08_09_sse_resume_codeblock_12" }, { - "relation": "imports_from", - "context": "import", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/service_manager.py", - "source_location": "L8", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L768", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_service_manager_py", - "target": "fastapi" + "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", + "target": "plans_2026_08_09_sse_resume_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/service_manager.py", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L835", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_service_manager_py", - "target": "utils_service_manager_getapp" + "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", + "target": "plans_2026_08_09_sse_resume_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/service_manager.py", - "source_location": "L48", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L856", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_service_manager_py", - "target": "utils_service_manager_runall" + "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", + "target": "plans_2026_08_09_sse_resume_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/service_manager.py", - "source_location": "L16", + "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_location": "L889", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_service_manager_py", - "target": "utils_service_manager_servicemanager" + "source": "plans_2026_08_09_sse_resume_task_5_full_verification_todo_check_off", + "target": "plans_2026_08_09_sse_resume_codeblock_16" }, { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "main/service/prometheus_service.py", - "source_location": "L64", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L1", "weight": 1.0, - "source": "service_prometheus_service_initialize", - "target": "utils_service_manager_getapp" + "confidence_score": 1.0, + "source": "docs_superpowers_plans_2026_08_15_stocks_api_perf_md", + "target": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/models/loader.py", - "source_location": "L12", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_models_loader_py", - "target": "models_loader_getembeddingmodel" + "source": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan", + "target": "plans_2026_08_15_stocks_api_perf_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/models/loader.py", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L23", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_models_loader_py", - "target": "models_loader_embed" + "source": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan", + "target": "plans_2026_08_15_stocks_api_perf_file_structure" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/models/loader.py", - "source_location": "L11", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L633", "weight": 1.0, "confidence_score": 1.0, - "source": "main_utils_models_loader_py", - "target": "models_loader_downloadmodel" + "source": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan", + "target": "plans_2026_08_15_stocks_api_perf_self_review" }, { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "main/app/prometheus/vector.py", - "source_location": "L11", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L35", "weight": 1.0, - "source": "prometheus_vector_embed", - "target": "models_loader_getembeddingmodel" + "confidence_score": 1.0, + "source": "plans_2026_08_15_stocks_api_perf_file_structure", + "target": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh" }, { - "relation": "calls", - "context": "call", - "confidence": "INFERRED", - "confidence_score": 0.8, - "source_file": "main/service/prometheus_service.py", - "source_location": "L12", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L251", "weight": 1.0, - "source": "service_prometheus_service_initialize", - "target": "models_loader_getembeddingmodel" + "confidence_score": 1.0, + "source": "plans_2026_08_15_stocks_api_perf_file_structure", + "target": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/models/loader.py", - "source_location": "L22", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L392", "weight": 1.0, "confidence_score": 1.0, - "source": "models_loader_getembeddingmodel", - "target": "models_loader_embed" + "source": "plans_2026_08_15_stocks_api_perf_file_structure", + "target": "plans_2026_08_15_stocks_api_perf_task_3_convert_query_handlers_to_sync_def" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "main/utils/models/loader.py", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L468", "weight": 1.0, "confidence_score": 1.0, - "source": "models_loader_getembeddingmodel", - "target": "models_loader_downloadmodel" + "source": "plans_2026_08_15_stocks_api_perf_file_structure", + "target": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/env.py", - "source_location": "L25", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L613", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_env_py", - "target": "migrations_env_getdatabaseurl" + "source": "plans_2026_08_15_stocks_api_perf_file_structure", + "target": "plans_2026_08_15_stocks_api_perf_task_5_full_verification_graphify_update" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/env.py", - "source_location": "L28", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L49", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_env_py", - "target": "migrations_env_runmigrationsoffline" + "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/env.py", - "source_location": "L39", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L88", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_env_py", - "target": "migrations_env_runmigrationsonline" + "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_2" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/env.py", - "source_location": "L30", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L118", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_env_getdatabaseurl", - "target": "migrations_env_runmigrationsoffline" + "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_3" }, { - "relation": "calls", - "context": "call", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/env.py", - "source_location": "L41", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L131", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_env_getdatabaseurl", - "target": "migrations_env_runmigrationsonline" + "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/25af7ad931e7_initial_migration.py", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L177", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_25af7ad931e7_initial_migration_py", - "target": "versions_25af7ad931e7_initial_migration_upgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/25af7ad931e7_initial_migration.py", - "source_location": "L61", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L228", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_25af7ad931e7_initial_migration_py", - "target": "versions_25af7ad931e7_initial_migration_downgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_6" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/25af7ad931e7_initial_migration.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L244", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_25af7ad931e7_initial_migration_py", - "target": "versions_25af7ad931e7_initial_migration_rationale_1" + "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/4a2f1c9e3b5d_user_sessions.py", - "source_location": "L20", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L263", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_4a2f1c9e3b5d_user_sessions_py", - "target": "versions_4a2f1c9e3b5d_user_sessions_upgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/4a2f1c9e3b5d_user_sessions.py", - "source_location": "L47", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L315", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_4a2f1c9e3b5d_user_sessions_py", - "target": "versions_4a2f1c9e3b5d_user_sessions_downgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_9" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/4a2f1c9e3b5d_user_sessions.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L349", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_4a2f1c9e3b5d_user_sessions_py", - "target": "versions_4a2f1c9e3b5d_user_sessions_rationale_1" + "source": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", - "source_location": "L43", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L405", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_9f3b339dde20_drop_unused_user_sessions_columns_py", - "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_upgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_3_convert_query_handlers_to_sync_def", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", - "source_location": "L50", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L461", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_9f3b339dde20_drop_unused_user_sessions_columns_py", - "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_downgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_3_convert_query_handlers_to_sync_def", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_12" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L482", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_9f3b339dde20_drop_unused_user_sessions_columns_py", - "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_rationale_1" + "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_13" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", - "source_location": "L44", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L512", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_9f3b339dde20_drop_unused_user_sessions_columns_upgrade", - "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_rationale_44" + "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_14" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/9f3b339dde20_drop_unused_user_sessions_columns.py", - "source_location": "L51", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L519", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_9f3b339dde20_drop_unused_user_sessions_columns_downgrade", - "target": "versions_9f3b339dde20_drop_unused_user_sessions_columns_rationale_51" + "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/add_access_token_hash.py", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L539", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_add_access_token_hash_py", - "target": "versions_add_access_token_hash_upgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/add_access_token_hash.py", - "source_location": "L54", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L548", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_add_access_token_hash_py", - "target": "versions_add_access_token_hash_downgrade" + "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_17" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/add_access_token_hash.py", + "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", + "source_location": "L606", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", + "target": "plans_2026_08_15_stocks_api_perf_codeblock_18" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_add_access_token_hash_py", - "target": "versions_add_access_token_hash_rationale_1" + "source": "docs_superpowers_plans_2026_08_15_workspace_endpoints_md", + "target": "plans_2026_08_15_workspace_endpoints_workspace_file_endpoints_agent_serve_file_tool_implementation_plan" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/add_access_token_hash.py", - "source_location": "L22", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L16", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_add_access_token_hash_upgrade", - "target": "versions_add_access_token_hash_rationale_22" + "source": "plans_2026_08_15_workspace_endpoints_workspace_file_endpoints_agent_serve_file_tool_implementation_plan", + "target": "plans_2026_08_15_workspace_endpoints_global_constraints" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/add_access_token_hash.py", - "source_location": "L55", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L632", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_add_access_token_hash_downgrade", - "target": "versions_add_access_token_hash_rationale_55" + "source": "plans_2026_08_15_workspace_endpoints_workspace_file_endpoints_agent_serve_file_tool_implementation_plan", + "target": "plans_2026_08_15_workspace_endpoints_self_review" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", - "source_location": "L22", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L29", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", - "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_global_constraints", + "target": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", - "source_location": "L50", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L152", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", - "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_downgrade" + "source": "plans_2026_08_15_workspace_endpoints_global_constraints", + "target": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", - "source_location": "L60", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L198", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", - "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_fix_partial" + "source": "plans_2026_08_15_workspace_endpoints_global_constraints", + "target": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/b1c2d3e4f5a6_create_prometheus_memories.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L465", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_b1c2d3e4f5a6_create_prometheus_memories_py", - "target": "versions_b1c2d3e4f5a6_create_prometheus_memories_rationale_1" + "source": "plans_2026_08_15_workspace_endpoints_global_constraints", + "target": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/c2e4f6a8b0c1_drop_embedding_model_version.py", - "source_location": "L22", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L611", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_c2e4f6a8b0c1_drop_embedding_model_version_py", - "target": "versions_c2e4f6a8b0c1_drop_embedding_model_version_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_global_constraints", + "target": "plans_2026_08_15_workspace_endpoints_task_5_full_verification" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/c2e4f6a8b0c1_drop_embedding_model_version.py", - "source_location": "L27", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L43", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_c2e4f6a8b0c1_drop_embedding_model_version_py", - "target": "versions_c2e4f6a8b0c1_drop_embedding_model_version_downgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_1" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/c2e4f6a8b0c1_drop_embedding_model_version.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L108", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_c2e4f6a8b0c1_drop_embedding_model_version_py", - "target": "versions_c2e4f6a8b0c1_drop_embedding_model_version_rationale_1" + "source": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/d3df3fc5ca72_rename_memory_base_score.py", - "source_location": "L17", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L145", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_d3df3fc5ca72_rename_memory_base_score_py", - "target": "versions_d3df3fc5ca72_rename_memory_base_score_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/d3df3fc5ca72_rename_memory_base_score.py", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L166", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_d3df3fc5ca72_rename_memory_base_score_py", - "target": "versions_d3df3fc5ca72_rename_memory_base_score_downgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/d3e4f5a6b7c8_add_prometheus_sandboxes.py", - "source_location": "L22", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L172", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_d3e4f5a6b7c8_add_prometheus_sandboxes_py", - "target": "versions_d3e4f5a6b7c8_add_prometheus_sandboxes_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/d3e4f5a6b7c8_add_prometheus_sandboxes.py", - "source_location": "L36", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L180", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_d3e4f5a6b7c8_add_prometheus_sandboxes_py", - "target": "versions_d3e4f5a6b7c8_add_prometheus_sandboxes_downgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_6" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/d3e4f5a6b7c8_add_prometheus_sandboxes.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L191", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_d3e4f5a6b7c8_add_prometheus_sandboxes_py", - "target": "versions_d3e4f5a6b7c8_add_prometheus_sandboxes_rationale_1" + "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories.py", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L212", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_py", - "target": "versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories.py", - "source_location": "L45", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L368", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_py", - "target": "versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_downgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_9" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L375", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_rationale_1", - "target": "migrations_versions_e4f5a6b7c8d9_fix_fulltext_index_prometheus_memories_py" + "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes.py", - "source_location": "L22", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L381", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_py", - "target": "versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes.py", - "source_location": "L26", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L458", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_py", - "target": "versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_downgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_12" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L479", + "weight": 1.0, + "confidence_score": 1.0, + "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_13" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L560", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_rationale_1", - "target": "migrations_versions_e5f6a7b8c9d0_drop_workspace_path_prometheus_sandboxes_py" + "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/f1a2b3c4d5e6_session_gc_index.py", - "source_location": "L26", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L566", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_f1a2b3c4d5e6_session_gc_index_py", - "target": "versions_f1a2b3c4d5e6_session_gc_index_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/f1a2b3c4d5e6_session_gc_index.py", - "source_location": "L34", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L593", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_f1a2b3c4d5e6_session_gc_index_py", - "target": "versions_f1a2b3c4d5e6_session_gc_index_downgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_16" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/f1a2b3c4d5e6_session_gc_index.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L604", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_f1a2b3c4d5e6_session_gc_index_rationale_1", - "target": "migrations_versions_f1a2b3c4d5e6_session_gc_index_py" + "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/f7a8b9c0d1e2_rename_prometheus_to_orunmila.py", - "source_location": "L25", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", + "source_location": "L626", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_py", - "target": "versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_upgrade" + "source": "plans_2026_08_15_workspace_endpoints_task_5_full_verification", + "target": "plans_2026_08_15_workspace_endpoints_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/f7a8b9c0d1e2_rename_prometheus_to_orunmila.py", - "source_location": "L43", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "migrations_versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_py", - "target": "versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_downgrade" + "source": "docs_superpowers_plans_2026_08_15_workspace_frontend_md", + "target": "plans_2026_08_15_workspace_frontend_workspace_files_ui_promptbox_upload_implementation_plan" }, { - "relation": "rationale_for", + "relation": "contains", "confidence": "EXTRACTED", - "source_file": "migrations/versions/f7a8b9c0d1e2_rename_prometheus_to_orunmila.py", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_rationale_1", - "target": "migrations_versions_f7a8b9c0d1e2_rename_prometheus_to_orunmila_py" + "source": "plans_2026_08_15_workspace_frontend_workspace_files_ui_promptbox_upload_implementation_plan", + "target": "plans_2026_08_15_workspace_frontend_backend_contract_source_of_truth_for_api_js" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L32", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_project_overview" + "source": "plans_2026_08_15_workspace_frontend_workspace_files_ui_promptbox_upload_implementation_plan", + "target": "plans_2026_08_15_workspace_frontend_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L4", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L43", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_dev_commands" + "source": "plans_2026_08_15_workspace_frontend_global_constraints", + "target": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L23", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L176", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_architecture" + "source": "plans_2026_08_15_workspace_frontend_global_constraints", + "target": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L34", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L294", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_testing" + "source": "plans_2026_08_15_workspace_frontend_global_constraints", + "target": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L38", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L403", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_graphify" + "source": "plans_2026_08_15_workspace_frontend_global_constraints", + "target": "plans_2026_08_15_workspace_frontend_task_4_docker_restart_e2e_of_prometheus_chat_stream_performed_by_controller_not_a_subagent" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L60", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L61", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_swarm_delegation_default" + "source": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js", + "target": "plans_2026_08_15_workspace_frontend_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L47", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L122", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_stocks_api_pandas_first_pattern" + "source": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js", + "target": "plans_2026_08_15_workspace_frontend_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L54", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L169", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_scraper_b3_xango_batch_data_pipeline" + "source": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js", + "target": "plans_2026_08_15_workspace_frontend_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L60", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L191", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_auth_users_dual_layer_session_security" + "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", + "target": "plans_2026_08_15_workspace_frontend_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L28", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L246", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_key_quirks" + "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", + "target": "plans_2026_08_15_workspace_frontend_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L57", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L272", "weight": 1.0, "confidence_score": 1.0, - "source": "agents_md", - "target": "server_agents_prometheus_ai_chat_strengths_gaps" + "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", + "target": "plans_2026_08_15_workspace_frontend_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L5", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L287", "weight": 1.0, "confidence_score": 1.0, - "source": "server_agents_dev_commands", - "target": "server_agents_codeblock_1" + "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", + "target": "plans_2026_08_15_workspace_frontend_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "AGENTS.md", - "source_location": "L31", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L308", "weight": 1.0, "confidence_score": 1.0, - "source": "server_agents_dev_commands", - "target": "server_agents_ci_pipeline_order" + "source": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx", + "target": "plans_2026_08_15_workspace_frontend_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L372", "weight": 1.0, "confidence_score": 1.0, - "source": "readme_md", - "target": "server_readme_mansa_server" + "source": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx", + "target": "plans_2026_08_15_workspace_frontend_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L7", + "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", + "source_location": "L396", "weight": 1.0, "confidence_score": 1.0, - "source": "server_readme_mansa_server", - "target": "server_readme_run_with_docker" + "source": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx", + "target": "plans_2026_08_15_workspace_frontend_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L20", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "server_readme_mansa_server", - "target": "server_readme_environment_setup" + "source": "docs_superpowers_plans_2026_08_17_openui_migration_md", + "target": "plans_2026_08_17_openui_migration_openui_migration_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L85", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L20", "weight": 1.0, "confidence_score": 1.0, - "source": "server_readme_mansa_server", - "target": "server_readme_health_check" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L91", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L30", "weight": 1.0, "confidence_score": 1.0, - "source": "server_readme_mansa_server", - "target": "server_readme_license" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_file_structure" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L9", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L52", "weight": 1.0, "confidence_score": 1.0, - "source": "server_readme_run_with_docker", - "target": "server_readme_codeblock_1" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L24", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L80", "weight": 1.0, "confidence_score": 1.0, - "source": "server_readme_environment_setup", - "target": "server_readme_codeblock_2" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_task_2_define_prometheus_component_library" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "README.md", - "source_location": "L87", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L385", "weight": 1.0, "confidence_score": 1.0, - "source": "server_readme_health_check", - "target": "server_readme_codeblock_3" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "TODO.md", - "source_location": "L25", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L455", "weight": 1.0, "confidence_score": 1.0, - "source": "todo_md", - "target": "server_todo_user_structure_defined_by_string_roles" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "TODO.md", - "source_location": "L34", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L610", "weight": 1.0, "confidence_score": 1.0, - "source": "server_todo_user_structure_defined_by_string_roles", - "target": "server_todo_user" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_task_5_integration_test" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "TODO.md", - "source_location": "L37", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L640", "weight": 1.0, "confidence_score": 1.0, - "source": "server_todo_user_structure_defined_by_string_roles", - "target": "server_todo_premium" + "source": "plans_2026_08_17_openui_migration_openui_migration_plan", + "target": "plans_2026_08_17_openui_migration_verification_checklist" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "TODO.md", - "source_location": "L40", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L32", "weight": 1.0, "confidence_score": 1.0, - "source": "server_todo_user_structure_defined_by_string_roles", - "target": "server_todo_developer" + "source": "plans_2026_08_17_openui_migration_file_structure", + "target": "plans_2026_08_17_openui_migration_frontend_local_only_never_committed" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "TODO.md", - "source_location": "L67", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L43", "weight": 1.0, "confidence_score": 1.0, - "source": "server_todo_user_structure_defined_by_string_roles", - "target": "server_todo_stocks_api" + "source": "plans_2026_08_17_openui_migration_file_structure", + "target": "plans_2026_08_17_openui_migration_backend_commit" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "TODO.md", - "source_location": "L70", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L58", "weight": 1.0, "confidence_score": 1.0, - "source": "server_todo_user_structure_defined_by_string_roles", - "target": "server_todo_prometheus" + "source": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui", + "target": "plans_2026_08_17_openui_migration_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L66", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_md", - "target": "docs_authentication_authentication_management" + "source": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui", + "target": "plans_2026_08_17_openui_migration_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L5", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L72", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_token_session_lifetime" + "source": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui", + "target": "plans_2026_08_17_openui_migration_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L11", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L86", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_token_extraction_order" + "source": "plans_2026_08_17_openui_migration_task_2_define_prometheus_component_library", + "target": "plans_2026_08_17_openui_migration_component_mapping" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L101", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_cookie_handling_conditional_secure" + "source": "plans_2026_08_17_openui_migration_component_mapping", + "target": "plans_2026_08_17_openui_migration_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L30", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L339", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_session_data_model_family_only" + "source": "plans_2026_08_17_openui_migration_component_mapping", + "target": "plans_2026_08_17_openui_migration_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L39", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L396", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_roles_and_permissions" + "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", + "target": "plans_2026_08_17_openui_migration_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L61", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L428", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_rate_limits" + "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", + "target": "plans_2026_08_17_openui_migration_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L49", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L435", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_api_endpoints" + "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", + "target": "plans_2026_08_17_openui_migration_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L117", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L442", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_security_features" + "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", + "target": "plans_2026_08_17_openui_migration_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L138", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L449", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_not_implemented" + "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", + "target": "plans_2026_08_17_openui_migration_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L154", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L467", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_workflow" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L187", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L486", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_license" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L9", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L501", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_usage" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L130", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L542", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_device_detection" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L144", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L555", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_authentication_management", - "target": "docs_authentication_session_management" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L51", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L572", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_health_check" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L57", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L577", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_user_registration" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L65", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L590", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_user_login" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L84", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L596", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_logout" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_19" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L94", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L602", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_google_oauth2_login" + "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", + "target": "plans_2026_08_17_openui_migration_codeblock_20" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L120", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L614", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_google_callback_cookie_only" + "source": "plans_2026_08_17_openui_migration_task_5_integration_test", + "target": "plans_2026_08_17_openui_migration_codeblock_21" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L77", + "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", + "source_location": "L620", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_profile_me" + "source": "plans_2026_08_17_openui_migration_task_5_integration_test", + "target": "plans_2026_08_17_openui_migration_codeblock_22" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L108", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_api_endpoints", - "target": "docs_authentication_google_callback" + "source": "docs_superpowers_plans_2026_09_03_followup_hardening_md", + "target": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L76", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_health_check", - "target": "docs_authentication_codeblock_1" + "source": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan", + "target": "plans_2026_09_03_followup_hardening_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L52", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L26", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_health_check", - "target": "docs_authentication_codeblock_2" + "source": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan", + "target": "plans_2026_09_03_followup_hardening_file_map" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L11", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L814", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_usage", - "target": "docs_authentication_codeblock_1" + "source": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan", + "target": "plans_2026_09_03_followup_hardening_self_review" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L84", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L44", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_user_registration", - "target": "docs_authentication_codeblock_2" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L59", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L127", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_user_registration", - "target": "docs_authentication_codeblock_3" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L94", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L240", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_user_login", - "target": "docs_authentication_codeblock_3" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L67", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L337", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_user_login", - "target": "docs_authentication_codeblock_4" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L104", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L415", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_logout", - "target": "docs_authentication_codeblock_4" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L86", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L509", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_logout", - "target": "docs_authentication_codeblock_6" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L113", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L562", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_google_oauth2_login", - "target": "docs_authentication_codeblock_5" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L98", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L623", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_google_oauth2_login", - "target": "docs_authentication_codeblock_7" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L104", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L712", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_google_oauth2_login", - "target": "docs_authentication_codeblock_8" + "source": "plans_2026_09_03_followup_hardening_file_map", + "target": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L79", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L61", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_profile_me", - "target": "docs_authentication_codeblock_5" + "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", + "target": "plans_2026_09_03_followup_hardening_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L144", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L80", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_workflow", - "target": "docs_authentication_codeblock_6" + "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", + "target": "plans_2026_09_03_followup_hardening_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/authentication.md", - "source_location": "L156", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L96", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_authentication_workflow", - "target": "docs_authentication_codeblock_9" + "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", + "target": "plans_2026_09_03_followup_hardening_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L120", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_md", - "target": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa" + "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", + "target": "plans_2026_09_03_followup_hardening_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L10", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L143", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "target": "docs_investidor10_wallet_research_1_feature_inventory_nav_structure" + "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", + "target": "plans_2026_09_03_followup_hardening_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L30", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L185", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "target": "docs_investidor10_wallet_research_2_user_lifecycle_end_to_end" + "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", + "target": "plans_2026_09_03_followup_hardening_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L40", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L198", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "target": "docs_investidor10_wallet_research_3_wallet_api_reference" + "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", + "target": "plans_2026_09_03_followup_hardening_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L65", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L204", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "target": "docs_investidor10_wallet_research_4_data_model_inference_from_payloads_no_db_access" + "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", + "target": "plans_2026_09_03_followup_hardening_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L74", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L233", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "target": "docs_investidor10_wallet_research_5_product_logic" + "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", + "target": "plans_2026_09_03_followup_hardening_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L82", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L256", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "target": "docs_investidor10_wallet_research_5b_gaps_unverified_do_not_treat_as_fact" + "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", + "target": "plans_2026_09_03_followup_hardening_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-research.md", - "source_location": "L86", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L284", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", - "target": "docs_investidor10_wallet_research_6_concrete_mansa_proposal_build_first_later_minimal_sketches" + "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", + "target": "plans_2026_09_03_followup_hardening_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L298", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_md", - "target": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec" + "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", + "target": "plans_2026_09_03_followup_hardening_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L12", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L330", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", - "target": "docs_investidor10_wallet_spec_1_requirements" + "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", + "target": "plans_2026_09_03_followup_hardening_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L38", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L351", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", - "target": "docs_investidor10_wallet_spec_2_domain_model" + "source": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard", + "target": "plans_2026_09_03_followup_hardening_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L49", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L390", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", - "target": "docs_investidor10_wallet_spec_3_api_contracts_all_under_api_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout" + "source": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard", + "target": "plans_2026_09_03_followup_hardening_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L66", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L408", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", - "target": "docs_investidor10_wallet_spec_4_phased_build_plan_writing_plans_each_phase_independently_reviewable_reviewer_pass_per_phase" + "source": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard", + "target": "plans_2026_09_03_followup_hardening_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L72", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L429", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", - "target": "docs_investidor10_wallet_spec_5_risks_assumptions_honest_flags_carried_over_do_not_treat_as_fact" + "source": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only", + "target": "plans_2026_09_03_followup_hardening_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L14", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L451", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_1_requirements", - "target": "docs_investidor10_wallet_spec_1_1_functional_per_surface_tags_exists_build_on_it_partial_half_reusable_missing_greenfield" + "source": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only", + "target": "plans_2026_09_03_followup_hardening_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/investidor10-wallet-spec.md", - "source_location": "L28", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L502", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_investidor10_wallet_spec_1_requirements", - "target": "docs_investidor10_wallet_spec_1_2_non_functional" + "source": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only", + "target": "plans_2026_09_03_followup_hardening_codeblock_19" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L525", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_md", - "target": "docs_orunmila_orunmila" + "source": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable", + "target": "plans_2026_09_03_followup_hardening_codeblock_20" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L7", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L541", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_orunmila", - "target": "docs_orunmila_usage" + "source": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable", + "target": "plans_2026_09_03_followup_hardening_codeblock_21" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L53", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L555", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_orunmila", - "target": "docs_orunmila_workflow" + "source": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable", + "target": "plans_2026_09_03_followup_hardening_codeblock_22" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L65", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L577", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_orunmila", - "target": "docs_orunmila_api_endpoints" + "source": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint", + "target": "plans_2026_09_03_followup_hardening_codeblock_23" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L72", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L598", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_orunmila", - "target": "docs_orunmila_license" + "source": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint", + "target": "plans_2026_09_03_followup_hardening_codeblock_24" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L9", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L616", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_usage", - "target": "docs_orunmila_codeblock_1" + "source": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint", + "target": "plans_2026_09_03_followup_hardening_codeblock_25" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L49", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L640", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_usage", - "target": "docs_orunmila_codeblock_2" + "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", + "target": "plans_2026_09_03_followup_hardening_codeblock_26" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/orunmila.md", - "source_location": "L55", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L668", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_orunmila_workflow", - "target": "docs_orunmila_codeblock_3" + "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", + "target": "plans_2026_09_03_followup_hardening_codeblock_27" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L676", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_md", - "target": "docs_scraper_b3_b3_market_scraper" + "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", + "target": "plans_2026_09_03_followup_hardening_codeblock_28" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L705", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_md", - "target": "docs_scraper_b3_brazilian_stocks_market_scraper" + "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", + "target": "plans_2026_09_03_followup_hardening_codeblock_29" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L5", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L731", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_b3_market_scraper", - "target": "docs_scraper_b3_sources_6" + "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", + "target": "plans_2026_09_03_followup_hardening_codeblock_30" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L19", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L753", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_b3_market_scraper", - "target": "docs_scraper_b3_scheduling_config_config_py_77_81_scraper_service_py_23_36" + "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", + "target": "plans_2026_09_03_followup_hardening_codeblock_31" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L31", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L769", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_b3_market_scraper", - "target": "docs_scraper_b3_xango_score_main_app_scraper_b3_xango_py" + "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", + "target": "plans_2026_09_03_followup_hardening_codeblock_32" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L41", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L780", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_b3_market_scraper", - "target": "docs_scraper_b3_outputs" + "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", + "target": "plans_2026_09_03_followup_hardening_codeblock_33" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L21", + "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", + "source_location": "L807", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_scheduling_config_config_py_77_81_scraper_service_py_23_36", - "target": "docs_scraper_b3_codeblock_1" + "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", + "target": "plans_2026_09_03_followup_hardening_codeblock_34" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/scraper_b3.md", - "source_location": "L8", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_scraper_b3_usage", - "target": "docs_scraper_b3_codeblock_1" + "source": "docs_superpowers_plans_2026_09_04_wallet_management_md", + "target": "plans_2026_09_04_wallet_management_wallet_management_thoth_iyagba_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_md", - "target": "docs_stocks_api_brazilian_stocks_market_api" + "source": "plans_2026_09_04_wallet_management_wallet_management_thoth_iyagba_implementation_plan", + "target": "plans_2026_09_04_wallet_management_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L7", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L35", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_brazilian_stocks_market_api", - "target": "docs_stocks_api_usage" + "source": "plans_2026_09_04_wallet_management_wallet_management_thoth_iyagba_implementation_plan", + "target": "plans_2026_09_04_wallet_management_file_structure" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L22", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L60", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_brazilian_stocks_market_api", - "target": "docs_stocks_api_auth" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L32", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L166", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_brazilian_stocks_market_api", - "target": "docs_stocks_api_api_endpoints" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L90", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L269", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_brazilian_stocks_market_api", - "target": "docs_stocks_api_response_format" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L119", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L391", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_brazilian_stocks_market_api", - "target": "docs_stocks_api_architecture" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L113", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L567", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_brazilian_stocks_market_api", - "target": "docs_stocks_api_license" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L9", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L720", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_usage", - "target": "docs_stocks_api_codeblock_1" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L34", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L869", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_health_check" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L40", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1000", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_field_discovery" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L53", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1115", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_historical_data" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L72", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1224", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_fundamental_data" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L74", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1325", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_cotations_10_year_daily_history" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L87", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1482", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_live_price" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L98", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1618", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_mcp_ai_agent_tools" + "source": "plans_2026_09_04_wallet_management_file_structure", + "target": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L40", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L73", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_api_key_verification" + "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", + "target": "plans_2026_09_04_wallet_management_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L45", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L101", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_endpoints", - "target": "docs_stocks_api_key_management" + "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", + "target": "plans_2026_09_04_wallet_management_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L35", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L138", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_health_check", - "target": "docs_stocks_api_codeblock_2" + "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", + "target": "plans_2026_09_04_wallet_management_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L42", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L144", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_field_discovery", - "target": "docs_stocks_api_codeblock_3" + "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", + "target": "plans_2026_09_04_wallet_management_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L41", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L159", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_api_key_verification", - "target": "docs_stocks_api_codeblock_3" + "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", + "target": "plans_2026_09_04_wallet_management_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L50", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L189", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_historical_data", - "target": "docs_stocks_api_codeblock_4" + "source": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables", + "target": "plans_2026_09_04_wallet_management_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L55", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L248", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_historical_data", - "target": "docs_stocks_api_codeblock_5" + "source": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables", + "target": "plans_2026_09_04_wallet_management_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L68", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L262", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_historical_data", - "target": "docs_stocks_api_codeblock_6" + "source": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables", + "target": "plans_2026_09_04_wallet_management_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L47", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L281", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_key_management", - "target": "docs_stocks_api_codeblock_4" + "source": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math", + "target": "plans_2026_09_04_wallet_management_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L63", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L325", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_fundamental_data", - "target": "docs_stocks_api_codeblock_5" + "source": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math", + "target": "plans_2026_09_04_wallet_management_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L74", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L384", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_fundamental_data", - "target": "docs_stocks_api_codeblock_7" + "source": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math", + "target": "plans_2026_09_04_wallet_management_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L86", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L404", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_fundamental_data", - "target": "docs_stocks_api_codeblock_8" + "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", + "target": "plans_2026_09_04_wallet_management_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L76", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L471", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_cotations_10_year_daily_history", - "target": "docs_stocks_api_codeblock_6" + "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", + "target": "plans_2026_09_04_wallet_management_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L89", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L524", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_live_price", - "target": "docs_stocks_api_codeblock_7" + "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", + "target": "plans_2026_09_04_wallet_management_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L106", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L560", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_response_format", - "target": "docs_stocks_api_codeblock_8" + "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", + "target": "plans_2026_09_04_wallet_management_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/stocks_api.md", - "source_location": "L94", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L580", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_stocks_api_response_format", - "target": "docs_stocks_api_codeblock_9" + "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", + "target": "plans_2026_09_04_wallet_management_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L649", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_md", - "target": "docs_user_user_management" + "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", + "target": "plans_2026_09_04_wallet_management_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L5", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L659", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_roles_and_permissions" + "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", + "target": "plans_2026_09_04_wallet_management_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L17", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L693", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_api_endpoints" + "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", + "target": "plans_2026_09_04_wallet_management_codeblock_19" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L59", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L713", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_session_management" + "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", + "target": "plans_2026_09_04_wallet_management_codeblock_20" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L112", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L732", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_api_keys_stocks_api" + "source": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot", + "target": "plans_2026_09_04_wallet_management_codeblock_21" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L123", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L804", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_rate_limits_related_services" + "source": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot", + "target": "plans_2026_09_04_wallet_management_codeblock_22" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L135", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L862", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_not_implemented" + "source": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot", + "target": "plans_2026_09_04_wallet_management_codeblock_23" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L156", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L882", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_workflow" + "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", + "target": "plans_2026_09_04_wallet_management_codeblock_24" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L177", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L944", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_license" + "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", + "target": "plans_2026_09_04_wallet_management_codeblock_25" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L140", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L972", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_user_management", - "target": "docs_user_permission_system" + "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", + "target": "plans_2026_09_04_wallet_management_codeblock_26" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L19", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L993", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_api_endpoints", - "target": "docs_user_health_check" + "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", + "target": "plans_2026_09_04_wallet_management_codeblock_27" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L25", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1013", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_api_endpoints", - "target": "docs_user_get_profile" + "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", + "target": "plans_2026_09_04_wallet_management_codeblock_28" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L53", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1062", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_api_endpoints", - "target": "docs_user_admin_access" + "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", + "target": "plans_2026_09_04_wallet_management_codeblock_29" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L41", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1095", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_api_endpoints", - "target": "docs_user_upgrade_to_developer_starter" + "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", + "target": "plans_2026_09_04_wallet_management_codeblock_30" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L47", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1108", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_api_endpoints", - "target": "docs_user_upgrade_to_developer_enterprise" + "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", + "target": "plans_2026_09_04_wallet_management_codeblock_31" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L20", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1143", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_health_check", - "target": "docs_user_codeblock_1" + "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", + "target": "plans_2026_09_04_wallet_management_codeblock_32" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L27", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1157", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_get_profile", - "target": "docs_user_codeblock_2" + "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", + "target": "plans_2026_09_04_wallet_management_codeblock_33" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L31", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1165", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_get_profile", - "target": "docs_user_codeblock_3" + "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", + "target": "plans_2026_09_04_wallet_management_codeblock_34" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L39", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1192", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_admin_access", - "target": "docs_user_codeblock_3" + "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", + "target": "plans_2026_09_04_wallet_management_codeblock_35" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L55", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1217", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_admin_access", - "target": "docs_user_codeblock_6" + "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", + "target": "plans_2026_09_04_wallet_management_codeblock_36" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L63", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1237", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_session_management", - "target": "docs_user_list_all_sessions" + "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", + "target": "plans_2026_09_04_wallet_management_codeblock_37" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L92", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1276", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_session_management", - "target": "docs_user_get_current_session" + "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", + "target": "plans_2026_09_04_wallet_management_codeblock_38" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L114", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1299", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_session_management", - "target": "docs_user_revoke_a_session" + "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", + "target": "plans_2026_09_04_wallet_management_codeblock_39" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L127", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1318", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_session_management", - "target": "docs_user_revoke_all_sessions" + "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", + "target": "plans_2026_09_04_wallet_management_codeblock_40" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L55", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1341", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_list_all_sessions", - "target": "docs_user_codeblock_4" + "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", + "target": "plans_2026_09_04_wallet_management_codeblock_41" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L59", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1397", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_list_all_sessions", - "target": "docs_user_codeblock_5" + "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", + "target": "plans_2026_09_04_wallet_management_codeblock_42" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L65", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1419", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_list_all_sessions", - "target": "docs_user_codeblock_7" + "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", + "target": "plans_2026_09_04_wallet_management_codeblock_43" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L69", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1452", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_list_all_sessions", - "target": "docs_user_codeblock_8" + "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", + "target": "plans_2026_09_04_wallet_management_codeblock_44" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L43", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1475", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_upgrade_to_developer_starter", - "target": "docs_user_codeblock_4" + "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", + "target": "plans_2026_09_04_wallet_management_codeblock_45" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L49", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1496", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_upgrade_to_developer_enterprise", - "target": "docs_user_codeblock_5" + "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_46" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L83", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1512", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_get_current_session", - "target": "docs_user_codeblock_6" + "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_47" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L94", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1528", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_get_current_session", - "target": "docs_user_codeblock_9" + "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_48" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L98", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1546", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_get_current_session", - "target": "docs_user_codeblock_10" + "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_49" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L91", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1582", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_revoke_a_session", - "target": "docs_user_codeblock_7" + "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_50" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L116", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1613", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_revoke_a_session", - "target": "docs_user_codeblock_11" + "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_51" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L120", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1635", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_revoke_a_session", - "target": "docs_user_codeblock_12" + "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_52" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L101", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1661", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_revoke_all_sessions", - "target": "docs_user_codeblock_8" + "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_53" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L105", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1686", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_revoke_all_sessions", - "target": "docs_user_codeblock_9" + "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_54" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L129", + "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_location": "L1727", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_revoke_all_sessions", - "target": "docs_user_codeblock_13" + "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", + "target": "plans_2026_09_04_wallet_management_codeblock_55" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L133", + "source_file": "docs/superpowers/plans/2026-09-12-artifact-removal-cache-verdict.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_revoke_all_sessions", - "target": "docs_user_codeblock_14" + "source": "docs_superpowers_plans_2026_09_12_artifact_removal_cache_verdict_md", + "target": "plans_2026_09_12_artifact_removal_cache_verdict_artifact_removal_matrix_cache_verdict_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L141", + "source_file": "docs/superpowers/plans/2026-09-12-artifact-removal-cache-verdict.md", + "source_location": "L3", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_workflow", - "target": "docs_user_codeblock_10" + "source": "plans_2026_09_12_artifact_removal_cache_verdict_artifact_removal_matrix_cache_verdict_plan", + "target": "plans_2026_09_12_artifact_removal_cache_verdict_part_1_deletions_safe_no_live_referrers" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/user.md", - "source_location": "L158", + "source_file": "docs/superpowers/plans/2026-09-12-artifact-removal-cache-verdict.md", + "source_location": "L25", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_user_workflow", - "target": "docs_user_codeblock_16" + "source": "plans_2026_09_12_artifact_removal_cache_verdict_artifact_removal_matrix_cache_verdict_plan", + "target": "plans_2026_09_12_artifact_removal_cache_verdict_part_2_cache_verdict_keep_the_dict_skip_cashews" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_08_09_sse_resume_md", - "target": "plans_2026_08_09_sse_resume_sse_resume_implementation_plan" + "source": "docs_superpowers_plans_2026_09_14_memory_postgres_pgvector_plan_md", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_memory_postgres_pgvector_migration_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L11", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_sse_resume_implementation_plan", - "target": "plans_2026_08_09_sse_resume_global_constraints" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_memory_postgres_pgvector_migration_implementation_plan", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L26", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L24", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_global_constraints", - "target": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L242", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L79", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_global_constraints", - "target": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_2_delete_vector_py_rewrite_search" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L412", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L139", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_global_constraints", - "target": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_3_update_the_test_files" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L576", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L171", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_global_constraints", - "target": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_4_full_test_sweep_18_suites_postgres_ci_parity" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L863", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L185", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_global_constraints", - "target": "plans_2026_08_09_sse_resume_task_5_full_verification_todo_check_off" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_5_docs_close" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L41", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L35", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests", - "target": "plans_2026_08_09_sse_resume_codeblock_1" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L130", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L65", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests", - "target": "plans_2026_08_09_sse_resume_codeblock_2" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L235", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L74", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_1_streambus_module_with_unit_tests", - "target": "plans_2026_08_09_sse_resume_codeblock_3" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L257", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L97", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller", - "target": "plans_2026_08_09_sse_resume_codeblock_4" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_2_delete_vector_py_rewrite_search", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L329", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L134", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller", - "target": "plans_2026_08_09_sse_resume_codeblock_5" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_2_delete_vector_py_rewrite_search", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L405", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L148", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_2_background_run_get_resume_route_in_prometheus_controller", - "target": "plans_2026_08_09_sse_resume_codeblock_6" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_3_update_the_test_files", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L426", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L166", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking", - "target": "plans_2026_08_09_sse_resume_codeblock_7" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_3_update_the_test_files", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L498", + "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", + "source_location": "L189", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking", - "target": "plans_2026_08_09_sse_resume_codeblock_8" + "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_5_docs_close", + "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L569", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_3_frontend_api_js_shared_sse_parser_resumechat_cursor_tracking", - "target": "plans_2026_08_09_sse_resume_codeblock_9" + "source": "docs_superpowers_plans_2026_09_15_adopt_libs_md", + "target": "plans_2026_09_15_adopt_libs_adopt_libs_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L590", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", - "target": "plans_2026_08_09_sse_resume_codeblock_10" + "source": "plans_2026_09_15_adopt_libs_adopt_libs_implementation_plan", + "target": "plans_2026_09_15_adopt_libs_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L659", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L24", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", - "target": "plans_2026_08_09_sse_resume_codeblock_11" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_1_tenacity_replaces_bespoke_retries" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L681", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L56", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", - "target": "plans_2026_08_09_sse_resume_codeblock_12" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_2_cashews_native_probe_first" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L768", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L76", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", - "target": "plans_2026_08_09_sse_resume_codeblock_13" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_3_pydantic_validates_llm_extraction_json" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L835", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L102", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", - "target": "plans_2026_08_09_sse_resume_codeblock_14" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_4_sse_starlette_replaces_hand_sse_bus" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L856", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L117", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_4_frontend_app_jsx_resume_lifecycle_boot_resume", - "target": "plans_2026_08_09_sse_resume_codeblock_15" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_5_rapidfuzz_memory_key_dedup" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-09-sse-resume.md", - "source_location": "L889", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L132", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_09_sse_resume_task_5_full_verification_todo_check_off", - "target": "plans_2026_08_09_sse_resume_codeblock_16" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_6_cachetools_bounds_token_cache" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L143", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_08_15_stocks_api_perf_md", - "target": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_7_user_agents_fills_device_fields_optional" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L13", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L154", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan", - "target": "plans_2026_08_15_stocks_api_perf_global_constraints" + "source": "plans_2026_09_15_adopt_libs_global_constraints", + "target": "plans_2026_09_15_adopt_libs_task_8_pytest_plugin_set" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L23", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L38", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan", - "target": "plans_2026_08_15_stocks_api_perf_file_structure" + "source": "plans_2026_09_15_adopt_libs_task_1_tenacity_replaces_bespoke_retries", + "target": "plans_2026_09_15_adopt_libs_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L633", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L51", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_stocks_api_performance_pre_materialized_cache_sync_handlers_implementation_plan", - "target": "plans_2026_08_15_stocks_api_perf_self_review" + "source": "plans_2026_09_15_adopt_libs_task_1_tenacity_replaces_bespoke_retries", + "target": "plans_2026_09_15_adopt_libs_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L35", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L72", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_file_structure", - "target": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh" + "source": "plans_2026_09_15_adopt_libs_task_2_cashews_native_probe_first", + "target": "plans_2026_09_15_adopt_libs_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L251", + "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", + "source_location": "L88", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_file_structure", - "target": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries" + "source": "plans_2026_09_15_adopt_libs_task_3_pydantic_validates_llm_extraction_json", + "target": "plans_2026_09_15_adopt_libs_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L392", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_file_structure", - "target": "plans_2026_08_15_stocks_api_perf_task_3_convert_query_handlers_to_sync_def" + "source": "docs_superpowers_plans_2026_09_29_nginx_response_cache_md", + "target": "plans_2026_09_29_nginx_response_cache_nginx_response_cache_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L468", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L14", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_file_structure", - "target": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path" + "source": "plans_2026_09_29_nginx_response_cache_nginx_response_cache_implementation_plan", + "target": "plans_2026_09_29_nginx_response_cache_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L613", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L25", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_file_structure", - "target": "plans_2026_08_15_stocks_api_perf_task_5_full_verification_graphify_update" + "source": "plans_2026_09_29_nginx_response_cache_nginx_response_cache_implementation_plan", + "target": "plans_2026_09_29_nginx_response_cache_review_focus_spec_implied_inputs_most_likely_to_bite" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L49", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L375", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_1" + "source": "plans_2026_09_29_nginx_response_cache_nginx_response_cache_implementation_plan", + "target": "plans_2026_09_29_nginx_response_cache_execution_handoff" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L88", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L36", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_2" + "source": "plans_2026_09_29_nginx_response_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L118", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L183", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_3" + "source": "plans_2026_09_29_nginx_response_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_nginx_response_cache_task_2_cached_locations_shared_proxy_snippet_mirrored_ttls" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L131", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L302", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_4" + "source": "plans_2026_09_29_nginx_response_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_nginx_response_cache_task_3_measure_the_gil_relief_and_record_it" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L177", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L51", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_5" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L228", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L62", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_6" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L244", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L87", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_1_tickerpayloadcache_pre_materialize_per_ticker_payloads_at_refresh", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_7" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L263", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L101", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_8" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L315", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L116", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_9" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L349", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L131", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_2_fast_paths_in_stocksquerymanager_for_default_shaped_queries", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_10" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L405", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L152", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_3_convert_query_handlers_to_sync_def", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_11" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L461", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L164", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_3_convert_query_handlers_to_sync_def", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_12" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L482", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L176", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_13" + "source": "plans_2026_09_29_nginx_response_cache_task_1_nginx_compose_service_http_context_config_upstream_bypass_routing", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L512", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L195", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_14" + "source": "plans_2026_09_29_nginx_response_cache_task_2_cached_locations_shared_proxy_snippet_mirrored_ttls", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L519", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L206", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_15" + "source": "plans_2026_09_29_nginx_response_cache_task_2_cached_locations_shared_proxy_snippet_mirrored_ttls", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L539", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L246", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_16" + "source": "plans_2026_09_29_nginx_response_cache_task_2_cached_locations_shared_proxy_snippet_mirrored_ttls", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L548", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L282", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_17" + "source": "plans_2026_09_29_nginx_response_cache_task_2_cached_locations_shared_proxy_snippet_mirrored_ttls", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-stocks-api-perf.md", - "source_location": "L606", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L295", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_stocks_api_perf_task_4_pre_parsed_cotation_date_index_replace_filtercotationcolumn_hot_path", - "target": "plans_2026_08_15_stocks_api_perf_codeblock_18" + "source": "plans_2026_09_29_nginx_response_cache_task_2_cached_locations_shared_proxy_snippet_mirrored_ttls", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L314", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_08_15_workspace_endpoints_md", - "target": "plans_2026_08_15_workspace_endpoints_workspace_file_endpoints_agent_serve_file_tool_implementation_plan" + "source": "plans_2026_09_29_nginx_response_cache_task_3_measure_the_gil_relief_and_record_it", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L16", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L321", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_workspace_file_endpoints_agent_serve_file_tool_implementation_plan", - "target": "plans_2026_08_15_workspace_endpoints_global_constraints" + "source": "plans_2026_09_29_nginx_response_cache_task_3_measure_the_gil_relief_and_record_it", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L632", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L333", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_workspace_file_endpoints_agent_serve_file_tool_implementation_plan", - "target": "plans_2026_08_15_workspace_endpoints_self_review" + "source": "plans_2026_09_29_nginx_response_cache_task_3_measure_the_gil_relief_and_record_it", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L29", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L346", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_global_constraints", - "target": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write" + "source": "plans_2026_09_29_nginx_response_cache_task_3_measure_the_gil_relief_and_record_it", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L152", + "source_file": "docs/superpowers/plans/2026-09-29-nginx-response-cache.md", + "source_location": "L367", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_global_constraints", - "target": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting" + "source": "plans_2026_09_29_nginx_response_cache_task_3_measure_the_gil_relief_and_record_it", + "target": "plans_2026_09_29_nginx_response_cache_codeblock_19" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L198", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_global_constraints", - "target": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints" + "source": "docs_superpowers_plans_2026_09_29_stocks_cache_ttl_md", + "target": "plans_2026_09_29_stocks_cache_ttl_stocks_api_cache_ttl_fields_cache_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L465", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_global_constraints", - "target": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool" + "source": "plans_2026_09_29_stocks_cache_ttl_stocks_api_cache_ttl_fields_cache_implementation_plan", + "target": "plans_2026_09_29_stocks_cache_ttl_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L611", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L25", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_global_constraints", - "target": "plans_2026_08_15_workspace_endpoints_task_5_full_verification" + "source": "plans_2026_09_29_stocks_cache_ttl_stocks_api_cache_ttl_fields_cache_implementation_plan", + "target": "plans_2026_09_29_stocks_cache_ttl_review_focus_spec_implied_inputs_most_likely_to_bite" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L43", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L410", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_1" + "source": "plans_2026_09_29_stocks_cache_ttl_stocks_api_cache_ttl_fields_cache_implementation_plan", + "target": "plans_2026_09_29_stocks_cache_ttl_execution_handoff" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L108", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L36", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_2" + "source": "plans_2026_09_29_stocks_cache_ttl_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_stocks_cache_ttl_task_1_ttl_constants_6h_on_the_three_data_routes_header_alignment" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L145", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L136", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_1_sandbox_delete_file_binary_write", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_3" + "source": "plans_2026_09_29_stocks_cache_ttl_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_stocks_cache_ttl_task_2_cache_stocks_fields" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L166", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L254", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_4" + "source": "plans_2026_09_29_stocks_cache_ttl_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_stocks_cache_ttl_task_3_invalidate_the_endpoint_cache_on_feather_reload" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L172", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L340", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_5" + "source": "plans_2026_09_29_stocks_cache_ttl_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_stocks_cache_ttl_task_4_measure_the_6h_window_rss_and_record_the_verdict" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L180", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L50", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_6" + "source": "plans_2026_09_29_stocks_cache_ttl_task_1_ttl_constants_6h_on_the_three_data_routes_header_alignment", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L191", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L91", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_2_dependency_config_setting", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_7" + "source": "plans_2026_09_29_stocks_cache_ttl_task_1_ttl_constants_6h_on_the_three_data_routes_header_alignment", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L212", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L103", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_8" + "source": "plans_2026_09_29_stocks_cache_ttl_task_1_ttl_constants_6h_on_the_three_data_routes_header_alignment", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L368", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L112", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_9" + "source": "plans_2026_09_29_stocks_cache_ttl_task_1_ttl_constants_6h_on_the_three_data_routes_header_alignment", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L375", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L129", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_10" + "source": "plans_2026_09_29_stocks_cache_ttl_task_1_ttl_constants_6h_on_the_three_data_routes_header_alignment", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L381", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L152", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_11" + "source": "plans_2026_09_29_stocks_cache_ttl_task_2_cache_stocks_fields", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L458", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L165", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_3_controller_endpoints", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_12" + "source": "plans_2026_09_29_stocks_cache_ttl_task_2_cache_stocks_fields", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L479", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L220", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_13" + "source": "plans_2026_09_29_stocks_cache_ttl_task_2_cache_stocks_fields", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L560", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L228", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_14" + "source": "plans_2026_09_29_stocks_cache_ttl_task_2_cache_stocks_fields", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L566", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L247", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_15" + "source": "plans_2026_09_29_stocks_cache_ttl_task_2_cache_stocks_fields", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L593", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L269", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_16" + "source": "plans_2026_09_29_stocks_cache_ttl_task_3_invalidate_the_endpoint_cache_on_feather_reload", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L604", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L301", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_4_serve_file_agent_tool", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_17" + "source": "plans_2026_09_29_stocks_cache_ttl_task_3_invalidate_the_endpoint_cache_on_feather_reload", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-endpoints.md", - "source_location": "L626", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L311", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_endpoints_task_5_full_verification", - "target": "plans_2026_08_15_workspace_endpoints_codeblock_18" + "source": "plans_2026_09_29_stocks_cache_ttl_task_3_invalidate_the_endpoint_cache_on_feather_reload", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L333", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_08_15_workspace_frontend_md", - "target": "plans_2026_08_15_workspace_frontend_workspace_files_ui_promptbox_upload_implementation_plan" + "source": "plans_2026_09_29_stocks_cache_ttl_task_3_invalidate_the_endpoint_cache_on_feather_reload", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L13", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L352", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_workspace_files_ui_promptbox_upload_implementation_plan", - "target": "plans_2026_08_15_workspace_frontend_backend_contract_source_of_truth_for_api_js" + "source": "plans_2026_09_29_stocks_cache_ttl_task_4_measure_the_6h_window_rss_and_record_the_verdict", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L32", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L363", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_workspace_files_ui_promptbox_upload_implementation_plan", - "target": "plans_2026_08_15_workspace_frontend_global_constraints" + "source": "plans_2026_09_29_stocks_cache_ttl_task_4_measure_the_6h_window_rss_and_record_the_verdict", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L43", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L376", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_global_constraints", - "target": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js" + "source": "plans_2026_09_29_stocks_cache_ttl_task_4_measure_the_6h_window_rss_and_record_the_verdict", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L176", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L384", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_global_constraints", - "target": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar" + "source": "plans_2026_09_29_stocks_cache_ttl_task_4_measure_the_6h_window_rss_and_record_the_verdict", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L294", + "source_file": "docs/superpowers/plans/2026-09-29-stocks-cache-ttl.md", + "source_location": "L402", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_global_constraints", - "target": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx" + "source": "plans_2026_09_29_stocks_cache_ttl_task_4_measure_the_6h_window_rss_and_record_the_verdict", + "target": "plans_2026_09_29_stocks_cache_ttl_codeblock_19" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L403", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_global_constraints", - "target": "plans_2026_08_15_workspace_frontend_task_4_docker_restart_e2e_of_prometheus_chat_stream_performed_by_controller_not_a_subagent" + "source": "docs_superpowers_plans_2026_09_29_uvicorn_worker_scaling_md", + "target": "plans_2026_09_29_uvicorn_worker_scaling_uvicorn_fastapi_worker_scaling_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L61", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js", - "target": "plans_2026_08_15_workspace_frontend_codeblock_1" + "source": "plans_2026_09_29_uvicorn_worker_scaling_uvicorn_fastapi_worker_scaling_implementation_plan", + "target": "plans_2026_09_29_uvicorn_worker_scaling_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L122", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L23", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js", - "target": "plans_2026_08_15_workspace_frontend_codeblock_2" + "source": "plans_2026_09_29_uvicorn_worker_scaling_uvicorn_fastapi_worker_scaling_implementation_plan", + "target": "plans_2026_09_29_uvicorn_worker_scaling_review_focus" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L169", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L725", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_1_api_layer_workspace_functions_in_src_api_js", - "target": "plans_2026_08_15_workspace_frontend_codeblock_3" + "source": "plans_2026_09_29_uvicorn_worker_scaling_uvicorn_fastapi_worker_scaling_implementation_plan", + "target": "plans_2026_09_29_uvicorn_worker_scaling_self_review" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L191", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L35", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", - "target": "plans_2026_08_15_workspace_frontend_codeblock_4" + "source": "plans_2026_09_29_uvicorn_worker_scaling_review_focus", + "target": "plans_2026_09_29_uvicorn_worker_scaling_task_1_measure_the_concurrency_ceiling_and_record_the_decision" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L246", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L170", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", - "target": "plans_2026_08_15_workspace_frontend_codeblock_5" + "source": "plans_2026_09_29_uvicorn_worker_scaling_review_focus", + "target": "plans_2026_09_29_uvicorn_worker_scaling_task_2_load_the_cache_on_the_build_loser_path" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L272", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L292", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", - "target": "plans_2026_08_15_workspace_frontend_codeblock_6" + "source": "plans_2026_09_29_uvicorn_worker_scaling_review_focus", + "target": "plans_2026_09_29_uvicorn_worker_scaling_task_3_run_migrations_exactly_once_per_deploy" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L287", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L365", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_2_settings_menu_workspace_files_grid_in_sessionsidebar", - "target": "plans_2026_08_15_workspace_frontend_codeblock_7" + "source": "plans_2026_09_29_uvicorn_worker_scaling_review_focus", + "target": "plans_2026_09_29_uvicorn_worker_scaling_task_4_size_database_pools_by_process_count" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L308", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L431", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx", - "target": "plans_2026_08_15_workspace_frontend_codeblock_8" + "source": "plans_2026_09_29_uvicorn_worker_scaling_review_focus", + "target": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L372", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L654", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx", - "target": "plans_2026_08_15_workspace_frontend_codeblock_9" + "source": "plans_2026_09_29_uvicorn_worker_scaling_review_focus", + "target": "plans_2026_09_29_uvicorn_worker_scaling_task_6_verify_the_fleet_single_build_one_migration_shared_frame" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-15-workspace-frontend.md", - "source_location": "L396", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L47", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_15_workspace_frontend_task_3_drag_drop_file_upload_in_the_promptbox_inputbar_jsx", - "target": "plans_2026_08_15_workspace_frontend_codeblock_10" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_1_measure_the_concurrency_ceiling_and_record_the_decision", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L145", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_08_17_openui_migration_md", - "target": "plans_2026_08_17_openui_migration_openui_migration_plan" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_1_measure_the_concurrency_ceiling_and_record_the_decision", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L20", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L158", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_global_constraints" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_1_measure_the_concurrency_ceiling_and_record_the_decision", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L30", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L182", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_file_structure" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_2_load_the_cache_on_the_build_loser_path", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L52", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L228", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_2_load_the_cache_on_the_build_loser_path", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L80", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L244", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_task_2_define_prometheus_component_library" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_2_load_the_cache_on_the_build_loser_path", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L385", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L285", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_2_load_the_cache_on_the_build_loser_path", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L455", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L304", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_3_run_migrations_exactly_once_per_deploy", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L610", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L333", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_task_5_integration_test" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_3_run_migrations_exactly_once_per_deploy", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L640", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L358", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_openui_migration_plan", - "target": "plans_2026_08_17_openui_migration_verification_checklist" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_3_run_migrations_exactly_once_per_deploy", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L32", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L377", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_file_structure", - "target": "plans_2026_08_17_openui_migration_frontend_local_only_never_committed" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_4_size_database_pools_by_process_count", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L43", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L407", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_file_structure", - "target": "plans_2026_08_17_openui_migration_backend_commit" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_4_size_database_pools_by_process_count", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L58", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L424", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui", - "target": "plans_2026_08_17_openui_migration_codeblock_1" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_4_size_database_pools_by_process_count", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L66", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L444", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui", - "target": "plans_2026_08_17_openui_migration_codeblock_2" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L72", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L476", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_1_install_openui_remove_mdocui", - "target": "plans_2026_08_17_openui_migration_codeblock_3" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L86", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L483", "weight": 1.0, - "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_2_define_prometheus_component_library", - "target": "plans_2026_08_17_openui_migration_component_mapping" + "confidence_score": 1.0, + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L101", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L494", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_component_mapping", - "target": "plans_2026_08_17_openui_migration_codeblock_4" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L339", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L618", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_component_mapping", - "target": "plans_2026_08_17_openui_migration_codeblock_5" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L396", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L647", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", - "target": "plans_2026_08_17_openui_migration_codeblock_6" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_5_run_stocks_api_as_n_single_service_processes_behind_nginx", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_19" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L428", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L666", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", - "target": "plans_2026_08_17_openui_migration_codeblock_7" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_6_verify_the_fleet_single_build_one_migration_shared_frame", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_20" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L435", + "source_file": "docs/superpowers/plans/2026-09-29-uvicorn-worker-scaling.md", + "source_location": "L718", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", - "target": "plans_2026_08_17_openui_migration_codeblock_8" + "source": "plans_2026_09_29_uvicorn_worker_scaling_task_6_verify_the_fleet_single_build_one_migration_shared_frame", + "target": "plans_2026_09_29_uvicorn_worker_scaling_codeblock_21" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L442", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", - "target": "plans_2026_08_17_openui_migration_codeblock_9" + "source": "docs_superpowers_plans_2026_09_29_zerocopy_stocks_cache_md", + "target": "plans_2026_09_29_zerocopy_stocks_cache_zero_copy_memory_mapped_stocks_cache_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L449", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_3_create_openui_renderer", - "target": "plans_2026_08_17_openui_migration_codeblock_10" + "source": "plans_2026_09_29_zerocopy_stocks_cache_zero_copy_memory_mapped_stocks_cache_implementation_plan", + "target": "plans_2026_09_29_zerocopy_stocks_cache_global_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L467", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L23", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_11" + "source": "plans_2026_09_29_zerocopy_stocks_cache_zero_copy_memory_mapped_stocks_cache_implementation_plan", + "target": "plans_2026_09_29_zerocopy_stocks_cache_review_focus_spec_implied_inputs_most_likely_to_bite" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L486", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L353", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_12" + "source": "plans_2026_09_29_zerocopy_stocks_cache_zero_copy_memory_mapped_stocks_cache_implementation_plan", + "target": "plans_2026_09_29_zerocopy_stocks_cache_execution_handoff" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L501", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L33", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_13" + "source": "plans_2026_09_29_zerocopy_stocks_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_zerocopy_stocks_cache_task_1_presort_at_build_time_order_by_b3_presorted_marker" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L542", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L125", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_14" + "source": "plans_2026_09_29_zerocopy_stocks_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L555", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L292", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_15" + "source": "plans_2026_09_29_zerocopy_stocks_cache_review_focus_spec_implied_inputs_most_likely_to_bite", + "target": "plans_2026_09_29_zerocopy_stocks_cache_task_3_arrowdtype_aware_json_column_decompression_query_py_guard" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L572", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L47", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_16" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_1_presort_at_build_time_order_by_b3_presorted_marker", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L577", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L93", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_17" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_1_presort_at_build_time_order_by_b3_presorted_marker", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L590", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L101", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_18" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_1_presort_at_build_time_order_by_b3_presorted_marker", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L596", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L107", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_19" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_1_presort_at_build_time_order_by_b3_presorted_marker", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L602", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L118", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_4_backend_system_prompt", - "target": "plans_2026_08_17_openui_migration_codeblock_20" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_1_presort_at_build_time_order_by_b3_presorted_marker", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L614", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L142", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_5_integration_test", - "target": "plans_2026_08_17_openui_migration_codeblock_21" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-08-17-openui-migration.md", - "source_location": "L620", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L148", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_08_17_openui_migration_task_5_integration_test", - "target": "plans_2026_08_17_openui_migration_codeblock_22" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L1", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L152", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_09_03_followup_hardening_md", - "target": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L13", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L159", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan", - "target": "plans_2026_09_03_followup_hardening_global_constraints" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L26", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L165", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan", - "target": "plans_2026_09_03_followup_hardening_file_map" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L814", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L250", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_follow_up_hardening_implementation_plan", - "target": "plans_2026_09_03_followup_hardening_self_review" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L44", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L256", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L127", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L268", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L240", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L285", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_2_zero_copy_mmap_load_readfeatherdataframe_marker_aware_sort_skip", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L337", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L306", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_3_arrowdtype_aware_json_column_decompression_query_py_guard", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L415", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L327", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_3_arrowdtype_aware_json_column_decompression_query_py_guard", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L509", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L331", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_3_arrowdtype_aware_json_column_decompression_query_py_guard", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L562", + "source_file": "docs/superpowers/plans/2026-09-29-zerocopy-stocks-cache.md", + "source_location": "L346", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint" + "source": "plans_2026_09_29_zerocopy_stocks_cache_task_3_arrowdtype_aware_json_column_decompression_query_py_guard", + "target": "plans_2026_09_29_zerocopy_stocks_cache_codeblock_18" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L623", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures" + "source": "docs_superpowers_specs_2026_09_04_wallet_design_md", + "target": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L712", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L8", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_file_map", - "target": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_1_context" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L61", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L46", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", - "target": "plans_2026_09_03_followup_hardening_codeblock_1" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_2_decision_design_a_pure_event_log_derive_at_read_time" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L80", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L68", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", - "target": "plans_2026_09_03_followup_hardening_codeblock_2" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_3_data_model_user_db_alembic" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L96", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L131", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", - "target": "plans_2026_09_03_followup_hardening_codeblock_3" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_4_derivations_all_at_read_time_date_order" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L120", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L175", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_1_thoth_maat_permission_decision", - "target": "plans_2026_09_03_followup_hardening_codeblock_4" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_5_endpoints_wallet_on_the_user_port_via_walletservice_getcurrentuser_gate_inline_body_query" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L143", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L203", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", - "target": "plans_2026_09_03_followup_hardening_codeblock_5" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_6_live_prices_endpoint_only_isolation" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L185", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L235", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", - "target": "plans_2026_09_03_followup_hardening_codeblock_6" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_7_validation_422_naming_the_rule_503_for_price_outages" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L198", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L266", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", - "target": "plans_2026_09_03_followup_hardening_codeblock_7" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_8_testing_quality_gates_precedents_to_honor" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L204", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L287", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", - "target": "plans_2026_09_03_followup_hardening_codeblock_8" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_9_scope" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L233", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L302", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_2_p6_redis_cashews_insertion_behind_existing_sync_cache", - "target": "plans_2026_09_03_followup_hardening_codeblock_9" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_10_splits_served_prices_are_raw_by_default_verified_verdict_encode_as_is" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L256", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L326", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", - "target": "plans_2026_09_03_followup_hardening_codeblock_10" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_11_dividends_no_dedicated_endpoint_verified_verdict_encode_as_is" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L284", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L364", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", - "target": "plans_2026_09_03_followup_hardening_codeblock_11" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_12_corporate_actions_splits_and_grupamentos_via_one_read_time_mechanism" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L298", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L403", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", - "target": "plans_2026_09_03_followup_hardening_codeblock_12" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_13_dividend_methodology_ex_date_smoothing_check_both_branches_test_decides" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L330", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L422", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_3_zstd_hot_path_rework_via_feather_to_dict_zstd_migration", - "target": "plans_2026_09_03_followup_hardening_codeblock_13" + "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", + "target": "specs_2026_09_04_wallet_design_spec_self_review" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L351", + "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", + "source_location": "L53", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard", - "target": "plans_2026_09_03_followup_hardening_codeblock_14" + "source": "specs_2026_09_04_wallet_design_2_decision_design_a_pure_event_log_derive_at_read_time", + "target": "specs_2026_09_04_wallet_design_approaches_considered" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L390", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard", - "target": "plans_2026_09_03_followup_hardening_codeblock_15" + "source": "docs_superpowers_specs_2026_09_29_nginx_scaling_design_md", + "target": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L408", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L9", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_4_queryhistorical_queryfundamental_presort_invariant_guard", - "target": "plans_2026_09_03_followup_hardening_codeblock_16" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_1_context" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L429", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L40", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only", - "target": "plans_2026_09_03_followup_hardening_codeblock_17" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_2_decisions" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L451", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L103", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only", - "target": "plans_2026_09_03_followup_hardening_codeblock_18" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_3_caching_policy_canonical" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L502", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L130", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_5_history_backfill_dedup_indices_as_logging_only", - "target": "plans_2026_09_03_followup_hardening_codeblock_19" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_4_topology" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L525", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L148", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable", - "target": "plans_2026_09_03_followup_hardening_codeblock_20" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_5_quota_and_rate_limits_after_caching" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L541", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L159", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable", - "target": "plans_2026_09_03_followup_hardening_codeblock_21" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_6_non_goals" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L555", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L163", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_6_stocks_api_limiter_design_design_only_do_not_enable", - "target": "plans_2026_09_03_followup_hardening_codeblock_22" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_7_acceptance_criteria" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L577", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L173", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint", - "target": "plans_2026_09_03_followup_hardening_codeblock_23" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_8_open_decisions_product_owned" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L598", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L182", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint", - "target": "plans_2026_09_03_followup_hardening_codeblock_24" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_9_risks_top_of_the_register_full_15_row_table_in_the_source_document_3_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L616", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L195", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_7_remove_temporary_run_py_scraper_debug_endpoint", - "target": "plans_2026_09_03_followup_hardening_codeblock_25" + "source": "specs_2026_09_29_nginx_scaling_design_nginx_response_cache_multi_server_scaling_design_spec", + "target": "specs_2026_09_29_nginx_scaling_design_10_plans_and_follow_ups" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L640", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L42", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", - "target": "plans_2026_09_03_followup_hardening_codeblock_26" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d1_put_an_nginx_response_cache_in_front_of_stocks_accepted" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L668", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L55", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", - "target": "plans_2026_09_03_followup_hardening_codeblock_27" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d2_raise_the_app_layer_ttls_and_cache_fields_before_any_nginx_work_accepted_rev_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L676", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L59", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", - "target": "plans_2026_09_03_followup_hardening_codeblock_28" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d3_pinned_static_upstreams_now_docker_swarm_routing_mesh_only_at_5_nodes_accepted" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L705", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L75", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_8_fix_20_pre_existing_environmental_failures", - "target": "plans_2026_09_03_followup_hardening_codeblock_29" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d4_cache_is_per_node_rebuilt_on_version_not_nfs_not_rsync_accepted" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L731", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L79", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", - "target": "plans_2026_09_03_followup_hardening_codeblock_30" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d5_redis_is_deferred_accepted_rev_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L753", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L83", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", - "target": "plans_2026_09_03_followup_hardening_codeblock_31" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d6_extraction_order_stocks_api_orunmila_forgevm_user_scraper_accepted" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L769", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L87", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", - "target": "plans_2026_09_03_followup_hardening_codeblock_32" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d7_health_strategy_stays_passive_until_a_black_hole_is_observed_accepted" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L780", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L91", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", - "target": "plans_2026_09_03_followup_hardening_codeblock_33" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d8_cached_hits_bypass_the_monthly_quota_counter_accepted_product_visible" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-03-followup-hardening.md", - "source_location": "L807", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L95", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_03_followup_hardening_task_9_session_refresh_token_rotation_follow_up", - "target": "plans_2026_09_03_followup_hardening_codeblock_34" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d9_benchmark_result_artifacts_follow_the_draft_convention_accepted_rev_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L99", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_09_04_wallet_management_md", - "target": "plans_2026_09_04_wallet_management_wallet_management_thoth_iyagba_implementation_plan" + "source": "specs_2026_09_29_nginx_scaling_design_2_decisions", + "target": "specs_2026_09_29_nginx_scaling_design_d10_the_endpoint_cache_is_invalidated_on_every_feather_reload_accepted" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L13", + "source_file": "docs/superpowers/specs/2026-09-29-nginx-scaling-design.md", + "source_location": "L135", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_wallet_management_thoth_iyagba_implementation_plan", - "target": "plans_2026_09_04_wallet_management_global_constraints" + "source": "specs_2026_09_29_nginx_scaling_design_4_topology", + "target": "specs_2026_09_29_nginx_scaling_design_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L35", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L13", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_wallet_management_thoth_iyagba_implementation_plan", - "target": "plans_2026_09_04_wallet_management_file_structure" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state_file_line" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", "source_location": "L60", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_2_options_evaluated" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L166", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L74", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_3_exact_required_changes_before_raising_n" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L269", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L87", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_4_risks_and_open_items" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L391", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L100", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_5_baseline_measured" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L567", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L106", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_6_evaluation_of_the_user_s_docs_nginx_scaling_plan_md" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L720", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L121", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_and_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_7_what_is_out_of_scope_separate_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L869", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L15", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices" + "source": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state_file_line", + "target": "superpowers_uvicorn_worker_scaling_plan_1_1_runtime_topology_one_process_many_threads" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1000", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L33", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain" + "source": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state_file_line", + "target": "superpowers_uvicorn_worker_scaling_plan_1_2_the_cache_is_already_the_right_shape_for_multi_process" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1115", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L48", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage" + "source": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state_file_line", + "target": "superpowers_uvicorn_worker_scaling_plan_1_3_per_process_state_that_multiplies_with_n" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1224", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L8", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1325", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L40", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_2_the_blocking_defect_must_fix_before_n_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1482", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L66", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_3_options_evaluated" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1618", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L79", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_file_structure", - "target": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_4_recommended_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L73", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L109", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", - "target": "plans_2026_09_04_wallet_management_codeblock_1" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_5_evaluation_of_the_existing_scaling_plan_recovered_from_git" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L101", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L122", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", - "target": "plans_2026_09_04_wallet_management_codeblock_2" + "source": "superpowers_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_6_risks_open_items" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L138", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L10", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", - "target": "plans_2026_09_04_wallet_management_codeblock_3" + "source": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state", + "target": "superpowers_uvicorn_worker_scaling_plan_1_1_process_model_exactly_one_process_several_threads" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L144", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L23", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", - "target": "plans_2026_09_04_wallet_management_codeblock_4" + "source": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state", + "target": "superpowers_uvicorn_worker_scaling_plan_1_2_cache_post_refactor_ram_sharing_works" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L159", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L27", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_1_wallet_models_and_user_relationship", - "target": "plans_2026_09_04_wallet_management_codeblock_5" + "source": "superpowers_uvicorn_worker_scaling_plan_1_verified_current_state", + "target": "superpowers_uvicorn_worker_scaling_plan_1_3_per_process_resources_that_multiply_with_n_workers" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L189", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L44", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables", - "target": "plans_2026_09_04_wallet_management_codeblock_6" + "source": "superpowers_uvicorn_worker_scaling_plan_2_the_blocking_defect_must_fix_before_n_1", + "target": "superpowers_uvicorn_worker_scaling_plan_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L248", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L81", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables", - "target": "plans_2026_09_04_wallet_management_codeblock_7" + "source": "superpowers_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_phase_0_measure_half_a_day_no_infra" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L262", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L87", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_2_alembic_migration_for_wallet_tables", - "target": "plans_2026_09_04_wallet_management_codeblock_8" + "source": "superpowers_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_phase_1_correctness_fixes_required_before_any_n_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L281", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L93", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math", - "target": "plans_2026_09_04_wallet_management_codeblock_9" + "source": "superpowers_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_phase_2_enable_workers_on_one_host_option_c" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L325", + "source_file": "docs/superpowers/uvicorn-worker-scaling-plan.md", + "source_location": "L99", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math", - "target": "plans_2026_09_04_wallet_management_codeblock_10" + "source": "superpowers_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "superpowers_uvicorn_worker_scaling_plan_phase_3_multi_host_only_if_you_split_boxes" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L384", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_3_pure_derivation_math", - "target": "plans_2026_09_04_wallet_management_codeblock_11" + "source": "docs_uvicorn_worker_scaling_plan_md", + "target": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L404", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L8", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", - "target": "plans_2026_09_04_wallet_management_codeblock_12" + "source": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "docs_uvicorn_worker_scaling_plan_1_verified_current_state" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L471", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L40", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", - "target": "plans_2026_09_04_wallet_management_codeblock_13" + "source": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "docs_uvicorn_worker_scaling_plan_2_the_blocking_defect_must_fix_before_n_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L524", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L66", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", - "target": "plans_2026_09_04_wallet_management_codeblock_14" + "source": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "docs_uvicorn_worker_scaling_plan_3_options_evaluated" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L560", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L79", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_4_holding_endpoints_create_holding_and_retarget_weight", - "target": "plans_2026_09_04_wallet_management_codeblock_15" + "source": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "docs_uvicorn_worker_scaling_plan_4_recommended_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L580", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L109", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", - "target": "plans_2026_09_04_wallet_management_codeblock_16" + "source": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "docs_uvicorn_worker_scaling_plan_5_evaluation_of_the_existing_scaling_plan_recovered_from_git" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L649", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L122", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", - "target": "plans_2026_09_04_wallet_management_codeblock_17" + "source": "docs_uvicorn_worker_scaling_plan_uvicorn_worker_scaling_verified_state_evaluated_plan", + "target": "docs_uvicorn_worker_scaling_plan_6_risks_open_items" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L659", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L10", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", - "target": "plans_2026_09_04_wallet_management_codeblock_18" + "source": "docs_uvicorn_worker_scaling_plan_1_verified_current_state", + "target": "docs_uvicorn_worker_scaling_plan_1_1_process_model_exactly_one_process_several_threads" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L693", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L23", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", - "target": "plans_2026_09_04_wallet_management_codeblock_19" + "source": "docs_uvicorn_worker_scaling_plan_1_verified_current_state", + "target": "docs_uvicorn_worker_scaling_plan_1_2_cache_post_refactor_ram_sharing_works" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L713", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L27", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_5_lot_endpoint_append_immutable_buy_sell_lots", - "target": "plans_2026_09_04_wallet_management_codeblock_20" + "source": "docs_uvicorn_worker_scaling_plan_1_verified_current_state", + "target": "docs_uvicorn_worker_scaling_plan_1_3_per_process_resources_that_multiply_with_n_workers" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L732", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L44", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot", - "target": "plans_2026_09_04_wallet_management_codeblock_21" + "source": "docs_uvicorn_worker_scaling_plan_2_the_blocking_defect_must_fix_before_n_1", + "target": "docs_uvicorn_worker_scaling_plan_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L804", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L81", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot", - "target": "plans_2026_09_04_wallet_management_codeblock_22" + "source": "docs_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "docs_uvicorn_worker_scaling_plan_phase_0_measure_half_a_day_no_infra" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L862", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L87", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_6_price_client_one_batched_stocks_api_fetch_per_snapshot", - "target": "plans_2026_09_04_wallet_management_codeblock_23" + "source": "docs_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "docs_uvicorn_worker_scaling_plan_phase_1_correctness_fixes_required_before_any_n_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L882", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L93", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", - "target": "plans_2026_09_04_wallet_management_codeblock_24" + "source": "docs_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "docs_uvicorn_worker_scaling_plan_phase_2_enable_workers_on_one_host_option_c" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L944", + "source_file": "docs/uvicorn-worker-scaling-plan.md", + "source_location": "L99", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", - "target": "plans_2026_09_04_wallet_management_codeblock_25" + "source": "docs_uvicorn_worker_scaling_plan_4_recommended_plan", + "target": "docs_uvicorn_worker_scaling_plan_phase_3_multi_host_only_if_you_split_boxes" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L972", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", - "target": "plans_2026_09_04_wallet_management_codeblock_26" + "source": "docs_investidor10_wallet_research_md", + "target": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L993", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L10", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_7_snapshot_endpoint_derived_portfolio_read_with_live_prices", - "target": "plans_2026_09_04_wallet_management_codeblock_27" + "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "docs_investidor10_wallet_research_1_feature_inventory_nav_structure" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1013", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L30", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", - "target": "plans_2026_09_04_wallet_management_codeblock_28" + "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "docs_investidor10_wallet_research_2_user_lifecycle_end_to_end" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1062", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L40", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", - "target": "plans_2026_09_04_wallet_management_codeblock_29" + "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "docs_investidor10_wallet_research_3_wallet_api_reference" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1095", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L65", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", - "target": "plans_2026_09_04_wallet_management_codeblock_30" + "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "docs_investidor10_wallet_research_4_data_model_inference_from_payloads_no_db_access" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1108", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L74", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_8_history_endpoint_paginated_lots_with_per_sell_realized_gain", - "target": "plans_2026_09_04_wallet_management_codeblock_31" + "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "docs_investidor10_wallet_research_5_product_logic" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1143", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L82", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", - "target": "plans_2026_09_04_wallet_management_codeblock_32" + "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "docs_investidor10_wallet_research_5b_gaps_unverified_do_not_treat_as_fact" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1157", + "source_file": "docs/investidor10-wallet-research.md", + "source_location": "L86", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", - "target": "plans_2026_09_04_wallet_management_codeblock_33" + "source": "docs_investidor10_wallet_research_investidor10_wallet_empirical_research_for_mansa", + "target": "docs_investidor10_wallet_research_6_concrete_mansa_proposal_build_first_later_minimal_sketches" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1165", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", - "target": "plans_2026_09_04_wallet_management_codeblock_34" + "source": "docs_investidor10_wallet_spec_md", + "target": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1192", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L12", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", - "target": "plans_2026_09_04_wallet_management_codeblock_35" + "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "docs_investidor10_wallet_spec_1_requirements" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1217", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L38", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_9_walletservice_wiring_quality_gate_full_suite_ruff_mypy_coverage", - "target": "plans_2026_09_04_wallet_management_codeblock_36" + "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "docs_investidor10_wallet_spec_2_domain_model" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1237", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L49", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", - "target": "plans_2026_09_04_wallet_management_codeblock_37" + "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "docs_investidor10_wallet_spec_3_api_contracts_all_under_api_wallet_chain_main_controller_wallet_controller_py_main_service_wallet_service_py_fn_main_models_wallet_py_model_auth_depends_usermanager_getcurrentuser_depends_getsession_throughout" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1276", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L66", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", - "target": "plans_2026_09_04_wallet_management_codeblock_38" + "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "docs_investidor10_wallet_spec_4_phased_build_plan_writing_plans_each_phase_independently_reviewable_reviewer_pass_per_phase" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1299", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L72", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", - "target": "plans_2026_09_04_wallet_management_codeblock_39" + "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "docs_investidor10_wallet_spec_5_risks_assumptions_honest_flags_carried_over_do_not_treat_as_fact" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1318", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L81", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_10_first_party_get_stocks_dividends_adjusted_docstring_fix", - "target": "plans_2026_09_04_wallet_management_codeblock_40" + "source": "docs_investidor10_wallet_spec_mansa_wallet_spec_driven_implementation_spec", + "target": "docs_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1341", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L14", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", - "target": "plans_2026_09_04_wallet_management_codeblock_41" + "source": "docs_investidor10_wallet_spec_1_requirements", + "target": "docs_investidor10_wallet_spec_1_1_functional_per_surface_tags_exists_build_on_it_partial_half_reusable_missing_greenfield" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1397", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L28", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", - "target": "plans_2026_09_04_wallet_management_codeblock_42" + "source": "docs_investidor10_wallet_spec_1_requirements", + "target": "docs_investidor10_wallet_spec_1_2_non_functional" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1419", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L85", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", - "target": "plans_2026_09_04_wallet_management_codeblock_43" + "source": "docs_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "docs_investidor10_wallet_spec_6_1_db_migrations_user_db_ready_2_actions" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1452", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L92", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", - "target": "plans_2026_09_04_wallet_management_codeblock_44" + "source": "docs_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "docs_investidor10_wallet_spec_6_2_stocks_price_access_ready_for_full_series_one_new_helper_needed" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1475", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L98", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_11_wallet_receipt_ledger_wallet_dividends_table_receipt_suggestion_endpoints", - "target": "plans_2026_09_04_wallet_management_codeblock_45" + "source": "docs_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "docs_investidor10_wallet_spec_6_3_wiring_auth_tests_ready" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1496", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L104", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_46" + "source": "docs_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "docs_investidor10_wallet_spec_6_4_scraper_pipeline_p2_dividends_has_b3_ready_public_sources_only" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1512", + "source_file": "docs/investidor10-wallet-spec.md", + "source_location": "L110", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_47" + "source": "docs_investidor10_wallet_spec_6_readiness_assessment_s3_verified_2026_09_29_prerequisites_before_p1", + "target": "docs_investidor10_wallet_spec_6_5_ordered_actions_before_p1_code" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1528", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L1", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_48" + "source": "docs_nginx_scaling_plan_md", + "target": "docs_nginx_scaling_plan_nginx_scaling_plan_reverse_proxy_response_cache_for_stocks_and_the_multi_server_evolution" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1546", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L31", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_49" + "source": "docs_nginx_scaling_plan_md", + "target": "docs_nginx_scaling_plan_part_1_implementation_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1582", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L314", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_50" + "source": "docs_nginx_scaling_plan_md", + "target": "docs_nginx_scaling_plan_part_2_benchmark_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1613", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L477", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_12_split_cliff_regression_test_snapshot_history_dividend_extension_final_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_51" + "source": "docs_nginx_scaling_plan_md", + "target": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1635", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L628", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_52" + "source": "docs_nginx_scaling_plan_md", + "target": "docs_nginx_scaling_plan_open_decisions_blocking_or_product_owned" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1661", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L636", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_53" + "source": "docs_nginx_scaling_plan_md", + "target": "docs_nginx_scaling_plan_next_actions_not_in_scope_here" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1686", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L11", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_54" + "source": "docs_nginx_scaling_plan_nginx_scaling_plan_reverse_proxy_response_cache_for_stocks_and_the_multi_server_evolution", + "target": "docs_nginx_scaling_plan_0_purpose_and_constraints" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-04-wallet-management.md", - "source_location": "L1727", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L33", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_04_wallet_management_task_13_corporate_actions_table_read_time_scaling_sobras_rule_definitive_full_gate", - "target": "plans_2026_09_04_wallet_management_codeblock_55" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_1_architecture_decision" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-12-artifact-removal-cache-verdict.md", - "source_location": "L1", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L46", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_09_12_artifact_removal_cache_verdict_md", - "target": "plans_2026_09_12_artifact_removal_cache_verdict_artifact_removal_matrix_cache_verdict_plan" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_2_file_layout" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-12-artifact-removal-cache-verdict.md", - "source_location": "L3", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L63", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_12_artifact_removal_cache_verdict_artifact_removal_matrix_cache_verdict_plan", - "target": "plans_2026_09_12_artifact_removal_cache_verdict_part_1_deletions_safe_no_live_referrers" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-12-artifact-removal-cache-verdict.md", - "source_location": "L25", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L119", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_12_artifact_removal_cache_verdict_artifact_removal_matrix_cache_verdict_plan", - "target": "plans_2026_09_12_artifact_removal_cache_verdict_part_2_cache_verdict_keep_the_dict_skip_cashews" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L1", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L218", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_09_14_memory_postgres_pgvector_plan_md", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_memory_postgres_pgvector_migration_implementation_plan" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_5_phase_p2_port_scheme_worker_containers_keepalive" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L13", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L244", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_memory_postgres_pgvector_migration_implementation_plan", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L24", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L276", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_7_phase_p4_handoff_design_no_code_in_this_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L79", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L287", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_2_delete_vector_py_rewrite_search" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_8_quota_rate_limit_semantics_after_caching" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L139", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L299", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_3_update_the_test_files" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_9_anti_scraping_note_todo_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L171", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L303", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_4_full_test_sweep_18_suites_postgres_ci_parity" + "source": "docs_nginx_scaling_plan_part_1_implementation_plan", + "target": "docs_nginx_scaling_plan_1_10_edge_cases_risks_implementation" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L185", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L49", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_global_constraints", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_task_5_docs_close" + "source": "docs_nginx_scaling_plan_1_2_file_layout", + "target": "docs_nginx_scaling_plan_codeblock_1" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L35", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L65", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_1" + "source": "docs_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton", + "target": "docs_nginx_scaling_plan_codeblock_2" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L65", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L85", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_2" + "source": "docs_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton", + "target": "docs_nginx_scaling_plan_codeblock_3" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L74", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L106", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_1_pgvector_migration_backfill", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_3" + "source": "docs_nginx_scaling_plan_1_3_phase_p0_nginx_service_config_skeleton", + "target": "docs_nginx_scaling_plan_codeblock_4" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L97", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L122", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_2_delete_vector_py_rewrite_search", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_4" + "source": "docs_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives", + "target": "docs_nginx_scaling_plan_codeblock_5" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L134", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L153", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_2_delete_vector_py_rewrite_search", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_5" + "source": "docs_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives", + "target": "docs_nginx_scaling_plan_codeblock_6" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L148", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L209", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_3_update_the_test_files", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_6" + "source": "docs_nginx_scaling_plan_1_4_phase_p1_cache_locations_ttl_table_directives", + "target": "docs_nginx_scaling_plan_codeblock_7" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L166", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L224", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_3_update_the_test_files", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_7" + "source": "docs_nginx_scaling_plan_1_5_phase_p2_port_scheme_worker_containers_keepalive", + "target": "docs_nginx_scaling_plan_codeblock_8" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-14-memory-postgres-pgvector-plan.md", - "source_location": "L189", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L246", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_14_memory_postgres_pgvector_plan_task_5_docs_close", - "target": "plans_2026_09_14_memory_postgres_pgvector_plan_codeblock_8" + "source": "docs_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy", + "target": "docs_nginx_scaling_plan_codeblock_9" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L1", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L258", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_plans_2026_09_15_adopt_libs_md", - "target": "plans_2026_09_15_adopt_libs_adopt_libs_implementation_plan" + "source": "docs_nginx_scaling_plan_1_6_phase_p3_remote_vps_upstreams_health_strategy", + "target": "docs_nginx_scaling_plan_codeblock_10" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L13", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L316", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_adopt_libs_implementation_plan", - "target": "plans_2026_09_15_adopt_libs_global_constraints" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_0_grounding_what_the_code_actually_does" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L24", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L348", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_1_tenacity_replaces_bespoke_retries" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_1_hypotheses" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L56", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L357", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_2_cashews_native_probe_first" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_2_tooling" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L76", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L407", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_3_pydantic_validates_llm_extraction_json" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_3_scenarios" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L102", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L419", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_4_sse_starlette_replaces_hand_sse_bus" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_4_protocol" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L117", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L430", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_5_rapidfuzz_memory_key_dedup" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_5_metrics" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L132", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L434", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_6_cachetools_bounds_token_cache" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_6_acceptance_thresholds_all_proposed_freeze_after_first_real_run" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L143", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L451", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_7_user_agents_fills_device_fields_optional" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_7_results_doc_layout" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L154", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L460", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_global_constraints", - "target": "plans_2026_09_15_adopt_libs_task_8_pytest_plugin_set" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_8_feeding_status_todo_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L38", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L466", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_task_1_tenacity_replaces_bespoke_retries", - "target": "plans_2026_09_15_adopt_libs_codeblock_1" + "source": "docs_nginx_scaling_plan_part_2_benchmark_plan", + "target": "docs_nginx_scaling_plan_2_9_benchmark_risks" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L51", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L360", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_task_1_tenacity_replaces_bespoke_retries", - "target": "plans_2026_09_15_adopt_libs_codeblock_2" + "source": "docs_nginx_scaling_plan_2_2_tooling", + "target": "docs_nginx_scaling_plan_codeblock_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L72", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L373", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_task_2_cashews_native_probe_first", - "target": "plans_2026_09_15_adopt_libs_codeblock_3" + "source": "docs_nginx_scaling_plan_2_2_tooling", + "target": "docs_nginx_scaling_plan_codeblock_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/plans/2026-09-15-adopt-libs.md", - "source_location": "L88", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L381", "weight": 1.0, "confidence_score": 1.0, - "source": "plans_2026_09_15_adopt_libs_task_3_pydantic_validates_llm_extraction_json", - "target": "plans_2026_09_15_adopt_libs_codeblock_4" + "source": "docs_nginx_scaling_plan_2_2_tooling", + "target": "docs_nginx_scaling_plan_codeblock_13" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L1", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L387", "weight": 1.0, "confidence_score": 1.0, - "source": "docs_superpowers_specs_2026_09_04_wallet_design_md", - "target": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec" + "source": "docs_nginx_scaling_plan_2_2_tooling", + "target": "docs_nginx_scaling_plan_codeblock_14" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L8", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L398", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_1_context" + "source": "docs_nginx_scaling_plan_2_2_tooling", + "target": "docs_nginx_scaling_plan_codeblock_15" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L46", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L453", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_2_decision_design_a_pure_event_log_derive_at_read_time" + "source": "docs_nginx_scaling_plan_2_7_results_doc_layout", + "target": "docs_nginx_scaling_plan_codeblock_16" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L68", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L479", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_3_data_model_user_db_alembic" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_0_verified_ground_truth" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L131", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L496", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_4_derivations_all_at_read_time_date_order" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_1_target_topology" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L175", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L513", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_5_endpoints_wallet_on_the_user_port_via_walletservice_getcurrentuser_gate_inline_body_query" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_2_worker_container_extraction" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L203", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L530", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_6_live_prices_endpoint_only_isolation" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_3_nginx_upstream_evolution_validated_against_the_user_s_plan" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L235", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L551", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_7_validation_422_naming_the_rule_503_for_price_outages" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_4_todo_13_migration_drop_service_host_service_port" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L266", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L558", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_8_testing_quality_gates_precedents_to_honor" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_5_redis_exactly_two_jobs" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L287", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L574", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_9_scope" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_6_cache_strategy_across_boxes" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L302", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L580", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_10_splits_served_prices_are_raw_by_default_verified_verdict_encode_as_is" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_7_autoscaling_story_todo_11" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L326", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L585", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_11_dividends_no_dedicated_endpoint_verified_verdict_encode_as_is" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_8_forgevm_interplay_todo_12" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L364", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L589", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_12_corporate_actions_splits_and_grupamentos_via_one_read_time_mechanism" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_9_risk_register" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L403", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L609", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_13_dividend_methodology_ex_date_smoothing_check_both_branches_test_decides" + "source": "docs_nginx_scaling_plan_part_3_future_scaling_evolution_risks", + "target": "docs_nginx_scaling_plan_3_10_migration_sequence_verification" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L422", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L501", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_thoth_iyagba_wallet_management_design_spec", - "target": "specs_2026_09_04_wallet_design_spec_self_review" + "source": "docs_nginx_scaling_plan_3_1_target_topology", + "target": "docs_nginx_scaling_plan_codeblock_17" }, { "relation": "contains", "confidence": "EXTRACTED", - "source_file": "docs/superpowers/specs/2026-09-04-wallet-design.md", - "source_location": "L53", + "source_file": "docs/nginx-scaling-plan.md", + "source_location": "L534", "weight": 1.0, "confidence_score": 1.0, - "source": "specs_2026_09_04_wallet_design_2_decision_design_a_pure_event_log_derive_at_read_time", - "target": "specs_2026_09_04_wallet_design_approaches_considered" + "source": "docs_nginx_scaling_plan_3_3_nginx_upstream_evolution_validated_against_the_user_s_plan", + "target": "docs_nginx_scaling_plan_codeblock_18" }, { "relation": "calls", @@ -143721,5 +150482,5 @@ "label": "User Authentication & Authorization" } ], - "built_at_commit": "09a2310802f2d3b4d7f5f50af8e789acdcd23abf" + "built_at_commit": "e7ac74321e9dd166254cd676f1c5658310676ca5" } \ No newline at end of file diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json index be162447..2818a84b 100644 --- a/graphify-out/manifest.json +++ b/graphify-out/manifest.json @@ -10,8 +10,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\config.py": { - "mtime": 1790707412.4639857, - "ast_hash": "0431e47774260b291eafe77a2f44dd99", + "mtime": 1790720783.5089538, + "ast_hash": "6866a62e1361905e6966e7e3cdcb5cc8", "semantic_hash": "" }, "D:\\Repositories\\server\\run.py": { @@ -215,8 +215,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\authentication\\introspect.py": { - "mtime": 1790709776.485443, - "ast_hash": "c21d1ed541c25ba0e171b41535cf7926", + "mtime": 1790722324.1959848, + "ast_hash": "f9262c3f80a2b63e144914921d61bccb", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\authentication\\session.py": { @@ -230,7 +230,7 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\authentication\\util.py": { - "mtime": 1789365931.8706675, + "mtime": 1790721201.2744982, "ast_hash": "b797eff10d6300739b550248fe003dbf", "semantic_hash": "" }, @@ -240,8 +240,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\orunmila\\chat.py": { - "mtime": 1789627519.913642, - "ast_hash": "2c4bccbe66499695aae4ee9fdadbb9d0", + "mtime": 1790722281.0376277, + "ast_hash": "ab8f1f6abbe567f88d2e0c5a26b51e4a", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\orunmila\\compact.py": { @@ -280,8 +280,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\scraper_b3\\scraper.py": { - "mtime": 1790711328.3358188, - "ast_hash": "59c7a34a305a6e90f5e7b4daa8e295eb", + "mtime": 1790713506.6574717, + "ast_hash": "e7e449234b41094827a1bc2b43178561", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\scraper_b3\\xango.py": { @@ -290,28 +290,28 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\stocks_api\\cache.py": { - "mtime": 1789434714.8335533, - "ast_hash": "f483c0857c4d84c3561a456b168b958c", + "mtime": 1790724655.0228858, + "ast_hash": "388139c59bea2be15ee4f8b0c88ed5f0", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\stocks_api\\compress.py": { - "mtime": 1789365748.7463734, - "ast_hash": "bac7ddeafcf3f4e917d23e190f8d2a50", + "mtime": 1790724898.1914341, + "ast_hash": "5727624a2e4a0ff71d6712bc5a6a612d", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\stocks_api\\key.py": { - "mtime": 1790709776.4884515, - "ast_hash": "241906aeb4d9f2f1e013ffa469c3ae9c", + "mtime": 1790726217.7849143, + "ast_hash": "f7794d72a5abb5ac335b444be95ffd4e", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\stocks_api\\query.py": { - "mtime": 1789434788.4910736, - "ast_hash": "d8942fd6280c22db0c7000c0a129f55a", + "mtime": 1790715582.5629618, + "ast_hash": "c07116fa51c154d741c5c5fd01486714", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\stocks_api\\sync_cache.py": { - "mtime": 1789363755.282281, - "ast_hash": "2868edb52460fde88cc704901c64254c", + "mtime": 1790723901.4459727, + "ast_hash": "ccb5104dfcd8d85e68fb42602486f1a1", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\app\\stocks_api\\util.py": { @@ -325,8 +325,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\controller\\authentication_controller.py": { - "mtime": 1790712038.5117102, - "ast_hash": "b2b09061a10fe244011b26ecd589f50e", + "mtime": 1790721202.5567384, + "ast_hash": "8be9ba65e0116ce4ad4867fcc59bae50", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\controller\\orunmila_controller.py": { @@ -335,8 +335,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\controller\\stocksapi_controller.py": { - "mtime": 1789365824.939239, - "ast_hash": "deb972bc1e3fc058d2c8db97113f86a0", + "mtime": 1790723781.080048, + "ast_hash": "b9abf6a7b19fa64a64cc5d4386b15687", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\controller\\user_controller.py": { @@ -385,8 +385,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\main\\service\\authentication_service.py": { - "mtime": 1790712063.0129516, - "ast_hash": "2075ec61d0ef5be9a76db801df245f84", + "mtime": 1790720783.1180828, + "ast_hash": "2199185dd36046b7afa30557692a529a", "semantic_hash": "" }, "D:\\Repositories\\server\\main\\service\\orunmila_service.py": { @@ -545,8 +545,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\README.md": { - "mtime": 1789627715.7268107, - "ast_hash": "10c5689284ae6fc5ee634a3561ed5daa", + "mtime": 1790721188.6129105, + "ast_hash": "50718b7d5b427a75213e171f5da826f3", "semantic_hash": "" }, "D:\\Repositories\\server\\requirements.txt": { @@ -555,8 +555,8 @@ "semantic_hash": "" }, "D:\\Repositories\\server\\TODO.md": { - "mtime": 1789627348.434652, - "ast_hash": "d055f0d64aaf60f16c5d9601fe41743b", + "mtime": 1790726042.3421116, + "ast_hash": "0eafe0ff835b328c0ef66fdbe6e75100", "semantic_hash": "" }, "D:\\Repositories\\server\\docs\\authentication.md": { @@ -564,16 +564,6 @@ "ast_hash": "418f5a3a5d92e6afdd9a8867235bfa38", "semantic_hash": "" }, - "D:\\Repositories\\server\\docs\\investidor10-wallet-research.md": { - "mtime": 1790608792.5175328, - "ast_hash": "35046b81330a196719f10192cfd18245", - "semantic_hash": "" - }, - "D:\\Repositories\\server\\docs\\investidor10-wallet-spec.md": { - "mtime": 1790609352.4477687, - "ast_hash": "2245af87ca983eb3d0fec11daf0c3a87", - "semantic_hash": "" - }, "D:\\Repositories\\server\\docs\\orunmila.md": { "mtime": 1789627746.0334775, "ast_hash": "c92e378440f8ec322185c6c647fd7580", @@ -594,6 +584,31 @@ "ast_hash": "1441362ec9c24f3e04abfd6c913b8efe", "semantic_hash": "" }, + "D:\\Repositories\\server\\docs\\superpowers\\investidor10-wallet-research.md": { + "mtime": 1790722729.1475766, + "ast_hash": "350d3ac11cb57db7093fcbcfcebd423a", + "semantic_hash": "" + }, + "D:\\Repositories\\server\\docs\\superpowers\\investidor10-wallet-spec.md": { + "mtime": 1790722776.4594035, + "ast_hash": "5b5eb1d6eb186eebcc200bc3b4f8d77c", + "semantic_hash": "" + }, + "D:\\Repositories\\server\\docs\\superpowers\\nginx-scaling-plan.md": { + "mtime": 1790715847.5265036, + "ast_hash": "821d1ab64e7ea4f1a8903c26adcdffb8", + "semantic_hash": "" + }, + "D:\\Repositories\\server\\docs\\superpowers\\uvicorn-worker-scaling-plan.md": { + "mtime": 1790723409.2143178, + "ast_hash": "5bc55983f02c9f640b96fe2ade89e7d2", + "semantic_hash": "" + }, + "D:\\Repositories\\server\\docs\\superpowers\\benchmarks\\stocks-cache-ttl.md": { + "mtime": 1790725744.0210347, + "ast_hash": "02bdda14a198a7ce352314ec84cd36a6", + "semantic_hash": "" + }, "D:\\Repositories\\server\\docs\\superpowers\\plans\\2026-08-09-sse-resume.md": { "mtime": 1786286515.2616172, "ast_hash": "6dea783c1c379b193b0234febff9ed28", @@ -644,11 +659,36 @@ "ast_hash": "6bbe07e07379d48bbc77c0d367feedc7", "semantic_hash": "" }, + "D:\\Repositories\\server\\docs\\superpowers\\plans\\2026-09-29-nginx-response-cache.md": { + "mtime": 1790716965.7762914, + "ast_hash": "81c18d85ba503d04f69a56700b821fd8", + "semantic_hash": "" + }, + "D:\\Repositories\\server\\docs\\superpowers\\plans\\2026-09-29-stocks-cache-ttl.md": { + "mtime": 1790725620.1542468, + "ast_hash": "b7a877f2284007b51867458bf63f36c1", + "semantic_hash": "" + }, + "D:\\Repositories\\server\\docs\\superpowers\\plans\\2026-09-29-uvicorn-worker-scaling.md": { + "mtime": 1790723409.2183187, + "ast_hash": "d8b7c03ed6749dafb64c84757bd5a0e7", + "semantic_hash": "" + }, + "D:\\Repositories\\server\\docs\\superpowers\\plans\\2026-09-29-zerocopy-stocks-cache.md": { + "mtime": 1790713871.179236, + "ast_hash": "99973b0d3da44a0a7cbc01959fc8157a", + "semantic_hash": "" + }, "D:\\Repositories\\server\\docs\\superpowers\\specs\\2026-09-04-wallet-design.md": { "mtime": 1789266824.564381, "ast_hash": "3ad505fd6016388f87bd14fa8da4f40e", "semantic_hash": "" }, + "D:\\Repositories\\server\\docs\\superpowers\\specs\\2026-09-29-nginx-scaling-design.md": { + "mtime": 1790717689.797926, + "ast_hash": "9837810a532161e8b9ebcddf56af75f8", + "semantic_hash": "" + }, "D:\\Repositories\\server\\frontend\\index.html": { "mtime": 1785641936.6961534, "ast_hash": "7bbc5e5a7693a5828d34f9f4d7eb8125", diff --git a/main/app/authentication/introspect.py b/main/app/authentication/introspect.py index d5991fbd..85ad0a31 100644 --- a/main/app/authentication/introspect.py +++ b/main/app/authentication/introspect.py @@ -10,33 +10,31 @@ logger = logging.getLogger(__name__) -GENERIC_DETAIL = "Unauthorized" - def introspectToken(db: Session, token: str | None) -> dict: try: raw = (token or "").strip().removeprefix("Bearer ").strip() if not raw: - raise HTTPException(status_code=401, detail=GENERIC_DETAIL) + raise HTTPException(status_code=401, detail="Unauthorized") payload = verifyAccessToken(raw) try: userId = int(payload["userId"]) except (KeyError, TypeError, ValueError): - raise HTTPException(status_code=401, detail=GENERIC_DETAIL) + raise HTTPException(status_code=401, detail="Unauthorized") sessionId = payload.get("sessionId") if not sessionId or not SessionManager.validateSession(db, str(sessionId), userId): - raise HTTPException(status_code=401, detail=GENERIC_DETAIL) + raise HTTPException(status_code=401, detail="Unauthorized") user = db.query(User).filter(User.userId == userId).first() if not user: - raise HTTPException(status_code=401, detail=GENERIC_DETAIL) + raise HTTPException(status_code=401, detail="Unauthorized") return {"userId": user.userId, "username": user.username, "roles": UserManager.getRolesList(user)} except HTTPException: - raise HTTPException(status_code=401, detail=GENERIC_DETAIL) + raise HTTPException(status_code=401, detail="Unauthorized") except Exception as e: logger.warning(f"Token introspection failed: {e}") - raise HTTPException(status_code=401, detail=GENERIC_DETAIL) + raise HTTPException(status_code=401, detail="Unauthorized") diff --git a/main/app/stocks_api/cache.py b/main/app/stocks_api/cache.py index 07fa62b4..17d8d41d 100644 --- a/main/app/stocks_api/cache.py +++ b/main/app/stocks_api/cache.py @@ -23,6 +23,7 @@ from typing import Any from main.utils.scheduler import registerJob +from main.app.stocks_api import compress, sync_cache fcntl: Any = None if sys.platform != "win32": @@ -248,9 +249,8 @@ def loadFromFeather(self): self.nestedSample = nestedSample self.lastCacheUpdate = datetime.now(timezone.utc) - from main.app.stocks_api.compress import rebuildAbbrevs - - rebuildAbbrevs() + compress.rebuildAbbrevs() + sync_cache.clearEndpointCache() logger.info(f"Stocks cache loaded from feather ({len(df)} records, {len(newTickerIndex)} tickers)") diff --git a/main/app/stocks_api/compress.py b/main/app/stocks_api/compress.py index 09e38738..4d1374b8 100644 --- a/main/app/stocks_api/compress.py +++ b/main/app/stocks_api/compress.py @@ -4,7 +4,7 @@ from functools import lru_cache from typing import Any -from main.app.stocks_api.cache import stocksCache +from main.app.stocks_api import cache from main.app.stocks_api.util import generateAbbreviations, categorizeColumns, detectNestedFields PRICE = { @@ -21,18 +21,18 @@ @lru_cache(maxsize=1) def getAbbr() -> dict: - if stocksCache.STOCKS_CACHE is not None: - h, f = categorizeColumns(stocksCache.STOCKS_CACHE.columns.tolist()) + if cache.stocksCache.STOCKS_CACHE is not None: + h, f = categorizeColumns(cache.stocksCache.STOCKS_CACHE.columns.tolist()) return generateAbbreviations(h, f) return {"meta": {"TICKER": "TK", "NOME": "NM", "TIME": "TI"}, "historical": {}, "fundamental": {}} @lru_cache(maxsize=1) def getNest() -> dict: - if stocksCache.STOCKS_CACHE is not None: - nest = detectNestedFields(stocksCache.STOCKS_CACHE) - if stocksCache.nestedSample is not None: - for col, info in detectNestedFields(stocksCache.nestedSample).items(): + if cache.stocksCache.STOCKS_CACHE is not None: + nest = detectNestedFields(cache.stocksCache.STOCKS_CACHE) + if cache.stocksCache.nestedSample is not None: + for col, info in detectNestedFields(cache.stocksCache.nestedSample).items(): nest.setdefault(col, info) return nest return {} diff --git a/main/app/stocks_api/key.py b/main/app/stocks_api/key.py index 6c4c5d56..a939bab1 100644 --- a/main/app/stocks_api/key.py +++ b/main/app/stocks_api/key.py @@ -15,12 +15,6 @@ apiKeyHeader = APIKeyHeader(name="X-API-Key", auto_error=False) -UNAUTHORIZED_DETAIL = "Unauthorized" -QUOTA_DETAIL = "Too many requests" - -SALT_BYTES = 16 -_STORED_SEP = "$" - def hashApiKey(rawKey: str, saltHex: str) -> str: return hashlib.sha256((saltHex + rawKey).encode()).hexdigest() @@ -28,15 +22,15 @@ def hashApiKey(rawKey: str, saltHex: str) -> str: def createStoredApiKey(rawKey: str | None = None) -> tuple[str, str]: raw = rawKey or secrets.token_urlsafe(32) - saltHex = secrets.token_hex(SALT_BYTES) - return raw, f"{saltHex}{_STORED_SEP}{hashApiKey(raw, saltHex)}" + saltHex = secrets.token_hex(16) + return raw, f"{saltHex}{'$'}{hashApiKey(raw, saltHex)}" def isValidStoredKey(providedKey: str, storedKey: str | None) -> bool: try: - if not providedKey or not storedKey or _STORED_SEP not in storedKey: + if not providedKey or not storedKey or "$" not in storedKey: return False - saltHex, digest = storedKey.split(_STORED_SEP, 1) + saltHex, digest = storedKey.split("$", 1) if not saltHex or not digest: return False candidate = hashlib.sha256((saltHex + providedKey).encode()).hexdigest() @@ -50,7 +44,7 @@ async def verifyAPIKey(apiKey: str = Depends(apiKeyHeader), db: Session = Depend return None if not apiKey: - raise HTTPException(status_code=401, detail=UNAUTHORIZED_DETAIL) + raise HTTPException(status_code=401, detail="Unauthorized") try: # ponytail: full-table scan, move to server-side salted lookup if keys table grows large @@ -66,8 +60,8 @@ async def verifyAPIKey(apiKey: str = Depends(apiKeyHeader), db: Session = Depend if matchedPk is None: if exhaustedMatch: - raise HTTPException(status_code=429, detail=QUOTA_DETAIL) - raise HTTPException(status_code=401, detail=UNAUTHORIZED_DETAIL) + raise HTTPException(status_code=429, detail="Too many requests") + raise HTTPException(status_code=401, detail="Unauthorized") result = db.execute( update(StocksAPIKey) @@ -78,7 +72,7 @@ async def verifyAPIKey(apiKey: str = Depends(apiKeyHeader), db: Session = Depend db.commit() if cast(CursorResult, result).rowcount == 0: - raise HTTPException(status_code=429, detail=QUOTA_DETAIL) + raise HTTPException(status_code=429, detail="Too many requests") return apiKey diff --git a/main/app/stocks_api/sync_cache.py b/main/app/stocks_api/sync_cache.py index f625175c..fd7e11fc 100644 --- a/main/app/stocks_api/sync_cache.py +++ b/main/app/stocks_api/sync_cache.py @@ -32,3 +32,8 @@ async def cachedCall() -> Any: return wrapper # type: ignore[return-value] return decorator + + +def clearEndpointCache() -> None: + """Drop every cached endpoint body — called when the feather frame is replaced.""" + asyncio.run(cashewsCache.clear()) diff --git a/main/controller/stocksapi_controller.py b/main/controller/stocksapi_controller.py index 8bdfea9e..135f48a5 100644 --- a/main/controller/stocksapi_controller.py +++ b/main/controller/stocksapi_controller.py @@ -16,6 +16,11 @@ cache.setup("mem://") +STOCKS_TTL = "6h" +STOCKS_MAX_AGE = 6 * 3600 +LIVE_TTL = "15s" +LIVE_MAX_AGE = 15 + router = APIRouter(prefix="/stocks", tags=["Stocks API"]) @@ -35,7 +40,8 @@ def health(): @router.get("/fields", operation_id="list_fields") -def listFields(): +@endpointCache(ttl=STOCKS_TTL, key="stocks:fields") +def listFields(response: Response): """Discover available field names before querying /historical or /fundamental. IMPORTANT: Call this tool FIRST to get exact field names. Do NOT guess field names — @@ -77,11 +83,12 @@ def listFields(): abbreviations = generateAbbreviations(historical, fundamental) nested = getNest() + response.headers["Cache-Control"] = f"public, max-age={STOCKS_MAX_AGE}" return {"historical": historical, "fundamental": fundamental, "abbreviations": abbreviations, "nested": nested} @router.get("/historical", operation_id="get_historical", response_class=ORJSONResponse) -@endpointCache(ttl="1h", key="stocks:historical:{search}:{fields}:{dates}:{orderBy}:{limit}:{compact}") +@endpointCache(ttl=STOCKS_TTL, key="stocks:historical:{search}:{fields}:{dates}:{orderBy}:{limit}:{compact}") def getHistorical( response: Response, search: str = Query(None, max_length=3780, pattern=r"^[A-Za-z0-9,\s]*$"), @@ -138,7 +145,7 @@ def getHistorical( - Get PETR4 net income 2022-2024: search="PETR4", fields="LUCRO LIQUIDO", dates="2022,2024" - Get all revenue data for VALE3: search="VALE3", fields="RECEITA LIQUIDA" - Compare top 10 by EBITDA: fields="EBITDA", orderBy="EBITDA", limit=10""" - response.headers["Cache-Control"] = "public, max-age=300" + response.headers["Cache-Control"] = f"public, max-age={STOCKS_MAX_AGE}" result = queryHistorical(search, fields, dates, orderBy, limit) if compact: result = compressResponse(result, "get_historical", {"search": search, "fields": fields, "dates": dates}) @@ -146,7 +153,7 @@ def getHistorical( @router.get("/fundamental", operation_id="get_fundamental", response_class=ORJSONResponse) -@endpointCache(ttl="5m", key="stocks:fundamental:{search}:{fields}:{dates}:{orderBy}:{limit}:{compact}") +@endpointCache(ttl=STOCKS_TTL, key="stocks:fundamental:{search}:{fields}:{dates}:{orderBy}:{limit}:{compact}") def getFundamental( response: Response, search: str = Query(None, max_length=3780, pattern=r"^[A-Za-z0-9,\s]*$"), @@ -208,7 +215,7 @@ def getFundamental( - Get all stocks' dividend yield latest: fields="DY" - Compare P/L across tickers: search="PETR4,VALE3,ITUB4", fields="P/L", orderBy="P/L" - Q1 2024 fundamental snapshot: fields="P/L,ROE", dates="2024-01-01,2024-03-31" """ - response.headers["Cache-Control"] = "public, max-age=300" + response.headers["Cache-Control"] = f"public, max-age={STOCKS_MAX_AGE}" result = queryFundamental(search, fields, dates, orderBy, limit) if compact: result = compressResponse(result, "get_fundamental", {"search": search, "fields": fields, "dates": dates}) @@ -216,7 +223,7 @@ def getFundamental( @router.get("/cotations", operation_id="get_cotations", response_class=ORJSONResponse) -@endpointCache(ttl="5m", key="stocks:cotations:{search}:{dates}:{adjusted}:{compact}") +@endpointCache(ttl=STOCKS_TTL, key="stocks:cotations:{search}:{dates}:{adjusted}:{compact}") def getCotations( response: Response, search: str = Query(..., min_length=1, max_length=3780, pattern=r"^[A-Za-z0-9,\s]*$"), @@ -264,7 +271,7 @@ def getCotations( - Get PETR4 full price history: search="PETR4" - Get PETR4 + VALE3 2023 prices: search="PETR4,VALE3", dates="2023-01-01,2023-12-31" - Get inflation-adjusted prices: search="ITUB4", adjusted=true""" - response.headers["Cache-Control"] = "public, max-age=300" + response.headers["Cache-Control"] = f"public, max-age={STOCKS_MAX_AGE}" result = queryCotations(search, dates, adjusted) if compact: result = compressResponse(result, "get_cotations", {"search": search, "dates": dates}) @@ -272,7 +279,7 @@ def getCotations( @router.get("/cotations/live", operation_id="get_live_price", response_class=ORJSONResponse) -@endpointCache(ttl="15s", key="stocks:live:{search}:{compact}") +@endpointCache(ttl=LIVE_TTL, key="stocks:live:{search}:{compact}") def getLiveCotation( response: Response, search: str = Query(..., min_length=1, max_length=7, pattern=r"^[A-Za-z0-9,\s]*$"), @@ -309,7 +316,7 @@ def getLiveCotation( - Only one ticker per request (max 7 chars for the search param). - Real-time data is only available during B3 market hours (10:00-17:30 BRT). - Outside market hours, returns the last available closing price.""" - response.headers["Cache-Control"] = "public, max-age=15" + response.headers["Cache-Control"] = f"public, max-age={LIVE_MAX_AGE}" result = queryLiveCotation(search) if compact: result = compressResponse(result, "get_live_price", {"search": search}) diff --git a/tests/test_stocks_api_cache_ttl.py b/tests/test_stocks_api_cache_ttl.py new file mode 100644 index 00000000..4ad743ab --- /dev/null +++ b/tests/test_stocks_api_cache_ttl.py @@ -0,0 +1,102 @@ +import asyncio +import re +from pathlib import Path +from types import SimpleNamespace + +import pandas as pd +import pytest +import pytest_asyncio +from cashews import cache as cashewsCache +from fastapi import Response + +from main.app.stocks_api import cache as cache_mod +from main.app.stocks_api.cache import STALE_AFTER_SECONDS +from main.controller import stocksapi_controller as mod + + +def _seconds(ttl: str) -> int: + match = re.fullmatch(r"(\d+)([smhd])", ttl) + assert match, f"unparseable ttl: {ttl}" + value, unit = match.groups() + return int(value) * {"s": 1, "m": 60, "h": 3600, "d": 86400}[unit] + + +def test_long_endpoints_share_one_six_hour_constant(): + assert mod.STOCKS_TTL == "6h" + assert _seconds(mod.STOCKS_TTL) == 6 * 3600 + + +def test_cache_control_max_age_matches_the_decorator_ttl(): + assert mod.STOCKS_MAX_AGE == _seconds(mod.STOCKS_TTL) + assert mod.LIVE_MAX_AGE == _seconds(mod.LIVE_TTL) + + +def test_endpoint_ttl_never_exceeds_the_staleness_policy(): + assert _seconds(mod.STOCKS_TTL) <= STALE_AFTER_SECONDS + + +def test_live_ttl_is_not_widened(): + assert mod.LIVE_TTL == "15s" + + +@pytest_asyncio.fixture(scope="module", loop_scope="module", autouse=True) +async def setup_cache(): + cashewsCache.setup("mem://") + yield + await cashewsCache.clear() + + +def _flush(): + asyncio.run(cashewsCache.clear()) + + +def test_fields_second_call_is_a_cache_hit(monkeypatch): + _flush() + calls = [] + + def fakeCategorize(cols): + calls.append(tuple(cols)) + return {"A": [2024]}, ["P/L"] + + monkeypatch.setattr(mod, "categorizeColumns", fakeCategorize) + monkeypatch.setattr(mod, "generateAbbreviations", lambda historical, fundamental: {"A": "A"}) + monkeypatch.setattr(mod, "getNest", lambda: {}) + monkeypatch.setattr(mod, "stocksCache", SimpleNamespace(STOCKS_CACHE=pd.DataFrame({"TICKER": ["PETR4"]}))) + + response = Response() + first = mod.listFields(response) + second = mod.listFields(Response()) + + assert first == second + assert calls == [("TICKER",)] # computed once; the second call is a cache hit + assert response.headers["Cache-Control"] == f"public, max-age={mod.STOCKS_MAX_AGE}" + + +def test_fields_503_is_not_cached(monkeypatch): + _flush() + monkeypatch.setattr(mod, "stocksCache", SimpleNamespace(STOCKS_CACHE=None)) + + for _ in range(2): + with pytest.raises(mod.HTTPException) as exc: + mod.listFields(Response()) + assert exc.value.status_code == 503 + + +def test_feather_reload_drops_cached_bodies(monkeypatch): + _flush() + asyncio.run(cashewsCache.set("stocks:fields", {"probe": True}, expire=3600)) + assert asyncio.run(cashewsCache.get("stocks:fields", default=None)) == {"probe": True} + + # keep the reload cheap: no real feather file, no abbreviation rebuild + monkeypatch.setattr(cache_mod, "readFeatherDataFrame", lambda path: (pd.DataFrame({"TICKER": ["PETR4"]}), True)) + monkeypatch.setattr(cache_mod, "CACHE_NESTED_PATH", Path("missing.feather")) + monkeypatch.setattr("main.app.stocks_api.compress.rebuildAbbrevs", lambda: None) + + manager = cache_mod.stocksCache + saved = (manager.STOCKS_CACHE, manager.tickerIndex, manager.nestedSample, manager.lastCacheUpdate) + try: + manager.loadFromFeather() + finally: + manager.STOCKS_CACHE, manager.tickerIndex, manager.nestedSample, manager.lastCacheUpdate = saved + + assert asyncio.run(cashewsCache.get("stocks:fields", default=None)) is None